From 24f7e469fa67b15633ccb377b95e3d81f50060e2 Mon Sep 17 00:00:00 2001 From: liuyc20 Date: Tue, 17 Aug 2021 20:04:16 +0800 Subject: [PATCH] DLKM: Update SD77426 driver fix the DUT crash when insmod sd77426_fg_mmi.ko splite the calcuate from bmulib.c the rsense modify to 10 Change-Id: Id6a13b510fa66ebf6d56169a76708f797ef6af7d Signed-off-by: liuyc20 Reviewed-on: https://gerrit.mot.com/2044031 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/power/sd77426_fg_mmi/Kbuild | 1 + drivers/power/sd77426_fg_mmi/battery_config.h | 2 +- drivers/power/sd77426_fg_mmi/bmulib.c | 3395 +++++++++++++++++ drivers/power/sd77426_fg_mmi/bmulib.o | Bin 411336 -> 0 bytes drivers/power/sd77426_fg_mmi/calculate.o | Bin 0 -> 219736 bytes drivers/power/sd77426_fg_mmi/oz8806_battery.c | 158 +- drivers/power/sd77426_fg_mmi/parameter.c | 1 + drivers/power/sd77426_fg_mmi/parameter.h | 63 +- 8 files changed, 3514 insertions(+), 106 deletions(-) create mode 100644 drivers/power/sd77426_fg_mmi/bmulib.c delete mode 100644 drivers/power/sd77426_fg_mmi/bmulib.o create mode 100644 drivers/power/sd77426_fg_mmi/calculate.o diff --git a/drivers/power/sd77426_fg_mmi/Kbuild b/drivers/power/sd77426_fg_mmi/Kbuild index fe11c32b0770..f2f6f48cae74 100644 --- a/drivers/power/sd77426_fg_mmi/Kbuild +++ b/drivers/power/sd77426_fg_mmi/Kbuild @@ -7,4 +7,5 @@ sd77426_fg_mmi-objs += oz8806_battery.o sd77426_fg_mmi-objs += parameter.o sd77426_fg_mmi-objs += table.o sd77426_fg_mmi-objs += bmulib.o +sd77426_fg_mmi-objs += calculate.o obj-m += sd77426_fg_mmi.o diff --git a/drivers/power/sd77426_fg_mmi/battery_config.h b/drivers/power/sd77426_fg_mmi/battery_config.h index 63595b5f8f36..4c72680a8326 100644 --- a/drivers/power/sd77426_fg_mmi/battery_config.h +++ b/drivers/power/sd77426_fg_mmi/battery_config.h @@ -25,7 +25,7 @@ #define OZ8806_VOLTAGE 4350 #define O2_CONFIG_CAPACITY 5158 -#define O2_CONFIG_RSENSE 20 +#define O2_CONFIG_RSENSE 10000 //Expanded 1000 times #define O2_CONFIG_EOC 200 #define OZ8806_EOD 3400 #define O2_CONFIG_BOARD_OFFSET 12 diff --git a/drivers/power/sd77426_fg_mmi/bmulib.c b/drivers/power/sd77426_fg_mmi/bmulib.c new file mode 100644 index 000000000000..e5213096f3da --- /dev/null +++ b/drivers/power/sd77426_fg_mmi/bmulib.c @@ -0,0 +1,3395 @@ +/***************************************************************************** +* Copyright(c) O2Micro, 2019. All rights reserved. +* +* O2Micro [OZ8806] Source Code Reference Design +* File:[bmulib.c] +* +* This Source Code Reference Design for O2MICRO [OZ8806] access +* ("Reference Design") is solely for the use of PRODUCT INTEGRATION REFERENCE ONLY, +* and contains confidential and privileged information of O2Micro International +* Limited. O2Micro shall have no liability to any PARTY FOR THE RELIABILITY, +* SERVICEABILITY FOR THE RESULT OF PRODUCT INTEGRATION, or results from: (i) any +* modification or attempted modification of the Reference Design by any party, or +* (ii) the combination, operation or use of the Reference Design with non-O2Micro +* Reference Design. Use of the Reference Design is at user's discretion to qualify +* the final work result. +*****************************************************************************/ + + +/**************************************************************************************** + +****************************************************************************************/ +#include +#include +#include + +#include +#include + +#include + +#include "parameter.h" +#include "oz8806_regdef.h" +#include "table.h" + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/***************************************************************************** +* Define section +* add all #define here +*****************************************************************************/ + +//#define FCC_UPDATA_CHARGE + +#define VERSION "2021.08.12/7.00.06 disable otp and expand rsense" +#define charge_step parameter->charge_pursue_step +#define discharge_step parameter->discharge_pursue_step +#define discharge_th parameter->discharge_pursue_th +#define config_data parameter->config + +#define RETRY_CNT 8 + +#define FORCE_OTP_MAPPING 0 + + + + + +#define SHUTDOWN_HI 50 +#define SHUTDOWN_TH1 100 +#define SHUTDOWN_TH2 300 + +#define CHARGE_END_CURRENT2 (config_data->charge_end_current +2) + +#define FCC_UPPER_LIMIT 100 +//#define FCC_LOWER_LIMIT 80 +#define FCC_LOWER_LIMIT 70 //for lianxiang + + + +#define charge_full_voltage (config_data->charge_cv_voltage - 26) +//#define full_charge_data (gas_gauge->fcc_data + config_data->design_capacity / 100 - 1) +#define full_charge_data (gas_gauge->fcc_data + gas_gauge->fcc_data / 100 - 1) +//#define full_charge_data gas_gauge->fcc_data + 2 + +#define MAX_EOD_TIME (60 * 9) //H7 add timer full +#define MAX_SUSPEND_CURRENT (-45) //H7 add wakup CAR range check, max suspend current +#define MAX_SUSPEND_CONSUME (MAX_SUSPEND_CURRENT*10/36) //H7 add wakup CAR range check, max suspend consumption(1000*mah) +#define MAX_SUSPEND_CHARGE (1800*10/36)//H7 add wakup CAR range check, max suspend charge(1000*mah) + + + + +#define ABS(a, b) ((a>b)?(a-b):(b-a)) + + + +/***************************************************************************** +* static variables section +****************************************************************************/ +static unsigned long bmu_kernel_memaddr; + bmu_data_t *batt_info; + gas_gauge_t *gas_gauge; + parameter_data_t parameter_customer; + parameter_data_t *parameter; + + int *rc_table; + int *xaxis_table; + int *yaxis_table; + int *zaxis_table; + + int32_t calculate_mah = 0; + int32_t calculate_soc = 0; +static int car_error = 0; + +static char * BATT_CAPACITY= NULL;//"/data/sCaMAH.dat"; +static char * BATT_FCC = NULL;//"/data/fcc.dat"; +static char * OCV_FLAG = NULL;//"/data/ocv_flag.dat"; +static char * BATT_OFFSET = NULL;//"/data/offset.dat"; + +static uint8_t oz8806_pec_check = 0; +static uint8_t oz8806_cell_num = 1; +static int32_t res_divider_ratio = 2000; +static uint8_t charge_end_flag = 0; + + + + int32_t one_percent_rc = 0; +//static uint8_t wait_dc_charger= 0; +//static uint8_t wait_voltage_end = 0; + +static uint8_t wait_ocv_flag = 0; +//static uint8_t wait_ocv_times = 0; + +//uint8_t enable_fast_catch_oinom = 0; +//static uint8_t oz8806_in_suspend = 0; + +//static uint8_t start_chg_count_flag = 0; + uint8_t battery_ri = 100; + +//static uint8_t charge_end = 0; +//static uint8_t charge_fcc_update = 0; +//static uint8_t discharge_fcc_update = 0; + +static uint8_t power_on_flag = 0; +//static uint8_t write_offset = 0; +//static uint8_t check_offset_flag = 0; + +static uint8_t bmu_sleep_flag = 0; +static int32_t fRSOC_PRE; + +static uint8_t discharge_end_flag = 0; +static uint8_t sleep_ocv_flag = 0; + +//static struct timex time_x; +//static struct rtc_time rtc_time; + + + +static uint32_t previous_loop_timex = 0; + +static uint8_t set_soc_from_ext = 0; +static int32_t soc_external = -1; +static uint8_t file_not_ok_cap = 30; +static uint8_t fix_car_init = 0; +static uint8_t bmu_sys_rw_kernel = 1; +static int8_t power_on_retry_times = 4; + +static uint8_t retry_times = 0; +static uint8_t calculate_times = 0; +static uint8_t times = 0; +static uint32_t time_sec = 0; + +uint8_t check_chip_function = 1; +/****************************************************************************** +* Function prototype section +* add prototypes for all functions called by this file,execepting those +* declared in header file +*****************************************************************************/ + +static void oz8806_over_flow_prevent(void); +//static void check_pec_control(void); + +static int32_t afe_register_read_byte(uint8_t index, uint8_t *dat); +static int32_t afe_register_write_byte(uint8_t index, uint8_t dat); +static int32_t afe_register_read_word(uint8_t index, uint16_t *dat); +//static int32_t afe_register_write_word(uint8_t index, uint16_t dat); + +//static int32_t afe_read_cell_volt(int32_t *voltage); +static int32_t afe_read_ocv_volt(int32_t *voltage); +//static int32_t afe_read_current(int32_t *dat); +static int32_t afe_read_car(int32_t *dat); +static int32_t afe_write_car(int32_t dat); +static int32_t afe_read_cell_temp(int32_t *date); +static int32_t afe_read_board_offset(int32_t *dat); +static int32_t afe_write_board_offset(int32_t date); + +static int32_t oz8806_read_byte( uint8_t index); +static int32_t oz8806_write_byte( uint8_t index, uint8_t data); +static int32_t oz8806_read_word(uint8_t index); +static int32_t oz8806_write_word( uint8_t index, uint16_t data); +static int32_t oz8806_cell_voltage_read(int32_t *voltage); +static int32_t oz8806_ocv_voltage_read(int32_t *voltage); +//static int32_t oz8806_temp_read(int32_t *voltage); +static int32_t oz8806_current_read(int32_t *data); +static int32_t oz8806_car_read(int32_t *car); +static int32_t oz8806_car_write(int32_t data); +static uint8_t pec_calculate (uint8_t ucCrc, uint8_t ucData); +//static int32_t oz8806_write_byte_pec(uint8_t index, uint8_t data); +//static int bmu_check_file(char * address); +static int bmu_write_data(char * address,int data); +static int bmu_read_data(char * address); +//static int bmu_write_string(char * address,char * data); +static void bmu_wait_ready(void); +//static int32_t i2c_read_byte(uint8_t addr,uint8_t index,uint8_t *data); +//static int32_t i2c_write_byte(uint8_t addr,uint8_t index,uint8_t data); +static void check_oz8806_staus(void); + +//static void discharge_end_process(void); +//static void charge_end_process(void); +static void check_board_offset(void); +static void check_shutdwon_voltage(void); + +static void trim_bmu_VD23(void); + + + +//static int32_t oz8806_write_byte_pec(uint8_t addr,uint8_t index, uint8_t data); + +void bmu_init_parameter_more(parameter_data_t *paramter_temp) +{ + if (paramter_temp->BATT_CAPACITY) + BATT_CAPACITY = paramter_temp->BATT_CAPACITY; + + if (paramter_temp->BATT_FCC) + BATT_FCC = paramter_temp->BATT_FCC; + + if (paramter_temp->OCV_FLAG) + OCV_FLAG = paramter_temp->OCV_FLAG; + + if (paramter_temp->BATT_OFFSET) + BATT_OFFSET = paramter_temp->BATT_OFFSET; + + if (paramter_temp->oz8806_cell_num) + oz8806_cell_num = paramter_temp->oz8806_cell_num; + + if (paramter_temp->res_divider_ratio) + res_divider_ratio = paramter_temp->res_divider_ratio; + + if (paramter_temp->file_not_ok_cap) + file_not_ok_cap = paramter_temp->file_not_ok_cap; + + if (paramter_temp->set_soc_from_ext) + set_soc_from_ext = paramter_temp->set_soc_from_ext; + + if (paramter_temp->fix_car_init) + fix_car_init = paramter_temp->fix_car_init; + + // if (paramter_temp->power_on_retry_times) + power_on_retry_times = paramter_temp->power_on_retry_times; + + if (!paramter_temp->bmu_sys_rw_kernel) + bmu_sys_rw_kernel = paramter_temp->bmu_sys_rw_kernel; + + //pr_err("%s\n%s\n%s\n%s\n", BATT_CAPACITY, BATT_FCC, OCV_FLAG, BATT_OFFSET); + pr_err("oz8806_cell_num:%d, res_divider_ratio: %d,file_not_ok_cap:%d, set_soc_from_ext: %d, fix_car_init:%d,power_on_retry_times:%d, bmu_sys_rw_kernel:%d\n", + oz8806_cell_num, res_divider_ratio,file_not_ok_cap, set_soc_from_ext, fix_car_init,power_on_retry_times, bmu_sys_rw_kernel); +} +/***************************************************************************** + * Description: + * bmu init chip + * Parameters: + * used to init bmu + * Return: + * None + *****************************************************************************/ + void bmu_init_chip(parameter_data_t *paramter_temp) +{ + + int32_t ret; + //uint16_t value; + uint8_t i; + int32_t data; + uint8_t * addr; + config_data_t * config_test; + uint32_t byte_num = num_0; + + byte_num = sizeof(config_data_t) + sizeof(bmu_data_t) + sizeof(gas_gauge_t); + + memset((uint8_t *)bmu_kernel_memaddr,num_0,byte_num); + + parameter = paramter_temp; + addr = (uint8_t *)(parameter->config); + for(byte_num = num_0;byte_num < sizeof(config_data_t);byte_num++) + { + *((uint8_t *)bmu_kernel_memaddr + byte_num) = *addr++; + } + + config_test = (config_data_t *)bmu_kernel_memaddr; + + batt_info = (bmu_data_t *)((uint8_t *)bmu_kernel_memaddr + byte_num); + + //-------------------------------------------------------------------------------------------------- + batt_info->Battery_ok = 1; + batt_info->i2c_error_times = num_0; + + byte_num += sizeof(bmu_data_t); + + gas_gauge = (gas_gauge_t *)((uint8_t *)bmu_kernel_memaddr + byte_num); + byte_num += sizeof(gas_gauge_t); + //-------------------------------------------------------------------------------------------------- + gas_gauge->bmu_init_ok = 0; + gas_gauge->charge_end = num_0; + gas_gauge->charge_end_current_th2 = CHARGE_END_CURRENT2; + gas_gauge->charge_strategy = 1; + gas_gauge->charge_max_ratio = 3500; + //gas_gauge->charge_max_ratio = 10000; // for lianxiang + + + gas_gauge->discharge_end = num_0; + gas_gauge->discharge_current_th = DISCH_CURRENT_TH; + gas_gauge->discharge_strategy = 1; + gas_gauge->discharge_max_ratio = 8000; // for lianxiang + + gas_gauge->dsg_end_voltage_hi = SHUTDOWN_HI; + + gas_gauge->batt_ri = 120; // charging. It is related to voltage when full charging condition. + gas_gauge->line_impedance = 0; //charging + gas_gauge->max_chg_reserve_percentage = 1000; + gas_gauge->fix_chg_reserve_percentage = 0; + gas_gauge->fast_charge_step = 2; + gas_gauge->start_fast_charge_ratio = 1500; + gas_gauge->charge_method_select = 0; + gas_gauge->max_charge_current_fix = 2000; + + //add this for oinom, start + gas_gauge->lower_capacity_reserve = 0; + gas_gauge->lower_capacity_soc_start =30; + + gas_gauge->percent_10_reserve = 0; + //add this for oinom, end + + //this for test gas gaugue + if(parameter->config->debug) + gas_gauge->dsg_end_voltage_hi = 0; + gas_gauge->dsg_end_voltage_th1 = SHUTDOWN_TH1; + gas_gauge->dsg_end_voltage_th2 = SHUTDOWN_TH2; + gas_gauge->dsg_count_2 = num_0; + + gas_gauge->overflow_data = num_32768 * num_5 * 1000 / config_data->fRsense; + bmu_dbg("yyyy gas_gauge->overflow_data is %d\n",gas_gauge->overflow_data); + + bmu_init_gg(gas_gauge); + + //-------------------------------------------------------------------------------------------------- +#ifdef OZ8806_API + //bmu_init_charge_data(((uint8_t *)bmu_kernel_memaddr + byte_num), 4*gas_gauge->charge_table_num* 2); + //byte_num += 4 * gas_gauge->charge_table_num * 2; + + xaxis_table = (int *)((uint8_t *)bmu_kernel_memaddr + byte_num); + bmu_init_XAxisElement(((uint8_t *)bmu_kernel_memaddr + byte_num), 4*gas_gauge->rc_x_num ); + byte_num += 4*gas_gauge->rc_x_num ; + + yaxis_table = (int *)((uint8_t *)bmu_kernel_memaddr + byte_num); + bmu_init_YAxisElement(((uint8_t *)bmu_kernel_memaddr + byte_num), 4*gas_gauge->rc_y_num); + byte_num += 4*gas_gauge->rc_y_num; + + zaxis_table = (int *)((uint8_t *)bmu_kernel_memaddr + byte_num); + bmu_init_ZAxisElement(((uint8_t *)bmu_kernel_memaddr + byte_num), 4*gas_gauge->rc_z_num); + byte_num += 4*gas_gauge->rc_z_num; + + rc_table = (int *)((uint8_t *)bmu_kernel_memaddr + byte_num); + bmu_init_RCtable(((uint8_t *)bmu_kernel_memaddr + byte_num), 4*gas_gauge->rc_x_num *gas_gauge->rc_y_num*gas_gauge->rc_z_num); + byte_num += 4*gas_gauge->rc_x_num *gas_gauge->rc_y_num*gas_gauge->rc_z_num; + +#else + + bmu_init_table(&xaxis_table, &yaxis_table, &zaxis_table, &rc_table); + +#endif + + pr_err("byte_num is %d\n",byte_num); + + power_on_flag = num_0; + bmu_sleep_flag = num_0; + + one_percent_rc = config_data->design_capacity / num_100; + + pr_err("AAAA O2MICRO OZ8806 DRIVER VERSION is %s\n",VERSION); + + pr_err("OZ8806 test parameter:Rsense:%d, RTempPullup:%d, VTempRef:%d, CarLSB:%d, CurLSB:%d, VolLSB:%d, FCC:%d, CV:%d, EOC:%d, EOD:%d, BoardOffset:%d, Debug:%d\n", + config_test->fRsense, + config_test->temp_pull_up, + config_test->temp_ref_voltage, + config_test->dbCARLSB, + config_test->dbCurrLSB, + config_test->fVoltLSB, + config_test->design_capacity, + config_test->charge_cv_voltage, + config_test->charge_end_current, + config_test->discharge_end_voltage, + config_test->board_offset, + config_test->debug + + ); + + //check_pec_control(); + //move check_oz8806_status here to avoid iic-commu-issue + check_oz8806_staus(); + trim_bmu_VD23(); + /* + * board offset current is measured and reg0x18 value is updated only + * after reset(power on reset or software reset), + */ + if (oz8806_get_boot_up_time() < 625) + { + pr_err("AAAA wait for current offset detection\n"); + msleep(625 - oz8806_get_boot_up_time()); + afe_register_read_word(OZ8806_OP_BOARD_OFFSET,(uint16_t *)&data); + } + + bmu_dbg("AAAAAAAAAAAAA Register BOARD_OFFSET: 0x%02x\n",data); + + ret = afe_read_board_offset(&data); + pr_err("AAAA board_offset is %d mA\n",data); + + + if(ret >= num_0) + { + + if(config_data->board_offset != num_0) + { + afe_write_board_offset(config_data->board_offset); + } + else if((data > num_10) || (data <= num_0)) + afe_write_board_offset(num_7); + } + + //wake up OZ8806 into FullPower mode + + pr_err("oz8806_cell_num is %d\n",oz8806_cell_num); + + if(oz8806_cell_num > num_1) + afe_register_write_byte(OZ8806_OP_CTRL,num_0x2c); + else + afe_register_write_byte(OZ8806_OP_CTRL,num_0x20); + + ret = afe_register_read_byte(OZ8806_OP_CTRL,&i); + pr_err("first read reg[0x09]= 0x%02x, ret = %d\n", i, ret); + + if((i & num_0x40) || (ret < num_0)) + { + if(oz8806_cell_num > num_1) + { + afe_register_write_byte(OZ8806_OP_CTRL,num_0x2c); + } + else + afe_register_write_byte(OZ8806_OP_CTRL,0x20); + bmu_dbg("Wake up oz8806 write op_ctrl 0x20 \n"); + + ret = afe_register_read_byte(OZ8806_OP_CTRL,&i); + pr_err("second read reg[0x09]= 0x%02x, ret = %d\n", i, ret); + + } + + pr_err("O2MICRO OZ8806 parameter %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\n", + config_data->fRsense, + config_data->temp_pull_up, + config_data->temp_ref_voltage, + config_data->dbCARLSB, + config_data->dbCurrLSB, + config_data->fVoltLSB, + config_data->design_capacity, + config_data->charge_cv_voltage, + config_data->charge_end_current, + config_data->discharge_end_voltage, + config_data->board_offset, + config_data->debug + + ); + + //check_oz8806_staus(); + + //trim_bmu_VD23(); +} + + +/***************************************************************************** + * Description: + * wait ocv flag + * Parameters: + * None + * Return: + * None + *****************************************************************************/ + void wait_ocv_flag_fun(void) +{ + + int32_t ret; + uint16_t value; + uint8_t i; + int32_t data; +#if 1 + if (oz8806_get_boot_up_time() < 2000) // ocv can be stable after oz8806 is wakeuped for 2 s + { + pr_err("wait ocv flag register ready 1\n"); + msleep(2000 - oz8806_get_boot_up_time()); + oz8806_get_boot_up_time(); + //return; + } + + if (oz8806_get_power_on_time() < 2250) + { + pr_err("wait ocv flag register ready 2\n"); + msleep(2250 - oz8806_get_power_on_time()); + oz8806_get_power_on_time(); + } +#endif + + wait_ocv_flag = 1; + + for(i = 0;i < 3;i++) + { + ret = afe_register_read_word(OZ8806_OP_OCV_LOW,&value); + if(ret >= 0) + { + if ((value & POWER_OCV_FLAG) || (value & SLEEP_OCV_FLAG)) + { + if (oz8806_get_power_on_time() < 4250)//2250+2000 + { + pr_err("ocv or sleep_ocv: wait for normal scan cycle\n"); + msleep(4250 - oz8806_get_power_on_time()); + oz8806_get_power_on_time(); + } + } + else if (oz8806_get_boot_up_time() < 2250) + { + pr_err("normal ok: wait for normal scan cycle\n"); + msleep(2250 - oz8806_get_boot_up_time()); + } + break; + } + } + + //read data + afe_read_cell_volt(&batt_info->fVolt); + afe_read_current(&batt_info->fCurr); + afe_read_cell_temp(&batt_info->fCellTemp); + afe_read_car(&batt_info->fRC); + + batt_info->fRSOC = batt_info->fRC * num_100; + batt_info->fRSOC = batt_info->fRSOC / config_data->design_capacity ; + + + pr_err("read batt_info.fVolt is %d\n",(batt_info->fVolt * oz8806_cell_num)); + pr_err("read batt_info.fRC is %d\n",batt_info->fRC); + pr_err("read batt_info.fCurr is %d\n",batt_info->fCurr); + pr_err("read ocv flag ret is 0x%02x,value is 0x%02x\n",ret,value); + pr_err("read fCellTemp is %d\n",batt_info->fCellTemp); + if (ret >= num_0 ) + { + // OZ8806 First power on + if (value & POWER_OCV_FLAG) + { + power_on_flag = num_1; + afe_read_ocv_volt(&batt_info->fOCVVolt); + + afe_read_cell_volt(&batt_info->fVolt); + + if(oz8806_cell_num > num_1) + batt_info->fOCVVolt = batt_info->fVolt; + + pr_err("AAAA ocv volt is %d\n",(batt_info->fOCVVolt * oz8806_cell_num)); + pr_err("AAAA volt is %d\n",(batt_info->fVolt * oz8806_cell_num)); + + + if(batt_info->fOCVVolt > (config_data->charge_cv_voltage + 70)){ + afe_read_cell_volt(&batt_info->fVolt); + batt_info->fOCVVolt = batt_info->fVolt; + pr_err("AAAAA ocv data errror ,so batt_info->fVolt is %d\n",batt_info->fVolt); + } + + afe_read_current(&batt_info->fCurr); + pr_err("AAAA batt_info.fCurr is %d\n",batt_info->fCurr); + + if(batt_info->fCurr > num_50) + data = batt_info->fOCVVolt - num_100; + else + data = batt_info->fOCVVolt; + + batt_info->fRSOC = one_latitude_table(parameter->ocv_data_num,parameter->ocv,data); + pr_err("find ocv table batt_info.fRSOC is %d\n",batt_info->fRSOC); + + if((batt_info->fRSOC >num_100) || (batt_info->fRSOC < num_0)) + batt_info->fRSOC = num_50; + + batt_info->fRC = batt_info->fRSOC * config_data->design_capacity / num_100; + + afe_read_current(&batt_info->fCurr); + + + + if(batt_info->fRC >= (gas_gauge->overflow_data -num_10)) + { + batt_info->fRC = gas_gauge->overflow_data - gas_gauge->overflow_data /num_100; + batt_info->fRCPrev = batt_info->fRC; + } + + afe_write_car(batt_info->fRC); + batt_info->fRCPrev = batt_info->fRC; + gas_gauge->fcc_data= config_data->design_capacity * 100/100; + + + pr_err("Power on mode is activated \n"); + + + batt_info->sCaMAH = batt_info->fRSOC * config_data->design_capacity / num_100; + gas_gauge->sCtMAH = batt_info->sCaMAH; + gas_gauge->discharge_sCtMAH = config_data->design_capacity - batt_info->sCaMAH; + + } + else if(value & SLEEP_OCV_FLAG) + { + afe_read_ocv_volt(&batt_info->fOCVVolt); + sleep_ocv_flag = 1; + pr_err("Sleep ocv mode is activated \n"); + } + else + pr_err("Normal mode is activated \n"); + } + else + { + pr_err("AAAA O2MICRO OZ8806 DRIVER \n"); + pr_err("AAAA O2MICRO OZ8806 read OZ8806_OP_OCV_LOW\n"); + + } + + //for ifive +#if 0 + afe_read_car(&batt_info->fRC); + if((batt_info->fRC < (one_percent_rc)) && (batt_info->fRC > -3000)) + { + bmu_dbg("yyyy fRC will over fRC is %d\n",batt_info->fRC); + + batt_info->fRC = one_percent_rc - num_1; + afe_write_car(batt_info->fRC); + batt_info->fRCPrev = batt_info->fRC; + } + afe_read_car(&batt_info->fRC); + pr_err("fRC is %d\n",batt_info->fRC); +#endif + + + + afe_register_read_byte(num_0,&i); + pr_err("O2micro regeidter 0x00 is 0x%02x\n",i); + + afe_register_read_byte(num_9,&i); + pr_err("O2micro regeidter 0x09 is 0x%02x\n",i); +} + +/***************************************************************************** + * Description: + * trim_bmu_VD23 + * Parameters: + * None + * Return: + * None + *****************************************************************************/ + void trim_bmu_VD23(void) +{ + int32_t ret; + uint8_t i; + uint16_t value; + uint8_t data; + uint8_t temp; + + + for(i = 0;i < 3;i++) + { + ret = afe_register_read_word(OZ8806_OP_VD23,&value); + if(ret >= 0)break; + } + if(ret < 0) + { + pr_err("READ OZ8806_OP_VD23 fail and return:%d\n",ret); + return; + } + pr_err("READ oz8806 REG 0x03 is 0x%02x\n",value); + data = ((value >> 6) & 0x02) | ((value >> 8) & 0x01); + data &= 0x03; + pr_err("So trim is 0x%02x\n",data); + + for(i = 0;i < 3;i++) + { + ret = afe_register_read_byte(OZ8806_OP_PEC_CTRL,&temp); + if(ret >= 0)break; + } + if(ret < 0) + { + pr_err("READ OZ8806_OP_PEC_CTRL fail and return:%d\n",ret); + return; + } + + + + pr_err("READ oz8806 REG 0x08 is 0x%02x\n",temp); + + + temp &= (~0x03); + + if(data != 0x02) + { + temp |= data; + for(i = 0;i < 3;i++) + { + ret = afe_register_write_byte(OZ8806_OP_PEC_CTRL,temp); + pr_err("write1 oz8806 REG 0x08 is 0x%02x\n",temp); + if(ret >= 0)break; + } + + } + else + { + temp |= 0x03; + for(i = 0;i < 3;i++) + { + ret = afe_register_write_byte(OZ8806_OP_PEC_CTRL,temp); + pr_err("write2 oz8806 REG 0x08 is 0x%02x\n",temp); + if(ret >= 0)break; + } + + } + + ret = afe_register_read_byte(OZ8806_OP_PEC_CTRL,&temp); + pr_err("oz8806 REG 0x08 is 0x%02x\n",temp); + +} + +/***************************************************************************** +* Description: +* check shudown voltage control +* Parameters: +* None +* Return: +* None +*****************************************************************************/ + void check_shutdwon_voltage(void) +{ + //int32_t ret; + //uint8_t i; + int32_t temp; + //int32_t infVolt; + afe_read_cell_volt(&batt_info->fVolt); + + + if(!sleep_ocv_flag) return; + + temp = one_latitude_table(parameter->ocv_data_num,parameter->ocv,batt_info->fOCVVolt); + pr_err("Sleep data is %d \n",temp); + + + // select higher data + if(calculate_soc > temp) + temp = calculate_soc; + + //Very dangerous + if((batt_info->fRSOC - temp) > 20 + || (batt_info->fVolt < (config_data->discharge_end_voltage - 50) && temp <= 5)) + { + + //batt_info->fRSOC -= 5; + batt_info->fRSOC = temp; + if(batt_info->fRSOC < 0) batt_info->fRSOC = 0; + + batt_info->sCaMAH = batt_info->fRSOC * gas_gauge->fcc_data/ 100; + + batt_info->fRC= batt_info->sCaMAH; + if(batt_info->fRC > (gas_gauge->overflow_data - 20)) + batt_info->fRC = gas_gauge->overflow_data - 20; + afe_write_car(batt_info->fRC); + + batt_info->fRCPrev = batt_info->fRC; + + gas_gauge->sCtMAH = batt_info->sCaMAH; + if(gas_gauge->fcc_data > batt_info->sCaMAH) + gas_gauge->discharge_sCtMAH = gas_gauge->fcc_data- batt_info->sCaMAH; + else + gas_gauge->discharge_sCtMAH = 0; + } + + +} + + + + +/***************************************************************************** +* Description: +* check_oz8806_staus +* Parameters: +* None +* Return: +* None +*****************************************************************************/ +static void check_oz8806_staus(void) +{ + + +} + + + + + +/***************************************************************************** +* Description: +* bmu_wait_ready +* Parameters: +* None +* Return: +* None +*****************************************************************************/ +static void bmu_wait_ready(void) +{ + int32_t store_rc = INIT_CAP; + //int32_t fcc; + uint8_t i; + int32_t ret; + uint16_t value; + + int32_t calculate_soc_temp; + + int32_t file_soc_temp; + + pr_err("AAAA bmu wait times %d \n",times); + times ++; + //wake up OZ8806 into FullPower mode + oz8806_wakeup_full_power(); + + ret = afe_register_read_byte(OZ8806_OP_CTRL,&i); + batt_info->Battery_ok = i & BI_STATUS; + pr_err("bmu_wait_ready read 0x09 ret is %d,i is 0x%02x\n",ret,i); + + if((i & 0x40) || (ret < 0)) + { + if(oz8806_cell_num > 1) + { + afe_register_write_byte(OZ8806_OP_CTRL,0x2c); + } + else + afe_register_write_byte(OZ8806_OP_CTRL,0x20); + pr_err("oz8806 wake up function\n"); + + ret = afe_register_read_byte(OZ8806_OP_CTRL,&i); + pr_err("bmu_wait_ready read 0x09 ret is %d,i is 0x%02x\n",ret,i); + } + + //do we need add check ocv flag now? + ret = afe_register_read_word(OZ8806_OP_OCV_LOW,&value); + if ((ret >= 0) && (value & POWER_OCV_FLAG)) + { + pr_err("read flag too late\n"); + wait_ocv_flag_fun(); + } + + if (oz8806_get_power_on_time() < 2250) + { + pr_err("wait for normal scan cycle"); + msleep(2250 - oz8806_get_power_on_time()); + } + + afe_read_cell_temp(&batt_info->fCellTemp); + afe_read_cell_volt(&batt_info->fVolt); + afe_read_current(&batt_info->fCurr); + afe_read_car(&batt_info->fRC); + + + pr_err("fVolt is %d\n",(batt_info->fVolt * oz8806_cell_num)); + pr_err("fCurr is %d\n",batt_info->fCurr); + pr_err("ftemp is %d\n",batt_info->fCellTemp); + pr_err("fRC is %d\n",batt_info->fRC); + + // every time we check this and print to see if the voltage and temp and current is abnormal + // how about if rc_result error + + calculate_soc_temp = calculate_soc_result(); + + calculate_soc = calculate_soc_temp; + calculate_mah = calculate_soc * config_data->design_capacity / num_100; + + calculate_times++; +#if 0 + if (calculate_times <= calculate_retry_times) + return; +#endif + pr_err("calculate_times: %d\n",calculate_times); + + gas_gauge->fcc_data = config_data->design_capacity; + + if((batt_info->fRC > 5)&& (!power_on_flag)) + { + store_rc = batt_info->fRC; + //calculate_retry_times = 0; + pr_err("Success to get soc from car :%d\n", batt_info->fRC); + goto file_ok; + } + + if (oz8806_get_boot_up_time() < 5000) // voltage can be stable after oz8806 is powered for 5 s + { + pr_err("wait oz8806 ADC ready\n"); + return; + } + + + if((set_soc_from_ext)) + { + soc_external = oz8806_get_soc_from_ext(); + + pr_err("soc from external: %d\n", soc_external); + + if (soc_external == -1) + { + pr_err("wait for external soc:%d, retry:%d\n", soc_external, retry_times); + + if(retry_times >= 0) + { + pr_err("fail to get externl soc, retry_times:%d \n",retry_times); + retry_times = 0; + set_soc_from_ext = 0; + pr_err("can't get external soc,so make set_soc_from_ext 0\n"); + } + else + { + retry_times++; + return; + } + } + else if ((soc_external <= 100) && (soc_external >= 0)) + { + pr_err("Success to get soc from external :%d\n", soc_external); + + store_rc = soc_external * gas_gauge->fcc_data / 100; + store_rc += gas_gauge->fcc_data / 200; // + fcc / 100 * / 2 + pr_err("stored RC:%d\n", store_rc); + + goto file_ok; + } + else + { + pr_err("Error to get wrong soc from external :%d\n", soc_external); + retry_times = 0; + set_soc_from_ext = 0; + pr_err("can't get external soc,so make set_soc_from_ext 0\n"); + } + } + + if (bmu_sys_rw_kernel) + { + /* wait for sysfs to capacity from file*/ + store_rc = bmu_read_data(BATT_CAPACITY); + + //check file ,if file not exit, goto file fail + if(store_rc < 0) + { + pr_err("open BATT_CAPACITY fail, retry_times:%d \n", retry_times); + if(retry_times >= power_on_retry_times) + { + pr_err("BATT_CAPACITY file fail\n"); + batt_info->sCaMAH = calculate_mah; + goto file_fail; + } + else + { + retry_times++; + return; + } + } + pr_err("open BATT_CAPACITY success, retry_times:%d \n", retry_times); + pr_err("AAAA read battery capacity data is %d\n", store_rc); + } + else + { + store_rc = oz8806_get_save_capacity(); + + pr_err("RC from file:%d\n", store_rc); + if (store_rc == INIT_CAP) + { + pr_err("wait for reading file:%s, retry:%d\n", BATT_CAPACITY, retry_times); + if(retry_times > 10) + { + pr_err("fail to get save_capacity, retry_times:%d \n",retry_times); + goto file_fail; + } + retry_times++; + return; + } + else if (store_rc == NO_FILE) { + pr_err("no file %s, retry_times:%d \n", BATT_CAPACITY, retry_times); + goto file_fail; + } + } + +file_ok: + + //file_soc_temp: soc read from file + if (soc_external != -1) + file_soc_temp = soc_external; + else + file_soc_temp = store_rc * 100 / gas_gauge->fcc_data; + + //file ok, if ocv power on + if(power_on_flag) + { + pr_err("bmu_wait_ready, power on ok \n"); + gas_gauge->ocv_flag = 1; + + //file_soc_temp: soc read from file + //batt_info->fRSOC: calculated using OCV + //calculated_soc: calculated using VI + pr_err("soc from file:%d, vi soc:%d, ocv soc:%d \n", + file_soc_temp, calculate_soc, batt_info->fRSOC); + + pr_err("RC from file:%d, vi RC:%d, ocv RC:%d \n", + store_rc, calculate_mah, batt_info->sCaMAH); + + if((batt_info->fRSOC > 90)&& (file_soc_temp > 90)) + { + batt_info->sCaMAH = store_rc; + pr_err("start sCaMAH high USE file\n"); + } + else if(batt_info->fCurr >= 0) + { + if( ABS(calculate_soc,file_soc_temp) > 30) + { + batt_info->sCaMAH = calculate_mah; + pr_err("start sCaMAH chg USE vi\n"); + } + else // file + { + batt_info->sCaMAH = store_rc; + pr_err("start sCaMAH chg USE file\n"); + } + } + else //discharging + { + if( ABS(file_soc_temp,calculate_soc) > 20 + || (batt_info->fVolt < (config_data->discharge_end_voltage - 50) && file_soc_temp<=5)) + { + batt_info->sCaMAH = calculate_mah; + pr_err("start sCaMAH USE vi\n"); + } + else + { + batt_info->sCaMAH = store_rc; + pr_err("start sCaMAH USE file\n"); + } + } + } + //if not ocv power on + else + { pr_err("bmu_wait_ready, normal ok \n"); + gas_gauge->ocv_flag = 0; + afe_read_car(&batt_info->fRC); + + pr_err("RC from file: %d ,RC from register: %d\n", store_rc, batt_info->fRC); + + if ((batt_info->fCurr > 0 && batt_info->fRC <= 2) + || (batt_info->fCurr <= 0 && batt_info->fRC <= 0))//power on, no ocv flag + { + if((ABS(file_soc_temp,calculate_soc) > 30) + || (batt_info->fVolt < (config_data->discharge_end_voltage - 50) && file_soc_temp<=5)) + { + batt_info->sCaMAH = calculate_mah; + pr_err("file ok but USE vi,fRC<=0\n"); + } + else + { + batt_info->sCaMAH = store_rc; + pr_err("file ok USE file\n"); + } + } + else + { + // car and file changed more than 1% + if(( ABS(batt_info->fRC,store_rc) > (one_percent_rc))) + { + batt_info->sCaMAH = batt_info->fRC; + pr_err("file ok USE RC\n"); + } + else + { + //prevent issue: when reboot frequently, soc -= 1 every reboot + if (((soc_external <= 100) && (soc_external >= 0)) + &&(batt_info->fRC > store_rc) + &&(batt_info->fRC - store_rc <= one_percent_rc)) + { + pr_err("file ok USE RC\n"); + batt_info->sCaMAH = batt_info->fRC; + } + else + { + batt_info->sCaMAH = store_rc; + pr_err("file ok USE file\n"); + } + } + } + } + +file_fail: + if(store_rc<0) //fail to red fil or no file exist + { + if(power_on_flag) + { + pr_err("fVolt %dmv, oz8806_cell_num:%d, power_on_100_vol:%dmv\n",batt_info->fVolt,oz8806_cell_num,gas_gauge->power_on_100_vol); + if((batt_info->fVolt * oz8806_cell_num)>= gas_gauge->power_on_100_vol) + batt_info->sCaMAH = full_charge_data; + else + batt_info->sCaMAH = calculate_mah; + pr_err("bmu_wait_ready, power on ok and file fail \n"); + pr_err("file fail USE vi\n"); + } + else + { + pr_err("bmu_wait_ready, normal on ok and file fail \n"); + afe_read_car(&batt_info->fRC); + + pr_err("RC from register: %d, RC from vi: %d\n", batt_info->fRC, calculate_mah); + + if ((batt_info->fCurr > 0 && batt_info->fRC <= 2) + || (batt_info->fCurr <= 0 && batt_info->fRC <= 0))//power on, no ocv flag + { + pr_err("big error first power on and ocv flag not set: %d ,%d\n", batt_info->fRC, calculate_mah); + batt_info->sCaMAH = calculate_mah; + pr_err("file fail USE vi\n"); + } + else + { +#if 0 + batt_info->sCaMAH = batt_info->fRC; + pr_err("file fail USE RC\n"); +#else + + if(batt_info->fRC < one_percent_rc ) //if CAR < 1% + file_not_ok_cap = 30; + + if( ABS(batt_info->fRC,calculate_mah) > (file_not_ok_cap * config_data->design_capacity / num_100)) + { + batt_info->sCaMAH = calculate_mah; + pr_err("file fail USE vi\n"); + + } + else + { + batt_info->sCaMAH = batt_info->fRC; + pr_err("file fail USE RC\n"); + } + + if(fix_car_init) + { + batt_info->sCaMAH = batt_info->fRC; + pr_err("file fail fix fRC: %d,%d \n",batt_info->sCaMAH,batt_info->fRC); + } +#endif + } + } + } + + if(batt_info->sCaMAH <= num_0) + { + pr_err("calculate_soc is %d\n",calculate_soc); + afe_read_cell_volt(&batt_info->fVolt); + batt_info->fRSOC = calculate_soc; + if((batt_info->fRSOC >num_100) || (batt_info->fRSOC < num_0)) + batt_info->fRSOC = num_50; + + pr_err("batt_info->fRSOC is %d\n",batt_info->fRSOC); + batt_info->fRC = batt_info->fRSOC * config_data->design_capacity / num_100; + pr_err("batt_info->fRC is %d\n",batt_info->fRC); + if(batt_info->fRC >= (gas_gauge->overflow_data -num_10)) + { + batt_info->fRC = gas_gauge->overflow_data - gas_gauge->overflow_data/num_100; + batt_info->fRCPrev = batt_info->fRC; + } + + pr_err("batt_info->fRC is %d\n",batt_info->fRC); + + afe_write_car(batt_info->fRC); + batt_info->fRCPrev = batt_info->fRC; + + batt_info->sCaMAH = batt_info->fRC; + + + } + + if(batt_info->sCaMAH > full_charge_data) + { + batt_info->sCaMAH = full_charge_data; + } + pr_err("batt_info->sCaMAH is %d\n",batt_info->sCaMAH); + + batt_info->fRSOC = batt_info->sCaMAH * num_100; + batt_info->fRSOC = batt_info->fRSOC / gas_gauge->fcc_data ; + + //check if batt_info->sCaMAH == soc_external * gas_gauge->fcc_data / 100; + if ((soc_external <= 100) && (soc_external >= 0)) + if (batt_info->sCaMAH == soc_external * gas_gauge->fcc_data / 100) + batt_info->fRSOC = soc_external; + + //batt_info->fRC = batt_info->fRSOC * gas_gauge->fcc_data / num_100;//this make result smaller + batt_info->fRC = batt_info->sCaMAH; + if(batt_info->fRC >= (gas_gauge->overflow_data -num_10)) + { + batt_info->fRC = gas_gauge->overflow_data - gas_gauge->overflow_data/num_100; + batt_info->fRCPrev = batt_info->fRC; + } + + gas_gauge->sCtMAH = batt_info->sCaMAH; + + pr_err("AAAA batt_info->fVolt is %d\n",(batt_info->fVolt * oz8806_cell_num)); + pr_err("AAAA batt_info->fRSOC is %d\n",batt_info->fRSOC); + pr_err("AAAA batt_info->sCaMAH is %d\n",batt_info->sCaMAH); + pr_err("AAAA gas_gauge->sCtMAH is %d\n",gas_gauge->sCtMAH); + pr_err("AAAA fcc is %d\n",gas_gauge->fcc_data); + pr_err("AAAA batt_info->fRC is %d\n",batt_info->fRC); + pr_err("AAAA batt_info->fCurr is %d\n",batt_info->fCurr); + + afe_write_car(batt_info->fRC); + batt_info->fRCPrev = batt_info->fRC; + + if(gas_gauge->fcc_data > batt_info->sCaMAH) + gas_gauge->discharge_sCtMAH = gas_gauge->fcc_data- batt_info->sCaMAH; + else + gas_gauge->discharge_sCtMAH = 0; + + if(batt_info->fRSOC <= num_0) + { + gas_gauge->discharge_end = num_1; + batt_info->fRSOC = num_0; + gas_gauge->sCtMAH = num_0; + gas_gauge->ocv_flag = 0; + bmu_write_data(OCV_FLAG,0); + } + if(batt_info->fRSOC >= num_100) + { + gas_gauge->charge_end = num_1; + charge_end_flag = num_1; + batt_info->fRSOC = num_100; + gas_gauge->discharge_sCtMAH = num_0; + gas_gauge->discharge_fcc_update = num_1; + gas_gauge->ocv_flag = 0; + bmu_write_data(OCV_FLAG,0); + } + + if(sleep_ocv_flag) + check_shutdwon_voltage(); + + fRSOC_PRE = batt_info->fRSOC; + + // double check + if (bmu_sys_rw_kernel) + { + store_rc = bmu_read_data(BATT_CAPACITY); + if(store_rc != batt_info->sCaMAH) + { + bmu_write_data(BATT_CAPACITY,batt_info->sCaMAH); + bmu_write_data(BATT_FCC, gas_gauge->fcc_data); + //pr_err("init write sCaMAH %d,%d\n",batt_info->sCaMAH,store_rc); + } + } + + gas_gauge->bmu_init_ok = num_1; +} + +/***************************************************************************** +* Description: +* power down 8806 chip +* Parameters: +* None +* Return: +* None +*****************************************************************************/ +void bmu_power_down_chip(void) +{ + + afe_read_cell_temp(&batt_info->fCellTemp); + afe_read_cell_volt(&batt_info->fVolt); + afe_read_current(&batt_info->fCurr); + afe_read_car(&batt_info->fRC); + + if(oz8806_cell_num > num_1) + afe_register_write_byte(OZ8806_OP_CTRL,num_0x4c |SLEEP_OCV_EN); + else + afe_register_write_byte(OZ8806_OP_CTRL,SLEEP_MODE | SLEEP_OCV_EN); + + + if(parameter->config->debug){ + pr_err("eeee power down oz8806 \n"); + pr_err("eeee batt_info->fVolt is %d\n",(batt_info->fVolt * oz8806_cell_num)); + pr_err("eeee batt_info->fRSOC is %d\n",batt_info->fRSOC); + pr_err("eeee batt_info->sCaMAH is %d\n",batt_info->sCaMAH); + pr_err("eeee batt_info->fRC is %d\n",batt_info->fRC); + pr_err("eeee batt_info->fCurr is %d\n",batt_info->fCurr); + } + +} + +/***************************************************************************** +* Description: +* power up 8806 chip +* Parameters: +* None +* Return: +* None +*****************************************************************************/ +void bmu_wake_up_chip(void) +{ + uint8_t data; + int32_t ret; + int32_t value; + uint8_t discharge_flag = num_0; + uint8_t i; + int32_t sleep_time = 0; + int32_t car_wakeup = 0; + int8_t adapter_status = 0; + + pr_err("fCurr is %d\n",batt_info->fCurr); + + adapter_status = get_adapter_status(); + if ((batt_info->fCurr <= gas_gauge->discharge_current_th) || + (adapter_status == O2_CHARGER_BATTERY)) + { + discharge_flag = 1; + } + + pr_err("adapter_status: %d\n", adapter_status); + + bmu_sleep_flag = 1; + + time_sec = oz8806_get_system_boot_time(); + sleep_time = time_sec - previous_loop_timex; + pr_err("sleep time: %d s\n",sleep_time); + + oz8806_wakeup_full_power(); + + ret = afe_register_read_byte(OZ8806_OP_CTRL,&data);//wake up OZ8806 into FullPower mode + if((data & 0x40) || (ret < 0)) + { + pr_err("bmu_wake_up_chip read 0x09 ret is %d,i is %d \n",ret,data); + if(oz8806_cell_num > 1) + { + afe_register_write_byte(OZ8806_OP_CTRL,0x2c); + } + else + afe_register_write_byte(OZ8806_OP_CTRL,0x20); + pr_err("oz8806 wake up function\n"); + + } + + if(batt_info->fRSOC >=num_100) + { + if(batt_info->fRSOC >= num_100) batt_info->fRSOC = num_100; + if(batt_info->sCaMAH > (full_charge_data)) + { + pr_err("oz8806 wake up batt_info.sCaMAH big error is %d\n",batt_info->sCaMAH); + batt_info->sCaMAH = full_charge_data; + + } + } + + afe_read_current(&batt_info->fCurr); + afe_read_cell_volt(&batt_info->fVolt); + + pr_err("sCaMAH:%d,fRC:%d,fcurr:%d,volt:%d,sCtMAH:%d\n", + batt_info->sCaMAH,batt_info->fRC,batt_info->fCurr, + (batt_info->fVolt * oz8806_cell_num), + gas_gauge->sCtMAH); + + for(i = num_0;i< num_3;i++) + { + ret = afe_read_car(&car_wakeup); + if (ret >= 0) + { + if ((car_wakeup == 0) || ((!discharge_flag) && (car_wakeup < 0))) + { + car_error += 1; + pr_err("test fRC read: %d, %d\n",car_error, car_wakeup); //H7 Test Version + } + else + break; + } + } + + value = car_wakeup - batt_info->fRC; + //*******CAR zero reading Workaround****************************** + if (sleep_time < 0) sleep_time = 60; //force 60s + if (discharge_flag == 1) + sleep_time *= MAX_SUSPEND_CONSUME; //time * current / 3600 * 1000 + else + sleep_time *= MAX_SUSPEND_CHARGE; //time * current / 3600 * 1000 + + // 10% + if (ABS(car_wakeup, batt_info->fRC) > (10 * config_data->design_capacity / num_100)) //delta over 10% + { + if (((value * 1000) - sleep_time) < 0) //over max car range + { + value = (sleep_time / 1000); + pr_err("Ab CAR:%d,mod:%d\n",car_wakeup,value); + car_wakeup = value + batt_info->fRC; + afe_write_car(car_wakeup); + } + } + pr_err("CAR Prev:%d,CAR Now:%d\n",batt_info->fRC,car_wakeup); + //*******CAR zero reading Workaround****************************** + if(car_wakeup <= 0) + { + pr_err("fRC is %d\n",car_wakeup); + //oz8806_over_flow_prevent(); + gas_gauge->charge_fcc_update = num_0; + gas_gauge->discharge_fcc_update = num_0; + + if (car_wakeup < 0) //overflow check + { + if (batt_info->fVolt >= (config_data->charge_cv_voltage - 50)) + { + car_wakeup = gas_gauge->fcc_data -num_1; + } + else + { + if (batt_info->fRSOC > 0) + car_wakeup = batt_info->fRSOC * gas_gauge->fcc_data / num_100 - num_1; + else + car_wakeup = batt_info->sCaMAH; + } + afe_write_car(car_wakeup); + batt_info->fRC = car_wakeup; + batt_info->fRCPrev = batt_info->fRC; + } + + if(discharge_flag) + { + check_shutdwon_voltage(); + value = calculate_soc_result(); + if(value < batt_info->fRSOC) + { + batt_info->fRSOC = value; + batt_info->sCaMAH = batt_info->fRSOC * gas_gauge->fcc_data / 100; + batt_info->fRC = batt_info->sCaMAH; + batt_info->fRCPrev = batt_info->fRC; + afe_write_car(batt_info->fRC); + } + + if(batt_info->fRSOC <= 0) + { + if((batt_info->fVolt <= config_data->discharge_end_voltage)) + { + discharge_end_process(); + } + //wait voltage + else + { + batt_info->fRSOC = 1; + batt_info->sCaMAH = gas_gauge->fcc_data / num_100 ; + gas_gauge->discharge_end = num_0; + } + } + return; + } + } + + if ((discharge_flag) && (car_wakeup > batt_info->fRC)) + { + pr_err("it seems error 1\n"); + value = car_wakeup - batt_info->fRC; + car_wakeup = batt_info->fRC - value; + afe_write_car(car_wakeup); + } + if ((!discharge_flag) && (car_wakeup < batt_info->fRC)) + { + pr_err("it seems error 2\n"); + value = batt_info->fRC - car_wakeup; + car_wakeup = batt_info->fRC + value; + afe_write_car(car_wakeup); + } + + bmu_dbg("tttt final wakeup car is %d\n",car_wakeup); +} + + +/***************************************************************************** +* Description: +* check_board_offset +* Parameters: +* None +* Return: +* None +*****************************************************************************/ +static void check_board_offset(void) +{ + int32_t data; + int32_t ret; + int32_t offset; + int32_t ret2; + + ret2 = afe_read_board_offset(&data); + + if(config_data->board_offset != data && config_data->board_offset != num_0) + { + afe_write_board_offset(config_data->board_offset); + return; + } + + ret = bmu_read_data(BATT_OFFSET); + + + //pr_err("AAAA board_offset is %d\n",data); + + if(ret < num_0) + { + + if((data > num_10) || (data <= num_0)) + afe_write_board_offset(7); + + if(ret2 >= num_0) + { + if((data < num_10) && (data > num_0) && (data != num_0)) + { + ret = bmu_write_data(BATT_OFFSET,data); + + if(ret num_2) || ((offset - data) < -num_2)) + afe_write_board_offset(offset); + } + + afe_read_board_offset(&data); + if((data > num_10) || (data <= num_0)) + afe_write_board_offset(num_7); + + afe_read_board_offset(&data); + pr_err("AAAA board_offset is %dmA\n",data); +} + +/***************************************************************************** +* Description: +* bmu polling loop +* Parameters: +* None +* Return: +* None +*****************************************************************************/ +void bmu_polling_loop(void) +{ + int32_t data; + + int32_t ret; + uint8_t i; + static uint8_t error_times = 0; +#if (FORCE_OTP_MAPPING) + uint32_t force_otp_time = 0; +#endif + int8_t adapter_status = 0; + uint8_t retry = 0; + uint8_t val = 0; + if(is_battery_exchanged()){ //battery was exchanged, oz8806 in start-up mode + gas_gauge->bmu_init_ok = 0; + batt_info->i2c_error_times = 0; + pr_err("battery was exchanged, init SOC again\n"); + +retry_wakeup: + //wake up this stupid chip + oz8806_wakeup_full_power(); + msleep(10) ; + ret = afe_register_read_byte(OZ8806_OP_CTRL,&val); + if((val & 0x40) || (ret < 0)) + { + pr_err("bmu_wake_up_chip read 0x09 ret is %d,i is %d \n",ret,val); + retry++; + + if(retry>10){ + pr_err("fail wakeup ic"); + } + goto retry_wakeup; + } + + retry_times = 0; + calculate_times = 0; + times = 0; + wait_ocv_flag = 0; + wait_ocv_flag_fun(); + } + + bmu_dbg("-----------------------bmu_polling_loop start------------------\n"); + + if(!(gas_gauge->bmu_init_ok)) + { + if(!wait_ocv_flag) + wait_ocv_flag_fun(); + else + bmu_wait_ready(); + + if(gas_gauge->bmu_init_ok) + check_board_offset(); + + goto end; + } + + batt_info->fRCPrev = batt_info->fRC; + + afe_read_cell_temp(&batt_info->fCellTemp); + afe_read_cell_volt(&batt_info->fVolt); + afe_read_current(&batt_info->fCurr); + + //be careful for large current + //and wake up condition + ret = afe_read_car(&data); + if(parameter->config->debug) { + if (data == 0) car_error++; + pr_err("CAR is %d, %d\n",data, car_error); + } + + if((ret >= 0) && (data > 0)) + { + // for big current charge + // 10% + if (ABS(batt_info->fRCPrev, data) < (10 * config_data->design_capacity / num_100)) + { + batt_info->fRC = data; + error_times = 0; + } + else + { + error_times++; + if(error_times > 3) + { + pr_err("CAR error_times is %d\n",error_times); + error_times = 0; + afe_write_car(batt_info->sCaMAH); + batt_info->fRCPrev = batt_info->sCaMAH; + batt_info->fRC = batt_info->sCaMAH; + } + } + } + + bmu_dbg("first sCaMAH:%d,fRC:%d,fRCPrev:%d,fcurr:%d,volt:%d\n", + batt_info->sCaMAH,batt_info->fRC,batt_info->fRCPrev, + batt_info->fCurr,(batt_info->fVolt * oz8806_cell_num)); + + //back sCaMAH + //H7====LOW VOLTAGE CHARGE PREVENT====== + if ((batt_info->fVolt < config_data->discharge_end_voltage) && (batt_info->fCurr > 0)) //charge and voltage < 3300 + { + pr_err("Low voltage %d charge current %d detected\n",batt_info->fVolt,batt_info->fCurr); + if (batt_info->fRC > batt_info->fRCPrev) //CAR increased + { + pr_err("Low voltage fRC limit triggered %d\n",batt_info->fRCPrev); + batt_info->fRC = batt_info->fRCPrev; //Limit CAR as previous + afe_write_car(batt_info->fRC); //write back CAR + } + } + //H7====LOW VOLTAGE CHARGE PREVENT====== + + + gas_gauge->sCtMAH += batt_info->fRC - batt_info->fRCPrev; + gas_gauge->discharge_sCtMAH += batt_info->fRCPrev - batt_info->fRC; + + if(gas_gauge->sCtMAH < num_0) gas_gauge->sCtMAH = num_0; + if(gas_gauge->discharge_sCtMAH < num_0) gas_gauge->discharge_sCtMAH = num_0; + + //bmu_call(); + + adapter_status = get_adapter_status(); + if ((batt_info->fCurr <= gas_gauge->discharge_current_th) || + (adapter_status == O2_CHARGER_BATTERY)) + discharge_process(); + else + charge_process(); + + bmu_dbg("second sCaMAH:%d,fRC:%d,fRCPrev:%d,fcurr:%d,volt:%d\n", + batt_info->sCaMAH,batt_info->fRC,batt_info->fRCPrev, + batt_info->fCurr,(batt_info->fVolt * oz8806_cell_num)); + + if(gas_gauge->charge_end) + { + if(!charge_end_flag) + { + pr_err("enter 8806 charge end\n"); + charge_end_flag = num_1; + charge_end_process(); + } + + } + else + { + charge_end_flag = num_0; + } + + + + if(gas_gauge->discharge_end) + { + if(!discharge_end_flag) + { + discharge_end_flag = num_1; + discharge_end_process(); + } + + } + else + { + discharge_end_flag = num_0; + } + + oz8806_over_flow_prevent(); + + /* + //very dangerous + if(batt_info->fVolt <= (config_data->discharge_end_voltage - num_100)) + { + ret = afe_read_cell_volt(&batt_info->fVolt); + if((ret >=0) && (batt_info->fVolt > 2500)) + discharge_end_process(); + } + */ + + + //gas_gauge->bmu_tick++; + previous_loop_timex = time_sec; + time_sec = oz8806_get_system_boot_time(); + bmu_dbg("----------------------------------------------------\n" + "VERSION: %s\n" + "TABLEVERSION: %s\n" + "battery_ok: %d,time_x: %d\n" + "chg_fcc_update: %d, disg_fcc_update: %d\n" + "fVolt: %d fCurr: %d fCellTemp: %d fRSOC: %d\n" + "sCaMAH: %d, sCtMAH1: %d, sCtMAH2: %d\n" + "fcc: %d, fRC: %d\n" + "i2c_error_times: %d\n" + "charge_end: %d, discharge_end: %d\n" + "adapter_status: %d\n" + "----------------------------------------------------\n", + VERSION, get_table_version(),batt_info->Battery_ok,time_sec, + gas_gauge->charge_fcc_update,gas_gauge->discharge_fcc_update, + (batt_info->fVolt * oz8806_cell_num),batt_info->fCurr,batt_info->fCellTemp,batt_info->fRSOC, + batt_info->sCaMAH,gas_gauge->sCtMAH,gas_gauge->discharge_sCtMAH, + gas_gauge->fcc_data,batt_info->fRC, + batt_info->i2c_error_times, + gas_gauge->charge_end,gas_gauge->discharge_end, + adapter_status); + + if(batt_info->sCaMAH > (full_charge_data)) + { + pr_err("big error sCaMAH is %d\n",batt_info->sCaMAH); + batt_info->sCaMAH = full_charge_data; + } + + if(batt_info->sCaMAH < (gas_gauge->fcc_data / 100 - 1)) + { + //pr_err("big error sCaMAH is %d\n",batt_info->sCaMAH); + batt_info->sCaMAH = gas_gauge->fcc_data / 100 - 1; + } + + /* + if(gas_gauge->fcc_data > (config_data->design_capacity *FCC_UPPER_LIMIT / 100)) + { + gas_gauge->fcc_data= config_data->design_capacity * FCC_UPPER_LIMIT / 100 ; + bmu_write_data(BATT_FCC,gas_gauge->fcc_data); + + pr_err("fcc error is %d\n",gas_gauge->fcc_data); + + } + if((gas_gauge->fcc_data <= 0) || (gas_gauge->fcc_data < (config_data->design_capacity * FCC_LOWER_LIMIT / 100))) + { + gas_gauge->fcc_data = config_data->design_capacity * FCC_LOWER_LIMIT /100; + bmu_write_data(BATT_FCC,gas_gauge->fcc_data); + + pr_err("fcc error is %d\n",gas_gauge->fcc_data); + + } + */ + + gas_gauge->fcc_data= config_data->design_capacity; + + if (bmu_sys_rw_kernel) + { + data = bmu_read_data(BATT_CAPACITY); + //bmu_dbg("read from RAM batt_info->sCaMAH is %d\n",data); + if(data >= num_0) + { + if(fRSOC_PRE != batt_info->fRSOC) + { + fRSOC_PRE = batt_info->fRSOC; + bmu_write_data(BATT_CAPACITY,batt_info->sCaMAH); + // bmu_dbg("o2 back batt_info->sCaMAH num_1 is %d\n",batt_info->sCaMAH); + //return; + goto end; + + } + + if(((batt_info->sCaMAH - data)> (gas_gauge->fcc_data/200))||((data - batt_info->sCaMAH)> (gas_gauge->fcc_data/200))){ + bmu_write_data(BATT_CAPACITY,batt_info->sCaMAH); + // bmu_dbg("o2 back batt_info->sCaMAH 2 is %d\n",batt_info->sCaMAH); + } + } + else bmu_write_data(BATT_CAPACITY,batt_info->sCaMAH); + } + else + { + if(fRSOC_PRE != batt_info->fRSOC) + { + fRSOC_PRE = batt_info->fRSOC; + //bmu_dbg("o2 back batt_info->sCaMAH num_1 is %d\n",batt_info->sCaMAH); + goto end; + } + } + + //wake up OZ8806 into FullPower mode + ret = afe_register_read_byte(OZ8806_OP_CTRL,&i); + batt_info->Battery_ok = i & BI_STATUS; + if(ret < 0) + batt_info->Battery_ok = 0; + + if((i & num_0x40) || (ret < num_0)) + { + bmu_dbg("bmu_polling_loop read 0x09 ret is %d,i is %d \n",ret,i); + if(oz8806_cell_num > 1) + { + afe_register_write_byte(OZ8806_OP_CTRL,num_0x2c); + } + else + afe_register_write_byte(OZ8806_OP_CTRL,num_0x20); + //pr_err("oz8806 wake up function\n"); + + } + + ret = afe_read_board_offset(&data); + if (ret >= 0) + { + if (config_data->board_offset != 0) + { + //if (data != config_data->board_offset) + if(ABS(data, config_data->board_offset) > 3) + { + afe_write_board_offset(config_data->board_offset); + pr_err("oz8806 board offset error1 is %d \n",data); + } + } + else + { + if((data > 10) || (data <= 0)) + { + pr_err("oz8806 board offset error2 is %d \n",data); + afe_write_board_offset(7); + } + + } + } + + + bmu_dbg("test data is %d\n",batt_info->sCaMAH); + + /* + + data = bmu_read_data(BATT_FCC); + + if(data != gas_gauge->fcc_data) + { + bmu_write_data(BATT_FCC,gas_gauge->fcc_data); + pr_err("test %d\n",gas_gauge->fcc_data); + } + + */ + +end: + bmu_dbg("-----------------------bmu_polling_loop end--------------------\n"); +} + +/***************************************************************************** +* Description: +* prevent oz8806 over flow +* Parameters: +* None +* Return: +* None +*****************************************************************************/ +static void oz8806_over_flow_prevent(void) +{ + int32_t ret; + int32_t data; + + if((batt_info->fRSOC > num_0) && gas_gauge->discharge_end) + gas_gauge->discharge_end = num_0; + + if((batt_info->fRSOC < num_100) && gas_gauge->charge_end) + gas_gauge->charge_end = num_0; + + if(batt_info->fRC< num_0) + { + if(batt_info->fVolt >= (config_data->charge_cv_voltage - 200)) + { + batt_info->fRC = gas_gauge->fcc_data -num_1; + } + else + { + if(batt_info->fRSOC > 0) + batt_info->fRC = batt_info->fRSOC * gas_gauge->fcc_data / num_100 - num_1; + else + batt_info->fRC = batt_info->sCaMAH; + } + + afe_write_car(batt_info->fRC); + batt_info->fRCPrev = batt_info->fRC; + } + + /* + ret = oz8806_read_word(OZ8806_OP_CAR); + + if(ret >= num_0) + { + ret = (int16_t)ret; + if(ret >= (num_32768 - num_10 * config_data->fRsense)) + { + if(parameter->config->debug)pr_err("yyyy CAR WILL UP OVER %d\n",ret); + ret = 32768 - 15 * config_data->fRsense; + oz8806_write_word(OZ8806_OP_CAR,(int16_t)ret); + afe_read_car(&batt_info->fRC); + batt_info->fRCPrev = batt_info->fRC; + + } + else if(ret <= (num_10 * config_data->fRsense)) + { + if(parameter->config->debug)pr_err("yyyy CAR WILL DOWN OVER %d\n",ret); + ret = num_15 * config_data->fRsense; + oz8806_write_word(OZ8806_OP_CAR,(int16_t)ret); + afe_read_car(&batt_info->fRC); + batt_info->fRCPrev = batt_info->fRC; + } + + + } + */ + + ret = afe_read_car(&data); + if(ret<0) + return; + + if(data < 5) + { + afe_write_car(batt_info->sCaMAH); + batt_info->fRCPrev = batt_info->sCaMAH; + batt_info->fRC = batt_info->sCaMAH; + bmu_dbg("dddd car down is %d\n",data); + } + else if(data > (32768 * parameter->config->dbCARLSB * 1000 / config_data->fRsense -5)) + { + afe_write_car(batt_info->sCaMAH); + batt_info->fRCPrev = batt_info->sCaMAH; + batt_info->fRC = batt_info->sCaMAH; + bmu_dbg("dddd car up is %d\n",data); + } + + if(ABS(batt_info->sCaMAH, data) > one_percent_rc) + { + if((batt_info->sCaMAH < gas_gauge->overflow_data ) && (batt_info->sCaMAH > 0)) + { + afe_write_car(batt_info->sCaMAH); + batt_info->fRCPrev = batt_info->sCaMAH; + batt_info->fRC = batt_info->sCaMAH; + if(parameter->config->debug){ + pr_err("dddd write car batt_info->fRCPrev is %d\n",batt_info->fRCPrev); + pr_err("dddd write car batt_info->fRC is %d\n",batt_info->fRC); + pr_err("dddd write car batt_info->sCaMAH is %d\n",batt_info->sCaMAH); + } + } + } + + + if(batt_info->fRC > (full_charge_data)) + { + pr_err("more fRC %d\n",batt_info->fRC); + batt_info->fRC = full_charge_data; + batt_info->fRCPrev = batt_info->fRC; + afe_write_car(batt_info->fRC); + } +} + + + +/***************************************************************************** +* Description: +* charge fcc update process +* Parameters: +* None +* Return: +* None +*****************************************************************************/ +void charge_end_process(void) +{ + //FCC UPdate + + /* + if(gas_gauge->charge_fcc_update) + { + if(batt_info->fCurr < config_data->charge_end_current) + gas_gauge->fcc_data = gas_gauge->sCtMAH; + bmu_write_data(BATT_FCC,gas_gauge->fcc_data); + + pr_err("charge1 fcc update is %d\n",gas_gauge->fcc_data); + + } + + if(gas_gauge->fcc_data > (config_data->design_capacity *FCC_UPPER_LIMIT / 100)) + { + gas_gauge->fcc_data= config_data->design_capacity * FCC_UPPER_LIMIT / 100 ; + bmu_write_data(BATT_FCC,gas_gauge->fcc_data); + + pr_err("charge2 fcc update is %d\n",gas_gauge->fcc_data); + + } + if((gas_gauge->fcc_data <= 0) || (gas_gauge->fcc_data < (config_data->design_capacity * FCC_LOWER_LIMIT / 100))) + { + gas_gauge->fcc_data = config_data->design_capacity * FCC_LOWER_LIMIT / 100; + bmu_write_data(BATT_FCC,gas_gauge->fcc_data); + + pr_err("charge3 fcc update is %d\n",gas_gauge->fcc_data); + + } + */ + + gas_gauge->fcc_data = config_data->design_capacity; + batt_info->sCaMAH = full_charge_data;; + + if (bmu_sys_rw_kernel) + bmu_write_data(BATT_CAPACITY,batt_info->sCaMAH); + + afe_write_car(batt_info->sCaMAH); + + if(gas_gauge->ocv_flag) + bmu_write_data(OCV_FLAG,0); + + pr_err("yyyy end charge \n"); + batt_info->fRSOC = num_100; + gas_gauge->charge_end = num_1; + charge_end_flag = num_1; + //charger_finish = 0; + gas_gauge->charge_fcc_update = 1; + gas_gauge->discharge_fcc_update = 1; + gas_gauge->discharge_sCtMAH = 0; + power_on_flag = 0; + +} + +/***************************************************************************** +* Description: +* discharge fcc update process +* Parameters: +* None +* Return: +* None +*****************************************************************************/ +void discharge_end_process(void) +{ + //int32_t voltage_end = config_data->discharge_end_voltage; + + //FCC UPdate + /* + if(gas_gauge->discharge_fcc_update) + { + gas_gauge->fcc_data = gas_gauge->discharge_sCtMAH; + bmu_write_data(BATT_FCC,gas_gauge->fcc_data); + pr_err("discharge1 fcc update is %d\n",gas_gauge->fcc_data); + + } + + if(gas_gauge->fcc_data > (config_data->design_capacity *FCC_UPPER_LIMIT / 100)) + { + gas_gauge->fcc_data= config_data->design_capacity * FCC_UPPER_LIMIT / 100 ; + bmu_write_data(BATT_FCC,gas_gauge->fcc_data); + pr_err("discharge2 fcc update is %d\n",gas_gauge->fcc_data); + } + if((gas_gauge->fcc_data <= 0) || (gas_gauge->fcc_data < (config_data->design_capacity * FCC_LOWER_LIMIT / 100))) + { + gas_gauge->fcc_data = config_data->design_capacity * FCC_LOWER_LIMIT / 100; + bmu_write_data(BATT_FCC,gas_gauge->fcc_data); + pr_err("discharge3 fcc update is %d\n",gas_gauge->fcc_data); + } + */ + gas_gauge->fcc_data = config_data->design_capacity; + if(gas_gauge->ocv_flag) + bmu_write_data(OCV_FLAG,0); + + batt_info->sCaMAH = gas_gauge->fcc_data / 100 - 1; + + if (bmu_sys_rw_kernel) + bmu_write_data(BATT_CAPACITY,batt_info->sCaMAH); + + afe_write_car(batt_info->sCaMAH); + batt_info->fRCPrev = batt_info->sCaMAH; + + + pr_err("yyyy end discharge \n"); + batt_info->fRSOC = num_0; + gas_gauge->discharge_end = num_1; + gas_gauge->discharge_fcc_update = 1; + gas_gauge->charge_fcc_update = 1; + gas_gauge->sCtMAH = num_0; + +} + + + +/***************************************************************************** +* Description: +* below is linux file operation +* Parameters: +* description for each argument, new argument starts at new line +* Return: +* what does this function returned? +*****************************************************************************/ +#if 0 +static int bmu_check_file(char * address) +{ + long fd = sys_open(address,O_RDONLY,0644); + + if(fd < num_0) + { + //bmu_dbg(" bmu check file fail %s\n",address); + return -num_1; + } + sys_close(fd); + return (num_0); +} + + +static int bmu_read_data(char * address) +{ + char value[4]; + int* p = (int *)value; + long fd = sys_open(address,O_RDONLY,0644); + + if(fd < num_0) + { + bmu_dbg(" bmu read open file fail %s, return %ld\n",address, fd); + return fd; + } + + sys_read(fd,(char __user *)value,4); + + sys_close(fd); + + return (*p); +} + +static int bmu_write_data(char * address,int data) +{ + char value[4]; + int* p = (int *)value; + long fd = sys_open(address,O_CREAT | O_RDWR, 0644); + + if(fd < num_0) + { + bmu_dbg("bmu wirte open file fail %s failed, return %ld\n",address, fd); + return fd; + } + *p = data; + sys_write(fd, (const char __user *)value, 4); + + sys_close(fd); + return num_0; +} + +#else +static int bmu_read_data(char * address) +{ + return -1; +#if 0 + struct file *fp = NULL; + mm_segment_t fs; + loff_t pos = 0; + char buf_r[5]; + int ret = 0; + int val = 0; + + //pr_err("%s\n", __func__); + + fp = filp_open(address, O_RDONLY, 0644); + if (IS_ERR(fp)) + { + pr_err(" %s: open file fail %s\n", __func__, address); + return -1; + } + + fs = get_fs(); + set_fs(KERNEL_DS); + + pos = 0; + ret = vfs_read(fp, buf_r, sizeof(buf_r), &pos); + if (ret < 0) + pr_err(" %s: read file fail %s\n", __func__, address); + + buf_r[4] = '\0'; + bmu_dbg("%s: read: %s\n", __func__, buf_r); + + ret = kstrtoint(buf_r, 10, &val); + if (ret < 0) + pr_err(" %s: fail to get int from %s\n", __func__, address); + + set_fs(fs); + + filp_close(fp, NULL); + + if (ret < 0) + return ret; + + return val; +#endif +} + +static int bmu_write_data(char * address,int data) +{ + return -1; +#if 0 + struct file *fp = NULL; + mm_segment_t fs; + loff_t pos = 0; + char buf[5]; + char buf_r[5]; + int ret = 0; + int val = 0; + + ret = sprintf(buf, "%d", data); + + //pr_err("%s\n", __func__); + + fp = filp_open(address, O_RDWR | O_CREAT, 0644); + if (IS_ERR(fp)) + { + pr_err(" %s: open file fail %s\n", __func__, address); + return -1; + } + + fs = get_fs(); + set_fs(KERNEL_DS); + + pos = 0; + ret = vfs_write(fp, buf, sizeof(buf), &pos); + if (ret < 0) + pr_err(" %s: write file fail %s\n", __func__, address); + + else if (!strcmp(address, BATT_CAPACITY)) + gas_gauge->stored_capacity = data; + + if(config_data->debug) + { + pos = 0; + ret = vfs_read(fp, buf_r, sizeof(buf_r), &pos); + if (ret < 0) + pr_err(" %s: read file fail %s\n", __func__, address); + + bmu_dbg("%s: read: %s\n", __func__, buf_r); + + ret = kstrtoint(buf_r, 10, &val); + if (ret < 0) + pr_err(" %s: fail to get int from %s\n", __func__, address); + } + + set_fs(fs); + + filp_close(fp, NULL); + + return ret; +#endif +} +#if 0 +static int bmu_check_file(char * address) +{ + struct file *fp = NULL; + + fp = filp_open(address, O_RDONLY, 0644); + if (IS_ERR(fp)) + { + pr_err(" %s: open file fail %s\n", __func__, address); + return -1; + } + return 0; +} +#endif +#endif + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +/**************************************************************************** + * Description: + * oz8806_write_byte_pec + * Parameters: + * //addr: oz8806 slave address + * index: oz8806 operation register + * data: write data + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +#if 0 +static int32_t oz8806_write_byte_pec(uint8_t addr,uint8_t index, uint8_t data) +{ + int32_t ret; + + uint8_t pec_data = num_0; + uint16_t temp = num_0; + pec_data =pec_calculate(pec_data,addr); + pec_data =pec_calculate(pec_data,index); + pec_data =pec_calculate(pec_data,data); + temp = pec_data; + temp <<= 8; + temp |= data; + ret = i2c_smbus_write_word_data(parameter->client, index,temp); + return ret; +} +#endif + + + +/**************************************************************************** + * Description: + * read oz8806 operation register + * Parameters: + * index: oz8806 operation register + * buf: pointer to buffer to store read data + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_read_byte(uint8_t index) +{ + int32_t ret; + uint8_t pec_data = num_0; + uint8_t temp; + + + if(num_0) + { + ret = i2c_smbus_read_word_data(parameter->client, index); + if(ret < num_0 ) return ret; + pec_data =pec_calculate(pec_data,0x5e); + pec_data =pec_calculate(pec_data,index); + pec_data =pec_calculate(pec_data,0x5f); + temp = (uint8_t)(ret & 0xff); + pec_data =pec_calculate(pec_data,temp); + temp = (uint8_t)(ret >> 8); + + if(pec_data != temp) + { + pr_err("33333333333333333 oz8806_read_byte\n"); + pr_err("33333333333333333 pec_data is %d\n",pec_data); + pr_err("33333333333333333 temp is %d\n",temp); + return -num_1; + } + + return ret; + } + else + { + ret = i2c_smbus_read_byte_data(parameter->client, index); + return ret; + } +} + + +/**************************************************************************** + * Description: + * write oz8806 operation register + * Parameters: + * index: oz8806 operation register + * data: write data + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_write_byte(uint8_t index, uint8_t data) +{ + int32_t ret; + uint8_t pec_data = num_0; + uint16_t temp = num_0; + + if(oz8806_pec_check) + { + pec_data =pec_calculate(pec_data,0x5e); + pec_data =pec_calculate(pec_data,index); + pec_data =pec_calculate(pec_data,data); + temp = pec_data; + temp <<= 8; + temp |= data; + ret = i2c_smbus_write_word_data(parameter->client, index,temp); + return ret; + } + else + { + ret = i2c_smbus_write_byte_data(parameter->client, index,data); + return ret; + } +} + +/**************************************************************************** + * Description: + * read oz8806 operation register word + * Parameters: + * index: oz8806 operation register + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_read_word(uint8_t index) +{ + int32_t ret = num_0; + int32_t ret1 = num_0; + uint8_t temp; + uint8_t pec_data = num_0; + + if(num_0) + { + ret = i2c_smbus_read_word_data(parameter->client, index); + if(ret < num_0) return ret; + pec_data =pec_calculate(pec_data,0x5e); + pec_data =pec_calculate(pec_data,index); + pec_data =pec_calculate(pec_data,0x5f); + temp = (uint8_t)(ret & 0xff); + pec_data =pec_calculate(pec_data,temp); + temp = (uint8_t)(ret >> 8); + + if(pec_data != temp) + { + pr_err("index 0x%02x\n",index); + pr_err("0x%02x\n",(uint8_t)(ret & 0xff)); + pr_err("33333333333333333 oz8806_read_word num_1\n"); + pr_err("33333333333333333 pec_data is 0x%02x\n",pec_data); + pr_err("33333333333333333 temp is 0x%02x\n",temp); + + pr_err("33333333333333333 ret is 0x%02x\n",ret); + return -num_1; + } + + ret1 = i2c_smbus_read_word_data(parameter->client, (index + num_1)); + if(ret1 < num_0) return ret1; + + pec_data = num_0; + pec_data =pec_calculate(pec_data,0x5e); + pec_data =pec_calculate(pec_data,(index +num_1)); + pec_data =pec_calculate(pec_data,0x5f); + temp = (uint8_t)(ret1 & 0xff); + pec_data =pec_calculate(pec_data,temp); + temp = (uint8_t)(ret1 >> 8); + + if(pec_data != temp) + { + pr_err("33333333333333333 oz8806_read_word 2\n"); + pr_err("33333333333333333 pec_data is %d\n",pec_data); + pr_err("33333333333333333 temp is %d\n",temp); + return -num_1; + } + + ret1 <<= 8; + ret1 |= (uint8_t)(0xff & ret); + return ret1; + } + else + { + ret = i2c_smbus_read_word_data(parameter->client, index); + return ret; + } +} + +/**************************************************************************** + * Description: + * write oz8806 operation register + * Parameters: + * index: oz8806 operation register + * data: write data + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_write_word( uint8_t index, uint16_t data) +{ + int32_t ret; + uint8_t pec_data = num_0; + uint16_t temp = num_0; + + + if(oz8806_pec_check) + { + + pec_data =pec_calculate(pec_data,0x5e); + pec_data =pec_calculate(pec_data,index); + pec_data =pec_calculate(pec_data,(uint8_t)data); + temp = pec_data; + temp <<= 8; + temp |= (uint8_t)data; + ret = i2c_smbus_write_word_data(parameter->client, index,temp); + + if(ret < num_0) return ret; + pec_data = num_0; + + pec_data =pec_calculate(pec_data,0x5e); + pec_data =pec_calculate(pec_data,(index +num_1)); + pec_data =pec_calculate(pec_data,(uint8_t)(data>>8)); + temp = pec_data; + temp <<= 8; + temp |= (uint8_t)(data >> 8); + ret = i2c_smbus_write_word_data(parameter->client, (index +num_1),temp); + + return ret; + } + else + { + ret = i2c_smbus_write_word_data(parameter->client, index,data); + return ret; + } +} + +/**************************************************************************** + * Description: + * read oz8806 cell voltage + * Parameters: + * voltage: cell voltage in mV, range from -5120mv to +5120mv + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_cell_voltage_read(int32_t *voltage) +{ + int32_t ret; + int32_t data; + + ret = oz8806_read_word(OZ8806_OP_CELL_VOLT); + + if (ret < num_0) return ret; + + data = ret & 0xFFFF; + data = (int16_t)data / 16; // >> 4 and keep sign bit + + data = data * parameter->config->fVoltLSB; //fVoltLSB = 250 (2.5 mV) + data = data / num_100; //fVoltLSB = 250 (2.5 mV) + + if (data > 5117 || data < 0) + { + pr_err("%s:data: %d, reg:%x\n", __func__, data, ret); + return -1; + } + batt_info->i2c_error_times = 0; + *voltage = data; + + return ret; +} + +/**************************************************************************** + * Description: + * read oz8806 cell OCV(open circuit voltage) + * Parameters: + * voltage: voltage in mV, range from -5120mv to +5120mv with 2.5mV LSB + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_ocv_voltage_read(int32_t *voltage) +{ + int32_t ret; + int32_t data; + + ret = oz8806_read_word(OZ8806_OP_OCV_LOW); + if (ret < num_0) return ret; + + data = ret & 0xFFFF; + data = (int16_t)data / 16; // >> 4 and keep sign bit + + data = data * parameter->config->fVoltLSB; //fVoltLSB = 250 (2.5 mV) + data = data / num_100; //fVoltLSB = 250 (2.5 mV) + + if (data > 5117 || data < 0) + { + pr_err("%s:data: %d, reg:%x\n", __func__, data, ret); + return -1; + } + + *voltage = data; + + return ret; +} + +/**************************************************************************** + * Description: + * read oz8806 current + * Parameters: + * current: in mA, range is +/-64mv / Rsense with 7.8uv LSB / Rsense + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_current_read(int32_t *data) + +{ + int32_t ret; + int32_t temp; + + ret = oz8806_read_word(OZ8806_OP_CURRENT); + + if (ret < num_0) return ret; + + temp = ret & 0xFFFF; + temp = (int16_t)temp * parameter->config->dbCurrLSB; //dbCurrLSB = 391 (3.90625 mA) + temp = (temp * 10 / parameter->config->fRsense); + temp /= 4; + + batt_info->i2c_error_times = 0; + *data = temp; + return ret; +} + +/**************************************************************************** + * Description: + * read oz8806 temp + * Parameters: + * voltage: voltage value in mV, range is +/- 5120mV with 2.5mV LSB + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +int32_t oz8806_temp_read(int32_t *voltage) +{ + int32_t ret; + int32_t data; + + ret = oz8806_read_word(OZ8806_OP_CELL_TEMP); + if (ret < num_0) return ret; + + //pr_err("1111111111111 regeister is 0x%02x\n",ret); + + data = ret & 0xFFFF; + data = (int16_t)data / 16; // >> 4 and keep sign bit + + data = data * parameter->config->fVoltLSB; //fVoltLSB = 250 (2.5 mV) + data = data / num_100; //fVoltLSB = 250 (2.5 mV) + + if (data > 5117 || data < 0) + { + pr_err("%s:data: %d, reg:%x\n", __func__, data, ret); + return -1; + } + + *voltage = data; + + //pr_err("1111111111111 voltage is %d\n",*voltage); + + return ret; +} + +/**************************************************************************** + * Description: + * read oz8806 CAR + * Parameters: + * car: in mAHr, range is +/- 163840 uvHr/ Rsense with 5 uvHr LSB / Rsense + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_car_read(int32_t *car) +{ + int32_t ret; + int32_t data; + + + ret = oz8806_read_word(OZ8806_OP_CAR); + if (ret < num_0) return ret; + + + data = (int16_t)ret; + data = data * parameter->config->dbCARLSB; + data = data * 1000 / parameter->config->fRsense; + + batt_info->i2c_error_times = 0; + *car = (int16_t)data; + return ret; +} + + +/**************************************************************************** + * Description: + * write oz8806 CAR + * Parameters: + * data: in mAHr, range is +/- 163840 uvHr/ Rsense with 5 uvHr LSB / Rsense + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_car_write(int32_t data) +{ + int32_t temp; + int32_t ret; + + temp = data; + temp = (temp * parameter->config->fRsense) / parameter->config->dbCARLSB; //transfer to CAR + temp /= 1000; + ret = oz8806_write_word(OZ8806_OP_CAR,(uint16_t)temp); + + return ret; +} + +/**************************************************************************** + * Description: + * read oz8806 board offset + * Parameters: + * data: in mA, +/- 8mV / Rsense with 7.8uV / Rsense + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_board_offset_read(int32_t *data) +{ + int32_t ret; + int32_t temp; + + + ret = oz8806_read_word(OZ8806_OP_BOARD_OFFSET); + if (ret < num_0) return ret; + + + temp = (int16_t)ret; + temp = temp & 0x7ff; + if(temp & 0x0400)// if bit[10] is 1, it's negative + temp = temp |0xfffffc00; + temp = temp * 78; + temp = temp * 100/ config_data->fRsense; + + *data = (int16_t)temp; + return ret; +} + +/**************************************************************************** + * Description: + * write oz8806 board offset + * Parameters: + * data: the data will be wrriten + * Return: + * see I2C_STATUS_XXX define + ****************************************************************************/ +static int32_t oz8806_board_offset_write(int32_t data) +{ + int32_t ret; + int32_t over_data; + + + + if(data > num_0){ + data = data * config_data->fRsense * num_10 / 78; + data /= 1000; + if(data > 0x3ff)data = 0x3ff; + ret = oz8806_write_word(OZ8806_OP_BOARD_OFFSET,(uint16_t)data); + } + else if(data < num_0){ + over_data = (-1024 * 78 * 1000) / (config_data->fRsense * num_10); + if(data < over_data) + data = over_data; + data = data * config_data->fRsense * num_10 / 78; + data /= 1000; + data = (data & 0x07ff) | 0x0400; + ret = oz8806_write_word(OZ8806_OP_BOARD_OFFSET,(uint16_t)data); + } + else + ret = oz8806_write_word(OZ8806_OP_BOARD_OFFSET,num_0); + + return ret; +} + + +/***************************************************************************** + * Description: + * wrapper function for operation register byte reading + * Parameters: + * index: register index to be read + * *dat: buffer to store data read back + * Return: + * I2C_STATUS_OK if read success, else inidcate error + *****************************************************************************/ +static int32_t afe_register_read_byte(uint8_t index, uint8_t *dat) +{ + int32_t ret; + uint8_t i; + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_read_byte(index); + if(ret >=num_0) break; + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + + *dat = (uint8_t)ret; + + return ret; +} + + +/***************************************************************************** + * Description: + * wrapper function for operation register byte writing + * Parameters: + * index: register index to be read + * dat: write data + * Return: + * see I2C_STATUS_XXX define + *****************************************************************************/ +static int32_t afe_register_write_byte(uint8_t index, uint8_t dat) +{ + int32_t ret; + uint8_t i; + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_write_byte(index, dat); + if(ret >= num_0) break; + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + + return ret; +} + + +/***************************************************************************** + * Description: + * wrapper function for operation register word reading + * Parameters: + * index: register index to be read + * *dat: buffer to store data read back + * Return: + * I2C_STATUS_OK if read success, else inidcate error + *****************************************************************************/ +static int32_t afe_register_read_word(uint8_t index, uint16_t *dat) +{ + int32_t ret; + uint8_t i; + + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_read_word(index); + if(ret >= num_0) break; + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + + *dat = (uint16_t)ret; + + return ret; +} + + +/***************************************************************************** + * Description: + * wrapper function for operation register word writing + * Parameters: + * index: register index to be read + * dat: write data + * Return: + * see I2C_STATUS_XXX define + *****************************************************************************/ +#if 0 +static int32_t afe_register_write_word(uint8_t index, uint16_t dat) +{ + int32_t ret; + uint8_t i; + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_write_word(index, dat); + if(ret >= num_0) break; + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + + return ret; +} +#endif + + + +/***************************************************************************** + * Description: + * wrapper function to read cell voltage + * Parameters: + * vol: buffer to store voltage read back + * Return: + * see I2C_STATUS_XXX define + * Note: + * it's acceptable if one or more times reading fail + *****************************************************************************/ +int32_t afe_read_cell_volt(int32_t *voltage) +{ + int32_t ret; + uint8_t i; + int32_t buf; + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_cell_voltage_read(&buf); + if(ret >= num_0) + break; + msleep(5); + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + if(oz8806_cell_num > num_1) + { + //*voltage = buf * num_1000 / res_divider_ratio; + bmu_dbg("read from register %d mv \n",buf); + *voltage = buf * res_divider_ratio / num_1000; // res_divider_ratio = ((Rpull + Rdown) / Rdown) * 1000 + *voltage /= oz8806_cell_num; + } + else + *voltage = buf; + return ret; +} + + +/***************************************************************************** + * Description: + * wrapper function to read cell ocv voltage + * Parameters: + * vol: buffer to store voltage read back + + * Return: + * see I2C_STATUS_XXX define + * Note: + * it's acceptable if one or more times reading fail + *****************************************************************************/ +static int32_t afe_read_ocv_volt(int32_t *voltage) +{ + int32_t ret; + uint8_t i; + int32_t buf; + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_ocv_voltage_read(&buf); + if(ret >= num_0) + break; + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + + if(oz8806_cell_num > num_1) + { + *voltage = buf * num_1000 / res_divider_ratio; + *voltage /= oz8806_cell_num; + } + else + *voltage = buf; + + return ret; +} + +/***************************************************************************** + * Description: + * wrapper function to read current + * Parameters: + * dat: buffer to store current value read back + * Return: + * see I2C_STATUS_XXX define + * Note: + * it's acceptable if one or more times reading fail + *****************************************************************************/ +int32_t afe_read_current(int32_t *dat) +{ + int32_t ret; + uint8_t i; + int32_t buf; + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_current_read(&buf); + if(ret >= num_0) + break; + msleep(5); + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + *dat = buf; + return ret; +} + + +/***************************************************************************** + * Description: + * wrapper function to read CAR(accummulated current calculation) + * Parameters: + * dat: buffer to store current value read back + * Return: + * see I2C_STATUS_XXX define + * Note: + * it's acceptable if one or more times reading fail + *****************************************************************************/ +static int32_t afe_read_car(int32_t *dat) +{ + int32_t ret; + uint8_t i; + int32_t buf; + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_car_read(&buf); + if(ret >= num_0) + break; + msleep(5); + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + *dat = buf; + return ret; +} + + + +/***************************************************************************** + * Description: + * wrapper function to write car + * Parameters: + * dat: buffer to store current value read back + * Return: + * see I2C_STATUS_XXX define + * Note: + * it's acceptable if one or more times reading fail + *****************************************************************************/ +static int32_t afe_write_car(int32_t date) +{ + int32_t ret; + uint8_t i; + + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_car_write(date); + if(ret >= num_0) break; + msleep(5); + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + return ret; +} + +/***************************************************************************** + * Description: + * wrapper function to write board offset + * Parameters: + * dat: buffer to store current value read back + * Return: + * see I2C_STATUS_XXX define + * Note: + * it's acceptable if one or more times reading fail + *****************************************************************************/ +static int32_t afe_write_board_offset(int32_t date) +{ + int32_t ret; + uint8_t i; + + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_board_offset_write(date); + if(ret >= num_0) break; + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + return ret; +} + +/***************************************************************************** + * Description: + * wrapper function to read board offset + * Parameters: + * dat: buffer to store current value read back + * Return: + * see I2C_STATUS_XXX define + * Note: + * it's acceptable if one or more times reading fail + *****************************************************************************/ +static int32_t afe_read_board_offset(int32_t *dat) +{ + int32_t ret; + uint8_t i; + int32_t buf; + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_board_offset_read(&buf); + if(ret >= num_0) + break; + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + *dat = buf; + return ret; +} +/***************************************************************************** + * Description: + * wrapper function to read temp + * Parameters: + * dat: buffer to store current value read back + * Return: + * see I2C_STATUS_XXX define + * Note: + * it's acceptable if one or more times reading fail + *****************************************************************************/ +static int32_t afe_read_cell_temp(int32_t *data) +{ + int32_t ret; + uint8_t i; + int32_t temp; + int32_t buf; + + if (gas_gauge->ext_temp_measure) + return num_0; + + for(i = num_0; i < RETRY_CNT; i++){ + ret = oz8806_temp_read(&buf); + if(ret >= num_0) break; + msleep(5); + } + if(i >= RETRY_CNT){ + batt_info->i2c_error_times++; + bmu_dbg("yyyy. %s failed, ret %d\n", __func__, ret); + return ret; + } + + + if((buf >= config_data->temp_ref_voltage)|| (buf <= num_0)){ + *data = num_25; + } + else{ + temp = buf * config_data->temp_pull_up; + temp = temp / (config_data->temp_ref_voltage - buf); + *data = one_latitude_table(parameter->cell_temp_num,parameter->temperature,temp); + } + //pr_err("1111111111111 r is %d\n",temp); + return ret; +} + +/***************************************************************************** + * Description: + * pec_calculate + * Parameters: + * ucCrc: source + * ucData: data + * Return: + * crc data + * Note: + * + *****************************************************************************/ +static uint8_t pec_calculate (uint8_t ucCrc, uint8_t ucData) +{ + uint8_t j; + for (j = num_0x80; j != num_0; j >>= num_1) + { + if((ucCrc & num_0x80) != num_0) + { + ucCrc <<= num_1; + ucCrc ^= num_0x07; + } + else + ucCrc <<= num_1; + if (ucData & j) + ucCrc ^= num_0x07; + } + return ucCrc; +} +#if 0 +/***************************************************************************** + * Description: + * i2c_read_byte + * Parameters: + * Return: + * Note: + * + *****************************************************************************/ +static int32_t i2c_read_byte(uint8_t addr,uint8_t index,uint8_t *data) +{ + int32_t ret = 0; + #if 0 + struct i2c_adapter *adap=parameter->client->adapter; + struct i2c_msg msgs[num_2]; + int scl_rate= num_100 * num_1000; + msgs[num_0].addr = addr; + msgs[num_0].flags = parameter->client->flags; + msgs[num_0].len = num_1; + msgs[num_0].buf = &index; + msgs[num_0].scl_rate = scl_rate; + + msgs[num_1].addr = addr; + msgs[num_1].flags = parameter->client->flags | I2C_M_RD; + msgs[num_1].len = num_1; + msgs[num_1].buf = (char *)data; + msgs[num_1].scl_rate = scl_rate; + + ret = i2c_transfer(adap, msgs, num_2); + + #endif + return (ret == num_2)? num_0 : ret; +} + +/***************************************************************************** + * Description: + * i2c_write_byte + * Parameters: + * Return: + * Note: + * + *****************************************************************************/ +static int32_t i2c_write_byte(uint8_t addr,uint8_t index,uint8_t data) +{ + int32_t ret = 0; + #if 0 + struct i2c_adapter *adap=parameter->client->adapter; + struct i2c_msg msg; + int32_t scl_rate = num_100 * num_1000; + + char tx_buf[num_3]; + tx_buf[num_0] = index; + tx_buf[num_1] = data; + + msg.addr = addr; + msg.flags = parameter->client->flags; + msg.len = num_2; + msg.buf = (char *)tx_buf; + msg.scl_rate = scl_rate; + + if(oz8806_pec_check) + { + msg.len = num_3; + tx_buf[num_2] = num_0; + tx_buf[num_2] =pec_calculate(tx_buf[num_2],(addr<sCaMAH); + batt_info->fRCPrev = batt_info->sCaMAH; + batt_info->fRC = batt_info->sCaMAH; + } +} +EXPORT_SYMBOL(bmu_reinit); + +#ifdef CONFIG_OZ8806_M +static int __init bmulib_init(void) +#else +int bmulib_init(void) +#endif +{ + int ret = 0; +#if !defined(OZ8806_API) + uint32_t byte_num = 0; + uint8_t * p = NULL; +#endif + + pr_err("%s\n", __func__); + + //NOTICE: Don't change the sequence of calling below functions + +#ifdef OZ8806_API + bmu_kernel_memaddr = oz8806_get_kernel_memaddr(); +#else + byte_num = sizeof(config_data_t) + sizeof(bmu_data_t) + sizeof(gas_gauge_t); + p = kzalloc(byte_num, GFP_KERNEL); + bmu_kernel_memaddr = (unsigned long)p; +#endif + if (!bmu_kernel_memaddr) + goto fail_mem; + + parameter_customer.client = oz8806_get_client(); + if (!parameter_customer.client) + goto fail_i2c; + pr_err("i2c address:%x\n", parameter_customer.client->addr); + //struct oz8806_data *data = i2c_get_clientdata(parameter_customer.client); + + bmu_init_parameter(¶meter_customer); + + bmu_init_parameter_more(¶meter_customer); + + bmu_init_chip(¶meter_customer); + + oz8806_set_batt_info_ptr(batt_info); + + oz8806_set_gas_gauge(gas_gauge); + + oz8806_register_bmu_callback(&bmu_polling_loop, &bmu_wake_up_chip, &bmu_power_down_chip, + &charge_end_process, &discharge_end_process, + &oz8806_temp_read, &afe_read_current, &afe_read_cell_volt); + + return ret; +fail_mem: + pr_err("%s: bmu_kernel_memaddr error\n", __func__); + +fail_i2c: + pr_err("%s: oz8806 i2c register error\n", __func__); + return -1; +} + +#ifdef CONFIG_OZ8806_M +static void __exit bmulib_exit(void) +#else +void bmulib_exit(void) +#endif +{ + pr_err("%s\n", __func__); + unregister_bmu_callback(); + +#if !defined(OZ8806_API) + if (bmu_kernel_memaddr) + kfree((int8_t *)bmu_kernel_memaddr); + bmu_kernel_memaddr = 0; +#endif +} + +#ifdef CONFIG_OZ8806_M +//module_init(bmulib_init); +late_initcall(bmulib_init); +module_exit(bmulib_exit); + +MODULE_AUTHOR("O2Micro"); +MODULE_DESCRIPTION("o2micro oz8806 battery gauge driver"); +//MODULE_LICENSE("GPL"); +#endif + diff --git a/drivers/power/sd77426_fg_mmi/bmulib.o b/drivers/power/sd77426_fg_mmi/bmulib.o deleted file mode 100644 index 907a72a03a92e8d230a690dc6d7e442e1a27cbc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 411336 zcmd4)dt8*)wFivv=b1rA0YyMXP@R*my;$rX-~nVxtunqX|9sQ@P5C0?`Ig$r2YNg ze_lTyn7#I1d+l}GYp;D7Y+G^JO4Bfe{m&4;6eEybE5zPQ#)SZ%Ect|6%ofQaxprfO zC`l2%zEa_+^_imNZ%)9L=yHno;_*VnCtHpeD$!n!x`%{W>oY{jt@zpF6jNSzIF2R@ zXRR?jTw?vs+9&!;PxL!V|McEK};GM)zfp8Yx10LK$6nR?Bq<|15<)|x&dN>h0N0OGMX`bEr;E}Tq(e=SK=8Ez45slC7x@&&pR*1 zH*^#5{sO%auYE%LzHz`S72|4GK66uIeuUT@9WP1-9Fa%e(5DGK-UHlyz%?NY%jCli zU5Xgdl`kgL4t_RVGVBza2OJZR=Ah3;=$iegd%GXY?AJX`^}EL$FZ(59ya7kl(d@8( ze+lcyGW#{@er={p_RBYnS}Q_aVLa23I1HHwoZ^c3XSx#uPrCOd8*#NRw8cHUKe77d z;0Y7*`JT+#cje2?CvJba>4eKLizcG3{mJZouIqjKkDC*Vl8xlQ(HD;2;M@O^DT?lm zE&cc-lwZT=zywk97;GFEC$89spIyQ%60PHt?iCY@{s{fw7}Z`}XNbu0Vtiz~DI#x; zn2=P^ns(Py(|kj<#`wr@nByb&wEFfJL_KlmWB9B^yKqiO8pO})C+F?E^yRt})q{6F zR~`S8cQa0wo;ZBz$#>t}@&3DShzUh+0RN3v^RA3pX?I=vq_xlYa^S=p;8Te4;K8?F zpzRHjc9-wv+7rNk`i)lSU2jCaa3{+9RzG>cKGGAQW8-ERz=e+d&OG8iN^83_QYY^m1l>K@?_zmwj3P%THB( znXFedSx+AR0y<}R{z}fzkIEfK640M>lXG>b)_EizFnI2QZMzKN8|qykh78gEoZ;{d z^(6X++?adQV|;y!Q+<8EoOovO!HK@1;ID2j_D3CTjEnM-=guL=^rC_iS?)T0gPG)S zb>HRwv}(Vnbyrc7X%=ZYyNNsKm@fH-0y^P~Qm%s-=TM>1HRza;IRKp$%=GmwZ$Bn86K9HbgN{VBO+QMxde^COQI`FC$dhRQwm>YgR$2Rc$N7dV#IiP1)PB<; zN*s`dV;@xgy8O+v*OfyqH+((2I%%C-#6>nG`1(A;j9eG>e4@=SdFcj^2N(E;IuOJB z!gy*>h~puY%a5Gh`Iz(x@&?@%$KmI{og#;0+B~vs+nac#{T6J~3*OD^(MRi& z_-^RZ-Dyl&(mFk9aMG#7CesM%a6Du=jlP3U-_QW!P!sgSI6DA&IxtrS`rd^Y|1HompzDyHuO6*ufw7&Z z_Z0U=ektP+XhvX6=&UG!c=>aTThJPpa+|xxK7CYc8pIiW&!H>gz=2gI_9Z8v(7e@yi(~c&J_E^e+HQ|aL_)*hrv5xT1 z&kW~UkkbQsj0E_1I{1g)E%4{F`ErO{(&spz=c8QzlfW18#^SJFm@mU$lR`0ux_B5i zGoTyr(+L}QodykeyPSh^9uA_N^v~}6wTw5kA9I2CVN2SWcBFj=IG4=!;t!!i+ioAg zZvEz&B?j!)kM`5>fk$A2GT7V!`2vVRLvsH1NC#wM?n7A_OEDLZ zwu7!MR{%2Y226jXANt{kZulYPtAJc?_#$OI1fSglp9Gxbfn4;-g4T{A=7EPXhsq!y zLh3?!wqpKY@5%3iOANoMfuXFP<=2Rc)xiuC2(;@! zSZ9FCcm$H9bg8ee19}3FeaX;8MStmz%aMbnAzw3vqo@PCx1(I%8j(~M zbt-Ye+2PvkL7ND|^z=g(kYK-uUAJs5*)^DiJ9?Q8q5mTxiR(0iYK@w^!@7=PkN#T9!F zGAhW$4g1@1g|;Ejv<>BxR>jQIxFJ2#Vcn7|?oDK6rj!!u4$X3gb8RYVYm(;VTB_){9~Dfbm;6&MbKtZH#sPbP-!1ro~dX zR>`zQTz8F_j>P^6?ZpL{7mVRP>IXTV71b~2M!VF}`C~ZwqF+)MjNgNp7pFgGUJRV0 z2gL8dh#ub1dT>DRr?EdhyYrzVgW#WWJb)Nz`^wp!CuOX)_qVn_niBUw7k5a18$#|r z9lBxc|KspOjX(GQs_}!i_F@FlO!%nWuXlh?#stO#cbl2yf!qa7BhufRjrA+=JmO%a zyLDWg8~Jknr;|6kpZQKA;?eEMfigdW%qNU9i$8+g(<4Mqz9YF-K=*ZLhvA3tYm_?> z5C1b9|FhvG1CE5up_Gxe@FV0O_THr({0Q0u{II{x&ne`Z`3|$zb7)thztxa@`oX6M zd=`LD=Enu#(~ot@ohoA8V%nmg>T&-FoeJmxbEC_I4&9%Vqxe1<}DZwGHMlH7>1x9GKs`O^c?os4J9si4E`e-*=o ziecxA&*#J_%Nd$m?@7LYdxSUxh($6dh!jKFDozXq5Rb}{>(dX)xJDpf4n~PStJS(o zV67L>De}21e5s%Y(g_#}a)gcgwzzD*#%hF41Si2(K{{KMBH{4EViB z=5Q)UIJ@)zB|q>>o2R?Llg$tLX!}rj$;)o!^yI}2o`UZRZy|Y#SNxE#Icro_0>C=D{PO9Evizq2tq7x7>lT_Wb|M zy6OG5*UkPB8OE-g_IzTjYJ$BGZ`GbZS;#$q?<ZyS$nQ+_VT|-a zSF}I(#l6X#hsaHYcnW?J+85hves8^RJ8-2BZvkEQ3$M#=9k+R>YYJQ(qGE9}m*gnq0a zJ-5MjP7xc3lIIxR?zmmgA^-W?>S$5&U!co<9QVi~OLR^8boh2z_KB_zyWD_W-!9`U zH3PJF>zMW$_L8*GWAL3I;&vJGrVgw(%W*EV2j>Yl;!I|bh={~lWMmoQ$s>rFdw9Np zT#7Jd?FfsHZuCE=4*Nyc;ivN;WC=fe8PykOAH>@~^Nf@^Fi|Y=IbDmTJOS+S!8d78 zpZM(R_)K_--#eXqhxTIn(1$oT>7{OgM;yD|f?xgPd~MkO^yqohKW=2+j6Girr}vun z@nqQ8_5LvJ9U6<{`Db(#Tg*98KA><%x5w=YwG-zyjYD4nEO};qI32?DANmpHryp%O z4{hUP>>>5o?DI9vD|N_z9at*_bQuF(+CJ0q3FbBYfcf+47*VndxH!k?^ChVLJ?L~k zk8$xSd9&9;nU%{A!jAJ<;&M?3T7_mD3%AwS@}@_`4QO_oy*>>E>%dzB+U z2qHi5J4N3S@YjL$milsIJRf{NC0$&>z46~b*8;wsPgt;t4}E;d9Z35q^iN&cq6c=bP(s-CSv9w#(3yz(Z@ZaZClD<&J=O4f`8I|4LE}iQ=Wa5FZ1>7 zf!%o*_WtAdByvA5mz+0QtAcg+43x2;`FXDx)=}s z1{)k)7tHs~j}8k=v86eV(x1)sP8c4r%X`DY)) z$5_UAPKTNge+BO?m}{O}{TcV6{~nxedSF*K^$Z?~ivk>DX zP5DV&&<;eMSwf!iBj-;qc%{BJP8KEc<3tYUT!1khj5bc4H}&G| zz6bRda+E-9SghsQJ@!ZTc_-K1)6n4^$Y*E3M_+|Z<&epM{QaQVlhX;3c8OW6$Q9=u2P zz-NDj_4IMj2uyUGV~4v@Px~2{!RA=wjmzYDgUn+R#)~TwlEu2bcZPFm^P7Mx!gL!x zo*OYkU`&p8H^%!Ra2>dxAig~(nkGG*$U6wsbyHUI8Nl5j`*fiX>o^X5hwF?(_Qlzu zwk6JFyvd0BM{uUz5rMS>^Wqcq3+L(LF+5T>>V&jRocWbvzf;P656*D9KN!v-FDnsy zPXW&lzfHj$U`%`(WBieNLBD?Rg}%63Pp+N!kKq!;&mj|blJO39=6Vs0vz$|~p_}U+ z{9rfyfop}E=gqKTDfU~}DcfR13k@r1ad z4L*ATa#A1b;2+do59ITspDnAJf7nkUHs`!GoI~4hK>L^QSqL5M;(ZEuEGG?p#%Lkl zTf&*K0C=Z>r_N22>m_9``iyAU}Cf_k|CJ;w$55Jah;BcI}5A?YkPr zSU6E9V=QwB8Do)`GR6iAWG>Vl;3s@BP+)jzALdN7^-=J~vyF1tgSq`dqyJoFOc zv5eSR4j++aAMTOtatz`gaO`#e)Om6YyN!CV*NstiI*%Mx2mhCHoEg5IXY{+mVr8(* z?=3G7Z103!hB#*>ZRF;`GQ(SdxLF1}73!E-#<+8p#P24ZAbgZ^urF~vSc|7)yy0nL z^G4(Wfe*1RM629=utDYS6QZY37!NvVv z#>MN>kh?)I1E9&hY(MP6xN$S;?YQwa)-sz0K0`h>1wIz;TWo6t4SsTc;#n*E*)i?( zM5SBAZ{GJU3@jHV%+-j4pROnU;01l#zzgfzs^q6!n|`9`hSnic?3T$s%l zh>xVZ2WQMIzsb1)xCiIYBI>b3<_><;tw5U}u`__2+KGHRAMdE1M*SYpc4FTt@b<}v zb{}GK5V({Rxx1HgaeV;X71aBYQ857gPzR&xlpNih!=%H$u&=@kuTykK_jR6!p5CL# zxQ6y)I+g`Mi#ebNJS)9&jdRpqj$8@(e36N~TiF?T6>`l|qZoJj$O6 zdCT4rUgXH$WcU)#^k_TrDSQy`UML^WgV?7XF{y(xK%VwZp#PfT{q(cp>BI18%o z)3(f>YQNW=C3Vm({R1(peU`|n_?GX;HoWJc&U7s9EXUgpsVC^<)i0&&+g)9Lg5wgG zc>SJE3Q$;i=av8L1J^tEu`qEFepkXCrP1oM+}o)|N???Ak% zf;{24&yK+v06&9QA^!pWr_g5S1gBt^7tmMg7I{QI^eXjJdU;nLXE>S$n zm@%L2c)w-OxfJ5)`M44HQnGEW*gOw5Y{wemp$?c2)8CMDl)~2ozgn?lUNZLEwBLE= z>Qp%{<~8WNjXQ=9H6Os0JQ#>E0x=>Veju=J;$6b+rj93eEGf`F$~Y5%Zw3L&Igfk? zGH?D7KBfQoR4fVcj#y&z9vs6v=P7x=47TLFw|VDVnV`~9_v_LwDkj;y=QGxPiZ^_w zQTr5hL_f2{^rAAnU!iaC?PNdcLI25!_p5+o)5fPf8(ai5S-g`G1HQHywBaIB+S^fhd!O>^OnQ*H$v8Y#I!kxXBEQ0 zTfm4UzFFLZ_nso^(ZqW|>vET}XIF`|aefZP3kHXpk-lTqIyab-k3%ZLTBYkKd z-ciX|ujG)pTDDMpwq>=~y}~j2DMMW3eqwNtn2(?I(P_kTb(!mCiGs1e)U0|7;1)o znB%w8rVXNNBYaer;jiERaOAu$M&a#pijBs>!I^MyG_=sxe~I8tV>nCHwsVtw;l1aE$2)$p%;&Xm*Gu~EVSfw*carV^bl8D0 zw&M=O#Cx}OPO)9+cW*|N|M_0{0pGXcbfDE@^AD0W7G{m?gH4uj~GQeoq^u3Bp=!)9LGc- zpO(kwk^R_btPOeh0{YOAdc%u11V;hmt>{$NcdwgpW=Zx0r4QSFwyntLzw)ncHK)2o z%dA*$Qt~;FM8e{59Df*2$2f(9b@sfpUWFb^%g8jqM<7gRWBtJPlkaI6$F{dXF7ix1_-7kk z8+&dRxm$qS!#w&myu*tSxji2v?m0vb^Una~8iO;`l?D zJK=ZWe1rN)(+a!^c~Zt+`uAz*H=MQ)?`V$4nRv4|_2?&v`Me(`pS|BeJmngkuGVm8 zjDJU9uP9lJ_|Lo8UaT1w)(m^^@joA6UEn%`wZmbTeWGhC%dZ+;9!MqkL$y? zMecX!pILJ6PM*CZPr$h^b@Er7%U0rCmh=pZZANVh_GTSe`%`*$C;E{O%*7eK43T#<(Wd3kSx-K5b|@at-dMJ;2#59FZx=(VS>wj?^xAeriTq*gF(rzFO&LmXL4w zQ8(V)#T|l8$$Jp@3Th0awhVH=cB*uTF&}vf=q6(y<^z8T;D_(0+prHK907jQ_K4hI zjL#dy`OTIApLfeLkwcr&PEO=82gn0>Ne~G|3Hc)KzQZCn8E=N(o+V1Q11}YMU_1I* z*sqhOJS#sWay!Jz4CZ4vD^3dFUGsq~>~---peN66w{3jBed2^~Q;d>;z3 z`ljGL->F0q&+`FM8?_34f^mG1gSb4ia=;JW@B#NTyAvH3VSj_VeX+Rj!+1QO34j*g z{_@SQ8G7g2UgXo~9i;K}E>R+7#oJeS6LgH6?^2vQfG11a4CfcQ+b|~I8u4w>tMDt{ zTa|%+2l(-Y-WBaCDgf;QoTbpWf7byYLz(07T%{ehqpT-Et5VDB&hn}AN1Q1Jk%tJp zMeNzhoOtR{3o&si=6N}A55^UEK|2GxtD zOI;#n^uu->|CWoez6ep2A0;*q;tVN>`ZUA>$lFPLe9C#l{_ML?ulv$ZcxD7YIQh@v zoMg<8Tj4Vuu=l|_HHUj}r_x)8I}_x+#5ciX@*{@yfj0UV;$8B4!n+yeHtjYdj17p49zQVEZ6+orgKl!n}IhY^|SEXJ9YKzMSI&-xs;k|3D)E9NG`Os5s8EYs(>hIukL-#~1|OF3-bv z{=my1d@Kkbv+o%U`Td?sd8bQX@?oqvjBn3h1HR6&Gc>=LQ+?e3GS)Ko-G?&u-+Kz@ zKRDlYBmd|{Or{^yJU{v_jIo-11Z4VHuN`A$EP#yP1Wk*6ohmlFaJI-bB=8j#YZy}m z{4RMW_L+|lmrTSR?1SK!dZ#YjXvZ0L-vZ5-oO{qE$NV$KG-+qr0Wf9tK{ne@f>=A` zdI(u*+a2)9i=fYCz-@yKKTgHk0)5K++*HH?;3ObES5y>bq=853ivGj68gU2sZAWZ= zX*l-|F(Z=tWSnI@W-LxS;LkYKIwMKV?W+AI?gZ`=ri{zM5}&uCS=rNYxiM9+R^dBv z`8Wr4V=v74CVD#Let6F_?TKH#Tj{0)^aS26n83HkQEw8f$Sf@?jHF6 zjaee65WdX#9z>rY&Jr!mfk3xrNyB=GcCHWq=^;;|i~hj1 zk8uy{O=Jh=qJ_5$5s1Y-n2SAfE*g>Tn17Yh=O0aEnSN6MUJAfVa5;R@Epj-YcgeNi zsQn?<0j|a0#Ccf&dsFtI9|TAPzQ)*Tfd=R1diW04R|9h3yIWVJLJ#f0lQK*dCHEno zbbu~(R*rLvUBIh=U6;eIDLAVcbQnbyxa--2wRU&wZsZV-qC)7f3_3jIFuUeLk29c0 zJ05UOw}a+(e4m!%Qirc1KD#llMIJDgiT;TDI7={!_#Su~Xy8qzq(RvWL8H7B{_9wq zQGmS3f~|YEbQK4ae%#1ALN(9pL>2fJ^-TqzhEwHUzU2?*;5;0C87F*@P3BP0BYiOi z{)_oOWP!&NuU#ukO%sjc*C;wKffP9G8AW|2+)4 zEH~h@2Ys>EE=s-t=dpT@8GHi(x(4_?spC4=8^*|PjQ>S3(s*$=N5)9Rf17XOvyL(K zevHZWz~cJ%xZ(YYrsrqeWd7EVH32qt#Naz<_Ydb%7sNO89{umYe+_li|6dV@C~SGSNEVLExFFYW z=*UDqV(I?Hq={Iy5oZdF?d|_PoMX>n>b-KUn!omUYU#U-9hIUmBVoEoYT+BTHg_lo zZwD{TD;RrdKk0jyi`)v#Cz}T2V~73@uDf+lktO{YXQS|A`anmNQ4|E-P=D>ab_~5A za)!&-yW7{72A*h(jmTFx&&wclGVXnG-aPc9*N00A5F2_VZzk`RrYwYyP$xawm#7c& z8hBg2)xa4?LMFzL`CXOvC+?HvdV+X2;Fu}blY?0M!`G9){zLh?y_OiD>0gZ)HVHWm z;wkrG{7$A|48)q2+U891VvXB{_d6+VDf0W7%b}BU#97|yZEwA!Xoi?k#JFt7P@D&3 z+UuD8J>=QC!=YycJb0_Wz@SPC;J%zGms!cpxy5sF>pi6t6QuefMNgl{I z*YhYHcf^K7tU0uGLeb#wZY`!Cp8Va98X4OPfGe72ty61FnOtjph%txJ*FZdI1FtW@ zKLpATL5GKBd1UTA`ib<_?r?v-A9b{YUB~lNbzUp)wTC`Jn;UxK`DH2YCz<;Jmo&QV zGoaqTsB^^O_i&E*m(k~lKU}JGom`E(&;WjX_`%!QZzB$U3u9xAydocY=w6&R{(|pQ z5a$GQQw#YmatZD^fAB8OKJ0qnuJWq-UeuFs9WUkl2*B_5g6;rx@MpC1Ed+7!Bik*; zP3&d%fLF%JWuGefA2oem8;|mOI{g_bu=Rad+j%zQmh)9~X98cJQAnD-m~(cU%)Ob5 zA$R`Iy5W+Ah-YOuKOo&;jQo^5Fs4!GKKN7$Y|7a7M`fE%OH9&SaSUhE+|@O_@1 zFH8MT>G`tg3zzdC>(TeSc%NXOJyoDzS)Jl-BJQi{<9X1p^~14#4mqJ~fwAc8`n_5= z-jy76VJ;caj|1(P&s~qx4$;28s+oxQ2|lm$QeWRk*NDD1@CG3O9S-2T@wO~A*gw35 zJ^zFZU*B7W_>92kMWU|;bMdWgd}4mSbphUdAqKyiBKjO@_)Nm*1boKfa~3`$@i_&b z4tyF)#t*bDFpl;qym>-S%el(EG2;bu8w>G=zUqViec0!GA2#^&n7%w~;9WY;8yJ@? zoQW_eq~CX7T_P=>le~_8Jgen7Ye0{C0ep>bp=@~>cTw(UZ0&h(O-3PfHdD+jYKLAK z+c`(R=Ri!Xz`2$~Trd+cutWcCg+Z(l=qvlPpFk`o9rEODotfmF+@DA~v|;}r?R975 z{(-pcM;sYnfya2-{=(uaKR7_K%N|cVN6382fwp8vu7qemRlr$z5aCP*Z)M z6S^=Z&s+~E_gUbjKsM^g)(Pvw%jA>m2KnTi;rc_pT>ksvl6v%aBd-j{=Un7`@B^P~ zdK&OQ2A|RhMF`G!gBjI>w|UpMGC z^cmXh1<;|-p2mKi^Tq)>=cA$J3#~2T^aIo-WN?6H5ArPod;}P);rGn3OuUl{fG+n+ z-pP;1c@Us(jw_#Fz5{y5@#GxrwrTW&H~K&BY^LyUkMPb0c-;?WV!eEL80+PjQ|zGqI1&MR_;IVn52U3vqF*KA1;Sx6nbK8#ef&JxFKB{v+`r+(-NOC>hRY|EZAC z`@P}Z7k1lmV;G5$x&%Sg_n}Igqsd<8R zl>JB5VJ@(adou^dGJsRAWwYsr<^|>t<9`SGJOKapp^x&9shRi1MQ41jkF?1#&g&!h z#a*89Xzy@N0CF>*W_+dmTqB#ckK-I!`T@_2$SZUCje35C^T^mm{@S6317qg5-Iq4v zoeErbfMxcw9^^ni3O~_DD*AChfxk&-2*=ZiSzh53 zUH1s_H&1nTUJ!feK%>#s_EnsZV_cq_lrO@$$|>wCv42hlPo4xZbkp&UVh_emGumU5 zk*ixSG2}1nJsJVfeh~5M7;tbG;COR) zF~6&}3;K_^b$o`=j5|7vdlGl?$^FRTg^BM(;^$h?ms|n-9(;GwX?p#zl^5WLeqHpP`m#D(+=cJ;(00Uq_@L-IwM%rJ zEE8S*9yQl#XJe-HO*!}f@}cnVhOgLXR)+F}PB&r$&fn>yUFBFK%0hQXyNgaORr4tD zGu#VK^ktOC`ZFpM3oleDbU;WBkZn%U1Bw`v)Q4b9^6V`Tg8KNPPU=hH290 z*|$g5sqYD#G)s5<5PRMZ@~q`PZi=pS=x)OOIB%ce%WzEbXGF{>$QVBZxis`6b8YBl z0&?lMpqB}5d_pfSRzKYHbP!{{|c_$%hkliU&jT5CK^6V4Rl+ zf%Z4Dl&=yme0=_02K(0q?8(Ca z#skkm?Y;ri>}o48y!?(rTN!>nmh$uaz_+*Id&rU|^bp`0gipxRN!vh9`M0DXeMecWA65UQYqmIOJmd{zu?odm>~h z%GdABJ3yhiZm2A6tPECQ4EZlurQi{a zvGrRT8!I<8YjmOMHCJwI_yRg?9!n?K$Qm`?hMK14%0@|`bX$ERxY2a$%eRhZGsK_W zq8SO*m(>RwD@yCDs+uavB_|Jm)^ z|3&+b&uuSPhO#cXnDi9`OYPw?{^%+rTjQ6Kt#G`?%BC%K&8$&;qhDdLZUo+1Q`%Ht zJ_1*6s;~h_Vq~LzW3bw;GP2W}mR1CtgRGcmHCAp|n$`lsM)r36n{TBxSyjQBx=PvB ztOu2J=%rRwWBo>UlKw(rHg1*b)cq|Bqgxdec*UhwR!df%RDMfZ)*^}^{~6iR zc@|p#0@KL;VgyZR(Z8lMMvkkNFUtNL8OWfKeI7Zo&nL&adaJpyX5*M9@D;3SwlMpw zs=DBY5nIqa+pUFRdiWx|MI(45Ro`ee)m2tDlmb|4$q}khx2e8yW3bL@Di3b5%D0!- zRnnfivcC3<5tTWBFa4%0*xZcCT2((kY$B3}bK8pxDY88k&uuTnyc)sK?P2W z#k{S-x-FHXG^p{b3K4)yFw<;GMz$aSq+S`8?P~BR>qpfoJF;GN;B>Mo8yg#;vUyGQ zR!GBh)jTfeQc(W>8MZLF`5 zG6u_=YqkcPD`kK)ve(g|lF<1OjO;HfybIVrtqrL%hp`2?7U{t#+vfRdU|YSO$C-4&R`jNm9dmZ8rkQ?^Nup2b zbw3i;!PjVoBK}td8@RYNH3yrwG>ybT>F`!_&BjXBSxxr%SV>B^1#2ryw=|TNSJyOv zVFW(#>SaVyjxi5QN@yveJ78QLPuSJk(qL6>*#vvkZ&GB>Z6EP~ro!Om{#904%?3IV zd??KQ(N8ra49=@6E|ec!DOjLW^0TS183a(mSVnepWmB^SRLQrB^7dqseEQ3*LVq#) z!St$=tVgA_wy|<6TUh>b{kBjm>5}9KXIQ_Qt)|M#jZKcAd`t7mSlL`(Z`EOf&?GvJo;S*& znevWg3{tN$UkKy3JXlx0h2%;luiCLN@3xeeS2i_S&Gps>_zTu%wQ5q@5rx`uT&9DT zf4MT(cI_=3Kh&|Z1?~&A*{)0W!uhw`ITVdYH*MUmhk_hf&TVECDk6G)xkl5>>#T@$ z5$xwSOV+~)Gp=oKC0SCR!E=M+S=Aw zziGpW&PMlDa@RLhZn6seB_*YW{{Er7bL>O^ zpaa!_D}~VXMfzknLYnr#8mm{v9k`gkl^C67&^LbW-9p~$7Wj+=13(fF6 zYimu&^jtTT8>qAl`W+*mL|1`CE)KG&k)>ZDPBy}ARZyy~*-&j=xo(AInJT0G!rIHL zH^}C#H6eYTx1GFdKN;0d(z5Ruy5U38>=<|S{GVqhCsHeHA0;Ov`aHYF&R4@H5atCv z0lmw%G;0wUV3%EN`?K9Xnw61$vQu$kNbYd_P&N2caU`u`N9J67&+e_)y{$CZo%Ul?nXVsV1_o@QjIGB>gD7J+!2a>ZhIGrm6ak&fCVOcJ}%ePCP7KgI&h< zA3ca}-w zJSrj3`9QFu!b)qQ=ZEH*+?RzmmZSw=3-vX!8!F3nszb-dW{BAfM;?Vpzh#Q^#nj|H z<+`jhp&A@>s(>w1~jt5nOL&?EMiQB%zdE(nZt>ch^) ztHvb!YP`$pw^`f)-~^Fwq7PSyisM1nR8%%smSa08c`>rX@fjoPYBs_GIAYkap^^!i zV%o?Ko!*q{lO!3gQEwj_$tY|Ki1Q`IgN>~ljO?&b)~FW?si*RwN}G}Xt2_zPG7p4f z)}d}}V~8(x?qw|-bDS0$4`~VWZB5ml44_+H+8D%6%wDhLIHM~iUlmOo?9SWm-n1)p zv!z__5jhm*QDN{(Zr7?tkizSOW9vy*TUW~hbkJFXf7YhTZPv!h=IZ*2(I;oNdV$9j zE2OFr1-)K1)}UtedV21Z_!l*DtWoEYsF5%ut(MZru9JDF?O$Q1m)bwHea`PDpeIiT z&+#GZx2dvmYo+vMOL}^^NRkh1`6N!5#?Pq-7o+tMtdl#YbLz1@uGxrfn<56jG;Gf;DtONTF81ESR|1!w5rtE^~9P* z<)vY3l|)hwW`}pl-{`7|=Q&~fLT!CcqmDx(`-$`0^PEILW;Fly`J7AzEOkGnQh|la zW9)r}KF2#3Z_#KxdCoR+{HSNj=lah%Y-4tvPZ1$HypOTM7SZ~xm5o&h!lk3e#5#cc zuu^O$$NIg@`^TKm>hoLeoU%vg+*2LfT2icrU}F%=Qf1@P;-<z zG)VX=!o`(U5-1EdUbe146}NV-;Q{kygM@Np!`USe&e%k@xKFlWiJ!9fSX1l)oHPZ^CcgQPoU8z#0>;XKb8=qq0U4 zR5*!cp~j@Igo?ADBOd-6*HBIJYqCc6oY<5noG~@1n79R{DLYweTDVv^WAUm1l`O{L zAth?F7YS$l{j!$DslS%Bi*tl?+T*g8#py4j7WM%plYuj8Ru&(M!0Ab*)}ej z!l+_SXyEbDmfd-LjKkCjIh${=}j#|2Y~{o&?wEATu};k#B!B}h81OIdcR@+y{HBE~hL zY7>yB01^{6P>HHoeNU*i<|vAqtqD6=FG)<;NdxP0E6dK<+RE)>!u6a*WRZmNh>L>W zhoaK%gscA$qOhLE67l5LCGaE;%AfF6<9`88la#J8j-f2OoVbEKTay6hQIM`S7|i%a3mVR@qRo2c=O8H)4h@weG@ zqFoP$WRIS}Y3$NSQBe=rNKw%oR}B_5NhxIpDuk2HJSpZywDM8A{%y#zDWcOS%}Pg< zmCQ_<&7z3KO93${nG;4aImu!Re}OY=_394TJV z!Vw}|*MS`=sB3Z@t0axd@ef*PRpqJD$Ut3(=IDe;bMCj%Ce2-7+Gvx~sR3vFd^Boi zFCiql2X8&x@*Wi43_9a2k{%W{HdF(#G0W2-7eOd9bOotQaX zf0T#E%w>5TxaE*B>64PKLJuWCc1q zR7-~$K!c@#U1pkFh;#+)G3lD~6mX*ivJ|k_yam3Sr+}MH>fAT2ykU!oy;Y(uS1sR? zz$yjYW|Hf*3g|Q`&3XmgAqfN&aHj++6!1L>R4d?a3Dhaz9tkukphp7D3h0%CwkY6` zSp-Sjr!`fI*n7=lyo&Ch-PkN*?=uS)qiiIDB@z1r^BQ2iW6Z9o6R}6k`_XhpH$7lp zkI?aqsSqEOv|rNDujR0R($H_rAczcT=(lDYH1wv1PD)IdLs21Z=y}sI zM~D^;{g;^osK+sT<33fq^grf|1<;>{1|%y^rxJEh ziLRm35{lB$YZ8jl(Cbpz1P#3Wa5@#caFc|8&JHyW$_ZVy0d3 zu}vdg)A+=uVOIzT9o}iovMa{xikWuB1YMD2S48WI#B|Mfj7+SvG!*M#NXT=}Zm6jc zvGI;nQ;2HaHdR7(8k!;dHE77=;QVOOP@06=HI(U~!|c`21rj=-p?MPXu!eGE+c6F0 zN~m8$d5&#aaBK~E9X+u1OBz}#F%u$`1uv3Nx`r-xya3ER4f!0e0P<<5P(rITw8Fti zwpK$cCA3~cMG^{V=rV@`4qC0DE2SpdHFTAP_G;)WvR|i$u9eUM4V6mF9t{N~bXY^> zj>VAnn1-qy@k?RoaZ0{g3Ar@1NkTCiYIOV^mbvvF# z0BzCGcO=xVq1z?2S3?IJrI?(Z8oEO%LPK{t@W;f(F%8`%z4wHMzVBf2*sq~p$MYEd z2@T;-ETzC*G<2`*_g@Ik4)x`tkNL@k3+H1xlY5clF@(Mb4Vg~5{9z3_ zC3H+f<0N!KLld3XKxh3LigMl#v7gXTw37?!?=&4b@7_1PyI+9)^cl6Wqy&l$NgC>bw`-vozG=+y<094efOP6m6?C zbdyxUS`B?eLM0lySq`*bL;I!B0S$Fas9HmhIeV7FO*Qnm^A!Yv77aZiX|`(UX=#9V z4gFsB+pD4HoL^goz@nkQDC1~o(8(36M?nR}ye);HnM4a+$&rz$bqsL45NyhWWE_5OPq`mU(7-YJ<4g_woM@H?juS}Nz%NKKOY?F$ z%2HTEM4MBsO#r1(Q{7BEb=ku*5S&v}Zwn!$@fb%V%wgFSG0v&ee+-0l?p3EIaBDx8 z1I#5^wWV=Roz@Q^o^SXp zO`9wSdm7DpdpIqce2E4(wE$v}sA~%E*F~gQpE$c*&T|3THw**C@$J!c_Ls zoF>e=0`)P@giCJ5r!-kYKC85B2^Vvvi{HW;HBQ26Vn(}WME)9|lH!agGN#*S#Qy+* z8Z|LG8Gnx{lWmEUXi8^Xw78(Ia+64$EJ0U4lzkFP3RC?S1*#LNX^7n*XW`?<5-)N@N1i9(hQPU zG?NlpR=f42B$h2XZqiJavs8H&%Raqfb8ZoOTV} zEum*L)NA~{5e8Db)tQInB=BkI2Xcf}8aga3u~tJzjN=$DprM}_4+5&z&`*syfEqOP zGvhHpof&Q0nP?) z@nr~ds3|^c%2lY5eO$Ab9S{)@NY}*0tGoXX|T3Qk|`@b9q*stx}#_@wA8? z^}6d0?6&*4%gaLj+?6b=Lo|04%Zi4(n&^rFcMZ$s9gFjLylR^Iu05eJJgu`=* z8I6Tr&L+M+T3wM0|X-t!fc=jQ>1_Ep)^ zpnz*ka@?+fuS;N$0s<1)tAH|-Tz5`u*tkV_%FVTN4RJuVRG0w}=utqG*_UpJ!wT3S z4-bB%fNJyYWJ3oYPmOsg*inJUvsrT8uh1GLpaPGlNdhYHc&?X#3Ot@R^CwA$7?6pk zr`_a&swc6hLqf%B+In_LsKl6Ey-j#_n{T8TV!biDytzeqZZz@NC`E$uYR^sPbojWX zp<5+`=^FZ`gt9dBZIf{>Pec2qGS_RUTdGOVZ_jt71{=)TJooe5E}>?Pd57%RqM5!hno5`m6$@EO?iGOA*Y6ZBq5iEer&#N8TLV(=ckgfblvtd^IDi*AH8`V zFfRh1t909Ob+DV>%l`%umk?rkiuimhr8?iLo;GJ|(-XK{TjGI;k676T&9GTk>a`(8^{U#Vz^|*l%MZ|8|Cfqku)CQT)yZ14yb*g;ceQN-~0S$bUEj=3e z7J+*;a2p3atbtAf$28F8MQk{sf&EN}o^YsbzztwTXP`20J5#c_jhDQo$Xj6@?Nf4z zI?t7Im+=@1G8m+M&tRnnzHcyHbPAl?2$6EPaS%;2SeCo7)C)cU3^wpj{%>eZ!CY97m$s$-%dp`CVlZPpvG=$6zNMS8H!CJJ&zMvr^C-=BoLCL zX3V&L6LD%P8bwCpnF>z2#_}y9BZ* zOD~`))1@}j3#kpCs$c$R;H(u6Ub?WTvnvNJ^tKIihnP8)=aKRzG;`WzCPq;XkU5=b zXiuaZsy*rIu=bhJs85=g0mDC<&?@M`yQ0Q^m<6#h8)e6c(dh3#U!Nd3!9r zJ1rJYdq&byy{3H%0PRT&W&6eou`ubCu=b>xs7Jf|3faB|?e5pZ+TF`k`<%_PeFNI( z{4=b5&b6vNvkRY6_Jx_@<7c*_Ub3<%=?5rAxPFY^QenRA<-8=2ow8SCQ2u!Q&pf!y zJ%isWBxFCvz?GwLp5z%`p6VQv6U~b|*^o1dmbINOcOCEWWJ7KVO{L3Mj+j69DwgdX z!{UTWyTjrck`38;aU!eLd|jNxGItE5ExC6sPUZ={Lbcee8)6n;evmw zQ@yPv6Mkc^Dm77K0K_(9>D&!p^O%)aL?xm(Q-}k)( zI-1x2pgegP@>bw_KvVe4ycal-8t0EZxx#-wggKk{;z%6Mdns)EmsyUIXGeMeEpd$G z7zMtfz}Xu7lLBXH@XrdIsrmg2!FV<9z)_Sn?}IESs`}H!nW@TehS}mR%BpSgzpU5t z{f+h77JvT`V)-EJFzTigDZ=$PR5>U+Z=ak#5Ff8JALE^M0jlIk-q|Blz?+hZ{RbKAJHq~qp7hgk$^r#nKOCl2pUlQv_M^%h_7qtGpdi*TJm8?HPtRK9BoYNoK9KY`j%#fbsd$Ugaz@xX|7<$KEUDfO10 z!dHU2oXVGgPCW9-Pyb#BA>-K*giMlE%Y6O?98JlWKacg0FD5_h$xz3IVU!n1%4)=H z*%9x8@|R4yz#cj;4A~ooyp)vnC>K2jPLw0&FJn1@td?99B61~*T9&HRvJ8CS)xksyWf-5(<551>lK zleUXWDSIx|RL&zA5nEbSA@VDvY(%IY4k6UYzDiTqg$ZBFSrw&BZRJ~EnP)SQRsfAF zUM{3r(@XL2B|nD-RJ9k=B&t|CB26XPRkd|wPef<=qQ4EQa%f*PhYl|*tE+lt4_`F7 z)+fkWzNq`qIi7rJZ}UweIXRQs{n1~+mPeBIPa4S^{qhW7k@m-M2~?#0u`H{s%RiO5 zjWWAmu3IYR_~q*;OVON(S)gN!e-`moZ1G#n#`0pfAb0h92l#?N(v^U6rLYl*(R?$2Mbgy{#&1Yx5{74sefa!PujQ^rPJJsOx9J%Yv zo@>m>jBq(6M!3Ek z?HZ_3wOlSwUt1Kg#@K_Fy$UEcu33wXy8^D11P&yC~iyc!y z(BKvH2?dlJ>(HlPIa++d;!752Llmg3+a&6tAdl5f^*Z~@Ec#HZ4^XUvWg9}BE@lx; z9FDiO;fOH>KHl*vihibfx?CvZg{oi9a+Fv|Dx%=B$^6JGjGBTVEfET3f~(6ityR8K zC>IRnD}_^OdgbSZvskuNU+EI*syvVNI>}C0Udx9svSE4Mh~F&V$fUx)!dbp!LkMXn zi@HNAV~d&@%dcnoGT|VX@H>mPP z^52YEC&Y>tmhqUZMSoD;!AIzys`)6%OQu1HN!zl?INp&)RTcy#{{4M>qiu{FX`80S!F) zI+WO>f!_^$3c#VP@P`l4@{$IgqYDgZ;CTZ_CU0uszj?~_js{-gQva?7{zTw?4g3!S z;Ta7Ku7r08xdj$0-uUTiIJOfr<$5}VYvsnrFiGSJyK>XZz)NpvZWJpUSX9BvT6qag zB3)`_5yOTqf0bo5k5;z+08~_jSlP*Xz5FD^zRTC1vUBYFBQrks1C~{X*bliih*9f< z6+6q=iXO8#POL|UT@9oeRHa%UVlyQWqtGstK!SdYAL}#j4pH!jQz$Sjj;ionvDX-n zh48MGH*|WWuSvkE@O-hi8mn_{j=pI~A=J3vl7QyuHVJ5sI^{?S3av{5GZpY{$&jUh z{Sru5K(_?46!0A>L!N#K5PQIwNrea__SeS3#Wpj)m8#NAKP0>B@%!Z>smDJl*Emi1 zl$6b2?J?FM++&f?GF;*gs1f^ur&Ep<{gvy9CHGTgZwXG=3No_q3Eli~DN0xUWe-i~Cn8 zp``|U-8c%KQWfxq1m-B`x)QFLkJaPo&g(gij@)M>s11 zZNtwbpjACAfjmWRoXL|op903q3l^<+m%O`MyNLFU^+*7#L5YG>G(20wsT!W8;WQ1; z)bJb)CzYs?=9ye4)+-=a0tduAXY94|)wintntZ#h1^v1N4AoL90aF112{;61I_7=s zH6~w3=9G!pph>0W;B9G{$q8o9uR3!E!jS5`QI@$CWUt(q*aoK`jnF)V-Yj2a8Fa+xq4URBShyRyTo z2BsCb{y`GIs)b3sGj;>Z+j;b>BHgMTtXCU`RXbU)(v4NEtXBsXtFC9gN~%`fztT9t2Qxj~h03!ra{DtB?;)UL|k=CS@>Ro?IZPh=4BCVn4);u6t&+#qzg zfM20{Y4wjtPGYY9@koNU`X{ANL3{D9JPp0!FlwV%{d2i$Da;3c@jILU)yK)h+W3!w zsW@N#D}JvjAg!?aL29pBT4D9Csl7Ty;WyWTzLH|~Zy6q%RsBOOZ&l@o51_21Tm2MQ z`u6y*W8A&*2k`sb2)jL$@*GGW&pj^FB3^^+2VJEP(sE&TCq>nYw_N_1rP^a9d_2Q0e ziSM+iv>?U3@A!+~YEJ9(0C2kc_k9vLOL0Gbe2FUV|1$h@6d&GuKd0QGa9>0X6)1&A zXK?qn$VYePhXcczw7X4)yGS!vovwR+K`_LDU;XwA@JcIu2T+F0^wW>?xW`#~`RT`d zukA+EN=^{MZu6P1ol|s0kb9s-p=gcn0#>qCNV<}BK~_anNkfp6o<4{t13|@X;c=_E zd0MhM?jlwX`{fjPNpbUo#gA}1H9tHSKiWF$D1MAf$FKw|ew>qOwO;WqMv<%jPY~xT ze)5zb{eDyYR1*FL>i^7G;JD)F_*qR`U-54C%M$f}o;a!a1!7$i6br6U|2mp!`T;aJnG6=c&aCC?^sV^Kr^=BBBX98ycHGF@oY*Cd>}40JG4eiZvN_PVeAaTO z_`{slScaP9qyFDH&MqVSD6yGg@hAMgA|GxXr}%Szv&-c)afNU5it%OKlr9+`U(Sph zp2cRXMjbz!SO>WAbJ@(a*^WPl^{E5g_{vgXZNlRh)7V-GsPaoE1cpSWR<_$jX%a+=@KCRbltZ|LGg2J>so{HSE-^k82|G_ z-}p5cf0LO@s{V(p2Cb?1N5nPizmK?1@u$R1iob3`THB=x?m-)@Or~pM^9k`InF;CBF#SqU7H~nw9)2YYl`gzQq%NzAodNrp)FDCsO@uaZnjXP=U;LOxTH6-Xin z`;~MHux=0d)j?BR&C~#f!t7hJGmwV^q<;8@gzG(1+twQ5Ho!j6cVcN1_B4;e*jZLp znF^P#Z5R| zVu_h7#|?FM9iI(!yMR^d$)*W|-2Pw(^&H8B!NPL&_``%Dk~2G|G2s{)N$i-$ggjZ@ zEj7&%!tBt-gnai8$eA75m~gCE!VYarI9@dEn8t(?U4F`HvRF=%(%LbN2{BR`=SVYv+`Uu5GgpFKQMtO4V*~&p?<0B{zyBuH zR-BRt#Ez9+(QAty)ml@*ldhb!QS!9d>0BkxyO+#&Y=K_%itI?=rIOd&!~TUX-IY^` zqBmX67<7~>dP}0-r)qCYK6R8T`ap7{qg2sHA~~RH`y|r`rQV7@7Kx)zs-jPXVdcv@ zE&5DY*x2WiRK(a{+!7cl-PnG&6wG$D7yZ@cG{!b07JcP%Y}ut75{qo7wXttqe%Z8M zUv$8|`5<4JY3koei*mHT7X8D0ydBar_M_y?4#O5@$a?!+lXVtm<3mxVJUcE5_ME-g zDa!V$kxe@%Thvn?QZ{rH_3}7XvZ13W>T$=6otiD`<8hW}!$VPDVNvboMFS-k>*hsA zNGx{3wP=teKG8IXcvpMaj%#eV?EI`THbVBR+L_j(<0XY=lbzrlc>xS)>?H3(l;NPU zn56FLuu^ogcP|W>Zfumt31qDv_bVDLtj^dNVGYI#J&xW@#!mNmAhg-oIFHq52N;Xu zUL8{3or=zT^C(*g#LgVZqh0b;I`arZ!$&3o!|FeX&lH`Ao;jFUC!c2?b=o9<@_FVE z&d_sIKbKdxIW$jTnF^f}e5l`&K`I6!8-4INdQWNFvfhIpO`yu%2 zoOq&qCDE)*?8${mR>s_gi=2sv6Gt=H$tDiy0DaBM#2n&5vYeebkjvRzSR zjD)oSlaAsXPABz~hHxUA1v~M~n0{3{Yi;|ivpXMin$922&KwI3HPzW&l7MQSv%5;| zIPKu$oPB5t)D_0lk*Zic{p<QYU{r^I9KCs#wJev;NmYA6NQIIY-AOx8BT8NpNsW@1-A&v4 zVL9=N4A>W`XhtplgKpRu+R?e)AN$+Q6jNd-mF}R#B<(bEuQDJeih7HPztfu zMczW#)zGac`Mr&*;%kW`5+fePuJsJdGbvzh^O=s&~)-v zu}9%~hZ+dy)f|mb8r_N{ycEjL>j6xOl{jZQbTXMq%la~II@Pw8SItmanM^$DPhY8z z!d`ei{%T=YvtkWjatWZ7OWt#}Q=K|lqB`xPd6&Q15|BG+{D4;wTfns}dpb+d_%|qP zwy)yX6@^#JYz>)j7(C7ozrIae8@BXsiR()Gr)M(JEbI-O@8oUfupea^t}Si}-uy72 zmEpQ1v!cCV-{f;BkwQ$Kzv~@HGH`>NGkL)W%Q!A9nKj#)ys-ZTe&3$Fh(mXc>R0m3 zMD6Sz;V^O=p%u(54LpCN99t623313@K;Ehl7D8^G5RYcMvL}g`pKpd0lohNW4?taKA@QJ4)UZ5?1n-8+p$+^pv;V-XK{j+3PkV zOjOA`?s1UhD0$C43q-9x^;0hQ%a)!u+g%GE(aM`6D<&fqBH&w#*-#Kmj|#8hpqWV1lYCLu*iZV;k|%)423pQs`8 zw#$?`scN^$qoZ8Oo$`pPP;$3CM;eseFF9yd@_>--N*)xlL&-xzb}D(;9g9xBOUWZ5 z*{$SJA$ycOCS94#u@mUWYPZt?^d!^uZ-Yf4N_Xx<+P4mal6M8J`) zY;4yNj?)niNdLn@Ph(fXzGFQ0 znCRx1sVB>m*~MDJai$i^OxDP0{6dvuR-|Cz?@tiUYvL>0d2dVEh zayAdP>@$)m1=-J+q`4@w6~7;{Ev7mV;Mf@RFqlr><+7Lzg>|F;S&(+2f5nvR-0o*# z^k2SUrZeUGHsjHh8+6euy=TgeGGUD#ND1uZ$ZLP*nadQ&?iwSv*9CapcP~4EV=xE7dZX6+`ag`kI=2B0| z03o(FsIKG)cUz0zk%CQckR%z`Ku5`Quu@5`H1--L$GD@XI8Lp$ue%YIw6CDeK(k67 z@+eo`hrRaGkq;RWOCIqK1F7w->`{5Q678bwb-fnP*c-xfjlC%>-`Lv{E@o`6ymu)u z_KvWmv3KQ=a*eU~C0wns54`wP$GOPZMqsM;fbk(x|B=4Mj<^}k&HEgn!04p`eSXjom9mWm`FqU1$+6M;1 zx<2a=$OGHm6~iQ}NCv}_6J=l+BdX*+38JHa$^Bxzm`Zj^zbR1ipj$Z2pS+jogi6Qw zk}sv>B~|UO5_N@=uY_2a{6?-nu`c<8NNQE>-;!vZ5=UCvE+qkP{4_KXZFMQytMol& zNjqtS_7=1xBB5$c)>$-tcBn9W(^=BZ<3MA#_my-PS+j-fAO;%oJZ}+LG{p&U-xKX??K2c+V-4_uPkr${ zME89&gzz-w=lk4-)%21z-YxJuj4h>PtzaYTB-30Nu`Nlj+Edc(?QYS&PB0Q?r0mp^ zP{bdvZ9h^e87W+tt4} z@eaj(_@;ZO;=cS$u}g73P9^u_zvE2r&(|nnoi9#5{4L}m%g6x66m|RZ1l{z3oZ#kQ z_E}ZwOh4kmB<5+Z*=l+&Lut%MGlzzcp?%a=(}#(zRA&U^wVdZOsM>1!u}ng3HC@g( zm7q#!6tPfK>hu_s)i_Rm98j+Tn|{ixz{wOX&M3Z6sWCE|xoI*ohLUC@V<#i{E+YlZ z&~77zBzugUMzYt4oJ-r6(zmL7rZc_hqa;jdl5tc!V5FGo95gas7WJu`w==kS$Tu>P z-&|t+w(vfR7+^VB4r!ryYS1oB!dft{%0YG0woa^MYq0%Hzn5Jr*m_xW@GuBsI=d&7 z(5cD?fgc-V3=&Ox$t}T&Ez$f@uF|t;?iT?&>*qep_)Vzp>Ss?S%A8^ zEdefTJ(@e?a;~!MoKk$oI>Sku!vbtp!baJq(aH%t6YXh)l_1cGl z^EF@Fo&b(1Zsz8r0_2FfXrDD>1Jh8^m5kPKBc#6dt|Hd&Ju|K*#{1)}8S8TpaKKyO zIo#(uqelJJjEZl2 zi&12h&t2loxczEi+Lh6YYGTF>EUT*C#9|q~S@xDel|e$`QIJU6Vr&t{4$tTCrw1`} z7GbX8`9A)nr6EfZ)`B)ep`G9dITzreFqht;@ORLaSXqQteMk<2hcxSC`a1}wu+z2{ zC_k2=zFnyxg~>|p+KF&dnB)`Vn4aP%F9Fn#amlBML+bzZDbPt#{LBboZSu)y6To(9 zLh`vX5bc&T`?ROq`K77d3V_%ZuA^~-d)z-9SM>^85bdI zDJ-15Pg)AzK3ukdc9M_FWlLG(mi=YKK|70GHlH>ga6X(I+O}G@%BDxluKt2v96-u8 zvMI}lo3f^tTHrPHNYGD_%3|f5vfD>i_$l4-3!tTXR}Zu^Gt`b;U^CP`flg}pb>G{%u&dR@Q@^G%hMTeM(MKIPI)KZ)Tc?5XV8Y4M0saoO`<%LSd%F4LacRB z-j$WDby0pOvDQU-7Hy#2puF1{j9D=>8mGK_`OE%LTrT5Rg;ZU6_9FOKDn2ZU+_2fv z2%^MdN7#}gVVsP~fuGcxV3tCiT1U6csU6btA{--v>K`GH8FrT(m$6%C#hIAD60j^-e4uv zsQ+6uaP1LLbjsf5Y}a*D>y++Qno_5l@5td=HNyyGH9`kP_=6OLnNMTq^1V+5RvXcCcy!cPJA;NbiLK!grFKgAy#Ze9UAl=4vcZ-83*IX!#Mx17xB z#ip;hniFLYu8ue8{H)JO+yksxpEKnFV9olRsgD9jogR#j*QZ9r zIU1f3+7y}Lem2QWtm0()OED`>X-%i%R6g+3L=~eLUgNG9{rW=REEQu$E`nJys>+>; zvFt~=8chNB{O2FRlq!n&w8FNv8S?s2-pdMBITZnTM-`WvH;bD;z z;1>$hRQTl>xY7%#s9$?pvm*V0T|qhpw4b6jGsvj^r?xff@1SFCzQn$%i0SBq|43H&X( zhD(8?8g~5_V6BLX4G#dbBHlqVX^d2g2#*+WD10{DlrE5AIVBzy^k6^haV`-5`vESb zgu@0Fi-6L7nUXJG1DwX>)QD~8>es`!4{a80S8>%LD7a?yYC^*sy8~zSqf$i^t3Au@ z%g1rWHAg^T*L+uOq9nVW6JX^rL@)*q++cv$2L6d)tOg-WriPZ;UZvdT=P!*3X$mz zNAphq0k}uz{fI2;qzuQOP?#B(5;I%+WV7_Qz#~08uV^3s=HU0hoq6Mu2%l4hDe603@2E}e8{CioWdB*U?mKkv0!G6GjDnu{Tal;4Ez$S zGcTEkXPuRDW}8x$CZUssIA<`mDSYiNY2==hvj)DBr*j4p;%yF>8CwCR z$=Q3d$o%%aWm**HcVJ^R+>uz?voJM;0)p2aO);>;gPNJ}wl`JBlM#3i32G?rxc5o`QdvXA7j1OuWu zWDjCYMHi3;5mV+%z*DP2Y4jRqw}Wh0q*ti_|J)x_ylx$pPzk{ z+&tb@EILFkeAnfDcCL$tkE)T^0P*ZRxj$T1W!b~rB$H7xqRlt=>|=%KH}~x0gruw5 z2|_ZvE?BzI$&N|Z?7o6%_UUfLGC#T^!4~(pws9BBz2p|%cp>Z#eEoqRc|!y#or8qu z6Y|PZEE@ct7haITtJtLm7i6|JcEvpAcR9p(M-!rZIB;i{Fcf~G6}}`I4<@Y<#TI6s zw%npz*yR@w>KXW5W@lknVjZCu9?H7a(QjeaKwxc93*~|&ZBPrlGa7ABigP8Kit~{N zZg0et1X_}*_UVfbT?mp<>MY74K*w1LXBD7yoR0eLXi>MR@M)i3nZ8A}D?6!nI|ixD zxD37m7k6OJbc9;`=f6=Ii{Ztu6RF7-zi|t2dPdp&DrfPVkHA~YvG^_GY)$`Hs7U(O zW_B+Qy0L1j*To^hTCa;!ghZufEKYUf(26MuyPQhz(xHI<5~DpOlRiIR<&{3~thrBL z(&;LAiTRdf5b6t$C7nxZbd+HTDQL}-(e#sN)RHmZ1LC^MWlNnUV*@Mv+FMeP1+2BV zr0@pVSWCU+^hbfU_LhwM0$6Kr$%OQC{TcF-N&SKIH7jSI1RPU5WioJq;*vGMI#ey0 zNu7lHmoscq@oeU;Lh+nC;m_BerSMDH?3X2dN%lr~sLo-NQ531bB|QmsAYamp8XRZ0 zGH8n#;!BQry(Q?8Vlj9E3*? zE~se72y=i8v;&q2*)hIngb0#rVaaSDY#yt6IY=gLqUx2PjQUDm4e|s|tZSuH^;+=o zwf@VYs@H?;YH?M1BlulCtl716S(Q`uRre5z6MdGKqbzq=O#I#pi;2O$Rsbyr-~m%;B>!B=<1Rec>C0a@7C zw|ctU*!RIxAd4FNdvF|>T>xM85Ba4ay8yoGpThD@^Jn=i5;OKo@Jxg&F!rmY5I5$A zrbCuA77EP;t1#9s^kW^0Z7ePH?0I;9VJs42W!4(&7~)V_XRK4G1M2b$k5{BuWrU(= z4h<&C3~}wyXskg-RCTgP^hQp_5?EoyK~EmLi+GjAe(;2itAz zu+ZgTd%P$zp3a;XmO!%Pc}tH#QrSp(|_RJ z3J-bUvUj&iB9oDLBuR&>OhoaNuXqT$W*bGJro)CA3V%&a8ke2h?+jgm#gn~XgIi}h z(wA_&XpI;Vji!Y4a_R3RI+>OXibE;1uSc)LoY4<+OG_9cNal$AN{~?aLAWWb))Z!0 zo()U0$z{k)F74G9Eu{lQ&eEvNZxr`tW^}Ar+9wIDL*~-HRM#PMX@5RqqN;x+7x6hr z?-iscQ8zEmVXq`9dCX<=DdR_H0_F~&-YEWY~Gi^VXQ4Gon`aG zwSFxuThJ3&O|@)c5pYz)R#gJ4*_JJ<2UfE!tG*3b&9i*w2I){ z0Ui>FHPXhE_o2P(D8nDZi*PLn?S8&C>#Q}N*5L>`6Cg@sJ^l|lM9cl)x3!4ln5;!O z^g+BHzG!Bx7%u)rc@v59tG?iMoD#+%Lkk81FG&O5?#4ecNdbSYCVKRm1GOaQF54&TqQk) z=m)auUP59ji3-sVWYxWe=p3lJkC23_^%as-(ocxafvWop(K%4{;X-r{R6RgQt%k`F zQm15~kOn132x(Gsq>yGMgM@5XGFZqCZBm@VMd+Yb^ifPRrqN`+_fX*0%Bnu#E`rB@ zR+jh#+G?hF+x}lPMc*#Ai&kfNA469&*tyL%uIfyWU0AnY~_XUEqoG@be zY}R&M_2KpQN$5y@JYP#(Nq+S+>c!Zpip4#)HOBH6AcN%D88I zv~kz?7~_udvBpzFntp-tl#mv^P;M;?D>+Tzz@uafCP-q)=pZ!EbvBye63`mY;ZiFWRZ}6 zD5(^4>Y<`){XHx@R8*}$h-HV0s`VGK?3RJ*WnMd&*A5j`FZX(ZMctl@7gagc)!q?c z_*Ens%6HWq$)+JAXU!l!@ntz$Gq`o4RC5$31v-+~4B^rts_MC{Lw)$y9L*hqx$1um zp91;>ugT+OuSxYEN?f5>ekDYo;5EbPU!(pbh-($+GoCud#}YRv9!cD!_&DNb#m5tG zmt*NQCvd>pA&;1v6YYt!Q|U?e#Mz1QjAMX32!DkcLSYU^X*8D%Z4thif^SE7m|A~8 zd7kX8zT7(>q$^)>SJ!*{ID}}eUE!^Rz?%9Rk58IiDp~7s*xapTosd0F8nrb&W)0~v zUa6j(6&<K{rwMKyu& zAHrO4i{KB3Bq3n>UEn3@Z?CEvaJh-AmP+#w)v9I0`lPQ~PFrg_Rn=TDYC2Ul#8K5> zL9A`1YUOaO_jA?%+&FN);`3;znBrB$1&Yt7&EkqLpnpQ~g~Un47tKRF6^bvWf2HC} ziE9*JMqHawxxlHauY`J?datPkZpgqpiggV@P3qfl5{%ufcmu1YS)Yb{BcXLg1Y4bq zKhhxTsw!QUOe(i(v1}W6^sUAcmqykxyK1StxJ_5JWulg)q*`{9*5*>QFJy9nRT)f)hPBc>UemFgsG}T9K$N_ zIKBJ{e^ai8GmTqz$YE9J%UPq*> zxjWHolhulG3!3!e)(&LQf58h?;O zhw7E5Gi;Xn7cow~x^?9^`bYJpeSdh%dl9?VKeBSl!j_CoWg?c55@J^)n?~#@o=zN4 zJcEV_>IeHwcja?EH~67Buuc=2Veuet_ zWLfztb%v_{9^zq&Un3r__|L>66u-`}`HJ5lK3?&g#4*Kh5sy;*HgSRCy~IU|-yzng z)yj8?C#wH@Oe>-Ied5WAKOml>_(S5Uia#ROcONVF5l>V9kBO%%{)Bjj;!kOZq~gzr zOBH`kT(0;F;@OJ-!mt&J_Y==m{3Y=`#eXF}NAXw0^A&&1cor!BhW?8b|BdC;wy{{iaMD*ldPFHrnF{Z}jgJ6p#^iskP0D-{30cp4S|NZhRWC*nI4A0*zX_@Bg2 zEB={ykK%t3zpwZg;{A&MP5h63$cVG@S7OIi@*6W0v3YX%+&&}x=6Y`55E|9! zCUKoRKm>+M;mwaY3>OMh(ms4%&&zz}^LlYAtpU%Aa;g@@mWK1XUk`;&jQ+grci;}F z0Jpi?dENd5lF29-*{Y-80+Q5L9Yf3GQX!ltQq0I!<$eo=0SqKDt{TcBX=LfEhIF_R zkueI3V>msS<4pWb!OR#}>#RB_A4EgX=Q=>)0{TMJ?JY`6D_WG6@xoA5TF#OytZqF& zuxr(1-nOOLp30TG;S&CaS5W<@F=$xvbgE}5p1}e|6(@PKigxx@rTc-k^RAjj3u;GO zHT$}aey3P9=iNP;QjhtNXH#OC$ET!`<=$<;dL4P9+T*zbeMga~@p!yIXD*2qvPRS;eBxYh z_Wl0cAaR}$of{--z4`}GbWP_1k7d!hLE=Jh`RV@LAaSwB(&*eEahV)xi)CJZA4Vz- zd6mb{LPbjOGsGY|Lr84&c+-~75E4y7Dpc(nAvH=i$s30{C7Y#)S18#cH?FT$vQ@}B zCD(d;kWPb=n>nh&LAPz^>Ft zJSr@1!5@=X771gI3o9|UOIXs_lfuf~-mfF-3iI6UorfY+8hhU3tyne2UeKI*y?6Zy z^{rpm60duYptQNh-V!#{*xOzmBC}7BiBF_8#CVbFFm$2-`}9GyR(YiN(t)6M)urqt z+S=>>fp%s1GGgn4m-pK2&l^_N7Xw>=TvG;Y{c&v#aE`{a?lNHOn+?R)H`i|ij;YRu z$AAkIU)gSp|Il33coeYp->c39P9poaAd4x?dN%ThgQ$u1A$9?61RLZNrjaYq7(3*z|(m#Eqe()6zw54n2cJ zx2xJ+A}g>;jXfKB1o7MLmWk&=Y^S?T z_CknzPxcslF~mJE2aLTe`Lf$B6R(7L16ELPuuQxW8q*hT)Y!WrF1hS3+{F7KHtSrI zeJu9PH}+}hdbF#Uu`fdWgi&kkOJR2PW#VfIXIEb)z76q5Ses1qK#0ffnvMMw>NyEj zW9-+^`&(fNW4{U86YR;ubO|SgPs0Nyb5nSr*3qNYi9iZV6g3u3DTOFzEG>mIhFW8h z6h4{kczB|N$eK*nQDn^_beub21X+o*H%Hj~FPl8HYle8%B} z7+P2;{IjomYKtlxi+;tXA9M;CNY(oTO3WM`BxcAb`kovnBqQ*g3!KLB!S`524-OKV zRk`0V6kZ1pSuS$OPze{0{_gpk;M*CQaC-1Zo%uiVAsod2H2&a5f4ChfPd`7*fhJ?Y z!llmn?Wm|@-T8;mFr4~44?oFzU+6`|v3GI<;gQ0aum}e1!4L&h5}Oi1QcNWdwfMDH zKuI)O8)0jcfv&ba@3h5FUt?EBt?bv-2~VxOlheVrwkLNj!zU42;8S>j+ybA<)}teJ?I>25uJCHdvgJg%Z>;t-s^~ynJ8meV$=8dM`T$16 z$zeL!nt&pN!jr{iE<#~;8Yy7b1=%y;Bl)`EFve}Tm*mAve?gy%pd?@UF6b-MLAe6+ zg8uZzhNUa{$F z-wV6Gt-sd`VYUT2#wed1+)h0%t72wdeym*u1vp;PSCt6k^<0rQ+J@UsF_H0H9i=FYO@eXZ#>R43fj6a>f6cNt638B+7 znM73bIlg2vRCvaL@rJ@jASl`ayb>q6%^-)7Bu!T%LKBpYY{fTE9VD z-t|c2TNArHiycW5xV$^nqp+Cn>n#NnyX~nz+>KmscB>!YvX0bl^*M5}pPH(Epb)iA z{SiWP#Z>i2x_mmulnj#d%}FJLT~3+Gl^o^DQcuYccOBBKRFW(8Q={Z)mji9Bl4IPv zpjM|X?utzQTyFc|6cgotUm{{o@jZJI|TvY{Z5ikF0O!cDm7z=n$9pVOT_IB8WKw_O#y6 zks&u#GZ3pE?rv-eH^RLg*uv!tu?!q5#M<&mA=>Thk8^h+OjPrEypS9vCkU}texkb% zYIqRSqD&>i=Il>)m<5qAu1E?9DYUvMEYQ&{uFohO@6*lm1M0D zquh-USRqEc+d-@lV?@mgF;<8bqCkihqEO0eg(z~LLIn9*ym9WQATcH5-G74=C^)R#*HaW&g4Aqge3g(Q{Ck=QDfR7eDsTDtuDdUx?He(A1|XN#kH zYlP_Asrq$7tf&n_BC57th&750LUd_ef2EMDuDl+;zEOVQ(u{DG%XdF!gsX+*YJPUq zU*lfWlAlcygXL$l2=LR)tc_ctBmL0sKa19Hb9-&~%hBAnmadaXtQ^-1v2y4yQ&>4} z5{Z@LW+7INTZC9;ZWog6cbq%iM_N+7(|s4%a(h?X-ha3I4@fNT9YQR+dqmC5a9I;%(QkK87XA#g2v4}iw?7; zIx=^_`p=hiMyzc@lOiC^j+LLUl;5Jn5hX$jaRBv$Uz7upG?;UZNyZ^l8s&?tTf{^N z$mWP2D*y?FFN2%HF;_98TD!2 zZy-@zPseeB0&7J9J~=7#IiDW9f7|#-u z2gPD|8C*qCD-K9RvqB$tQkt%8XiupGmbSUlwy?8sm_`ciFK;8CU&rc z>*!X~HK(xQ<9%?yBP6O*mG(3$3*?}Cn9CB$*X(})wW5?hpX zJ+>e{%}ygi@;E$1!sZm=Cj#HH@Awk7EwMS&|L%LTjcG&@raA!1@<1mHkwnR+*G7l- z*6qzyjPQp_B3G}KAcOoMY@q)=h*W$MA&|-p26+ZivKec}$spMPk2JPtZ77nMW$g|I zDuotXxQgXX3oe0TAU1Wsq#skY1~I1G1yAX)M2J6vKhorK*7jt7=m1}5Z9hpuaevxf zo7~#NiPJMr!3dL;`5@dVqWGSXGam~OUNbLc6Nig<=!}O*PO`9PX%QiE}q3;>fkw`RIWVr@&WAzIWVL z^yry# z^Y{CKwH1&12lbQc{{wNk;vb1C6#qm#U-3cWO2z*q*3Zl1e*O#MtWp1e@e-<9#lP?^ zc%9;Zv$ze4e`Q!5gvJGA6{+vq$E6Etmf>k!ru-b!b|qb0=6ko2uI@J=dto;=%ux6* zccET5mPrGL$0*=Xcq-hKq(A=eO}yhWKRWik>+(CCk@sW{qtlke`|_hMVO9G;R)SnS>4dAUF7Z&~@{f6RE*<3uHu4Tt%!cbKO#YLrz!!W%Sp_z`EtE z@u>P&a}#?`KSsK)h8wQz*ZkJ4D1}$L{^XvLOe24I=4V7@WEFcw)JW}%kmLmV^7l;E zUBnX-_DiViE_=W%`)iKzdsH~!^6 zJJvmkR%OqQbx#qGRGk;zg-%TIi%hpb%lYz+zhJ|I<@pu9`#NCc)g(e6H1e8cNxnxo z>;BBwclHyj>t3g!a!vB)9}!!=k+=BbB^K;EYq_)T?Z+V~Fu^-=T+7INjJYA$x3tt* z_x=meYBIqG1(+Q*^H6sgYIj&LvEI7_CK?WPC$XUozEY=vDXht1>4}{lzoDwygC0M` zD1JzOEzB7fPCV`X(4z5-$6sDijc2`wfOVSbxQU*r6luHbmCAj3Mxv>=Jplu#q<88o zAl4E4q<#-#9kFjJ9~Dtm>n9{fN&nQylQ5c+!&46jvHm(hNK7R;sWC_jlnhLr0TNeo zgph=iBU4vEl2kG%m5s1M$>7v0A*obyRO+1|HA;qvq*h68>T8hHDLFdz07!$9V^TXl z-j*_*cBCEjq7y{D7qXd$eWA^RJ?z1C^u)HFT7t%!O+tul$@RVDM(VuR^ycl}t@70;y3_lDZtER>}0#%^-D3 zW~4q1(x9YNa?qrtEcH`Jnqj2%uuIB(SgH>#wbLuUkn`t^((<`Z@oIj_*2*cqm_0y; z$>K|hb=WViV}9v5Fl5;e)yB=&0@#n+PLnq(VEzLD!*{|73?$n~X=R2sQq!Vj3@ z7`chrtTA#k^IvP^mSM2*S+wN z(0dd45<&wU8>Etj9@*CH#|8PN#Vm2Wnq9-3BqU$SDM4o5Muby?lM$JX2&00RfJ{`i z(IQDG855*kOO%Wax~Pk!l7b*7+%-xHgQcG1j|is;u@Rvt_~oN5BSNvauY*CY#4`0h+!e={z`_+ zjvTA85kjns=1UMu{MZoNpH<(;kbb+y5*m?Wdp+EgrKl%-4}T2sJ+zc;CROPs>O;rD zOVheSqBpW8#O7@YuN5uqlIJ({(-9yTLvVXTU68ml%nfB4$z9>Gj9SUvVb-}ta)0>J z-7Syz2f`abEWN#z91%D730Rmzss z4k(G0acgQ0h?Vi$)Dv3ExJ|-X8JkmCdMo2~sr(*hWxPJM3=+%y4MO5t;2VV`l-wjF zspRI=I)tfEa!cwhAeBnCOFA`5ZcBXvl3FFV3#n6bhmZy(cM54za(C)q5vEzmj?~UD z>~6MiMVAqy!-Q+`v3y?}U2NLVFrOOSNLTX-#w zTsZib_&jA8qQP?;t_)~p01m!)2Q4NXFXgyg?nt z$u*k31>^{f6b|~5!zq!sWGovb8Ss#+bh%(tiCv{Th!Vbz=ITu)EVlpRZVbhx@Zb_o z#dg!^EMLMUoUCa?jKt3OC0x&G7<;l@<4d@nQ;Ay011&`=2z{Tg!)2b)aGVEuJ*L5W$U1c=TXdNdOgJ= z;m3jqDRRc`R`^IpCE9@NLXCqAlDjD3;Q=lZe<#`PhvACxKQ~W);)}V4Y?G~S%)fOB z7a~cPOUpKSV=j?)e_zbSW@{9XjPfO1dA3Sq<0!<_eKFUfZNy9);`4kl7o`6~9Fg~@ znDzNOT&K3t5!Qya+&ZD37^&?K_o{3 zr|}`}$9k%-#pko{Innn#kDg+GB7|R!KlTWl>nriWtY4Df!!;KE1)XbsF`v%bajgm7 zNlA_8ID7_cKo;OXuS0*%SLE}#jpA5pOXp^vMXnA|F$YTg?-!N3RB#j)K4Jwv$u$lc z9_@?MP>MPH@Y$~7oUIb)nSQ`?DWQYdF2o-z{(@H61emf0jtm)`4MsSn)S+B5n?z^? z-wIKHlfBmff-(4UZT>dMkkYw}oZ1Zy?>=vn`3>u-qZ9iL8~7$#7XlluWINLLCmS~M zb#kUm{x>uccU621vA$Q?u<4~A@l{;?H~#?t9*VcFfPYl+Hoh0u_bnTmH~oZJoBCg$ zgucFe*>Ky<2mMc)8*YCaVH24L;3ie`ex_KV_z_|~mAK(C#;l)&Htf0sF;uF~lVksh z6{q6o#{t(mDZFR%1X+h%>v=<7_`iM2?~b&b-(BY=KJCOkL>EcvS9YC<=p?l(51kBX zSZ)pt`!!0Pc8snt`x>+>g}ojEl%-Zy;iQ|PA-kdr&yt<05@X@n{d@a0QkdWlPsLcO{1D*Vd--)h=&7zh0{NT!T?5@Q{xoMDK||hr*LZT7k&L{1DT^tMy3s* zaNgk%Y6B=dXArPfbm4rqw5VSg#(-bdLNL65fq&tmN$}}JTv(Zet8g)Woj?-KEFfu< z0V{fArNpruuJoWrfXLS);RxF1Q>3#AI7O4ZiSQUWX0&VG16D(AViNf6h*>L~!p)4x zO0-2vgx@kMy!&TpXwG(U!K?5d`E@3k?EY>q`F;;@pQDO*5<2a33O|?*u_pDQm`(9V z#Fo^)Hpct7jqyI=#59T@r!Rc3x+RVGrG}WM(>_}GbyG|1e`DS(rEl3%@k30}!oS|r z67nk=U;tzC>w_}PcHk{`2^VzxyB}RacXkquu0Sju%;0X*f^4c_XB9V{dN2Fi?bFi> zuIddYg)g|e6hY;Op9(fgn+%1YL?}rlS{~((i-;Ax$JCGE^|r*Rdre#vV*pXpfKwZsWnaij53 zn$gQBpSi+me2h5I0glu7II)#s7ja1apCHzsqiTGTI92_hV)|Cjr+(`!`0{e-=hwK6$GDyTj3-kCu3T@- zb6K;xoNOHGCV{hLZP_?XNL0yicNl`?D9LxngXAhX)~x}_S8|-Y5hSMMc=ryF0wpI% zY;h$g3P~tANk~#jOh|>2lZ8|&IYmf~l2e7$Dj6lDPRVE?4NAtiuOSCbO2&$$SxJGA z?Mez==XL)LL*wZp*{PBuw>u=el#CO}ZY9M+_9z)IWUrFAkbO$daEBs-{YoZ?}}&DVRkuH<5|M&a;nC&h1qG_#)Pn_o_B4WEG);^6k)l>rV6tIxs4_6 znaEbmWYa`u$8#H}3$x?7jWdMV@!ZCwFguXjI8&IN#BD4UR_QuDI0_Ac;dQ!IiY6sX z`3U{cxt@SH6lN0?O}3>7{rvU*alV8NE3*1zIBb@Rgyy73M3a0)HabmgAQf#nyUG`{ z8A=pLcB}9CB0XPXvVtrO#|wNU@Rfe1k`zFcTC+g`6d4}VMPHqbMWdr8Bq{KaLb4TT zYRn-dQD4G}Xbt1%eI$GbQ?s$my$jtI@2`-Q`kdrd`+@5jSe*4h(Be=P3Ugpk-I#ZS zuY0erYoe3A$9&P-6wPXJ7@;Yh>V4`f{X{u)Aqkp%loxozig-9cL>#dd>!`Kzkg5Ay z3NXgY_XC~5KvJhIAuZ+tZ$VzG;I>BA=#yx_5=IzM1OMMAQaF-YxJ+dxG9l zm-3X9mcm3Wf@1Gw5UH%Ms3~%BB)va#l+^epct81?UEYMI$j7Y(YH>{SEUz~dB+il4 z6sIL(*kmta)kr6MMZW61->XWbT*oKbQyBi{0d?ozMK&|M~iEFD|Qy%V4nRWi#v z6(mQ=Y_AX`SIHc2JV?Hh3NMKyVoK(ElOQQjGS8a|5?6ALHxneGWWF~CB&lS9w*aI< z$wIFRq*BQuZv{w=l1lGZAl^OPPk(gn>5MqY?i;zmS#eN|*O1>0QtK_dj>XdvX zq(RBoLYkC(6JW1vR`Rz1JJ)t4-v-#Zb|^UzVCUMY`yjz_-BB9(4RW|9AGE(rw;!Lu!H+khhG9E zsAGTX@NX$#+-~T}ot)9-U7O`j?o6n&$;p|-Iy;@*g;;0MliOU0I9abm?0_)NWLd!H zI4K(R0Qo#Zr8#Iwle^>Hky2DEtE8xLhd;>TwD)t%fgw&mW9d9z*)En z8h;`WkAptO2;d$kPC{kTGY$aH^}yKP3pa(?z%6wB>7F5OC%7Y_rWu{G+x-hvy3^x# z`E}C1hkwLAJWxm0g^~Bn)1SN?^d-H02~x@cmRuc2Pv$D}6!ah&0FSh@T726+8%|~* zdYnVCC0s&J_UuOAv-L^XI^9CVi>b)>54ZY?@Z98we#-ZZEWz{&lDjD({-8y|q#=2p z6274O>3>Q-g@+7QQ&Ixl7T#LjS9MGI@P9L6cSiZUgCF9PBCg&2F4$fc2~HC?B5r$e zJBZs++;nj}iJKvAXK^#d?ILbhaSs(YOWbbab{DsYxY^r0dx;wrx3{=`#O*6? zKXLnud$_m*#LW?Rptwhfd!)F7#2qZ|QQ{5}H&@)F#XUycJaLDLJ51c+;*JnEU)*EG z9VzZ{;vO&V3F4k8?n&at#64NuQ^Y-0+)?6=7I%!eW5q2Hw@}>E#64ZyB5}uwTP*H) zapU5iq5IA1ysHOCQS;J=uRe+p_05Kq3n;I$;%%DA#=evPdo!`4x>*~KzS@s*<1zB+ zlh`-r5$mY1aVVotmwO>L4rlMMA6w4Zc*;kRWR&5?ijAjAgO*)$S5ItAJ}Fr<*SjDs$t#w3Ci5HeAaSjbD_)q>Cs*cxcM}Rjqn~ZFQRdTO)&1YyZO78QLkYp*j-@6f#sFDXfwuc-gJB1V|dB|fa zE0jDeWWE~X5s${GRAW3UGv9ci=fWk<<|jlgVWof4yBi6W7<)?YK5sDgj5h}FI_*-T z&Ckk>T6WdY=H1@o2)EBPpZA^t+i&bekH1iHfIIj*!9F^X-Q2-j+hUR|?@nMdNp~S; zl5Fn_NX#U?gqTVCdH;gMOftZu<;^5HLa>vp6mi}Hr3j555kxQKgS{sdW(GuQUyBl7 z>P6VrBAi4-exSoJ5vm}_+Y<0T24u%%79@6vz6O@EWo;hn4gb_H&Mde?uB4*BeR8AB6GYRkeC50L}CV< zD-tu{Jdv0I=X-+?CRd|gAS7Q&r8feSn3Bap?8i}$YX$Y%yugy)ewkg!#5OukqRfkk-;{+WyE*D88yz9e13XzGFCWSjwK4}*tTWl z9?1K!Bnfxxz@z_SgX`8I+vq0)?bcju)w5TzTZeIk)M0+>aN>5VQ}7P3J}!P7U(%A$r5SnA7{hszddiXRc38V z-RL*8ZE}T_{_5Yhc3a>bmO^hkWHORz*_V1f1St$;o$i)acyB9w6!7?k_z~MscsHQ* z%KYX;p!a?oUz#Te_)XR6y0FS=o)TbIwNo}v4fLGk56R6Xfs!x%A-Q>4V8cnAM})$! zLtVO6WNN1bqLhqImC26b&Ky|vqs7!r;xN9vOzp9vMLC<$ln*23JY@j>rpKmsYrys(vbgIJfZ*JZv5@Bcqpm$3GgKKHuAe@1kYyXyuFWGaet=#6}^r5*BD%U3(+ zXlgjupFEO(q*32c>JEqeKQn}q9S?!5Z>Io6k_Zx65rxBabTut0IyX*mHR79YZ7pd0 z$esUdypq!YX@#kElpn9&kBBnPS?I)9@K@ipgz-NxZS7F;mHc&%bk#o)zj)nOzS5-+ zeFLow+~O6#{M>I_^w;pLNV-@m-oWqD1&Y@bCloglSMUcne=*lVTu#lq}1*!U&F>?KqDQehGOmK1LkX0M#$R|(5B+10}A1ysCA zShm}fw%_E^_)$~b?6P)qjBOESAD!Yi$sJ!!Cc9bKCS$h<+hT0HuxpLo?$*IR&BpF@ z|9Jq`GIpOV1`Zf|#BGA6qj$o_pAkFSuRq406=uKp7=PaV4Y4$v<_i*w{rY44Wp_Jb zvEO@)zangpX};9?g%|ufe>T+Orlnj&BYvec~St==z{$O=mC?sE7RC>I~ zorqGZUa_2{H*$vbd|kfB&k_<=wGtr_9mK+!@xMzqRoOq>XJ@tK=qEW#Z=v+`yRHl3 z|907^({&Vcq&^y~;Riepqm9N=WG&ldteseNyRnGYiLs7eCOXV+V;Nq5vd%C&%ZDFE zg+1jFO|4^N$fGVYsCFFbZynWR7(AphPEr%?jc0pfP{UfjJ`%5yzOq`6sbrwXt(65z z21!P(XABiGu`3@zBc%f;RO>h?TvEyLl8SYV6TK7W`5)urCwavnwW>DSn~luWDJk@7 zK^l}4dEAC%EqT1heM`+MiF@3vv|Y&=9(OVAP?GSrA%dMsrg@Kn>{2q@dk<>6mCW^` z=U{#hGw#L%pa-9MZ1fQ}<_Hlav|A`#1k!^ye=%dflh3DwPf@1WDv<*e2zZGvW**vz z85hJiQOx8x=7|`dPyavcy$O6<)v-T*uWxLe*jdO%Ac-x@*?`1$7H9~z<1B{6mX|o2 z9Tr8lC0mJYDU$6ZKnMle0;OarTOoxM`k({?At_5KElX*Eu5^8+`|HZztW6bLPxB_sXq9+vg^}3b=sw&rSFx6KLGDRg!?Z zZy{C4p{3J%wrn0blaL@e)y&}+5?A8S1g%*Puz*(3&1(WI6=F=3_mASO4lG5x=OzpQ z9?KTG?;BbE8{?haH%fk5a(r*J&$_Qb+?nw`vF+A<;#-ZAIOu(&nXc~VePdYFC%(je zr!swx!sFRag~AgEFIHGifNB&zjp^#<+&6`Av!;uGr!LQZ)7a)_4EWtHxjXJ3eUD4- z{qoD~>V4fmR>+km?iW(VDLg(!?)?)Fz-lSE_n$^nr{vy$`URyfiT6*XtJJEzsrbk= zKDH|jeWZx5C^WE-K9^Shh@Wr3nCn&ujQDT2P-9w!=ClfH7>Av!A%VsjV^LnjRSKYR zGuo9nl65*Db%+~h@v-FL{&2eAnqGY2-G8;XRLzy|EC(q%mT`?2zJP`#5Z<_oR!|4u zxSIC_^R>|8#&$lPEF5a=Agc}B$*o_$rg!lnaurA87Am}IPvchJ2=!Uxe2tIsG4NAa zyYX@IU#>znJ|R~j<<*dUG+fLeJrI(Wn@>iI29JASJa0iuUk^;+v6F%2jQ~o+1CuC# zLai|6fhmuB6;4mR*yMq!EMzLkFU9M%x(AAxK29aJf8ukfTfqC+g>t!jB=W5N(?N~4 zp1(iNE7d~I{%tf)sGGn4$cW#WA?`nVGe9-x-Sy=*F)?iQ6}Ggf$O4(VX+e4Xjb5%H}2R&5BgpulyNifE)!OxO0PE{UrML zIfr_9T^w)kJ=Ax}Dx}Dm4#|&oD3=b!2C+bJ+L0EaGPBWeH+?czSC zM$25q(~unsU!6eRs~~wig?0_$xLq3Wv<|)Nhk!Th^YDk>!|8jSL9YAp`B-ZVay^yi zph4bCU47OdH(m(jC4;<=$SVf9iK6+YLH1BBe_)V()VtSsssEsGWEI9Tjiklx`j6*a z_@*nar*q^*$jZh~$g*n0^-RvE!P9Y?^Q<7c$ksnE$U)8dlpwE(-%hLhA%`!;@3ukUQLxq_eHVi&^&^(BjO?WMC+v44S*E#u+XCmv zx1$HK`yUjy2%N>V+y80%-`wHt|BSrl61PUM8ti{jkbGPr*f&Hu;f)Sit5RloMMUcU_O;Z4y= zYfl?t)uTO|2(J=-*>e$1&1Qu!Cfu#?C2_P9w;alrpxBHY%ONdSxwyH%5Z=@EFG$jg z-2@FBeGKqS^}h&8BQq?AQ~c8|z7*VNi&(qe5&8BU9P zlB2Ex-1A`;_gM~;rUO&~s!`kXP{eEN@M8cCaSy*6pw7NMj}X?F@SY=tN9kZ5C0w8u zW=`M_xvVbo3H&j)st~MEK&w1NBczKt9;XMsa`uLG&joCovl(YDzi1|E`}8qGPJHw!td6nP}C5=gTmNAe;- zbW#S6=J65l&6;y8ZyR!G4-bL(ydPjt6EHmBj{rB|Qz`J%0G;RN!F&K1QG=38Rlyh6 zPFwaTBevSas?i+?gcgroUFkXKyX zak;`2!=P^ibRr=9w{EGi;NTyB>=pQ9s_ZGSl_S~BL!+kyoVpp{d;o=fyh~gnlRc&q zsRaRMv5aQPbXoP#xQ`)OhX2s1Tqg`Xo_yCJ@k8>SeI4;b6M1=8`To#kHl}=k=rlH? ze1B-lGk}%v51nq8zz|^w&>R~_Oxtd2)g%=TyD|`;&eud8^yhGu45Y~X^;l+fn()9BPU#svE^7A@{&nJAN!j+_9ufkO< zf4jm<2_I0w_#Phhm@Alv3qA|bl0pv`hI3$)6dto1@HmCX?gczWz4RAQypUf|0t!4g zpKXZ)|L@F_FDdj>C@-@A3#ooUI3NmK%MRd91>Ti%rvmT3YlPct;5`oj)?NeGx3Q8? z5V&E$v8`$2`$Jt;;6`e+Pt)H=SXCgfm*wYZ`aU|f7329hV&MJsDHm({&4gCBn{;a~^A^g0; z-zWTn!apSZ8HImD_$7tq#q^(7_-9vvl2^v_?S6sRxQFwT+s()xNAKtrS2Pr6N;JsXii84+RZ@}gF2G_*d=HQRDq!j9;R*bq zWdq9(Jsa(qMEQ-AcauFlnZ^0I)vNfM$0;xE)I4%&9fl(9JQAc@>W>9JvYBxH`0a7) zkq|)@_ap6>16FZA(n0uit=dUgpZt6zOjw`%d?dowr&)3^xCx+G=2A6Ef$A_)3aB(X zYVKA{)^g5-)A3Jz#J~jz!Os-sqxVcOoAti4kArO`Y|TsbZ9eD<^VM7%xGWWX^M7y zGK>nJXhW{4@JUjk(g-}mB9s96FwPfvoSHEw+%sqeo=Va9EZb%FFFwHRj%245_~oa; z38nDAWc@U&7fTrM!vIt4Ix^v#z=yL-Qp^v)962)m7r93AM~aT+p;sB?k>b)*+?jsF zR|Qx_f23qBU={rleq<1SkuM==w;j*28cPL!G2k=!2SFrAN3eSH4>3bDkK=^ir z7d{2}pu&p?e?*O=4K@^V))W$gtWLonKjk^cKC+xl(mJ)WrIML-WEFXxujzFRXFjQL zJ>h2+4xBX-Z;4g7fwA*f6mBH^O@*8Ie#;*y+)PjJHHBNwLEYCCUQ1Yy{f}&{0c_b~ zT8^|*(WcOvP^bkja2)(X!e`wf?8rG1rfjvTE*YW1-J3y%8A6mVHyo$wTP`TYdU_Tz zts`5h);K4NYgSJ)df$QOKZfRIVWFxNa%FJeif|?p3aB(0sVkUD^^sIG&<0rEaz#B- z=F9RVK?Xb?>Sj~5G@ChYC)YEZ)Al(pTOd=LE#>Ba1bGEi!L;Td0j0?L0<)-*X<4j< ztk;+|0m>nL6%s<~>G)$Nodd9dTC3*EbUA~m)L9+&b_m9OU&a!oPG##xNRDUO`?E5ItXC2t}mZQ%2B zAweVP${B#+JL~`%Ocvd7->$&wlEXrpL$#H+BB1L6q+(ZvLWV8pBO$K>UveRddLnjm zlI8G4RGVFVsqX9pe!B-rQyBxe3P4K4CV!@VBl9WaJDD%iSpv)~4NL52kUZSjnb1|B z#x5?f&Gv4Y%|+QD%LOspyA^_%jb*I_8_dS?0zsxtXT`vUg7_3!C5Q&K0;>fv8$bPp zrny?IUUJMXFd)bx&1n#1u_BFvR4URWNR1-Rf~-_zjUZ;T*djE_xYW8EyKm{Pk~it2y6TWW+GG5BTfZ;+-m{a5a0 z%14pc1u=sCRW7|uBiJ``X~m3Sf1OM3&ItB5@*|NxqjSH@r9(0nKq0>{CenZ{ zH1y#2xpc)8elvF-vI`ip(Amm9P@2@?WCY2%`6c)k6=ry$knf%?G@f@85(*e+&>)3L zjk@I-bkOn~hQ9mVw7=Ue!&pSBO|@2{=XhR{Wmuk33GKnue$lPX5QXG`%zp!1z%YfI z@LRXkR3-}Dgg7GnF)}&@U;(2RTEKKY7YQ=t&CHPqj0{0gc@!Ww|9fC!ZvJuU!O6A1Z$bqO#*VaDsTKLT-tO4LmfT`)*xN z4=wyur+ba=&>{wajdyP z42wLG!c9-DY+ifX#Gx7ZBJC+RpImj`KpFn?NM$=I-oNk6Nn2bAA(!6sR%)YeAwJq-R8_sJCAGW{XLT8?J_NW8Uf}*mn|_S<2N@c zlv7T%O`OON3{McW3>-$1_B+_ziZq3HGWj}%uOPfv;av+ah1J&4?LLO|+jX9_yz^xs z>TFXV5zp2$d(b0gU?jt6dJk&w>zg?%|j ztsOFy9SL5DvSf+Qla{?B#=FDXHxi&3mcH8AwM#4`n5)LTeV+FlS}QsGaN{`~Qweyim(Ojd8O4~=M{AEy=i31PDN-6)K`I50d$ ziEoELUh+o(N@q#}kDgsM(MaHg42sCgka6>)=Z?a!T?!eGz9XeAk1i&x+VbdmA_Xn8 zgm9t4=Mz?uJX%S3qNZ07o}zFy;b{slCG1nUhOma*9$ij&j;605Idc_W$#jiiK3aPa zY`jX-FJQV(=tnQ~q5O@iRRl!|Z26vTIb>Ibmuf9RJzcXOoo%l}dKR@+zOsj-ExS;p zhIMuiD`;e0adgKSlMVll?v%$BgvO(n$pZ@tUrsn*;VTF$|Bmh=to%EAC1K^?(W?k6 z|Bk+su=4Nd)r6IQN3S8Q{5yIrVddY^cYPSJxfOBrJsg1OWcSeuWFpQZ4vgwIy^wx230xbrSP4s+pO>b(z#CI4>G+~;k%fAvBGyVeY3&`35OK^5aD)( z@3{tW2c{ICG0DxR@J3R?NAH~pP=zTx*cy+(zc#fg%=o-)?v|W4jqm#~X<@h+u7&$({ zG3tCh`Xpg}_0iFf5!P299es+hzWV6s)2wUg{{&$}|0f9>`d?&uL;p*JC+XNu>Dz<@n*JTOWAy5Kgx6^L4+ys?{6oTP$0wrJ(I2s@ zQN14%Hmdg%!bbIeN_ewY{Tbm-gYHM#*u6;w1 zi3%J$U#XF(z_A)Z^lt94TB(yik=)hTz_EZNX>8zFgCM>IZ1Y%?7PgnpQM}pU)dpW< z@G6717`)QpYYl$B!PgmliNV(!{5*qiF!*AFZ#4Kj4Bl$+a}C~R@N*2l$>56&ev!c! z8vJ5|FEIEe2A^;6ZpCxT4IVZ5Wd`43@OcLBG5B1A_Zs|cgU1Yhmcio&Khxmb3_i!; z34_lzc+%jr4Bl_>nFb#)_zZ&&8obot+YRnF_zr`Y7<{L}eFncwai2A3BIkid?vA}v z^k>mTD*ob$RBjE=9lJ@2YeeqY&4OqU?$`&UipJfJ-DxB0V}29k*oUQ<2Gou{AjP^> zO%K_3qgan34+_#}&CNeHZN!XX+foIbK7w;HKlglt7b!kwp23Sv{v3n*6wjGu@DjyO zDK@xY@exxEUaC0UUF~m%sXxWwGZmi#A{OGGm4EDv5i3C5BK{)!v8j?fo6}H3byJS* zAMq_@>zLjz+1BL#n04%CZAg2$MG<@HIK^)@c(uWAGkBH3Z#Q_Q!9Sq*xVZ+uL-7%F z41TBLbFjl5o&V7(zW_z!L)J%6=dCMq?)cF&NT;|0;~qP8y3e=*k4@OjBC-xVHt`0G z%iU(&G>*UXC>b}MnksbDcpm=b<3{C8v$vzboM>#&x@itUImf%{%&R@{toM1~*&kkp zZt#L@q~!e`l;q}LN05Z%=D(jH&n-vi-&D>YmPE8-hjmj$yGPqi^9he&xAVS&0@_y@ zxAU`a2d?56v1ZWz1uzlEn(g+NeQZDmJ>~H!MI~lDkDtzZI=08p;E&d*KlAw1aumUH z-e=-ZA-_Ny+sn;oU1i=Ar)&Z|KGYtyp2(-NYCBJi{QYW=dHMdTT`Yvh_WjjTW_&bm z`Ij;gn`frn2+-X(vO)1B{dIiuZd|^<@o6N<82wGZ1~`Xr+VnRI*+RxNe*@Deeh^%5m?PheL&X|84*~2|A+my;a|HdM};f24I$)<@m7M-Sr^8MlEC?sQuq{iv* zVk!o~S+NFS+HQP`KX#MXZk*e0#+te;|F$-OhO`6)SttVbCkaDmH~X&`Tj~d!&6utttPZ39oovLX4PH%HokagNgy(2G*AiAI(f@8zU7_jkA-u{OUE{xg zhDX2+BW9yCo@Mplc%GMd6XT(hxObD6xG#;={X#0)(0945$h_HKaVqrxG@6>yK_muiXlNlx$V!(*FsvOdU%9r)W{G(lRfRn(Gw) z0^z+1e~o2sSNK~@KdA7x34cW4euv+G@-?n*P zJWk$?;m@&o9Yp;Yzhhq)2tnp3l56u2PuDhoo;;njSaS*l(Ss=eXqzwStI?b> z_R`tzMMeKuc@R%mI{!GSqsLADQw7mw&p%NPqV$Bxe}=sQ4Q$rdrV66Vo`0Ub6*+Ou zS!ll#$PPso33AosP$wt1eJ66R!$^B9{~8-{2J&)20K^!+iS4Jg5AvZfZAHni~$t#3kjTJcr6YPIT@nJ z3*XOONpAkdfD0&gNhrJnT8GqaZc&O|b2w7uyoco}|BTcRF_q$Wn|*=_6uFS#-Wqrb z2|@wo?-KVt7Nw*M$y)c!{?{zJ8C_D++7~Zn>T6UOhz2bqktNMh=I$?X&2tkeQmx3z zjN;3YAiI?*{x|J?KvYZqk3KD{$RBKxnj(LcIW$o#jq|@{f6S|7$>VgU1zV7O6Nn?D z{HNsn7s}QEw62ivUGjaUd}qYn^fc2yA?FXMkehFx32scrmy#|J7jI-uL#imKmE-@g zQvoeeG9QqGT5ED5wB7O_az>wxB~Wu7bS3~9r^rK6Y>Fa>1@TSp-_d9J9~NYe<~-ui z;jK{QG09mxnGV9^0@rB9Q_iQ+|0+d3E;-G7VAcP$z^$6`2|+e1@|^SURBT0_cj#lp z6?w@y2gnXZUUt5XL&@uOx_wS^UNS2Fd1>yO2K%C5Kk&{l$q>Yp!9@}B@BM8ulP2>d z(!a?`J+SV-$aw~3Uq|U>_$#Hy`CrYs4T#e4tsMSrwL!iuuaC)h%dL~jT5i3NV9IR} zgfVV5G&kS>gbY}ICDH$+ynzeeH+l3iK}N95Cq-P7JK_VD{~0Z#O+RbO_Zm>!*}^+T<-%d7Q6SxB_x4{g@sf^6mdSSGuvb*UiE zonEa=rIyKkPTTx8a#tm-oabx~LtA`aT6AI3w>p8hpya$DRZRWm_U-S)NZ#~XUoN#w zZc)x=(BsUX=Z>>Tp4Qbii*iVDos#U&k%4MG`vW7}QO|C2>mlK1GE*sC zxzei1G$m&jFe+!i=#`vZz!02_!#-0orF;9VH27>Oqv>-6Hmyw^!^-v_yw)^9`&D@L z7R#P4#Y~+gg+jsnGQ$B|6SVb8$y92p1h(oiO3VIzj$Mx$TI!EEY{G(Ekn^ovTbb~! zQPS|OUc=uSl^WW2BvY$@SJD;!p1>9l_$>SNQ|%*O?blD0PL?z0>7sUgJD)}7%06JS z<}@YC0{CsJec|?J4I- znz|klb+wv=4@*W0y9nd+r2et&14}D#8I_owD&gWhui?kV-4@nBXDUUdnTug1ExSr_ z?d*J&8gubE=;&Yjz?S)LXXlS<*F@9!U&rO0*{GwusFM1B8Ll3+5%g;rg+sBN7fV&w8M$K@*P-%bJJV;?xSz!m$)rG%3Aw7^QvC%l?N zaV`5vhkBxU&v<1u@7c6=p7ZiffO4wK2^7oV!=)$A6t8J&w1@oVPR&%lLoMfT!8e`0 zcN7rTNp~R4T7FRAb!2nlLRE0gDN4a%BGX3H0GMLs{SghQM(2-C7t_~FHT%GYi(HM) zAIr*_G=4$F+SrRckBe?* z+fJlj`Yux~m{kftDmZBg{3WI5A49|s22TAVLUTb zW&hySP%H6A!G%Yxl;Y8b^f9u&{pW%$C?R81CH-49D~<49dg5WzFgWtD4=j0yOZYE` zi28M}21WfV5w#BC4aw1Y_iL||42jL9hUDq_3t*s!WN3MYO&Vs@(p9`jeW(HSu&N`J zu(knZEQxKr`~R6+r>z2>&91h)t*uKKd9OyUR1l#$|E0?Q!gvq z4D~O#qd2hbJXb?rE~LHXM~%bFh0NneRsC~b3*_AArL=JCJt&sOt#n1#?LUyG)!vMBNs8HORC@X%_VyFGrX-4o#$(xZy^Z8l}my z7mt2p2^jc6q^q@f08raw_}cUwzEV{)mb8g(_2&wH#OfJKnw$AI^FKA&WrY)lk$z#= zsa77@p@L`>ow4hYpn_;jo7K&dse)Le%B5`nvd0>dpIW$9RJybJ%R|`wRj&rw{I#@M z{dLI^7OzG16rVOs0#WH7`2Ns)U-9C%hUI+mj+T5f!VXiHc)Q|JYBDejFt> zei!K~s(%O6_TTvOhST~Nk+gA(0K|AG!*BP9VwX>ve(eJ{RlCDTmC#|_;nmuYk<01wX+>a;7yGJKcYGWbx+1@(hX0}a1YTFEaWeh8g_>9#yrAq8rRB5!8N4ht& zTiYJ#_P*Bu_JQvp*K7P`Fx5k(waqMOKZg@8{oHK++6N{rO)ERRqAJoUqIz}*%If?- zMf5KnR;3!5rlX_MbhJQp)J%oLs%?gZk9eeS2^l%Pcj*!%OIEU6KXWwMqem^2v z%u)P^hkHca4d=!~$kY=+mSCvaiw*Nmy<*f}56S4~_^l1AV>t6iPXNAL4i3yZFuN9q z|FQvoOF~*q)j?ar6XI*YE!$&(=H_V35V;<8ccpXTP&$&qtc;vfv3vI#;1<(EczM7> z=$U&+1{Y2S`7v}Qduzw%>G5+iD9GT!@pFb*PLG@n?qn3p$jN9rBj*I`WDuHBCnM+5 zbTMY|Ekkk{YR~$Ha^}M67nk$K4N(669kaxDDFhR*kF< zH}7==T<_+1jUJyW5|UCVj@V4NKbUC-+?#OETxc7k^QT-IpqzaRb$R%6E<;x8k-n7% zTX`%-i)9O>C35muTIZr8FbP+DL>_Or^Wzbp!I8()g_@D`{Bd)>ke-t<88T#Yd~u)5 z6h1)-AHUe~bB5W-?5v{NcsUG*dq~F2$Y5ed(-{=pJJjDXdNOu|ip#S8vp^yHz@q^- zpnU2GinvKl2<0Bb@%_x>JAu@7)auWSyG;n<5 zetZqgXyE_PNXG2Qm}`GG)pYr?t8zxu$CqhFu?*zz*3pdCGLVdkk&$zJB!h_=#r_8g z&FJTEK&*D2JG-BW-bx&8NE6q|*oq86W*~n9b;nm2W2vhhm-IQtfZ7KxZ^q^V*11Lw z@N{`zCUA&_?d1aJ>^oPj_KLK#yjsa(sfZMfI2&F|V~?Z-oo5@dMaspdYvZZ>dJ`oy z@Gu?drDvMmSlc-OHt;4w`o}(VR4uFj80lT#G?`NS($~GB!)whMb@@ruI&0LUf3=p! zVhQ=Ars(la==)F1gdV?v3jAsCc5P=Z^`j>5r$uPpG%5*Dl^Y)}Fe?t$p3t zo8ahZjT^_Nyy2V1((TdoJ!$Fb@ZPlaeF7W$-aW=X?DcT{m{bopj7jzIzBKrzGo;!^Xnt+IX;3sXiap!)c zOhgfF=C^`#qy9VDB(SbppWh3fio>Wo_(yMxp!lD>TAh48#{RS5&b}9oVH$Btcet<9 zvM=z0aT{p%(m(dhQ_fs#EYqdenasAE0kj>&*QF1cByS!tFz+D@_j*W1P6m=OcQWc^ z`*gt|k2pDg25l(e^!JKR4K=zjc#yAhotJ`0@zN=qKaaLk5yj z?Ehf|Qs8V)|JbopzOup9nmH!3Z4rP=Yg{Yn20@t~~%`R}z0G_mt zFO!U%4CMb|X?cA6XYv3lLUWz|v2Q-*&W-LweF~YEerBj-GaTIvfA|EE;}0>Tf#Vk& zmXj8I`BnPr&-jnW*^Euf$#}gPp`489O~!(sVMC8^HjnSXWN;zFS1&}A-y2T`7c%N z@i=-B?BYe-19X}EOSc)IZ5M#H>-lvHzBV@D%ahW`EosQ4bmTA7;Wco41;~i8WN6*- zo6gXN4EY_uPKIt}6w7EWL!B~mGU^<^)8p64Xdq+Q8TyzJ5Mv#yo!6e-PlW;P1HXVU zH+}WO;(4Sf0Y5=gWQeG^%^co7de&4%b|nmA@kCU zotKW(rXw_HsY)5Dk--Vh7%NJm>{I1k@`gS>N+uusK*y!7TRc%ps9QXFJnvDjj$8I= z<9YNbhxADlO*yq1!>k(bHmP`xhhOv&)N?=M3}E}mfAtdZ=3|^7pT<{^4;i>0w^Yv2 zoQ;#QQ{FfVUl$L}Z7W4;kdHpNpF#uV%+1;OJkmEl&aa2?H|zvB0iX{X?cUw(Ej9APD2y#%T`@p)-<%_12iB*6Ccc^PDy$wTbqZom3%l`;v?A- zkMJ~ZXzxd}l{}U$@uS%iAIlt(Owq~hW{Qq7TmQoGbCHzlIWG@rNVKGI{AT=3WjQ~G zSFzD;pxo+XsZZ>%FGP~UJ8c$;G5wQOoOkjF?Yod4*VJdKFLMh&J36PGC3v^-ekmbs zJi9sP7_htpUb(F~FSrTP@^g>i)L)x>?lC+OXTYaYsh=RY4eeUb=aULMCKW%`$)~%N z((QIVatzf<2%kr)=!q?si>e7-qexLd_mmR#~HObP*CTr)akz!^1PmCCQO$^XVvty193 z1y`3C@TCIkm88DB<}H+Z2X#OsR{l<#zvU(H;^q2CBHvy*H*7dHLi3i~VNXMnlw0zw zloNRT!Cd|nkF>q<(p7Z^ytvKl@w4({h*IFQ@^gv~N4?)|-w{TeYM+~M1=5|`O_uc$ z0A`AOe&h$;t}lLN#4~_%^FJ-$b6pmEp~dSjUh=J%O>=Sof1+64fkA`!cfSgvg_Qni z`wka;*JpMa4h$68Om_IN<)VnIh(h6L9eYlVU4#s0;`VChVwq6!wOpG& zSg3HG%~qUwU3h;6{>8!PKYbgkA`vOEX`)jNIBy!hq@`Qu=i#-t3SJYu#09U7dEmSF zu2`*n??{ixO}j_YE^7LXY48U|ErEt>`W=!kjo)_hPuzZPyTlXq?UVf9H(h>RUTrC5 zzkZ=t;OnahN^9S!5T%t8cbBp+PGpUIWN2UibP8}MJJ zf5|oGY2Y{Kd7ac>XY&W~q~4(?_!?#fpX~1j*Z6~~(o@StHeYS4aCff9iH0806iIJ5 zVpCoUKWZbAqiwx9n$}F3eYB3RFI7<9q$-6UooDmKonq{5dAVWQdUXW!pMvd_sPrgp z-G9!A-+?@NCcf0oGX~P%I${Enq+$P-5gw)fBO|;)`#&de5}cOLGY|H=pqF;%`#tbm z=X>Ctx1_**DR9q#TmNW{or0I9!R5AB{M##1MV6%%sY-*Z)8IfFd`22PDh-~J29HdG z&rgFZ)8P3jIOm2Ge6%bLUXmg?=M&h>*)zvXC~(G19kc$lQ|)o5VR4#a6%2~*Iv zS5L4f;Dt{m*6Io61$Z2GEHYOkC2tl|AVlJLFNmpw2|seO<&0TUaK4lp1ti}^3MSdJ zPiJd|xl(uZ1iPSsnM@lq+N-u04UU~)J7ZG0<4#K}dTOdDUTg%!^uT%(CZL&081{*y z(FarTVqw!#F8i5m%I9kCX_Ktkr*j}v2;c{SMo8(^6I{B^n1cqVp`EFuUb!(%n#@HJ zX>z)u$23`#)&pivaat}=UkWWK7+p|Uuo#IYLM#Bk*Rn9B)HDTNve*n$*PwVsasi2u zqO-su51GyO@Y1DJb-db@oDq(qrL$5k87eTsvs1-WiF1vRWTf+qY%x;HDw~DrQ4WIh zQ*x>}&1JR_HQ(zK%`Y&0qH?PFgmFRE>Z#iG-y`(XMXOe6O0}_i!m0N7Q);H%wp^xWbBe4S*n%~w?uoXf=p?%K`m6DF zG#gU3)-h-Gghi+Gjj`)pBxec^1g4`vi@pA|)`B+S_r_d{HChXhhUaS+3ATxUSo|Uu zCrNJciwj_*#-D;m%Tjz{=a)(i0KxPcxT~2OTgJ#jX|$uC_A=9tH}nqeh(@9lWewL! zQ+Sl&@TuT`#6>Ktiz6W|-AI%2ED%i>z!3IsNzcn5Z>u2>ipef}QYb@tbr6l1$5WKw7=#VgR~Uu zq?6JcA&h(NCy+F}h#ZKgCz~_(^rWFM-X4E)NyBTofiy2C?Q*i4cB0*RvEaY8;;_-U z4Y+@^GPl#sb^n?`po{Wv)})iJC~?O0=7+*rWQR*q!%JmJ%AyBZN}Wj3@b1?B!;*$K z)HXC}C~l5Y)06*^N$Kqpwyp5VB@M6Db#h5VYvow`u+z`{WKooC#j>SkHU#(A+PCOr z(}vcw_5MwI@<}J9H$ph;96k}7dD0b!Q;@~lbq_CfB1yw*$q_|*auyk9U2U>d%#xIa z^em-LBq^On!sbjOJ^7@Q(i_pXv(P=v{tmB|We#U)XjrM?4GpU`yvQ&e9A0EtD_K{` zVe8)sHI&8h52Gln-V7t^gt|Ksqc*&uVIs>)QI=A}l7_Yo^EKl{(uS7FN6(3&eM3RQr%Ax=#XOyxKIc#WIhmxh#u%zL1XX)+)M3SXe z7Pe)XCnr`hOIs&d@q`APrR`x!C)Ci%@q3s}%qretrA~mN;YEh2>F^@MhHmSnjP#OO zld_0AnqDazj8~WrP0o@uyhs)zhbhhQTEpa%#kdTwm8GwfBYGI~Pt5+D5Jms6p$%i> z$r71mv?s^5Ed0+h+7l}^tm1Iy4l{oz=1&i82&?3zlT901FRMWq=DVC|sVo&wBxxv7 z7$C#58J}!v83ll#%*>%_SxC=T>_pRsH$Tia4K0GEhwaI-Y-9e8Vnch(ve_6~1ihUQ zi?g%ugsKkhGVQ+E&@2}}F;Ds*S<3C%{hMQ5yWNG|zu?t7T=;l@vk3HmIB6&)S-Klu zWSFv^fU5lOYuK^&y)<;});}$AXwT^QYeUmW&HvuSp`$smb^Ps8L;2?7Cmp6dv5Iat z?%)3j-OI90{GHvn)VhC9%vbtHmU4S`|7O`f{3DaxZrs1%-zzTc{e3&pV}$})88W2I z|88shcg~}KTJ@n!|3}V^|3z&LXT#RFlY|2&c91ZfS#o(lJ=xZ$5Z+Eg%f5xRj;iw-^3&ra%(^7a5XH3E_X*g8EPED9aB2@9g^@za98H2|DrW zL&cr-*3huaKmWs}h7&dH{3GkZ$=jurb0^K5p^QIqJ$k$3P~Hu}5mv=*)yz+}w9FC` z<)3&WX+z6ou}N8yDp4&*s^(`jFlWeZJ3K!9_UCO5yv>2PIq)_I{x5Ri4LsqSW9==( zV_xk1gnpb|hlK_E3L+II%O>6Akt4 zz`ri5tUTJ+(KFB)F7Ju<4eUt62SV{^c_`UCuPfXaPDDG>va+X21-F$@qNBS!l;}No zk=Frgp^YpVZck}FNHgWhj_z=0T56~x9!*D6#Fe*4`(yDW9unyt=!v$Mb&wayo=|&P zHy5^OU;n(Go^uxgb26|I`00{ZGP)z!zcU_AYPJjJ;^_*LiYCH4;;}@(Hn(M(9_?epUXLJaTVngrB;uXn zxHdMd4yYbd1u5OzgY6(_Ydi+FDnSB<6T#3xf48Re#ySUjNEa&L_k(*wNi)Qro@mmr zG1=?(D*&jDCt@ApWHOd8&4v?^V0bVr-Jqdlcw35BRHPsoW(s%2dgCFsjDcZy02KfFVSvXvbw=yr{&+hd8X z+Xlh|CMOy0)gtk({!n{Qc%G|99AT)7r2zHzdZOXby4^Y{{v_J_6XEpU()#F5r1hT+ zcX0IDXZiHs#115d>1f3r zM6llzFri>H77T$VFg_}C0wa`pHczN#FC4Q=0vbv{wnzny97#{OKN{=PQXL6b*SCgu znjt2kC_4<&9_6e+bL~CQJvwcZ3p&kYQA`lQRVb zYz-&+Tw=iXU?l3!RAX~kCf2?s+|eKGb7i$N=~gjWrY%e`g>=TpLy3?Xk*Y83WPb;Z z0!Qu|1#knr=iERBkZ3GrTn8`_kqY7sq!oh@V6-FbRzhNAJ5^m<)=Y(ChM;I-TW72{ z6g7Gj4<}%V<_$3j?yTz#ZVzn@4;Y~&LjB>MXs>HTyw*W#sH4A~Tpo!h{$R;qy|q`G z3y&9_9U+)#&45ud!%uc6qJ3b#sleJj2`UE$(-De?+M_+uej}_%)Tjvf&>QU{K|!!D zr3`5%j+(Kv&nToj%#=2EhI>Lg!=1qnsI7JuPMGP2jyQ z_C&Nl%=x5Q1Mb9wgV1g4Y6n=QxzMm6{*Nk#xtVT2La^~2!8F~(D<`zzV6PhdAi6TL z8SKS6X(lS>V%l0i&Rrx}GED;Qaif3$=BZ`T+VNyGoe5kDGWkB(8;8A4 z4kV12BR%0ALD&*b4%kC8725~HM%LhJMhDPAG3i(V!Kir5wOH**x+55=0$>Je(zKX~ z7VZfT!iO=6nH)&Q@$O+mGv{*{`~eEiL0eKQG8&W~#lb6cA*Re2+zoPEt=H59aGTc!tfb(V^o7tar@Y^SP+y!Y6QaUC6AEa z8HT?n{(>3MmS_a?*C6VrK!%{+OzuATLt53d@Ms1OY+9KPIt?fUVbSf~L7jrlAslQU zVB5fqgQ0Du5YX2hN_0XDn$tZ1O>-9-wxG!dLJz8?!Q?4#U-?f}s{(CL!O1oTtXylPi|3ZL)GkuDJ*lkeg2X~ zvjRndqKcAoXM36RE4ysj)Ut(vEzS6^DS)zeUL|YfEg`(-ucSC5>uQ!2RhO3+m6Q~f zlol12_>26`3s#v^=UXt%ne216_-0IVrum$>&*?W{fzOHgoIankz~@9HXR6O>^UZJ; z`kd8e&O3ZgLs^S6%I6IF_&u`D+3ste-{PR&fREpjQd7Uxd2)9oP*Ord{m%22&)L7b zm5386lRqz7d-=DXUtRp_b{XWizK=R~5LX zq`0K`nsUeIbDr7#RIxMD=bY}V3OKc8RrA`)yV}Z~;>zilRW+2HUox*GP(I(;H@?of zXII@>&JS~Z&Rx4&XE@)>DRaJlh0pn%6`4AHW>Ixf=_coOq}{U1=lll>nZNU^N^Wtk z+jVt)vGcQ>vcH%wM1LA-i&RQA2T2segKT^`e>1_R0b0M^4#t z41E^u->E)Hqi*{s2 z@r>!^{^=zcu&-h$F`vG2Z>w|jt~%$}IsI&N?o3d+Vq2*+v@_y-*V^mcv8&SgDHw9c zuCi&)&vU@?TX&VsfE<0!e_E{`?|z?CcG0cQJ9kCeiow516313J=mE zerHGKOsyzhFs;;im*aE(014plCZ~TdYIscAbNODpyv*5LMhS2B;d`lb--t5jGrQ`h zIiJk&l{wGv@-4vZah?NZpV(FTu=7$5^(tqs^TaObiZjN?sWTFpIhAvqW4rp7O|3cX zd@84|JVjS4xOD%n%97%8=Lb2FVpbQ&%rPjMJ^Oq@>h&;*`2p=RdEgbMA1cEz06$Y&_(U zfY*?9my?zI`+D})Iin&X^7Cdpi|U-Fy-TN;_~!biobzT^IWv4t$k%{5T~Sk9 zFJ%`y6Ma?AKqQ6Vd1Ym5aOKMCB37#CuJ>0vr`C}>+kI74Rn;@jE1foDT316!8$PAZ z`DOlU%&!t>x^Lmsl0a3x6S~W}cXwTNm9wK2SZ^6Mvb=s)k&~zce!E@f+_T$PTwYOK zRSgbozoxuoUipIJ@=ZWybQPCW)K>(G24@Vm%_#PtUsAl_>_q;^{EBk+HtXJ!Vt;Y5zuI5rjE*>kt;OZl&giF{%gV~ddghfu&&vEu zmX==hn=7iF#WEN2e0k2;R?$P}+TBl)>6Efv{&1D^y0v#x6$V-5Jh;2e>5m9MogH<~ z_pC}y|M>1Q*pKphXGLp$b&XS1S6w>2%I}PaeJ*iEws!XwBkwdZW5v#&u55KaZPi_i zSy*0Q>YR#El+7!tDlT<;%BlvPyD=G!Z7g#JD$CFct!qJRd9}Zu#;m-;87q>uLG+^K z^;K0%2in>$nO{A94z$TXbL!k)Sd?l~k12KT8t1G^=Zs1)wriPlE6mmxcHPz1QtrHU zrLVdMa;k2vUgGyVr&hvzI{jEzd?kJe^ugVgRnGgJR!m`N2&T_Zt-6M2b=AV!nM=2C ztp&;2fQez~ix+mEdxDMHLsu;(?OEs#1)js>1o??y{tdwRE6b{@N{akNKuRi{sIQS6MaCHzfb(OE-&fgn)kP2>CtB4q zD2~%#*H{JNwq4|W@iH;+l}k$(V%-F>jx&my>u?@B9gCc=f>%d(*P-VM89F6`tQ_aa z?mFiyR$0|7NRg~^n!IZ37da2@ekxGa=1eYg9-4$DZVT39A9%U6qN=;WN%~5bI-^>v z=F}{3cKFHz<`k%%HS%TTLP0Xzry*k-CAE-5vZ9twRC!E!*qXXpt_=H0joRD_4YeI z8H;5gUNZ@QU zN5l4%PG2f?P}5}Az!kW<-ub}pvVb4oKIb!7=byrQAFp%X!chG6)y{`bZEfs=p>U>D zR#1=1oiD{Ao8Xqg#5qsxZoRJRUW(Lq{?D$6b4jGWqN=2-s@VCOT?y@Qrj%_0tG{SP z>b1g~1+6m4eWkPgCCiJa&nU(OysXR_=ld5>2x&ugVdtH3{WG3#p58G1lFiPytU7;1 zwZD2cG$h(pUEN(#<-8-}jO_PQPj>qLV~umF4A! z0wrcwIFo#v{Ls%z=e8Kk_;Z#lzs^T@N1Pvzy{n?axpP|thJi!+uU$`-JD&$1j_uy- z{CZcb^T7$N&KF~EIMWoON+`SCmGkxa9E$=V+{~8cv?` z__(r7jm|we{m$LH@2bA-v(BS-B;bt4I=I)_dY3aV;(X)Es{_u4+NxXXEVTR#lPM@R3) zinjM){Zc1>wR0PMx2LYW`da6*N-)g7uWM-qOdh6!GxZys$2;$GzSp@IhT2J%`JA!7 zA}Zb3x}v4iKT*2GUxbut(@M|g8YCIMqS?^L>2Nh?O@qEwV7BQl0!j)wz!}&|VEXK- zGfJ@`@t4e=RbEp-P--N~9nNaEU z`kV=Gz*oZVA+Xe$T?Y@cx@NGd-MP4KE!>r-VLIQlyLIB+igI*QQar!mqKg_g!KIoG z^Wb;3mKFK2Dqw)~i~I|wm%?~2sCHg0!CE!J=bu+zRgOh{OWlHLbO7-wFVCL@qFZKT zTAahF!I_Prh<61`y&wMT?Yn(YneY25{iRj@h6=yGq9T9t?AnI5b7hBuo~ueKavYpk zrSBAfpKC9hI;OuIr~S-BeUs&&?Zo?=PvZo{=*GH4q!=7zoQo+iI>2u3f#U zHrTwb7IC<~Fhc$a&2-{qBDOW$7wnFP6Wn<3wAQX$wl27_Wwn;uip_ewzdJY(??gnc zlYs!7z;GLDqM|{@6fFi@8Njewnj3;GwQGW_R|aY=IZQ*tNi;GT?6=ChW4+<>P-kzn zuVQ}rYxlqV-|yL1-Z7BGX;3iSH(0LGhk56eEz-j^LS^$8p2z4*5FrwVk*r7pvE^Vq z)R`L6`jrd^GPr^8kOZC?Jns+U@D5=`rP)y44jOx7gN7+=FxnABoSd;j955la+Y{s_M#e&ILq+jBimT)8(SbaflFwoR^A)3RHPH!;U2}UAb+ZpR3dA)I~wkLuZ*Tz_) z)9Q*N0=>=Jnhf^`2P8fas}N@NlN&IHDpKr}0q3?rPuZ$V~>NKb5gushU;vI&tiV&c?|4sZt& zizeA6W043U2M0ToF)P}!Ey##Jj!uvcMKwo*qO{QHP!MMVR(n*%j=&~H+|v`pnP`6$ zhboLE_T%KE2g-nuUIb@fNed?t-~uIp9>K!SU@v;^!PyMv$6zGc%TpW?Nvuz1S`@+2 zfna1iqJ$k*e|$j@KVUY1(S{OTNeeofh_>UvENQt>#UL6BC2@F%L4*=f8B|}aPvW?u zC(G8>2Wr;^*EU_SZgtBVPv$-0KB?5v9qs9aAUl=gtHAQ$1rz0K+{l~FZCybC4iAG{-HB?igL6FfGvpByHbxT@2Xb&c$R?~vuidD;6 zF05?{u5YYwY}(jpg@YPRv*g5waZ$|tmJ5Pwmo+p8YJHSwN-F72asLoJv` zlUN&Ewqo7t4YfS>4C34qQ!#EeU$}O~vc}-r`qj;#{|?g*w2W+9F)j53qTpb0k0P+*#%Hkjxemj~CjHLg&LL91)X zgB|5GPhdX4UQm!$M_+WXBe~tubAcq+1N?$sr_p(wNG950RT;44*;80eALdGTCt6Aj zbWjnX6qxy75hK`Jp*MyoIT-*s>spqrs0}K+E(n0C;96+t1*-#??ZM@k=pwgJI|B1K zYLB8TnYp4LIBf}v@e#R&I$_E&zi9)v!hXO2AiRw80$5UND$E07wLA$J3=YP6`Y{u& z<$?O(CYa8Z!Bq`b9Fr|&3pf{hV4^VkU?hZjZLMF?v>rljz`w?24Yg~VLHSy!h8jEQ zuv)Xo1~hKf25L7fTi4VQyr89tm1?1y*4h=T(3Ly=A|YL2^{`H;<;sIqFVeJPgR~Oq z>CiH(7pw@b4bb@MdV-~LeeK$HwJR;mnP_BZFoG$pa{}kVFs-uaiq2v>@(EDiG zWUhkIa=7K{a_R_!DiG?6fsz|_URL#T5L8tlPIqb@3*4aG_viFOU(AP%NLR|9Ak zr3gtdps%Zu(IXuFSc!H9)M>7RU6@?5HZrIW<1P9U2}NO=!@U~Q*E2>gz{cR?3^yo; z5_ATFpc==KbXmBpE|aONt8EupW8q?h94&GE>kpD6sinRh=RnX`T}UZOEA!OK3I=hU zqVmBp0heU@KQa|S&kiuIuR{(W)6%VuQd$hB^8y!abqWxTTg)1-=){5r!>sB|^1{+tes5R%rn7upM1xya-Di(Gbg4Ng( z+|Uq|)mNN5xONRxcpR$J6HsvN&pTYzl+NsUiLa{0ce8?)1E*Zg{mi z?no>F)v-Ezc+7817wu#WW(PN~;65g?NW(qCFk;4__2|th_*j@k?HC)5p|}Mw9mChb zEWj+XcuxXX-x3MoV~{}Ch0c=r9_o3SPM}+!_^iGd)WTS1_#E((;&95uwo-DzU~>MsR_8Wa6lrm1 z5J<@s z?(iP5Xl`$(8)WGXL|3t3T4Z2iW4A`(jk>--=Rp5XcjM4L7^J(0Eb%~P@12t!w2$$ zU2)8@o}IWb(AysCp>?6rh1rA!#@TKRLXs}MO9~c`Z~J@Ng9AxA2eP0f!W}&!_@*!$ zs4pv@J8OcN26QSYIq~-)tRD1A(?s_RTOYB$SjCJTgM)!XbFR(ezKf~hWHSs=P3Vcz zTT&&VSBSbv&k2D-^+TA(z0&h=96w`KfSoZ+*2UcDQb!ny0Mmd=JTS|HQSq<2E#}6g zizZUd73>05Vl}|9Dq^(V39ds_kC+#iu#Tb+Y*S@pM|&xQfJW=y4ukLL;&d1gtK6Y~?@)FEIvn zt&{6dvT0MR+yV29)mqmDauHJ+rc~D`I4rnlwo_vd^bcUpVEP6So{-g#(GPA-X`VY1 ztj9ej3c=56ZfROx8@!;Y1&%9S=~eLXn%1vX?*d*Id8^!wft7UKrhy>(5k~>JsL-*M%NLBWcoc?7SQCYJ zywL;Baqk!0VgBwke=nm(VUEKfA-tel-kxN8im|xvf;kcm%5`q>V#N=VRQO5Uf$Z#n zK>~2Uf0^K)IH@K0|&3p{a zhNDNQA~SmO= zK_ zXTR7~4JBjK&d$Z5h~RE){|>~pu`D2D1#7D=51OFS;PVS&$}QL7MF|E7qHw?IMl+%b z{a|z(8yHt3+ToAmZaTMv9RmzR1v?TQ@CL=p1b?v|>N74KX4ODDgd)2o>|`)H++Rm_ zx~<&?*MLT6P`ndv@6E=@!cl@wJ_i1krI;VQAk2lllVKIv6{?7hZBrYZ>>lXHLI%%U zA9%ntKZlX)IPXB|6pgn(s>Gv7Rif?Zis z99G$>H?3P$+kypWXENn$GRE9Xb8ox^guN~dwros0v61b0deCxpqlpWqmoHQ%aI^tht9I@;3-UkCdW zv7cruEssH z8g?iOE_2c2p+->k8cvN_A;szr;$Z{?sS&ds!1g%OvSKxIm>!2w{MM7Bi^q4YbVlYl@%?A%?FsfWyu)1Q)inRvI5aK9uCTI3F=GZaT zhj}7%YXRbaQ8D3M4a~XB%GE8kE7oD)I5>oPqmm;CgT+zL5G|gBigl3PwVV*e`!Taa zUDPpSi*`Uspn5p2Gf%&{)|U?GkkJ~fPv@+oRgM83~qa9 zVsUN^tqNg_lYWfU(6oUY0uwk;AM;vQF z(bblvMu3nF#iMH~{RN}RNz23*)GMKdgl~$|(9Wn%B%WG;b8v7d4XhO=zQ}D477yr( zScruSAaijiwn7QSnG@ei7XwZ*x;agoBqkP!#kQ`Gx2#wvJ^ zL+C}a+tSlOF(s*WiY7AI3tNcoB$j#1Je^kz^}EX+%)4dW^VMsc0yr~VIV|u1?dYE` z4iY0mh#l||AvO(SOG2AsgNPp#ceR=vw9W#~8C1NDT!UV~&$k zZb?o2SH-M0MO=)A)oa&c&T&sJQr?Oy0@w~ogb&Q_pf_CKph0W~2IvtZaKj)rrX!3P zLipS&U=5IS?#$`LvpJ3y`w6aOSf3Fo=IO8*K&L)Y1U}Lef`*xUCA=w++U0CqR$t3? zpLY%zB4EI{sih4o?gkuu1e;f^4mK}n#@Q=r!vzppVRMrK;lwSmcEm~G=19l1RTQh* z+LcWW%T_lAm#<$NY^-fX+(&&!@pO^{5|MI`3e7xAJ1vY2XygNrfP*rfaa*~C#WKZx zf#{Z2Op3HQIFAv7j%i*C|#_^NcAG#ZDS#5*7;lYqG7Z0(ATteVeTV0X3 ztYqBv$^8fDDSTnr=on2Iw(y91<780{dS5IShg#|5uZ-nT`NYvc02ngR`x6ipRsnJ% zq_Gto_9JE!#Un8Y`_w}OdbA-L&PxLt8OxY0vS?#$JZjhHR^3Gg7RWpjg?kq8$-RA? zK1Ri*TD(MXO3trvaim3Ds&!%*)teLsVl>*Gk{4{guz`mOn0N86PK|kh*cEV+ zq3O~uwtnWKR@o!p)^Pqv4&HOjvAtuzg^FS5E^h*`+r&wP5}U zfebs*P3eIIAqjkWCzq+!KQp|<1L|Ny(@NZtzyZ7=1OXygX?a`~GfiT;X^w!k930^b z4`Q;jB)4=skE=fnb;5^`8MIZ#!zYa`dA1)j6B~5K2E{p+r8LFtFWm6Kt|!gDV2FqVc^d}~ zTr>~9z7Ckj%I48Ts*r`*vL4Yrz3{WX5r+c}FeYx?Aj`EQ9&c)>oR*pPAKOqy5-fA+ zhG$vkN=s(z7dFv_TN&U|hPzJ7S2wO?0#3>*^rXye2yu&&4;gw<05(YdcD-is1m|t; z5{DQx6cJk(ecsYIq26X1n+x~-6ykG`HR>|pQF(?I;NCz@aJPfbNxX{!aF2=A=l=gl zd;cJ-vnxOBJAfplLE4stcG+FD>3EUT>wwfSXw=$8HcdA}x2Ay>G#W;kyA%!7)h@7ZpLirr8N@lwuI3a2J1 zwrVQQ=kqz|eBXH&zWyg&HPiHY_nq(k-h1x(ea?jh0@tLI^$-Y(2?PkuOirygtBRqetj4KP{(Xmq~$B(q=m8 zplM^Aa+1y+oIGmcjGj9e!3=`1^j6fC|gnPRB$<}Gvn#F~0=p`!}}n2fFd z$mq5aIU7VE$daW30u*o$baW&c!_IjXH1e!7Bm&G~mE8K1-cs2{lO7?exR@5FoTm(d z`+$yKR_Qy2S@c0{EZ-xwbqwgB1au!Wm& zOq4+(V?if<_Rujr0J8+~L*d04Vs$mJ8!vCo)Y`VG!Pr#>8j;w_-3E;I42qGNh$`V&-8p(`w2`D#1;ku-#UIxn?nJo&{u~ z9Rukr`~af>dI;@IxI7nIlgLdKDVvLmdCqL!1OdeSBnTr*X7HfT_;wf?Mhl^K%DVdfghBI<;E9Lk>%36@{7~CA1TMMo%>-$m7p!E&ZahJ{9 z3tJ6n3yi4o*ee8Sx&}@RES=W;k;CmaD4g7YUJ4HpVNY<-q!#afV{p8+YfuT_G)Lt` zL{}IKX~{@|<9HGQ1z0X{b|6FmQ;y+0wB&;K#?n$j1a#u-Kyo%%U)k$UEoQuk^-2Sn zKaKZ z0O_U{EK{5YG!o$n=KdVj)@dUl169O;UJsxsm!e)gI(cXvk8R(P0Y|=!5+p{Qpy1wz;LaC zx6-))4KNba5zVGsjkcA$7ksYBAe~1$E_|y?Q=NC`kmB56?@~)zrw?Mu5nVrefQOc? zJB*9dmy5#yYYV%FFeZ49IJc`l^t|9BrnaH)TMJpIFxX{H)>*wI?dqfo3R?RS-aJ~V zszF)#>`w!QoXL^W;AamW0)d+UlmQ6%`FHKvVG+O+^d3-cBV#wVWpq#3tfV>~R^u(O z0jA)zL!PP$aXyT~P!=DN5JAWP4`q|_W3mFHm(bOaAU69p#h<&MB1@0$LEs~gAPD&( z9T*Tg3@xNG8OC#=hCm^u+HThNe4At;+qhl;OlNe#J80??>;)(MHFQ4`MVd> zU9HMQq0tC2sRw{ z-(3J-rPq{lg!v9Q=ce*^nfRbyq))YM`;e)DNqMxzC9fE!wOf+xq`0h0S47<>5Kg^f7sIO$MxvQvNWXRPJ@DsE6kuNGPUY@Ufkf+o(pXRz@Q&tx{7wF&Y?> z(D3R=nwP}1$m9|3(DAlpLDBEtsre~5esFF;#mMu-3eXfLKVdvnn*x;qVvTVp1-80k z3FMJGCnn&Z2NN|16P8FhQ4k4E>5Pl$!SIjpxR?b3M^|l)=ornLk0%`d-I>+fp-*9A z?PG0)!V#8IXD(BNK!4T3fi^WpCIGSj5m=(MT@%yPVmjI*&K7;_=CBs=QMZ{nO27MD z9bKaplzp&@{=8Q~N|+ByjaIh%2e=z#cdA@5bzkZk zV3AEueHN8Tlv}5dqa+Kdj8N5(-h1p&HN0ylLMmf}TPims_d}Q}dd>hg=u^B7tid@F zBM%*tfx|sHmd6nUpbw$7efOw)$2_Z;F?X!o0t^VKAgpCXMN^$uKR7nJZO3+&9(mo? zoR*ev&VP{egJ;TqHC4<=u&XMA=@O94&;nsjAi0vcbW;aqI*}-;^)iF%RERHgrbM)w zDdIYuak98xr+4l@ISuog8$vDy&P0t1_6tusgKxBic(6bb zNID{~H)a6CgWeAh8q*rU3Xx(!ydc`?+SF)I9z|(GuuvHL_>;A;N~OkF*cVbj!ZxNp z2?jMk>5folX0aU5^rLws)X_dvH#MY-kl?YZ7SpHgg4#gKP*Zw?R^PPy>3I~PF&h|B zktul2JpLGQ$QHv-IDIfC_>xvyiPK9JO|}kcNh$|*6}$o*NYoKMCJW^+dlnekV$uU$ zh77@*qx;yA!z!zynMn!((?kLf_9w^`7}=t0w%WF1Pw&vcS9?{@+qv5fohLp4|)=`05=Q&;LM6>)H8+G8wI=aW?xa1@tHtdTiepy%tt!3_De9z%X ziI@YsSmz0B>tMmp`ooarvW`w$wcbRy+cSOqQ-4L~BC`h8&?zqquRXht)Q$?S1&%go zhS*d!^RFE}h9UfrZU#&m5A0pHPBOKZ>f33+;I3Ln@wJW_%ky9B4|5!o0OL6HHnVq7 z0ZPjjwKgOs@d!Fi4#8Y9he>q^r{~Zl`>4_JY-$d;H^@(X1ap{PZ)q(0JKG5RA$1^o zSrljyEV(}-SZx;QGm9OEeM~pXq*uVGtQ{Ivd5qV3JN%($ICsc$SGXOW2}c%AO}7f zI)G|*WgDXpR>IY4&0;&?R%bRix8eZ)@XDWgmRK{3jjmwO8*?(K+nTa0-!0OXKp&YmaSLPCl^o2H)n}Jro@lX*Du2wgrLf;o&zC@wE875&&8j`;g_r^)+F~h_|VQ zsC7Hdz$1A5u@)67Dr0rd4_bVxR)*=3A>VAr7Z#7gs=}_z?o}o@R~m;P)lV_DNAhFA z6Pk=tZlcwe@FnEk>*HCSB%77aDRAE(=NwQ$ExAriA8IlXL8c<#Y zIekHnk*7)(0y~cm6mTJNjq$E}7v-upJvV(%Uh; zYd6Xw$9EyI14S%ye^DbfGY#gMRi)yMAUr@Hhvz)J2t`PB#xh~N_U!qd6$g-fD1iaq z&QjsleiF0jchSQAB7<&Q%%Ukc{Nj0P3W3mISDkcS369!!D+5Oq(X4zTBx_K9pCyJE zL!xA$xKW6$=K6bfBeNH}rMeqeM`+taE%!V(o>ZA@3@4bS#rZ>#^{iDZ&In2bghX=VN1GL&I5lh^-L?y-CR!B0vKfD~+Co+Zhu-Lp*QA{yTO)?;8A1*IZbdv5s8>p) z8Aq16OW)#2q!@H^kc}uH3h86O3y3b6cF59R*gHzBnpeoMmiR}&a^cjaZVS^F?GZpq zlxk#U7Bm5UqplE{!E;a^P@o6jHu#k?uH=tk8kl#brfd0arXJ&Hu*8d=SO`ha0P8Bx zpn#OK+-w(Dc0`Ak5{r|aQ>Bo!4#R}+MsE+&BALP`_681fieUrM^c=dH_*pYP$Kwe< zkjIbtVobNvd2+{^(gxXV@f2}|l& z+nia{gCKp4v@Kbbu}$z=_$eU8a1W;)C6tE|uq%D->8MLp~M!_rK%S-3VOf#&Id z3o{!KzU2{9f+M2noj*{3$xLF8QepG(8h9>z0_;VA^miJ$!7mhIg*wgh!{p93=?XQG zImBY7me>W4J3A0D8G|_nsM=%gEs2QXde9wsI`}H6=GX!n6X9uL@c$c|<{<9HTrV9* z_Curqh(CKP>MG%3a#A_;hB)fTH-2NE`{PMM_;Enz}!k5Pf;~Fk8=wdh1Fo_ zkgg2HYpq|DoKVKwC_bHu)EQT_L=cw&xma}O4TPGI=ECMMm^hmf>1FH$X?l$M8h3*p zDd)QmqxiYxIu+??5&;g)Z6^1um zWZ=A{eLWB4j(ivv~31V z6L%=oz9|*yRF>TbO;{U3T4u=wqyZ{(4W=wAn;^5qkXyh&DpbtF;K`7O$U^byBPG%r zN3>{ZD|d9~jp)V?Ld0N%D zNUc|r2LmLu5U@0`=Ez)G+zQ2Sj{FOnrKuL3nqdS0!p1V$0uSx1JhV2F@&<-38f2)q z)Pemvb&&lGAv5)pEONw)_+avT86O_M&|f!ff)d2lq7x-d!_cu+rpecm%}h%~J}QwS z*nNm~atpiGgli5j9P(4yTSj3a8nTc+Of-_0)yhb*4$|xDbSX4dW2Gux(5&7uDFxGr zHbjWlt$zV4%1^QR1}|}{lq*7`WdK0 zM4;1JTbXAQ`WQ%1T|JO^sJ41MUSIj3N8f9h{xLm&p86~3_UfF>VxiUqGAi%AX8)8Nb8O5gS%d5(njkWdq#&| z2e0Y04(u{xQG}-e_kkJY$1=zWzKWbGx_0bL*vE%XvcmyeJEh`Z<#1z%C55a5gl%-|UP>ONjn8-xWK13x`j~AKEW=5lJCpomjk)n0t7dx|dC``R(+*)pK zoJH1m!&b8{4GS|6_UX%Zo=gJwyi=t@Gj8*b65RIg+jA=1$l5mDiACp&|x3C#t$ zvnzNcwhxX(2Q1ppm6(bYZRS2v4B=Ne zQ)$m(B~0T%`3ej4FcTVXNQs8h#~p%c%4Rd>1cN56xxlBcJ81YijKFX^`M+sr=0k(% zQV05>v(*T%R!QKL^P(+z9&qxpe>@-(kRU6we2gW55VoMQ3|+>M5<)jnSB^BaA7(AP z3(};A=mfVs=_nkc5#Wp0p-LKJP!vIguoRhrqu*RDye@h!$;%|O4~M>HmE7)0 zxPcMOosk=hUObk(N_?suUO@);YPjy8Rhv5k-BED@XxN>sSC$nY0))X3JiT7ISdMxRxN=O8={!SpDCov*#7 zTrQAvB%R7#r}nR{Nu0yeZN}}Le?cNVuf6jSvt6s%sYpqHc^Is;Te&)6N1|g}dO%jJ z-*R7c2te;JI_tavEW5{uS;480j47h9!9g=DggtQ#$yU-$)f}kyutQpVQjwCdu&bzZ z+qvcItsT2t$|^?7Eb|f5zBaDFv<=S;RBpg-KhNNEo~;Fm05z8lwd!&prlKPhV^zB* zfMKU|pQ$5T9v4i`{mz6jViv|e2o>~hEM|cj!%SbIY2B&OW=;wMx=b!Mhk?8~N8trH zY?V_e=#jBoYbYW(P#TJs;2Bi-1fojPn~a#+R?@gZVYIpW+F81hY;<7BnZx{gM(^@4U`jDL%U#9 z2d0I968$4^hEWl>C6t)7$1;`Q7TtVzG7|PvzJW1w2$n_aE%vmUGba*@UlHr^Y(uEn zI{Y~9c&Df{Xd~3?E@3UY+X`TN+&eh&B5kY|%M*;bS?3+}I& zsAbAgzfzD-%|+mPfpCTdR{EppM2XKT)3dM=53I5=JnO)^7WpK=3|PvRGAv;dQASdK zA)_#H?kefn&Np75k@D4%tFkZyF5bxkS1Oe27%8HHXc=s>p*_g*l{byt9X%;kg<_OX zkE%$&Q!?N^W6XhuCTE!Z2GtMj-oPg3UMnQG8C3^*BFLTb;$T^P8@Bdw%@jNfi9Zw| zz{(!aEYw1C36aYIP+{;~T4EzG%7UHq;98X0T^tZ5V}sv%lU`;N8Kb%c1RkCir2wD@ zHw@^cXe$!K{6wl#2&CX?a;(^mm#C^kwjFY3*mM?-LX|qdqVO3S$9B1ukw(ZmAt-{L zTS5nka&p2y;+ggE#c^72BSNdOhMe*rvm?L)vIE1X?G%ViDC+=Mb22+XvQm*^Ru=D} ze;b1acz*_eX}>TQh?U#316C|*=vzBp+g&+##6;{)JrNdo2?U8cCxQcj4CWD>K%dy5 z!STVN(TO)<8sI8H)J{WF^+tbSGT2r`TBs)>bq(AbDgxPz3ew!9#41`!E@G&r3|UdM z#n9wWrBef1u6J0MC^lwqMG)4b0gW$>1Gw&bV48%3_M(_08$eA+6Y?89-Fu@l8b*&` zk{({b4b>*@tsnhvG~dg54}<;a(kf;o&z$Lq>{4{h%R@K;Gs|2ALF>)Q=`wH}C*1-d zWxU`a?m$kX@MDNMfz?r0F~6!hkGPd*;f$z>iZBtHswhmP(?pJ|$Pnqy*eQMem^CX~ zsEAR$cSoKPHmwS1VeG8i70Rat&sqY@8Ki)(>yx5f6Q&&NHFv{lfjqsFkog_g6C>Cv z9^ebn>mt>1KN^71D~!fzdo7tS>o#Z(gWjh4^iBKqtxi9Q@I$x!o>0-6Px%W;5bccwLIvGZ>%IXUA*D{kCElBM8bI z5I0qFtuJ;Mo|dkT9{5;PqEtP)r6?!+%Vyx926O@U9(ShQ*G+w-3zW=O%m|q-jK;HL z8Vu;eIND(*n(788ESg!Hx5Lf~{ebfCLS2<8mQw;uS*rOIGM{ODMHR@*VTG3>H_$@E zXg)%(3R)nb{0$zmgY!7?G6&^}$7f2-i&&Y(p{nH6-hp!K-ApH_OGiMVP!(aKPS2rs zr4z6AJbCH7U23)Bt=b&AczplO%Rwp>$#agU4kK|5VvBJfkm6#U80$qk1Y(1_68XYI z>-wdn0L>^;iHa@M*AAi4MU)IMxB*?9ea49kWIs#00Lmrf%C_e^oNP`Ysp(1-jw(~g z&4Xe-L3nPk3ka05ZyAy#!G76>BxP>O&tuLRdm8MwL-ZNLj)D1c*z`;(c0oP(11SaK z%H}TexTs6YlG`65% zP?*uJrJO{0H$=QtQ9uQJf2qu5Rfu`jPAcXys{tKxs>db$sHpy!rvD6S->x&_VR3N< z8`Hsg9hcikJDNXjdPp!PY2cIr)P!`YaLZ%L&OPX&fm3Kf+>YHTpuIx^v(GZwFJG7$ zw9&iU^gj!Tqi~+m-NOPBr>KQ5wQHQRbUCwY1hiyy_l|5UBbs(t#pQU{cI7&DCQI zkKk9>H=&It;JTrrZq+A;J{?R4X3&y?Iwt+QE{>U2fc2&@4KKar@vv-M+(S-us81*i zf#Hn{o2>H`6RO4skyM3rb96rEWS~#H(3nbEc+Lv z;b)P{Z^Kx^i?WQt(!RhC!LVptPz)+jM#*x+qe$%AHB9M9e?5zx$bdFlOk0ArBl0{i zQ@y`JDIgofNko8$op3xEAh&Sg$?^o!!$`W&`SkYKI4=l%Fabbq-jpiAb+C^a2uIYI zfkVcY?5HZ0(#~7zc@&YKXznT-_vBGzKYj<4VdVqdhM2kF4NfC$U#jW(IvPoXVeIwTLyGH>yLZv;mT`LGc1c$)c9+#SLq4n>*ig zqitFo6b|bDQ`J3*DCrU1|u!PDy&RL3R{gkiv}k1kTCmlPfd#IU`a2u&m$Teip>-!{tLp7>&Yp2=|r)BLj=4B7)aVLot)}|jinfFYD2mjYSL?kNJo3bzPmciXy5$;km1w`>` zUpY}DjK)+dCXJd0*0Xj1QRjD-;DTSmy)C9ef~2(s3Y|GDb)!X<8+-vo59J6is+RJI z(3@`#{ybD-c9^Qn&hJbvf=lE@#d4HO(loT;CA0&G+A4{QZ%iqKSXRcSF z+o*{Y_$sYN>wcnC15heh3D_Ijogp$+`#qRZbRQ`AsF2`JUT?b-l>CcQ|xKS%+VQpT_0g58jvCUTjul_WS(bz^1)}|f;O)x zpQKZ+1IVWR9vEbGhSXM&BPd3V>^pt!EH@8XES7ZdRUNWDER-uk1bcCxsGnzMIC^z7 zda=7H)DiD+lVKp0OVFt)cQljY;y<&tcuOOkrOc;K1qE_vqbIy{S6*#^L#P`dfDk5F z^)^BoUic~5E+rWiiCa-$h>O*X70{@syBM60dVnG*uySB1Sp-UFTk5D@4_;)?!o;;aFW^A6??^0EUMCqDl$u=&YWh;SUyR7wEjMx#!*2!WgN!sUh0s&%5)>IG=I(Rh z%c@Rx`ICRp7>seny7L-KmyI3Dy{5E!`rVCLL~$&SAVd7}Eb7KN>Lk$bVRU=2PN!2Q zc3ABSO(K|&(?u1GN*u`@HjdqAWz3BJ3zaYe5hNeD4UAy3*uehu5YiQEAEA!G=7DYj zH6waYsq!C1Z_q-l6o}M8>w*Dbx}iXd@R=hpczl0_JTM1osqCchl{XA$2Vq$)CIa%_ zo|Hi^bP*T*TDK#nFd%BfIxWf=WPz%>luf53z7)ctNMqt3d((Rn5`4Ufkl6wCbRHV# zC+FEO;6&XWh+#6CAhe&zl+gCT7j_6*}S`PP2$!_hs8{h=LiqiQJ6d!X?6rznXQaj{hDL0Cq$(Y zWOQ9gAQuE(U{zZWjOjwXgf78ZF1A@J1~zU<)NChVU4`s{@+{k2t@R3IGqqM~T3je; zc4+DZ2GKgs&~7+@=FtfWIsy!4Fh}rwMKstV=uJGyGraujH|jaMsD%B;;EADgZi7WO ztaS;QCPL$;Wm%>r>H);==~}ViIF?)9ty;|_3&2Z|E2-BN_``Gibs%~~;povGQH zO;{gV3{c$Zc9l9_`!JEUg@Xd~#(0pwjwn*JipR1YDL2i$fXtzw8PtJnk+O;bNng@;w+RLNt0IfLL!UJwO z<}}JVs~`$q5$x3VRU*FboG`p+`}Q}@U2P<$$hl4z*f*MjQm$ZbxK9@e>S5fW2srMPSVacHGf33{pUxfxeOau) zq&RxS9cnG2WjR!5cs-FA;++!xUmJ>k5L>tJK`3mLee&%d-=k=K$iriK4`4GW<)X(A z-tB7YZEmilH03*z_elX@u3*a8He(F#0j4MJ7z8mQF1pJ_G6bDOV1Fok0+NI!jn<=I%OTXIL>9W}rYa z$_QpU4@j107ol=$nE629BrywyEU?2`mA0Y2e155{7+*LhnYe^`K~jaHi>R&Hiu_1! z*cr4hr?1H`S~1ZSbAuxVJTg2NR5|ItS`FJV*4NpSR5u92t(Y{{TWL?qMTkO^GbSZ_f&W$#f#KP zVZy5_xOFEG-NX@~HRPnA=si>4;DCcsIKX`IPTv_un5dNCCTZT`i}MJb&BY_H8caS; zMVRzBE&#sb2ON#Xj7N$W>YuJiX7|!-yT@AFhm^+~o)9>r=wLT<2DYV}*bH^oQE3;q z&$l)1vS3upi{KC^Z`!OK##*ApZKBXBT&ZxfhEqr8YR41>UxG3XM?2g!@>#<~;KSss zK%AasTv!0GF5HmXss0_e8$ci^a7QR^HnDUMDEPKHSbwxssLgqGmISpU2BhS=cX(B^#~tNjhNc9~^ptC@h~OcxabgZ`UkWAcAC!BXcHXt)Ioqr~t*lfR2ZuTK zI4~@MJ2`+!Awn4*1b5v>%VE0enaoFZ+v_qYn}S=JY{$jzQ19TeB-cR97)e7!3f|~_ zoK04kJ!c+bgwdFt#ul?sVzP1`Eui72$4gU%1hGS;Fcb+z1a07Tj%ssDcYCY!*x3vu z3R^}dFDsSO{jiFn-JqG2Oq{X=UFl4oqJ}UO<3rewy6>QzpRA=esz%T+)&GhJXdYSE zGf;}0^CG5R9`tZWfC+*jXv11|nf(aUd>jpn`~nJSe(0nIt9p>mSq5WlitjZr?6*!lC&8dTpTkvr6C)*x$KWirvRvyONpIx9A(A+iUh*C-E{&ozWPs^g0wUU1f6))-hnC;j(K<-Q)@iMQt1>W;C#9_LvF6e9s zP7J4_81of|Xa?u7uG4C7C6xth_QIx$yw(7`hU`OGh2YG1FKi2|M97A$5|&YY>j~%W zpKuD9BhH{NW78(uvrV9TY;h`p9aUDK>CnV@RAULlLoYLx@A$2)yLRekhVGlLc}FDu z;m3>oW{M=Lm454uEN?BF3`9J$_CcuqHA=j3w+h&n`Y<6&f`&5v_~X02{*67j2&uA` zm`d^X$eOFMY*=z&7LpcP2LukZVrbaZbD?-32Nd7c-7Gw1TsDX|MU2Q?Y`f*?G-b}{ zC%f>_AE@j81hkT&uE3;89Kzh*I~v%s*}%7PgzEHsF=bJlZpp+Pr=bp+e&QLtuC{=( z;hjz#6IrqB1B1IwPUIl*c%-meN9UWa;LlYzwLEU%(>Fd7hiOzl3+%Fm`(9G**hsLq% z;IgxNu-0U+pz+Fy!wRWYcAvc8Wp@+{o?8bg)0YGICU~$oL zh$85)lpbh1mVxHpK{}9+@KzH=N#HwEkB>T=BI3!e0aLKh1tsT{$?6w`FW5ZB!x!Y| zC+1I?5e*)vJP2+x{YAjWj&QnK4qOodQ1}4k_5f#u;}9HPP1)elXjwN^GnS-l!%?8F z&qRh?X$#Rowy5j@GSvhHYztlhZ)NkklGSF7a|912{$G34>7_;;6kKW6(F*d2rP3|< zKT$>qbyj*E(#b6$8SYKqvlIQQt*xA2J%i(l#_zJQ>HJiUGZQ~0H({GnH-3R?ij_p6 zv7KZMt)~vJFI+QfG{9^!YJ8A?9i^`;%^xi}(YvS9xQ3z~yPCY2%F>r|DLX-W@F}`g ztUKIMG*`D8k4|d?k~t0+TVhHMurmb6mcgg44n%M?kcq(&r%t|jS#SjyG`i}3|A7=b z9UB~$rLkbMXtz$Gg8vkJ!WUX&zKpltUqdx2;!1} zUN95hg<`ssfY>qKXY6K^k4*Ir*D%b@UxsPz)idD>@Qu*L9RF>d* zpx!A|7|@FbEz%eqlnXcoEHMiGWEks%VF^bO(1v4#in#Y08{LkJWJX!|HxJ(;!XerT zxt6=TS<9AlJ`KU2>WoLnN0~j~TD8t8V11Lx3pm)k2hFLJlx41@+AGevo>t1SHEl z0`7ktTkp(g#+9i&W?1=lSx%U9daG9gTUAXfD+%q$MbA6)K+x#{58ENOA|c%)h=O>e zUDJd2HAdrZ8@Nnn=NM*!DC(r8q>0IFVv#J%ohGN?mNZq5PF15vPeZesJhPe1&~(jJ zht3nc5$r`QOXsYPEwK+a@e5_(P;?v8{tA~^{MO6>?EQD&;sPi)LqKB zyyrNgc(^|RG^A^Z=Z?^)!>Q?PD(EI9weEGLT3D0x;B>K`3Mi7zg+Motgj~^<;Q&g) zGLwtIw<*$sWIx5IiC3Rd(r6u^+(eEW;wdM16C1y2wND=Ah3d|B44gqNUuKa;gcN;I zDQJa<@`StD)P1WKA5ub;V5|^2R42s}B$j#n6eWk&VN6k#RE7*<8JSuLl}ijk#8Qo8 z6;}$+(JqdANu12kBW=Il97hq~gy@Sj&j`{ma3x`B!2`XpCqp{j!9j5xClZHPCsn~2 z9cdf{bwC^1J}3)ucXiw-#S#R3s(vwuML$tK#3K$emkL9tfz(5nOpyENZT4J57>O(h zJGQp&;2D=i!FUC4)IsVanG0AANriGk7N>2s`RGF9H`NDLAU7G`l)>Ova}Do8B8k<& z!?mRwv2cXU9fcPA*jg(*b7^PXmF@!3#wi#cM#_j8*Zo4AWfj5g*E_*&^aX}@F>VJV zoC1c@hr3Vv8v3_RB%=;yJ248Nx0Z4QN3LfzQfGh-WMYdv*AzzZ+^%}k?%EA2f#!3V z!;F1_JSREG(3S5{{%Bcmru|TL)lEwC!XBi|M|D!WEQ zVLe*k=?9us@{VrCuKV)QYJtcCQCc3J_<$We_B;wJK$}5rs=MBFH}+V!0?*H5f9!P` z*~OYc@u;((I9n`{vhnN<8MJFz#}qRh;XzSL;w!hq~o#Yjz_m@H6$2kstJ51{r3x*QfBEzohJD{I7RAuYjFFC*PV$lq~Q zJURk|nTx`a79w#_=FFiYra{(>v|_~bpbv0yf|SALYSR%UZw)`V`RJb|5ui{sVrihL z2*$dK7d9TwIqv?0x(!2u*>o&6(UGj%k}^8S^jzZw2ak%5d4C836ey#?6?)KJjQUzf z*cuFao#k1$9c1})b|xTz;4gvW8k!}^3hcCV*`(!!f&Xp=FBwKMStn}~8mad-;ZgDY zDPxZ&VQfcSOK}s<9tj0nrXHvhch5jUK>v6sp@(6ETI7K05?d*gE5HjYBg@2a97An% z-Kv}2d6By+pQ%m;5u?+NcfIgJ8VEVNMUhcjIQg(|V711onN#5n(RO=JPv?HDjEtvt zY6e6vz~C9_NdD}cz}y^Rcf}k@gp=^XrnXI@fe+r!RwAw?J#moE4_W_U`*Pc0vc^_X z9`PFZxDvE+iN}tedyq$ibP;V;9f2e71VOqt7ky!1Wm&uq!kbt^Pzk$kl+)OqV1NJ-{z$la`T` z*AwI?bV??7o1f94>G~gVXr!(n0a#O-hR=Xh2LfOwqH%ASU~*53;gj58g}-Q*aGxjY z$?LW^ILvHTKkYs^wdWEF=Q>a%L1})Es`-g@q>yvMm@O=;V85m{GM*yqfLHj?2=OSC zoLxAg$iWYPiqs&`8JIXP66YnpbpfCkGJ}=oH$6GLh(5%1LmU1 z^(n@3;$j#Ri764f7T0>x9AkVT2;i|*{)jH-Ht!zIeqN*yv%%|H9_a`yBx;?xQzsHU zF!MzSLh3P05NC|af>)JXEOpDd`lNf<{)CoH6-JVxw9)5>CfOkhVn@k4lzv?*5xFaM z8o1OC(wU`THKRcm9dJuOG&8<#>+}qB!`Z|M!j9Xg5UH?25MbBgso?Qq9jB=;EJId* z6E*C^W=tdR(wCFE0ym-ZgmCLUWp)6pQM>~9lNBR%c^VF07>QrW! zPYYyf*Xb}GPZomIPF{LQYYrW2VD3zR6B;9<=+vCqRgF|Hj^RX-CDZN^NHw^GNyoC* zoM}VpXWa{32o{WZkwnBT%!$`_X6mI5C_dVQRtTN!P-OQaB@@|5@K+(r!xveeIJc4` zYTLPwnGP+cn1wS`_BtGAAb{k0eQmcHzPr&$WUHFV(LF`c0gg(icjVxTmZ9$9BWz>)PB}0I zk8#+RknCpRR!ntM(qGhcLMfL3RWEt(cnVT?Hla#-F;Qw}6hd*-bgKyy4%vo#4h$?J zzKpa{!+4=qgNd+2Y`1GQ)^_vI?6LiFK;q7V=Pxc$&ldCzqe6p8Ko3xRO_r+u!zh1BlZ z!w7{^kof^krI%QD1Vw_ks5zp#Y0#oWbkD-|rt?9MgvEA< z`MrJ-j;HY?=Ymvr70KBgF>ToXNXKFxEt4fgU^wKECQy$}u$vl-T|xP8%~vfdi%f8M z>I{SDIwP!iP|Se7IJm()t&+=!A{p13jp8sV(<_`j;Gyqa%*pUTx1l^VhIYoVjhGKrFS@uNNewS zL&&ZzIt1@XY90Wa9T#wklyRxE`)}LGT!kSjT@i6jdm1P1Y7G4}%z8hHUbqXW*+c{r zNk2*s6laFv1oG6qc8uM~4#j3c3L}%R)uLIg^mA#Un5t5i#PX#>!RUqBPH)AQoWhf` zPPWs=G_zjGV(zq)sFTC9%S%GV+DmnLHd%QxIb|;uW#kMxrX0(pDM;eU`F>h$(GV)0 zMIr%?T*rc!0g8i!P&%S*vjd6-;}VLFjK0`9GtyZ}%QJu&iX7bV1|zy@XG>X;bdQUt!cMnH4(md&vvnC=+(fAg zDCFwsa#lPRS|_KAV~d~xI5@1lmh$L845~!#kl)5vH}reG1rM*?n1 zom6GO>=)_&vWP)mu2jJG?l{o>2(iM}&U2haOSe+N)7wnmRAd&MY*M#VGA$eaJSMpq zuVlAqJqI=xRpa%Q|6>EFUo}HAt+3AW*>shG0)`M|#xsgG8z-+Y6AqPKgBe;os&e1L%-TaMBBiRRM0I~!xtSohw zBryFBZ)ke0v4lDriwpCBf_n|mJx`P=zvPh&($iUwiWnvdis_-UkAgQ76Q(Fl50q!P zQ&k>iE^`LpaHO`(b%O&{Bm*nU*_F`}6ZarkBlaYpv`IiW8!TLftw*VGYjmd)fcy>? zCL+_e$KHEC-MY;b?|(6s4GhY8gk+6Qv6BTewfP#nb;b2V8DhHT&3hJ^_Lq!RFOc>F zeb@xC#pB!qfKoZ@_F%zBkjd+;Ym+a8(YVueM}(dk&VZP&P^-@QN)r_d$!{ORk^0XuQrMSn;#LL z0Lf$Smf{%F8^N~`uY!)qdK|mog00i>P(>VMM?&7QgAto2k{|2BO)z>@@le}3)$+UW zXoc)521y0PLc!eG}6h?VH44J-NFIA z#=4%=7LB#{hoy-RSYZxd7|2Uz1v>Df1=_4Gy<^;xsz*nibzKH_jhaf?IRt*xo6EDM zvx^c>lTeXE@4Ba*M@m%jB+ zE9gbBFiBskoijR3q=$t@4pW9X?Ss2$j6?lpAcIbBhE8|`E#jq}@&UP^CFc!WI3>|Y z1SL!s^|$u|UxnV!(hJbE8TRzAD4a_#qr+91n7u;^qR>|au41(Yx-6m&O?IVRy)pQ@ z_FD?>mqh7nn+jF*Ig7w^>3t@cQ*4u#2{$Xjk^8{NnpnF9JuZR4pt#PA4@l z2^dN_Z+DwA*>xuCUR9lq0wI{8Cd!5f5BWmi8+5g*xqvGlBBmGcYC6}AO?PVbs5n`H zt}9cxLy$=gJk}sy?iX8rLtqLkyxE9#z#Tzl&CE+tGHdHK54+UNeWjcx;$rM@u5=BY z8fRnp2Xs<|1hJs3@_MbBBW8_6BTY;G zU0|xJ^6Bvs)Ph*8M#KnDbE2;Qbk@~^5^(qGmLKa3``XYDCXHNF#0MAy)h*%7eX=(D zRCBQOa#G6grt^ba3yec{3!40};aUttKCzNk8KaCptTf+1sSB)Vt+QG%${Y}8s@fGZ=2y0u zG^1~HJn}B+Bj7@??CtV-%P0-=8aXR!|LX zfpN;nAhIkU_D*BCoI$_^hyXDe8ZB&_+#27G!msghtTHJYX3+lDdPEtc2FY}4xmlDk zC8Fhiclatul6t4bfmjWTM;SeZ>@i22Unxk-9VbM(pQYB}0Kr<5S<0>)RA*=-dADci zGtXUfz_?R5byEJCm9TaCJzJK56wI9)T0^M0VnY4k5a3XxKr!?vS2!$OQ7M-Sow>?P zKgfcb$+$BE@rXT$N3anw8ofX*!B!kNqU)>ao1)6jHS8!VhZu2!CD}0wwS1JIPG(SN z)bmIzPH9WRiI2VM?0#}Q`0ne_enG~#63ASjD0$wE2_YQ|p#b`=S^W@s6a|;npW{1m z4~rNrlSMH11FwWDhMgbXLC=n&CIw(xbGcAk$L43K_QR?mnGf0^f?9ZOX5bpF(rYxs z`>fT%N3l~pA?{aaQvv1ey9}~(LOr%nB|*&j)*#Dav@>D4S45eN!*(wWV{(UC!Oe(^+O>K*{W${?QxXB~_a z%fa(N2CJinG-T?GsauF~3ebEU5K)MkHO}9Y>7vYOjKnP`d z^3%w3gC_ZOaZ97e^W8az_5w=CfMZY!1$+SZ0(QTEh5KPM7&%}ul$M5E47k;pPiQxB z!(%{-fQuS;is}0>7nr-%ISc3?#Yzq29U*YV!SeQriFa;>7gr{mmJY!(1-E8!{KYq* z1Ys(0iKK`S)5%yTyJNUI@*SPcXpa=$Lr_m$DluPVUa;wUO1l7uvUUUq>YNe783K3%wy`05|ZR)lzwH|h2|~t ze%56Ak;GOlN~H#a6KB?!2mbaKHl5Ic)fEnb|zAXM6;xE z6x4b|NiHH*B;`V= z`8rH2QUD(6p|Mq-RJ;syfkVi8o_SksA6PsE!w%Ux;Q^KGr?L#CiaMgH4(bGsUC?W& zpQbINoN^$yHf}UGQKNpFW_PiW+}DF?BVaPHTdJ071&@$sp$bB8Q}QC;Lwm1G{Agns z>Bn${L>{OK88C5PQYSWL50f|3eNk#bEr6mGRPvD{!OFA!^VQoaZB6z*<--ho9W<(; zW0PV$%1C33i)os_MQzkWz?(PA9Yvjqn`_j`fSrsAMMSX&UX&9|8!=ke^|s7DLie1v z?cNd48(WaTDuMj~1&Rd%xLiR_apirmKb2D*)hh(4VGum;2hgThY?Y4?q+jAG3C7ZB zmWm)RPNkR5rSX}P4Z^hmdOwIHYzFA2K?-PFUz0i;$H4U=f@q)SZHBy`jV+9vLCrB| z5R9BH`@)S0{|6e}GgTb1Px_s^WwVHulqum!j-yCsgHqj+`7X5_ScbfUMM5q99@EPOe(u;0ZhdNtO(K$vfPAh z@6BKkDVpA#>~X=tuvS1htAkMy9c`mLNswaa+zB0ZgmEXR1y>aZ zFkw_mxfc+)8%!25Eg3LB=+f}qiXJc_PaCp@36FaxrluRU5b$Tb6x@LC#WD<6S3NKk z2Sh!f(#$s?a5~9*8y4ELg=W^asNSPM6AAwM^XxF6NhC1R`s6&&64?!gTHjopHopzBy zURqN$`dgsY6HGYf=e25u6U0da27(9M>-mh9JK@B~936{$RWeExShvm$-1S#l)d6dE zYG!H3bZs2IcvNSdSwe0#dNQJXFA9pN9)(*|<>Zx?-Q@ZLSBItRs6B-_p{T^nXZ3a4 z)*a{oYrS|T+lMCc=!0N)Zc2n=NN=c~ZKr|`J#tD<-N0FsdT{ut=O)nefqso9(y6?F z#!kYA#PxtP0|%(SMU>|hph6#u0(RVjXyqngYROHE^q*m6ubpt&C*#>j>pKTe9K+Uy zs~-|!a++Ze9l@k69D%zEHLeV)A-@K?hqN*zvp{5!({UT-c;gs~xN2<{Oz9L<5qf82 zc6+K^v{fU)Ni7SJL*ayg7#K_3BRLI+0n$*=JFH;T+M}4YvT#(sqf!2n*)JMt~A#S++2xVU8j|{E0d9=(W&j?0mxj`cOrnPn*pRl zM`{$t$ospww3vZ{*&kwa7 zG(cnQ->goCiQuBKj0o(4?xL*fzOQwWgUu5X8c{0u&{2G`lZ%@1?B@Hsh~18M_+3IR z>b7N}h)ks9QzV(&6=@m9o8?1FVJ~8w`kcT@?Kwg$Bp zPBk0+ix(>Tk))eSO|;2%7r>T_7DE7^U3JwcK$wRE>XH4n?rnPY!B&%MRrCz15V1KAARKIl z8dR&i-Vw>MERLwX-$}|tmu0h<6X+j<)dKNxHM~D3-`EH~ZYGfj1zIY!nIj}n=6GXG zcotcN+6kwrdS6jGty{8gD)0L$Pq^GjJkXI5iMz?=99~$zVW95mS9#I{!|cgjKg=yvVk#=Y^aLp4ff2YJ;EE^%YWN-(Hh zD1P7erh2vI8c>Nj90C{Xa0$JwOkq}SNK5J@^XlFdU4MZ)HHNUaFr1IIr@_6HqK-l} zHkhQ8(AD%6x@aRP+||1Sm%4#8j4M$j*h{yOn2JjnY2U+RY(;qXZ)C^#$|IW@C2SB@ z=4oJbcxamvFc@FtoiV&B&b;nkeyq%3EiaI$7ors7aMRD6ilm^3G#&Pa4&cIOlry-C ze(&HyFS6@KcXXmf*n7IW@n)!5v+N?(WYCitHZNA$C|Yiapl+Ouh2!F^ot|b3ClE?3 zFHBpQS^omq1}H166;PIrj8YlNv>IU{s8)cUF=!PEV40@}E(^u+K!57z-aL0g9=I!;JX zfDwRgCTMUF0BQZ8c~K*>R&BKyxZ$Z_ zeP&V&$yK)VgWf7faEK;?2gwXwIMAan|frl ze!)(uEV_t~d(^>t1%Y!&3X96f7Q$)G!-Xr7!~aNH(dJ?!;VeCXaGhj9y<+BbK>|CX z#_AS^B|j-=AZU&L_i)F{R3tTn5~g#rN(LWcKZ*b(BFRy)>P+S`7Q%)G)->EsDH*;k zE)0z@%uR+k5>jRPHqg4w3vJ_(Lt~Y5y z@KQZ#Tx1;5^kLR03QlhxaMy<;u5+ul4GsNzZ{M~Zdw#9=%U|61#r3@#`q#hO|LXew z%6?Yh*T2TkOVzT)Us>^QRVy7Hzi#?J#sc8KuPn8H41Q|-$DjDg#|J<8`N8jh^amdq z`r)$gEx+`!CI9Uw{_Icx=nwwzr}u$!%gbY*xc}2X{DVLG(?7#sgD>lg!v(&}O9J1% zAFuey%f$D?k6!-B@b^A(>EqvD{)3PGXxZ;BU9t;U|M*Y-=z$|9s@Ve1{g+BSTljV2 zdX2b<=e6Hk($zfO=E$yvP3c;HNhKc==C0hIw!K z-bXKe>8f4}#~%YL$S3*P&COD?_iEqqan=galnbNlP} zEZ2VvH()wFcnep&ocI0uxiRk{&YP3|;SxSQcF!kJ?*EgEUz)BXSX<2FqW?YkDbdl8=;%KH5n;~!DaT)W(fC$pe7T-i>+!KaLwUcop!r;u z`}_ZwUdnTGtzP$-kIo(U_f4!;%^}M7=>3SjNQZ9?aj$r0ezyp=B zF#W2egDa~8&(oI%fBc!Be0p%j=P$mr^?N;+e(w99`oSlExZ?85Kl;S)e*E{Azw@yf z;QQIbE|&cKIp0^$t34+rWgGzt(>^iho8{DpND_40sfZ& zf2p!hImF4l`ijOsKhIwWd`X&r@XzfIkH14t+3)bZ{tBUQoObxrkK!Nr3H{-B@NeS3 zyIkPvvHhxk&*9fUZh$Kezvl39d+{ph>Yq6LtiRBGAOD`i_pUI&9f$vK4)67)2)X!w zJN*2oY+%giWh@Qn+5S0$hur$S!!J8L3?E?C|rw1`odaXAWQV0~q}B|8n@nbv8cu;YXmi@_lcvH+b;3pLh7) z9R?3R)gR+`89eBOe=V(?sO%&C-^l5C_yq90l*a#}f9HV1d;M?UhU$dF2ORF(T>TA) z2Y(6pMTgH6c>ZIDpLKYg*#Fw$K{vnPpZ{Zr2Ysw^_{xdyySrvcB?;Ae8$G;KqpZfUN z*MR>o4(~0-{~r$TE8rhEyuX0|zYZU8c+B_@@ej^F^s-o=PdfZ-K0e^T?C`%@z<+rqB_`mD$Hw*Yb z@OArE0e{EG?{j$U*MI5onPU7ua`>#n@uzX!;grI~yNC*a9$`zZ9_6;SnFvh#z&`>0_M&zB)du))G{DCj;QJfkM;qY3*#N)T0RQ_9 z@ZWEM{|s=_&s}FUJ$``yykY$R(*XY%RJ|9i+b;r6{15gReU3W?f1zRg*BanMfPWe% zz}079^q;z>bq(w0j#%bm?sP`rbM4R8EOy6Q&0D|oTLT0AueQbz^54_mH8i2}3xpsJ zoU|AVvJc^ZXZcE9C7_ODOwmdpPd4$qMQ`ef$X)lB2u~oC^4sTrk*b0P2+O6f)fX|; zh;ouaVEq(ZdM*x`9y;oeGqhDHEw!U2}09tp4wUYmW4l`J|Jc#LI5dn6HA2m}Amveeug* zS-)X@*PmY<$bW8F-}UGESGxY(@ak8(25;#4bp1g0pBuUd_ji4|;mfafq1xE}=PO;` zUH_G?@2-Ef>(5u#zmieCvYzkjIeE&a<=R=1dpsc1@s7M|h8pUO{Di8%K#mv-?1eNYv^92H+w|>xDCpO3fsaN5ic$p5O zN=k|9&~KeyhxCJ^3rDb>77INvbHv&jcR_TeRMAL<%)$a$b9Q4!=kpFX@kkd^$nEx} z4pS&Uso8>kkn*=xRLeXc5JB)OB?-mG=>tNFepgnCfe+$ao)E;l42?s?2mJE9>L@%w z-St7vAAey{5x*`f!-b=E%}dQo4jt-n4=2Q6GxcV~!$=D?nW_js7#2S0l)gGJO3K7R zK~}m1j}NQ6oE5F?RCZ(cQCOK%T4Qf{;@@Tn7Hz^``~=jVqJyO|RC3DBJu1~57q6d% zpoMB)|2*)2{Yn9U;_%NE@X#kp_<#%W5>7t{e@ggu*fIPmpZmVUInQAmqW{y5lo`8=v z;F(Hz{GY+qP*JsVc_J3Qzl;2Rt8>~(m#Zf_O% zA36T10)N0SG~mCK#^?RIoyMPV-28RV;qhLfVAHPRPrO&aA0#~a96c=XJkqzT>T!W5 z;7=OxRIoGn6Z2WLKdWU9kNE_=*Wu-Ut#Np{&KDZSUvhXn_o+Ykvcu!K0e`0f&lQK4 z&kYxP;1B+|4E7Cw2=B9h>i??~+(}jNH4f)|^7y_4AI8YQ-|z5pJ_Bid#=qI&T+jJ5 zpNR%M=N-=ZJL}cAE;{_@3-~pMbN+e!^5yohavxVE_(GabufvHa&wq`>%lEzD@L2!w zFJDS{xNZTz?C^3v?>M}CuXhvvzBJFP2~PZdm@j{>IlSD*n+cxB-*R|4pT`M*UWX?R zFW2E|!k@=KOZfA?PkG3L&&}(9!Qmy{UQF;j|4R-p-}g#_=kf14ynNr=34fmdU5A(N zdoSV1@AaTz{8|qUl<(D_;GAciuZ<2b-)nP%=kdc1FW>8}gg?L6RKk#J zhTm{_xsSKf_>BLy!^`!2l*VWLJswvr$G_!pJ~zvqeGV_zc`CuVZgE~_9A2*TLW1Y< ziw-Z>`JIG6zwZ@?m-D}x@aOT@6aGwBD?9{KuJcBRm+w1};CcR=9A3WfNP_3_V-7Fh zcQN75^FQP8@_o-G{CWJvgg?LUhY5cl8C(2#K#T92=ef+`<$Luccpksf;pKa+P5AS3 z2NIqPA4%i$drdgJT!(!Q=X3M>E;Nk4n($}2cFo~@-weO*@KTOEOL({r!Dp6xAdq-6 zyvO0?`t+vp`F+o_8DYJV|&mJ-nabd3~NH{CWI`37*Fz2%w*G zJ$oHq&cDy$<@@$KynL^>68@~`TuJ!zJl{?5JkP5Me;$7$!Snc=4lm#9PQt&;US0pc zpYUY(1BaLI+v5oxTpvDn2EX~U(&52R0^aNJay}CYPk!!H!js`M4ln0(CE?+G&iZ`b zO?Wc=s>93qEdQ)tLv~Ys?h1#O&t2v4a^KfDocK=}O8vi`@aKJ8NN~2D^dHmgk|8#nczIeA)?5hQE`>6aPN<55AkmXZTfzm(RVH#%KKZ3;f}Ke2~Tyf50C#;D1u! zx#{zKzrYjl<(^tl&U3B9YCbKCKZ6nFwY-hgMK!1KuQ>?`mD ze5wJ@Y=I}@2kin+z!w|vTrTiD^Uc3f;0gHE20S;?_)MR-3;gHZ-+CvF=l%x#ZUg>@ z1)l4U=TU(t;Ex;d^sF+X4|-VTcvd<*=po>%9A45@Z-OtTbF|jsfq&fhx8LD`Kj0e^ zp3L6{5_~b?A5QRv1RryFJh#`MJMQp!ZonrJp8VXs37+}JRD$Q{&Lnsq-*$M+=b7`v zg#>p}(_1V$JmwkW&m{bLo@Wz0Kleg{=XqXC@I3yq!};7ipQ{d!`QP*TUrXajw*kMN z@aK8nNbtq9U$+xH&+|@#=kf0)c$TM69bWR!6~AZ?i}^=>dXK})_g$Ibe6JY4%Hhw^ ze}R9qFWwr5m-Fc>@W=R#4fqEfUh?@VhsS&E_2369&wbC~@m|;c!~1DGpBwN84lnoR1BaK-jnvI@-{10-&JsT5 z@Dk5ihsQi0_&m=gJe+61Z#cZ1=gkKED?C*-@DDhD?r}KhN&Ep{>F^T&sshhm$FsV? z6Y$;!JZlR)PaV%dg8LF+R+wADpW!2Ee3p;nX?%uHBskwUo;#cHIE&YF7aU%$!(xJe zM2 z$|c>d^wi}N-tX|3&uyR2Mu(UDY9Qg^`o#FX4lmdFtpb14kL@e)1pI7*XF9pz@bcW< zZ5ZG4d0UituZX{{baf!^`=Mr}3F?Z#q2YbKckaRvORs4ESw_ zm-Bg&#^?EbSm1Aa9Jl%vTZeexfG=}+iGOn%pYcyLjGuLQyw_fTZad-Odj))<0na-H zo*u{ZZhA$iv@jCxu#_=z6c&u~4mpi;%=bi%3 zh`;a30#CqKHQ-sD#^?Q7lkjKwri8~|Q3NvFfM;(5{H+H3ZHJfV;+n&`4p~pTp74-P z&igvtba9wxDGM?vct>yTq*E}+<&*g6Yy&dcy1JUMtq((3p@e8 z-GJwAiO2Wxy%LYZ?>FFi~(l~E(RPP_(P6ta(L`}z&AJG z-&>52^Zr)D_^AZ{>o#TmedVwe4HyZHVD)6lG_qtu+3HY4`Ja-d3^UwPUp8XpS6FkeuM-Gp5zU=dP z?C_w6fImri@;Q21;AuOaX9b>sf7pO08UXRROA|fxtg$}`&*!DD0lv}U@m|;c{0^k? z!$2AEO%5;VXRN?;&+$wYcmh7vfM>SA6OA<%3p@co+koeG8ow;9&mD)y`;L2l(%m$E z7~=ze-{Ix^K1}16CHzkt;A_5MgW|b;o^R3T@SvZ7uXT9&-2OB^KX+q-XL`8i@OW$@gv~JQ@G31Rut$1fDw%FX#E5!{fO#{=WALJOO{ufag(x=e*;2T;K`#`we(L zDDYf$JkJU|0k8hD?N|9;%N-u?b=UE%aCq!vz*jclSzX|HB;mP*Pt%mWB8{khI9_xA0`NsQcJn1dq&m3Ov%ZF)vp8v{! z$M&(L^HmOy=brWayk3XLJ_fws;pKBTHQ-+;@ZWa)iv|9GpJ~8BfUw+cL!& z9{U*Z)ebNBam?YRem1e9L{ylH{cf?UOxBT0?)YPxmMr_`1J-nH`Dk$|Mv>~k>7kjjpsZA z{-6Q>;{wkE&x?Ih;0gHq4R}`n72Drfx2KM$*Wq!F0=_1}^Lwo=@I>Bizr)LQ-std> zt_Bi*u0!D2+kodn8lUHLF~KvQOAUB#I6T&2xv#^`0#CqiHQ>2d;E83f793b zY#LAe0l(OQ|4JI4@n0?QN1pn%G@keaexm{ZtpZQH@0|iqz~5`YbHBhd^KskP2L+yh zKWxDBw7_%G@jNT=1iWXhJ*V84)eevSeX!id^*TJxd%)K;;OQ&yR6d{n0#CpPit+s~ z+jBP;;{!hI@N)iR1)i&pXQIFp@VyOq_7!-pI33Oucmh7#fahGolj-n6!js__)A)RT z?>M~FS06gOJlBsJ@b|2)c!5+3a}MIJ}%^Ux7cyZ*0K7 zsldO_@oz5h1bn0c&v=37tmBy|@C5v=20T**o-2-Lroa>Mb_1Tp0?%#7bEd!(@N*4# zt|dI#FM2(}$;Tc!{u>E@9)Bmn^Y{-OUhaGK#SZ;s`dsF4(ocr>r18W*@M-)0sszvU zzdGT`<9i)m()obHInUFETK}I&@a$*X=kTEaai7mr0iSXBjKkwx#Q1grkMRo*FV}6+ z;pP0_Z5V$&;m`Z^$l)>no*sMYCuuy_E#U7r;IF=9-wQl_j%T^U<9!3Z!r|q6tt#+D z+_pF2$@H)$!8y+uzd7O0e%FNr&--{L!E+q#io@f*F8h1E>+pE5fL~2`GXCohFZb)c zH2#z=q5gm0;qlz-{@e!+kLL#bVZxK2`#8b#Iy`ZBIiC;H_)P!H`n&fx>W)@8JmwSd zl@2fWcXfj2`Sca|m-~6?FYpI^BH?MLb(>1?>{oy4@bZ1D_4Z}X^JK!a+~KkQBR%$E zkHh1A1HLlh$@A$e@U$IIe}O098yoP9CwN}By$&zmYc`F~`*$eh~4;@~v!-@?yi1W;N`WoN^ z4lnVHr15#4=Mp^Qf42co^@`1>#NX@ia-Itg=lW;9ce!Ewg9i9RhjZO>{@XK$m-89e z_~Lcj*8soL0DsZ|ufF_Z{JjnE%?UcT3G1AL|dKI`!E z{N8SWKXQ0^u9ttcd%w(@L&J5eYm;6AMoLXC+jm~X?%XK@dE!@$3KzAbKL^Iw-_J(hqnrN_y=YR zJTbmqz+?OwhnMSfHo?!N^*Nv53kiNL;m_~8oG*i)*sqb#*xx-4kNpbxN{5&8S>^EZ zT&ykdM}2aCfj{6I8}N^%@yl$A`v17YOTBTz;qhKkFTFS6;Xebu;PCRj&ZP0n(sR!` zJn-*zIzN}j^Pd5~=aK4l*TVh z>$BP6<$6vvjGu9M%qRM-%%<^t^?)xpynNp?4lkd3rNBS#{QTVlf55Lc;J?;@|8^RG zHm$>Z4v+WhS!EyIcX+IGz#llg+^-J{JpGQRdd=_!o`COlc)33N93Jzj9M4pNC*U&; zcxKc1yzlQ6_^&F@MY&wUK|yAAm77kKVDo`(gVfIn)$^L~Nn+2?FNPYXN&{~*Eh zdp&Ew|DnT6dRx2Ao)hcbfNU&9VB@$W0}M_-Sb0)N0~8}PRq@LwqK z5BU5q75D>wxdHz>4fwA%!0$Oc*6o?=5BD7&>lW|_4lmd3QGut|`SX(kPr#ox;HgHs z_wj+#&oYO{d;-4Q;pKc*6nLJxzon91O5*h@K;~&J}--of4RfsyaarO!^{2c zad^2t8w>m+zWxIR{(x_4z`wb`6aBwN3OoTHYrr$^@N%Au1^)9czs?l+1Aevv|M>z> z@Y@Roo`7F$z;mg@<8*bo#N+UH8t`0kc=^5$3;b97eIFP21O9#k{uQqq{gm{ux&c1y z@Zcx0?;{QmdJFhi1D>f8&o9_KW=cE`pKZW%w!m}S&{XFOJORJZfajva%XPj|;J@ei zuNL?Neysuj^#=TR3jF&*E*JO%ey;)l{RaF`3jERU^8EsTz&~if|6zgWs?RenD35&) z__8rusFJQ$IXvhm`mC*Xc;E?mZv&pb0#Ec=TU+1>_{Ii2n+iPloZdDUcmh7sfak3O z&lTsx`wBb(pK8D}lg4K`IP36|KHqV8tmlmLfh!3QAMg(v@K@W7K4aZ(`hG2Qc+g?Mmpi;% zw-sr8-ml&Q|7~A~zBHcu67c>8{2Lu!uEV|pfAHI>0)N048}Oek@I)Wga|ND&Uu?j0 zslXHad%3_9@OK*UTy=Q)zIO}!vA_2U`~iQ^fd63w{uMjA>0!j_s>k6$4*_58@RA-j z7I+36&!z%Tz=s>~%p^RSu4WUS3|~m&bKcR}G(N*GI=o!xXK8%Ke|@K|57!~XA2^)r z@HcFT{{OIH{L?i4KTP94aCn@@NA4&8FyR@-_<&dA_T_T@mpi@D#3{j$ybtpZQL&okl>4H-7Y)4eBYZ6kN53cZC|?O z@OZC)-%j}33IAP(m-wGJocNcf@$V-%_iMzT`_$p_+<<@J@X`aoz z^QQBws}7I#4EVK#r=9TJOn5Rszm@Q0`27a>gM=sZfyWKwpE$gv&kq{LKTGh8fB9~E z8NP3x=ZXZ+<5wqm9>2B$K9JxU&zQqw{Rcj8^O#8EhXD%sTMjSjc_xj|^O<#cxju_& ze4fwQ1kZRbBzPWwF~RfrD-H1L4e(nDp7Gyzc)30g()heS4;@~v&xZ+5o@X`j;(cH4 zaN^15Wx(N_PsX#U0nbFj^Ed5L`u|jdpG)xB1piwJ-gY>jy9Ds3AGHq`3i#dS245`T z*FSFXGX?zirwx9#fRBI1;O7eX;#z~BFW{kXTqxi-*W37u4(IvG^S@NUWB!*5c+CHu z0v_|fQov*W?-uZw|J4E>^S@TWWB%72PI~xldnNtKjF#r_CXq-;m;iY9Q`Le=YfB-&uQ5n`v>K0hA($G@%$Yh%U>%K{C5((&*8BS z4}2ZgIy~e^!21)PEJp?sJfD}51kdMXJi+sMnQ(Y{UiKF7ptrXQc+lIv0v_}>RltMZ zW(s)F+iU?3dTST(ptl8w$9W0(VgV06aHfFAdz~%d@m}W&c)Zv70v_*mp@7GGT`b`7 zUY8tRo|kJ54?213baEr%A^ivZX2O%{i%7=l(hyqr(3!#V%V|6QCscdz&6V!ZzuX$5uO;De9YCvL{o z_Y?=*+1_(~5kogF?TgF)pmP2X8{m%|9`6-(f)1`;D%R7*cC`fXgE0udV?7D~HvaxQ zo9sgu&l*qo>FWmnoc*fd7yWNf_Yr&su+6?cUr6H*`@i`s)<2&6IT9&;hU{03fB1U_ zh;@$f-+0U5{;MAUzkbZ%oHKu7{LQ~^f1kErHT<`J-vDO{`2TR$03m~FJg*r1KPtwr z`=kMWuYiyJ0|Q(s;Nvc2{;L9h>o*PX4-5D|{FDLyaRL9A=L~SSfFJh_{DTsH-vED7 z!0-HR1N?ab|DWD9z;@6Fe_|cJ`L_N2tpff({!@du3i#FEGWfR(_)mPECkyz@cWr#! z&lb=9Ip-sPw;2CdeBpmk!2i2jhUdR2;G=IC{8kC~_|QKq;Gh5dHvXR%@IUke^rr=U z+Z`MKe-`lH_V@aW0^T!iO7Vy7!&&D4p;3L0l@c)miy9|@!irO`dyUXD2 z?l4Gj5AM$3PH>mO-Q8_)cX!vpEd-YU!4m>WfOF3Gu63^Kd-&7TJ*!t$@4ahFb$4}F zxX&N@!|$C^{787F7V;_ZOI9!Q;RmfhSqUF)9nuzf+WgADA0Dz_ehQw*<`q}q&usf1 z-0ySx0v;*4@_&SX?JWNW-?LgCCA=QJ{d`TP?PT!z%jKEj_t(jb!acqsJl`e7*M?Uq zEpHBgVjX8E_y{Y{A@JJP-;RghT%`PS;04pjSHOM0o8cF%9o~koj;1_M;hyI`Jg;59 zN)SQM^YTAhQQN8Ehlk6v!#8h{2g0kSl2?VV4wU=v-uQm!FO;`JydVEB@HQD0KM?+{ zihK7KH#kKOof-rAzujhJZs>d zXD2*HBjq^>-)!}G9v;cYg)8u@&6VdNyn0Ug7r2*O1e=(8Jsz`(SR8m_>mQQCw_877 z2tKul_FEcWtE;>Y{97-15ZueNGu+E_41A#-=M1=?rz_zVvuMBj;5BT*dkUUskK(Vw z>nxVvhx_rrg8T9R4S!Nnd16J@qt{DQTOTHcuic@z0`O^lCyOJm55F~4 zJ{5j>ntTQPVqW=Xy7gBl;P>__J{11d&fj0*B`zrb1>D>7C-`|AXJbUs^SnGW**KUK z?)fvpONG<(^TWTKlb3?OJu0sT_v35~|C&kh?crxu%X`D`?UYY}Pt71-2v1?>#aj4n zD~Db1UF($RIDE!s`DOU$neyM@3vGS(3ZAio;{S$!uzody^>bcd;cdTh;YU*{kI$Dq zK5avJEyP!{aVH2qs;$e%|UgJ$zj@JwGq}N*;Mhc(3E~ z#_%Ew3bp5~(B zU%~T^mH!LhxKSR%)+JsqN7Kktz{gCG=Y&VLaxMW+XZ>&u__gxN(*l0Lj;9BF;!?$r zfRDc}p9c5wWg~pJtzY)TkJ)_kEWDD9qqpFrg0$af@Z^)^pWwGFe^{H>csU=KuK3vS zZzJU?;GNgWv%#y+mluXlsv)lcFP}tS7al*nycK+`y{_)?PZmEE-YAyxOoHcVCtm=s zlwQ6T9=rQ%^^;pj8F$p}9 zl|v@@X`f%g!`VE!3_K{K_E!^rWvRS5Jd@4qy1+wDDt;h*g7stL;B)N!3V~m-^I{vk z!V={_0#B4zehL1U_1pL0#ciB@1+O|odA`60*}B-v+v{cFHN_{edT>9VU!E4;w6Huk z-R3{V;rng=Pz7FNxAORT;QLKgLf#(n{R_(bz#E;AkA#P;l~0E^?;&3b&pA=P2|nqJ z`~du(_5bJKZ*5+58~&=2@;rxUnJWJi{@WONxY+g>R_{|pOsnlU@T4W>DdBxm$+N>d z+Wv~btCv-LMfhuRn0oLv)=##E7tN(7^ngF>A`gadz9F9sZ*TLEh48!m6u%DMa-Vz; zJipCPPQeHCQv7vzNJ9Bzc)E`A_wfD&v06n_4!JTv_HTzNrw zif;0<@VZt$wcrIOC_V^2+s2o!@TPkdKM4N728QwQ;7PsEq! zg;!`LFA0CRN?r}V&)QoP_)eQYb%bZP`sxS2lS}zW!&fwy&xF62Bwq_}8!F!oAJkud z625nY{2KhVjW3Vj13D=F9sHX0!{6YQTPr?#JUx274A`peB=AW#j%0!#>8bbv@CkMv zm4Q#R_Er;qqJ{D_hrgI1?*dOYO+FBQ%i8}q_>Y!~p93Fn^}Z6G%KFvq@WWY@=NPK{dE!`m_wrvpUY-IT)8^+{;2*917lfCv{<93ccr@j21)p?LJ`C>1 z9|HH|KMxO$pgi~BQyR+O!RHN>{|9ev@lmax^YZcEB?^ESwsK1cf6z(!bHfW-z1M@+ zwfbra_xWC5_+lH6M!@e_Kd=e@wX}}sDE#lq^6T)X*3KWo{r-0m6Y69%8-)e(sdw z55iMh`#BHy>)W^CGp+x522a^t`9H$hBat4xUjCS%?IiGkeDaL&K~3cO z;K`22OTr(fmsf?C=q+yqFLhYn3m$C8IUF9(#)YZyp=Fh4F}%wV`3CqATLxVPK*G5%*e)z}!^3w2f zedP7w*R8#^f|qQh_+WUH_VNkv6s6>I;Ql#^b?|m66@Lm|ZHN3S{BA+{eYk&~Ywe&#Q&PQy)?Od+<^70nymbf;5Y1by@O}7el>A&JGB7;J?~-Gx(?=#dn5>D(2jKyo6@L~!Grar;{J$*n$MEAz&iDfP0?3@H4^6a~fW8qx>4Y?l$=o_`0(4m+;{g91+ezSgtb8)S!vrfn4?LV5=TGqaHczMoUo%^I>cXF%lDB}jzaZ}de{1L0 zR`_L`2ONMmv+dLHva7=U&%dkiaOS_kOJq{~OSsqjU+|0d6(25*J%-i$Yx!(kiwQqy z<3$qqW}DAsg#TMYdGo-NMU|I=*Q_hA0G~BpUKRf93VCg~|88YNc-P*F4}wRvacBhm zg0;^n@BnMi+u=Ly^&W;-DyaRQhnG$$zXiXRSN;S(DoFkge!%A8|H5;|P<-UHdi3+F zj*qAC2DYwD1wXt<&(8)Q-AP^uz9CRv23~%LygIy6S9xRj7Hbcq;6Bfs2KRDX1ozK_ zt%d(-uj?rMiLGzL+kC;xEzVUPXFB-#o${RUTGk$l!2No11^B%Y%2ONe^R(u0zuwyy z9(jWDjD+7fES~}|b3ncT{^7KIHQYb9ydB=@yy6eTeSP`_Ufueui0Sn_FXxU{o^j!0 zt-nnH_v6e0_jPnZcxmg0OT(Lu)NxdU54H292R!;2#Seye6o(lH_xu~-gG2O$z3?tJ z4xWM!9-#Ou@W?hFxCalgar^~*@z2Wh5&o}j$IGCxW;%E86S*8@?&0@3*Its3f@iexVj6s;osWy) z?b;~MTKM15mCE$MjzX^PVt^3-+lQmTSp74F=Ueg;%oU41xRSpSQr<**J0) z-rUZY-{8@$oPUR3AF1Q{3QyKl9>K<8ua_eA<^I09d#OG0G>8vaDbEhCHcuW1Z({BC zXZW>jimwkZK3LuvzPq%%A3R)84D8D2Mqjz650lh@0q?eawM5{2dI;1g{flncJx%DE2Qk0S{FEW7gehG&Z}4~Fly z{$T=qYg@%HftNcZ-v>Ws=hv_Bcf}R|0)Dre{1be+^(TIV5--muNfjT%UY~oYt)~*f z_r+Cw4*0?j@<4c{X!0`fnpSSr;M=S}Z3(Yp$I}%)&)WY0c=YhvuiyW`U)Kn`UNHml zy=|Vk3O?O@EBxq8dcY`Oi^}=9ypuJB2{*b?}42zX#4&okH*UXhIgzd4{zhM*W>By^4Re0 zHh)M4_v>bv;AibTF9;9qsQl&N+pHg}34gpr@lD}%tzJ67Uxz9_7``*6d?MW2)jat8 z&5Bim+G$k)#3g<*(UHDrxf1-9yyY{58S^eI|A0 z*TD~2zqT9R$gZQFfIqT+`wIMC7v;YXA7ba-Yj~iw^Dl7!-e1Ig%IEc4zN)t4!Dn8Q zr-IkWEYA-AC7ir4JdC}cQXc-pj^FRI<;T;`+DQ=N8%0t6F7Wq-D< z6F#GY;5;Qqao2k?yxmFG2lh+V(>8}9v{&qus`{CtUH^AvYKuam?5 zyv__i6RhJY06%|7UK+mSqP#l1Vq19=_*k3IcYrUo^?qOYrz^@c65hqy$uxM{B8p!E zAKXd40iI)?d@uaZ((=>r6w~F`;lu5`dIUdV=jmJcmm|vaFT7S|d6WWr^m^Q5>!XD5 zv)13Hg@3m8nG60;1LZ9S_wuO>UtM4Ewc)qR$Xmd-50Q6;H?wv;5MHp7;>W^MACb?3 z`+aqm!*5x=Z-)Ez$pi4sR?cVPqpd%`3D3||$MXa}WrzGdJhhEG-{7Ny6d$di9=(1) zb<=ht_-<=&fpCv610T~~d1}D(+q|(U{Cf?>cZ9bMEAIXBT+&*~-%o zKA@U>BD}VZFI(Z+lPmrpJpBs!S@_8%^2cz$kIGxP-&ZZ3&3C+fBCJuKl<<$|=|B&neGmxPQ*gKS%HNTXdV^v)j1m z?(HEE9%rKB>%o1$E#ZEgz2Hr4o;DZ$tg7;dz~@btZ-FoFFFyeH&k3A?d;j?m-eRuu zgtvC*<>2=ViUps(U-3!cpY6O#5BK{5<%aw9x?=DiSCzjae6WqPb>J!Nd<=qjpP@XR z;UAaD`@wTol>2pbFNeVi<#Q2##olKRf&1&)0{^|9@*IHoS}PBQ*Vrw;3%_|x{tWK- z&-n=V&jbH}`{xzo7gIiez4;?*J2iZ!T_4K^D`ap^PI)-3|5}&;QQ=2cfqe&`#A>hVExM_c;4zd&bx5`Uh{Lff6wtFJmOg8 z`3`?$^N?si>F-`&2byR*0G@N9JS{x-UU^~o+7$Bg@YHtR)rRM>c}5U?q0QI3z}s4X zH2^+mz4kj3UbB>Z8QecNy9qwZ>T5rIO>E@}h5P-Weuew@zh1z@*?92@9&d{B|A3zf zmPaqHN3XBijkKKzzAL>v9lYo@c`kUk@baSY6*e!g08g_(@wMUgY#!AX{#xN-`obq# zKQI!0E47|574GG^5dONp;@7|j50>wMdpRG0`{%$f!1LOC;5Pj8K;?f550_Z}9-hbA z=YQ~+T@@d-gdV+q8_d&o0Q~DEc{=$0AbDyy11lpNGe-C4T^~ZS@$Yr2g*ZKWl@w zlfnIb%nbL>=NEvdJ)}IP;i+TDtHTR*k~e{8wCklE;1#kez7Kq+t$#^km_t)^aa}@sto_N1JqV@M) zkEH z<=1hphqtr$Yj(l?bL@BFyIUyFb9iRk{sd2K=Uo^(U%mW$%vPS5@KR^wN#U7#$TPt! z*?J>Cd_rx-mx8yoZ-@PC%b+rvjDm-mJ@vg=fSKVW~ozuG!z3gQpNRGx+K zUu_&;3$JeD^)C2>!pd_3-eRcyDtxP5CwvI+X#Mdot`iFpF}G+RHW zg*UCJJh|b?m&=R80}{xqz_0I+H-evPCT|b-@vaX%S!>0QglD&Ld^)^M2gR?3kE$Zy z2`^>yw`1@e8xmVbtiNFxt#>tN6G&FU)-JgdzcQ^0#$ zd&mkOdsg`i!4GAZmxU*&Ca($i^>Q=#<`s(X1kXB5-VdI$n|vDlx%Fd<;S2gHemy*z z^}~DMbr&iABz*XI`2%h-mvwLCujrHx;y;dd@7J}3O1 z9e*)+A?ueb!;7p^o(AxcvGTU?C)?${;Ql_;aCoy8ik}Mi_26Q7zO9Pi0PkHwz7IZs zo%{^Ew$<-VcygORJcTDHs677pGOw5WspVnpeH(ZGzEv{#w>XN=0&h1-UI@NwhP)iS zlJx_%;V}j&z6Jcxaq?f_6RjT@3?DR7@e|;)Q^@DReV(}*{+Ep(JKd6x(t$=25y;I*xtLTAGLdizp%j#A3A0bX#Kd=I=$die?Xfu-_W z@Rl~7K7p_3qxg4l{~p%A@EJBQid;$0^Lh*o&~|)yNO*ZF__nF?GVl^hk9=Rjog%3$J@vd4|E?TDzJA_wR?!gTJ_> zJgeYC?7HH1_`T+eKLX#|SbhqP~o6moTAK0k)09yxmy)?1$E)9HtE5(i0(G~f6c;Bq@-S9Ey$KhMDEB-dTf{mL`;Q6dQ z{|#Sl<4AZL|Gk{6?p6NS@U0eK5Z*AJ;!DH-v3YED_y~JnpfP+#X5|?Qzhu{WCcypk zA#>n<|K}BOKkweaeclzen)dJI(5JJuW58S6x+4+XzvrG7{?z)NobZ0zl)n-@Zbx}N z_~hgAR`3l8JbY$U#m|9{w*7{{J7!S)R(RhV@iYmKZE}hApZ!jTvYx8ek7VaMs+=U{dzx{1Rf!$;xfWpx0mOGm$Gsw32(7O@pa(- z{iz=C43iWe4EOJaO@Jp)srb3@)1mT}@DV-b+u*%=$q&PSJuSZgPd{FM2fi+o{5iZ{ zc=;#z0Gn@wsiD7ny}Y(^iwU1%^_UcX)z)j7;QqdRet02!y`|tQ6X`gr!MDYhw}bor ztb4)zeUM>rA7^L5@7j2}9RB~muLS?SsgCCWJXv=6b@*R)9zB9*h@|+p@JCbR|H6Z; z-;PpKfA{*zSytN#;lJmTr-kRW>tMOy*GnqC5`0&nydHeHt*2VSZ=6$nH~3p?KZD^Z zLlr+BUcZZc4m_I8KSSUJtlYN3SO20shv1EDUU44&C9UFb!~Ofn&)~&vp7{~JE|&8A zfXB)uk5NmHUXSCfzLLNnw@_S0c%vEeeDJdEGzK-4t|6=X`G(4>JV+rdhpTFKwwvNaMPtaF!dEl*V-BKLBdZOYh z!{gcfp&tCgaK*QT`}K#e@KHgE9{~6JD2|4E{Z5CEwSIdo+}qnOcm!KN9EWeT^1Tf2 zX!Eh(;C?^7zu}wv=ygS?t4FUFzh7lsc)L!D%K-OwSOPvhw&Lrg5i++eyVghx_;3W7;_HxcWmf3yC7G(7Jp<(~*oYW>x8c)T8pp9`N7PQDoarmZ{#zT5ikb@0eG zAJ_`dcSU)Q!jlw`pN5yS@% z&ho$EXYBgeH~5zkiVtu7rMIhc78eyhaHis8!&j}B2f&LDm1l%+wRK{4croiQ^1`oK zy$8a7*!WT$KJ|$9TNb{hjJz^D^Kp3%c*K_SdhphHLnO{D6jI2hW81QPlT6gBA*VgX!SK0o@IaW@T6spnU)k%L4!>&S*B1C4 zn-3p?M=Y)U=i#-B$nU@_*|_`yUeV?cf5CI?Q=ae*_2~7Ud$qRX!q3<|Cl!3C&0}-G ze`~BfMd3$6<(1&Q`pWCWJ71Kyfp4+b+Y_F7hvJ99SC*6e?^ycl9c0&k79qaBt^3x) zcT85Ez3|F~<)`7lTl@{Ue_rkhyo=TQ2e^L@>IdB0bIeBCzrQY@e53l*pD|iK8y-4Xz5@PcxO@wIT@Lv{xPLz996U}`#ovO@jVXT$&$D0t0bbpX z=R5q1&G(|)e8lVVlC}TDaK8@h_s8=1nR~V0yohg*TwVh1=X({nucsQq{rqhQKNGC{ zz2SadkAQ!+_0%+Y>IBNO1b)%-Z-ghX^4t$kZS(oF@V~9y-h%H5r~N*IAGP`IC-{VJ ziVth&jhBCTn{UL1XS8uV1>F0wZ16dD-UY+2TRWTt_w!{weDzr!=O%clonQOmqpknB z1OK*7d7i^}%#(kD&$9V>7@Kc;`OLed_{#7*cAWmZmmcrm18s@;T6Vs4g$IXK{?YJF zJ>=8j{yVvg;gRkA<^Avy_PWl%3m#Mc>+npmxaQ|J9%y7Scl^=fG-ghVkuV?GuYVb?8KJ5cv&(Fc<*nIvs_$DidS8yLMKEwUGW%wZN-|H(u7H!9YdpV?l zkGB3QD?E6!@)UwMnlCR4_x4j0?&a1DKH28m{osKy!u-#_QSgh4<?GVj_jm=~$mWH=!TmU2!jr{OIs64*mP8)5r5?RJ4+LvF z0lYwbd20CG&hqSVzt2fI__DH!uL<|_t0_ENQpIaQ{7p|KOjk z-lKH--+6M_x-tR$+*ZYvf;S!`uL&PET3#Q%tf9Oq{E(g3t>MWsD!v=sKleTeUeM0# zvG5U@m1ib=r1ghO;bAT)egiy(U59xJZ)NBEKk)i zkHZ72$^AU@{rc}6KSzA6{EGhzUfAYu5xVH_p6Ach+KvzZQ9+&-er=7sDST3Nc?Y5{c!)@{b~4itM|L`QTG1IbGXmPKEl0xzQboPP&q{V<$srF7+Vhp zz*kxOOAC)bThGr4k5@x}2>!5#{5<@R)AC#J?AFeoz?Y>~{5N)^F)U9b!8-;+EBAJAL-4TV3cCjS*a)aC;(;2*4hKfy;2R-Q0+9m31) zZ<{a1fG3`=`10^IE#$S}-k)@YzfY+6VempHtNsSf_U-?i0`ylJ_nwmjNGs9dY;#{( z3vQRMfj6=F-gfwHJN|R=6n8oTwV^XN9g$9A^u?n`8W8Oqw?rB z|Mfh1o63{GJ6S*D^JS0!%dSTiK>W%7+wcCre`Vme63J`ACytaihmYMa?*jj3)NLFXziA!S~tvya37Ce!2R<{pWwfaRh}Pk|NeM%n@9Wc99pjUL~x%!XNCW>Q1J!f zew?M@{(7sybC*}1MsRP3ZQ%h)72g9sHAFrH?)~9-xX)W=!+oCPzklxK#Cy5z zgZsFD5q`yx4BVFNM!uCf@*GbwR!d z{yD$=bFd!0JY(4FjbrmZ_bRrX9lqJtX@PKmf3Pfk;x_HC2HeNBCh$ErFKrM16kB=v z!cW?|W*+>k&7;=A8(4j9f&XIT^)7hHwA$}M_|JLeXW{<7g8!bCm*-16uOA_Pn5{S7 z!hg1T>A&zH?X}-1!}a+8^9O1>A^b)fd0Keep7LDqCVk|^;KRnqE5Xl9lh=c{DIjkJ zFHlh44W2EMd@wv;L-~04k=*h*@EA6K3xQ9uerYRwQ4Zxf1b=-`cpR|F9G8^>qyH@BfCv{r3>>!FyQ#m+)VL zbv$3;&Ev|Wj?$yoOMyw+P6A(hRGtN1+}5Xs;q4|XzC3)dm0NANe_lNZ9@g4V7kIp8 z%0B=;J)e9Gd`?#RO!%J4@(}o5>koIp$h*QT)Rhl_FESquAH7QP)8T7vJ-Zm* z&EnU=quf-UUGNzb<;UQm@#S~n{yE#1@J8zt{{z0>+CxU0k9a+fNTB#U@N_os`WfD^ zzTz9eeLdI)p40lz9`FUNm1j0Qq0Rr7!@d1%f=8*KJp16CY#clVA8GTztMCQ^%5xw7 z(9VZfa9>yc4gY1X@`N9!M=$5=)(-^0{rdxH;eLMQg!}IU7J+9UqWzVJ$5<_|1z#6k z-VFZcoV+94uRrvG`{y)zmMS&t-ij(Z*)?8?D2Z^`u%UFwv)l5+dQo_{CB&qS{?57-U06SE9(OvUsC%W z0bga~?^JlUj*4FdA8hOQb?`UG6~7zq^?L&D^?L>G^?M)g_4OL=_4Nhr*Uux`e8kJ& z+jC0z=xjRvL2$3fiSScd6z}U5&tG`DJOuGxUt8gRoQL3kzMO}*ORW62;eP$(8{F$L zmW>;JoP(|1CV)p?p!`YUDQ!Mn2!3m&;!DH*eU0jHFNY>@Z?_%b9d;>yAGp`!2zc0V zik}MqeUp3<+{<$vJdthhhPU0SJSX50Y@T@q?$`0}!~Ju5ui^eVy#=<;@cQ!moUVaq zSf=CI3HSRj9)~}UuK4Tl6e04v@T1o6J%krGe-2+^=fxX%VSAtGA9%2K8z%B({l{PL zKSi{i0G`X{&uQTmZT!s#A9zlAio=gudu{~(Zt>mV{{GrPxWB(P8t(6}ErJIO)$y!_ zue9@MC*0rXItqW%QF$)Hx7qcvJMhjnUwsDu%l7*Lez~jie}k8=B9Cg-u3r}1~UK}2OySy^|?L~P#_!^r(_;oBl9=~toFNhyx=gT0te-CslJnAs*cP2c= zX8BV1sF?B%@Gqz2d*I89%1^+ztdU=aFY6?~2Ty73|95y-YbSrg&-YWFFjMvD<#y86 z*D>I|ZCpqUzis1PdiXxO-jy33YU{*e@T#4492Ma^tUsv(e{cDN;Ct=->I`qSQThA9 z9}bd_gm<^=15@E;S15iVe0(hV8hD{I@*Qx$Ps$N^!3>JO0FPkn$J_85=@tJJeypYZ zJv`Lf=YR0WHm{2^P0#c8aKw&30X(m*r&7bum)G;N!_)4R2f~MSmzRb6x~T^I*?z@0 zfiJP~w>^BVUGM4zpT9$Sg5mGh%O}F)S${Pb-qPN$34w<%qdZ&SrR}=h0r+bxPk;Z! z%Ri-^r`Hib+Rn#^@O*2v-#_4wugSl__so_@u=CjWTf*|hg^xL}_*C$tjpfcOOzuWvg z+zkEQ%hTt*Y2m}|{LKLmuyLmX-0!oHShc_R27tM`KNR|yqg7T$ibye2%fqP!V=qP5RX@GIRF-w$3Ok9-t7ZZi3F z_*FZ3nXs@?5yxo z9lUIOxsT6Y4k1nCrx4#PSbiPe%i8Bx_yAk?MVzDOdHx@(wC%scLI6o~i!KMOp( zm2(03iP6em3ZBsV&#LhBc0H#de2|rM8~C5|l)pRN?+Y^+o-9c5358r3)>J0p|^`AH3Ifg6GV|a_=@^|pcw*4Rc!!gB2wf5!p_@bXY0Ny^HJRSVj zI(csRf7Uh=!yno_R*hyk1_#{{dfUulFB#3LDp=*gVUR zCvIis34oU{PY+L0Sn+w`8Dh&z!edxDSA*ZOa&7{T8&P@s!5_zwkA{D@ad0MlVJyWj zhx>YX3%uAN#ru6bynGInmizk8-RIvYZ5{01GrZ!T!CMxQe}nrvsF9t2p69W(leTdG z{hA^0a9x$(*At%Swap)9Bi?_HW(B;S&1W{lPj6TL{qPBPJ?Avs?;m~*-ptmO58!^i zgPaeO~(kKB=Sfe1q>DB#&zADzD#aSLF%e-5SZ$z%$smo)cc&+H-k$hU>~x z3*IL{-VDAXjl3iLjLpOQ!gEDe`~tZDe#s_yk|B!U3;&~^{386J_3yXgtAAGfQ}`eo zU*av*-@Tl@U&;nwYyC_h{P{&aza0F-5qT|m_YCspaKBGZXZQj;kNU$$R#TqQaDP8w z2E0)*#V>>V{RTI}r*2aGUU*p>&rZTW*gWtGyxW#A|MTxRcwj~OOZfds^1t9&I>^H= z)1%jy_ZKnY{{5w-@CDWmGs3+;&kOhKy2at%4_Ai!@0+)RFG{TA?gmeNTs|0n+1l-R z_`%H8no#k#;rVPn@C=^L<|iNF6K#C?0l#GH z*_g|O!~E50#&P9*tAxLvZ9MdPS!w-q zZ1_a0*JSVA;qPHKPw~8249s<9teM8yn+}U5_ZfKm1xxxqpt{UvISo@)?Nl@r!&Z{C)=cMtJ(D@_q35 z-Q}m@yPL_c!{0QNKZakl@#P)d=du666Gc&;s5Z{~>rH9>MgaWKB*mwL7qI@{f4|Q2 zgf>?EPl#`wO#Q7bpGW3{ zSK6#Rh2d4K|11G7c~0>y;F)cm(iMKe=2rvZKUGzpvG9fU<+I?IXUUhtTV|4Ph6hZQ zAAmQDDL)IJXXD^ac>0!#e**7r{lI(pgTadb29LE-9&NoIy?(3j)VAMW-@S#6o9Pjs z%i4b)_)0tPiohd^&T5OqqO2u!W+ex`~4<8 zPu&*sVu-JvRQ@x(NoRQ*xPLyUJABr8#Sex@m?$3yUs6~;3x47k`7(H^>hg{716H0f zZ64vTx7`-SCxQFAH3NK(^)q?ke*Gk}^-rEZRW{|15BGjJ6@1|##b<;2b(lhMKhEm# z_E(grF+8b_AMN196DYnX{DiGvhQd1)Q~U&Yj#BbD@Rl|oUI9Pj{ULmfmG6Fd*73@J z8Xm{`+iUQlp^AS1kJd^48s63V!@uEYf)yXZ+Kbok*e3G0@W<9~r-c8oddUW_V(~5D zCB`U!S9o6Qmj=Rf=TiJwc*&0PS@21gXF0r$oiCf=J=!bJ0r(B;XU@V$+I;>d{MrHK zc>+&sdEUb-3{?C#_*<*@Xj}Dnua{v3w4Dh4yVZMo_{t87&jasNOH^L8fmhXl8eOpe#PgtHS@X#d6 z^Ba8EarsNQ-)H16cpjU#hufy-c|DG5t?k(GiGAhC;XW_T0&iDD@de?F(#mVV?Q{v# z8Xh)^;=98y+Irl-$LYtPwxZ(4A^w5S8{zefD}EW=zfZRj-n6db_rjAdlAnY(T`#`^ zA7kzLH~42eFJ8e{TDkoVFS}IvBW%~BmxGUYap9}_D=sDcL$Ev>e5;L9f$%-{zE@57 z78`$?!TopV`@;QmBs1Z$rs{Z>!jt|Y-w&^`OYWa9@N&3l@xLK{R8hshgr__w{|p~t z<8lOhf57wm_dVmn_gO!g67IiGkqz#@PZ0>eYVD^SJiN`*YQcxwJfS(fUS_?n&hT$} zd804_a>L`gZuA-orZ51tN811|Gw}ecrtrkZ{ct3 z`o_O-pKnCjsr`8U&S|ghgzzBiPyG8p9{=9PyIhDrc3OFg!P`fXSAt(IE3XIt<*2+B z{PSLUH~7_B^1<-wLGtnNPM76#;2$>2&%q1jl;4E6vg;&|;jNP>{w@6NO8GzVzN6)l z?fmv~-ZotxAMW@0Oa=Gzv=H3q`PJdRzGw+gSX=w;0)Lo5J^=2&6FLU|Et=wI!YkYS za2Y(0^*@{7|JnS1KYh3IpMjSYhq(d&TuFa;4ENuUdk6R5cl!_SzwZ{+_V4wT&d!$r zxc}~3I(VuKI-cC{?bZ%|g2yPQ_{#9c1?BbO>uua`4IfZf@!jF+Bgluq7us>ofj6;n zXA8VkIORD2_wO5=fv;|(`0McY)*n8EU$pb(5BPlR_rAdW_k$wX^)0V2fB!BH{F1e| z6!1PLb(~q@rDn?u!9Ns`mxZrxCa($KY1eI-r3H(QSiz(@0t$Z zZuPhXo+q>Ry8#}3q*!r{^{NhT*kA%;+@}C0VTUGH3 z;Xc0af+w?fbs2ud=C{AWYc5s(*YLG7pb$I?V%F_g1#o9v$c=-m3?*l(nT|NR{$mZcw;hn8s7QySKQJ!`1SJULX z;k$$7_u!jsym$$Jm{swg;eREPhqr#h>#Mz$LmYUSVTw-yzjjcb6`se=+d}YL*3X2( zD_Z&d3it8-1>EPKpWr_K3}eUTuj}qW9cOg-uubwraL=C}?(@h%cuA!RQx5LOUke`1 z=H(sWo$b8t4Zn9qJD3c=*-gFx-qyy8HSl)v6~7Z6v5Wi|e6G#IL*Z=-DgGY3bU}Hf zLwfY`k8g1a;0HD;E)D#&^@lm({yFC=@X3Xhry<tS3;lEhF77V{1R{1Bv zr`Wn|K74LX#jl2YyYk-w_VV%j8yrP^o@>f;3Er!*{8#voMe^U_bL{%hU+{m*D?Xg{ zqkcRG6Ut-5CsdXvhesVE&kY}9{pU~cM!6JU89q3fyguBoBejO-D5Ci8@B^vjL*OlE z$tS>nZzi7$FJ{+)SHcV1_BQxP>$eZX>o!;Z3-BJ+&hNnc&Q|<$crxoZKEav>+z!Pedq!jIedl@@*@ zNYBp)U%W?N0^YTyyfS?31$kR|z#RE{c>SyL-SEsMGI zS{izryqWtoY~`_2}hXZjiP!!?)Y~BtP7*JC%f|?x{Rg;69&k z01wHh_<``2v*pX+b+*elz{7Ts?}qPRD?bL$9zlK)o~4rfHhhJ(|JQK8AL-w4zwc;x z8|S^8moHTQ*zkaq@?>zo?_Xy48>{!CaBt7G;ce0@e{*=iDS0ROxC-*VaKA6fNch42 zik|~N+FHH>?&Yu2z5AU5$dCtK1+IZyOL-leF*F*825bxI|qlfD69-k+-wiCfS zTfdPGp5FSeT=4c;m8U4YrnQd>@SC>Z+VFcvl&3koy3NNr!}}IfynjB2tSljUKf5Qt-K{Xb{zRH@ZPpg9|R8&R8xKs?)Q^D2lwl(x8S{PUi1|1-~ayruW##=@9>Y-Z$!VMlJz7&#x*^3HZN_x&FRmu92`?N|-V~m0oxCGFo3)>j@M;wlKMfvY z^Q*=1dpQ-q9)4q@d=EUucKKcS+5_?z@NPD5342?A_j1m*THCSUFMQq(ubxKnnc+oj zoGJjnx>NC`;ScxAo4~z&c7S`m_kpjq@*e>&ZT;s|c#rzp?;`jgwtid(PiEz|8=hl| z@|=KYvial{cmiwp_u<~}y@q?g_XY0#Uc@`vzt^Mpd-34jkEMcpKb9Tt{a9i6Asc_o z!@d8h4bOi{#}@?m{;dn#`?mpb??1=Fz5kpI_kKPEzS7Q@ZE#@~C(9==JNryPXUkvOsa!;Ql?3Jn%NB6<-M6$oik3 z;MZ;bUlx9NgYwjX7Y~v*frr?6+8#ckv*LTf%WspPfXBCf_y*jjS7CmIm$rG{BlrWQ z5A*$3{m09BVMJ|5yZ666TsCbdg(vSSPYv&22b2+hdXeI@!{Z0b^TPi%4}@18r1;|S z`jh2l;rn;XE5nD{b;ugPZRhFyUyPdzQ*PQ?cvMHD1TRYChLcL!KYZi zJpg{eURN;uo6R>y!*?vyeka23HI+|?Ke6MP3%__o@r&V6ti6T6d)xWG4*u1~*)8yL zg_M66Jj)9C0r-2H_a1}iv-bDbFEzn`H76@VBew=iv42dc|dU zlhKO53C~tVeh(fix%@GFik&aN!*>NK{w+NHFY-U(%Vx^|fsf5C4|89Se!lmxc~oS0 z@^Xqx0KaSVkUa2$^%P$UKCY*{0{n@UXI1zLn-A26SFwJw5xnF8qkGorF zI{@zQAEkp=wChN@;Mp=MPf_^E2J#Bon2Rr_eg*DavqsQ+o|E+esaM5cUOzRdu~&n3h?;L-1?Jn zPxL&0y{nFCJ2w2Im2-0VJsTghz_(dFwu9fW_S_3zDz5fB44!SPd@{U5BKZP%pta96 z@R*4ezZ2fy`txJ(?qw7o3SX2`eh(fPTmBNBbcHcSW;gb9t{H={^(Vpq=UJidu&~^Yk z{tbCrcyBvja>85M`CbG*ueb7)hcBuvuLb|Tw7eO7iPcL-_;;({KJeGp-iE_tELHx= z@IH3F%!m8?=&Rs^+bPdBc;)?Pf z@Lz0xH3Z%)Nb%$0Bdp(;4Ud#e@yp>En#ec9)1Q$c3!W6S7@R5?eKLrPdfxpv0Cxh;p8F)qOKX1cJuTlJcc*P+3Q~19&e|rUApGWcU;ScQiKf?neEB-%t zsdVyiFYPgGm@xluYJ0@yKT+TZ)+jC({A5FULb$hwG;seNoU(AQ#~Sb<@sxiAJoQTX z4EU6C@_F!kQRPeEKPt*s!e80Cdp&&EMa6H0uRSi`4Ue!)eh|LY`sd^DUqTdr7Cz7B z&!O--Jr#cwUfRm-F}y_|#lM9wk06i!N{@bCSBk3b`0ygO-cJv2YV*CU@GldUCpUb> zQh8%|NECT%c%NPJ&hXVs{IMOBMG3@{5yEoqvpTC$E*DDKiKcRo%r)HO2I!aVR4n< zWpsY54Np}2zZve=FJ0hQ>iVlM{9VoWZio9iba%ohY2I}o{Qfj6eMG8 z_ww(8@2_j|AHX+fnSTzixx)NM_}?0T&cn~lvG}|v?YkeZ{O#=LlJM6XnO_4h*1^0U z{IK@7BfO)=pWg7#dRm@g@K?8+Pk=XTU_Jw$YpZz{{PCLRE8rg|m~Vjl=d)ge7fiPJ zJ@9g4%s+*1c-#C0eD@ynv+#k#%ya!{-~G7sA80=pf#0h93Gi;$T6|6T{+rE{;AeW7 zw}rnn(>xVk@Llu4@L5gFGvRmZ`fDlt<$ElC9sHVE<~!g$2bjMHe@EltXYk26E&c?& z?mF||;Ai8_bNr<5n*WT_b$3Ddcj4a$UuED=FEXzNe?|El!Z%H~_~!7w8YffW9j>zY zKJfF#p<(cC>UVd-ubXUtFdg3Efcbp5zyEwG+@JgR4E%(~+b!^)l|LIkafEI65IkkB z`3ZRAtIf~B#i3%S?DyV}{C;nF_~qR!t|r{afg9l8Xr9>`{?B`sryKmE=gs@Wcj|uE zDEPsH7XLInUay0^1fQ(y;$86hI`4k~e{F{4KMMD8;|F-lWQ#uszg5R2_i6jR*Ry~A zwkZ7T*%p@oAFTOm4ftD{e_jtyU1oW1hCj5+yc>M-9`gb4J2d`ez~|j%@l)W()oy3Q zyVbP#h46f}%~!)u>H6XYxPOjx2i)fg@55(2V)>82>*&1j1Kitx!=LT%{CK^r`fm>R z_!PK*eyk7N?+*`yd-?B#Ptye`2zSkT~|H^Z`sr0m%(>8Fy8_{ z_rCd?@L%Vfe*pLAo*jYv{e< zwU)OZ{ImS#BjD>b{!fB`v&`aWz#lAT{xCdoiTP6a<%#BN;psP-Z-!@fGv5neG{pQ6 zyhe5N^FEzjq^GFu)p);_1HN3xgcDd4P6a?f06y>I(T9W^TzPZE6w}Br|bUnNcii` zEq)xlfpKUO{G{5+H2Al=u9*qHT*q+%T;ZW*@I#up*a~z2-s6Afzrj})(GL7+ z-@X37)3_85FW<}JO2JQEVO|^l@nz;o@C(JwTf^HwZQd1r=VZt;)7 z-?`iTL-@`v=11Y)U(Ui`+i3AQbi>N)t#hJzS-7t&c`ZCoQ;Tm1_v_7O@GkFId`I}k z%H}=cr|&c$0$)AAd>nl4E#~*Y*IjP@ApGPi^Z&t1>O8Ur?$_gAz;9|}d47WXb@6$) zUl+$+u)p*AKc#XOhcB&XaTVac&PXlz`)^r%5rb78o@59(^TzYnS!+}{V)0PgRDY6gEz^P-OM*43;$J>etOeultTq*?q} zcn!@z?}oRjWbt$0LvAx)1bg6 zb5VHtN6hQOYc4hK0I#KfaVy-fmj}W7=dwJb;W@81p8_w}(EI`TdY!)>f&1r$m&5&Y z$Irswe8Td-1>dW7dklWr?G}F$e*O;gbMT*2&2#-@-@X3Jjkli*!N1LEUIzX_ig{Id zLG|nU@T9yJpA65Ze%&7ao90)k@M=9Q&p`OgZ<}YplXX6t3?HZY_AL0$n=MZk{GcXY z%iup~KEDoL@HNY`1@7;|-v#&c?>_io9mm7)+42+cr*s{C27dimD^DnN*~NeOasNKq zJRbgu?r)TW`+9km;NLW{JhkDCbp4wI&$ZX$Tf@6&n0JNy^JLTD*A%z-;qc0f%_qV~ zXuQ22UR~qZeE6NZpR)x1aAC{;G zw@I-4pTK*xG5;F=dt39L;g4jS{{`>T(>!m`QNmx|Uwqx-;&8wJRs-(+y)nG<1D3xX zyqnG=sqhP$_b!C**ZgfIyrTNudiW2z-@X;@>oa~1U#xog0q)P|ERZw0e*F26rQttz zv;D0MFRF6Zh4*b`@lD|VdBa}tI#VouJiN9QFLVz)OY@oe@PpS{o`vxBI^QjUzq`TW z*TMZcv76zy>3sbz-0!b`1h21t@ddm=vTgSyyodTre6Hx@;_DyW2>10n+Q4(@KGG<- zuVeTie75FMkHf3$I(jv{sM^B@cyZmA+Yay0()RZ)cynEU?Sao6WAPutZ`Anw3H*r4 z^EJHXOP1$n_{N3if5FE;Yo0fEbp3z4*}OPhyA>)Azf$ov;PuliPh!x~HQDlPgg@B9{8f1W zUFL7YD`uG=gilpF`2wD*`x0?^qL1T?Dra$cp_P`u20U5ujp1G5Exsju|91tRwv_%VxFA4YYxpZ9g@x4Orb_e`uXUnq}K0x!vPvHLC z>965U4_KZ$d842wcD!jYnEGl19%0U z7n;Ev47T`Aa9_u~H~e$e^HBK1<1Ej3_!Fw1`{2d#gsCU#9Dh58!1rFFFcuy~Vcs1H6Lv>l{2y<5lh}qL1%&I$lNKy)-T*z;|dIxDMW5 z<3Ka`+-IzusqhKO=40Vs*EOFCU;e)NWAI}I&7Xu<*Sz8dcuFUW-wywMmHA%y`myGp z!sB$m;#+tRU620;@2qjAM0|ApPt!c70{m2Y+ir#Y(eX(SnU8?`ec&nZA9OyN2cNF~ zvH*Te*Rzko=cqkD0Ut8L%Cj2&hR*NLz-MJz{6_d&y6?9I?ynbr0MDLgd5*xlX?*?; z-X`AS&%z&HYhI{8bUlAl#{6n{361mD!WZwe_>S-u51RLc`+g0E7anf$W8qsjncoe6 zPUrVI@ZPst{1*6dT~FDXaygI{=Rkirr;5oaS-wyY6K<|S8u5sobc&=+K&rEos>&)lD zhijg>0KQY#HIKnF^?K+N@N0E^pM>8z*S7l-yxIrm+u#pYH-7`(`+f6lc-BPo_u$jp zm>+GhaDV?{PxxccS)L*AFYY(LAAV5fpAWzDUW;D>?{$ayT6n%3=9}UE z`PKvQl^QqV3P;!f>uTr4;r@K~^6;CQ+IDNe^QoR2(^bxv@H2xfPiJ_q?dE;qf2=nj z4qr0Qd?Gx*+W8FlK%FlZz~9q;ErVygY59-AllGdQgpbwhdgtKhHd=h{BGL8VewKM5 z_=a@zGVqYvPgS@-SFJw$aoy)nfsbl$`Fq2gEHY1r@4mtOF8GBB=5ye++M3UYcdul= z5dLsS^QG_#ADZuiAJ=%e5B_Kui$4s%sgU`v@JhNb(W_|maXF>)<`B4_@5aJ?J+FJ= z{<_t}@M~vlf8mKb53Ys#`c0eR=LTAyo$$Rq%-@H9qWr(&o%G`I`3QuFCec2-`BzNH-gWZWZnc`rGa@{c;kxZ-QhiEnD>Ww z)cJHId~ackp9FtO?R*COEA{J#;k`7zErp*_yIl*fq4xO_e6-rb8}J{CSUKN=SMFr~ zDZInO=HI~Mo;CjkUZt1$-|){%nAa&D-L57ne>3=PeJs8;yrtT0NBEZKExsFkj`9qG zzmUt~Z-*b#ylymnUT%xO6aK|!^QrLJYt3iF>u8*O6#l)&$rbQc8i${Q=hyze0&jeu zZTBtsv=!zb!hi2-eiZ((?rVJy&wAV9&%)0vG|y2Y`uIMpeo+Aat>!sb!7J+iLuL4{ zy1!i)KC-rLw+Vda6XxCFXYM!e58tSEH4;9#pv6yu-}03C40u{`^M~Q3H<&Mlf7RQ3 zExfw!YrO<-^`gbU0e?XAjrZWkR$2U~@Lk%kZ{T$oSo|;Wu2-4=4eyX-p08x|anE~~ zc?tMCx{j*=@7dJiYrwFH?KF7k=aA7XKjpHud+% z;U#uj{FCr$%JV$@jt4FNHF&blzwf{wQG5Of{%T9h^A&vYDD$7-HC6sU;c2TaK2NFW z{5JdeVE?rgpS{*A_^=ipCkKJyBEOHIr37CdW^`G@e@2h5Mc%iUuB zJ-nTc?^*bW))t@R%IM?1S?8$&@caWTzBIhaKJ&`(&honOLw8tw6ZrXd=568U)PK9f zS5LF}5%6bpexC?m*U;kchrh1-81vydUb6Tl@F!J2Ps3A^E&fIL{Q2fP;A_>t_QEG> z{_qL>iV>FQYxtph=0C$verWy|yxuhPyrrX$do%4<3HW67i}LVuYUg#}3sWqABY2m5 z<~PE>*kj%t{*}&mZQyIwA3MRjXIh?a@bkOOd%>S+Y~ByPRp+lE@UL}!F#^8xWy>=b z{%j-jN${UEKF@~lm}Bvo@K4m9AB7iH`&kT6sb+arz(3MFa1DHPyv08UAExusCit%Z zS^O*TJ@1=uhcDG}d<&jKuh;B>Kk%02`4HasIrBsCJG+}7g+IQ^{5br~4)gEf<%*b} zhF`JCJakobf9aZK9uL2DsCfl=XZ4qw@Oncmz6HF4=FchcfjW=(hTs3RVD~c@ZZ$V z7r?7%9<>slnP}U60Y2?n^PTXwo15>47hY)o72KbP@GHEL<_S5kj;{aTH6Jbt&#&`) zMflq~j`iTLYCLHUUohCp*#*A6r1=2&c-6E-{RZA z7jHH14u7_m`2hIi<;*kSdDoavf$!CRWx<;jwD?urQ_lpj|i}`s3 z{!;7o@W#P3d zSp2nc&(jd@dAh?rPe1q*s^{VGX6oal9@-Kj&)I9J>xbN4i@MZ5Gal}r zn_CF?_?7StO|AUv;gdcv-wGdI#(X#Y8O@VFhY#00;Rm?4x8LEz(=30^iqZAl{ciJ8 z@S2*B)qp4VwD@N5EFH&=@HHB52f+PvTchBsH9wyYzi*mtHxs`14)euu|Gd>2_%E8j zZG!(#*WD-Jd$qrR!ryw-wwtF?bba19)Vv5hN%wEd!u@kP*TNs_WqBIH{W_=_{C_%6 zb%d8IYI%CXYgaKJ3?Dkqdw`9cj4E~Fh2zM z&(VJk_w(Q{@Z7U3&p+_98b9N&i9U`?YFYf1@SQiASB8h`nb(64Q@tg_AGz1!JHR)+ zV%`%zQ}c}>@OZViaqt4$Ezdph=T#4D;Qslk7vTvyU%UaoBZuXGAKpymJPa?X`(xk1 zf6?(h3*UOH<J`3U$C-JhHcFK~^;FNAk`!hALSQ_aU-fcy3G4!X`S@56nZKLRhHcK!o=@**qG zA8>zu=H*qQkJmSqExtJXc!qgJczNA-tpoSx7xk$co&U&nmS-5;KlgDbJbRkOPlxY* z$^2n>vgXN8z%RFAgx0}*e)0;u!xYQ^E_~Nj<{!XkXrAyfd_q5qKLTH@apo)dFIQUp zckml?o1cakQ+vC*T68@h*Zlc9xUbXK5}x&f zb?3d1%K&PE9c|zhl`po zhgVx>z7g*0ioOc}QOEIPc)N7Va~eKF^>ZHX<8Yqp(e28wkBY$mYGe5;!aYwdxaYY6 z{#rlF(;8k<nERq(&xH{S^Ftp4&Y ze8HU-|1tb*C-d*%2?^$Z!hIfRe_)0A)A0E^zq|tX@!>7Fj}QCdxer+Wqw>qb)tbZT;{Sg`e3cgZ zW$l0Ke{e*6?g$?icCUv*5gx?%*54G5@F3owubU9zLA)+2Lp9+VmO{x99^{#u5dL5I ztDW5UOVgH6f5gB3uEmdt@L;?8xI}17ga`Te>psks2oK_4wrUC88{t8GFWt|X7vVvC zKUMa_5gx=R>b};J2oK`VDt<+T2l1o(h5r}+dJg`O{1y14^0(lt)>@tq;m^vC!Y5vB z@!v&wP|nV}9{DN4gL2-d_&?z{X?~ukj#Xfe@V6lTa?O_tM|hC`4&^Tq;X!;s#g~up zApW@GD@S+`UsCaPB0Pw%q4B?=+}lqsd2@JzJO!R8?*mVf-!Aw4EjK*8@$lDp#HT8L z9^$>-J_fJ-q2*Z(_ja`*!h`)Culz4Ycu+sbHd&tS5gx=JRQ#I}9>i~|Yw;hz3)V3| z9N|Hp^18nMBEo|_pU<`UAK{Paym>CdgFI7|=P$V*uVX4_zPi?~+|S8N!b>SnC3sbN z9eAR=2|QEY4!%pC3ir>w4uYRl{1|wpJXSwd*r4osc~(e->n<*69MZ7J<}tiC@*Gf} z+u^PA*@mY^I;drmNLlOC_hJ9N2zu@cZ2)|fw z+HQ`-=z3cwFCW9NkKujco0KO5UMSwmGX}}|x?BhqjqsqJC##&bV|X`smf{D(OXatEm?!u8 z`ChNPErt8I_Y&OO=NoWuKkvXj|JU&Sv#mU*<$k_PP&qHZ{@-yms5dW9kq8ftOJB8< z3h+ndNpNo`O(Q(=xU`e|xUt=e8A^@t;J8#*InyHY1Y^tw#gC5RGa~W?$9;|B7esiF zzpL_Zh~Wp}0~LQ9UaWv^;8%E>yu=OB^?b!1i?0Ir<9-v|$LIF&cl5ej54j)TS=#Qz zi1^?*KBjj20Q`OVstAufUe87359;%f6+g5!!h`x;qwVgD$P*l|knMixKn(vjMxId8 zzx_8d|26P!+HOO5dO<7bt#a>=BlLRHK*VP#{w~D(cr_!!gZjKq?O{%Y2leL1@zDqm z;yWt-sR$3^{l4N0a6j&^%l-Ifs+@ZffA@poWZ|!)a4*kUc+o)?pYz7(_IXQZ^8#|; z?jmjX8pJPGd#)Yf!Tyfc{wBkZ$vZ`OWP7_+?&HI0D^6%|gkNkAD$mG>JVATYZKBZK zG5kT~DOAWd@IQF6d<}eyd^0>(VaxN5+}m4;ps?YugNTn){7J-nef}QdL4B4`JHNci zzsD=^_VN-D9$B9Wa<9)g^~V|!9u%>v%F{N64}!N>{5W`;{2ur=`6{{B&q?_+h~F-M z10G)_T-fl}`|wKgBgp^M9E(4W_!PyThcA=I-4s3ktdp0Jd-)4&v;0-yK5o>5dw*;P z_i>;H+{b}|@C$lxC&Pbp^gkiY4_^&FHZ zcM0=ia%o^OxvApRA_XUH!L7dNPfxhl^T z_&WJ)_;L9{czp42vhdd`cq#ctc%u9@c(VLmc#8ZGe46}gc&7Xp_&WJN@NM$=W_BDe zQ~ey1UkN`guOj#Hs#kTZhnk3wQ+r5>h!2iS9*x7@B0M;b-X78-Jc$3F;zz>w%g07| zkjLB4)Cdpqw9+_spWOGizRH;iPnIu%PnWNSFP3kHZv z39ls2f+xzC!;|FC!CT9>!c*nh@ZR!+@O1f?@Zs`P@M-c3@agirEuxQaro03^OI{Ja zNnRViMSdfEm%J@JTiye{Pd*TSTs|6pT0RwCM(>ZE15cDMf~Uz>!zaj}htHC~4qq(a z1J9O!0zWMO241zawa;JS1LdKX(Z_L%JU_gY-k(+)UP)d(!u8hkiyLkY*RUPx4{u?` z42^=P$|u8*%V)zY$rs6Ugm*6(p9|k-zjz`d{^Iq5%KsALeLVjF?&pgm@W;HK;lI_j z?fwIwwA(yiE35yYoWc2GsLmG!BRnX7zb7rebc6@-pDDha+|Mr){J6j;%NxTt$y>p< z$h*J~$@p9K4L)cd-?|OP&pnQ{z1duO$Bx zo+>{DpCG>g&ywf8IlA9%l9zyI%PYc9$ZNwxdi~`_c)YwVyo|gDJXt;v-aE)VOiI-1~b- z17CB*KXYf0Jrrt-_(O{C0^gT#F+7w8KPDdmKPjICFI3+0%!JpMXTe*@m&1F@pM$5% zx5CHCv*FX^2jPq5U&1%YPr-M|FTfAU^R~I{;*R@qIV>*$uUf(Cry@L6UK>75ej_|f z-WI+|-UFViqHT8|JW)Ox-aC{0{hO z`MvO58kZh|my$1rSC>BxPnN#~Z!g~o-zMJ&zaT#XuV2OL;d}Tr`S0+#@?7nrkMAmZ zVfY$(S@;(Db?|I?BK)|#B|IT`F)IAk89rU!7rsh99KJ<95x!481D;&Xwz~kHC0_>L zB!3ouSpEw9w0t-Gg8Try{c$&Nue4M;De3pEe+~=QT@>@F@ zjrdH(KaBYKb1Z%-+^<7lhWq{JT@gMwoWj@Hc{{>~h5g=5mj9sK=O<-qnIDOWPY+Y3 z9gfhs7@nu21^9JqN8PV3CTIRK5%EF()5>2b!h`bfQ=Wzq9vOdAga`4zD!#4Uw>z$O z_?O|Y&JpoJp4vGsa%f0|2YIULKJ)MhkBq+~!h`tsik~L;?e5cdXGO#Zc`~%!B@rIv zxmS5sM0jNUGZ7xduU7o?a^G&QI^kc2zjnZnslB}iKPUeTo>bHFoPejwe}hku=jasO zf3xHT;cMh&;HTx);1}c#;f2(0o5PdjDexBZKJXOzF!%)do$zV$>F`DJ`S5k}rSN_7 zXW+-=Ti_?;Z^A=rZy&--$v=lD$WOwP<$u6a<#|$~k8irXD7=)~VFJ98yaqf`em%Ua z{APHDyeoW~ydQj)d?b9ae6rlf?FXA%`+orLw|OYrE5d{G!e=@!laUcW07;lXkL;~^_&HF>bzTw&7T z3e`ot-+#U_!h`(n^txEH2oLi6e5ON$2k~?CI!pfu58{1(GFtBSkfi(PQ{h?i84-Dc z^X4+0XCIE?|BLXTJb$V@&%rn7{^1L9FV8YlZh^6Kyj^2YE?c`Nt^c^CKrc^W)L?P>%(Q$7j4 zK|T|HK%NCZCtnVaYj5?l2_E0Te4E_c^Y)zP*)jZs2oKtGKfO-$IXqpjzx)DUqt`Xg z!_Oz!c5`*JzW%F|ISLK!D-j5DlZ}D~DTW&IM0%zDwR4eoj6V9^b+0 zXFR;V{66?(c_utdz68EZz7~F1z8Rj-(aN(6-dg@KyuHSU&*eToWaP3uKg94qB0Lx$ z8dkOVzmb2k@?X&-`nV_SyjBXnU49LGQDe(r7rw2D`AzVX^7ioI>UX!o7s&_1Gc?|g zg;!F0mcyEmx8{uo@ufdPY z--Q>_ICBW@&jJ1(o~rRYUr#$;K99Pmn)Rci@R#M)cpd>44K zJPkfwJ_0^VJ_$ZoJ`57*4fHm8(v#}BRomo7M>#S0Z)?;gpZSthEJDIh0l`DfoI7V z!I#Nb!#Bt`!?(!y!_&H0{TzcIlm7xgAmbZeZ z$-BVQtgsD@OZ@^fO~nqfR|GIPw@Kk^YA2j+-=e0PqMr?yoJ01yuG{@ysJD3 zzDV8%?)BdtzEANJ<=);-<+tNF4e^H*zYy`>u9io{2klDJq0rh04{rHgP@c{3T-|NE zyWqv--^#t50{bC^E6&@Oa`22URD>h7V1i0`!B z;#VTRlyPVs;=deazu1EK1jX+_d_IjEdl9e8yU<67_jQxMM0}d^|A2U3Px&m|*HgYM zEqdJZ^_1h`JNwuMu7>+M%hlw;IGIyr3BJ`uysy991o1%|4Zdzhe2Xj0yF|nXvAQiC z>W%pHx)z^~_(bE-XvFvYzUv}+@(fp=J%}Gw$$oJN@uL<01>(owV88eg@w$8rokjf5vn)PGzv%Hqr?1czavx7# zUuy9s5ua=vNu(t%`4p_zr3)-6P_I_UZk-FXDY&@7oby zK>5cZ-q-t{77-t`&veB8bqLi2tav{o(-PQx$&%@#EDozC*k&gF?R`zVQT0^f%(w%tIynM~^>?)qX0;FAM)# zP2^&tx`;pewB^4kB3`%VFa9DG@jvai_<`^Trh1HN~J#m|R#RsUK8FI&sv zUxrV(&HNqs?RtIWApFNni$4bM{I2;A@Ee~oKMVKIhvpm*UH{*zV-$dI)I6aye6Gg5 zI`FOQZM#YEWpmAMhG%Rx?*e~2uX$hiw;Df(!CzQm@pr&Gs6kJIZyRj!bKrmKzT%Vc ztM0J)jqrX4&9}jOPd48TpTE)kL-^sM=11VEs)rNs%c@&^&VkX#amn-M*TM@lHE#!h zQRl(I@P~U_{9O1*4Y*6->$P8N;2YOjo)_S`8koNZU$xTwZFm)(?>>i*eBI)|hsSj= z{|)}Dj$`gY(e;+J$>IycZ(43%1Kw+pd1Lr0%`;oV-_&?=3%o;f%hMa~*U>}ZkCnIh zG4KZ0nlFHV*WUbTc#(PLo8SZAG~WY%TjS@)@cQ#D{!94X^~`^Pch-65FL+6f|8aw( zk4u5FmZvDZv`&N#;E$;Nw1?+bJM0a=Yoz5*hmXx|J`O%|nfcxD4I2OFz=yQ7_=WK9 zdYyL@JY|x_Z-U=Z^ey@&i2K)h?rzXSO6tw)a;6FZLo&_IR-+UST<@?Ro z!TYNIH^Y0sVexOkTkAOPh3C_8KLl@B*z$Y@Z(q#(CwMuH|9`^sOtJXf>Cwlx|6S&V z;3IT?DFZL3@vRE{t%{bXF8n2pOE<#nl(6{L@a3!LOX20U-L>%BG~T`hzg6S^4tN!v2lv2#Rsa1M{)pzEU%|&|JU=B5 z=FbmW(J%f#ZfNvzucmsa1V7!>{-`$m?pMr{;GqTPt>HJR|8|9cdA-G_#_+!IboJ{2 zF+3f9{vOLeJcf^jKi|vZ?~LJ7;Wua;xHpDB0RQ?~%ReuMXTb++-o7Y?KLP)EwB=tJ z!=Hg4(|LA%4Brg@NbPxR4BrV~tZ`s>41W*4w~3Yi!x;W4e1_WR(HQ;>y!TGa|9uSq z1>W~ni$5E~|AxPrVDUMIMfWfFeDF%Tekl;cOTepKWBE(R@Cxu+#Vx*a46g}4)5GHH z#_;Rm?{BpDCNaDfe0e8}ZyUoq!`Jk;`0g?MHuyaCul_N77(A!0Uq;68@$hTZ{wKw7 zD{c63rs2b%!+!{W*YJ1AQ}jDs=3R2X-*T0H?|IVnv!=_J;s?q#{kr6uc7+-v&j$Uh zZgVMqlU$d1ms}k3?Ra_S>KCK*-QDx+ba*Mx7R5b`c>Nf99GTygK}x;v2>Ao8XyhjBVlT za#|w29sW`|Ps;VO-v4o3u3hp%xhzix^1Dxfms9+G@JjMI@J8}S;YsqP@J{lV;eK3p zzzgZ;Ju&y()A9E_zQ0A_zAl)rSLX5lIqL?9pQilD za4%15_+iC&fqQv+!M!}bo|u=%*Uy@Y`1IU%KAIiFABIm?{E`^H8h%Fc8{q@<*mhrr z`+8EozL}RlOL>kU-q-W`4!%$EKf}E|f5CknuH5=N->#R(*GY5t@>E0o2K`(gzFj{j z!M*%9!@c~S;9mZo@Nufo{%|k9ug~V?&sN<1i2qDKXTnpIe-XU5d?h?h{tVp9`4W7S z;$MSj%io6Yk$(U`Ecf-?e1DJ0k0aje$JZtEc=yZockah7w{}|uenwszo~jF)Yv2Rr zHQ_@b=nn65QLHuRG`Yrz^e_;=R4~fP49UJvYze>%L7we0#kPdq3P?pPdI^ zr+8l%&hz^^ZW|DvqWGzS?(NRwtINx%zTNA~ zeSJ1}U*FB|2fOc4d|Tvk?+mY$&&I1h@apnGa9J|zY9D;+r2G@4~F+v{AhTZd?MV-@9W)p{Tx#{7bD)w>FXbQ zd@<$se&Fug_4e-W+x2$peolEl$9DY}?KGUdsq{ct}cFAn$oSHt6! zziJGx4fpc+dTzd5Uk|Pe;xm;0wirGben9b~;fLiD;b-L2;TPm{;brn$efqj{EdP4M zdwE`gdwJe~dwKT4y*vluULIfX&dW1dX)@_2i=9UiazRR?3HNp4ynlN+z5FK-pQb#&!oB?G;hx{um-GDYW!1jiGxa{D zYVc+9I&fdd&DW{(JigvsSHx#2PhYs_9|HIMzK)sa_jS-_BR-@TW*>>+OW^5>_x|Vk zGvpf(@9T^C`e`2T<=Kz;T*`AahJOS1^85_<^85k!@_4`Z^7y)J-tXNDsXSHGZ|Jq) zX^Oud?&WC)_wx9+(X@p`}9eeh!PIq>T8N8$D5OW|GRzW$q+ z$IHJ1@m`)ia4(PdW6$H|`5f_Ho^Rn^9$$CP^Z5F4`7|E5Z&7^~kKtFtb7_C8!oB>p z;R%YrA%-`HS5kaOxbJUwxbLs8FX#KUPI)FGK3neNw8zKk{WEhBKV7~MzFqzV{J7lL zuk-v~o;MKh&*^;+o}@ef79|Yec9|13RrRA9b59y6L)8JL*zOJ3u+g$C} zO2m74*2BF#o8g|{*T?hxsmlKu;{AAi8^ce*)0OAX7@kA#YxeDW`3t}osXj}<*T^ft zeSfco`~Ld+e!ksJIxZa%zgzC>J9+$Y9hcFFFQ(5COo`$5!%HbXGlnmMPgne^81C!D zdO2q)elz0TU#BNn`}FmxJkK=k?^lRlC--%AJU+3!<;kP*-aVnBc@g+Pd1?5fDi&Wk zhS!8IR(#_a-V}aF@g3kN$zOr{x*Ko6L)x#s@IqCsJO| zWp(~^pI+Pi+8ACJ?$6`(=iGaqY0A?b@fYO%;7N6CyF=m0@^SDM^2zYl@|o~u@`vE7 zRm=UJzE^XEppC)Tz0`4#d^miv0V9$&1U#h*j`u|#uUpV{M2%Jb`d?(WZd zD-EyS!tzvr@4MN&7W|yN5&S}1i*Et1-Oju{+@CY%&(HR9di{(>yw}fE_=bj-e+Il# zBl89D3G)BJ*U8twll2Db4e;smSK(Eg*mmE9x0Zhh?=Alno+1AhUR@7pI0a9ZUw~I_ zZsp0P`Lfruw}-;;$!ZT*!q>=PrmpSKsp72KVO-4~Exo zXz`=re%vR*lN(w5ba<+KF5KJ6Lb$h+C*TLv@7BV-ojecscJeCR+sT`7ZzucU-cEd7 zWv^#%Cto4n+sO}bZzpHrK0f>n_jZz3^LpQ|x0Ax~18P6Mp0mf#YH7#C*K>AXtoBn2 zdAwaUg0IoI)C|5w-WKlTTQ|6mZ++lCzWF-OUQQq1{CddU$2Wf-zxxH97ZxCYA&vh_ z;oeW5gtu3}-UuHke;J-F_jR5xl}F>YUx&Hp(zyLG^2EzOhgXvO^Zq@LkLNjbedg}t zc|rIZ)k8^mw!9MD+ii8Y*IQ$_*F#hI8P!k67~UOzPVxO>_)xg_qw#QWhg0F+4(GtV zo)^Hq9s0ToUe8|tTM+NhN7@NrrFwoB?)Co>-0S}+-0S~4xYz&BaIc>WaIc?SrEQ$> z{qp)L2>1Fa3HSQ(^%Fc#Vv^;(9`T#>z^0b)SvoIwfM?26;d7HMe;WL-{C0R+Yl|NX zKP;aL&sM*i0Wa0w^7y(Cm-bi3_i4m?e|!nvLg(ez;C{Y-7ha};ZFfK1&yUC8KEFBv z-`?2r{08^q^%vaFgZXry!}r&ZR}uJh&6mo-7s;!@SIO(c{rD!qFC<&}+rSSrGrt91 zNaM+EaPMD(;oiT-!o45e1^4svEckYve>35Jo?QY@R6AS^KitOl>v?#Z+UG0qY4Y9h zRr2@Yz15z5Jrh5^KE9nnytn7e%2>HP-rI9txVPsLaBt6L;ohFFgL`|f2lw`z44;r> zcC`XtEZOou z3-@;QBHY{6cDT2zY`C|p{qXj>PWcS(*E`?9{rcr6xVNi6;NGq-D{K4b$HlK-;^BV% z;;&bDyw8iuA>QXjRp8!k>%v2t|6dRH>z$VHX&Q$+!2Np1*X{9g`uLoI_;H$t+y(dX z_CB~@cRvWPlxX$%DBQ>A{fzkY-JI2z4__TK>R?LQeF z-!ydbt2Nx)e;2r)FM7ef{SStF`yUDS_CFEs?f)KlF5Rb^3-|Fn3-06j6L9Y@Pr-dW ze;)4rn#C{&F7f=Zl1Rn9Pa&PBHa7SJ#g-oMJj zy?<4Md;e+(_x{xc?)|GB-1}D-xc9F#xUWN(4nMAW+8uE3k5k~@AAP+(bp;UcIExCDdN39c7%I>><;(-H~{Yb@picP#|d!nkJI4ZALqfnKRyEY z{*VH%5d-R_2Ay$Z-9G$Zw>eUo&qnW`D&jSJ_w$m_>34n0q*0;{cs;o=D~eD zc^vNJ$qKlSC+p!po@|Eu_2w>k3xE9-?&HrVbltD}0`B9$yqtN{rGrt z1>DCIU*Firlf$~dR~zxZe!&fJ?=Q{aSvOfZI>HahyTi}O`@wzwITW6tem4%jp_y%W zGJL0eCfw`oA^208FFg*=mal;O{L0sb_WJbk`Ax)U=ziBexR1|=;66To1^4m!2e^;V zXW>3R{|)!?Id7Hd_ESjhp)lOX=Q3~~pDV$Ae69ue@wpM)$LD5nZ*Ohk7u0^b(UWa| z`oMdu{iMUa{bay>JiiO>_s8yo`*`~x+{fET;Xd9jhx>iwr{R8oY!lq?-)@8Zc(ohu zR&Pad026io(0@%E)O7nyZjOOIr$R! zz|NNEW%!yD^Br)H-wXHWu^)s_P<~(6)XVSdpZ}xw`!&&y*)4f0n#8e34v-`BEN#?p7+|3#kG!;G6OqOn`5ZPlIol z&w}rgXTr1Pi{SnooDJ~m`3<(fYsA}KS$yOyi5TH`|j<{ zKQ|s1ZpXow`w7MS^NHP0%1a^swA`Oh?D1>#dEi9EZ;&U$x5-<>{qxBw@I#9C=lJ?| zOBJ&H(Q<;9_N$Uy%TrwP*76MG_vaE!fcx_hGT~)v*>)Gf6XeU_<7!*{8n}NxWdqzl z-?RmuOYiU94)@QkWW)V)EBoO7xspS0|J==KxbN>dxbJT$7`(z?eq8+XHF0qN{7WIY zf1ZWUm-h11M!eT&BHZgU8SeGj8t&yxfqQ+X!o5EIIkmpOzF!j%e_F?V8rJ(_mySC{r<*2xL=PPqU-%O$Kb1UyiUOVxSWRjaXAO~;}Xhc$H(j6 zk4qf<()9)0?~9g#`}INs+^-j^!o6SDhI_wGg!^$%hWl~nbGH3;jTFTD^@TrI+v~xv zqcafSUf0DF;PLt#)--rk_4iqDzh2IS_g4HOc$$0}+{cYI@Ix9;Ho#};{p4HV-VV3J z{rWc>o~H3+AKb^8L-3H=?J;<~w`X{5`DwV1OXuL;FG9Ja+jCkg`#BEopQ|ba_i>;U z+{b|gxQ_$={B>_X-ma1nZ>0%^TEnY$x8I~hc;t0iD%{sWSrQ+;zn*`0>3=;kPca1q z*NG!MIQ+eo{_W-WUscyX7_aHVrFqmA#Z8V8KTYoWQ+51y#fazih(E8pzUFl-Pa@`f z{=DLGG2$m6-k(FdE=D}(z5e{zlQH5sFZJh_R@c0O<*$wThCipz*Y{vN=V=ML{@N2G zKj%fWbbS=B^8)i1!ui6VCsjX2d?Mog`ErwE#PdAv&rjPHBcA73e~#J781Xz0rWCP; zRz~fP`te)n98Oh7JRT$d1oFp~u<}>ZIKc8pjz5w8y?2cG zw21K}XfpnsnN>03*C2jYf|ciZjQA6XpP+%HjBZr1{0VX&A2MrLeqTp|@#%>7>n~qt zfbm-p@8|b3G0Jle@mq8s&+lU~zu(95^85Wgf4)BB({=yJZUG*a7{<46NC2;J`71#*XdRfA}De z2)19RW@6}4=DuMVI&z4%SaaZ@{&x)NJ9OmWQQ^{D{CB_p{l^R%udNylA2lHA=YC`Q zjT|y4I>mp`@S!8a<**dtt%hn27&T(VppoG{8aZm*pqe*#>{es!xPAj}kIFrGOurF> zREhup-x9)q8k_>uTrMR_*1!C`?!Sohf9U&F;qO6LPu9==ZOt_{u${ikq+Ix0upR$< zKVMgtYZ$cP@c+{_pU`cjORiz%($7J+407`CC+P1_T#B@R`1YL}hW`wj%OTiZ_v zl83*7?FU_u+fNJIf9?N<9^qevzqHJ{{Sf}Y|Gh&n2Mhk5^*Y%RI?GSwf;8Pe$nuM-2M+?W6t1DMr->Sng;|Hd@=T$u>IHe z7is$&G_MV|Up)LDxBvHlff&ux`0Vn`$-7@YE<|?Za;W=?Z394Qr6Vh#|ejB{NnciAAOK+H~;_u diff --git a/drivers/power/sd77426_fg_mmi/calculate.o b/drivers/power/sd77426_fg_mmi/calculate.o new file mode 100644 index 0000000000000000000000000000000000000000..634c8346146847ffb3651566b6c060d1ea74b2d1 GIT binary patch literal 219736 zcmb6C33$}i^#_dK?<`>;0f!KhAqiv>0)#aIf+Pqy1kgZ4qX9(Lgs=p|5(&X5QKO=w zxCB9^YBjhOtqX0{f@@rAacPTn!&Ylh>)QULwzksR`u}{+IWvj2@Be*Xo+mTsbI-Zw zo^$SgzxO*_H1m{`e4gjx|2+3|*M;J#&K;iXPk@+EF_-T8xg3{Mzb@$J4tB8v%bdSH z=5upD4**Bqj(}@Dqla^8IZ^)`E5WZt+SATgAM@PYtMRur;QD^#_urS}0`=av-_DJ` z65Z}PmhJEGFMIPNzjt3pAa;N>^Uv_P;;k(g>}-v?SBJX5_94z~A6&O$e|}x{{&vVc zgTFEtsJIciWP|}J}E-)_xB{MvfVjg^jo+)T(n?b7P+hupND!?q8B-0i+#{bj$sOyoifVx^-XcRA$V zLu@G5+OuGL66BV-r23N%U7mSj(4F%@KR372pL|~~V(LRIZ-?x5$ok+9Y1)yCc)GCL zaiZ&4f8;;k&iyvv>~`x~~{{)*;@^$N0zdk!HSKNt*9=Uk}NbgYr84Dff-(bLVn#Q7@ja=j`pOKCmh1=M+Uk~{q>{FSu~xy7~g$lBTx+xY_i%2E#A zT;aLo5bMSDNUjg|%xd+y3eEG3UuK4u)zkT^Jbbj38yQO~MkXw4Zh&KCn_5P1xr*l0j9C!}A zj~#4y`|SP5^YX_nfm=RKdE;i#+ml}$vHfi5bg(-vJKKXSV&ow%^q1{77kYA`Cl~+^ z^>DZA_3~ZNa|860dHuJSxgIZ{)RJ_|n<;PJe8i=1&uf`=OPTYwmwj{6&S~FV{Bn(R z2mV?$?cT2zmEHUAEzj?b_anApwBOQJ=Zfom?%}WSccb4u97P%5muFks@a?x5%yY!w zZv?(~+?nN$-EpErA8@zxj=( zFPC)H$#j3E$}j`}}A z{rHehd;J$6pT)Ecwlg1mC}m7xXY$0BjI1Mlp37|XdEbfW`x2wrF)zS8;@d8cy&drL zV)Wzc3tg6%@=WH5m{+d;*SB+N2kQ7hF51>%l%J2-m3gga+__WZ-|6o^Vk_$45{&n> z(?jeNabNx2xHFb}l1~{7?c<7!YY zaVu<#wz#Z*i20+^P9K$a%67>%*$;o5JNn~$IqIPuf2;?#S+?bWH3sjUjyTB*b( z88g%|=Fs*@Zo>3P>_A+{vQ}4GV|^~S<=6Ws)s zyBWGWHV=YKdPNld0I^7RD62Z;P=Bavv>VbFqugAS>*c!%(`HO7t?BKGry=hOj0?9r zum1BCH#Y~do%7YVbF10rkSE6csOxIjeHZGN^(XUxk(PrOn?o5x zk*5dBi9&DOw@WT^iSZ;ChB3`u6qUF~T6R|)c9Du4zgJ%| z#LcC>w2$_8=D7)MPe=TL5qFOF?YR2{ckHe$?tl;NuM^|fNf^7H4fqg8w<`&Khkmnv z-?b%n;O-MtM{B@MIH`v#W;+-R-P4e_+Vsc9y9qUzOQIMJvU>y?c@8+`J+0L%{^xL_tPqwuh)XSSbPuk0sh&$`$noqRf!zLLoTOpeZ{a%_Y zodTIC;_yEF;rM$u#{PR6-2p#rieX%!Z?)*B$eS3;_FVVfaiBZzp2pY#@fG9dFQL0L z9;@l!k5$%pV)Z}cRNy8seGlx*gKxE{r|GCC7}FMMn?5`jbytSCZAD$SUgTw!p?)rJ z8GMT$e=nf_Jm0dlq88r)f1skerL|(Wa}{@>4b!GOt9&~ihwi&ibjRX#Hv@HdiPc^0 z&tj$Y>+Ta{$Naf&!k(MpGsZadtNN|I+}!q?&@Z4TubS(0SARC@r_=8naR<_Cvmn3y z^x?}OyAJ8^WBt2lr#ry9&W6qvv>CQS&jgN{YzMjMd;6PqoY9>1z{c2$*nt`73sL7r zy2{%#T}vP<(o%9uF8)4q|4^AI`DdHYM%-T_h zl#lpbGHv%@H)HMmZe#>;&b2vP)*;qcmLso+dZ!N73G?l4iDc2|$Z^kPw*OWA?w*IT z%tu)nM{yRC&!KZsL=GCC@I<&7`#9|oYa6R%JK^<_-5w~wJ#+q8JH}X_YY-Hbx z^Ya!X{{qw#Vi8Xxy&k#-qyCO`tM~8Au+9fsY{8T9FWzoAUUCjR5qionpL&Q}T>mu8 zebjXa?4Vq}`8y4AaXoi|*Bj|R_{e%|$ME#$fz0|`o ziDg%#T#i2;^t}eTu5mg`Wa4A=_siL{Q*2C(*DRO1sgwGCY-PsN*e5s#Ek}BMzYt%0 zala7XD{$QvUz@dJ45`5%eZK?k#D_IlJM?h9Rf?E8^hwS=T=R7zJqL3Q_Zc0a9oho> zPY2dZYzvt0OWS+82_>EAQ^~HFGK@RrB9N;JAfD0Kfqt%EMI+W*hmr3h%zM2<7+WD1 zLq5!@#m|H0dZN|zM%?mZ6<+Y#rR< z&pP7wDps`Q-?9~PycFwB=lm7ZG0!Z=9LoJ1ZOp_P=o#8)b<&#VCOj6#{D?H}IcP@| zI&+~vzVD;nPX7S*hg}Z&pM@;vdCu>7gWZH$`i;5r4*w~`YcOB3&TG*xW0>E4e$*dq z!~U_aCu`!hJENHUJ?E2s$lcJzGTCn0(MG2S%1Y_`Xq>TeUogX!mEM7Ujvr&}D(r8T zV}8C9W!0jbvX-Q*=~!FTezSJxa;!!DD67o*lNqzJa3G6uTLBwCxU=ny+9~&KRN0jx z%RLw=;K69i%eag=_1TILo=Xf_);2y5ino7-ZQl*(Q@f)9-cgpFUTI%1S#uSIqi%Em+?{{|xAV zA9|NVudgNVmNMv!p?-6rPvU!=n;<%1`yD7}KXkUkmQuf~IB_Imi1m@fIA0CF$a9F# z5r3wPy`W{xjr-eSYZ}%Mc+#FZCdd6e|DWGZIQ(gRPM7xj9T^$pKKZuz2<^8z&qaS? zIWhD58SvuvMdNV}>Hh3>$V69XRvmfeYV`X770cVNJ~9S`(7^XoBnK7e|B{* zFArlQ`j(6rciXt%{T!m5wxNyv@qh4s^gq%9@SlCB)ogWde9u3Olk|@=lx;U1NR!yG zEs)2tk>lm#|D%jJ|IP%jE4FMG*IK>hqP@oTHh!-h_H)+T7|3!?<{E+fnKFzs-=8nb zU?*c1LpymMdVJC*Aa6Futj<}V(RaQr-qYDxMpl&WnD(RlQ_MMrUl z8Qsi=K=tOVx+Hp+nM_w$)V}WN-whA=HEX3Z{wsZD;iHmd^S@E&n(3d;K6f`Fq_fQQjs-4iVI* z9xo7jYrBWh%K2`h_`jm@fA^D(D_1ntTCFnv{~dcqD3RVR)|yVe$n#(Eo``?Z?*%;( z<6bWMrE>vla3N0=3El0Z97AyYpD%>aVt}NID(AJL>`nBQK&MRs}jttB?)rS zo0P+|yF^OPCz2vLdo`9ge;B7mu2&PNz88^d9DBU;r*i)6)kL!2osv3!ob#tWBB><% zcS!2-#m=ApvZRvCco$@HC1RICbJU^0af^`9-H1S#F%!E3*$KM?V-t1<#&wb9%aL1U zXHm1C86E~<@mAIXI;!NtE^-kwXzJpwa+Z(`hFB-U3l=9zOX{5;&yf`VCPDUNxJ5Q8 z9S>uT%))xn$U##vkNZ4)#8aZp31;r4333b#S49)AO^}m+kRWTnNN8B;Po%CMkRa=i zB?Q)W*?P&Oguta;q!CB$3+jlrW6G z3(3^Me8CVoe%9V&Afy!p;|hNN9+EWEJ0y*M_b6y8V2)&h6yXL#e*_&4^;i`}x9>|! zdaP#KRI={$MCzKwAgz=h=QCYO>9K`1V{{AYKx+NU^IVS$*ydRx6=PpSyUzrv!Rm45 z#R&}y7<-rYcYKB%p3cCY9t*u&!A}=Wi@fEaU7WSl`+0)3%vizDlSs>ub`?rtT}d&a zo)bSqdTO)lS#mv_X6kvaXDO+Gw!xm0UIbrcW4+RrW0Vl5diDQIq%q~VUg@Mmnx27O zw+kyBVVELH4?I+JP&y3s}5=n_QXD-_w=mmIw^UR-i6o3s|4oJZP2n@rBXFCj3b zPa??4LrMEwIFOui5CW0SHEUgRgfSdY2Rwjk)uljk`tJeKsK**?axwGt4y1&8Bw2|m zsa>U~^kcH;{7lLKDUFMTrSvHRlva^)oD}v^qMT4l@6*6cV+QpiC6fhPkW;dlmFIgX z`DM?D!=8ja&?oIOa3w^2`ZJeV+GpTeq=y52rrw2bDY(yxOfuj4O!+xLS{qZeGW*P; zWbe>%$#3CXG#-~i!;F7i+Oq&SPJvoq_>94r0YoTVMG{9JWX$d0mrubwf`EbflOPrH zIsbTk^G{-v<9uP}c7DpvjwgF+Ww>t`+iRD)c7yBNmuD>ocPt?odIiR6U+>?K zNus-d+PySc>Hab(LG%%@dq>iS_Ct)+gkc5j=1LbZ0)ezPe44SNX;j$tj;0kYNMsqi zgb~&(<5qz*;qj!+vtrh?c{V{tiFgfBPq-j0>l%EkOZkkal4Cj(6w!uqB^pq9V?yv0%SsIEFg@s%ODg*CWvM<_`b&JbuK~1 zW*1b1FiVsuxYEbK$I@#X znq0=!A~r)g*9s_CaGj4_ zJyK}1f;)X<;Av}m<4Tutmu~{*j*h&In_R}-z9FZ8_6EZwm+>RtR7f55@>Z;M8Ta~j zf%Ubq9`;pZSU==b!N*1SVM9+yvF{jq(l-N2It@ML%SD7fG4zZ`hWx7KS>Mxh&}Ixh z=i{m*Z0LF4Txf|JIw&zKF!Z92b3&1!mjsP9^sdDd`tMVB@Buu{GTNZj3<0y3EA<4 zf5vqbn2vwNb;J{#pAA0X4U8xBu!QV*LQhM`iYN58gvh87FjZD^TDwi~JzwAWCre*nDQXQuUc`ffg9L&OhLE=c)}|@88Nm7~1Jy0$zimUHk) z=rMmIEQ=cYz|Z-sz|cqjJ>V4?`po|+P>G@c^M~+QA!g{Pe+eEelpFfe|2LpYLtpv7 z1zKR}Yl&dBp=18wT-1@FfBAPJ)(wVy0XF%)h5~~28A=kg-%zi>J{;q87)l9L0v$Be zJFp5Ky<(`3phJdI1Hn**02 zdy%2$KqEv-3~dRtfmd$matT4Dp(_NjEev~mm`32?@0H}qkk1Co0UeG=fRa-X3u z0_?E+4gDvOhQ^0gwJdX^k-mNV+cH;4Z0lI-TusSt&#z1CNMEjPb=xsu(#&|C0Vj~; zBAg3UOug9k_MHzh7+Q?ax0G1G3kUZgc(#_~M_$u$^&k)ANGtt63?#4O~M`yMb#7?lN#43*2jDfM=LiS=PL3IV0z>R%MgkrfcpL{&@n&F}9H&_m8#JK@#&%&0I{v8uv@1Q4 zQ(-7|L*qGaP$|{v)^*ScvK_D{mXkLso;hbQGic_VdjcpW6OleF6urf}2t+Ovx#+DP6Ak>(qxyiu7!KBL-XgGihjN#<<6HD8Y2A^Nm$+~G zbC+*NiuAX)$D!5{igH~!F*l|P~d-{M=|i0=(0@@H`4BboANN~2BNorkJO`wc#eH2nouf3eapa@;M^%mqX8{u$3a zWH5uEiiYGfIpqAka4^R|8|Z?eFaQT7*O8y^agQYxmp{ytk`)vP2q_rlF@Lx_&~1MH z7>`@KsB(^%Ji33+pX70$7gNp&9)qG=_Wa2rrd#&>nO^>|_?A6?j>iV5o9z74yi>s0 zrV7sR2BQhJDVQe;b}Km3>kqMZ1q(d(&Akd1dF&Va6x4WJN9t!KNhsG~$$nlfl zg9LWS#8r%o(j`m|=u?^5Bxiu-*G$nNlW{%S1gDS$i^Xxu?JgJ|65~Xz8mF<|jh@~C zQpckqGf1c4{u}=dIYrt;WN75wc*db}46PZ5W-?hb4$UIXd4RPb*+N5exWtw6hDOOY zMtJB2xu_6jT=)SQN?#=UtSt>2e0E%DSbo>AGHe8C9ae^o;;^C<$FMP6Yp02#VTG(b zo5i99nXG$*$8CGF-(oWS+JQ`# zMZ}1aA3#`6C%=1ADgIZE7{3~_Qt*i44oJFGY?4PzV5&xK#PMB+{UateB3%zCN0g9` zYSz*VK^G`JiL~~@5hvUUx~x8X~s*kEWYNEspe_Z@&-LXOPlV=3{iU{vxqkdOjLh55wDXgPt_8X1+^ z8=+B$M)ji^QJ35UNh$n5aZf`-Fho6~esupqNXMBhK9dV6#}6b-z?YO79ldH5Xeo8{ z>aI31x=v;bO<&UwB3AbcMmOG($gqieEOQgfj;5Y_jvL+lBP5rn@^EkTc??TsJO<1v z<(7?da^0z1Oge)eRNr~YxXH16{@n}qyj08NL9Wyr#sUe(%=bzfbQr2#4a`|)Vy~^g#pA(Ju zi2O5IjK)8IDe0(=we5vZdKAk=k}G`5E8L841y6gQ;4-6*wS^rXSJ4sWJmYcD&sOk) z$DSQk@Jo-qxk$l584wpJcu_#Lf|mr;DR|j?;yNs86ucswW(B|U#$SY8mV#f)oV``S zZ)8Z;QMmAs46nPIslZqmgEM(_kAstn zi%qU*9iML&fnMc`*602NElFiI3!}+Wpr`SIC$Kk0 zBcd(gg8VsLhYkGu0XVkbz<&trAbqUo5!u1=*nr0kMztQ%j_u(Uy^C?c zP%lAkhI-3L&~B)o3?Fs~Jhs0K8T*ZwE<8ID9vks4gifc2q+rO+bdLazFpBOsb8;X3P zWOOdpMU>f{SGd>DHFEl@WlgT|e*cmmAQ7Dk)6fI{v0D&v1rPc;Cq)%Jbn&7=OkS7IZgoS)00w?x5yIlpDkh3W(T*AZNOWLNl@pRKH1Igk4nfm5g83IE-@ z6LZp&a!TH&oTvOA4Bf4uLk@iRD|pt=;i^NyF9aM^@S;3aIHceu0i6n7@pJM$s^C|C zPIq4;N?&0l$fUh4Kg$~y%`fv#W~4SQclpz0YvUwG{tRh2k@$>2A=yDSk9$paCL%TN zb?-$CZJK4=8v;VgdDHs)&a(i!m0 z)}v#9#m#X3Dz64Wa_6s>UTdIE7+lep#-&U0>piaJReG)Vcm?Y`N@-B?*L$2TB3KRj z^BcXrBjY(X$#&DSH+kHvSdPseSJN8C{ATZEWYI9@w@3v=wUi446eze6iM5IsXA!p4BPm zA?d$u3LX^;+7L-G9Aq`a?9@(u4xNIHFLoPSsx4;gyf z`!{&@P(1%5X~q%bed7HEt4(`Ep8vU=Dij#+&)zrS*(37&ucbVD44(flK{1p3kFM~5(ol+zTd6qef#2nDeZY2|!XaBXicIRF(9_seaP*8NpPXWU z3@B#~qvIWyDZ$WcbT#YAUn2qGg!8`f6X~d|bH8X5-_a~)KycG1&)b)*Se5}Vq@nzKbY4if8)cADcXK}e3F)*7CLkkR4 zX?$Z|=h~(>U{L01g{Cb04hjG_c@NfKNQQ?}x4C{y#uUsJK%u zoIx898w~na$;0|!NDt(OgDc}*-MBs8p8?W0ud8w6?&vlijl0uZf{Y>QJ>%|@&030r zyQL+B72G2rlFoC+aX<35J%P5B-he~Jarb)H0u-p&{T@#%ixfQQ(ToxW4|!ar#uV%m zPI)>{HOD>b?Sg_zfVFPiW8T^e5@Y;R9=8G2x|^*lUY!)CtfUt&fTk#0* z>4e-!p)J!Wk2)(g(-;|48x#~teqTTr#3-^taZ zW<&2tzE(r;`WnVMx7E;l!rNv@udZBe=mU{#GxVX9u-nidrG$NkJ{LRp8~Tf&4ntoG zI%w$cK31|zSKt5PlkJryyS(_3_sN9ZW}` zV--oyDxNC+M4C&i_!RFzqMGK&5NUOGs(^r2;AsN1YZad%S;AWLFCw?pyiXfeb@4ne zf|#Z^)Hb-{`QEwUo5ls+7ocOR@hp)lQ?OV#rz%+D6(Ij<&d*D?B&`?tnY$#8leM_q z;u^0SX_|Gp=rK?$3|y>bK322n$-$u%{>gb|ah-QF(lNZ_pM2WYN}>HO%JkNx;yoUp z3u_T~3vIxL66Nfb-Vs&sGj9#D=ulGps6;QOoc+>o$`u^&&V!isHJzOoDCbk@c-0C% z6V-JJJ{MqJ^3V7Y9E`on`ARsg3jQsHZd2f-rFAIq`z}JE9op)Wv{&iwt+=POLEF6* zr%0|=p_|VLpUDGMf6kfaK%MxT4bBgn2ShtHg#X|%=Y?4Ez|Lr$4 z(#JjE6NbhJdeTsl`eSIE?>ahUXuR)splFg#E35`Km8 zT6~|3m8$s1IwUB#U+(dR6g(h7jW|CG;dp93`QL?7jsSu=*Rsdx^N)CHjusUw{$b!2 zq^ZK&gf`F~_%RqUjUY+U)kLkp$JdN_XbX| zLMIH7HJ}zcVVKO=I^awwkn_xt8@p!3Mi)80->Jychu!h`G@i&B-JcVFSkvW6eHzXu zC-&!(M=nB7OrMD+WXH)9GpGdoOfG|zpHRG$5B2~GWTiFqPS!pCuO70lpT+z zFBy3}3fBzPB|j%htzYj-4txg6(UKLTCn8`xb}U)>YmjE;sy~1>%U1I=!Xj2ji|sK+b;&!-p}LRUF)5Mx z{hxuh%wPNpv}OLwpFu}d{>zjTFghsx*F4Y#N`G|{Xmj{m-kH2gZI~W2LE#p%zivkF*w1nnqfSDD6*L>!LKBm92GAnn7CYqBO!7Xg4Swz_Y3t z8jUN>{L6!Af#O+d7WX@KN@stA^aiB|vX!#gF$nUAk8Y>1C8e;@r?82Fy&9>)W+a4- z#LMG}42kARWCZ(`IGa(@&fvQ>C9NJ_VSKF~ zenrcz9uCoI4N}Rg5&-e83n6@q)2Zk6*rxEX z!lZ2~`L;a8*D%})Q&ac>7v2*`XnZm|S3G$yXbBm6nYvGtk>LP2q(4q@NP)vj4TfHe z^Vtu(a;BKjU%^ghx9nmeQz{a2&Ov^5Kd~W&UZ&8!6zYXc0cHMz)arx`DR5Td%R1vJ z6k_1mTU8M+P(bJ$Bw)xxXXI!%Df2<#|6UntzbcwE%s<)ca8ki`NNRmf8XiKj*5{-V z{XlDdP8vBLwASaOQBy%{eNGz9t7-*qBl-e@Z@SZU0k-W&JWf0!$gsQxWY8 zQ%3MCqE+*bS9%QTee`!qAx}&8Bi0PYSYGX~o_s=Zs(C$m z3d61um^_u1>nuAtMv;(cn_R{jyg;Hcc{-z^o=%?8A2OBBUyUS^veLqxGu99}sqUR)VyhH1$U4@?M!r}cR?A#@y{f_HCdqki#!U=CuU?XT3xSXtAe6HQ&& zW}2m{%g&|hs2E??+yIdRrO*2Sw6>YD^N&GX+f3OO(xocXLVA+Y7mz-|<2}tl#-wZy-&jjYZCrVdE4zcY?X*vq-ASDhmA{LT zGQ02o9rT#3_t2jb6uB9)5}cT?>I%8GXm9r&$!H59(@-({nPB9EuNf zlu`K^BWK3tXN=<8`5M6)qeecoMCoQHD88}Z)or#P}_PZac!O)EfUVpy-ti1Gt!uu&cbs<+C`U_}T zrIq)jcS`n>Ia2bJC;u7}y+h@B1Ix^p^1FSOc!q+A;r>i{!Tf~4@He^yMo_Ib zm-3M;P5mn$#dP==E-$(?k#TG{&ErI~mNH&4;wD7-#DfXpl5WDK-GnDmvz2nfORz*6 zR{3Po5t=&ptAvtyB+ZxkblWnXNg8KIr{gO)J<%w7r<5-o3aDl+>XvzN2Q#~HqIm+=@gc7tnAemrx;{iPa}mO_PwPQ8(@hh0B*;onY1SJiw(cTeZTKuMpoTPuG)TFb!IbY9SlA=|OpX2T~BW}QuZ%_|v%V<_>WEtK)EH7pSYU&hLiIU5@yje+e zHFYh`bG?gZ^*#k!rRZ6`S#)<=YhBYdth0L4YTJw!%}QB@%xSdCTIj4kR3|;Db$0K5 zGfmy>K3y}{YZB;)!Dh+qL-`85P907^zcJpL0gn zvA`U;S*M=Oky~`?*_`=YyhJtcSzSxEIg9z;SxnQHaRswL>E)|nX0_6Fq*o}thI#9h zUd!|brPr}TZIU@{PBUq|_}Q%RJcWarRq{gSYEk+kwuV-vFX7DIru3zpdk&?p+2rP2 z_4EtzCuDQl?g6bghvw{J;O&vuoSS|FhFv3?^Fzk3Ri9YRXz+YLO(irm{B?CTEpcLyB?9%3H5yEJDX!6D=PgfB|k)3iB1Wotfa z906Z<2lf*RDi+eqPji08JmKyj(jDNf4Dg+b6&QG!dF=Mo904WWIkE1b+`uEuQ`sFX zFz_gQSG9qsIQ!aNtT``!g&?*Y=anyh0if5S=KLmzHT+=%zhx8XH1Jv&oKFn=j{Byg z27b>u;Y$PW5d6)+A9!2uYXe8Pg?0gT`{P`EM+4|7)h8iLp;Oo0i+IaWeCqmlAs1=b zw9%c~KvFwx^wg=W5@~6tR&+33>4l_q_&l}cDu`%5I<<}IHcmw{zT}(Pk|E=7T|GYI zE7F=F^>}+#o)b*oB~s-Ch*F<1{1V2`}xGxG_&jsLU9>WML8M zkPAar{xfpt!xTR&zQweZ=f&o71-}qbso(_x3l#iPK(&Gw1=J~cSwhpG;Mej1#=vjH z&SvGj>fuLF?M`pTYXY{V*KA(xGTxOs=scuqXJf9rPXD&t?` zwUzLV04w3&0;~@IBcMo2_*OuPf+QdB&c_t=@Ui(@+(Yt6sB%0V&d3vh*~_Nf8H?o?8Z>!{{LX^Kb*TVPIm-n2 z6jTfF%a7f<08T8AAXF2UyNntigEj&0fiL&TL9YZel(E+LO(K}AJT(?E8+$= zN?%60Txq%0U8(eyysV-NkkhUrU9IWcN!KZTHR%SWuUi2dbXjrQ4lapXHT`;?8EsQ~ z=YtPo&QH4zpSuybhY+l!&8OlFh`*9`xbl9g6UoX4x|URx5B}-Lh+bOV1Be^W4c58J zpUFIH3zd&EdUa9@l}|8wYgNOO|A2n=qVg#y zbDK2%Y0{gOe(u(Uca<-V2Hl$WIZD}@b?Tv-|10lK}zS&c_`j$PS0BaI;`n~Ye7ep&gaQqROun>kzSzm z&}Tsx!LI!%Movwlp*gAiZ3N-Z=_eN@lul#Zb=sZNpUc#crl-G${=(x zdy2fyYnx%}1W&Fi3wB2hQ*8PX+6KfC4Wc)ywV9NU_|$rC^M1)QTWx*w z4uW)xHSde0tCfC<^onkDozjQ6cWX#Jce$JQ+Xrq$cf$DM+&p<4VYlb!y}<{zF60u;P|Occ)q+wt(7ppk&YIq{!Kr>C|(Kko2sERrs?PM;JF-T)xwm1&;#ImZ>$WJZ zY8Nm=Id^)g$fGNzs=I_!shoQ}4j8(!sk&coPgE=CC$bu>Q}A=SG2M`kfu-t6S)l5# zXjMHcw=bGi>Up`B(W2l*Z`7jrYPIUu-cW!J<-F>RdY-q-*h{P4@Yop-E9Xs7-KpR$ zvGYR(?}{~_D0ojeM-_C6(R$yx>WFZhHiD}61qBR!C@5s;k5W{Mp^v?R2vFG2C*EM7 zh@sCsju5-`mT%SP9=oFbzE#zqrLlGz?+cIT!AA`p_1=4i`$uWyRe#ZCx4uwQ^*68e z4U}i-?_!z#ic?jpEIwO|*H4hWz*Chbw}iF^@>ZSWsxD<-Rr8F;^W(8cI&F@MBjAy@U`WON$F1C`>C4d`y2rb8=B$c*xahW zQ&Tll&^ALS32HMmOYVH_HdNu`)82MNbL3jK{qjy#rEeBWKiC6Z`bKnK8Si5YhVwT` zWN2G3f~3*%h&80?qc{%e7{6dNX&u)Wj2Q?JRhdFgeg#Sw@yBa*qFpeS&tLg)rwY2I z$ZcmuZeM7{oHd~9md9C{ylJ4Tl(XcWYc2k)?7c|W>EdNgUBJh4Z=z&3_lk>hZz_ zXD*HheBr_+pf%tN7uAA}x*Y1`5R)PwZ;|4RhA49s(u!R)jpvB;!7eOUh_&c}g6p%cDoUCw;!a)X4RXEV# zX$rFqRw~Sz41?Jef+2=Py!r-&dL@*3<%8SeRms9V42?$b4(2ubPBwdO7YpxNfn19Xj3pkz-|R21+*&|C19_D(E|2qjr;|OJ5I+T8n<2zPzc?EqyaE zdkv;F)%8|j^V!&@D0o|bj!ZpX`g;ND@zPHDwYydo`!KK=<+LmKV_+CY-h+ctm|OZ$ z;8t+H)>Y-wPXj*!a{7+j(mw@$3KTN*g`No*`ZDk&cu_-t4IBh2F!VS1^|m5I#{`ua z`lsBfjv4wU@N48NH}oGVq0*2Sd>g!KL&4yOKy`+C2FD^G4Th3~Ux3$aC?z-wsMXMM zLH6!#hWZA%&bZo_hb_a>)F2l%ZN^Fqa)8}ssDF?{?`}gG!Hd>8{K%GuEE4pgW9>7P z8D!_!ZzwDHPZZu^C_5P3fJhq}7z_g)^5sk5bAozjvBzOch+0BYJR#Q-g7JhQmJm41 z$D!=3$t*kG_%?tpqHekLx8$gI9})&JK|jCyK1esoB;W7;|451kdtee>lIqJwbJ3@3Sh4pmVVFJc|)B5m1No(bqCVA(kA`RpWg*?3+es8;!6(sfEtAl;z!@uZuTo=Cb? z=@RPMrgSOkHl-(#-mUZrq}!FAOnR^E@Rm*CM7K|N9?PcMaJOIKi3*eUVJ%?Y>7iglMf@?RyCfYwFkd zI2m^+=UN|!&4UWA6L82SQ(DWTX|RHNW%*Q4eH^D7@vk~8w;YvD<=mn>;p%>*wXUku zNb63xx<6^Hw`%!qC|$Q#XE07tEg)1A;sh^BYxG_n%CAI{l)rar<8n;-!d|+mYmd0J ziL{ovbTebE#)W_S((w6O@OEmog1}diXg`~@szKAia zRQh73FHrgt($z|Dy&HP!l)jAV4N6}@x>@NfNw?yM5#7@5KZf`=O}^%F&~2$$6J7T* zsNI^{wlFE)u$ErWYH8Os7gs=9SELZD7JNyA*tWF6qi0gNOV5!v3Z1T^HhK)Qj@e5$ zd5`0CAgp3dA{J3_t{mA$6*PMju?*8^%uCPrssRd=v&CxwC{l2NEC@>!Tqq!>;38Q& zmn&%X7@$f87mL^e1($fNnra1?3aG3amA zT7q+ikHJCRyQOn|FN17wIoy}lK|-sL6k^A-rC^8-CUbF`!Ve@|4)=qhO#rg5W+{>l ziQ7RZvn18ieP7*9c^1Pe>ni3ud+*1=lE8+S{=wg4eLR*Q$glBOU_X?Xx$Ouoyu2@0 z;?k3sr;^lHe@JN%3pp1xq&tb|9OEv8mfb%cYyUJ+xeU zZeSdwqVZP3EWuDcMs#a7cOb#Y2fE1TKql=MSsobTjUhN~Vy`24QZ0U{0jXU%KILMK$`j#yjq#RQ$@M?!woMZ8*ExZ%q(Ad-#b%4}qq;|qZphJD|;cAa3tv~ZtTmCL+ z9o}nak&dWLCF!Wrr;{#FdM@cArRR|@QF;mKn9?grmn(fXP1E7Mww~qc&|SN35z^05 zne`n=*I~T2fwbOTtUZTxtIBL7y;bQ((mKA^Zem$&n!cH|j_|eTl5W@ZX3~3=K9BT1 zr7tDDU+F7IcPM=|>4QpNL;8@?ZKMw?y@Pb8($|yzMCqNRk1D;Jv|gsH{Q+sGCquP2 z6NC)hN)R^iLxPBbc7mvZJp=^??jR^Ka5sTHg{-}YAZDC<3G9(%?R^CJZ};T5iP4WA zKe1No`~m`fseWZP4IJzE2j zK5>W8rbiM&P3I+qHq&#JKbOykwBU|aXYo;vn!RWVl8s)>*JQMJu3EyZA(dH5@rcsP z=ulMYYW}=gk7CB8XP1VTBN z$^X-&b7bL_KDrr8`^)vPRQWgfcrbH{f*XB2zt@?v@FpK0JjJ>M zoygBVJrk|fMmpK_w63~>okUyvwrOZrMqf$V`ruV-L5Edl`z@fYKVGvBbX3!?{RQX( zrLTJvwDrw4($+V3{0VeSWv)-&f`}@;b3W)wrFU%sZT1{&wptDgt6f7sRDo>F`CVng9Ga<;qI&~rgvMBHcSc|rRP zy%6kxe!DtR_{$*M=|SVY6y&PtkfE1@1s5eQQWXA5>~eY`qVU&2{tTu4w_$~^2YHu4 zej5|r|93%dJqk?nogkZak)b0J-x5O~1iwJLiW&MS$a`IO$)fO6L3XdA@K2J@?o||i z5#$e4@3wqLgVhM1-LfeBN03)Q?UqI1e}cm=KqO4^TS12cdAy!m=#n@a9yOkq#49CE z??4p#lju>@P$-G(f|#M?B(4}*4W%S;X0lrrg?)s#+jz$buRVy4a|}U{y(xQh3Y%Yw z%(=MCgaqL%B1b+}fkK`dd?j&?!^2MbJUK4fmJp>9{XGPxLGngsQt^#(agGk68T>u* zL=F>T2ofI!oy_qep71ggI7q0e@~hgx&^t(wZ4-wKJSH-)OGkztylM?ppJE`doeIv`lKUGg3_@}=T6bxMfTGYqZ6bwdRQuQNb(X2T~ zQAFKdQ%I4h%8X?Q3Sc3v(kfU}yegq$0!dRhk=B}ulCEg2DP^T+L&Zl>5e%_VQ4~5m z!i(gowKWay>;e3bX6*s**_j)WE;1$ceLs&ER-gJVMZ~W9G}2mFeL88aruqzuYcJ^e3j13 zELz|9{5WI19I&d;dO2X#b@=+UuFKKu(^+Xz^|4_?%5%t^x)DFRy`eV?(99e9@IO1! z_O#(R&Tl&LZwS-UYO!KNUk18P6@?pmeN098UH*n-{;q{ft=YKRHOPOz#CLDc$@nMv z%iTE<67UOigX@J43CD5zGW9tFsHJy!W0+G1q&N0e>7LB8F||KZg>2OStu{QrY6+71 zk~?2sT2yl0q+Fzg!}HHe|MX%%8>Ex~b>5`LlW16W6ZsTyTB`ZwrUg zrh*ktV-ZpDdH&)h5aG2B>J5gT!zZ0}MTJwn($@Gw=0y3KQb!xm4?M0=LJDSjf5n6x zR&bJBdWfd$3zbTz>_Gn?7BJ7k}z@|)!M-j0B;0Hth0+P5LY8vX@eX+%@X_&`4(zrDh$X!bf zRnu?*8l9#Q0*Z1W>Y7H%FQvy6jFP*n)e1(-b=MUN#(1)AR8Z&@ToPZhH5EzyG%IJU z+)!;*FwQ#}V%xOEZBFCc@Vx_@(|>U>S_%KF<;@v)gR~a8IkFF+t5Y`}|5xBa4XU^s5fAmGNtqZuDNWNB?n@}@ z)-U{1^uU(JbAyv0yZqVCP{ zS^#1SPV;UAC|7X0_*&_5=m^XIj<2*dnTEvuJRWq;e0=aP#a5bZFu~BtWHDl!l^SfF5)fNBM+MO&SMI#JM|-jy_M z_j+9s_wH($Tb#;WBS25OnywRIuC@u#ldh&60?hC01?V=tX{UflI)C-9X_vf~Y(coe z<2jNA;YI;PYR|r=A9&*u_S`HQ%${3>5psUkMj2$JAKDMkMw@Q;_9ybScdw;AqQv~T zLxB0AuTYpDcMHe-!21+v1?I<(1XyM66_6e8IQM(=w#B3OfY%7xtbMS1?|;a<1{~A9 zPk^cWiHKQPe(L=cViuO4d2ay}X2I)=G&1^Y!cIu4sWjp^z* zGE&Gs2#uRIiwwv0 z?0WgOAxn84FFZ6Q`*s6F@vwm71R2(f{G2(-i(}3n{0}t@cRh709OeB1>Hj^kONw7U z1M(Sk$z1HEJc&hO3imSd0k@c62A92sXM2(D=1^h1cgEFlQyeN>>#YS)hYB}%mjh@6 zD%|MZ0-z13u-SVWKpRlu7Vm2SZ9s(=dLyriH=x2xy_o>ofC{&I)d1Rn3NQ1{2havo zc)7P7pi(Wk!rKS1K*81C>j2dXuJ!&8piaSclBYpIo7mQ@V29WHTFk8qc6ws~wkg=< zl>@XXxXHWwI>cVV54=YK+O>I(LTFO>+v_Q$5V&#plD%2=x#JltSt*=b%-9-zJZW8V zoI9m!fqU*$(z?_+H+JFg5VBFoouW-7;K?Y^BjTg)f&Qxx;!IKnb89Z5G zra^l*V1U8Xl^e2G1QTaBLnR*IrpSpDr>ZEEQBuOvKE zhq#Jxy}}psk$?t;R}*ej_!7dr*iMO(=aR0+xNcWp(AX$H4K&Z~K4f7YZg2UNa6;4nLRcSeZ~5zfw3*fPzws&JA%*|W`1mG;|H0vI zQ}~~(t16|%D?Xt{;ae&M*(J)RWrREhc)ubicu4ntMMipF0`dmR+GztpJqpNlVB zsX6aRbYQw7`g~-)BEOK<8Wed?u3xD^SaU!;W23a;^#r{hSmo7yPdj0~^Vv79A zvkycY1^$5)%WBSVq#u0}wC1;-4{-cAq&XkTgRz?w`AD8VHQM}Rpw zc16$%GLz+%B=eQGtbEe4LZ2U3WQ0KmU;7T4GRPHN6+VLu{ReU;daL<;z3fIl^=O`L z&tCJ$7znW!V<-mMI)=jR(`1v<@eI|3fxk&uBQn`%37hde&l8h!Ex-4d`|M7Tec@4* z(VZas9m4u@%j^$+g);S8{@>VdgO2k@Pkz^ZHB$B^MzTIO19+L*^HYQTyO5;M$!CAe zz@B+%KKm*eRcms7@*T7`-5{^?6sx|lI^5@EfBF(K8cfEUd`P3wAU|Wv+X|~YI-KlV zZ=%#rlks-2n5QdX(+@!Iw8EP01;f8!UUyRS`8@awYS0yPCZ|=@>?z>s>N!C0)v|&$ zph4kh zT*>=DDij%Ca@1Xr2SrXTp&{f`)otiVHqy@+>MW&YUt48-La&}1+IlC2^CUy2Ga!$$Tk+WBk=_TI;vR{#N zOWp_aiXt;gj=IM^mYi8K7RbArQ(v+a$U#NsmaGTzu_6nE>Q5mb$77m`Ii+QsKkLem z1dPf4w}Ku3Dgr+&xTe*@KPsTk)%2GNl5Uxo3wX4o>943{4F^Zj4cjqb7T^g?-CNU8 za`!D(Fcy~F4*DFWZ&AtfKuQ%^T=FK63PqNb`~gU%BFjpK-Rnw8W63li6E)|el2#zK ziZqqPflODVx#T7w^@_BVJOZRakya_zsK|a<>cNi!HF>ZtV^O0252)@uo?0nxgNkv~<_t(yr?)biI8Ru$KJ1K|cu z-@;>>c7<;WKaatRifi4L0ql4b`Mh*y5dE~OL3S|5Ts3RGnTXHi+(N`$HEaDc5p&h7 z^-dz@s#)t@=Y0#4V(Q#YwU#i*JvSgHZIJs&X4W8IA^k%J`6{2&-)4{p*z`ezJj7xj z8{|=LCXT)Vuk|r@YTmThy1V~r%&N(GoJhhTPq2ZkL7pVCsbInd;LA>44&hr^M4YGB zTw2K6C}xri<+M$aHFE3Ih;u-YN;Ca}@W8DJRm}>y9iTMntJy4He$=wpdw+`2<3m4) zR@dC%<$DuNlUux9Gcole8Pcw~(aV^&xwoN+>Fg#i8EXP5zM38K`Acp4X1Nq=Xun0S z%bK=t6+|O8HMa{=p>@6}i0SAK`I2QNH<1Ut8*Z~&;6d*sj6^lULtZ%ong|-4ngV$a zP)1o%Q(X8YYG|t^g+IF;1r#YQ{0)#&r|dh(FL!^yuJ0p3YQIr4U215Ba|>C>)Si*g z_VWsP&S5w)Q`xR{&KG35B6AB#e1jtM3b`*DjWEBE_hDKzXMyCjD{?_0`MO$>3k!Mf zw?>hMLK?_fMHUv)&l*x>kszBCSyJeH$<+wU(Sd3!#E7DYWJdoXr zTwK_92d|qo&uC6<+*B%bW7TwSWzyjwxIZ#7y|H!gDjn#}(d; zoJ#GbqVPc=K1Gf%{63J0iVQ1!2S}|mmdsJ1k@4HX#96oGG@eGfL*6=#|Ww z0uHegOZ^vZadws~F77bu>_%!CyVfk@?7obIS4MvfS$-2Fg!CvZ~F2 zW4NL#?Al{_sara5{0z75u=4@B>yzncRMxBzrYi&5M1~AI+eID>2Um)ujBuv;YMKl0 zMNM4{ErsucN`+es$07afKqTeVtSVfD}q5VJ(5 zOBK`kxkZ#eGkr6Pxc+=#8_6gtEl1PEH(;KMN>3#Cdq|3p!%TQ;ZYXMUJKiGA8!B!r zl4EV9;wCBOLwxuO$LTvPh7@^7kWGp_EXX!R9uZ`xB9E1Lz{_2V>@GPI z$o+~uUa|nlZbhCf2?5!o$WtX(0NJa^(}L^=mmdaWi!Xo#;SveK4Hz{1e}X)BFq`F% ziGL4227eD=QRzXZ{xp~RTYxfSl{K#x&)8)r={0eD9PRlhf|!88>w=VO&QGOE1=_vk za?B3}x#s=iC1?iwHhwkM1)zM8Ka_M0{!3tu7sqX6YzX;6M@7xS;`@PU2fr$=2aK&9 z&t2C1x|r4Q9uNNcHqtdxCv8Pg3Z1g1M9tm@pxJt<3pMPAUA||_(5=!kN?2Z*4_Jn6 z(x=ks8#OR`I1UMtLkCN1b8N`@9CLo>!RyD|9P`*~~S8oQrJ^Jle14ZKw;4<#XTHbVg0uqE3+@Lkb9EqJ}bGTbe4jNei zxQv^$ZFQ9`#r@ePcH6`qOq7`+g!;GRkJ-Y8Y$0yUdQh8K28b#iCGWG@+?{pd8WG&b z9L@>%V67M-Z*qGBmm-?@xh=^3Ij>-DgD?e4kU#c({P2G})IScfjap{0dG6%ehNwq# z(zBS^R6pF?HQQW=U27|TfjRs^Yq#N#8UDr`_!z+Ad+{SGgVtatNb+X0^#p_3a)OAGT&d}ht-`#H51oI(J6c<<0(-cF9EG~h`kI0V%(P7aP%b|rBP6JtOtSXFS;!YpsDAzWdjU(6>n|tQ4SWUb zDD&2DU?a-B^+VKL%DnYgvIk|@`m4SV*r)AW{W9Q*3U6dPwF+NDc)D@l)<;=GGuCpv z2JRLg1mpTM=!H9jLhA3W-}G0v!e+j@*HpNk-$*xC!5i0aB{pIgeoXf5YnQo1evt(G zw9h;Kgfe({9lp7~{!8N?a*6!%62LmE>+fs=T(9MK(f4QoMWo`G%JrXTADZ%k}9q77(WDW;N6#jkTshA z_#J?|6n^SyzzGn=Hib=V)<3|(X!e7h0G(m{)aCkz&H!ABqHI=*wy(d3W7VSfaaaca zio91CMOg*kokET%1GZMq){)qbKVu1#vT{<5#2&z9B(I#apaPixnD=WOtYW&Rv zWN7Ojk~RZ>^en`t!m02z{(81s^8+&ABzecU*`%0PRC*5D626o!KWWG|xBTRss#<;u z*R*-D|0ov0Z8}~w<{R$yagB4Lq7K72kfeRZ&0Xq;rAGgiJY^;7RPm z@iKQIP+3;?2KbZ{yO5-9RtfI_5{|J#UM4%`Qn`e# zMf{W(eb#8onio;i2ddbCml;fu&LKqBAo`}v!&*xadxpL0Q^7pDHk0xCGfKt)c|27KoYrbs* zxv%-Q4d#ewThI4OnFppmZo6jV6Nc)x>-ZjYd~Gb{v|YdMX>dUX({>}rs6@AI~!EQI$R|UJnVD}65WrIEB;p_Kz8SD|yhhOJGo(}Ixx#se*!JhT- z<@t_2yWRF(;iGv^V%v-Q?t7E>ea|OoWtYKzAg!49B)0v?^Ch%m-i+Axl3=fxk}rGs z;i-cL`-#+Z^f}wM*X1rvg~8tR&>*cf*jsYNslhuwk%~HP?|AM5m%6;;JMbBUw)Z@D z2&N-?U!IofGW8C6N|t?3hXjob)hVa0{yrxQ$P_`N$4xs{|#4O`U~C$q8hX< zTks)}3N1DuNTni!f~an7TQA5&&AF_g@EMFjk;@Cl0GY1HP{C{<^@?0supCH(B3B90 zsL0g?UoW&L=4~4bLMXOIbFL}K0O?ZXT0s(uTqj6YkxhaODY98;+cZVQ{095>y={u` zv@aqw_`UW;ga&`Y;DrW%(%{~0vYwuncOC4|j=nB0UD~P0GlJ|=5y=_qoxNUuT86Qoje8e~0~xm_s8bd{)zwk4j0 z7^Rk5CimJ5a*?cj4Tra_5TsO#trn!*@sX<15p92vWvY3fc;tiZiu_q_wwYRb7fny8 z+Wz68P*>!NnkElOhWXGC;N|vZR3Ko{{9`1+))$X-;DSjl%mCxu}5F;%-IS3wEG^J&IgX z@FbAEibM+d>G%DLL<_osyaF~>odfTIdme?poWfjA2sz|iQRy5YWBF7K2|FY|z#JMe z>@k;9Zi0d9Z8mAh%Vt|>_jYEpJL){iM&dVY9qK-t_!8hU>OY(COD0gcX{#gwbw5F> zkV8$UQ8YG>oTHH-Ia8R!A0(cOKgQra4PY6ypv{{PSSnEGmCJL&c;JJjsP}BbTEJq> zbZtE9v~L>gWaH6dQw{5h_BtEO#GDxxi}yPl<g{D%w@}{<9{Ok~x`tkm zUt`ewYUj0~kT$cBchwENtOLo0gl58qgq8h(E1fbXm4ALb$`_Tgg|TD`^U6;p6)@ug zul}YZDRQpo~q*2fXpHMl$*n@k+X|A3^2cRc+N9OU~Ok|v3KZ3 zb7gK*!L?O?MTSh{wbcYM&ur`HZyEjGXhiP1QM?Bx1+N?P#1M)o?7IY@%IkIGc?Eis zt*|8KR#=u-p)s$*MSMVek~&zer}d+}u#1=3a!ksT%+@JyAZrYI{NKx`jtqrNmXVUigo1VS&g3u-DD3(RjN5tJ&&S*Pm!|)8L!ARK~7WT96|JD15M{j0~0mpJaHxJ6`AE> zn178Tvpw&84>mP8N(%9g5%h|A!L9Rx&9Qe-4sTc3+$(QakTGqR7qcl_Hz(vOoTjhq z_zx@PoBKIowVFQ2MpQ#@zMQ^ty`~S*i_a>2)u(S_VUJ?Bo3AFE@Khrhx%rwdw7Eua zOm4o8TfioRY~q*wwi#qIg=UvQZlJ90HOQ7Tf$TTPjYM8C$W5G@Hw?0sO6FaIY^U5E zWn3uX{d6>xmh4faEMt9gULepJ90Aa(HzX&-zWx`_1M464)?6$Li< zkQmJ3156zJuIFP*^q_tZ*BMDWVNkz^TRM`D2Mz9*r;e5A!S8z*fT|Qa2Y(# zF%`%fg;x{qQuvY$XeZ%#Ib#Gx6BIaJ(z4a!=I!F)Z0A!*(u!RK4IJGEc!FBy1f`MF z94{9xpC2)ndQmA`#1~!gD8@WqVlDy$DdpBi9ckb*x`?h0r+UdP4?sL3M zngmd%McS&!KAdsedSo9!L)@d+1JpH@eT=Za2sOK#@X^}t;!ATq-&cH9uIH}^;?oAcT6_m` zR7o{ISo}DUTFrT=_yr)-6?s^4>J@pU_`i_TpvYsz{{Ygc$nN4ZpgVM_H9t|zt9@%U z=gH#9$f1_|28b{I2!k39!hwGaxB)qC) z^%b{JHPxD-qK2@cqL#1;WL7S%f8MPyhaF&i9LUS~U&e>Ws(BIo9gBM{SD0cL^lN}# z-yEP>1L2M&&my9LUSZpw}XD0|}#$4mk^HiRDQ0hIGtUo01see7bSmR-y&meDNX zb;Au6`;jcezu|ale*+JT04&t>yjRiRFyi-H?2^1;BpXw{-*6(EQNG_$`4V8|`wb^a zv<*WThqR(nlBXn}OmalAeh46M1@GE2^1AOEGPa!fHFTjQZK>P~P)XWy5@DT$Eu#qQ zBVt=dzYSQ$V#^r9O5T>SETiOY@ew{vhPGuKVI_6Tc*2u3{Z!Uf{ki3Ircc-OiG=k5 z&n=%LT(9Y85}vQ{S*+Wj@Fc>G3RkmCyTUbuS1Vl0GHVpBV|tguQwZy=fh|)BCp7(R z!usInmT82untl#p4RvpsPIySu&n3K3;Th!TCWX%O0-YQ-$+9=F)j{#3qxaseJYZY!i{v|uF9c^a;uGjQc3jjALym|m| zqrw4}X;(PJx@#1UkhU&`J8wfe?`=E<(u;pQ_k6GUD#YSF1b5a8e32c`Qqm zqUuMiTGDIS(AaV21hlVZ&XSkiD?EvH4I8Rhq(ZH>vjNI}QR0kcaZ*<<^@>WFS4Q^P zghhbm`3>^1oD_h7i<#It8oI(JmJ>qG_4rfl4G>JQ5ZwxLT58&>kvB7kb4|YIa^xnW zaieu*KV}R5>Cl3L^7a$DSuDSAuq4Mowp%g_081k0Mf)+sJkjQGCUX>^xjN>Mw$vdx zLb?)2u9h}jxf17{Ae7$K6;nHFK z3FoE&K^54WIyL}SfxRh6_#~|wB7CyKVZwSx?WPD@ALV!@382jKsk)6e&psU~WmI#z zPK)-U;!*hDX`V}PG(m}{HD{@^;MU-u{Mr|;Ra7+JNj-KvbDDS2-&F7}YC2pEX?|dj zoBbdo3Yz^8y&?r4rs`1e5waNES>bDbn!2nq9K$D;pUKgP z#P>{_KkPigQuvWre8z@i2?K@!=Ge7$_-(+CWS69vmrm~9I{MLnH*{_tlm4-#dF$8% zfR*O0zJCJNsoy$o#H)7dw~n6x*e7G$dfI%z6BV8i1gyGh>*<>SPuKJ_?g3n{@WgKc zZczAh?*LX^we`$D0#;qM^(?CCHCkp;#cNhqZLOLBIHBp)GXQ55u4x23q;M_kZc?~z zEz-9sJelxLg{Q0syi4J!gzwiS_5wIkPCZ{v2y?X`e`F`0=-E1#Owu|F#I={bU~2<; zZTPi_DqxS6Sxk7Z!b?6tANv(vO8xMP!pjK1q407(IsdN0jr2_pD%|uZ)csiDX2PG! z{(4K${^%Ctd7L z`C3NL8z&*t+1gF9#@loZ_hZMS_bi$pM2n)HC@ST&Wke|<=hsLmqtG0ZT8M-)ijSnC z*vWuJD^re?`C?GfY(e%}Hk+cQ+03z>EMhj7?Nx5JK&CcZ!p$J$l~DxqnoodIWZlFp zN@QLZD^w5)n~AS}xI6y+SjAY}#1Q;^F=U16^Sd>qO2Z9Vr1z&g=0 za-SdGdftmjuF&+E?*oRl%RAjn7TK})z*${#SV(gyw)Q)|KSU~`VE7%*{&1-iVDazp zBj=u!6Va0=INmkj#W;(fufg=@@t!Iqjb(^x4uISgoBRo$rOf9XuV%i?PA$9Atzm|I zsr^W0XF{mW^`3WMw=sx0a@)lOB<2cY0uu8C(ePID0tt_qP{;*>j2g!tn=cf^L?;>q z(co(HLP1QZLf_;%N$V_@922)#BFI$DSt^JLVk{G6rsgac#6&b21(~lo7YSm*8%=^N z(VS*MOsu0tkQU8Z;dvCqo4`k#AgeT|T@ZbwxOtU_F{Dd1=VC$pimVpI1WPXQa2`T- zy2)KL^B(|&w~SmI(Bju5AA|5yaRGjcN~s@AY9$i9cVX7201yc|&So*il$y;_6#tdB zl==MT#O4o+zJ@d<@S`HCFoS$7h?&^m711v;6Z`ujE@d;Ze<&hX%*1{oFQ)eynfr6m zx6$<2qP@`60Lu9T>PdqHP@6w3qVu5eUy43NdKrUkx?0%>N|U;x(%0qpJ^YFYGay#( zY{!rB6)TWX#>kk4)lBM{NRaXjlWBPlL*FW8+OM}|7(L6isoJVaX$Y|l%QKFqJ(${? zY;6YBBnQOa4Y-VfHJk8tTk0()3f+WI^gaABbF?2|8RKkPz;yjvB*+lPy=mGjmmvts zS5TvoJ740j7X?gH(*YJ&;YW6?F3;wg=YR|g;!4BjTDi6+3Tty6!#%nwZk}>*s@)Vf zPkrax*vWKL+8YK~Ya^>TGy`9(J>gIWgm|+k!~b1U+0JMbRt?$zxi13GSCBf6Z2y%XBSTv6zbY3$ z>%W;tmue35-|{>fnyzJT<;<>8_#VPt3g1gOp^cW-T`=Njw4Fmv-G!tQ7vJI6*ENu@ zg*vToc+groe@td|gDD0)$tK+E)-|Lo&5Creo+*7u>v9`IMH<2XQN9%eurr(3N$=Ai1 z44;+bJqS=Ef2XjaN^f1}rnhXreTizM>G%eiyh-892yavP@*u=^r;dBW4y5li`3r(lqE}41naiFj|?Sw`>z2S`153f`wRrjNcqybTgJU@%j^^Z(7LyCDhd_8 zgGJy+?L{p{5c49a6?J#=6Kz`VF8NxU!e1rKSi{GtG#YKGaMwL}1=90{TVV4^FsJVE zn~^;%>(o6#01UVYKlcL6>vLk=ciu&c_OnlHErq`;%WPO6?bN- zFE6ATf!}30qn;{Se#uw-X`usoh2AGjHq#U+ zDkWA_N;15BZQ$Dgl+Mw})*0A#)|ht=^~%RE?~u2pO3ER336$0y+opYh%0kArb8^zM zZ8~9d1pc(Bjeek+R@I(HH_wB6=?&!y*!Gti`=;Y;kx^!sJPpVKkkN%%~KcM(2I;k)=W zPOZXs6V{Du`#pr~HT_<~4GQ1Kx{V5dg><$k{8gs6D||oGS1bGg)7L2cAmM<*4-xKA z_~FX{2eD{=4ZVQ7xERe*V1~2(k%ItbPA6^OecyYQKaUHqhDDm@IoqEQUTHf|5;nYg zim;i}uMswUdz!GB)2|aYbGnDHnbU6&HvD{su$j|u5}s&idv?TohPF-Hzjfe%rEM?E zI7-jAIYuLIFAy%$^zRTZR(K!b5`|x6T|@u(2pjtM6E^h!JIfpTe@yrUt@|oreG+#2 zPY9o=>94b{8RJh0n=!t@GG>f#GTn^vKL{K7d5dLqWp96*=|)a|PI#)e{|?I-nR%D# zGd2Aee3-9Z;a@U+zQP9x8(Dgv@Dfe`Pqt&^>LB5ZH2v3vn-u;H;pSn zL&8S%J|b*H?_e5JzwAbgd=|0GK`8u9tp?)Mz$JW9Do)Dj{7+oOLR&mAk?2Q!J~3K*1X zfd3B5owe5STuVjEf3uU}l;gQhQ0?Y1l4Aeugz3zGo;%k4r)}slTUXotZ%{t=&VT3g z$MZPr{-3}nXft-r>t|34h5TkH__9)cXgszZ=Niv2&Cl0zE! z{}El*R``r?Aw*C@L89>e{sSv)Ed>-lo%HqsyV_L1RuxbvH1A?J?{Hkpu9kd-FA?~& zCE}2IKLq)IJ#GJA6dcD}@EbfSi2ua_DAh}J!sePs%7!Dom~-j9qYze!Emh+z;52_e z>#0PN!UG-_xq#_km_Y=`6l?@m+~bz( zF1XnyNXxf`=nra#{hnQw79P;{=qK;bwKq9f`kZabz|zXCRZPwUy}TJ({9D5Vk7n&W z|4+8mZI8`B0jY4?*Z9zlg3shqpCj0S?w#99Ie1T8id3FKdKFyt=?Dv6oC8$VWNuuvB?<*p)u-{YWa_f*&dH9b2GYCeRk^@xIJrkFZ!3XgFYt{Y%OD;_%m) zMY8{OSk@`EA0b7EKBePc1U&^jd1J&5<&KN^Jt|54QW;adyD<|Nd}#PrsFaSo-7^hI zGFjvHN@!oIoLL`5a#3jPyFtHQ>~h>`zkf zUlqYk%ctg^T4t%G-)|mgD~m!O7R2!=Q;siOD0p5x~Xs@gpr=TlX#sD0uZ&gi96Nc&7_q z!;qs^zUL^HACos6O?9K`Tk_!Bj%FZH({Gn_?~HM{`G5{ZAT-W#jFxz?-t(#@t!a~o zSI?#Y&0lAXTERUh{tg85@i%D{9|2`>QsJ&5mxz{_Ct_u{Ww(bsl`<`lduTmNTMr$> zWi8;gMGQbGD6udpysgT^(2Ky^%f(_+_!zO46dvZGf39%a^EFV1*IvD6Q!<|KNeUfe zEz|FLQ&Ns{%M5tvJ814;9=tvezD(eS7?S+k@z5d*I-cV_6OJ8T<~{b5V~_U?E2%gU z`^RZcS=nqPL6SV4g~L4v3E}D3g~MygK;Ci4T!@t7(~$yan>hSzQ>PSyH`4JQJEQD8 zDRnfEQj3(G;5p+YwpLywb&nbDDJx?p(~dpHtu`GE9yi?MJvNtHabjN4<8wt3S_NWy zV7=kP(F`9n8*vQ!V9E(@OGWHwq$yvdxhJ0BoPpAnxmIwch*fc$h)oFzMK}(UR*EdO zqjDtRJ+#i~LZNoyaGO77BI=Gp?_)V;<)P1QLI@dWnlOZn&!Y=1o|=~n^t2pWR(4ET zc^P}1AVUOjIvDAac81}qbTZLQ20B6T${i30JM(nNz*!tUvnHALF=?iK6sa=JN=wy- zK9peJH53TMF!Ba2#p*D~(%igFKJk!goN~l4(9Kl0jI?mJ=}1VPX69XT&dJrr?sB#e zaIOd@2%3Sx$rFa>ReR1qNhOeDqg2;d-a1zVZ)TAzWCf7)SyNrvAv!yU!aoJ#igA4o zVZk|@uktv@d+NY|xo&SoXPk6MU-L{IjDvON=TI!y9CH3il-3J!9caRZ&~r{herf@> z<%QJ_vwM$K(i~?|F2P;Wi2NAX<22GLh$;OWJL~r*cUKI^xe3x5!1d z)}CC_5yefyHn&LAk+qr*ujMldmUxfTvf3mi%wHrO*%0>0L;qRIUU6$RTJTdhDQLls z*lhR@Z9fd%&VL8YUnE(u6uSZcd7PjHPjr)7Mj5asmo(LY7v_?*h1{>Da|Cu5{_{8& zS#YYG6tdtZm(JEB>1;ic&d`x`wjN1m>ydP}DmA%ZOXq5rs3r?;afw=SBvC6YQGav! z*>ogPD~=>;#gRm<$dRLvB`Vi;bD?2%Zep5`Y`gi$wwn)c+cES`b?LtN@FMMI;JaN0 zv|9$e<<@FHaW%!LncC~X?r=+=rH*-+%j zh9ZYIbQ-iT|8<$aUT6DW7rD$NdYmQ;ew<$}QLL3eHGieDCgpy&m>PR?HTO9`G)P`^ z`_>B{J%78dmm46;5@`eE$;E3=alF|l* zZDW&W8nFF1H|Y)o4pq2G3gmt*1)E$7*1lpu+pWi0`x_J7wA~_UQ@J*B!2Cs$V<;$e ziCSyvv&5m4rSB=1&b3{Jz8sxva}+9c&LDh2cjYiSIg}LE^jS$m;k(dm-LDOKh7on@QAgy!md59JNgw?3eL(U*|isR z*WQY(0k`IotlD@emt;qsay7{jTe}tHEv_bs9XaOMZ;UQG;I8A?k)w%OL9ny#abk8f zGu_d|?6lg&hf>qw2=m_o^A|~nuR=rb@FCa+;&QvVELeJk2`0(H# zvhcqrl#KR;lc}0Syg!_*No5j=*g#Dxbj~?bCr|T-1F3j#O?+_r^xA3uj-E^`+Tm2! zM0S-9kxmAJ>=ODd5yz;)Nq-=d?m`MADIM(z z%ZO2uu-iYzg$oJkKr-#`V6WOGi%gkp;I3pi5b{TRBXMm@xT<-SnXv&N; z)njQF00bnG@nATWiYK*=cxs(L*IiF09nNZt{eh@$BfKtGqBkB2=Xy$X3V*BYjIjMc zCkGFxr^g)}25T{Y+NCqukxqtLSooL<_b3>Q_atKBbTrWQvLB{_qt3tV{&?WGAII)A`~VP6Yfc37=|~%g7MyTGH!&Z#}JZ9Vd{DVJ>gVB zXOuO22IIY^*=!)03=C+C(GUqj0er@;Ga6F3JDlvbUE(o5enrMZS?2pF%0d$FBMP)f++_J2zgeWs|w?EWM zf=Q?kf`ZAg%R|HA-W22@YY;q;uH)#4VSV-~oa(nT+7SqLqfb!YXQ@Z$(Kx3$oHbky zb|&MQL|%ShPapSw{fPQ+SoktkeoJ_RZazU&jE4@muP1?Jn93y0JofeEdX2=wSw94xTNX5-Su7oW zVKWIB?IE2(IAqmg8-qGa#H}vtNO2>?JSYIxqb60DnVxVg+=ormNK7h|N`!k2dlP{q zbRV`aG=S|Ba~=r?(n>AF)(RlN1f(u)=12Lbtn2EB&;djdC?7ixkk}WMjTq@5HlCzJ zvP>GY>^FO+CaIhNMx_WC+C$n4;^P?u1&`Y>PlZc2@@TZnu;a zY!$5?!PYluMIR?@P^kLPyV2trSv#kBxl>SB;2rSs&v^cf@g7_4EwA==`Nof%dis(v zOUBfWtMT?%drzsJaLSxhd=qA0+qkxI?eZlk>?xkfD#bGhU-aLkc#m3CKWEJBnwl}= z#*GX@HVh)6*G&MUMoPlc$xfNRDAwe z;V%gER<_rAS1$5)%=G>a7iB>;#zkrKcwh8Hb&hEhS~#1Znf7%lCVax@y^^@n>TlK6#P% zc;6WC+qbD{+?)O5$Ly*ZJFY6jg2le#Zg2Ta?{U>jAM>;98MWRMe5=NLUv*}Bhke=m z>J_g`v1+ovDszUnqS~9RuC0|$zPUk|FKhI1EGlhKeiwVIA0Aud_x{B5j1>L;%7lxQ2Y#OR4T5Q=0w+cPA6Q$pC3pn zZlbXLf-<i;i?7x#+C(6ASnB((;vX*8S-}|TAzjMh?U zq|c9c-(as#u9F?ui6mjv`4fRqj-uB2w05{vfh;lXX?Ujnfi!lQF74V7(1EUc;(caJ z+<&7%KRyaWQwRMJV zE)&HFLbQvVV7x1wWQ9;qKr6uo>ckCpcb85%c%aqKW__ zhn~i-KLmmtSbm8v^bX_9kG)^EUn!Bo_`y|t2ZhrIR|Oy@cO5!{8xer_0>=OzQmQK& zktxAzTgj+sias|5A`wXY`$DO>gO{H8>FdFxKsu&5t-h>Gc}G;4?7$%d9UK(e2x2q# z_n<9s5i;fUMN&OF-TCk!U2YvP_GeqeL^kafjjpiz4N8fEqs@%Lw~*--moe&_M!|0I>=| z{E`{kLcva51{Cl_EYnGM(hq+UQ;xD?()z&(SlY1uMTlrV%7lP9Az`0C1bYsHjNpy! zbN$ULm(5dw;)rzp) zDB=TmQ5*?>8h${`>4jv$XoQ807vOLTAa}6PXhiq<`{FUY!z}E~U9#A}3ae$lzhNn~ zOkWuE`y+u&43i*IkBQ6l`ejxkD^STc;w>BK|!HPtPNT$Vs z=K{Hgx(SD(0Wc!a+etl`2#VyWR-rgxVtNsx!6HrtA)o8SNpj-x9)Btrhe8O1*2)4= zW<-KPqf;>@WEB|D3u9N;yqN%gz9ZQ|>y@j}-w9z7ox`{dq*Z1h5KKftK0R1J24$9S zI2Q4X8BdMs$Be;+<=FEbI6p#OqPFIUaH%%ygqn8}op519Dfpr6InAkj*cXe@i}iO=se*kGzw8Mh6=I%&lRMx<{izO>RnauirwM4; zaI6-Llt5d`-!VXihIhfC9QM=*J$5SHa9`T#>7+)8#StVF#hUMyJJ7Q5qmvi_lz#@& z1rgzP)Bz3Vs>(yA6@|HvNR$M+pE4!d8CqGQ1tBLCqrjMT7S1NHU8SHJvsmd2{^+WU zX*?4<2lQJ98jS>G=8V>WfIuoBX57>}VKZRXxLt_e7sG+RI_J{tUf2*((#cS3O_tpN z9VS)Yu@~X{18Aad8kpk8MlR00#G8H-k5O7^T6a(s+IE)LwKUFu)39Y022l@ih zm<)m1I|%)zawO%0fnL8x@UQ_xJIgxi@1WLqG|X<M4hzABXOvvK1__dxb=2umeV+G=msiGH*jOfiRgSM($)rIg8wD zIsKv~A(djBIqccr*F#23nGC7sx`SB*od?|z$A&0vxIrrMZPT$1eR>&gzGyWgASpj$?o{Godil@`unV{l;}Af`-DJlW(WVHQL5LtL=ehl%V9HhTn9+24 z0IkdRqagu)3NjMKPDq;o98uM4j#q+V@E?LK_9GqqPA)rL7m+xkp;!rA$l#K!aVz@> zB*bXr(#TYEi3?DuggB_hq?Il5!(Zi=-LT*pX!2exjkR)`R~ z#5m#uYWzkZdsr}7P8rz8qLpZN)3)Hc4J8A#J7A5W5VoeqrsZ=N_%B%AG!Hg8_WK5G zZOdDmbw#P&1>Rxra3G^lEjV%F6i=H9S&#ZVFr=W`5YT5(g6oiJR*nd_(-EgJ7LP=@ ziOX&UF$W!1hzz+#i#mwAK~2L36zc^Ra4w|AK?f1FqeYeIq)~&_1|u}5*?YwbQJpC^ z2-hu^8|J6mfi1-~W)wms<3~Nwr^tnd4|Y>oVL`_NFz*ai&`?4wV`3@Xh=JAR&zipj z=I@{*Mvy<2>c~-#NED_$>X)N8_yuGdw7;Y#xq1781Hl-ir6(umA~k<_IyC4-%qJCOiueTzh4{<))Lr@>+h zg)uOqI6Q>?N_R<)9#x|ln_KurwT%e%I=mVkbgTZO6(q_Vn^QDSgBY?Gk=eoC8SjBf z&>M*+VTSZap%h%x1SG1#!D*req84o&%?Q_^A`!%tH79{b*|TGgKa}a|8Sp3g1x_5W zVE5(5O@WhviDY0pYP#Y*;hI1QmUeAj&B3o;`>VUR*90*<*h4U5YgD+Z&aR$X)f?`w z!LFFe605G8a&DfPl*lAgSVG`R!dRs|-GB||ny=Jj5%3MZ5ayA_y)IVF51j;2y*Ps4 z5gc__67xbUm(HTojn%JY>)@%Pcp3qPhX6196fiT`4bLO!9~1=y$0h|8364Q0S-&($ zZz2L46&536>s*}hI02wn?6MgQI16VE2CYmD6%zFgoYXvCLykZc8V)1}$a7kE7-|O? z18<@?8SaD@!31-B{$#+BsJq%oGDSVydNDASnFxeBn}$W7!eY-l$sX!g5ww-~1LfTn zOv4fb9~{^);-D%4CW?zfI1_^FqlT48n`(2}=(_@7H{CFi`#2WUfYZ>_vJh4|od4#Q zIZZ82M+T0nC>vOSu^vA*RDZl5r{U(1N#$H@I!GwQNaft2eE{ZTBY<|x=a8%rC^^g# z53EGfM<8_=2$qFxI5ZSkj6rYc6}ZfHw?_#vkW+p!5JbzVhYn-N&P+!%;pZ!p#n}N< zU@`TYJrd%U=>QYOpn^4o9T;+g?0i*$CD|w22CZddS2<99Dv*p$kZ|int4>LEWzr$= zg$k8&3Gob4^`&6N_QkNtQg+1gqXh#S%HIJ4D5P!&7{$1bdu-~6NmXagvSGNTWP`_H z2R3o26gq%np!F~$VK#=`AVo6hrRs4TjSP4m^fjn_XaZ(>xykCOkyt*6tr%ZL=hhfL z4pyZu%1keJ8~D-CJe(R;uxc6h1aKxyZ#pO|Qe!PTQ{3mGI2nkAxcabRaQ$ZV=--$K zbX*a$62qFB*}qQBXSuFH>!hx>mJX-utZ)K&qECZG;z?8wSTTr1af#9z*S%a6;UUw+ z*pJ$SIhASDE!S5^AS8$XkO~Qp$y$OT#m$D(mh(BFoDgOU2XN*^H4SOQ3a|zZw>nv# zFo3Z9Lkg1vqe62A_Dr0{_zGP54=`6iz=l&d?jwHw_I& z!q6-h98QSA$p~bC);%mynEedvPzNv`!gUChXbfv?5FH6Wr7hem7EuRNLNrR9BSMAX z29=}iw!$i&q(XcsdSV#&;S>|<2!3G(1}|Q5vXB(jxzJ=b4XPn#IP;QDs9j`{rf2}k zCYti|VA7o_vxK?R3Zc3z5Q2a`-3O<}GElW8ECDEwoYJ)>Xx7)jWiHCV?RG}za1lR9&J_-GSqxRVB+4Z||>3eIx( zak?lD#$QI%G3OLwfzd(I8K=j3gy}821AP+M)jXt5!V=6fup>b#vmHjF*dJx`7*c?F zt;Qc%Ew;TX99dQBjF=^kKw+<}YLQl*2^CV@Vn}CI#akZ-AznKFAq)hZNnp84c+?7# z=_;f*3os&Fj4=v^BEiTmmizLimHzn)RxE@M(Kv6Rzj1Qo{H1faf)QZkio;_|CzNne9gLt2y2{E$D5 zPQ!{q0ym$4It_^Ef|@AKYT=eF21opJmMmF5Z%zvqMxqPqN8+R*3Dq*Z2WHq9h8xZC z%MB`6(&E3Fpddq;vTQS8QHj1{UEXoqYA#ftQ1-G za_+97IuU$?!;M>{UXGaTVmo14RPD(c7VAOc-x#Od<#U7ZY6`n{0KcLkREc7vpCFM? z*qewJu`QZO=mvor@Bv#VWLQ|kFtA4d5Xws;q+>^ql^BSnDSwfaiZR3j!-gT%D;iTg zP-;4;6>J(wHG5$dW3n@tP2qtCUDA+r9z-FgXs%As_<&_6VLDk@T#Yb_$Z5xf|04{7 zss=@PVEz)S1b^$YxeJ%gr@A+`wO#u7pcfdAZCvkWn0>7END{9mDEuomKt#VV@@3aMT&_$Qo||LV4v#%` zV?`YU=qAJ?4UXg)vvN7y6O z@SIR%Dq`|oHL2DhE*3F#luF?C5R@~VELaL1xw9~HnFp&v7lBT#SrEM21+niGO@vLl+WOdQ0^w7l?*qckoc>* zdFt*1UL&Z4^QwN%ff0SV#40|ihB7p~*&9#df*}2$xC1Yliw7}$Tt7x29;Ob>U~sn& z-V*kIz4n6(K5>c72z^j>jPWO;aD>FE?82e62C_K`iNkhbti1Vi+7VR^;Oe6stNE$Z zgcrIO!2Xw;Y7j%&yJ$_((_#n+8-|>jU=FxZpd(|L&_ zkS+;1VAJoyeY5}$q(m)?!h@L&6Bv$o%CJA$DdAxaAE?<#Pgt}nj|*{|3_{ZfCaXrr zR%`aWXs@vr>~6&2=!)Wmg=iHbq}Yay66N@n zQf$QxLP7DMIJVX9Xd(gW$iDz7%ST)&TnLp|lm^u>1p%Dq!`Of^j13-k5t`whemKB- zD2i=}E<1Kru`Lb9)#4DnfFMCfzuf+H%n_#ebrG>Id(z|*g7j8-2nSLST`W644glRq zs^PS`8Ew?A4YO({)-6u_#4CennvIlN7BnNsB}S0yq6E%!5kCdjcg-^&yuxEk^jJr2#lS3Ul0If=Y6k0W)Mn3Oumr)z~;$ zjvYhpLg3CNwg-fF#eGr@rBbH%M^xSsKt~`@3{RCP^^9=&K(vv>+qldTQd5TrmmS0O z<6)m*+d}w3LS7nRkSf^D7+Rrn!fvhSF!0Ruqz)!n{;r%dzJml*p=)GI@%M-2)(0No zV4w^kHr-9-9xPNhBFdNqMCh=jM6E!z^Kgq+J+gRw8`ja%Ex#5VQ!;*H7W9YSGYgIJ`#gdMSZ;Gp)0Tn-1 z!x=Ebdp3RmX7Royo6>o-`zKDDVguB%=CluyD_J>t_g#$jno7_NrhyWL0NLYm704rW zmfUeb;0zkWSk$(H+&wTZ6zwW1HYg$v!v@LiIiZ^3aQKaN%#Z@&y8bLLt;pRExh*Yw zEAIZw4g@Vhu3^76k#kkF2(P5E;^|*fGciyNxmFA25F?n<2AY*Eh^NE4(kLM0K<+!p z`qr!0xvg03jTGE@(1<0F3t6f42%@?Ac?+bMT8`(V5BrfgVSm3xNRvHIERsNVgvENoWqU!-auMw0hPMNy4~`cB-3#p~#sHRFRo!-0OmL zVsF-Ho5)N`{fni`SIn8aWC7P)h;e4RdS1yRB-yj(G^`!$7idUECq}CA zU1X|YGl(@L>tD7U8~#8T#lilhgARr5g%*h;@${z8Dlv5@bSH;p3;u}c34L8qbJ~J9 z|J+o$7`d^+WY;wW0YFT25Nk?znq*Hpk&}8ENQOrk;VfJ|xfg~ms6ViIiQOR+ttK4q z54tCx9hnH$u)R0Pl?dka&<>-_VFr5W>+x`=pRO~*v%Ev(=Tmsp0^kg8YuJ^Hkpbm3 zLhx7DpX{qjr9-nido$;vfk}mcSIPZ31SvETdKHgQ0LHeJOjq?&BWO< zE8>_wU4>|8PuSKo=?HH3Ao5pbj=ZYm%7Ete1(H>C=;hHM1X5wShzi$SGeq71M5MA` z6J?XcuwzwR^thOnCSjVIpQ5A+<+FO@D8fv}Awe`c^i@@f3iip?i!|)uRaC%LJbF*f zspDe(}t|pcrDhl$Xrzt#Z7AW6b z>VWZ$bASO{u+vBxRf7}Ch&O=4Z3#k4kV}IE;p)HN0ALCdd&$+##HQ#h1zi+Je(8q605oj_hEfsB>T) z2;Subg>q|?{#8)=SMs?dLy+A2jwWEFK{Jj`^(-U4>Pg|oSwC$sM(wb5QgUH=s;nVY@u^8moKBcG+@s!#3#NTf^*8K;?u^y?$K?R2pu8 z5Ob~}Jg1x1JJzB({G!N-ZO8z)+Iu7jJEA`73aVvYqk%kU4L1i^3Wo&T=!F%Oa&a9@ z#2&)ft;*6_y70m#Y}5AYw13|6#+4HJl)$u{A*%7EXU1|15*L0k{kc`Ua8^j zOxRm;NR*PGBc1{fzb^=+F zD2`9K-sPr)8cs&-%TjUAvDNQYcHxGBF^1?8MIj1&goB4v8}!^{({n$~;5Di%PuB z9DoNBHlFEYs|Ror!?_Ooc9K68*rqeS9HdRY|wjl5z9zb}T1>0*#WP3hsL%auc1LvH0b)sBZUh$r=m?ozK#w6yxM?u|r>FCM-{ z+*IN;uGl97xHM(Xm28ww4mMap-oRk*=wq+TnA100?8coC3E-HMeb`od_0wD*;&mE1 z!_);QM{w3rknn^=AjJ8~c~W#7B>1XFrjn~}7+qeoGTf6cY?gW~XpASWY?T^moAFwX zK_ld1vdL};BM!C#yAi8NcE3(3nD=n(p+2~V_!&FmQyBEZVFT07ftsR-NaK(SJZQk% z26oyR@aMV`at@gYM&gxv+#WKcFwcItx9Bj{_QV%kem~+&HoTeo!=~D5Y zp*%U1XAFozNedE-*m`-t4syEF2 zv}EOwcloj<3-P#>D?7P2OmKgJZHC8ya)-pUTywgX))lR0v6R*SXJCo82!;UTjCKj{ zX2SC8!F3oKkh*E)E~mm(bzOZiJ9tG!e0#IK@J=>7UWtT4HZ(x2y1K#KmBWdyxh=;y zNUi(a4-T+tB+(=jqet8^hfhdI6pW{XvPBpZ);;^eBVD{E2}R>a2siAx{QGXo;&S%m-HV&=VFlzq}ny#Th{q{VO&Wga0(S zA?vbP;7*Zw{>WVWm5Ug1aUbWX^1z%m59aWywYB0IoDdg}56p`-jXfDB+aSPPg2m~Z z9C69;Kq9Y6Q0>Zf7kNHRrWW_rBt9JM!f7{Sj##uf2ct8gbFSH)8D7cegFILg5&`2V zmc9o`(ECgQUmu$j_b(64${ z2Cm~-Fmc~#EI`@w{tWJ1$OD?@6he#w8rfWV;!9vt5z;VtI>mfRBw7?$77TLA_Id@#tmnahdx~Lu%PVWERCta0H4R9 z)dI7KcYATILt}p`!ni7kFhnkxPd^h*1C$((K*d(4KI9!>deKk=B#Q1m>BJzhVTn&G zn%^FY;;+7*Amt!hfYk>Za$b7roCf=(5)bYiSv+Dn@cJNC75-Sim}Vd?C}|frfZ)V~ z24Ruv3|J15hvO965^?@T^9F~}f>B;DBA-bm|gn9is$pG1Pq4W}G~q*Eum0_2VU9HxiQN=c&(LqI8DJ>&EOL&XeY7qqsP zQ882;*nq^S%vVPYq|mgGV2Y7CF&r=lawDlfk$1%kO6Ex8fg*`l>ckweCJ|?Mk~-r$ zPC15BPgJyr9*T(JjA@1S=!VEKaC6}XF&lYc#tkPxmEyRZf}e60FQ2=}zpU9Wmpzs( zXmJho#-;_0bD9 z+sHdRloj)273YCFnpwPN9YEd4eRo6@Av3btjro8B0X}LTnTMzk^nzWVA~2kPGihKo zWX6w}5*+}zUW{eva752>_z0)--j|qE9avLbzp}n@q9?-ZZu=s%5K|1xUVBL(B&sh@ z(y{6ze%$)Gqwp*hDx4vLTouj@B8rSxi2~=%RTXP%A>}`MAcyqg>Mo<1*6SV z_FM)!Kl*&VXzkJxe;@d1I`)y zf^!JfZtvgZo|1J}j0y)GU6@ef`x^Zz=Psfus7J74(LAG70x<=zQqJ5tc$dMvIgNAX zEo@nd=Q!|ABiw1lHfeTRs4Vaa4!Q}EVTnWC($m1=AS2}-r+dzgkfLq^*my;PMIq`g zrB_{KC^+ag5^K)HgAodKiccudTfVe$PKyKC(|Ca1BQ%FRa7cpJahBFw;JR z2m?e{BV!YgH(oN5n{{w`jR&W)z?cc51Gsbqw&mXUAh-Q^Aw}QmM3t-8xiV0;ITwae zSh;<|zUdgq7TJNvr4TsbQPe8hUAR978-`NGQ$SpFf=g$3h()2(lJmH@pbx*li8+;Z zE((TTH7PCO2;HnJ+5Bc=jP{4d7N14^qRdHX}o0s?{x3W5kLAW1|} z$w@#m7)e8B$XN_SP(Tncqaw13D=MayRm@p2u_~rDqT;SD2FwA}ud1J?W-ibE=bVpo zcE|TOJ$3u-P+e7B-PhKkIGtrfC#6wv#kH+@w_qZxX2QgjV#RaI$)&eGNE>z$nu6VD z8-*#0HuZ)r>s}XYY+HxSQX4nL)>}kF(~6tYMGjbEQye*ce>eLX5wLwo49n!#BoE8t zeDf_O!=o0=JW2D)RfByCTar8v7HyMshvz>h9YalzNT79iQUtJqnT(STN7LrE#5 zDx{cr`icnFApDu^H{V%+E9fC9n+txJ+xJ;)%y5!tT(MXj5X4KZG)eq2qcuZK_$&$t_XW)z+FehrQmm z3x`YiEYoG2UqoZ)Yq=ho)VOoR4~m)79Jk&aurk?>`s_4qY?I0=V46LpQM+;BCcf|N z#?c4AZXs=uSi~4%rZoJaL(`&SYUO_-V>Y!dy~%z7XEtpl7M7DNduHHG9XHtAL{}6% z9~&q4EDQ~Y#l1fZ+Im<9X3p68x#=i%8m~6#r$uIgKhPz4G0R%AWyPj%O2N*ZU>WMZ zl(}z8_2)rf5B_i!G)uy^wMUs5Xs3*kESgdy+|~CqdbQ?q z%{5!E+#r~k4h_(;_lzeW^sS*9lD5kzHSAUT*qUfj>ZCB{q}FiP0x<)e#7Z85`B6Fe zwOQaE#`i&JhTFJ_c6P;c?UErjXDV_=m~!DQ=i|@x9s>Jm;6&SFGdfmtUr^KV&&+kx z-ec@;AYKh*-y1g&rvrPgRFg|?Ep0>C4obR#ofbIrzAOff3m{C@xg#7W6dl8hv5g1& z?&yBzH~E=>l+$RIz2ER+O2xAmOkbw+W@v04uJFBOTVY%)TU)q=Y$eSg^9z0~kYL(2 z8HojFPkiRvj&5?B?Z`xm?U?tF)N&}`7$8_{Q?xz}2ul*P$cg#ewxKy@oMn`_XUov< ztd@S%jQvpfs}(~y%d=dVQ?mW3^UE-1M(K0{ip ze6HE4Ti@wP$yV6(G`G`tg%A+7p0;+kIXcmzP8M^G^wPpj^5o$}@FvZGv`LxLXRRq< z_NQ;{5yL_kxqr8Tz4~?S)y18wxnmc&i;&uEnqB0SvZ8Z+z|WwadB8ahjMg*_=#aSR zG~!`i+c^LRFMK4WCE9v>S`My}NX8AqjM>p_#*6)RI^}M+EZ9Uc+uU@y^{=m8ZcoK^ zYu3u1s^C{`*q&RuA_SHgCq&ZO)>vs^ds3Eni_OV2N|P!|&vpOX8r}j7Cd>w=AJn$S zu(9q#(Clo6rwjJYJ9p~Rn>*(PaWSMDLcd!?Dy?w^+sx@!6#D`^F5sz@-shHBGT%}+ zadOPE9`GM22hua-Y&A<((*YruO`m>X8FA;gYys@QN8%12n{Z7mIOuS2cxu z;VpB<_%TR#J4dwiu{$n#ez+5bH{Y6V=oVsHLXpbOPPL`S-TMJsq z&vU|U5_qDddvq4N_Mn~LxZ*D46u6#di*jGVcM>?Ikg0Dw+rG*r9fMO51q+HVvK%&U zxM!n~wtS{Tk7F(FX<3fxXe+drtsj|vQwzw=OnLQb?<$+FVCp(qC3XQjvfnNB%zM#J z7x~}Yj!inW#3-9v6K=EFwz{beOCV1so~cY*Dzd{P^=R7nbbn%87rQtpnU$9LX=x4v z&5E_D#Pt&3?6AFLro}*a$7cQ+LeoD2QIzXtG$RJrIS_WIvnRiELp}MhDbQgRx2cLIOqvZ{mBO9L&9Q)#9aZ&}(dseN zFPE~b4q|WHl#pqq$bYoiYXM1%w3^aRtFD>Hketq<7B;uJY-vvf!3fL}v%u4`U~7~0 zgbhWjd^-2Y|7vN<#5THZ2q6+`W81S(c*J+i0&nW1HeKQ7VHd^XP&Q*tO=JC_Pi$(2 z2fqCLfUOUH$&w}Fo5hjtGc~{6GvM6N;I*aGEN#}$Pp4I&FgGh@TDY%hN(*U7;Q`vR zjqC;wgrf;Of^J$b*^$0$kRtrZV@WE-hKUc`+?40zfg$favxeO)^3j(@Sh}jpTsU(J zTv?g{WFL|TJi#uTNLOQ+Ibe3b1$x8Yc4eQG12b1_CHCN&{TV``p2mD&HeRyD(h*!+ z2+V!)NM#Cmn0IEuiL{N0k(zdpQ+wn3%1Es7CikU;mx{O^N;)S@L+qG%j+m)j^HGyB zv%NPaFIboP-o0`2{%yHK3#J^bv{rdP^Q_AM{|jc0D{zDCMJ&@yvDz53L>_cs>ImCr z@NG*o>e?n_H5p6Hj7jl|6m;@u7g$m-DeZZ=0Xbu&F+KiJY_$xx9%nX*&uIu=C0&2%tTVwYE0_3d0=>9HP39}r132Dl%~7sLqCXZ5^U1)ggaCa%r>_t{2;m6 z?3VRw#+U^dvbIAUj<+a;eXW%I=~klMx{wB(S1K7~>3Z1t9tY)Q&yMevfp zxG~90Bd!H0^~Bf0WCEv5p3z+_y546{XVZf=5^#m5mzZN0MW#g}-9+QNFXl`!Q_}w4 z#!zxQZ0pMu)T~kC%n5tP1ww+O!*k*s4wgoK6 zV9H?pSi5V^+>&I}7py~e+c0;z7bNe*Y*@w>7W>-g!w8Qu zd!N`S@f~h1+-YGkhs9=+`RZwNoabY#V%D?%wXJE)#K6S~1v&1nxtMqC`Wp&6HWbp} zFU)d*yB12+hB1!Xr(;1$`&$#5GwVY(?W%FV#3uU5)eJ_#;-t)DpK`d1}%+!yM#EX6X5CC24VWzdmKi_(4Bk^*y=4CY5Q7Y9RI^yw7HWpEG*4_=EM|a%E8UJyd`X^eP7em1@Vv+AM%ytfExvT?#5Jf;~jlC z%VT(mi| zM(*lhVp89h(ZNg4=%Be{GB(##W<<6lXvr-vpRzM&&4nEqY3kmnej~Q&4nKvJF7irQ zlGYa9eks)<85|baFh}3!b~<@(_V)-Jd`&hCY!0)8-4n&8lwY=p4eLm8$wB(O8S#-P zYfFS>X_%jc(=hywz8mAqj_tH#PuLtuzqTjN#^bEkG@gzC$#DG(liN9SfjdVMV@=-#C|ST4dWo21^Ej5nuzf#jwmKm_X_N%U~IZ325@mEUY)i<-Z3 z!qu5wKIE>ouVfZ1^bIsKB-3ia@+rqRGJbvS@_UuxP2188-)V{+oV1p=`|WL=HRmJc z5BfcFrmd{U&Fkj)wL=1aHIA8YejQ(->28IvPw7o!b+pW^q=tQqfa<}NbKz>7Ovku# z!q*%>ag!!KZbd-^34e)2gQ@c7Tc&lw)Sq?TtP#n!Gi7UO#a;Y3Sfu;n(7PqQSgw!n zWu`!>+ktpZf(>P}=hIx8Xd~TBrnD)MMEf-a92MJZz1?ON1rtmUc3eQdMnP zO?lq9SjcK>rg`2JkN21!f;x_TIX*AhFSahGoE|KG?v0|)aKS-}j@puw{OdHbW3f#G zjC=EznrHE(G^Pr!JHj0-rl9=Y71<4zIGLPIR^*McV1_B}VI_*Z>8C(HPecA7F zrcCzWs)uRQcuWa`I8@|n(0a*~?p%+vFks}-o>WyEI^t&-qTHW1QcVXvFP zDG{n3k7W2&Kej*a9=R?5ZtS>vNcJ0ia5zgg%#(3}HN(6tZ%q5kWPQCuCPg#mfHA^jA6M3VfK?Bb~G>0-(UbUJ?*4e->2!8 z$zpXYIgLLvLoFT{<`GO*UX01>A_Q?$?wX&Ylu zBq^R_n%4Y;1vnYy;rkF#pna1LEBG$1a?Fpm7Yez%WM);;Kxrm>6TH zCQV=g7F!(CRfyxJ+j@fD9WmKY6nSXIH$=jk!tNMGRrXAet+dRP_W@-cUl>4zm4*i7 zVp0%twX!*87$jrR7CXCW$5g*v$zTicM6)vyqp-+Bx=_dGig~%oO0%A@6*vZK>X(9J z^nMuGa#NGTnnn|MH<;*+uY!$fxF>~~7pb2P$W0!UGd-UNe)!Xy#I6tS?*@rkVR&Db z+l}4@X8GFA2#l?CVkaqLj{THN6H%>ns+Ok_eT&u;Cp|h^7{M`(#K=%`tZW6gU~c#f zX({q%!FG>tXQg;ftU#`It*1Rx#}$~LiSolFqb9k_Z@q4TPuoFG$=-2S$rO*^#GEz{ z*uGE7TaB$*zDYL)co6-xu%ug4>HQe#^roAhv$~A(6C*bB(>8-uB57%J_s6=|l7f}A zQezGAx?ooaNh)@d!>XUca!91`PW4nfC}ckkoATCqs>d?cv9)jd&b|^3nba>8m162HAyfx#@DM!h_byq4f!9^*f;H z@LnOSKrYUX7G`Y>?K`MTr_-#@aj}kvR()hz?AI@tOSdVEm|#{-daag6NNu1b{gM2C zYqyL>7}T@hz`-`bQ^tyA!k9MmvtWe}vv-$t>(#?g1`Zk2GwC~cV}5UvU7GZN-#%t* zW^(b7`eIIy51Wk4LAcL+kR_mZOUI^Mow^RN{YVc{Oy-e=^e9_D{3+NZ!>#!<(z1a$ z@9S_J{7dKl3KDS&5BS+R3=0+)Bm(sJ>qu>_o}bpSWY?G%%H4l!t7K)Sh?9=v^QMiqd6ce__}}{^QWAc@?%iD>+p6Sy z(&;>qWwbC33$Gg6;p1m;0XI_uZ}qUh;dRY^Gg+Y_ly-U2h{%a6b0CPrGn0a6v(MjE z#F>%K&ZRg!+zLA%Vk?qmubZy#>{%M_tGjYb?_f*sE96~l5t;Se=wwf)l{#4>aCyya z@C5Mk774TdY;Coipk%0G z=LVrj*xG(VXw(=y!1`_0yu!GedD515Twr4+N6M6?MO-afl{eO|y|mMLvupz}?Wy|y zQwqJrRS~wwYIWm<>Yg*?zIpD1IreJFh`(8;iTeR*EkY}&jw(=tGW&g5 zDahgJNv42dK=|^UY%}^+ZeCbm-CqglcRpBIghH?*fim%A&{RaLYEv<)B)=9EbY(2GsXRiqK?C$gqI?sGUJi!K${ekBh&on<8 zN|fr2ahudXnaA32K`t9K&SZ01%n_Z-jUfxJ+V;3B25UR3zn#c6vlXt1uS`BV%#QMI zHH*j11G{r=;Glk8V4c{==gpHd$GUZ3-@{_sxEwa=_q06`r@QP11{fvk^7k|d zQ`{b!glUFxS`huS>&5)NFv*Qc!7ePPK8Z}b+iGv`*P5AP7-_}yyZ&sZnu%GE<>g<) zvlGpRE7;G2S~K;90D<|xX4f*Zlhg`SA&m(HgKP*{z-mOVeg)Uv72I$>#V&Wj`eRch z`SQN0m(IRUgsws?iuR@Lucj;XJZCOVAdfJ+dFoni@(immhHA?H;b2P!Okupl3Lto4 zr$?sc^cdJ58&8%<+d9oP&U}0Go7t>schyapxSS=9gIKN$F2e9TRZOI(aQk{+uz_GR z0$DL;|C&w1YrO1c+!Uz82ECo$NOrL)-n227=C>J8awI!rI`r+NU(-tXMsFk{UfO1dDNLhlwEFq`JXso`}C^!QW_zB$Wa$Jb9ZoNsyCp!0yVhPQ9)9%(#tngate82!eWgz8_=F z2If51-yT_z&fB$@+0p~MGNacW;KG~YOrcr`VW!41M zEK71;dNkHB^M*X9FNHDa*IKvOPD7d?Np-|aPu-{Xz&*BaZ6g;(wyzcz-L)}^{RWFE z7JgeFD5k_y@}*^oCHu8|mo8=&+BT*wuBMuhFF}Qy{2q9h7Pm@YWU_r{tGa#k^)bCF zVM4*1VLX853#iLU;abnpD+rX^l&}U#XO=xF8^J+;znK|ZN&TkRE!%jv`xouCA-2{{ zx6{CQe4#@1*0Lz{3`Qa?7tFQ^nMs*q0DgWbB}-;gUVWn?)!)B+CN$;Ac(z`m5knuq z*WkNsu^ogQzm(!?2}wL-Y*rhRf4xR2;F(SuTNgS=D^6IM=I{?Ohu@FYTK>9c1f=VK zMWe=x8wyXUr8;|xhs|rgd&l3oW^rP?571h}!l5?Hv0RV#EmIHQMvxM7*UZ-xgtl6F z&Y-Q!W&$z-Q+O=dtUh;!E%(Sz?pPL-E$+5~WUGlavOD9pp$X^G6iK=-KjpUhnk8$D zt>W3+V6e>vs~`0&$PIA6$t*9=Xmz*I{?If}GA(S~@Lhq_lIhWf=i8HM?<2;oOoRkD z4E!(MCQN&21t~yY`P~0|l-jOxTJK`@v&qN3A>SCVsC(LM@`2$OK_u;vwm!{*vLu-? zV{^^ous{gTN2WbJ&x?TBAUm}wW^N7WhgrN^Q@&X$S$GkjHwRy-X?b!sdCY9bl}=l#P<4!_#F1Da$-9HE9STH1AF57u+T{*S!m@ZN3PkLs@Q< zTR&Lmnxe4%iV^cuJjK1mv__h;b92hFSuIsHMM>@bIH^(0vV%d0n<^1LG~1Ha1dd#J zpuk)Mzh4FSW11c4)7f9NVOFhQ;bRN1Z>zXW3^ji*RYLBSrn&FlNt%v6`;wlsvtDV5 zEsRh28IK+V)9#VAu!mpM=(C2O!u-`-91}H#Wp8XXyUF#Z3HA%jr@NgB|0gNH&Jzkw(33LpjMvQ{BAbx-gX|noH`7Bz2*6xCi~*A@<8vJi5pk z;%5rd*)dpQHW56|1^YF1v+Y~?eTB3c%=Pj`m^(?Z;WByag~vUTOxNA$FaIkH8`m-( zOizBIFB=w5OqU+H$?M<3*0}Mu89QM?%KY_f2+WMJOpkEGQd|;ypvjkm6X)_X0gIGv z;XUV*GMx#8_2H*(_|-kqVAI3WmU2d<#H-0Z9Nf&naon`>L^_AZCAd)sLEcMY^xJdo zUA_($WDak^FY^9mpvX6#5DK+qq`B4tGVN_g-}6%}xQh1>6r9qFK(KdWI*jUV$9D>1 zZmKnzrYVzWti9|NodpBI6WY`JjbeIC@fR?dmP^-E(kV(osN^Rep#D-XCWj~1FuYeK z9-ow?t@v>cnzPR0HL!Thrt*ub&{nkE{CG3Q;*dcD;nsL~GZMK>>8IViw1ApX!Rrq# z5zM@1Y<9Rm=}B6c;x@Y`PD`t;W#yUc)!$TI3hG(dAl;H>J4~i=t;%t%JcY;nWk9Ai zJU$Tb*07BjpO~f|>Bx@5HMowNa*UcH^Q zS#8cD#XlRzwH0PeixGvYuP_*5E|6WKkf z+g2m&C5Y*L(~Psl?Gf(jr2wC+Y#d_E27gE3{<_o(w!XSJU%)KvGkv_BPDs1I)a9`T z`NEfk!NPE-!Bz}9KyHfKDYE1!vnJuC9r$9t?t@17D}h`sp+)`W1pXQuYtD3Sl#Trq z_`tgs)5>7`!iDL(IaB-sAkSEfmCQ!%+_dLr2@xL4;$}#kobhN$8V)hxeE?Z-V~lO; zbF>t^ND3EcyV(m%H0jzD!M9mtYnX*x<9$fez4vUk@cu!3nY7PlFT?doVE5^}uJ>VK zYo3q0bokyzlAjrZN#IActtouBB>Ft!0%mP{s2q)*jEmSSu(nPHne|!R@Mpe)rDXXC z@fd>jz2`aOjbyNDZM`j=;dV)EiX&UqZ3hNzgE7Fab4_i>U_87Co6BEiVGAzeqNWnl z{bK1whG|_a*o;s0EVxD64kr6naHJw8<017>TH`&Y1_#Z8u23{?7iTwJx}83FV7I>A za_q%$w!Ec>K1pEs3qzf|dfy0>v`$nE$1!ZfhAx&6j(vO)rH@qR! zqqdQlJwlr@v&UVJm^Xg6i+ZjRI z6K6CsC7xOJ!tb^O!*?%3FL#4Zj3Wai_hKcyB(n|hwuV{J55wW&60%II{5 z4!Yf=*zP4qp0@>MER!aw(-eniI2mIn-Axf0Ck21v;d3sOUAuMfG^CFu6b$w|xqFgIRiuD#++-c)3y~)FkJG&IxE!%YIW4hcd$09tYlhOeq zT3zn8)7G`bbGx<6%}e|C$Q;6dTd0~1W<~+Rl(2A9E&Zkuf8kqd1uK}2Zlz_{BU9FA z5$Lda471QJqo?ruK$U zkAr%hX)mko+to6$Ol4p(^?<1jK%|lRQfHPMEGheckI8dS$F`L{5|noKIU@ZCvAL?e zHY{Z#*hX2Zcna;;#Fi*QPP8(?(d1w(Prz}2uXNTG^tzS`YZb~*%RnY&8`1_)HW?dBHV z+*TN1u~$?04TkB+x6LI#nCn5D!gx5NUP8v+Kw5#v%%yEo3 zrHA>!B^xU(+@ek`6?UJcS1g!q)ihJbG>PrW*-b}yrB_ z)oo;NCTc9NCCcHyiuUtQ`&TTdSS`REqz_7Zr7K*s{GaEuBdorg=@;LD^q-+Nqp~L@4o#G#hN7iQ+dnFg}jZ$Zm7PY znhU(*;47JHti3pOM+wWvaaGWkOy-{k&pUzo?s6 zxA;`4Uy_Bt{J;OdnBkH+-~Rc3{kBAo|Mq|XmB?YE%dbk9B>h(@fuiJ;(&9N)68T^5 zxI|9r|0xe%wg}Enkl&WbDK7*cOXT<{{NH~iat``mXru&doBbu~U-kd^jhC;QEn4v3 zC2}ek{CE6EHT#c)GwmPazae>ij`82#IG!C6@UvSHd_WQWtRndMBKWK#_<2R}{QJVv%{RxtBkL|Ls41;D3AhEU#{# z{hybwiT_OhUz^;^XZcB)^0hMMyJpH~`4+AhF8|O>`6tL-ewN=umFeXVv+_;&H(SXM z5xzT9KCAV^R(#;oko1_~5M>Ioa~t$fIAP{5#~@FYk-|&6K}eO?<$Vo{e|0lFJ3bqc$M}4ef6#GUgd9-JguSo9tur6izk4EI$ z&P~X@-LmUWYjS^XmUqm^IXEMKWJXTC3?D;Y$K+)B^o;zh9$1x;pB?|}GCbQ~8_A>J z_ww1B$fJFNZ!SX4){LBNJ)a@h`j@0X;m^(XZ`lmbj@v33p4Erd$-SQ0^0hKNTfR2A zj)$&A@c!gp&ulvn&XmvcG2~jGbs0I?@vu1~C(Br=BW?Y6VYy`EVp6&MrvDB+|6bYeTU+GU<@{|R@`E=jLVlBs{A_=Uc+X7vteigN z+Ma{S{rhJ7ePo7b<>Y7Ndw!vd9=fFKKBvwcy90~ z$o09;6d`|mhG)O;F7kNpMn3m*@_26WFUj?}dyA0&LxyL+?|$-l?pluLk_<`4bAwkQ z*XQ;j4>|WxPJfXTd}I-F@`7@@VJaB^k2Sb}mbmL!krTXQ5pueUoOo_ekrTX65pqr!Ic38x5;?&~79nR0xsHbk8J?Zjc^RG^ zC;8;jU%#+@mXb$*1z$z3<6&(^e)hRnW_b3w>&fG}yZGEqr;{3 z$4U14*3R&3`?MvGcG%1LdlGrHL-3B|`rMu>hjwxwl|$aY2swjAPRy^dv46|Y}{Z|hG*^b&E($B+45U5JX`(|a@7M*WaMY( z;~SasS^j>ee0HAh%9PLYy&0aBQ<7VMUY~6FvKgLjpXM2!m2*;tXXSJx_wkwK=Vi)g zv3Z!dzsoZ(sd)fq(7ey>Fy^JO#R#dXPJz65VXuJffyrhK;FM`n1o-^Y+^zfU0d z`efT7KT|&Yy*6daXZg$IUeByw`9=|PKF{#%bN3b@zaoXI{OaU7ej1Q_duH3AHMxJ^ zdekNUqa(S-14m}$XX`m8BPYuzWXfm9=XvB>pDpD2+^rco*>>Jd9^+>l?SaoT@{^xP z{w2ANpS>CR+4@)K!*tx%CD(fP$&}C5vp+w0J+pjdrhK-2HfDIXKHD-pE9Z?2&zAqC z2ws*!H2q%HGdwGQI(fA76C5k^$zz@dKaX77Ill<`YeoL6l)p~o2VY-={EbD(-zxH_ zb38mE@`FE7g#2fUkpD)8XZ!IT@@Ti^eD3??(Qd(alWV)}&B)L8OIbcl`>`Xr%gM$) zx)xEsCwbKKbk?&EdDJub=^6Ric*sbRvzGdNg2)M;SA?AD;~q|`(;yx^FPyw-dY6TMjq`ylJ$9nJla3_Gvqo>wihA) zr;}(y3UKT8J>M^74mrQI~@PD$m6-eYm@79>t^IdQCK;aX$L8em+$tRBt;yrL!A~OB=XT7< z&-SB#cmG%1^ewmA(r1SM6ZcT)`o;+tWKw#0=hqAa=W<$5eiq|*k&9K#%G1S7e?W1m zd_2p4(H!CmDUyO%$2jTN@;SHC9=L#QuI`~xKpR=9|g!dYP@=Jvue-ii_;rWxnuM>Vt zKKMU`|4BJd2tT(q%D*Ih?riY4gx|$}|5*6Oi%|YM;aj?c|1P}uH1LS4MLRDB&Z)*p z75ukc{Nf1V`&xoG7QUYKZ!NqJ6+jJ)9_}|$6R|u~>4&^rp|C&bDZNiVqNBOP7n^y;aT=?Pq{G#wB)W2^E zzl`}P5m%0WoYNcf_elAhXMz7A{OIZ66-wY|$XQQ4bA<3Hf2{C6tMK=2gdg7wytDAF zqrp!TUOFFql<>;+!KVm6Y6|$d!gq2pyjXZV_j2KlINu)@-k$CJyzr2-Q+Q9tiT)J+ z&xWXHd9K6J&SUbxYX}ed^@P`>QPWiT^~XcbiNf1Y06$&$F5sM8;k(=67t@44v>1G` z@DjtpZxFs=F!_IwUF=P=>RPQx!63jdn+ zMoZyS`1us!?YltEslvB$KVzuyBRZh`4B?IWea;s?n(OK1!jEnPIU9t3F$(+z;rDUg zy)S$_=iN8LdyaveeZo650k2EF9_{=}4e%DiFCGWpMR04M)(-ob4`UG&VFnq{88%9&cX*X=y;~^(0k*AcOQ!S z%oM)qLhuWOujJ=zg?DI#@|%QD>H~hi@YgxtpAsJJxkGrg=NH0{%!m9Rg~$3^hJH`< z%hQLWd~M-Bp8y{Dv{C-Q9RIDQ{JGQ{9fe2z`v{NvpCP<^Q#?2FY~#5{4FsPj<+oD* zFBbkY^CMRa|1uYHo)>;2_5ZuVA36%<|1G@p1n_;rf4%^`G@l>!|8FnwgN0Y1{y9Q; zjL*La?@D{Mi|`Y;t_=_#@`nq5p7U$6@S`q4J?9JWw-o#$;Ze`ah41CMaHH`1sJA2k zHrnT|^C15@DgRdnLUszjjq`Dra<;=)!Y`sd|C{hqtMS}274S3a^Vm3ij=b66KQ98W zC*{v-0p3jb@6?m+g)hGp<$DT0mv+Te;m1%OuZI;YV>Dzg+m*$tb^3_&0UI?-Ks<0Px5|j`mr= zc6(9E4{L<-?+7o)@%C@w`&Oa+55h~+?=D^mzmMn6<@k?0fvR=>vEn(zHZ2$!}{DN<+o17a~~33^)m3t zzYRIDzU-FrJ?W2pC;VpmO>tyDF^=QI?)hW2V};dVn> z`qx=_arR?>;gi`8!-fC35ON}qH0pWJ5b$%Qd~L4d%Z0x+73HrMKDRx1x%)hNG2`1!QYFB881Sd_m}_&G;|-zogQ zi@+Zi{u2H17lgO%hw^U=e{>}HXTtk02mfC9Kz zw+OF5`{X|17to%6Qh3KPkpEBN7qR_65MGPzyhr$;Ga=_!;k~PYm*LOoudio-*AQNY z`nJCCp&W-TgkLiaaykgFw*b7a@Xgd$X9+)v_R~b+_jQGwdBRK00>4Q3!yIo{2;awe z)?bBxM!kBs@L6>s|54$qJA=O@{Ab!TyM!NiDawB>{I@~i`-L|-3%q=F{EYrOh4ZDB z@E>}jTtne=sfSw&@6!$CI}6{%{)#-(cjzjrP!s~Fp{9X7)j{hfwuj2UGA-oOe>HEU3xeU+!ukd1wZ~rR1emz&!KTi<8jdtK{;g7K&BR@9k8T)#xqke-yrg_J6TM@cWSS z<;nP5N%$>8!4DOlOFem#@Ltp>orIrP7jpIr-*zf^>c1M?Ld}pEeKjuM{47>|Wue zIe#A!p2v0kdEvR#53dV7SPo^|;9D1Xu{@RNma=em53@Xj13 z(}fS@ygOfbbH*W;3xAFF&$YroKLYi+MR@4XM};3oeer_uS@d(?68=qH$p1umRqBVY zgFSqwvq@FWf17*eaBNNciH$;Li)sr+xc|@GAzQ{KvxA z(@ywWc#CsUexLBc?BBA~>(M^1(BD2p_}}V7&QZd*ve&FIrxRtdq)aCh4nmE_(a;1CkQ{5>ul^(h5UBQ zQ2%~X{w99kvxGOGoq411jhsif3m?Gs=pVulr+xT@@Im>g&&$H!VLjgw9{CBogUpN{@Q=m|@5^?ZCH&U2Apb()Z&T0T zEc`pR&t1YtLrl&?!bASI!t<%;V_!PjC)%z2kq{VsF59<;@Dr<}TwUSsHv?}X{IkB!T2=B+w*9iZi1Ilj_-e(2)y~0nq5d1OWpVIDp zN%#rpqx?I<59WONO!!>J&At=9V=(0WDf~af!7J9q&*-n{$3unJp&n}}{Ll9I`&PnF zSODHpcpmlk*}`8hf$}qiM_l53;ftH1{0iZB^ZRZPp3nL}ApB4IBhLx{jdsqP!egKJ zE8*pGbJD+Ggx91USd;5awDUWhc=d(9egvLxrzgh;j{uH#!--rSM$ZTSJAHpdK47JnWXK!XuCFT;VbAo)I4T^X~|++8g!! zRQM_M_rDh2Za&KYD!guM@KV(4(Qe@nHWvO<7nDC<`1zcVorT}ce(xvz$MKMJw(ujC zgHKdWe{inw3XM>HiSV}Vz}E`@p7pswcn{hGw+lak`sxAUuh3q7M)+Kg%h!ZIIuZ5x zPpw^MwHM(JmI!Z4eSVqn<-<_^M&X~90KZdsqtW0G3$MfP^@8vp zyQBQu!jEkW{+aO87lD5-JZAuSG1~RfUq91stStPqCMaJ=c<+Yb#|nRN4fu(|2Q3Eg zA-o^;^AO?JlIIHFHXCwcee*#k*C#Gcq{7RZoofw zKR+)#?z4VFc-V&@3$H@^^=sjk*^m2#pUHM8OT8HV_!8Is+QK8Q)lRs*lQaG6DLmqJ zgM^o-Ju_1Hvgg>)Ao$UjbaH z5FY!3gN29RF+uo;T#x1mFVz?ISuA{HC-61Guc94(tMEHGzqShhmFwD*!bj&q{tn@X z(2jji_@v`d{&V41(a!i$IoGw~jq!KUFDKC6t1bLP&cnvS=WtzUBmB=5klRK00*q&=`ycrN?#GU1c*A!mc|-)n;3A-odT&27T3ACB_R z3g1-@{B_~qQ}2Bwyc_%LOX20aLe8(k9~ui@`Y-qy{n)PuK35ZdZ8Pw?!bg?^Zzg=< z67Z9RzYLsny6{P~pT`Mro{vA6E&MmGn~Q~SFM;xFg+IxCXXs z|LwwOEx>c%5*~isZsDOfz7rnz#pE0ddC@Ne&&TJ3gh#x+w(!HIp!{Ei?>_;&t?)H$ z&+fv%ycp#N3vbVPH(Ge)iA@*&{y~s)f$)g8uM%FRJj!1u`~m92&xQXd#<}p}j0cuv zKSz76Y7O~Sg;(bKUPt(UIWHOuzv@iLIbL||k8~0q`SyK3sJtl@cxXev=Dw!DU|OZd^7b`U*WYnqWoFH$6N|NQTUzg$9cjZ zT#51*2`^p`{0iag={NmV_^jqAf4A_;wErI!zMt*$lJJXYkNrz{pJO2ZKf)hm`5%Qx z9H|8B75&wL{aRIc#0QQP9^<*G@X#~ug-0Bzm+-e}7Y!5Mp7wv9@KeU)`_32s<5cjA zgvYvbx$q_^dqe>xF+i2K+YR zmCgabU--A2FHZ}$Wc3LnGz z93gxQ=jpM+kK_1hD?H)=-Gsk<0qQeQc-*HvLU_#g$iImC$GW*d%E$a&COq;LuM!^f z`exxfdZ3>73csil_~XKlIRpF^;f>jz?+NctyY~y>M-PUapM{qx4qmDienvawP<}Px zB~C-Rdcr@azj>VSm$?3(EIjmBZ{eFb@9q))D#ziY!ehR?D7?iA)bm5(=hC0uBYX$- zPdToi(GI1!ejOtGoJo*hU-;^A;LU}vSOq>?cx%S}76~6pdv~?)yB0yt!@|36R7s6LiAO0l#+tqk(3Hk@oK3ln7R1v;?7Rvuc_=l9!M)>suQNFYA!!8FO zBfKf~|5D+%o`>>lgugo*Jnrj?`cLf+eyfy^bItb&U(0#%gz(RMLeAU5LvMU4yf*vs z8{v5zm-~blTMPMR+Tdr@|A)@_Tut~`$~jW_PU_p1!dKIdJw^DT9Ou1-55;41h6xY5 zB3F3qBTo|^e(plyq33T9{`QG@@ZG{IF9v^3c(niP!k5tQ{ZRO8jGuffyfoXn9OEL< z{t=(AAw2Rz>j~dJ2lZ?wd^YD%JK-U}yYO<;AZMWPyN&}NF8qaV;FE+O%Xu+Z_#Iq# z77PET804%LekSX4o$!WbQ2tioai7Ij;c15^=&uR1 zV~-d9J?r05c-&vpNBHUUAb*(f=eYjn3V)&+%1;wMo9od+;W<@MewpwO^1-hVo>v?E zA>k);Uc4?m#^;B^FKGrj{}mqd`X}KR&PDm+oR`tgkw?(bGYz0?{kdsYNtbPE8*?Q zI|x6j1j_do{wwW`VZviR<_h1z{+lU0@|G3}k8=d$X&*&9ROR?zCHw;VDeHyrI~(=C zN%#e)fNvIl80YET!aq9{e9vVlKS1~$?BC(S=g|(FD7-rNQx*u{$ogFb9&z%+g@?Uy zjPMhv$65&=R2I+cAbd*)@ZQ3IX8B>lW1l5gc*MP@36K1Sg~IPyi03X7KB^D+6~cev zcz9HJ=<^qZN4vc#Jo5WL7T$3Rp8KotK2^aRa(+jDoyYOkQh2e3DBnT&qQT&&3ZFp# zVyN)@=!fPCzkq(tG~sct+Ct$q8{oOigvWaVt`y$8C(3UW9&wc|!sC3wgTlYy_kC7) zoX2@x`1Q^4+)sqB<-Ge`_!#P?Z-kc_2|4?ONBzriyhlGyWB*nY9_J&D6n-lE{hvj0l?gC?T<&%(nls@xI34>|oV!{@_=-_Z#C7~$)}9~XWy<3!zr zH|q^KgN5%e37#wb+Ew7wguhRHzEJp2^vjkBZ%;q{3gNY>Z*LS{mv+$|!oO^qlm0y* zeBPA&?9?|}Jbs)d0@Qp*k8w!to&6dLBJprc(AA2$6 zoGScJ>eUg#qdt>`M}6iA5BaNvhn#i7L(V4QPt$+DNBGq0sQ)9vm(o6YO?ancQ2qnq zH_inALipQk=YzW7_t7tX4#MZdgvU9$UOt=PyP1eZnK3unfm()aQ}34b~l<)0DWd<^)j!rwX= z{C(jgJA!{M{5Y-)KMHR#66K3^$Is};)*R23gx|z=J52cGa`^j(!tdm`X({|5j{j4H zU(PtyDBomxD zO8CV!z;_5AI~@F7;j?L<{9Aa3%TWG1;lEN({vkZ}Dav#GiFWJ2_BmAetJLR>gm2}z zX)S!=0@SCY@NMjuKEkJS{NxI6$?-Eyc#Ny_gx@$H&s`zB+e+}Og|D~}{2t+7GrsYt z@bLd%6drc$+rq={-7S0?*Y|IQPoW+1hw!+kw?a?UH~Q;6?jzI^9{2YiEj;e;Z7DqN z@9iM`^^5VmKEmJQI(vrjxW9Lt@VLKsmhiZ@H(&Ub=is@Q3O~Ir_;tenLciu#;WZiG z*ebjZ`}axVjXCdj2ye%6{+{r-k2LmUqhEG&z4%eeFI|QD7w3G6@<-FosVw}9Vklo* zc-!;98w;Pq`nM6jkK?3^@P(xyr@!#O%?3Y5`1{MjCkcOd0{A@Po48(FA^h*0@3#w& z`zP-g9`~d_B|I+=&)p$>XH)QZg@@kzkMNi;-wTg<{ipDl*A?i;M?XfKq?YiwZ~tiF zyQr613J<;CLHG-_Tlxs!$96bVc$GD1hw;K|ah%K+zWW%IUo8AYeqJNI_#~8HFZ`}% z;I|8Zmv+ko!Y`m*_l)pToTsk|ziA2Ne<=I~#^3e`Kd3Rv|029E^=&EIanX-wu15KT zh1Wa<{7B)^K23#39KVh5>c>G&SK)hxfe#RV813ib!i(|yP8Qyo?K59^yzk>8;gcKT zxt9x%ILwX0f8uku2%lFOavl`Ex*zy+!arOHzEk+KTz7T}kNuRdgb$;A^_%d~Vi@mMhcJHlyYMB{OXd6G z`Oz<-w`&R?u@dEu5q{HT@DqgRvpzk9e@%TgOnB+`kTYI*uNmO8g||8ae5LTXZ-1Te zKRHfr5q>xQg1-yDp8nAj!mlca=YAsmWBP;N2#<546*+IBokw$>`-|{+Ur#&XS8{yz z7yik3)MuXXc+bKT;gKJBtMFGDC%I4fHR?O z3y*r1qh1U-ALrq@O@)tY1Ae0LNu$BL2`@?iVu0}2XFNxE=&?D%&zcDN>x9SqL~a&d zBOm4O5?+P&+k?WNn}YJs3XgsH*Mu)!gYq8;Z@~5L3*kMf_kI-qG}qr^10XNjf9*7U zt|UD2^6LtJE8Yc>m@6}EC2F6bY2)~N{&KTkGo{?$7@1Z_9S9rW%W0~-{ z_xMWTac}cx;S=d!|3i3x>hY(9w`-2}`KR#nJA=P3d?W4cy~5*tANz%O=Xz9mAml|q z-dhfzj}adBMl0dN88_=7{1(=;xA26~A82=7Ea^MLTF7vOvC5dKtk@b`p&#qagG@NTqoeiXj30pt`P z#GhtoRI>m4FF#in-e@k$H5UH2rr>Ra$NAqb$~oWr3twLza>fXc_r**XUY+aUdBXc~ zy;v^%Q|jj{g@-@BQFu+R*IR_2ze?61#-ubGbW z`-I;PoKunOOu;y$9ynC^wX_G~{7saP_G}^LC!UN4oGg6DQ1D*Dqn(Eck9@6B!mp$~ zFh%&LA&|d7`06U)7YYAl4)|rl+t7cA_mIc;Z8{0%?~wBUq8+tO_?#{%|E%y0Wx#g| zKl@VfkA)vO8~hvL*VAtNUHBrdM-|u}QU6_(f2i=dXRn#?HPq)P3O}P6>eE$tYknRp zd@Sw2Ny6iOG>e1}8>Z^UuZMEGAgkJ<@;XeQ+J6n+Bz zl%c}UWxQ*Q@Q5SL6#hQ-Qoit5M^+2Jb^+?MUU=LCa=Y+}b5MSp@M-Md=Y*G7j`DHO zM6`1b*Sk-o{Ki92ey{Mz^Q^#e7jouSK>0(3uO9_|jPPG*ZyYatH1$9i;SX`14-j67 z<8y@YhdEED2!EDwn1#acu8w-H5FUE_8sTxz!Y#rF_)o{9 z{0G8Iv3>Rk|A6}BSK+^M-j$(ViT-+keE7a*gqYFzsvZ{VBx!| zheryJxK^INlS%?pT1Uj+~>Sr_)+v{Hw*u@7M{CR_>)t?pBLVR<8!C* z*0k?G5+3=VdxW>AU-Pr@dn)6(CD^Xfk6UQRRu;aKaib%KSsN&81+ijKkraHx2f>vobM+JkNR{I9{2eV5FYy}=LnB;>=T8rZiD*d z3yA6( z+#Vx5&hfPp9_La!2#<57y@khl(no}EU_4~I@R4k{H-x{p7VXf0@rn4p(f-Yahu?Ry z@aW%O!Xxi)i11RU;<=-QhaEUYcw@#N@`Zmuzk8MNIA6R@c(l(Z;V*GLx<~luj59nU zyi;$EAK`x+5B`Smk4^xePCG8z`6247^M&tRhVmS^I)sK;Iv-nb{^ zd?5UfhT#7d-n%CF&%&SU2VQa{envZd#dWZ%@RjWEBZOZw27iC7@N+qy+X}BoySJP0 zKTAN)K;dmq0Usg!;CkSB!oObwzCif3w687}{_+the}(Ywi@`Sv|LsKZJB9Da2Y*QT ze^!D&FT5Ma$<%dE3D&b4G&R!?{TDIFig#W^M{j~7Tbs_&X;Z-Mqefi-q<9(1lQ9$guhJt=@H=#&c$<|63(xcvt4+L}pC$bC#^6hY-`fTJ3gL4v1ixAMO0JLh3IESx zlz&?I#LK{U3V(Dp_@~16GyvZ#Jo@W*;o)bMAB(?>_Rp_|&ozZFqx=TK-=H3DE&Ra> zkkeK80_wNH!Vg}G@?(ULr~aHRd;s;!BH=CAZmWgIy}Q>7zi9xTyIJ_$PT>C#ep-F- zr-WbM1pJ@E|7->Rk?`v5_iu!MOMCH8;oTUYsm%Er{q+m=*pb3VuEKMV6aF;EVF%&+ z&P4fs!dr2D93lLE&aY|0x3-3y3x(f54}6XA8D+uO3qP$b_-(>p=Qz1vcvF7gr-dI< z3UXc*e&Uhf9|%8#@JnZbw-o*y_fzA((vTDW z(GV#g^LLc+nD0}B$9P^KJkHx+Bs}KPWx^*jj&XzV*~jC1-6s5MuFL-r{u%j`!oQda zIj;!+_yX{M3E#=`p9!yjIm&-4yg2pG@4|b~POd?FC)z*mD`+6R@f^r+Cww=@!zke| zP=229zt)AEcyC5LH|}k@LdtKXe%mPg*(H#3r|=uPfxjlaDdP_x2#@jeh4A8>Uq1@} zg6m*0#xJA(_tC$rB)nH;)aOv)gX!lUEj;4eErn0y=Tn3~!+J(MHR^K~+u-y+UHz-@h%xDco%)gR=&vt@M?GWTFX|KXrF0(Z6?_-t0M&$t-`ZAq^kXmKQ&vH4KjB^3k3)oC zQvv1A7G8z^PMi;mdcI!@<H|ER}UiuiwSt@)A?eoipe?YtXX5r5+f}FdAf3O1lLE#lDg1;%e z(Iwz}gkQz+^po(2M-^j#Mt?;-s-p0SN7WQwx;&oSK=`bY;LU}vr2Tf1@OsprJ%zv7 z2yzAs?=%2>r0`QYuJVN6)C}e43qP|Y_)_5~alA$Td$iBsswlr+%6DS>ZWjI){kW~d zYe7uT6T(Y$$1h$MzMt*fyS=zp9P$O@zmK28@5dv;M|Q+>Ul1Pme!L|-?g#i(c-#-LS9tDV$p2mV z5`N$E9PiQZRcYtf6u#_W$Y~(FVI}Yu!e?_GIYs!H)Q5S(_jiDt`NEIlc(_P-DbBCU zghzhS4Z<7IetJxJ_g;>4Z`nl34Vw07dSq*3IFailz&$E zc=pTd!gtfZ`$%{*&aW?pzrykPtML11kCkRzE&A)Ux~NYz;k~(kS6BEP>YrA^>-U44 zj>0Ro2Jb6;9R1}pg;zWY<;M%ZKOcOy@Ygs#7YW~Y8OpB~K4duf^}6RE7DHxDSSj3$Qdg93EByhg}>MW^T!GD(W-&X`L#pg%)`#XYH6aMt+;Pr$b z$?@4;cmwL+fy(*4h6}Hq3;A)cThu4?|6D154BL6J@V4hb&T8S;ay`9H_@l*8{%^wX zU_1X^_zja#{xRYEx`DqaJcoARTf#3m8s$F`KK=sm--P$<4_Um{gjcH# zew6Uej1L?qeD<*@ANSvf{D_(LV7_pl!?6JD0%HtvCocBoVf^6!-LcQgloSoj~*hc5`ffd1{J%oQ=8uEt-U)~BlSNQ$p zGlaL|xV=#L$@E(<75)k9dA;x@Z0FmA52XG7tnjlcpq@L0kDxvAvGCW+q5L<(FB}8@ zyYL$qfmb*eKcm0qHpAybg}38=%E1c{EWfZgKDQL!fbpnPg@+$>tMDBhC-(`D_Xxiv z{MbHt?%TpkQ;&QqJl+euSNJ^IGy8=P=jXEL9r%6Au$`+5kN11l6@JSZ`1>ZpW4|)) zy^HpbeD!`(zI7YOSuXs1%8z?%RL({ze-r!VPT^m1UjIjUlf&@b?}bMkpaS;+;<>F3 zNBNq<#6X=R^xl!EWCF| z@VkYtV0_?V;dh^c^3MzZgzdId`174n{v+Z4T>-vd_`m9cSESt({Zi^g@Pmc#yBNHd z@IR)5A0hnT)VD_q-^u#75FYsorwG5T7v!HR{N$nFLxqoA13p@K>ki;?|3rM>BPW6{ zl=5Xcp05!8_*#^|QTX`E;CBc=v?lli!auDC{*3Uu=x0^nJd1kf_dxl^!W&Wlv=$!k zv*{tc{V>QGDEuPYpW}p|G#TY*2!FLT`1!(na6P(1c<8Zbgnv%G^qTMrt04bF;nyz# z-y{60L&1L$9_N@!<>U9!o)2)|9W4Aw>dzyEzd*aLiSYT2A-A3I*Erw03xA*M&OqVU zv7Ltt?>8zZ{hK7b?*j0-!jEqWzF7Fzl(Sm+BRx_6I^k=lfd5VSNRFTTgn!I&`?&DX z|1SxTIPlxTLvMd7ye9p`{lX7ne6QT1ob)gH_c!`khY0_kx=r)e)W7rvGH{AA&q z_}o*4_oRJ0O!(4SsNWdjQw{>3A^fwl;1>w*Mtf$Z@T*3k{5s(;^#}i(@ReK_o)i8B z^~r0(EA)e$kA+{)cK(m>XE@Hk65jh9$oWC|z>?r~7UO61<6-0Rxv}uIl;2)>oO9_Z zd^X4VVBs&YA4duwL_MD;{0Oc)^M#KaiFz&-e&5;PYlVMDeZF4!2b^D{io-_LpUyYSbj|I1NNM?Zc;yCUAF5&Sx? zfAysN6Rb~D;SUTzecA~>WHfjW;r)7p4;KD?6Yx>OmvjW5D!e_%>tf-hssGmsufqPl zLHNfl?2=M@8gQg|1RhaJKvT!ixP2_Hwj z^ttfEIX-_Be!)t}DNcFOZeJY%URijw&ke%Yw?+Beg|}coJ|Mi_aVYc$Y1efZ zeqw2qA0+%d)_zG5tRg=P2|{dnrB_*_f)Ws|^<7QUq)&;*z_~G;iHVD6GJj&l8ylqGD2ZeW?4gQ?) zVysV`gOB!nkNS3(l;1rDa=sEimF@hS@b3>n`7+D#Gvs&5$LH$8Z{<2$PxwBro6Us( zNj=$K_yrt?J%zWNf#){j`W*F%`^Vb|kNMI?_|(df(_i=kj;nKocRm{BZxcS6`tu>- zhv%Vu*b!0B3gpj8`KDZ#Ulu-rdLZnh0y$iF-jVV*@$+xOw^TuW%3Okyz>K&4lNU2X8NY4dWO+g)hlP`60r8FAF|ecsH(t(}dUQit^_Pf0241;#={3 zi*a0CE#(`}gPfa%pT~IOJ;I-4zdtIxVt2@SQF#Bc;BO0$`w({vzn1Oxt?>4jLe3w; zYteqF5O#r$k4jdw7W=W4@D=RG4#G=OU-cILQe8ZEnD7_5{^kmwTMgx>3BR;7_(I|D zQr})8{Mw2rf35Jd*zcQ#_icvq4+t;kjbZ@_z`Ae4g^F z@cS5V_p+Z35x#OH${i(q#WCQ`gm0Pv-cI<~6TrI*FWmxs3&%^;rz_(&Q&;2n!GEIt ze6H}&pBD>{_bFd4JmM!Cgoj^zzwkTw`6=OVGG4Jm_|5FccZHYdIQ+Np6^-#dzY`w! ziTxqGWi6C1zvjU9d7Sg{5aB;iZyY7O3;mjA!rvJOx$T5kq9l5gdzyi`O>8* zN>!9*`R#Duk1qG6|Ge*B7fj|e&pb18=FB-~CY#-h;thh~cf|LUg8w4^c~5u-)_2=( zZjQUW#k({|ypOnjK3#e72<8bC_hNhAP`pn!yCBaz@u%#kR*U}?iTGskrbXZf#k27|UKO{$=X@zXhU4lC^O4WaOOBS9 z_Z6>O2<|VQ!1#vZcUeE%h{y7}=plZd&yfbHvp$U!Z^?FYsxW9Nkwzsv!?e9aIhzY~D?J>oxbe0WqmC+~O8i*Ms|j9cPOc)##i{5H$~Pw|Vqf3LI<`(@|1 zK{3qN5nnMB-c&p>C%l9BtSESh_+$RwXRvq=-iMA7zs=*FB3>#R^3N4-Sr5KSJT3$L zBk@pgc(V9JwhsrzQ*nHCO8n?J+ddKX?_{0xt)mG~8o=evnts*gPV#kZx04;Np}`;kfFzfMK`Y;iAM zcPqqCvK{_FdUi`)0~JrN(p@o?&;*p8L|vc8zlE}jB*6&AP8b1o~s zV-QxTCT`z9)j)jwTZnHX{=7H5pZHFCwD>G9#K($1iG(MJuVTGgDqdw4;x~#Xa$I** z+`gahym)%v&)yP$$n8EBU(gua{Zsq`pG#+1hUIp?s$|4`e(~XKC*Kg?(;D%W#fxwp zQcrv<`@0t6B{;t7B0ik`bzkvA?BAosTLoi(V#Swp+&EMG^XiCSCLYgm^84bAc)UBs z@A3NGC!QFF{NIS@>;nHqeB!%s*K$nlyj(Ag`K;m-Ij$%uK9J>5T6_k#TUEU8MC7k8 zK4(0ZA-)i|diAxqea^rI@tkw8Kexq?v0eRHygB=qzr@4X z{(G%LK07b9D`CEXc-HLjQsSpLzN#Yb$NJM){Ifd9(_Z`yA9#p(X||t(#qBxI81aWZ z?{VS}@*w|0@#6j9YsFu1oV-Qc-skkW`1DE0b40uc+wF7Wo!GA46!&L6eG%Z*lxtUwjY8Efd9E0j^iCS>juHoi5*q<+h)n7R3Cr_h0wpeKEg5 z{F|Qem*N*j!82@nJx>*m2Xc!aO+Z{R@eZlse&TCd!K;f0bKKHE{8(kgw-!%g``Jx= zcLv1w6W>!09xYy&{on-gq;ZIk7azs@rp4l;xj!F>_v3T6B=P%fXZDFVi^X=2i~qs; zb5Xo_NyOh4KgagxnfOxnBjrE9dRBi*@xCTdyysxVH53nuhqn=*7YFYyZr{h$U%V*K zON_YfXRNqA4^I%k%W_^Ko|o;w2Ju@w-fiOcJt=#{y;u(C#6RVA`klD_9p3}-`W%P6 z6z|IRKkJ9DpO?LCPYQ?^>Wa8G#OKiKh}-vTG!?h~>>xfV0{MrETRj;oK6pCfI zw1HO@xAPk$Zs%o>_?OIcMBL)fia%t3`knaIcG#c$;)O=SpNYo~fTu~s)Q)#D$Ipet zTXP&zT0D&7huY$6rXg<=@yK-W2=N&9QzOOgbFpTK+xveOi5F^){AIhE zUUB>T%wytB8Y2F@xV4ABh{yLweBfqGt(*tU#(YEZbmigQ#S?j6hKbi}h4``JV+X?L zh-YE`<>GnS?{5*e^4~2U$NY!H?Yx{8xASsM+|J7r@kHJ~X8jn)Vddu22=fKRlM2B7 z#Vgf<*At)0{-TZe7`8v%#jXDL7Z0t9{7b~`dx(?77qC6wC!T^duH)jHN?x-fHxIC$m^)R_@YXP?Vd9rE!=uH6Sk4Q@dvd!g z#kaA)+bHhM`-_jo53rsb6wk?a>|601Vc5^B;`!L`{3xE14e_bAV`}AZzc0%wo}3+V z1;l%^J$XYsav0)ki`)C4nuurO^V{~~rFgu(#qIN9BE)y|yo?mLaqm=dD~I{wQ}|qK zjkxXqF7ds-INlWTO&rgh5#K)q@!yG0nF@a-KBhPPPw}Sgcf59Bxt&Ml-Ui~qysq1d58(Y;FY)-v$R8=*sU&=i_?!vw>Ef%4!551!WxudN+{Vc}#N#>6 z*(aX2HS(VjugUwDE8^|q5&x6;9Nrf^7Z2n3B*RXuXXoW6+xa}=T{wO&A%3e8)~_TU z5CpF$zP1OvrFe}Q@NVJ@{oqr@XK-@riQnfqJW#w1+sQ`a*>hvN z?ZiI=yLySg!|N_W{9*^JFiQOUIq-MIecHq4i(5aqM!W&r+s)$kzT`dPpYcBHxcIf+ z*zOhacHZ#&;yz$krcdyLoiF?SPG0fbvk+H8+}eSP;_pTwzK-~{1b8#?=N$ic68|_D z@nPa==D}BqZ*B?yNPJ)}_%87@gWxIRm3e)g7Pofey7+#!d-uhE=#Bg@#G~2nW&9M& zt^5!6!h9Za`+iN3;#si#t8?+tMo(sDe>Lx7p{w2{r5}8dUjqOvi}McxA;cl z_IW|=#0ykM-d^Ii{}JMs*q%=nxBG~B;&t;Q|7vl2UvZ+iwM)Ciqe77@9vVAMz9u-=7IyTD(L9cop%L>^JL)mty%e7k_s&@+=om zJsh4W&S9EsyLbY}C&}Xcb-(NE9^|ufTapIzH^ehlgg+3s-%n-v;`KbUhhaXSxYf@R z;$N~o4-n5#1bJ$UZ(#e=MBMVX7q|Sq#qIs2k>Z0&W4j6B`?A1Sh&SNxqt}XmHw5vU z#FIGQ`&hg@`;ndEfARUoXX58Lp5H6JZYZ{!B3_Ws2abuiX8bAfO!biGqWF%I@W1p*;t#qY&kpgQ2E)G;Kf~vKUyC1!K>T^}{%k*QikIPd`;qvCTF8@rFQ!)h z)7YNp6n~%BT@mqKJ+Xde@g8g+>WVKPfcWO(rP+^n7O&)k_;B&~?(it_Nj%;O;$PQ6 ze1f=ruijGebuAFTQ9LmLzC(OVNBCax3q0@t6Tigv@UggkUg#g<_P+g0`&_SHcD@P~ z!+aj`HoU%yi`%%Xg1B8@HN@X%f7eL7UUh7@t@zDQ_(1VxP2ul|mwXpKMSLFbPv?pU zbDX?Nyfyo^kHow7K>lR$0M_$^;-B|I{3-ET8Q}NC!>7Psh*zl(&#)g;J6{Vh>+%-A z;kF#4qqVT_nDPc)u1ZUXFR@h@UEfJS)U&a~!xyJiIgFZ-@`&c=*1!)!TFju%4A$ex9$K;>*~N zR1p6w8tc~(?^XfcNZjtz+lnVmM|=+}@YIQM@S|jxWXS^T&^h zH!g(jo)z!ScJh&Ux+#eNUEIFMGh+&t+xd#0i+OMHm!;u8;(vdSr1;<8BPss(_ehG{ z_ei!CKg#h*5Am;94gEdL$i8QHI0 z7oW@L8$XFZ;PHALdi}f%XT8lQUgj;t`HJ7|3$HIeC=%XXJc0T9i`#u-jCjs8$P+8> z;|)&`&+-O*iTD`yU+cx~xyM#4$(;UIn&ilI7n9nZWlH-9w;wip}FD-7L3sgn?j346biErb$vAK9eJmNcvpXYr< zsQ5Q=h#w-}IU9V8cnywA@zJHQeogVQIpOWZYqOsB6u;9I@dL#RalAB1{2A;2Eb%jAkS9^R z`B-?exQ$m2h=0xd)|28>c)XXz8{|d)AH;n*u6rV0r7GfGUt?__^EpBRSy-Y6c${(ZanN?vzgh))hjo}=RSIaCkC zliosnu4Av4TWZ#~qT-df|K-Flv7MJWBjA z&--}sG+7WoL;M>)w^=0qT@d2eil5>A<7eVW`1|D)@#<{Hu84>6dDO4sUQ@B%RL3#3 z`W(mmvaI48*^d_xf1l@f%{Q;->CO6|D4v2a*9mcZpY|p3lI*X)7xy2JM8AlCT@n75 z_}*6V!Y44bK#luD+K2qG?-#${jU^B!g zh}-k+#p1Ks9 z{o!ATXUzdWD!z9d{G50lu_?8kbZOT0CI&r(!8 z+cd0SPW(c8cs23Ili|VQm2<#biQkzB?<#(@G`z34AFt~u@jTTKKVEz{+rt^+Z}mm| zBJobFCu_x%dA%PIZ&(I-&WZOM3V$G;n(;5h`(;FY`cs(N`Iio8-dHAXe=oC9{1VUa&*B%@ z5cr;beY+bYF&`{Gnd6fl;(2vN!f;zxY6w+X?ZuF^In`ev|d~u6WKNi2qI8oBcwXb69Tm;m}){&mr!W z3tmJ#vNOD#`1&^R>gp_?hT{2x5#Lt4R4;f>@o8+g2Z@(#iujS@_Ibin#UJ`1ex7(O zj*C`{|HghTQM^8nYnOO`wpS_Q_WcT{#g9i}e{P6>!gk=EcqH3_H0QCNoyQ_0Fke9Y z1;x{SesmaomiTS4xP9*N zC*o__&YTx7mIrxmig(FJzksQg=P!LQ?|<=ix99(L#qIaqoy6^VY^eAawr@kkd$8Xe zD?VU2_G6KF4sZB6@iAH9Tg9`@f}atO=J8$^x8u4ezM~oPJQx3k?M%A=VY!v(eU4jl ziihwyZC&x)fmpwpcrRY39mQ>bCWyE0k36%*x2AzF6yH=GzCyej`>9Rhc7At?+vh;; z6~D#$d`$cf&({U}_Z7F#;q(``_ovkozx@vK zG!b9W9o|>`SV4G{cvM&Tc<~-=|Kr8Cr9%7?ar=A5B=L2uCwIj=bKLlw_&xT&sV`$Y zR&EO_U_P7pdmJYe6u12>CBBsXY!&f=yuSz%zrp^crT7;i*q^TA8{dZa6Hm?!j}f=e zS)C|u-+R7Kd_Bjj$Hn7$AAM20(P(V=8sl=zSN;UmRQRD(|tuR0sPK|B?Gn|Ono zh~Fb#i2chM@nJ&|U;8SiR-R#OC!2^{`_^9EKDQxM+$e0E*re<8lCIox#(Q!CHPWig*#yfy2I zm-wB^h|eY7g7qZ7`0VzGFDBlUzrXMk_hmh-E`F~&@-z@H&VHn|cs?)0cM~sD0Nzi0 z7O(4Q@zHGGCW!ZEy^R;&+Yk8{i$}9QtP|hF{oEqnjQ#s=@yy}Ke@MIp`@7TPQ|cl9 zns{N3({f$Ma;p#3nZJa1_WFn`D?Xj|HbDG)wyV{|XR!S1i+ADvv=mRzcC3qdsj9A5 zuW<1owv)reyK;ZVi9hc8DvfKpxHsFMh2rgMA^tt_3A|6=EM9av;&+KZV>@bPdi^S1m-pSNZeY2c_iK@uFChLtue&$I*K>ScN&HMhoFlT_Yi+H1wKIhI`a${f7%Z56UDz}|2R|pKI`*R@%W0!vr)Wr zOZYbNe%${(;(4PGe?2_rxazBF|>=R6M`C#5+|+{6X7w`1bjcw866@8?4P+v3xC zy*v_M!TR}vo+_2gl^Q8t{h#wTX6(F&vfU`;;q0Pb1^Re+R=3!FP&p5G;@Q2s0zBM_ zx4%oO;o(mFJoi86^_KWyu&a}YJ9!4OJq)4SaV0Z;q{Q3z;7;;zXS+Gw<>9=hdAO6m z2>a`~9`3~NV*DZxcjDJJasTIjt?_UtK7@t6!NZ;Sh3q%Cc(@b)8{>C+xDy}7{{2hw z^f}xM-LIqK4;#SGibu0PUl$)s|4DqFH}d@I;m&@x<8}SQ!=3$H!T5A{u%6Yc#8AxV z5Z~_wFX-V;{^87D%)_1hM;Tw%!=3nBjQ96&C;k-U13lb{uaMULpZisZZuRGP=4mFL zpYff?!<5Pb^qsnof2=se)h75J9$c{dll}w;o(l6IwA0T;)~h7{pR6L zp2^Jfl5XegGLI|c_sD1dgq}y-n|XZ2OVR_xtI}(W$I+XL@1=JXzd#Qa|A9VKynK2b z&p7dh^cmuF=!?Zy(ASG6(znyCeuhrNc6UkqGsd5k_?TeCU-EG0e5GUjbq{yW`*$r7 ze^314yYQzT?&O)qJimLmlgF-$j6YyK+kb1fy~VA57V~f?e?SJTU(&;!{B|7$c(@ZE z&iJYx?!?=5RL{em_>39d|G8fcJ=}>8DDjG2tv%d{-^=*+9`3~3b=S+oo%k!6kSEN; zo%qdc&xd%p6aTIApZgUNy@>b$dO7h&^y=c?d@j*YJdEB}d?#1!X z3-N~Z3_repe%sT%#e36>i^tFd=+@4B#^*@YBtDk$EhXOC$u8p7E`@n`X7?^9u>KG5 zaHmRHJ1|__+N)R(ck(pm^)l7NojlfF&GB$2{w(7cdbksB?d^Nw%{X4#OtiRa*Rtux|}=r_b;^SF1){dyq2hW=9g06pVRSkLzJ2YMdyhP=P<74J?D5Fbjf zEuKJcD!zu^QT#AHRQx)9sCZi5w~iCH``H=dfs9`)-h{qhJchnad;$Fn@nrhf;%W1v z+%Je1rr#D1qG!B^_3XMUQ4{lJ#ph0fzbXDhXLx<_z%1}i;@Mij`-mSZ10N;+lFy4~ zh##zv_~qh1alE%tdGR?d&w zU_O`l6yDzz5l2=iIQGckW&@pB^(UtIj|PvmiwC>~e_OoeKzJ|l-Mk)$i!b2w!>QtTQzOq@@yq`372*qdUB54$o$bkX@lvc0 zr^To7c<+jLO*5h`%7-vlaZN`0o?p55((LfoFb%sh!{U{JmIS@t`=w`HIJ|ov$GNuoU8J zi2E_Vn|d3>M~LTSo_EA&2O@rw_K>4 z`ESJUk4K*C;=UY5-4p*{F5;hw_nZt*`!l9?e&1_}`5fXSIKJ}!4=*Gh%Ht~bAD$kY zaXH(~$e*1_4*qQ8e_K?a*MT~RJFoKCy3RUmwpe^}z}d7Za=Kb)8DPky@XkKMPr{G&%j#)R~7Ph+Am?QcItg-3+=$ApiJaruXZ z#Duu~`$R{({G*0AGfsFV|3LSw6BHKSXL!F}0|xgU;tqZFb4Z^)QQ;$OE@DXNYmp&Q zA%pvcJIVf8J7U1#aEo^*cln17iHr;%?B4j`Au-|pjazl75FHZ|I_R~P`bLFBhU19; z|Ni%JukI9))g#Lm#2=bi1>n4A9dpQedxi4|I>`Oc^L3qnKpw>Q-l<>Cc5Ho1>nwJh z!vyzFc*R+O0jE5jf2&guot*!#>sNBG>*TEL{^$9!?H_Rt&f{hKZ~M{6z07|02y?aN z_@E@OTU(~FLGA_rR(?JY5Sbi?sZ)N=IkN3r@w9cD=5&*5cy{PwFj0#W1Z&t-;VzRfAMDPJIC)dU3&aZ^Q$@C|3hcLt*O#a!|Ht}1T)(%hV8?G+cesD}xAOC0`8{HwQ+_$! z|7?9LSI4A^zFH$kd+5PebN~D&yYs5-cnkJVko%|DuMpXr$@91^m;0Y?Ka<=3ZTr_# Ou>K$J<(@Cy{{I0s?JsKp literal 0 HcmV?d00001 diff --git a/drivers/power/sd77426_fg_mmi/oz8806_battery.c b/drivers/power/sd77426_fg_mmi/oz8806_battery.c index 0ab63a9bc164..b9fb02ad97d3 100644 --- a/drivers/power/sd77426_fg_mmi/oz8806_battery.c +++ b/drivers/power/sd77426_fg_mmi/oz8806_battery.c @@ -24,9 +24,8 @@ #include #include #include -//#include #include - +#include //you must add these here for O2MICRO #include "parameter.h" #include "table.h" @@ -42,7 +41,12 @@ static int fg_hw_init_done = 0; static uint8_t bmu_init_done = 0; static int oz8806_suspend = 0; static DEFINE_MUTEX(update_mutex); +#ifdef OZ8806_API +struct mutex *update_mutex_ptr = &update_mutex; +bmu_data_t *batt_info_ptr = NULL; +#else static bmu_data_t *batt_info_ptr = NULL; +#endif static gas_gauge_t *gas_gauge_ptr = NULL; static uint8_t charger_finish = 0; static unsigned long ic_wakeup_time = 0; @@ -333,6 +337,13 @@ static ssize_t oz8806_debug_store(struct device *dev, struct device_attribute *a return _count; } +static ssize_t oz8806_save_capacity_show(struct device *dev, struct device_attribute *attr,char *buf) +{ + if (capacity_init_ok && gas_gauge_ptr && gas_gauge_ptr->stored_capacity) + return sprintf(buf,"%d\n", gas_gauge_ptr->stored_capacity); + + return sprintf(buf,"%d\n", save_capacity); +} static ssize_t oz8806_bmu_init_done_show(struct device *dev, struct device_attribute *attr,char *buf) { @@ -369,51 +380,12 @@ static ssize_t oz8806_bmu_init_done_store(struct device *dev, struct device_attr schedule_delayed_work(&the_oz8806->work, 0); return _count; } -static ssize_t oz8806_save_capacity_show(struct device *dev, struct device_attribute *attr,char *buf) -{ - if (capacity_init_ok && gas_gauge_ptr && gas_gauge_ptr->stored_capacity) - return sprintf(buf,"%d\n", gas_gauge_ptr->stored_capacity); - - return sprintf(buf,"%d\n", save_capacity); -} -#ifdef USERSPACE_READ_SAVED_CAP -static ssize_t oz8806_save_capacity_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) -{ - int val; - struct oz8806_data *oz8806; - - if (&(the_oz8806->myclient->dev) == dev) - oz8806 = dev_get_drvdata(dev); - else //this device is the private device of power supply - oz8806 = dev_get_drvdata(dev->parent); - - if (kstrtoint(buf, 10, &val)) - return -EINVAL; - save_capacity = val; - batt_dbg("save_capacity:%d\n", save_capacity); - - if (oz8806 && !bmu_init_done) - { - cancel_delayed_work(&oz8806->work); - schedule_delayed_work(&oz8806->work, 0); - } - - return count; -} -#endif static DEVICE_ATTR(registers, S_IRUGO | (S_IWUSR|S_IWGRP), oz8806_register_show, oz8806_register_store); static DEVICE_ATTR(chip_id, S_IRUGO, oz8806_chip_id_show, NULL); static DEVICE_ATTR(debug, S_IRUGO | (S_IWUSR|S_IWGRP), oz8806_debug_show, oz8806_debug_store); -static DEVICE_ATTR(bmu_init_done, S_IRUGO| (S_IWUSR|S_IWGRP), oz8806_bmu_init_done_show, oz8806_bmu_init_done_store); - -#ifdef USERSPACE_READ_SAVED_CAP -static DEVICE_ATTR(save_capacity, S_IRUGO | (S_IWUSR|S_IWGRP), oz8806_save_capacity_show, oz8806_save_capacity_store); -#else static DEVICE_ATTR(save_capacity, S_IRUGO, oz8806_save_capacity_show, NULL); -#endif - - +static DEVICE_ATTR(bmu_init_done, S_IRUGO| (S_IWUSR|S_IWGRP), oz8806_bmu_init_done_show, oz8806_bmu_init_done_store); static struct attribute *oz8806_attributes[] = { &dev_attr_registers.attr, &dev_attr_chip_id.attr, @@ -513,19 +485,11 @@ static int32_t oz8806_update_bits(struct oz8806_data *data, uint8_t reg, uint8_t else return 0; } -#if 0 -static int oz8806_check_battery_status(struct oz8806_data *data) + +void oz8806_reset_wkuptime(void) { - uint8_t val; - int ret = 0; - - ret = oz8806_read_byte(data, OZ8806_OP_BATTERY_ID, &val); - - pr_err("battery ID: 0x%02x\n", val); - - return ret; + ic_wakeup_time = 0; } -#endif int oz8806_wakeup_full_power(void) { uint8_t val = 0; @@ -586,8 +550,7 @@ static void discharge_end_fun(struct oz8806_data *data) { batt_info_ptr->fRSOC = 0; batt_info_ptr->sCaMAH = data->batt_info.batt_fcc_data / num_100 -1; - if (bmu_discharge_end_process_callback) - bmu_discharge_end_process_callback(); + discharge_end_process(); } else if(batt_info_ptr->fRSOC > 0){ batt_info_ptr->sCaMAH = batt_info_ptr->fRSOC * data->batt_info.batt_fcc_data / num_100 - 1; @@ -650,18 +613,6 @@ static void charge_end_fun(void) #endif return; } - /* - if(adapter_status == CHARGER_USB) - { - gas_gauge_ptr->fast_charge_step = 1; - } - else - { - gas_gauge_ptr->fast_charge_step = 2; - } - */ - - if((batt_info_ptr->fVolt >= (config_data.charge_cv_voltage - 50))&&(batt_info_ptr->fCurr >= DISCH_CURRENT_TH) && (batt_info_ptr->fCurr < oz8806_eoc)&& (!gas_gauge_ptr->charge_end)) @@ -765,9 +716,7 @@ charger_full: { batt_dbg("enter charger charge end"); gas_gauge_ptr->charge_end = 1; - - if (bmu_charge_end_process_callback) - bmu_charge_end_process_callback(); + charge_end_process(); charger_finish = 0; chgr_full_soc_pursue_start = 0; @@ -876,6 +825,7 @@ static void oz8806_lock_soc(struct oz8806_data *data) car = rsoc_pre * data->batt_info.batt_fcc_data / 100; temp = (car * config_data.fRsense) / config_data.dbCARLSB; //transfer to CAR + temp /= 1000; i2c_smbus_write_word_data(data->myclient, OZ8806_OP_CAR,(unsigned short)temp); } @@ -892,12 +842,14 @@ static void oz8806_lock_soc(struct oz8806_data *data) batt_info_ptr->fRC = car; batt_info_ptr->fRCPrev = car; temp = (car * config_data.fRsense) / config_data.dbCARLSB; //transfer to CAR + temp /= 1000; i2c_smbus_write_word_data(data->myclient, OZ8806_OP_CAR,(unsigned short)temp); } } } } + static void oz8806_battery_func(struct oz8806_data *data) { unsigned long time_since_last_update_ms = 0; @@ -924,8 +876,8 @@ static void oz8806_battery_func(struct oz8806_data *data) /**************mutex_lock*********************/ mutex_lock(&update_mutex); - if (bmu_polling_loop_callback && !oz8806_suspend) - bmu_polling_loop_callback(); + if (!oz8806_suspend) + bmu_polling_loop(); oz8806_update_batt_info(data); @@ -974,8 +926,6 @@ int32_t is_battery_exchanged(void) } EXPORT_SYMBOL(is_battery_exchanged); - - static int oz8806_suspend_notifier(struct notifier_block *nb, unsigned long event, void *dummy) @@ -998,8 +948,7 @@ static int oz8806_suspend_notifier(struct notifier_block *nb, mutex_lock(&update_mutex); // if AC charge can't wake up every 1 min,you must remove the if. if(adapter_status == O2_CHARGER_BATTERY) - if (bmu_wake_up_chip_callback) - bmu_wake_up_chip_callback(); + bmu_wake_up_chip(); oz8806_update_batt_info(data); mutex_unlock(&update_mutex); @@ -1047,7 +996,7 @@ static void oz8806_init_soc(struct oz8806_data *data) temp = (int16_t)ret; temp = temp * config_data.dbCARLSB; - temp = temp / config_data.fRsense; + temp = temp * 1000 / config_data.fRsense; if(temp > 5) { init_soc = temp * 100 / config_data.design_capacity - 1; @@ -1174,8 +1123,8 @@ int oz8806_get_battry_current(void) mutex_lock(&update_mutex); - if (oz8806_current_read_callback && batt_info_ptr) - ret = oz8806_current_read_callback(&batt_info_ptr->fCurr); + if (batt_info_ptr) + ret = afe_read_current(&batt_info_ptr->fCurr); if (ret < 0) { @@ -1200,8 +1149,8 @@ int oz8806_get_battery_voltage(void) mutex_lock(&update_mutex); - if (oz8806_voltage_read_callback && batt_info_ptr) - ret = oz8806_voltage_read_callback(&batt_info_ptr->fVolt); + if (batt_info_ptr) + ret = afe_read_cell_volt(&batt_info_ptr->fVolt); if (ret < 0) { @@ -1248,8 +1197,7 @@ int32_t oz8806_vbus_voltage(void) int32_t vbus_voltage = 0; int ret = -1; - if (oz8806_temp_read_callback) - ret = oz8806_temp_read_callback(&vbus_voltage); + ret =oz8806_temp_read(&vbus_voltage); if (ret < 0) { @@ -1267,6 +1215,7 @@ EXPORT_SYMBOL(oz8806_vbus_voltage); int32_t oz8806_get_simulated_temp(void) { return 25; + } EXPORT_SYMBOL(oz8806_get_simulated_temp); @@ -1323,8 +1272,7 @@ void oz8806_register_bmu_callback(void *bmu_polling_loop_func, oz8806_current_read_callback = oz8806_current_read_func; oz8806_voltage_read_callback = oz8806_voltage_read_func; - if(bmu_polling_loop_callback) - bmu_polling_loop_callback(); + bmu_polling_loop(); mutex_unlock(&update_mutex); } @@ -1404,6 +1352,18 @@ int oz8806_get_save_capacity(void) } EXPORT_SYMBOL(oz8806_get_save_capacity); +unsigned long oz8806_get_system_boot_time(void) +{ + unsigned long long time_sec; + unsigned long mod; + time_sec = ktime_to_ns(ktime_get_boottime()); + mod = do_div(time_sec,1000000); + batt_dbg("system boottime: %lu ms", (unsigned long)time_sec); + + return time_sec; +} +EXPORT_SYMBOL(oz8806_get_system_boot_time); + unsigned long oz8806_get_boot_up_time(void) { unsigned long long t; @@ -1419,10 +1379,10 @@ EXPORT_SYMBOL(oz8806_get_boot_up_time); unsigned long oz8806_get_power_on_time(void) { unsigned int t = 0; - pr_info("jiffies %lu,ic_wakeup_time %lu\n",jiffies,ic_wakeup_time); + pr_err("jiffies %lu,ic_wakeup_time %lu\n",jiffies,ic_wakeup_time); t = jiffies_to_msecs(jiffies - ic_wakeup_time); - pr_info("IC wakeup time: %u ms\n", t); + pr_err("IC wakeup time: %u ms\n", t); return (unsigned long)t; } @@ -1492,7 +1452,6 @@ static int oz8806_probe(struct i2c_client *client,const struct i2c_device_id *id pr_err("failed to register power_supply battery\n"); goto register_fail; } - /* * /sys/class/i2c-dev/i2c-2/device/2-002f/ */ @@ -1537,13 +1496,10 @@ static int oz8806_remove(struct i2c_client *client) mutex_lock(&update_mutex); - if (bmu_power_down_chip_callback) - { - //这里需要注意,在关机流程中,必须要调用关机回调,否则芯片可能没有正常休眠,导致下次开机容量异常 - //并且要小心回调之后,如果有work或者线程跑起来,可能会再次唤醒芯片,要避免这种情况。 + //这里需要注意,在关机流程中,必须要调用关机回调,否则芯片可能没有正常休眠,导致下次开机容量异常 + //并且要小心回调之后,如果有work或者线程跑起来,可能会再次唤醒芯片,要避免这种情况。 fg_hw_init_done = 0;//be carefull other thread call bmu_polling_loop_func and wake up chip again - bmu_power_down_chip_callback(); - } + bmu_power_down_chip(); oz8806_update_batt_info(data); @@ -1565,13 +1521,11 @@ static void oz8806_shutdown(struct i2c_client *client) sysfs_remove_group(&(data->myclient->dev.kobj), &oz8806_attribute_group); mutex_lock(&update_mutex); - if (bmu_power_down_chip_callback) - { - //这里需要注意,在关机流程中,必须要调用关机回调,否则芯片可能没有正常休眠,导致下次开机容量异常 - //并且要小心回调之后,如果有work或者线程跑起来,可能会再次唤醒芯片,要避免这种情况。 - fg_hw_init_done = 0; - bmu_power_down_chip_callback(); - } + + //这里需要注意,在关机流程中,必须要调用关机回调,否则芯片可能没有正常休眠,导致下次开机容量异常 + //并且要小心回调之后,如果有work或者线程跑起来,可能会再次唤醒芯片,要避免这种情况。 + fg_hw_init_done = 0; + bmu_power_down_chip(); oz8806_update_batt_info(data); mutex_unlock(&update_mutex); @@ -1597,7 +1551,7 @@ static struct i2c_driver oz8806_driver = { .of_match_table = oz8806_of_match, }, .probe = oz8806_probe, - .remove = oz8806_remove, + .remove = oz8806_remove, .shutdown = oz8806_shutdown, .id_table = oz8806_id, }; diff --git a/drivers/power/sd77426_fg_mmi/parameter.c b/drivers/power/sd77426_fg_mmi/parameter.c index 58c22530a9ea..3b8cc390816a 100644 --- a/drivers/power/sd77426_fg_mmi/parameter.c +++ b/drivers/power/sd77426_fg_mmi/parameter.c @@ -117,6 +117,7 @@ void bmu_init_gg(gas_gauge_t *gas_gauge) gas_gauge->ri = 18; gas_gauge->line_impedance = 10; + gas_gauge->power_on_100_vol = O2_OCV_100_VOLTAGE; #if 0 //add this for oinom diff --git a/drivers/power/sd77426_fg_mmi/parameter.h b/drivers/power/sd77426_fg_mmi/parameter.h index 2aa57fcce29d..e5436f11fb31 100644 --- a/drivers/power/sd77426_fg_mmi/parameter.h +++ b/drivers/power/sd77426_fg_mmi/parameter.h @@ -34,8 +34,14 @@ //#define MUTEX_TIMEOUT 5000 #define MYDRIVER "oz8806" //"oz8806" +//#define OZ8806_API +//#define BAT_STAT + +//two cells application +//#define OZ8806_VME_SEL + #define DISCH_CURRENT_TH -10 -#define O2_OCV_100_VOLTAGE (xaxis_table[X_AXIS - 1]) +#define O2_OCV_100_VOLTAGE 8700 #define TEMPERATURE_DATA_NUM 28 #define num_0 0 @@ -107,6 +113,10 @@ struct oz8806_data struct power_supply *usb_psy; struct delayed_work work; +#ifdef BAT_STAT + struct delayed_work bat_monitor_work; + int32_t bat_changed; +#endif unsigned int interval; struct i2c_client *myclient; @@ -118,7 +128,7 @@ struct oz8806_data typedef struct tag_config_data { - int32_t fRsense; //= 20; //Rsense value of chip, in mini ohm + int32_t fRsense; //= 20 * 1000; //Rsense value of chip, in mini ohm expand 1000 times int32_t temp_pull_up; //230000; int32_t temp_ref_voltage; //1800;1.8v int32_t dbCARLSB; //= 5.0; //LSB of CAR, comes from spec @@ -241,6 +251,7 @@ typedef struct tag_gas_gauge { uint8_t lower_capacity_soc_start; uint8_t percent_10_reserve; + uint32_t power_on_100_vol; }gas_gauge_t; /**************************************************************************** @@ -254,6 +265,8 @@ extern int ZAxisElement[ZAxis]; extern int RCtable[YAxis*ZAxis][XAxis]; //extern one_latitude_data_t charge_data[CHARGE_DATA_NUM]; +extern uint8_t battery_ri ; +extern int32_t one_percent_rc ; /**************************************************************************** * extern variable/function defined by parameter.c @@ -270,6 +283,17 @@ extern int bmulib_init(void); extern void bmulib_exit(void); #endif +//bmulib extern +extern void bmu_polling_loop(void); +extern void bmu_wake_up_chip(void); +extern void bmu_power_down_chip(void); +extern void charge_end_process(void); +extern void discharge_end_process(void); +extern int32_t oz8806_temp_read(int32_t *voltage); +extern int32_t afe_read_current(int32_t *dat); +extern int32_t afe_read_cell_volt(int32_t *voltage); +//endif + #ifdef OZ8806_API //extern void bmu_init_charge_data(uint8_t *dest, uint32_t bytes); extern void bmu_init_XAxisElement(uint8_t *dest, uint32_t bytes); @@ -316,10 +340,11 @@ extern void oz8806_set_batt_info_ptr(bmu_data_t *batt_info); extern void oz8806_set_gas_gauge(gas_gauge_t *gas_gauge); extern int oz8806_get_save_capacity(void); extern int oz8806_get_soc_from_ext(void); +extern unsigned long oz8806_get_system_boot_time(void); extern unsigned long oz8806_get_power_on_time(void); extern unsigned long oz8806_get_boot_up_time(void); extern int oz8806_wakeup_full_power(void); - +extern void oz8806_reset_wkuptime(void); /**************************************************************************** * extern variable/function defined by oz8806_api_dev.c. * This file is deprecated in Linux system. @@ -331,5 +356,37 @@ extern void bmu_call(void); extern int is_battery_exchanged(void); + +#define bmu_dbg(fmt, args...)\ +do {\ + if(parameter->config->debug)\ + printk(KERN_ERR pr_fmt(fmt), ## args);\ +} while(0) +extern int32_t calculate_soc_result(void); +extern int32_t one_latitude_table(int32_t number,one_latitude_data_t *data,int32_t value); +extern uint8_t OZ8806_LookUpRCTable(int infVolt,int infCurr, int infTemp, int *infCal); +void charge_process(void); +void discharge_process(void); + + +extern bmu_data_t *batt_info; +extern gas_gauge_t *gas_gauge; +extern parameter_data_t parameter_customer; +extern parameter_data_t *parameter; + +extern int *rc_table; +extern int *xaxis_table; +extern int *yaxis_table; +extern int *zaxis_table; + + extern int32_t calculate_mah; +extern int32_t calculate_soc ; + +#define X_AXIS gas_gauge->rc_x_num +#define Y_AXIS gas_gauge->rc_y_num +#define Z_AXIS gas_gauge->rc_z_num + + + #endif //end _PARAMETER_H_