From 63bc612bedc409f8c34adb9249b1dbdf81701d49 Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Mon, 9 Jun 2025 15:51:57 +0800 Subject: [PATCH] =?utf8?q?=E6=B7=BB=E5=8A=A0=E5=8E=9F=E5=83=8F=E5=BF=83?= =?utf8?q?=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../config/target_config/brandy/config.py | 6 +- .../boards/brandy_evb/board_config/board_w9.h | 21 +- .../touch/cst86xx_touch/cst86xx_touch1.c | 2 +- .../UI/producttest/include/testPresenter.h | 2 +- .../UI/producttest/src/testhrsenson.cpp | 56 +- code/sdk/zhihui/drivers/bp/bn02/bn02.c | 60 +- .../zhihui/drivers/mag/service/mag_service.c | 43 - code/sdk/zhihui/drivers/ppg/CMakeLists.txt | 3 +- .../drivers/ppg/gh3x2x/inc/gh3x2x_hal.h | 4 +- .../drivers/ppg/gh3x2x/src/gh3x2x_hal.c | 6 +- .../zhihui/drivers/ppg/hx3695/CMakeLists.txt | 2 +- code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c | 256 +- code/sdk/zhihui/drivers/ppg/hx3695/hx3695.h | 7 +- .../drivers/ppg/hx3695/hx3695_check_touch.c | 2 + .../zhihui/drivers/ppg/hx3695/hx3695_hal.c | 6 +- .../drivers/ppg/hx3695/hx3695_hrs_custom.c | 39 +- .../zhihui/drivers/ppg/pah8009/CMakeLists.txt | 52 + .../algorithm/MEMS_INT/Interrupt_function.c | 12 + .../pah8009/algorithm/MEMS_INT/pxi_interp.c | 42 + .../pah8009/algorithm/MEMS_INT/pxi_interp.h | 7 + .../algorithm/pah_hr/V303009/libv307009_4.a | Bin 0 -> 627020 bytes .../pah_hr/V303009/pah8009_testpattern_HRD.h | 23944 ++++++++++++++++ .../pah8009/algorithm/pah_hr/V303009/pxialg.h | 698 + .../pah8009/algorithm/pah_hr/V303009/pxivar.h | 96 + .../pah_hr/V303009/test_library_HRD.c | 112 + .../algorithm/pah_spo2/V703/libv703_0_1.a | Bin 0 -> 902382 bytes .../pah_spo2/V703/pah8009_testpattern_SPO2.h | 257 + .../algorithm/pah_spo2/V703/pxialg_spo2.h | 152 + .../pah_spo2/V703/test_library_SPO2.c | 432 + .../algorithm/pah_stress/V6033/pxialg_hrv.h | 72 + .../ppg/pah8009/factory/pah8009_factory_reg.h | 94 + .../pah8009/factory/pah800x_factory_test.c | 556 + .../pah8009/factory/pah800x_factory_test.h | 160 + .../drivers/ppg/pah8009/sensor/pah800x_bsp.c | 85 + .../drivers/ppg/pah8009/sensor/pah800x_bsp.h | 46 + .../drivers/ppg/pah8009/sensor/pah800x_main.c | 1628 ++ .../drivers/ppg/pah8009/sensor/pah800x_main.h | 192 + .../pah_8009_reg_arr_default_20220623.h | 484 + .../drivers/ppg/pah8009/sensor/pah_800x.c | 833 + .../drivers/ppg/pah8009/sensor/pah_800x.h | 158 + .../ppg/pah8009/sensor/pah_800x_config.h | 163 + .../drivers/ppg/pah8009/sensor/pah_unit.h | 340 + .../drivers/ppg/ppgBleService/CMakeLists.txt | 2 +- .../zhihui/drivers/ppg/service/CMakeLists.txt | 24 +- .../service/{ppg_at_cmd.cpp => ppg_at_cmd.c} | 3 + .../zhihui/drivers/ppg/service/ppg_at_cmd.h | 4 +- code/sdk/zhihui/drivers/ppg/service/ppg_hal.c | 168 + code/sdk/zhihui/drivers/ppg/service/ppg_hal.h | 55 + .../zhihui/drivers/ppg/service/ppg_service.c | 343 + .../drivers/ppg/service/ppg_service.cpp | 533 - .../zhihui/drivers/ppg/service/ppg_service.h | 10 +- .../drivers/ppg/vc9202/src/vc9202_hal.c | 10 +- .../drivers/ppg/vc921x/src/vc921x_hal.c | 6 +- .../rotary_encoder/mixo/mixo_ots_driver.c | 4 +- .../factorytest_protocol.c | 185 +- code/sdk/zhihui/utils/custom_utils.c | 2 +- code/sdk/zhihui/utils/custom_utils_at_cmd.c | 1 + 57 files changed, 31549 insertions(+), 931 deletions(-) create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/CMakeLists.txt create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/Interrupt_function.c create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/pxi_interp.c create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/pxi_interp.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/libv307009_4.a create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pah8009_testpattern_HRD.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pxialg.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pxivar.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/test_library_HRD.c create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/libv703_0_1.a create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/pah8009_testpattern_SPO2.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/pxialg_spo2.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/test_library_SPO2.c create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_stress/V6033/pxialg_hrv.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/factory/pah8009_factory_reg.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/factory/pah800x_factory_test.c create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/factory/pah800x_factory_test.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.c create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_main.c create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_main.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_8009_reg_arr_default_20220623.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x.c create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x_config.h create mode 100644 code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_unit.h rename code/sdk/zhihui/drivers/ppg/service/{ppg_at_cmd.cpp => ppg_at_cmd.c} (97%) create mode 100644 code/sdk/zhihui/drivers/ppg/service/ppg_hal.c create mode 100644 code/sdk/zhihui/drivers/ppg/service/ppg_hal.h create mode 100644 code/sdk/zhihui/drivers/ppg/service/ppg_service.c delete mode 100644 code/sdk/zhihui/drivers/ppg/service/ppg_service.cpp diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index 1312d53d4..8bc109dd3 100644 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -569,6 +569,7 @@ target = { 'CYWEE_SPORT', 'CYWEE_MAC_ACTIVE', 'SUPPORT_CAT1_SERVICE', + 'SUPPORT_CYWEE_SERVICE', 'SUPPORT_TCPIP', 'SUPPORT_HID_SERVICE', 'SUPPORT_BAIDU_MAP', @@ -591,7 +592,7 @@ target = { 'NANDFLASH_F35UQA', 'BLE_INSTRUCT', 'FACTORYTEST_SERVICE', - 'PPG_GH3X2X', + #'PPG_GH3X2X', 'GYRO_SH5001', 'ROTARYENCODER_MIXO', ], @@ -628,7 +629,8 @@ target = { "cywee", "ppg_sensor_gh3x2x", "bp_sensor", - 'gyro', + "gyro", + "ppg_sensor_pah8009", ], 'image_analysis': False, 'fs_image_path':'fd230', diff --git a/code/sdk/drivers/boards/brandy_evb/board_config/board_w9.h b/code/sdk/drivers/boards/brandy_evb/board_config/board_w9.h index d43bff4a8..4939b1c76 100644 --- a/code/sdk/drivers/boards/brandy_evb/board_config/board_w9.h +++ b/code/sdk/drivers/boards/brandy_evb/board_config/board_w9.h @@ -15,7 +15,7 @@ extern void bp_int_callback(pin_t pin, uintptr_t param); #endif -#ifdef PPG_GH3X2X +#ifdef SUPPORT_PPG_SERVICE extern void ppg_int_callback(pin_t pin, uintptr_t param); #endif @@ -24,9 +24,12 @@ extern void gyro_int_callback(pin_t pin, uintptr_t param); #endif #ifdef ROTARYENCODER_MIXO -extern void mixo_int_callback(pin_t pin, uintptr_t param); +// extern void mixo_int_callback(pin_t pin, uintptr_t param); #endif +#ifdef SUPPORT_CYWEE_SERVICE +extern void cywee_int_callback(pin_t pin, uintptr_t param); +#endif /** * @addtogroup connectivity_config_boards @@ -225,7 +228,7 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_R3 NC { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_R4 tp reset { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R5 touch int - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R6 PRG_INT 心率中断 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R6 PRG_INT 心率中断 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R7 GYRO_INT2 #ifdef ENABLE_GYRO { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R8 GYRO_INT1 @@ -316,11 +319,11 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = { //默认开启 EXT LDO V3.0 V1.8 { S_AGPIO_L18, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, -#ifdef ENABLE_CYWEE +#ifdef SUPPORT_CYWEE_SERVICE /**G sensor G_INT1 S_AGPIO_L11 G_INT2 S_AGPIO_L19 采用timer 时这些中断要屏蔽*/ - // { S_AGPIO_L11, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, cywee_int_callback }, + { S_AGPIO_L11, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, cywee_int_callback }, //{ S_AGPIO_L19, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_DEDGE, cywee_int_callback }, -#endif +#endif /**S_AGPIO_R1 GPO alipay默认resetpin*/ { S_AGPIO_R1, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, #ifdef SUPPORT_CAT1_SERVICE @@ -338,8 +341,12 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = { #ifdef ENABLE_BN02 { S_AGPIO_R3, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, bp_int_callback }, #endif +#ifdef SUPPORT_PPG_SERVICE #ifdef PPG_GH3X2X - // { S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, ppg_int_callback}, + { S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, ppg_int_callback}, +#elif defined PPG_PAH8009 + { S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_FALLING_EDGE, ppg_int_callback}, +#endif #endif #ifdef ROTARYENCODER_MIXO // { S_AGPIO_L0, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_DEDGE, mixo_int_callback}, diff --git a/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.c b/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.c index c3944210f..e1aaa3ea5 100644 --- a/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.c +++ b/code/sdk/drivers/drivers/driver/touch/cst86xx_touch/cst86xx_touch1.c @@ -172,7 +172,7 @@ static ext_errno cst86xx_suspend(void) return EXT_ERR_SUCCESS; } - cst86xx_reset();//唤醒IC + // cst86xx_reset();//唤醒IC /* Send Sleep Cmd */ reg_write = CST86XX_SLEEP_CMD; diff --git a/code/sdk/zhihui/UI/producttest/include/testPresenter.h b/code/sdk/zhihui/UI/producttest/include/testPresenter.h index 15eeac51c..694f380b7 100644 --- a/code/sdk/zhihui/UI/producttest/include/testPresenter.h +++ b/code/sdk/zhihui/UI/producttest/include/testPresenter.h @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-08-23 10:50:37 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-05-13 18:35:42 + * @LastEditTime: 2025-06-06 16:20:02 * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/producttest/include/testPresenter.h * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ diff --git a/code/sdk/zhihui/UI/producttest/src/testhrsenson.cpp b/code/sdk/zhihui/UI/producttest/src/testhrsenson.cpp index 6bde9cdf1..69b8824c5 100644 --- a/code/sdk/zhihui/UI/producttest/src/testhrsenson.cpp +++ b/code/sdk/zhihui/UI/producttest/src/testhrsenson.cpp @@ -4,12 +4,6 @@ #include "producttest/include/testhrsenson.h" #include "AlarmClockModel.h" #include "cmsis_os2.h" -#ifdef SUPPORT_CAT1_SERVICE -#include "cat1_server.h" -#include "cat1_ctl.h" -#include "cat1_server_hal.h" -#endif -#include "ppg_service.h" #include "producttest/include/testView.h" #ifdef __cplusplus #if __cplusplus @@ -19,9 +13,12 @@ extern "C" #endif #include "pm_veto.h" #include "pm.h" -#ifdef PPG_VC9202 - #include "vc9202_user.h" + +#ifdef SUPPORT_PPG_SERVICE +#include "ppg_service.h" +#include "ppg_hal.h" #endif + #ifdef __cplusplus #if __cplusplus } @@ -100,50 +97,25 @@ namespace OHOS static bool button_falg=true; void testhrsenson1View:: setgrayvalue(int g,int r,int ir) { -#ifdef PPG_HX3695 - if(label_hrsenson_value_vison!=NULL) - { - - char buf[124]={0}; - sprintf(buf,"gray:\n green:%d\nred:%d\nir:%d",g,r,ir); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",buf); - label_hrsenson_value_vison->SetText(buf); - RootView::GetInstance()->Invalidate(); - int8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST; - send_ppg_cmd_msg(md); - button_falg=true; - } -#endif } void testhrsenson1View:: setlightvalue(int g,int r,int ir) { char buf[124]={0}; - if(label_hrsenson_value_vison!=nullptr) { -#ifdef PPG_HX3695 - sprintf(buf,"leaklight:\ngreen:%d\nred:%d\nir:%d",g,r,ir); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",buf); - label_hrsenson_value_vison->SetText(buf); - RootView::GetInstance()->Invalidate(); - int8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST; - send_ppg_cmd_msg(md); - button_falg=true; -#elif defined PPG_VC9202 - //漏光测试 - // send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_LEAKLIGHT_TEST); - LOS_Msleep(500); - uint32_t led_cur = 0; - uint32_t apre_val = 0; - uint32_t aps_val = 9; - vc9202_get_leaklight_data(&led_cur,&apre_val,&aps_val); +#ifdef SUPPORT_PPG_SERVICE + LOS_Msleep(1000); + uint32_t ch0 = 0; + uint32_t ch1 = 0; + uint32_t ch2 = 0; + ppg_get_leaklight_data(&ch0,&ch1,&ch2); send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST); - sprintf(buf,"leaklight:\ngreen:%d\nred:%d\nir:%d",led_cur,apre_val,aps_val); + sprintf(buf,"leaklight:\ngreen:%d\nred:%d\nir:%d",ch0,ch1,ch2); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",buf); label_hrsenson_value_vison->SetText(buf); RootView::GetInstance()->Invalidate(); button_falg=true; -#endif +#endif } } @@ -197,9 +169,7 @@ namespace OHOS int8_t md = PPG_SERVICE_CMD_TYPE_DO_LEAKLIGHT_TEST; send_ppg_cmd_msg(md); button_falg=false; -#ifdef PPG_VC9202 testhrsenson1View::setlightvalue(0,0,0); -#endif } } diff --git a/code/sdk/zhihui/drivers/bp/bn02/bn02.c b/code/sdk/zhihui/drivers/bp/bn02/bn02.c index 7d2de8c69..6f0edafd1 100644 --- a/code/sdk/zhihui/drivers/bp/bn02/bn02.c +++ b/code/sdk/zhihui/drivers/bp/bn02/bn02.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2025-01-16 12:35:15 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-05-24 14:43:40 + * @LastEditTime: 2025-06-04 15:00:26 * @FilePath: /sdk615/code/sdk/zhihui/drivers/bp/bn02/bn02.c * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -24,6 +24,24 @@ #define POWER_EN S_AGPIO_R0 +#define BN02_FILE "user/userdata/bn02.bin" + +static int DATA_HANDLE = 1 << 24; + +static FILE *fp = NULL; + +static int data_cnt = 0; +static int data[16 * 5 * 60] = {0}; + +// int data = ((rxByte[i] & 0xff) << 16) +// + ((rxByte[i + 1] & 0xff) << 8) +// + (rxByte[i + 2] & 0xff); +// if (data >= DATA_HANDLE / 2) { +// data -= DATA_HANDLE; +// } +// 其中:DATA_HANDLE = 2^24 + + bool Bn02_write_reg(uint8_t data) { uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BP); @@ -127,10 +145,33 @@ void bn02_int_handle(void) memset(bn02_buf,0,sizeof(bn02_buf)); Bn02_reads(bn02_buf,48); - if(bn02_get_ble_status()) - { - bn02_replymsg(bn02_buf,sizeof(bn02_buf),1); - } + for(i = 0;i<48;i+=3) + { + + data[data_cnt] = ((bn02_buf[i] & 0xff) << 16) + + ((bn02_buf[i + 1] & 0xff) << 8) + + (bn02_buf[i + 2] & 0xff); + + if (data[data_cnt] >= DATA_HANDLE / 2) + data[data_cnt] -= DATA_HANDLE; + + data_cnt++; + + printf("0x%x 0x%x 0x%x 0x%x\n",i,bn02_buf[i],bn02_buf[i+1],bn02_buf[i+2],data[data_cnt]); + } + // if(bn02_get_ble_status()) + // { + // bn02_replymsg(bn02_buf,sizeof(bn02_buf),1); + // } + + // if(fp && data_cnt <= 48 * 300) + // { + // data_cnt += 48; + // if(fwrite(bn02_buf,1,48,fp) != 48) + // printf("bn02 fwrite failed\n"); + // else + // printf("bn02 fwrite succed data_cnt:%d\n",data_cnt); + // } // for(i = 0;i<48;i++) // { @@ -143,6 +184,9 @@ void bn02_start(void) Bn02_Power_Ctrl(1); bn02_int_init(); Bn02_write_reg(BN02_START_CMD); + + data_cnt = 0; + // fp = fopen(BN02_FILE, "wb"); } void bn02_stop(void) @@ -150,4 +194,10 @@ void bn02_stop(void) bn02_int_deinit(); Bn02_write_reg(BN02_STOP_CMD); Bn02_Power_Ctrl(0); + + // if(fp) + // { + // fclose(fp); + // fp = NULL; + // } } diff --git a/code/sdk/zhihui/drivers/mag/service/mag_service.c b/code/sdk/zhihui/drivers/mag/service/mag_service.c index b2561f258..ce7491490 100644 --- a/code/sdk/zhihui/drivers/mag/service/mag_service.c +++ b/code/sdk/zhihui/drivers/mag/service/mag_service.c @@ -1,47 +1,4 @@ -/** - * Copyright (c) @CompanyNameMagicTag 2022-2022. All rights reserved. \n - * - * Description: Test adc source \n - * Author: @CompanyNameTag \n - * History: \n - * 2022-08-16, Create file. \n - */ - -#include "adc.h" -#define TEST_PARAM_ARGC_1 1 -#define TEST_PARAM_ARGC_2 2 -#define TEST_PARAM_ARGC_3 3 -#define TEST_PARAM_ARGC_4 4 -#define TEST_PARAM_ARGC_5 5 -#define TEST_PARAM_ARGC_6 6 -#define TEST_PARAM_ARGC_7 7 -#define TEST_PARAM_4_BYTES 4 -#define TEST_PARAM_8_BYTES 8 -typedef enum { - SUITE_OK = 0, - SUITE_UNKNOWN_FUNCTION = -1, - SUITE_ERROR_TIMED_OUT = -2, - SUITE_ERROR_BAD_PARAMS = -3, - SUITE_ERROR_PIN_ALLOCATION = -4, - SUITE_ERROR_PIN_DEALLOCATION = -5, - SUITE_ERROR_UNEXPECTED_INTERRUPT = -6, - SUITE_ALLOC_FAILED = -7, - SUITE_CONFIG_FAILED = -8, - SUITE_TEST_FAILED = -254, -} magservice_error_e; - -#if defined(CONFIG_ADC_SUPPORT_AFE) - -#error CONFIG_ADC_SUPPORT_AFE - -#include "hal_adc_v152.h" -#include "hal_adc_v152_regs_op.h" -#else -#include "hal_adc_v151.h" -#include "hal_adc_v151_regs_op.h" -#endif -#include "adc_porting.h" #include "pinctrl.h" #include "debug_print.h" #include "soc_osal.h" diff --git a/code/sdk/zhihui/drivers/ppg/CMakeLists.txt b/code/sdk/zhihui/drivers/ppg/CMakeLists.txt index 88975a2a8..360e652f4 100644 --- a/code/sdk/zhihui/drivers/ppg/CMakeLists.txt +++ b/code/sdk/zhihui/drivers/ppg/CMakeLists.txt @@ -3,4 +3,5 @@ add_subdirectory_if_exist(hx3695) add_subdirectory_if_exist(ppgBleService) add_subdirectory_if_exist(vc9202) add_subdirectory_if_exist(vc921x) -add_subdirectory_if_exist(gh3x2x) \ No newline at end of file +add_subdirectory_if_exist(gh3x2x) +add_subdirectory_if_exist(pah8009) \ No newline at end of file diff --git a/code/sdk/zhihui/drivers/ppg/gh3x2x/inc/gh3x2x_hal.h b/code/sdk/zhihui/drivers/ppg/gh3x2x/inc/gh3x2x_hal.h index fce1cdf13..f9485fc23 100644 --- a/code/sdk/zhihui/drivers/ppg/gh3x2x/inc/gh3x2x_hal.h +++ b/code/sdk/zhihui/drivers/ppg/gh3x2x/inc/gh3x2x_hal.h @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-06-07 11:18:26 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-01-13 14:09:50 + * @LastEditTime: 2025-06-06 11:23:50 * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.h * @Description: * @@ -18,7 +18,7 @@ extern "C" { #include "stdint.h" -typedef uint32_t PPG_CMD_TYPE_T ; +// typedef uint32_t PPG_CMD_TYPE_T ; void ppg_send_cmd_to_gh3x2x_driver(char* mode, uint8_t enable); diff --git a/code/sdk/zhihui/drivers/ppg/gh3x2x/src/gh3x2x_hal.c b/code/sdk/zhihui/drivers/ppg/gh3x2x/src/gh3x2x_hal.c index 2a84d343e..385077b6b 100644 --- a/code/sdk/zhihui/drivers/ppg/gh3x2x/src/gh3x2x_hal.c +++ b/code/sdk/zhihui/drivers/ppg/gh3x2x/src/gh3x2x_hal.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-03-13 15:08:38 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-05-13 16:48:04 + * @LastEditTime: 2025-05-28 14:13:17 * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c * @Description: * @@ -82,7 +82,7 @@ void ppg_send_cmd_to_gh3x2x_driver(char* mode, uint8_t enable) if (enable == 1) { // ppg_service_running_stat = true; - uapi_pm_control(PM_APP_WAKE_NEEDED); + // uapi_pm_control(PM_APP_WAKE_NEEDED); tyhx_poweron(); // GH3X2X_AFE_StartFunction(mode); GH3X2X_AFE_Init(); @@ -90,7 +90,7 @@ void ppg_send_cmd_to_gh3x2x_driver(char* mode, uint8_t enable) } else { - uapi_pm_control(PM_APP_WAKE_NONEED); + // uapi_pm_control(PM_APP_WAKE_NONEED); GH3X2X_AFE_StopSampling(); tyhx_poweroff(); } diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/CMakeLists.txt b/code/sdk/zhihui/drivers/ppg/hx3695/CMakeLists.txt index c55141c0d..c11b318b8 100644 --- a/code/sdk/zhihui/drivers/ppg/hx3695/CMakeLists.txt +++ b/code/sdk/zhihui/drivers/ppg/hx3695/CMakeLists.txt @@ -12,7 +12,7 @@ set(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hrs_agc.c ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hrv_agc.c ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_spo2_agc.c - ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hal.c + #${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hal.c ${CMAKE_CURRENT_SOURCE_DIR}/hx3695_hrs_custom.c ) set(PUBLIC_HEADER diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c index a847f5aa6..0045e149c 100644 --- a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c +++ b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c @@ -32,10 +32,15 @@ // #include "lv_dev.h" // #include "app_task.h" +#ifdef SUPPORT_CYWEE_SERVICE #include "cywee_hal.h" #include "cywee_service.h" #include "custom_utils.h" #include "custom_runtime.h" +#endif + +#include "ppg_hal.h" + FT_CUSTOM_RESULTS_t hrsresult ={0}; @@ -43,7 +48,9 @@ int16_t gsen_fifo_x[64]={0}; int16_t gsen_fifo_y[64]={0}; int16_t gsen_fifo_z[64]={0}; +#ifdef SUPPORT_CYWEE_SERVICE gsenson_t gsensordata[32]; +#endif static uint8_t msg_count = 0; @@ -125,9 +132,10 @@ uint8_t alg_ram[11 * 1024] __attribute__((aligned(4))); //uint8_t alg_ram[10] = {0}; ppg_sensor_data_t ppg_s_data; -static int cywee_hrs_data = 0; +static uint8_t hrs_result = 0; static int history_wear_status = -1; -static int cywee_wear_status = 0; +static uint8_t wear_status = 0; +static uint8_t spo2_result = 0; static uint8_t hx3695_chip_id = 0; @@ -364,7 +372,7 @@ void hx3695_gpioint_cfg(bool en) } #endif -bool hx3695_chip_check(void) +uint8_t hx3695_chip_check(void) { uint8_t i = 0; uint8_t chip_id = 0; @@ -380,13 +388,13 @@ bool hx3695_chip_check(void) //printf("hx3695_chip_check ok chip_id: 0x%x \r\n",chip_id); //Efuse_Mode_Check(); hx3695_chip_id = chip_id; - return true; + // return hx3695_chip_id; } } - printf(" hx3695_chip_check fail! chip_id: 0x%x \r\n", chip_id); + printf(" hx3695 chip_id: 0x%x \r\n", chip_id); - return false; + return chip_id; } void hx3695_get_id(uint8_t *ppg_id) @@ -2237,7 +2245,7 @@ void hx3695_check_touch_init(void) // // 初始化调用入口函数 bool hx3695_init(WORK_MODE_T mode) { - hx3695_msg_callback_t func; + // hx3695_msg_callback_t func; //TYHX_LOG("this chip hx3695_init mode: %d !! \r\n", mode); @@ -2328,11 +2336,11 @@ bool hx3695_init(WORK_MODE_T mode) //TYHX_LOG(" hx3695_init mode : LEAK_LIGHT_MODE \n"); hx3695_factroy_test(LEAK_LIGHT_TEST); - func = hx3695_get_send_msg_callback_func(); - if(func != NULL) - { - func(HX3695_MSG_TYPE_LEAKLIGHT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - } + // func = hx3695_get_send_msg_callback_func(); + // if(func != NULL) + // { + // func(HX3695_MSG_TYPE_LEAKLIGHT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // } break; case FT_GRAY_CARD_MODE: @@ -2344,11 +2352,11 @@ bool hx3695_init(WORK_MODE_T mode) //TYHX_LOG(" hx3695_init mode : GRAY_CARD_MODE \n"); hx3695_factroy_test(GRAY_CARD_TEST); - func = hx3695_get_send_msg_callback_func(); - if(func != NULL) - { - func(HX3695_MSG_TYPE_GRAYCARD_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - } + // func = hx3695_get_send_msg_callback_func(); + // if(func != NULL) + // { + // func(HX3695_MSG_TYPE_GRAYCARD_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // } break; case FT_INT_TEST_MODE: @@ -2717,7 +2725,18 @@ static void get_avg_hrs(int32_t hrs) uint8_t hx3695_get_hrs(void) { - return cywee_hrs_data; + return hrs_result; +} + +uint8_t hx3695_get_spo2(void) +{ + return spo2_result; +} + + +uint8_t hx3695_get_wear_status(void) +{ + return wear_status; } void hx3695_set_hrs_ble_swtich(uint8_t cmd) @@ -2734,33 +2753,35 @@ uint8_t hx3695_get_hrs_ble_swtich(void) void hx3695_wearstatus_update(void) { - if(history_wear_status != cywee_wear_status) + if(history_wear_status != wear_status) { - history_wear_status = cywee_wear_status; - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_wear_status); + history_wear_status = wear_status; +#ifdef SUPPORT_CYWEE_SERVICE + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&wear_status); +#endif } } //脱腕上报未佩戴信息 void hx3695_unwearstatus_update(void) { - hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func(); - if(func != NULL && !uapi_dev_runtime_get_train_status()) - { - hrsresult.lastesthrs = 0; - hrsresult.wearstatus = 0; - //为了主界面脱腕灵敏;需要增加未佩戴 - func(HX3695_MSG_TYPE_HRS_UPDATE, &hrsresult, sizeof(FT_CUSTOM_RESULTS_t)); - func(HX3695_MSG_TYPE_WEARSTAT_UPDATE, &hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - } + // hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func(); + // if(func != NULL && !uapi_dev_runtime_get_train_status()) + // { + // hrsresult.lastesthrs = 0; + // hrsresult.wearstatus = 0; + // //为了主界面脱腕灵敏;需要增加未佩戴 + // func(HX3695_MSG_TYPE_HRS_UPDATE, &hrsresult, sizeof(FT_CUSTOM_RESULTS_t)); + // func(HX3695_MSG_TYPE_WEARSTAT_UPDATE, &hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // } if(uapi_dev_runtime_get_train_status()) { - cywee_wear_status = 0; + wear_status = 0; hx3695_wearstatus_update(); - cywee_hrs_data = 0; - // do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_CHANGE,&cywee_data); + hrs_result = 0; + } } @@ -2847,9 +2868,10 @@ void hx3695_hrs_ppg_Int_handle(void) // { // return; // } + #ifdef SUPPORT_CYWEE_SERVICE memset(gsensordata,0.0f,sizeof(gsenson_t) * *count); - gsensor_get_n_data(*count,gsensordata); + cywee_get_gsensor_data(*count,gsensordata); for(ii=0; ii<*count; ii++) { @@ -2881,7 +2903,7 @@ void hx3695_hrs_ppg_Int_handle(void) gsen_fifo_z_send[ii] = gsensordata[ii].z * 4096 / 10; } - // gsensor_get_n_data(8,gsensordata); + // cywee_get_gsensor_data(8,gsensordata); // for(ii=0; ii<*count; ii++) // { // if(gsensordata[ii].x == 0.0f && gsensordata[ii].y == 0.0f && gsensordata[ii].z == 0.0f) @@ -2918,6 +2940,7 @@ void hx3695_hrs_ppg_Int_handle(void) //PRINT("hxdata:%d/%d %d %d %.3f %.3f %.3f %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsensordata[ii].x,gsensordata[ii].y,gsensordata[ii].z,ppg_s_data.green_cur); } +#endif hrs_wear_status = hx3695_hrs_get_wear_status(); //PRINT("hrs_wear_status: %d !!\r\n", hrs_wear_status); @@ -2962,45 +2985,39 @@ void hx3695_hrs_ppg_Int_handle(void) if(hrsresult.wearstatus == MSG_HRS_WEAR) { - if(hrsresult.hr_living == MSG_LIVING_TRUE) - { - cywee_wear_status = 1; - if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220) - get_avg_hrs(hrsresult.lastesthrs); - } - else - { - cywee_wear_status = 0; - } + wear_status = 1; + if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220) + get_avg_hrs(hrsresult.lastesthrs); } - else + else if(hrsresult.wearstatus == MSG_HRS_NO_WEAR || hrsresult.hr_living == MSG_LIVING_FAIL) { hrsresult.wearstatus = MSG_HRS_NO_WEAR; hrsresult.lastesthrs = 0; - cywee_wear_status = 0; + wear_status = 0; } - hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func(); - if(func != NULL) - { - if(his_wear == hrsresult.wearstatus) - { - wear_cnt++; - if(wear_cnt >= 2 && !his_wear) //未佩戴超过2次 上报未佩戴信息 - { - func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - wear_cnt = 0; - } - } - else - { - his_wear = hrsresult.wearstatus; - wear_cnt = 0; - } - } + // hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func(); + + // if(func != NULL) + // { + // if(his_wear == hrsresult.wearstatus) + // { + // wear_cnt++; + // if(wear_cnt >= 2 && !his_wear) //未佩戴超过2次 上报未佩戴信息 + // { + // func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // wear_cnt = 0; + // } + // } + // else + // { + // his_wear = hrsresult.wearstatus; + // wear_cnt = 0; + // } + // } //PRINT("hrsresult.wearstatus : %d , his_wear : %d , wear_cnt : %d \n",hrsresult.wearstatus,his_wear,wear_cnt); - // PRINT("hrsresult.wearstatus : %d , cywee_wear_status : %d , hr_living : %d \n",hrsresult.wearstatus,cywee_wear_status,hrsresult.hr_living); + // PRINT("hrsresult.wearstatus : %d , wear_status : %d , hr_living : %d \n",hrsresult.wearstatus,wear_status,hrsresult.hr_living); // if(hrs_wear_status == MSG_HRS_WEAR && hrsresult.hr_living == MSG_LIVING_TRUE) // { // if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220) @@ -3014,24 +3031,27 @@ void hx3695_hrs_ppg_Int_handle(void) // hrsresult.lastesthrs = 0; // } + // PRINT("hrs : %d , wear_status : %d \n",hrsresult.lastesthrs,hrsresult.wearstatus); + hrs_result = hrsresult.lastesthrs; + msg_count++; if(msg_count >= 3) { msg_count = 0; - if(func != NULL) - { - //PRINT("hrsresult.lastesthrs : %d \n",hrsresult.lastesthrs); - func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - if(uapi_get_cywee_static_state()) - { - func(HX3695_MSG_TYPE_STATIC_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - } - } + // if(func != NULL) + // { + // //PRINT("hrsresult.lastesthrs : %d \n",hrsresult.lastesthrs); + // func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // if(uapi_get_cywee_static_state()) + // { + // func(HX3695_MSG_TYPE_STATIC_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // } + // } if(uapi_dev_runtime_get_train_status()) { hx3695_wearstatus_update(); - cywee_hrs_data = hrsresult.lastesthrs; + // hrs_result = hrsresult.lastesthrs; // do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_CHANGE,&cywee_data); } } @@ -3155,7 +3175,7 @@ void hx3695_hrs_ppg_Int_handle(void) encoded_hrm[15] = ppg_s_data.green_cur;//绿灯电流 encoded_hrm[16] = ppg_s_data.ir_cur;//红外电流 -#ifdef SUPPORT_BLE_SERVICE +#ifdef SUPPORT_PPG_BLE_SERVICE if(cm_custom_ble_service_on_flag()) ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX); #endif @@ -3414,7 +3434,7 @@ void hx3695_spo2_ppg_Int_handle(void) { return; } - //gsensor_get_n_data(8,gsensordata); + //cywee_get_gsensor_data(8,gsensordata); for(ii=0; ii<*count; ii++) { @@ -3502,7 +3522,7 @@ void hx3695_spo2_ppg_Int_handle(void) DEBUG_PRINTF("block_cnt: %d, data_cnt:%d, hr_result:%d,ir_quality:%d,motion:%d,poor_signal:%d,reliable_score_result:%d,screen_up:%d,spo2_result:%d\r\n",spo2_alg_results.block_cnt,spo2_alg_results.data_cnt,spo2_alg_results.hr_result,spo2_alg_results.ir_quality,spo2_alg_results.motion,spo2_alg_results.poor_signal,spo2_alg_results.reliable_score_result,spo2_alg_results.screen_up,spo2_alg_results.spo2_result); hrsresult.lastestspo2 = spo2_alg_results.spo2_result; - + spo2_result = hrsresult.lastestspo2; // if(hrsresult.lastestspo2) { // store_latest_spo2(hrsresult.lastestspo2); @@ -3511,13 +3531,13 @@ void hx3695_spo2_ppg_Int_handle(void) // hr_sensor_notify_factory_test(); } - hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func(); - if(func != NULL) - { - hrsresult.wearstatus = spo2_wear_status; - func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - func(HX3695_MSG_TYPE_SPO2_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); - } + // hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func(); + // if(func != NULL) + // { + // hrsresult.wearstatus = spo2_wear_status; + // func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // func(HX3695_MSG_TYPE_SPO2_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); + // } @@ -3601,7 +3621,7 @@ if(hrs_ble_falg) encoded_hrm[15] = cal.R_LED; encoded_hrm[16] = cal.IR_LED1; -#ifdef SUPPORT_BLE_SERVICE +#ifdef SUPPORT_PPG_BLE_SERVICE if(cm_custom_ble_service_on_flag()) ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX); #endif @@ -3794,7 +3814,7 @@ void hx3695_wear_ppg_Int_handle(void) hx3695_wear_msg_code_t hx3695_wear_status; hx3695_check_touch_read(&ppg_s_data); - cywee_wear_status = hx3695_check_touch_send_data(ir_buf,*count); + wear_status = hx3695_check_touch_send_data(ir_buf,*count); hx3695_wearstatus_update(); extern uint8_t notouch_cnt; extern uint8_t touch_cnt; @@ -3819,4 +3839,60 @@ void hx3695_lab_test_Int_handle(void) } #endif +void hx3695_control(char *mode,uint8_t enable) +{ + WORK_MODE_T md = NULL_MODE; + if (strcmp(mode, "hrs") == 0) { + md = HRS_MODE; + } else if (strcmp(mode, "hrv") == 0) { + md = HRV_MODE; + } else if (strcmp(mode, "spo2") == 0) { + md = SPO2_MODE; + } else if (strcmp(mode, "leaklight") == 0) { + md = FT_LEAK_LIGHT_MODE; + } else if (strcmp(mode, "graycard") == 0) { + md = FT_GRAY_CARD_MODE; + } else if (strcmp(mode, "ledoff") == 0) { + md = FT_LED_OFF_MODE; + } else if (strcmp(mode, "wear") == 0) { + md = WEAR_MODE; + } else if (strcmp(mode, "single") == 0) { + md = FT_SINGLE_CHECK_MODE; + } + + + if (enable == 1 || md == FT_LED_OFF_MODE) { + hx3695_init(md); + } else { + if(md == HRS_MODE|| md == FT_LEAK_LIGHT_MODE || md == FT_GRAY_CARD_MODE || md == WEAR_MODE || md == FT_SINGLE_CHECK_MODE) + { +#ifdef HRS_ALG_LIB + hx3695_hrs_disable(); + // PRINT("uapi_dev_runtime_get_sleep_monitoring_status : %d \n",uapi_dev_runtime_get_sleep_monitoring_status()); + // PRINT("uapi_dev_runtime_get_hrs_passivity_flag : %d \n",uapi_dev_runtime_get_hrs_passivity_flag()); + if(uapi_dev_runtime_get_sleep_monitoring_status() && uapi_dev_runtime_get_hrs_passivity_flag())//处于睡眠监测 且在心率周期检测期间 上报活体佩戴 + { + hx3695_wearstatus_update(); + uapi_dev_runtime_set_hrs_passivity(0);//清除被动检测runtime + } +#endif + }else if(md == HRV_MODE) + { +#ifdef HRV_ALG_LIB + hx3695_hrv_disable(); +#endif + }else if(md == SPO2_MODE) + { +#ifdef SPO2_ALG_LIB + hx3695_spo2_disable(); +#endif + } + else{ +#ifdef HRS_ALG_LIB + hx3695_hrs_disable(); +#endif + } + } +} + #endif //CHIP_HX3695 \ No newline at end of file diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.h b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.h index 0e78bf5d0..32b00e010 100644 --- a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.h +++ b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.h @@ -245,7 +245,7 @@ void hx3695_delay_ms(uint32_t ms); bool hx3695_write_reg(uint8_t addr, uint8_t data); uint8_t hx3695_read_reg(uint8_t addr); bool hx3695_brust_read_reg(uint8_t addr , uint8_t *buf, uint16_t length); -bool hx3695_chip_check(void); +uint8_t hx3695_chip_check(void); void hx3695_get_id(uint8_t *ppg_id); uint8_t hx3695_read_fifo_size(void); uint16_t hx3695_read_fifo_data(int32_t *s_buf, uint8_t size, uint8_t phase_num); @@ -302,6 +302,9 @@ void hx3695_unwearstatus_update(void); void hx3695_set_hrs_ble_swtich(uint8_t cmd); uint8_t hx3695_get_hrs_ble_swtich(void); uint8_t hx3695_get_hrs(void); -#include "hx3695_hal.h" +uint8_t hx3695_get_spo2(void); +uint8_t hx3695_get_wear_status(void); + +void hx3695_control(char *mode,uint8_t enable); #endif diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_check_touch.c b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_check_touch.c index 09e9a466d..dd10f20ff 100644 --- a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_check_touch.c +++ b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_check_touch.c @@ -9,7 +9,9 @@ #include "hx3695.h" #include "hx3695_check_touch.h" #include "hx3695_hrs_agc.h" +#ifdef SUPPORT_CYWEE_SERVICE #include "cywee_hal.h" +#endif hx3695_wear_msg_code_t hx3695_wear_status = MSG_NO_WEAR; hx3695_wear_msg_code_t hx3695_wear_status_pre = MSG_NO_WEAR; diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hal.c b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hal.c index 4bad4134c..038259e74 100644 --- a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hal.c +++ b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hal.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-03-13 15:08:38 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2024-11-19 19:40:35 + * @LastEditTime: 2025-05-15 17:02:49 * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c * @Description: * @@ -65,7 +65,7 @@ void ppg_send_cmd_to_driver(char* mode, uint8_t enable) if (enable == 1 || md == FT_LED_OFF_MODE) { // ppg_service_running_stat = true; - uapi_pm_control(PM_APP_WAKE_NEEDED); + // uapi_pm_control(PM_APP_WAKE_NEEDED); tyhx_poweron(); //custom_i2c_reset(); hx3695_init(md); @@ -100,7 +100,7 @@ void ppg_send_cmd_to_driver(char* mode, uint8_t enable) hx3695_hrs_disable(); #endif } - uapi_pm_control(PM_APP_WAKE_NONEED); + // uapi_pm_control(PM_APP_WAKE_NONEED); tyhx_poweroff(); } } \ No newline at end of file diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrs_custom.c b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrs_custom.c index c78766d96..2347c705a 100644 --- a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrs_custom.c +++ b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695_hrs_custom.c @@ -35,9 +35,9 @@ void tyhx_delay_ms(uint32_t ms) LOS_Mdelay(ms); } - - +#ifdef SUPPORT_PPG_SERVICE #include "ppg_service.h" +#endif #include "cmsis_os2.h" #define BUTTON_APP_TIMER_INTERVAL 20 osTimerId_t g_timer40_timer = NULL; @@ -47,19 +47,25 @@ static uint8_t g_hx3695_timer_installed = 0; static void timer40_func(void) { +#ifdef SUPPORT_PPG_SERVICE send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_PPG_40TIMER_CALLBACK); +#endif // agc_timeout_handler(NULL); } static void timer320_func(void) { +#ifdef SUPPORT_PPG_SERVICE send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_PPG_320TIMER_CALLBACK); +#endif // heart_rate_meas_timeout_handler(NULL); } static void timer5000_func(void) { +#ifdef SUPPORT_PPG_SERVICE send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_5000TIMER_CALLBACK); +#endif // heart_rate_meas_timeout_handler(NULL); } bool tyhx_timer_init(void) @@ -116,34 +122,5 @@ bool tyhx_timer_stop(uint32_t ms) return 1; } -// S_AGPIO_L26 心率复位 PPG reset -#define GPIO_PIN_PRG_RESET S_AGPIO_L26 -// S_AGPIO_R0 PRG_LED_POWER ON 心率等电源控制脚 -#define GPIO_PIN_PRG_LED_ON S_AGPIO_R0 - -uint32_t tyhx_poweron(void) -{ - uapi_pin_set_mode(GPIO_PIN_PRG_RESET, (pin_mode_t)HAL_PIO_FUNC_GPIO); - uapi_gpio_set_dir(GPIO_PIN_PRG_RESET, GPIO_DIRECTION_OUTPUT); - uapi_gpio_set_val(GPIO_PIN_PRG_RESET, GPIO_LEVEL_HIGH); - - uapi_pin_set_mode(GPIO_PIN_PRG_LED_ON, (pin_mode_t)HAL_PIO_FUNC_GPIO); - uapi_gpio_set_dir(GPIO_PIN_PRG_LED_ON, GPIO_DIRECTION_OUTPUT); - uapi_gpio_set_val(GPIO_PIN_PRG_LED_ON, GPIO_LEVEL_HIGH); - tyhx_delay_ms(100); - return 0; -} -uint32_t tyhx_poweroff(void) -{ - uapi_pin_set_mode(GPIO_PIN_PRG_RESET, (pin_mode_t)HAL_PIO_FUNC_GPIO); - uapi_gpio_set_dir(GPIO_PIN_PRG_RESET, GPIO_DIRECTION_OUTPUT); - uapi_gpio_set_val(GPIO_PIN_PRG_RESET, GPIO_LEVEL_LOW); - - uapi_pin_set_mode(GPIO_PIN_PRG_LED_ON, (pin_mode_t)HAL_PIO_FUNC_GPIO); - uapi_gpio_set_dir(GPIO_PIN_PRG_LED_ON, GPIO_DIRECTION_OUTPUT); - uapi_gpio_set_val(GPIO_PIN_PRG_LED_ON, GPIO_LEVEL_LOW); - tyhx_delay_ms(50); - return 0; -} diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/CMakeLists.txt b/code/sdk/zhihui/drivers/ppg/pah8009/CMakeLists.txt new file mode 100644 index 000000000..31c7b91e9 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/CMakeLists.txt @@ -0,0 +1,52 @@ +#=============================================================================== +# @brief cmake file +# Copyright (c) @CompanyNameMagicTag 2022-2023. All rights reserved. +#=============================================================================== +set(COMPONENT_NAME "ppg_sensor_pah8009") + +set(SOURCES ${SOURCES} + ${CMAKE_CURRENT_SOURCE_DIR}/sensor/pah_800x.c + ${CMAKE_CURRENT_SOURCE_DIR}/sensor/pah800x_bsp.c + ${CMAKE_CURRENT_SOURCE_DIR}/sensor/pah800x_main.c + ${CMAKE_CURRENT_SOURCE_DIR}/factory/pah800x_factory_test.c +) +set(PUBLIC_HEADER + ${CMAKE_CURRENT_SOURCE_DIR}/sensor + ${CMAKE_CURRENT_SOURCE_DIR}/factory + ${CMAKE_CURRENT_SOURCE_DIR}/algorithm/pah_spo2/V703 + ${CMAKE_CURRENT_SOURCE_DIR}/algorithm/pah_stress/V6033 + ${CMAKE_CURRENT_SOURCE_DIR}/algorithm/pah_hr/V303009 +) + +set(PRIVATE_HEADER +) + +set(PRIVATE_DEFINES +) + +set(PUBLIC_DEFINES + PPG_PAH8009 +) + +# use this when you want to add ccflags like -include xxx +set(COMPONENT_PUBLIC_CCFLAGS +) + +set(COMPONENT_CCFLAGS +) + +set(WHOLE_LINK + true +) + +set(MAIN_COMPONENT + false +) + +find_library(LIB_PATH_SPO2 algorithm/pah_spo2/V703/libv703_0_1.a ${CMAKE_CURRENT_SOURCE_DIR}) +find_library(LIB_PATH_HR algorithm/pah_hr/V303009/libv307009_4.a ${CMAKE_CURRENT_SOURCE_DIR}) + +target_link_libraries(${TARGET_NAME} PRIVATE -Wl,--whole-archive ${LIB_PATH_HR} ${LIB_PATH_SPO2} PRIVATE -Wl,--whole-archive) + +build_component() + diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/Interrupt_function.c b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/Interrupt_function.c new file mode 100644 index 000000000..6c91bba23 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/Interrupt_function.c @@ -0,0 +1,12 @@ +#include "pxi_interp.h" + + +void PXI_MEMS_interp(int16_t *src_data, size_t src_data_count, int16_t *dst_data, size_t dst_data_count) +{ + pxi_interp_ex1(src_data, src_data_count ,dst_data,dst_data_count ,3); + pxi_interp_ex1(&src_data[1], src_data_count ,&dst_data[1],dst_data_count ,3); + pxi_interp_ex1(&src_data[2], src_data_count ,&dst_data[2],dst_data_count ,3); +} + + + diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/pxi_interp.c b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/pxi_interp.c new file mode 100644 index 000000000..36ed8cd8c --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/pxi_interp.c @@ -0,0 +1,42 @@ +#include "pxi_interp.h" + + +/***** +* @brief Example of Platform. In this function we initialize powerkey and register callback. +* @param None. +* @return None. +* +*****/ + +void pxi_interp_ex1(int16_t *src_data, size_t src_data_count, int16_t *dst_data, size_t dst_data_count, size_t offset) +{ + float pre_time_acc = 0.0f; + float time_acc = 0.0f; + float d_time = (float)dst_data_count / src_data_count; + size_t idx_ptr = 0; + + for (size_t i = 0; i < dst_data_count; ++i) + { + while (time_acc < (float)i) + { + pre_time_acc = time_acc; + time_acc = time_acc + d_time; + idx_ptr++; + } + + if (idx_ptr == 0) + { + dst_data[i * offset] = src_data[idx_ptr * offset]; + } + else if (idx_ptr == dst_data_count) + { + dst_data[i * offset] = src_data[(idx_ptr - 1) * offset]; + } + else + { + float time_ratio = ((float)i - pre_time_acc) / (time_acc - pre_time_acc); + dst_data[i * offset] = (int16_t)((float)src_data[(idx_ptr - 1) * offset] * (1.0f - time_ratio) + (float)src_data[idx_ptr * offset] * time_ratio + 0.5f); + } + } +} + diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/pxi_interp.h b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/pxi_interp.h new file mode 100644 index 000000000..15c4149b5 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/MEMS_INT/pxi_interp.h @@ -0,0 +1,7 @@ +//#pragma once + +#include +#include + +void pxi_interp_ex1(int16_t *src_data, size_t src_data_count, int16_t *dst_data, size_t dst_data_count, size_t offset); +void PXI_MEMS_interp(int16_t *src_data, size_t src_data_count, int16_t *dst_data, size_t dst_data_count); diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/libv307009_4.a b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/libv307009_4.a new file mode 100644 index 0000000000000000000000000000000000000000..d0d7a954f30762108f5faa77bd93e2ca8c4a4a8d GIT binary patch literal 627020 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∨1^ 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%0A3BeCyYl6PmM}ux%QYf_U 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%0AILP@KlNJ>zbSz4oU3 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 *b9r6V!#mHu-Z=<{5Q<_6xwsX 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⁡r*Y3jcI5NJ6{7-V= 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 literal 0 HcmV?d00001 diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pah8009_testpattern_HRD.h b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pah8009_testpattern_HRD.h new file mode 100644 index 000000000..44b62ae41 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pah8009_testpattern_HRD.h @@ -0,0 +1,23944 @@ +#ifndef _PAH8009_TESTPATTERN_ +#define _PAH8009_TESTPATTERN_ + +#include +#define NF_PPG_CHANNEL 3 +#define NF_PPG_PER_CHANNEL 3 +static const int32_t PAH8009_rawdata_HRD[][NF_PPG_PER_CHANNEL*NF_PPG_CHANNEL] = +{ +{0, 123629, 5910}, +{0, 118569, 5918}, +{0, 113318, 5916}, +{0, 106371, 5944}, +{0, 105522, 5928}, +{0, 96770, 5938}, +{0, 91486, 5928}, +{0, 86122, 5918}, +{0, 81476, 5906}, +{0, 80788, 5908}, +{0, 80266, 5904}, +{0, 79770, 5909}, +{0, 79298, 5908}, +{0, 78950, 5892}, +{0, 78704, 5900}, +{0, 78700, 5897}, +{0, 78620, 5897}, +{0, 78202, 5900}, +{0, 77595, 5903}, +{0, 77266, 5899}, +{0, 77183, 5888}, +{0, 77194, 5893}, +{0, 77168, 5884}, +{0, 76801, 5883}, +{0, 76396, 5875}, +{0, 75904, 5877}, +{0, 75403, 5886}, +{0, 74506, 5860}, +{0, 72984, 5866}, +{0, 71718, 5857}, +{0, 70789, 5854}, +{0, 70106, 5851}, +{0, 69559, 5845}, +{0, 69000, 5840}, +{0, 68416, 5827}, +{0, 67926, 5840}, +{0, 67615, 5840}, +{0, 67369, 5826}, +{0, 66701, 5816}, +{0, 65556, 5820}, +{0, 64648, 5827}, +{0, 63936, 5806}, +{0, 63453, 5806}, +{0, 63170, 5815}, +{0, 62967, 5818}, +{0, 62761, 5801}, +{0, 62594, 5806}, +{0, 62541, 5807}, +{0, 62525, 5799}, +{0, 62088, 5792}, +{0, 61096, 5784}, +{0, 60432, 5782}, +{0, 60066, 5777}, +{0, 59871, 5789}, +{0, 59953, 5791}, +{0, 60000, 5791}, +{0, 60065, 5788}, +{0, 60235, 5786}, +{0, 60431, 5797}, +{0, 60713, 5797}, +{0, 60770, 5797}, +{0, 60015, 5801}, +{0, 59364, 5796}, +{0, 59129, 5776}, +{0, 59016, 5790}, +{0, 59049, 5791}, +{0, 59116, 5783}, +{0, 59132, 5786}, +{0, 59220, 5786}, +{0, 59394, 5795}, +{0, 59670, 5788}, +{0, 59727, 5788}, +{0, 59063, 5796}, +{0, 58552, 5788}, +{0, 58411, 5771}, +{0, 58361, 5771}, +{0, 58441, 5776}, +{0, 58643, 5771}, +{0, 58852, 5785}, +{0, 59047, 5777}, +{0, 59266, 5774}, +{0, 59575, 5779}, +{0, 59891, 5786}, +{0, 59477, 5801}, +{0, 58938, 5776}, +{0, 58697, 5772}, +{0, 58468, 5779}, +{0, 58370, 5771}, +{0, 58427, 5764}, +{0, 58382, 5775}, +{0, 58432, 5772}, +{0, 58479, 5781}, +{0, 58621, 5769}, +{0, 58790, 5773}, +{0, 58663, 5771}, +{0, 58086, 5758}, +{0, 57739, 5760}, +{0, 57461, 5759}, +{0, 57334, 5755}, +{0, 57343, 5751}, +{0, 57375, 5758}, +{0, 57431, 5746}, +{0, 57478, 5755}, +{0, 57565, 5755}, +{0, 57716, 5756}, +{0, 57982, 5749}, +{0, 57981, 5750}, +{0, 57916, 5757}, +{0, 57709, 5734}, +{0, 57546, 5743}, +{0, 57514, 5749}, +{0, 57607, 5742}, +{0, 57762, 5745}, +{0, 57895, 5749}, +{0, 58073, 5756}, +{0, 58254, 5751}, +{0, 58467, 5754}, +{0, 58649, 5742}, +{0, 58465, 5755}, +{0, 58106, 5747}, +{0, 57839, 5753}, +{0, 57640, 5741}, +{0, 57646, 5744}, +{0, 57765, 5744}, +{0, 57903, 5733}, +{0, 58067, 5750}, +{0, 58267, 5750}, +{0, 58492, 5758}, +{0, 58740, 5746}, +{0, 58888, 5746}, +{0, 58582, 5749}, +{0, 58189, 5741}, +{0, 58011, 5749}, +{0, 58024, 5743}, +{0, 58121, 5752}, +{0, 58343, 5745}, +{0, 58442, 5751}, +{0, 58542, 5750}, +{0, 58672, 5766}, +{0, 58794, 5753}, +{0, 58959, 5753}, +{0, 58984, 5760}, +{0, 58907, 5758}, +{0, 58684, 5751}, +{0, 58478, 5740}, +{0, 58365, 5746}, +{0, 58427, 5745}, +{0, 58506, 5751}, +{0, 58578, 5744}, +{0, 58631, 5751}, +{0, 58713, 5762}, +{0, 58823, 5748}, +{0, 58954, 5749}, +{0, 59096, 5754}, +{0, 58921, 5745}, +{0, 58644, 5748}, +{0, 58535, 5737}, +{0, 58464, 5744}, +{0, 58465, 5742}, +{0, 58579, 5748}, +{0, 58640, 5750}, +{0, 58767, 5753}, +{0, 58864, 5743}, +{0, 59022, 5758}, +{0, 59158, 5755}, +{0, 59290, 5754}, +{0, 59226, 5755}, +{0, 58941, 5751}, +{0, 58717, 5758}, +{0, 58687, 5748}, +{0, 58599, 5748}, +{0, 58670, 5744}, +{0, 58694, 5744}, +{0, 58653, 5730}, +{0, 58575, 5736}, +{0, 58443, 5738}, +{0, 58226, 5737}, +{0, 57957, 5731}, +{0, 57664, 5744}, +{0, 57410, 5727}, +{0, 57131, 5731}, +{0, 57002, 5729}, +{0, 56949, 5726}, +{0, 56996, 5734}, +{0, 57041, 5736}, +{0, 57073, 5740}, +{0, 57122, 5733}, +{0, 57229, 5737}, +{0, 57328, 5738}, +{0, 57443, 5738}, +{0, 57591, 5734}, +{0, 57670, 5737}, +{0, 57489, 5742}, +{0, 57335, 5727}, +{0, 57307, 5729}, +{0, 57370, 5730}, +{0, 57454, 5725}, +{0, 57553, 5731}, +{0, 57636, 5726}, +{0, 57694, 5731}, +{0, 57782, 5723}, +{0, 57860, 5731}, +{0, 57953, 5737}, +{0, 57978, 5735}, +{0, 57758, 5737}, +{0, 57593, 5730}, +{0, 57484, 5734}, +{0, 57454, 5735}, +{0, 57447, 5717}, +{0, 57429, 5728}, +{0, 57402, 5740}, +{0, 57444, 5734}, +{0, 57493, 5727}, +{0, 57583, 5723}, +{0, 57683, 5725}, +{0, 57812, 5729}, +{0, 57658, 5716}, +{0, 57615, 5722}, +{0, 57641, 5721}, +{0, 57787, 5715}, +{0, 57986, 5733}, +{0, 58116, 5725}, +{0, 58211, 5727}, +{0, 58335, 5724}, +{0, 58464, 5724}, +{0, 58575, 5719}, +{0, 58657, 5734}, +{0, 58753, 5740}, +{0, 58533, 5730}, +{0, 58259, 5721}, +{0, 58161, 5726}, +{0, 58156, 5737}, +{0, 58106, 5727}, +{0, 58076, 5737}, +{0, 58128, 5731}, +{0, 58129, 5735}, +{0, 58213, 5727}, +{0, 58282, 5733}, +{0, 58282, 5728}, +{0, 58252, 5728}, +{0, 57998, 5721}, +{0, 57697, 5706}, +{0, 57559, 5719}, +{0, 57528, 5713}, +{0, 57520, 5723}, +{0, 57651, 5727}, +{0, 57819, 5719}, +{0, 58009, 5717}, +{0, 58287, 5733}, +{0, 58597, 5741}, +{0, 58811, 5732}, +{0, 59046, 5744}, +{0, 59025, 5726}, +{0, 58912, 5734}, +{0, 58919, 5738}, +{0, 59012, 5732}, +{0, 59143, 5748}, +{0, 59188, 5745}, +{0, 59227, 5749}, +{0, 59316, 5743}, +{0, 59358, 5740}, +{0, 59496, 5750}, +{0, 59627, 5751}, +{0, 59740, 5746}, +{0, 59647, 5735}, +{0, 59492, 5738}, +{0, 59361, 5725}, +{0, 59307, 5727}, +{0, 59357, 5728}, +{0, 59335, 5731}, +{0, 59163, 5729}, +{0, 58947, 5736}, +{0, 58960, 5747}, +{0, 59110, 5739}, +{0, 59246, 5744}, +{0, 59243, 5742}, +{0, 58958, 5732}, +{0, 58742, 5735}, +{0, 58692, 5725}, +{0, 58708, 5746}, +{0, 58787, 5744}, +{0, 59036, 5750}, +{0, 59671, 5735}, +{0, 60295, 5756}, +{0, 60927, 5763}, +{0, 61483, 5775}, +{0, 62005, 5778}, +{0, 62364, 5775}, +{0, 62685, 5780}, +{0, 63073, 5793}, +{0, 63430, 5798}, +{0, 63809, 5806}, +{0, 64149, 5810}, +{0, 64475, 5804}, +{0, 64774, 5810}, +{0, 65019, 5809}, +{0, 65321, 5807}, +{0, 65612, 5812}, +{0, 65791, 5818}, +{0, 65710, 5815}, +{0, 65624, 5802}, +{0, 65575, 5809}, +{0, 65443, 5800}, +{0, 65313, 5812}, +{0, 65198, 5812}, +{0, 65152, 5796}, +{0, 65148, 5795}, +{0, 65237, 5799}, +{0, 65317, 5799}, +{0, 65423, 5803}, +{0, 65467, 5800}, +{0, 65256, 5792}, +{0, 65124, 5790}, +{0, 65061, 5803}, +{0, 65012, 5796}, +{0, 64980, 5796}, +{0, 64932, 5792}, +{0, 64922, 5795}, +{0, 64895, 5803}, +{0, 64900, 5798}, +{0, 64872, 5798}, +{0, 64872, 5793}, +{0, 64747, 5789}, +{0, 64413, 5798}, +{0, 64165, 5794}, +{0, 63986, 5790}, +{0, 63882, 5781}, +{0, 63760, 5789}, +{0, 63792, 5780}, +{0, 63732, 5794}, +{0, 63781, 5788}, +{0, 63736, 5803}, +{0, 63854, 5791}, +{0, 63865, 5789}, +{0, 63866, 5799}, +{0, 63594, 5778}, +{0, 63433, 5777}, +{0, 63378, 5791}, +{0, 63409, 5779}, +{0, 63463, 5764}, +{0, 63486, 5775}, +{0, 63487, 5787}, +{0, 63572, 5778}, +{0, 63735, 5783}, +{0, 63803, 5773}, +{0, 63922, 5785}, +{0, 64029, 5783}, +{0, 63849, 5789}, +{0, 63604, 5785}, +{0, 63504, 5782}, +{0, 63472, 5774}, +{0, 63538, 5777}, +{0, 63570, 5775}, +{0, 63577, 5784}, +{0, 63590, 5776}, +{0, 63669, 5778}, +{0, 63772, 5782}, +{0, 63856, 5779}, +{0, 63959, 5779}, +{0, 63837, 5784}, +{0, 63557, 5776}, +{0, 63414, 5778}, +{0, 63370, 5781}, +{0, 63343, 5787}, +{0, 63346, 5781}, +{0, 63259, 5773}, +{0, 63253, 5771}, +{0, 63201, 5782}, +{0, 63234, 5782}, +{0, 63266, 5773}, +{0, 63307, 5774}, +{0, 63246, 5774}, +{0, 62919, 5769}, +{0, 62727, 5774}, +{0, 62685, 5779}, +{0, 62739, 5766}, +{0, 62789, 5759}, +{0, 62847, 5762}, +{0, 63030, 5765}, +{0, 63262, 5770}, +{0, 63561, 5784}, +{0, 63943, 5792}, +{0, 64274, 5795}, +{0, 64520, 5789}, +{0, 64439, 5796}, +{0, 64276, 5802}, +{0, 64338, 5792}, +{0, 64500, 5801}, +{0, 64753, 5805}, +{0, 65005, 5806}, +{0, 65246, 5809}, +{0, 65430, 5798}, +{0, 65691, 5809}, +{0, 65870, 5815}, +{0, 66098, 5807}, +{0, 66239, 5814}, +{0, 65989, 5813}, +{0, 65656, 5812}, +{0, 65523, 5810}, +{0, 65470, 5802}, +{0, 65429, 5798}, +{0, 65380, 5802}, +{0, 65218, 5793}, +{0, 65087, 5787}, +{0, 64942, 5787}, +{0, 64877, 5793}, +{0, 64720, 5796}, +{0, 64662, 5780}, +{0, 64332, 5772}, +{0, 63902, 5763}, +{0, 63639, 5763}, +{0, 63495, 5766}, +{0, 63367, 5760}, +{0, 63324, 5764}, +{0, 63315, 5772}, +{0, 63263, 5764}, +{0, 63258, 5755}, +{0, 63344, 5763}, +{0, 63369, 5758}, +{0, 63416, 5762}, +{0, 63060, 5755}, +{0, 62872, 5763}, +{0, 62919, 5769}, +{0, 63045, 5764}, +{0, 63173, 5786}, +{0, 63278, 5775}, +{0, 63357, 5774}, +{0, 63445, 5773}, +{0, 63543, 5781}, +{0, 63648, 5780}, +{0, 63715, 5782}, +{0, 63488, 5777}, +{0, 62867, 5780}, +{0, 62518, 5783}, +{0, 62258, 5773}, +{0, 62083, 5771}, +{0, 61984, 5770}, +{0, 61896, 5759}, +{0, 61733, 5761}, +{0, 61567, 5759}, +{0, 61535, 5768}, +{0, 61595, 5758}, +{0, 61726, 5775}, +{0, 61675, 5762}, +{0, 61330, 5759}, +{0, 61190, 5756}, +{0, 61269, 5765}, +{0, 61508, 5774}, +{0, 61756, 5778}, +{0, 62028, 5785}, +{0, 62209, 5787}, +{0, 62461, 5787}, +{0, 62716, 5793}, +{0, 63008, 5787}, +{0, 63274, 5792}, +{0, 63253, 5789}, +{0, 62966, 5791}, +{0, 62966, 5788}, +{0, 62994, 5784}, +{0, 63066, 5796}, +{0, 63155, 5789}, +{0, 63205, 5792}, +{0, 63262, 5789}, +{0, 63272, 5793}, +{0, 63273, 5791}, +{0, 63206, 5779}, +{0, 63087, 5779}, +{0, 62588, 5777}, +{0, 62075, 5771}, +{0, 61794, 5769}, +{0, 61577, 5768}, +{0, 61466, 5766}, +{0, 61429, 5764}, +{0, 61455, 5758}, +{0, 61475, 5757}, +{0, 61626, 5755}, +{0, 61776, 5768}, +{0, 61934, 5752}, +{0, 61846, 5756}, +{0, 61389, 5753}, +{0, 61208, 5746}, +{0, 61084, 5748}, +{0, 61091, 5751}, +{0, 61154, 5746}, +{0, 61209, 5748}, +{0, 61262, 5759}, +{0, 61363, 5743}, +{0, 61588, 5752}, +{0, 61931, 5766}, +{0, 62269, 5764}, +{0, 62412, 5769}, +{0, 62312, 5770}, +{0, 62235, 5771}, +{0, 62334, 5778}, +{0, 62378, 5772}, +{0, 62394, 5772}, +{0, 62360, 5760}, +{0, 62291, 5763}, +{0, 62295, 5761}, +{0, 62378, 5751}, +{0, 62481, 5762}, +{0, 62624, 5774}, +{0, 62644, 5772}, +{0, 62389, 5770}, +{0, 62120, 5764}, +{0, 61878, 5753}, +{0, 61725, 5762}, +{0, 61746, 5757}, +{0, 61881, 5766}, +{0, 62153, 5760}, +{0, 62325, 5761}, +{0, 62548, 5761}, +{0, 62669, 5754}, +{0, 62879, 5764}, +{0, 62629, 5756}, +{0, 62332, 5769}, +{0, 62140, 5761}, +{0, 62120, 5757}, +{0, 62169, 5762}, +{0, 62272, 5766}, +{0, 62331, 5762}, +{0, 62382, 5769}, +{0, 62445, 5763}, +{0, 62407, 5762}, +{0, 62353, 5774}, +{0, 62361, 5773}, +{0, 62135, 5773}, +{0, 61827, 5766}, +{0, 61601, 5750}, +{0, 61589, 5761}, +{0, 61690, 5749}, +{0, 61801, 5744}, +{0, 61820, 5740}, +{0, 61842, 5747}, +{0, 61860, 5766}, +{0, 62029, 5760}, +{0, 62251, 5762}, +{0, 62550, 5769}, +{0, 62878, 5776}, +{0, 62925, 5768}, +{0, 62918, 5763}, +{0, 63128, 5777}, +{0, 63394, 5775}, +{0, 63669, 5780}, +{0, 63835, 5778}, +{0, 64013, 5789}, +{0, 64079, 5779}, +{0, 64186, 5784}, +{0, 64308, 5778}, +{0, 64334, 5784}, +{0, 64282, 5794}, +{0, 63926, 5776}, +{0, 63585, 5769}, +{0, 63334, 5760}, +{0, 63121, 5765}, +{0, 63129, 5768}, +{0, 63284, 5767}, +{0, 63503, 5765}, +{0, 63541, 5765}, +{0, 63550, 5769}, +{0, 63622, 5780}, +{0, 63724, 5771}, +{0, 63704, 5767}, +{0, 63429, 5774}, +{0, 63210, 5761}, +{0, 63150, 5774}, +{0, 63176, 5783}, +{0, 63244, 5765}, +{0, 63444, 5773}, +{0, 63690, 5795}, +{0, 63968, 5803}, +{0, 64241, 5807}, +{0, 64575, 5809}, +{0, 65009, 5814}, +{0, 65276, 5815}, +{0, 65257, 5803}, +{0, 65316, 5824}, +{0, 65368, 5818}, +{0, 65327, 5811}, +{0, 65260, 5814}, +{0, 65179, 5804}, +{0, 65040, 5801}, +{0, 64913, 5807}, +{0, 64802, 5797}, +{0, 64718, 5799}, +{0, 64611, 5797}, +{0, 64415, 5800}, +{0, 64046, 5793}, +{0, 63772, 5780}, +{0, 63499, 5775}, +{0, 63292, 5772}, +{0, 63055, 5758}, +{0, 62893, 5769}, +{0, 62851, 5762}, +{0, 62815, 5777}, +{0, 62848, 5775}, +{0, 62991, 5762}, +{0, 63131, 5772}, +{0, 62987, 5772}, +{0, 62700, 5771}, +{0, 62261, 5772}, +{0, 61915, 5753}, +{0, 61787, 5761}, +{0, 61831, 5763}, +{0, 61778, 5762}, +{0, 61723, 5754}, +{0, 61759, 5757}, +{0, 61860, 5750}, +{0, 61924, 5764}, +{0, 61758, 5756}, +{0, 61283, 5755}, +{0, 60873, 5753}, +{0, 60417, 5741}, +{0, 60167, 5751}, +{0, 59971, 5744}, +{0, 59851, 5749}, +{0, 59669, 5757}, +{0, 59506, 5756}, +{0, 59345, 5757}, +{0, 59243, 5752}, +{0, 59105, 5761}, +{0, 58659, 5769}, +{0, 57940, 5761}, +{0, 57566, 5749}, +{0, 57450, 5748}, +{0, 57445, 5745}, +{0, 57486, 5738}, +{0, 57651, 5744}, +{0, 57905, 5750}, +{0, 58216, 5751}, +{0, 58463, 5750}, +{0, 58707, 5755}, +{0, 58813, 5761}, +{0, 58531, 5752}, +{0, 58351, 5752}, +{0, 58368, 5753}, +{0, 58483, 5749}, +{0, 58537, 5752}, +{0, 58424, 5758}, +{0, 58200, 5751}, +{0, 58067, 5754}, +{0, 58120, 5753}, +{0, 58109, 5758}, +{0, 58206, 5758}, +{0, 58438, 5759}, +{0, 58333, 5757}, +{0, 58264, 5761}, +{0, 58408, 5762}, +{0, 58653, 5771}, +{0, 58882, 5773}, +{0, 59063, 5785}, +{0, 59244, 5778}, +{0, 59428, 5782}, +{0, 59686, 5780}, +{0, 59884, 5786}, +{0, 60120, 5780}, +{0, 59927, 5770}, +{0, 59720, 5783}, +{0, 59758, 5768}, +{0, 59921, 5776}, +{0, 60162, 5772}, +{0, 60400, 5777}, +{0, 60629, 5786}, +{0, 60963, 5788}, +{0, 61245, 5785}, +{0, 61478, 5798}, +{0, 61742, 5795}, +{0, 61906, 5801}, +{0, 61764, 5779}, +{0, 61563, 5771}, +{0, 61160, 5783}, +{0, 60853, 5774}, +{0, 60623, 5767}, +{0, 60401, 5764}, +{0, 60175, 5760}, +{0, 60017, 5747}, +{0, 59984, 5741}, +{0, 60044, 5749}, +{0, 60098, 5757}, +{0, 60058, 5750}, +{0, 59791, 5745}, +{0, 59593, 5738}, +{0, 59563, 5749}, +{0, 59562, 5745}, +{0, 59708, 5750}, +{0, 59850, 5761}, +{0, 60212, 5763}, +{0, 60788, 5772}, +{0, 61619, 5794}, +{0, 62580, 5807}, +{0, 63490, 5819}, +{0, 64080, 5810}, +{0, 64358, 5800}, +{0, 64702, 5810}, +{0, 65016, 5820}, +{0, 65346, 5815}, +{0, 65728, 5818}, +{0, 66106, 5825}, +{0, 66387, 5819}, +{0, 66487, 5803}, +{0, 66536, 5816}, +{0, 66665, 5812}, +{0, 66835, 5817}, +{0, 66918, 5815}, +{0, 66891, 5813}, +{0, 67104, 5823}, +{0, 67512, 5839}, +{0, 68016, 5847}, +{0, 68617, 5847}, +{0, 69134, 5837}, +{0, 69657, 5851}, +{0, 70277, 5850}, +{0, 70854, 5863}, +{0, 71531, 5868}, +{0, 72171, 5862}, +{0, 72584, 5858}, +{0, 72533, 5855}, +{0, 72529, 5860}, +{0, 72557, 5862}, +{0, 72559, 5848}, +{0, 72536, 5844}, +{0, 72540, 5857}, +{0, 72433, 5841}, +{0, 72360, 5839}, +{0, 72366, 5852}, +{0, 72429, 5853}, +{0, 72535, 5851}, +{0, 72559, 5844}, +{0, 72224, 5850}, +{0, 71803, 5831}, +{0, 71524, 5836}, +{0, 71237, 5830}, +{0, 70999, 5843}, +{0, 70703, 5831}, +{0, 70440, 5836}, +{0, 70200, 5825}, +{0, 70089, 5816}, +{0, 70102, 5825}, +{0, 70163, 5826}, +{0, 70264, 5824}, +{0, 69955, 5808}, +{0, 69458, 5817}, +{0, 69074, 5824}, +{0, 68792, 5815}, +{0, 68544, 5812}, +{0, 68363, 5816}, +{0, 68082, 5811}, +{0, 67793, 5806}, +{0, 67555, 5821}, +{0, 67313, 5802}, +{0, 67154, 5801}, +{0, 67135, 5806}, +{0, 66807, 5797}, +{0, 66342, 5796}, +{0, 65999, 5786}, +{0, 65750, 5789}, +{0, 65594, 5800}, +{0, 65564, 5798}, +{0, 65579, 5805}, +{0, 65708, 5793}, +{0, 65976, 5812}, +{0, 66309, 5818}, +{0, 66750, 5820}, +{0, 67196, 5828}, +{0, 67576, 5835}, +{0, 67401, 5824}, +{0, 67390, 5817}, +{0, 67687, 5828}, +{0, 68049, 5825}, +{0, 68289, 5837}, +{0, 68354, 5834}, +{0, 68266, 5829}, +{0, 68110, 5824}, +{0, 68086, 5824}, +{0, 68194, 5830}, +{0, 68355, 5820}, +{0, 68271, 5830}, +{0, 67668, 5818}, +{0, 67010, 5799}, +{0, 66590, 5790}, +{0, 66325, 5801}, +{0, 66197, 5803}, +{0, 66116, 5811}, +{0, 66067, 5796}, +{0, 66104, 5801}, +{0, 66128, 5794}, +{0, 66202, 5801}, +{0, 66259, 5798}, +{0, 66405, 5796}, +{0, 66178, 5803}, +{0, 65969, 5809}, +{0, 65970, 5826}, +{0, 66127, 5832}, +{0, 66350, 5823}, +{0, 66644, 5831}, +{0, 66948, 5833}, +{0, 67228, 5830}, +{0, 67423, 5831}, +{0, 67608, 5829}, +{0, 67628, 5835}, +{0, 67624, 5834}, +{0, 67072, 5819}, +{0, 66363, 5809}, +{0, 65909, 5814}, +{0, 65618, 5802}, +{0, 65434, 5811}, +{0, 65385, 5802}, +{0, 65371, 5799}, +{0, 65307, 5803}, +{0, 65389, 5807}, +{0, 65475, 5803}, +{0, 65600, 5797}, +{0, 65817, 5791}, +{0, 65903, 5795}, +{0, 65955, 5785}, +{0, 66018, 5803}, +{0, 66068, 5803}, +{0, 66256, 5823}, +{0, 66470, 5814}, +{0, 66754, 5827}, +{0, 66957, 5815}, +{0, 67166, 5819}, +{0, 67434, 5823}, +{0, 67766, 5814}, +{0, 67944, 5823}, +{0, 67453, 5815}, +{0, 66912, 5822}, +{0, 66562, 5816}, +{0, 66312, 5808}, +{0, 66113, 5809}, +{0, 66043, 5800}, +{0, 66037, 5791}, +{0, 66111, 5790}, +{0, 66138, 5798}, +{0, 66118, 5794}, +{0, 66166, 5803}, +{0, 65942, 5807}, +{0, 65162, 5806}, +{0, 64551, 5788}, +{0, 64171, 5790}, +{0, 64015, 5781}, +{0, 63944, 5776}, +{0, 63951, 5782}, +{0, 63982, 5786}, +{0, 64003, 5775}, +{0, 64111, 5764}, +{0, 64352, 5773}, +{0, 64586, 5778}, +{0, 64494, 5786}, +{0, 63841, 5793}, +{0, 63485, 5772}, +{0, 63356, 5772}, +{0, 63387, 5781}, +{0, 63461, 5781}, +{0, 63500, 5785}, +{0, 63508, 5800}, +{0, 63672, 5794}, +{0, 63958, 5790}, +{0, 64148, 5802}, +{0, 64287, 5803}, +{0, 64042, 5794}, +{0, 63661, 5795}, +{0, 63571, 5774}, +{0, 63626, 5783}, +{0, 63707, 5791}, +{0, 63814, 5801}, +{0, 63880, 5785}, +{0, 63927, 5803}, +{0, 64073, 5797}, +{0, 64378, 5796}, +{0, 64669, 5804}, +{0, 64946, 5804}, +{0, 64931, 5813}, +{0, 64756, 5802}, +{0, 64879, 5801}, +{0, 65114, 5806}, +{0, 65326, 5811}, +{0, 65482, 5805}, +{0, 65343, 5802}, +{0, 65069, 5793}, +{0, 64859, 5782}, +{0, 64643, 5790}, +{0, 64495, 5801}, +{0, 64215, 5786}, +{0, 63659, 5771}, +{0, 63267, 5771}, +{0, 63058, 5777}, +{0, 63026, 5772}, +{0, 63035, 5765}, +{0, 63062, 5765}, +{0, 62976, 5773}, +{0, 63006, 5776}, +{0, 63091, 5769}, +{0, 63301, 5774}, +{0, 63552, 5779}, +{0, 63545, 5769}, +{0, 63334, 5769}, +{0, 63208, 5782}, +{0, 63195, 5785}, +{0, 63141, 5778}, +{0, 63223, 5777}, +{0, 63365, 5770}, +{0, 63532, 5776}, +{0, 63595, 5770}, +{0, 63604, 5771}, +{0, 63612, 5767}, +{0, 63617, 5763}, +{0, 63330, 5759}, +{0, 63173, 5761}, +{0, 63254, 5759}, +{0, 63392, 5767}, +{0, 63557, 5776}, +{0, 63637, 5778}, +{0, 63674, 5785}, +{0, 63563, 5781}, +{0, 63390, 5773}, +{0, 63113, 5785}, +{0, 62949, 5781}, +{0, 62921, 5764}, +{0, 62731, 5772}, +{0, 62536, 5787}, +{0, 62566, 5779}, +{0, 62709, 5770}, +{0, 62973, 5761}, +{0, 62930, 5760}, +{0, 62722, 5768}, +{0, 62678, 5783}, +{0, 62750, 5773}, +{0, 62701, 5787}, +{0, 62641, 5766}, +{0, 62456, 5768}, +{0, 62061, 5769}, +{0, 61566, 5766}, +{0, 61094, 5759}, +{0, 60794, 5753}, +{0, 60716, 5763}, +{0, 60749, 5765}, +{0, 60691, 5766}, +{0, 60600, 5764}, +{0, 60608, 5762}, +{0, 60806, 5777}, +{0, 60900, 5761}, +{0, 60554, 5757}, +{0, 60184, 5767}, +{0, 60018, 5775}, +{0, 60038, 5756}, +{0, 60070, 5762}, +{0, 60201, 5765}, +{0, 60224, 5762}, +{0, 60226, 5762}, +{0, 60238, 5760}, +{0, 60294, 5759}, +{0, 60325, 5760}, +{0, 59975, 5763}, +{0, 59527, 5752}, +{0, 59243, 5747}, +{0, 59081, 5761}, +{0, 58982, 5754}, +{0, 59055, 5752}, +{0, 59020, 5769}, +{0, 58892, 5757}, +{0, 58811, 5770}, +{0, 58830, 5755}, +{0, 59012, 5760}, +{0, 58978, 5756}, +{0, 58707, 5739}, +{0, 58480, 5747}, +{0, 58500, 5750}, +{0, 58540, 5749}, +{0, 58683, 5751}, +{0, 58817, 5755}, +{0, 58919, 5747}, +{0, 59049, 5758}, +{0, 59185, 5754}, +{0, 59365, 5753}, +{0, 59505, 5756}, +{0, 59120, 5746}, +{0, 58775, 5738}, +{0, 58560, 5743}, +{0, 58458, 5742}, +{0, 58326, 5742}, +{0, 58099, 5744}, +{0, 57782, 5750}, +{0, 57663, 5747}, +{0, 57583, 5751}, +{0, 57501, 5759}, +{0, 57472, 5747}, +{0, 57352, 5762}, +{0, 57101, 5763}, +{0, 57000, 5754}, +{0, 57037, 5744}, +{0, 57180, 5745}, +{0, 57364, 5750}, +{0, 57533, 5755}, +{0, 57798, 5751}, +{0, 58047, 5752}, +{0, 58303, 5758}, +{0, 58605, 5755}, +{0, 58525, 5741}, +{0, 58442, 5743}, +{0, 58462, 5742}, +{0, 58490, 5739}, +{0, 58560, 5748}, +{0, 58525, 5749}, +{0, 58540, 5750}, +{0, 58503, 5746}, +{0, 58493, 5761}, +{0, 58545, 5739}, +{0, 58611, 5745}, +{0, 58398, 5744}, +{0, 58150, 5735}, +{0, 57974, 5747}, +{0, 57910, 5753}, +{0, 57873, 5755}, +{0, 57974, 5747}, +{0, 58039, 5739}, +{0, 58109, 5743}, +{0, 58262, 5747}, +{0, 58475, 5745}, +{0, 58743, 5746}, +{0, 58708, 5744}, +{0, 58682, 5740}, +{0, 58788, 5742}, +{0, 58870, 5735}, +{0, 59011, 5753}, +{0, 59102, 5744}, +{0, 59174, 5757}, +{0, 59160, 5765}, +{0, 59160, 5750}, +{0, 59133, 5736}, +{0, 59067, 5755}, +{0, 58809, 5752}, +{0, 58558, 5738}, +{0, 58407, 5739}, +{0, 58292, 5748}, +{0, 58251, 5740}, +{0, 58202, 5753}, +{0, 58198, 5752}, +{0, 58281, 5752}, +{0, 58366, 5745}, +{0, 58480, 5749}, +{0, 58661, 5750}, +{0, 58558, 5754}, +{0, 58560, 5735}, +{0, 58650, 5732}, +{0, 58802, 5744}, +{0, 59016, 5745}, +{0, 59198, 5744}, +{0, 59345, 5745}, +{0, 59413, 5746}, +{0, 59437, 5751}, +{0, 59463, 5743}, +{0, 59468, 5751}, +{0, 59121, 5749}, +{0, 58823, 5741}, +{0, 58629, 5749}, +{0, 58602, 5750}, +{0, 58552, 5750}, +{0, 58340, 5761}, +{0, 58175, 5760}, +{0, 58375, 5764}, +{0, 58742, 5756}, +{0, 59153, 5754}, +{0, 59574, 5776}, +{0, 59689, 5764}, +{0, 59730, 5765}, +{0, 59944, 5768}, +{0, 60291, 5767}, +{0, 60651, 5779}, +{0, 60970, 5778}, +{0, 61158, 5785}, +{0, 61301, 5789}, +{0, 61367, 5782}, +{0, 61452, 5783}, +{0, 61498, 5778}, +{0, 61177, 5765}, +{0, 60974, 5768}, +{0, 60937, 5779}, +{0, 60978, 5776}, +{0, 61039, 5773}, +{0, 61187, 5773}, +{0, 61391, 5770}, +{0, 61560, 5781}, +{0, 61708, 5771}, +{0, 61897, 5788}, +{0, 62062, 5781}, +{0, 61847, 5776}, +{0, 61679, 5774}, +{0, 61729, 5767}, +{0, 61817, 5762}, +{0, 62033, 5774}, +{0, 62435, 5781}, +{0, 62691, 5789}, +{0, 62874, 5778}, +{0, 62944, 5777}, +{0, 62923, 5779}, +{0, 62701, 5777}, +{0, 62265, 5769}, +{0, 61947, 5761}, +{0, 61728, 5770}, +{0, 61531, 5762}, +{0, 61388, 5766}, +{0, 61354, 5762}, +{0, 61261, 5760}, +{0, 61357, 5755}, +{0, 61658, 5767}, +{0, 61964, 5754}, +{0, 61978, 5752}, +{0, 61821, 5752}, +{0, 62047, 5752}, +{0, 62480, 5765}, +{0, 63117, 5784}, +{0, 63920, 5797}, +{0, 64722, 5820}, +{0, 65481, 5820}, +{0, 66153, 5840}, +{0, 66805, 5832}, +{0, 67430, 5830}, +{0, 67616, 5827}, +{0, 67176, 5799}, +{0, 66784, 5793}, +{0, 66504, 5784}, +{0, 66281, 5794}, +{0, 66279, 5800}, +{0, 66315, 5789}, +{0, 66427, 5794}, +{0, 66577, 5804}, +{0, 66901, 5812}, +{0, 67291, 5803}, +{0, 67197, 5807}, +{0, 66853, 5810}, +{0, 66640, 5799}, +{0, 66557, 5807}, +{0, 66489, 5808}, +{0, 66766, 5793}, +{0, 67121, 5817}, +{0, 67509, 5830}, +{0, 67877, 5826}, +{0, 68346, 5854}, +{0, 68755, 5840}, +{0, 68684, 5826}, +{0, 68376, 5810}, +{0, 68194, 5825}, +{0, 68102, 5820}, +{0, 68062, 5832}, +{0, 68109, 5815}, +{0, 68151, 5820}, +{0, 68191, 5810}, +{0, 68216, 5814}, +{0, 68286, 5829}, +{0, 68272, 5818}, +{0, 67857, 5811}, +{0, 67430, 5811}, +{0, 67198, 5808}, +{0, 67092, 5813}, +{0, 67054, 5812}, +{0, 67066, 5813}, +{0, 67162, 5817}, +{0, 67365, 5803}, +{0, 67515, 5823}, +{0, 67768, 5809}, +{0, 67856, 5817}, +{0, 67338, 5802}, +{0, 66942, 5818}, +{0, 66703, 5805}, +{0, 66609, 5818}, +{0, 66564, 5809}, +{0, 66526, 5814}, +{0, 66527, 5801}, +{0, 66432, 5804}, +{0, 66472, 5800}, +{0, 66588, 5799}, +{0, 66481, 5805}, +{0, 66056, 5796}, +{0, 65725, 5797}, +{0, 65665, 5795}, +{0, 65769, 5788}, +{0, 66041, 5791}, +{0, 66367, 5804}, +{0, 66625, 5811}, +{0, 66977, 5813}, +{0, 67326, 5818}, +{0, 67674, 5827}, +{0, 67523, 5818}, +{0, 67166, 5816}, +{0, 67022, 5814}, +{0, 67012, 5822}, +{0, 67069, 5810}, +{0, 67155, 5814}, +{0, 67175, 5823}, +{0, 67157, 5822}, +{0, 67220, 5814}, +{0, 67291, 5816}, +{0, 67360, 5808}, +{0, 66878, 5802}, +{0, 66324, 5808}, +{0, 65974, 5804}, +{0, 65771, 5792}, +{0, 65684, 5800}, +{0, 65698, 5797}, +{0, 65929, 5791}, +{0, 66161, 5804}, +{0, 66476, 5800}, +{0, 66790, 5811}, +{0, 66773, 5811}, +{0, 66449, 5805}, +{0, 66313, 5807}, +{0, 66311, 5804}, +{0, 66367, 5808}, +{0, 66407, 5801}, +{0, 66416, 5802}, +{0, 66329, 5807}, +{0, 66250, 5804}, +{0, 66168, 5804}, +{0, 65886, 5804}, +{0, 65142, 5794}, +{0, 64512, 5789}, +{0, 64154, 5792}, +{0, 63912, 5786}, +{0, 63745, 5783}, +{0, 63634, 5792}, +{0, 63618, 5781}, +{0, 63589, 5780}, +{0, 63621, 5784}, +{0, 63667, 5788}, +{0, 63723, 5775}, +{0, 63663, 5783}, +{0, 63543, 5781}, +{0, 63339, 5782}, +{0, 63415, 5785}, +{0, 63624, 5789}, +{0, 63856, 5790}, +{0, 64020, 5794}, +{0, 64166, 5786}, +{0, 64343, 5784}, +{0, 64011, 5788}, +{0, 63315, 5786}, +{0, 62970, 5781}, +{0, 62792, 5780}, +{0, 62726, 5779}, +{0, 62643, 5787}, +{0, 62619, 5769}, +{0, 62679, 5784}, +{0, 62745, 5781}, +{0, 62700, 5791}, +{0, 62715, 5785}, +{0, 62752, 5778}, +{0, 62799, 5784}, +{0, 62886, 5779}, +{0, 63014, 5777}, +{0, 63144, 5783}, +{0, 63154, 5773}, +{0, 63229, 5780}, +{0, 63342, 5798}, +{0, 63509, 5792}, +{0, 63717, 5777}, +{0, 63398, 5785}, +{0, 63108, 5783}, +{0, 63116, 5775}, +{0, 63216, 5775}, +{0, 63266, 5778}, +{0, 63243, 5771}, +{0, 63181, 5772}, +{0, 63147, 5782}, +{0, 63098, 5775}, +{0, 63081, 5767}, +{0, 62881, 5777}, +{0, 62521, 5773}, +{0, 62174, 5766}, +{0, 61926, 5762}, +{0, 62018, 5769}, +{0, 62183, 5772}, +{0, 62361, 5782}, +{0, 62569, 5774}, +{0, 62877, 5796}, +{0, 63329, 5813}, +{0, 63713, 5811}, +{0, 63611, 5812}, +{0, 63706, 5814}, +{0, 63983, 5806}, +{0, 64201, 5814}, +{0, 64393, 5814}, +{0, 64477, 5801}, +{0, 64463, 5795}, +{0, 64578, 5821}, +{0, 64567, 5806}, +{0, 64551, 5809}, +{0, 63995, 5803}, +{0, 63444, 5792}, +{0, 63179, 5788}, +{0, 63083, 5786}, +{0, 62980, 5785}, +{0, 63076, 5790}, +{0, 63157, 5795}, +{0, 63215, 5796}, +{0, 63245, 5782}, +{0, 63377, 5789}, +{0, 63108, 5779}, +{0, 62438, 5768}, +{0, 62142, 5767}, +{0, 62083, 5768}, +{0, 62217, 5782}, +{0, 62529, 5786}, +{0, 62895, 5785}, +{0, 63360, 5783}, +{0, 63766, 5790}, +{0, 63999, 5791}, +{0, 63939, 5785}, +{0, 63510, 5796}, +{0, 63254, 5793}, +{0, 63078, 5789}, +{0, 62948, 5798}, +{0, 62889, 5789}, +{0, 62802, 5789}, +{0, 62642, 5783}, +{0, 62496, 5771}, +{0, 62349, 5788}, +{0, 62173, 5776}, +{0, 61617, 5770}, +{0, 61141, 5772}, +{0, 60906, 5762}, +{0, 60834, 5761}, +{0, 60871, 5751}, +{0, 60932, 5757}, +{0, 61100, 5759}, +{0, 61308, 5760}, +{0, 61524, 5780}, +{0, 61754, 5773}, +{0, 61506, 5766}, +{0, 61086, 5773}, +{0, 61049, 5770}, +{0, 61115, 5770}, +{0, 61247, 5781}, +{0, 61427, 5769}, +{0, 61613, 5773}, +{0, 61668, 5765}, +{0, 61806, 5766}, +{0, 62008, 5774}, +{0, 61886, 5763}, +{0, 61188, 5751}, +{0, 60639, 5748}, +{0, 60412, 5752}, +{0, 60316, 5757}, +{0, 60310, 5761}, +{0, 60356, 5763}, +{0, 60405, 5761}, +{0, 60464, 5760}, +{0, 60630, 5762}, +{0, 60863, 5763}, +{0, 60954, 5765}, +{0, 60572, 5751}, +{0, 60416, 5757}, +{0, 60448, 5754}, +{0, 60505, 5759}, +{0, 60713, 5773}, +{0, 60769, 5766}, +{0, 60714, 5757}, +{0, 60657, 5755}, +{0, 60591, 5760}, +{0, 60567, 5755}, +{0, 60112, 5743}, +{0, 59439, 5753}, +{0, 59128, 5731}, +{0, 59000, 5746}, +{0, 59138, 5739}, +{0, 59421, 5744}, +{0, 59689, 5752}, +{0, 60117, 5751}, +{0, 60761, 5757}, +{0, 61771, 5789}, +{0, 62517, 5791}, +{0, 62664, 5798}, +{0, 62968, 5801}, +{0, 63303, 5791}, +{0, 63803, 5800}, +{0, 64494, 5805}, +{0, 65280, 5821}, +{0, 66256, 5819}, +{0, 67130, 5848}, +{0, 67923, 5853}, +{0, 68576, 5847}, +{0, 68487, 5828}, +{0, 67761, 5822}, +{0, 67183, 5810}, +{0, 66736, 5800}, +{0, 66396, 5800}, +{0, 66196, 5800}, +{0, 66150, 5812}, +{0, 66140, 5808}, +{0, 66223, 5807}, +{0, 66268, 5807}, +{0, 66370, 5801}, +{0, 65916, 5803}, +{0, 65289, 5797}, +{0, 64821, 5792}, +{0, 64674, 5784}, +{0, 64593, 5783}, +{0, 64812, 5790}, +{0, 65189, 5802}, +{0, 65670, 5820}, +{0, 66247, 5823}, +{0, 66900, 5832}, +{0, 67635, 5835}, +{0, 67749, 5830}, +{0, 67574, 5832}, +{0, 67596, 5835}, +{0, 67845, 5853}, +{0, 68130, 5834}, +{0, 68102, 5839}, +{0, 67864, 5832}, +{0, 67565, 5817}, +{0, 67381, 5813}, +{0, 67659, 5813}, +{0, 67756, 5819}, +{0, 67225, 5809}, +{0, 66788, 5813}, +{0, 66727, 5810}, +{0, 66886, 5812}, +{0, 67216, 5828}, +{0, 67493, 5832}, +{0, 67616, 5831}, +{0, 67729, 5828}, +{0, 67878, 5821}, +{0, 68146, 5828}, +{0, 68091, 5833}, +{0, 67867, 5838}, +{0, 68003, 5833}, +{0, 68079, 5834}, +{0, 67937, 5828}, +{0, 67850, 5834}, +{0, 67800, 5833}, +{0, 67676, 5819}, +{0, 67331, 5828}, +{0, 66976, 5818}, +{0, 66549, 5813}, +{0, 65528, 5792}, +{0, 64550, 5784}, +{0, 63974, 5792}, +{0, 63567, 5775}, +{0, 63210, 5783}, +{0, 63037, 5785}, +{0, 63024, 5771}, +{0, 62869, 5789}, +{0, 62621, 5779}, +{0, 62435, 5776}, +{0, 62339, 5775}, +{0, 61775, 5769}, +{0, 61353, 5765}, +{0, 61326, 5760}, +{0, 61299, 5772}, +{0, 61406, 5767}, +{0, 61483, 5767}, +{0, 61587, 5776}, +{0, 61659, 5764}, +{0, 61663, 5775}, +{0, 61582, 5779}, +{0, 61102, 5767}, +{0, 60299, 5770}, +{0, 59889, 5750}, +{0, 59580, 5755}, +{0, 59491, 5756}, +{0, 59531, 5760}, +{0, 59514, 5756}, +{0, 59516, 5766}, +{0, 59580, 5769}, +{0, 59621, 5763}, +{0, 59592, 5770}, +{0, 59062, 5761}, +{0, 58561, 5749}, +{0, 58431, 5756}, +{0, 58411, 5751}, +{0, 58573, 5750}, +{0, 58764, 5749}, +{0, 58822, 5753}, +{0, 58958, 5756}, +{0, 58950, 5749}, +{0, 58893, 5751}, +{0, 58397, 5752}, +{0, 57606, 5737}, +{0, 57424, 5743}, +{0, 57486, 5744}, +{0, 57633, 5747}, +{0, 57848, 5741}, +{0, 58040, 5749}, +{0, 58217, 5757}, +{0, 58392, 5764}, +{0, 58635, 5751}, +{0, 58852, 5764}, +{0, 58597, 5767}, +{0, 58185, 5757}, +{0, 58137, 5756}, +{0, 58330, 5762}, +{0, 58589, 5770}, +{0, 58916, 5764}, +{0, 59214, 5765}, +{0, 59515, 5769}, +{0, 59834, 5779}, +{0, 60227, 5769}, +{0, 60469, 5777}, +{0, 59967, 5764}, +{0, 59520, 5759}, +{0, 59356, 5752}, +{0, 59217, 5761}, +{0, 59071, 5750}, +{0, 59034, 5751}, +{0, 59003, 5744}, +{0, 58991, 5752}, +{0, 58937, 5750}, +{0, 58924, 5748}, +{0, 58454, 5738}, +{0, 58087, 5738}, +{0, 58107, 5734}, +{0, 58230, 5745}, +{0, 58340, 5740}, +{0, 58388, 5737}, +{0, 58381, 5745}, +{0, 58354, 5728}, +{0, 58366, 5737}, +{0, 58590, 5741}, +{0, 58713, 5734}, +{0, 58377, 5737}, +{0, 58177, 5748}, +{0, 58197, 5749}, +{0, 58062, 5748}, +{0, 57978, 5741}, +{0, 57882, 5752}, +{0, 57678, 5731}, +{0, 57587, 5724}, +{0, 57539, 5726}, +{0, 57666, 5733}, +{0, 57404, 5729}, +{0, 56725, 5725}, +{0, 56332, 5715}, +{0, 56194, 5713}, +{0, 56214, 5723}, +{0, 56322, 5732}, +{0, 56364, 5712}, +{0, 56641, 5722}, +{0, 57064, 5729}, +{0, 57575, 5739}, +{0, 57817, 5747}, +{0, 57687, 5748}, +{0, 57893, 5775}, +{0, 58419, 5768}, +{0, 58955, 5779}, +{0, 59378, 5779}, +{0, 59833, 5787}, +{0, 60090, 5779}, +{0, 60183, 5782}, +{0, 60170, 5779}, +{0, 60060, 5773}, +{0, 59675, 5754}, +{0, 59371, 5761}, +{0, 59183, 5759}, +{0, 59076, 5766}, +{0, 59091, 5759}, +{0, 59158, 5763}, +{0, 59216, 5767}, +{0, 59323, 5768}, +{0, 59399, 5748}, +{0, 59512, 5755}, +{0, 59429, 5746}, +{0, 59066, 5752}, +{0, 58959, 5743}, +{0, 59186, 5754}, +{0, 59638, 5765}, +{0, 60181, 5784}, +{0, 60936, 5800}, +{0, 61657, 5809}, +{0, 62331, 5817}, +{0, 62850, 5829}, +{0, 63079, 5819}, +{0, 62691, 5803}, +{0, 62403, 5797}, +{0, 62247, 5786}, +{0, 62108, 5783}, +{0, 61555, 5762}, +{0, 61147, 5759}, +{0, 61019, 5762}, +{0, 61070, 5766}, +{0, 61315, 5766}, +{0, 61772, 5788}, +{0, 61988, 5776}, +{0, 62173, 5791}, +{0, 62663, 5803}, +{0, 63542, 5812}, +{0, 64690, 5832}, +{0, 66229, 5843}, +{0, 67894, 5855}, +{0, 69538, 5866}, +{0, 71053, 5877}, +{0, 72442, 5889}, +{0, 73620, 5884}, +{0, 74230, 5880}, +{0, 74560, 5873}, +{0, 74737, 5875}, +{0, 74832, 5874}, +{0, 74956, 5873}, +{0, 74951, 5864}, +{0, 74822, 5857}, +{0, 74693, 5866}, +{0, 74461, 5861}, +{0, 74480, 5857}, +{0, 74253, 5856}, +{0, 74028, 5859}, +{0, 74087, 5863}, +{0, 74329, 5869}, +{0, 74604, 5869}, +{0, 74985, 5872}, +{0, 75312, 5874}, +{0, 75745, 5877}, +{0, 76194, 5893}, +{0, 76682, 5889}, +{0, 76737, 5877}, +{0, 76508, 5883}, +{0, 76662, 5895}, +{0, 76768, 5873}, +{0, 76785, 5878}, +{0, 76680, 5875}, +{0, 76524, 5863}, +{0, 76236, 5869}, +{0, 75933, 5864}, +{0, 75706, 5864}, +{0, 75246, 5848}, +{0, 74109, 5834}, +{0, 73140, 5829}, +{0, 72645, 5818}, +{0, 72371, 5817}, +{0, 72475, 5824}, +{0, 72654, 5823}, +{0, 72765, 5830}, +{0, 72691, 5835}, +{0, 72530, 5832}, +{0, 72256, 5837}, +{0, 71277, 5825}, +{0, 70128, 5815}, +{0, 69529, 5806}, +{0, 69262, 5810}, +{0, 69252, 5816}, +{0, 69429, 5813}, +{0, 69521, 5814}, +{0, 69398, 5808}, +{0, 69071, 5809}, +{0, 68771, 5810}, +{0, 68021, 5803}, +{0, 66642, 5792}, +{0, 65608, 5774}, +{0, 65018, 5777}, +{0, 64687, 5772}, +{0, 64674, 5762}, +{0, 65014, 5768}, +{0, 65759, 5787}, +{0, 66432, 5799}, +{0, 66646, 5787}, +{0, 67223, 5804}, +{0, 67929, 5815}, +{0, 68566, 5820}, +{0, 69257, 5830}, +{0, 69328, 5843}, +{0, 68808, 5829}, +{0, 68356, 5832}, +{0, 67702, 5829}, +{0, 67236, 5818}, +{0, 67059, 5822}, +{0, 67074, 5812}, +{0, 66592, 5811}, +{0, 66123, 5826}, +{0, 65668, 5814}, +{0, 65264, 5805}, +{0, 64861, 5811}, +{0, 64532, 5808}, +{0, 64333, 5818}, +{0, 64260, 5824}, +{0, 64172, 5831}, +{0, 64121, 5830}, +{0, 63886, 5824}, +{0, 63395, 5839}, +{0, 63283, 5831}, +{0, 63627, 5836}, +{0, 64740, 5851}, +{0, 66508, 5878}, +{0, 68738, 5908}, +{0, 70560, 5895}, +{0, 71276, 5922}, +{0, 72054, 5922}, +{0, 72124, 5912}, +{0, 71485, 5917}, +{0, 71691, 5902}, +{0, 70895, 5857}, +{0, 70368, 5851}, +{0, 70082, 5845}, +{0, 69925, 5843}, +{0, 69905, 5847}, +{0, 69942, 5852}, +{0, 70040, 5841}, +{0, 69994, 5837}, +{0, 69472, 5839}, +{0, 69057, 5846}, +{0, 68970, 5842}, +{0, 69231, 5851}, +{0, 69660, 5851}, +{0, 70155, 5869}, +{0, 70734, 5875}, +{0, 71378, 5881}, +{0, 72055, 5891}, +{0, 72588, 5879}, +{0, 72942, 5898}, +{0, 72781, 5882}, +{0, 73013, 5897}, +{0, 73351, 5887}, +{0, 73884, 5902}, +{0, 74289, 5901}, +{0, 74571, 5887}, +{0, 74683, 5891}, +{0, 74872, 5906}, +{0, 75047, 5900}, +{0, 74844, 5905}, +{0, 74167, 5891}, +{0, 73993, 5890}, +{0, 74094, 5896}, +{0, 74312, 5888}, +{0, 74558, 5894}, +{0, 74754, 5885}, +{0, 74920, 5899}, +{0, 75189, 5895}, +{0, 75489, 5888}, +{0, 75178, 5893}, +{0, 74596, 5882}, +{0, 74433, 5879}, +{0, 74408, 5886}, +{0, 74345, 5884}, +{0, 74341, 5877}, +{0, 74239, 5877}, +{0, 74135, 5869}, +{0, 74031, 5869}, +{0, 73905, 5879}, +{0, 73164, 5860}, +{0, 72268, 5851}, +{0, 71838, 5867}, +{0, 71706, 5854}, +{0, 71727, 5861}, +{0, 71907, 5857}, +{0, 72125, 5872}, +{0, 72408, 5868}, +{0, 72895, 5877}, +{0, 73338, 5881}, +{0, 73321, 5878}, +{0, 72919, 5878}, +{0, 72972, 5873}, +{0, 73083, 5870}, +{0, 73309, 5878}, +{0, 73530, 5869}, +{0, 73618, 5872}, +{0, 73596, 5885}, +{0, 73587, 5864}, +{0, 73547, 5868}, +{0, 73019, 5858}, +{0, 72151, 5853}, +{0, 71781, 5846}, +{0, 71687, 5852}, +{0, 71796, 5853}, +{0, 71949, 5857}, +{0, 72062, 5857}, +{0, 72167, 5856}, +{0, 72338, 5863}, +{0, 72655, 5873}, +{0, 72417, 5856}, +{0, 71948, 5861}, +{0, 71695, 5852}, +{0, 71640, 5850}, +{0, 71668, 5853}, +{0, 71761, 5849}, +{0, 71731, 5851}, +{0, 71692, 5849}, +{0, 71601, 5835}, +{0, 71472, 5843}, +{0, 70814, 5831}, +{0, 69756, 5818}, +{0, 69035, 5816}, +{0, 68569, 5805}, +{0, 68414, 5808}, +{0, 68345, 5801}, +{0, 68178, 5804}, +{0, 67999, 5794}, +{0, 67861, 5810}, +{0, 67663, 5807}, +{0, 66724, 5808}, +{0, 65861, 5795}, +{0, 65417, 5801}, +{0, 65260, 5785}, +{0, 65332, 5793}, +{0, 65283, 5795}, +{0, 64988, 5792}, +{0, 64675, 5786}, +{0, 64347, 5788}, +{0, 63951, 5783}, +{0, 62852, 5765}, +{0, 61867, 5770}, +{0, 61368, 5769}, +{0, 61239, 5778}, +{0, 61486, 5767}, +{0, 61988, 5774}, +{0, 62632, 5799}, +{0, 63408, 5796}, +{0, 64151, 5805}, +{0, 64517, 5813}, +{0, 63974, 5807}, +{0, 63699, 5805}, +{0, 63722, 5807}, +{0, 63989, 5806}, +{0, 64370, 5819}, +{0, 64688, 5805}, +{0, 64879, 5813}, +{0, 65024, 5816}, +{0, 65176, 5815}, +{0, 65004, 5808}, +{0, 64410, 5809}, +{0, 64106, 5817}, +{0, 63971, 5800}, +{0, 63992, 5799}, +{0, 64194, 5820}, +{0, 64332, 5812}, +{0, 64431, 5805}, +{0, 64604, 5800}, +{0, 64817, 5813}, +{0, 64292, 5806}, +{0, 63632, 5795}, +{0, 63383, 5804}, +{0, 63220, 5796}, +{0, 63175, 5793}, +{0, 63247, 5796}, +{0, 63233, 5804}, +{0, 63277, 5804}, +{0, 63287, 5797}, +{0, 63344, 5799}, +{0, 62868, 5787}, +{0, 62286, 5785}, +{0, 62076, 5784}, +{0, 62090, 5775}, +{0, 62301, 5781}, +{0, 62520, 5784}, +{0, 62761, 5789}, +{0, 62998, 5788}, +{0, 63236, 5788}, +{0, 63448, 5790}, +{0, 62970, 5788}, +{0, 62468, 5779}, +{0, 62254, 5775}, +{0, 62212, 5777}, +{0, 62281, 5775}, +{0, 62401, 5772}, +{0, 62447, 5780}, +{0, 62508, 5773}, +{0, 62578, 5768}, +{0, 62634, 5771}, +{0, 62224, 5761}, +{0, 61786, 5764}, +{0, 61571, 5758}, +{0, 61532, 5764}, +{0, 61525, 5764}, +{0, 61630, 5759}, +{0, 61746, 5766}, +{0, 61978, 5764}, +{0, 62241, 5771}, +{0, 62393, 5766}, +{0, 62041, 5760}, +{0, 61717, 5759}, +{0, 61744, 5750}, +{0, 61798, 5768}, +{0, 61958, 5764}, +{0, 62164, 5765}, +{0, 62281, 5764}, +{0, 62350, 5759}, +{0, 62417, 5768}, +{0, 62321, 5760}, +{0, 61874, 5756}, +{0, 61570, 5763}, +{0, 61516, 5769}, +{0, 61562, 5749}, +{0, 61738, 5742}, +{0, 61918, 5758}, +{0, 62105, 5751}, +{0, 62273, 5760}, +{0, 62529, 5749}, +{0, 62418, 5747}, +{0, 62035, 5750}, +{0, 61840, 5746}, +{0, 61803, 5759}, +{0, 61857, 5757}, +{0, 62023, 5745}, +{0, 62152, 5746}, +{0, 62293, 5747}, +{0, 62456, 5754}, +{0, 62602, 5756}, +{0, 62479, 5760}, +{0, 62059, 5758}, +{0, 61748, 5763}, +{0, 61755, 5754}, +{0, 62085, 5762}, +{0, 62519, 5778}, +{0, 63003, 5785}, +{0, 63486, 5788}, +{0, 63995, 5786}, +{0, 64508, 5784}, +{0, 64561, 5794}, +{0, 64397, 5786}, +{0, 64457, 5788}, +{0, 64575, 5796}, +{0, 64673, 5792}, +{0, 64803, 5785}, +{0, 64980, 5778}, +{0, 65071, 5783}, +{0, 65174, 5780}, +{0, 65294, 5781}, +{0, 65023, 5777}, +{0, 64700, 5781}, +{0, 64722, 5794}, +{0, 64954, 5779}, +{0, 65308, 5796}, +{0, 65654, 5803}, +{0, 66008, 5808}, +{0, 66386, 5811}, +{0, 66740, 5810}, +{0, 67062, 5798}, +{0, 66763, 5791}, +{0, 66183, 5779}, +{0, 65919, 5783}, +{0, 65646, 5777}, +{0, 65664, 5776}, +{0, 65711, 5785}, +{0, 65683, 5773}, +{0, 65671, 5785}, +{0, 65738, 5774}, +{0, 65819, 5787}, +{0, 65451, 5779}, +{0, 65118, 5771}, +{0, 65027, 5774}, +{0, 65271, 5782}, +{0, 65605, 5789}, +{0, 65948, 5793}, +{0, 66186, 5783}, +{0, 66328, 5788}, +{0, 66427, 5789}, +{0, 66466, 5792}, +{0, 65897, 5776}, +{0, 65270, 5771}, +{0, 64912, 5764}, +{0, 64731, 5766}, +{0, 64702, 5767}, +{0, 64758, 5761}, +{0, 64787, 5759}, +{0, 64938, 5753}, +{0, 65112, 5759}, +{0, 65230, 5762}, +{0, 65048, 5765}, +{0, 64882, 5767}, +{0, 64873, 5778}, +{0, 65103, 5769}, +{0, 65276, 5784}, +{0, 65464, 5784}, +{0, 65575, 5772}, +{0, 65649, 5774}, +{0, 65761, 5780}, +{0, 65777, 5775}, +{0, 65414, 5770}, +{0, 65099, 5769}, +{0, 65000, 5764}, +{0, 65025, 5770}, +{0, 65040, 5759}, +{0, 65073, 5765}, +{0, 65220, 5765}, +{0, 65406, 5760}, +{0, 65631, 5766}, +{0, 65865, 5770}, +{0, 65764, 5769}, +{0, 65743, 5777}, +{0, 65831, 5778}, +{0, 65952, 5775}, +{0, 66226, 5781}, +{0, 66401, 5784}, +{0, 66447, 5791}, +{0, 66398, 5780}, +{0, 66371, 5779}, +{0, 66423, 5780}, +{0, 66029, 5771}, +{0, 65662, 5765}, +{0, 65568, 5775}, +{0, 65594, 5771}, +{0, 65686, 5774}, +{0, 65890, 5776}, +{0, 66024, 5787}, +{0, 66182, 5775}, +{0, 66399, 5779}, +{0, 66569, 5771}, +{0, 66266, 5783}, +{0, 66114, 5786}, +{0, 66074, 5772}, +{0, 66060, 5784}, +{0, 66115, 5785}, +{0, 66105, 5783}, +{0, 66012, 5780}, +{0, 65946, 5782}, +{0, 65920, 5778}, +{0, 65734, 5790}, +{0, 65300, 5771}, +{0, 65110, 5768}, +{0, 65090, 5767}, +{0, 65144, 5777}, +{0, 65246, 5773}, +{0, 65414, 5770}, +{0, 65557, 5781}, +{0, 65740, 5768}, +{0, 65934, 5782}, +{0, 65981, 5768}, +{0, 65614, 5770}, +{0, 65409, 5768}, +{0, 65337, 5783}, +{0, 65317, 5779}, +{0, 65347, 5775}, +{0, 65401, 5779}, +{0, 65399, 5776}, +{0, 65420, 5777}, +{0, 65465, 5782}, +{0, 65206, 5776}, +{0, 64708, 5765}, +{0, 64445, 5773}, +{0, 64390, 5759}, +{0, 64474, 5761}, +{0, 64616, 5760}, +{0, 64708, 5766}, +{0, 64787, 5768}, +{0, 64904, 5764}, +{0, 65010, 5760}, +{0, 64665, 5743}, +{0, 64290, 5753}, +{0, 64118, 5758}, +{0, 64036, 5746}, +{0, 64071, 5753}, +{0, 64079, 5771}, +{0, 64008, 5758}, +{0, 63954, 5757}, +{0, 63947, 5762}, +{0, 63745, 5769}, +{0, 63147, 5749}, +{0, 62753, 5751}, +{0, 62511, 5745}, +{0, 62522, 5743}, +{0, 62658, 5738}, +{0, 62850, 5751}, +{0, 63096, 5758}, +{0, 63219, 5764}, +{0, 63397, 5760}, +{0, 63139, 5750}, +{0, 62637, 5742}, +{0, 62332, 5758}, +{0, 62161, 5737}, +{0, 62134, 5744}, +{0, 62162, 5727}, +{0, 62146, 5740}, +{0, 62211, 5742}, +{0, 62268, 5741}, +{0, 62296, 5735}, +{0, 61821, 5727}, +{0, 61329, 5731}, +{0, 61131, 5733}, +{0, 61167, 5723}, +{0, 61340, 5729}, +{0, 61444, 5732}, +{0, 61536, 5734}, +{0, 61631, 5747}, +{0, 61716, 5743}, +{0, 61505, 5735}, +{0, 60787, 5722}, +{0, 60345, 5731}, +{0, 60181, 5741}, +{0, 60248, 5729}, +{0, 60367, 5737}, +{0, 60461, 5731}, +{0, 60632, 5730}, +{0, 60762, 5744}, +{0, 60915, 5718}, +{0, 60493, 5732}, +{0, 60104, 5731}, +{0, 59990, 5723}, +{0, 60105, 5727}, +{0, 60318, 5729}, +{0, 60557, 5738}, +{0, 60774, 5735}, +{0, 60965, 5726}, +{0, 61098, 5739}, +{0, 60909, 5738}, +{0, 60327, 5738}, +{0, 59928, 5732}, +{0, 59877, 5738}, +{0, 59907, 5723}, +{0, 60155, 5737}, +{0, 60278, 5744}, +{0, 60408, 5733}, +{0, 60642, 5738}, +{0, 60747, 5738}, +{0, 60382, 5735}, +{0, 60107, 5730}, +{0, 60189, 5733}, +{0, 60398, 5731}, +{0, 60675, 5735}, +{0, 60925, 5743}, +{0, 61206, 5762}, +{0, 61511, 5754}, +{0, 61864, 5773}, +{0, 61935, 5746}, +{0, 61608, 5752}, +{0, 61605, 5754}, +{0, 61722, 5757}, +{0, 61819, 5756}, +{0, 61935, 5754}, +{0, 62005, 5755}, +{0, 62119, 5737}, +{0, 62356, 5755}, +{0, 62664, 5758}, +{0, 62743, 5758}, +{0, 62874, 5759}, +{0, 63192, 5772}, +{0, 63557, 5776}, +{0, 63993, 5791}, +{0, 64457, 5788}, +{0, 64667, 5808}, +{0, 64672, 5779}, +{0, 64583, 5778}, +{0, 64148, 5768}, +{0, 63687, 5762}, +{0, 63436, 5761}, +{0, 63363, 5751}, +{0, 63396, 5768}, +{0, 63591, 5753}, +{0, 63767, 5756}, +{0, 63919, 5763}, +{0, 64148, 5773}, +{0, 64423, 5776}, +{0, 64354, 5782}, +{0, 64326, 5774}, +{0, 64347, 5775}, +{0, 64417, 5781}, +{0, 64483, 5770}, +{0, 64511, 5768}, +{0, 64398, 5758}, +{0, 64234, 5750}, +{0, 64125, 5749}, +{0, 63702, 5748}, +{0, 63276, 5737}, +{0, 63115, 5742}, +{0, 63116, 5736}, +{0, 63333, 5760}, +{0, 63639, 5754}, +{0, 63971, 5768}, +{0, 64317, 5771}, +{0, 64662, 5779}, +{0, 64835, 5766}, +{0, 64640, 5774}, +{0, 64461, 5762}, +{0, 64329, 5772}, +{0, 64323, 5765}, +{0, 64358, 5771}, +{0, 64365, 5752}, +{0, 64315, 5762}, +{0, 64374, 5760}, +{0, 64409, 5775}, +{0, 64065, 5755}, +{0, 63710, 5764}, +{0, 63622, 5751}, +{0, 63622, 5763}, +{0, 63793, 5758}, +{0, 64031, 5763}, +{0, 64245, 5764}, +{0, 64488, 5756}, +{0, 64749, 5766}, +{0, 64617, 5757}, +{0, 64352, 5759}, +{0, 64136, 5758}, +{0, 64014, 5749}, +{0, 64040, 5754}, +{0, 64046, 5756}, +{0, 64095, 5763}, +{0, 64098, 5755}, +{0, 64138, 5759}, +{0, 63955, 5753}, +{0, 63361, 5760}, +{0, 63008, 5748}, +{0, 62864, 5747}, +{0, 62913, 5756}, +{0, 63108, 5748}, +{0, 63239, 5748}, +{0, 63376, 5747}, +{0, 63590, 5752}, +{0, 63659, 5756}, +{0, 63189, 5736}, +{0, 62855, 5750}, +{0, 62591, 5741}, +{0, 62464, 5747}, +{0, 62395, 5736}, +{0, 62361, 5739}, +{0, 62420, 5746}, +{0, 62539, 5740}, +{0, 62640, 5733}, +{0, 62287, 5744}, +{0, 61802, 5721}, +{0, 61712, 5732}, +{0, 61717, 5734}, +{0, 61936, 5731}, +{0, 62140, 5733}, +{0, 62389, 5746}, +{0, 62592, 5751}, +{0, 62793, 5754}, +{0, 62674, 5743}, +{0, 62331, 5746}, +{0, 62134, 5745}, +{0, 62047, 5740}, +{0, 62065, 5749}, +{0, 62175, 5738}, +{0, 62296, 5762}, +{0, 62479, 5745}, +{0, 62641, 5745}, +{0, 62776, 5754}, +{0, 62507, 5738}, +{0, 62360, 5742}, +{0, 62422, 5746}, +{0, 62578, 5742}, +{0, 62801, 5740}, +{0, 62981, 5744}, +{0, 63075, 5748}, +{0, 63254, 5757}, +{0, 63363, 5748}, +{0, 63030, 5745}, +{0, 62689, 5741}, +{0, 62470, 5740}, +{0, 62370, 5744}, +{0, 62403, 5750}, +{0, 62483, 5742}, +{0, 62575, 5738}, +{0, 62695, 5745}, +{0, 63069, 5756}, +{0, 63296, 5751}, +{0, 63314, 5749}, +{0, 63217, 5758}, +{0, 63309, 5760}, +{0, 63452, 5758}, +{0, 63635, 5744}, +{0, 63826, 5756}, +{0, 63935, 5759}, +{0, 63999, 5757}, +{0, 63655, 5750}, +{0, 63351, 5755}, +{0, 63208, 5745}, +{0, 63206, 5748}, +{0, 63277, 5749}, +{0, 63469, 5753}, +{0, 63729, 5755}, +{0, 63966, 5764}, +{0, 64137, 5752}, +{0, 64112, 5757}, +{0, 63987, 5759}, +{0, 63732, 5781}, +{0, 63601, 5766}, +{0, 63678, 5769}, +{0, 63797, 5772}, +{0, 63884, 5769}, +{0, 63884, 5768}, +{0, 63918, 5761}, +{0, 63836, 5765}, +{0, 63581, 5762}, +{0, 63400, 5760}, +{0, 63287, 5760}, +{0, 63299, 5762}, +{0, 63377, 5759}, +{0, 63602, 5756}, +{0, 63770, 5753}, +{0, 64167, 5770}, +{0, 64532, 5774}, +{0, 64516, 5779}, +{0, 64481, 5769}, +{0, 64437, 5773}, +{0, 64521, 5778}, +{0, 64509, 5767}, +{0, 64520, 5778}, +{0, 64447, 5777}, +{0, 64397, 5770}, +{0, 64370, 5765}, +{0, 64160, 5768}, +{0, 63821, 5759}, +{0, 63573, 5761}, +{0, 63482, 5763}, +{0, 63505, 5757}, +{0, 63565, 5761}, +{0, 63695, 5755}, +{0, 63855, 5770}, +{0, 63950, 5762}, +{0, 63716, 5763}, +{0, 63219, 5762}, +{0, 62846, 5748}, +{0, 62658, 5752}, +{0, 62592, 5761}, +{0, 62540, 5735}, +{0, 62563, 5750}, +{0, 62569, 5757}, +{0, 62628, 5747}, +{0, 62420, 5743}, +{0, 61910, 5741}, +{0, 61690, 5742}, +{0, 61672, 5757}, +{0, 61870, 5747}, +{0, 62132, 5740}, +{0, 62472, 5755}, +{0, 62911, 5765}, +{0, 63297, 5773}, +{0, 63437, 5765}, +{0, 63107, 5773}, +{0, 63006, 5772}, +{0, 62997, 5769}, +{0, 62962, 5762}, +{0, 63064, 5765}, +{0, 63159, 5763}, +{0, 63242, 5770}, +{0, 63358, 5761}, +{0, 63449, 5761}, +{0, 63321, 5766}, +{0, 63150, 5761}, +{0, 63133, 5762}, +{0, 63367, 5782}, +{0, 63649, 5759}, +{0, 64041, 5781}, +{0, 64376, 5779}, +{0, 64717, 5792}, +{0, 65015, 5789}, +{0, 64825, 5787}, +{0, 64526, 5781}, +{0, 64226, 5784}, +{0, 64006, 5777}, +{0, 63941, 5784}, +{0, 64014, 5776}, +{0, 64072, 5789}, +{0, 64077, 5770}, +{0, 64241, 5770}, +{0, 64040, 5772}, +{0, 63628, 5763}, +{0, 63414, 5762}, +{0, 63471, 5768}, +{0, 63684, 5773}, +{0, 63888, 5776}, +{0, 64024, 5770}, +{0, 64124, 5775}, +{0, 64260, 5777}, +{0, 64026, 5763}, +{0, 63414, 5776}, +{0, 62978, 5760}, +{0, 62713, 5760}, +{0, 62586, 5756}, +{0, 62588, 5743}, +{0, 62620, 5759}, +{0, 62765, 5748}, +{0, 62946, 5760}, +{0, 62902, 5754}, +{0, 62456, 5748}, +{0, 62211, 5749}, +{0, 62172, 5759}, +{0, 62189, 5746}, +{0, 62341, 5764}, +{0, 62470, 5762}, +{0, 62529, 5759}, +{0, 62579, 5764}, +{0, 62535, 5747}, +{0, 61983, 5739}, +{0, 61407, 5751}, +{0, 61151, 5747}, +{0, 61085, 5743}, +{0, 61183, 5736}, +{0, 61289, 5736}, +{0, 61472, 5737}, +{0, 61717, 5748}, +{0, 61983, 5754}, +{0, 61816, 5744}, +{0, 61361, 5754}, +{0, 61275, 5736}, +{0, 61235, 5741}, +{0, 61351, 5747}, +{0, 61462, 5755}, +{0, 61521, 5754}, +{0, 61551, 5747}, +{0, 61576, 5754}, +{0, 61585, 5764}, +{0, 61220, 5745}, +{0, 60991, 5743}, +{0, 61000, 5747}, +{0, 61196, 5740}, +{0, 61561, 5753}, +{0, 61866, 5754}, +{0, 62172, 5747}, +{0, 62484, 5759}, +{0, 62803, 5768}, +{0, 62628, 5752}, +{0, 62286, 5766}, +{0, 62272, 5762}, +{0, 62382, 5767}, +{0, 62551, 5763}, +{0, 62704, 5758}, +{0, 62756, 5755}, +{0, 62805, 5769}, +{0, 62874, 5762}, +{0, 62686, 5758}, +{0, 62017, 5756}, +{0, 61656, 5755}, +{0, 61481, 5747}, +{0, 61410, 5752}, +{0, 61404, 5751}, +{0, 61426, 5754}, +{0, 61636, 5756}, +{0, 61908, 5752}, +{0, 62211, 5760}, +{0, 62010, 5755}, +{0, 61685, 5756}, +{0, 61541, 5749}, +{0, 61511, 5746}, +{0, 61593, 5757}, +{0, 61610, 5760}, +{0, 61607, 5762}, +{0, 61511, 5753}, +{0, 61551, 5748}, +{0, 61497, 5747}, +{0, 61484, 5748}, +{0, 61526, 5750}, +{0, 61645, 5739}, +{0, 61786, 5751}, +{0, 62042, 5756}, +{0, 62390, 5757}, +{0, 62832, 5771}, +{0, 63289, 5769}, +{0, 63709, 5784}, +{0, 63647, 5782}, +{0, 63323, 5767}, +{0, 63181, 5771}, +{0, 63174, 5771}, +{0, 63162, 5763}, +{0, 63154, 5768}, +{0, 63011, 5762}, +{0, 63026, 5759}, +{0, 63142, 5753}, +{0, 62934, 5757}, +{0, 62515, 5760}, +{0, 62312, 5757}, +{0, 62297, 5754}, +{0, 62433, 5751}, +{0, 62682, 5754}, +{0, 62858, 5770}, +{0, 63028, 5755}, +{0, 63303, 5764}, +{0, 63398, 5755}, +{0, 62993, 5757}, +{0, 62608, 5753}, +{0, 62458, 5751}, +{0, 62346, 5743}, +{0, 62280, 5754}, +{0, 62242, 5763}, +{0, 62303, 5758}, +{0, 62358, 5765}, +{0, 62472, 5752}, +{0, 62424, 5752}, +{0, 62311, 5755}, +{0, 62270, 5752}, +{0, 62418, 5742}, +{0, 62654, 5760}, +{0, 62962, 5759}, +{0, 63310, 5777}, +{0, 63590, 5766}, +{0, 63899, 5772}, +{0, 64095, 5770}, +{0, 63684, 5757}, +{0, 63343, 5759}, +{0, 63230, 5759}, +{0, 63190, 5761}, +{0, 63277, 5762}, +{0, 63404, 5762}, +{0, 63526, 5775}, +{0, 63639, 5768}, +{0, 63752, 5771}, +{0, 63594, 5767}, +{0, 63147, 5760}, +{0, 62958, 5761}, +{0, 63029, 5754}, +{0, 63132, 5751}, +{0, 63350, 5763}, +{0, 63580, 5762}, +{0, 63728, 5762}, +{0, 63925, 5768}, +{0, 63941, 5769}, +{0, 63374, 5768}, +{0, 63028, 5750}, +{0, 62776, 5750}, +{0, 62640, 5756}, +{0, 62609, 5752}, +{0, 62681, 5755}, +{0, 62738, 5758}, +{0, 62820, 5763}, +{0, 62920, 5766}, +{0, 62639, 5759}, +{0, 62154, 5747}, +{0, 61864, 5743}, +{0, 61888, 5754}, +{0, 61960, 5753}, +{0, 62239, 5756}, +{0, 62466, 5758}, +{0, 62673, 5744}, +{0, 62900, 5764}, +{0, 62949, 5756}, +{0, 62397, 5750}, +{0, 61978, 5739}, +{0, 61755, 5753}, +{0, 61742, 5750}, +{0, 61845, 5753}, +{0, 62054, 5757}, +{0, 62186, 5766}, +{0, 62475, 5747}, +{0, 62930, 5770}, +{0, 63060, 5779}, +{0, 63022, 5779}, +{0, 63195, 5789}, +{0, 63697, 5783}, +{0, 64224, 5793}, +{0, 64910, 5810}, +{0, 65466, 5818}, +{0, 65995, 5809}, +{0, 66372, 5816}, +{0, 66701, 5813}, +{0, 66300, 5808}, +{0, 65946, 5809}, +{0, 65914, 5801}, +{0, 66021, 5804}, +{0, 66248, 5800}, +{0, 66482, 5807}, +{0, 66756, 5813}, +{0, 67131, 5814}, +{0, 67588, 5818}, +{0, 67899, 5825}, +{0, 67683, 5829}, +{0, 67813, 5826}, +{0, 68164, 5831}, +{0, 68446, 5820}, +{0, 68572, 5827}, +{0, 68717, 5829}, +{0, 68651, 5818}, +{0, 68414, 5813}, +{0, 67988, 5809}, +{0, 66941, 5788}, +{0, 65900, 5771}, +{0, 65298, 5767}, +{0, 64972, 5767}, +{0, 64967, 5779}, +{0, 65180, 5779}, +{0, 65468, 5791}, +{0, 65798, 5789}, +{0, 66108, 5798}, +{0, 66179, 5801}, +{0, 65593, 5790}, +{0, 65138, 5785}, +{0, 64874, 5788}, +{0, 64714, 5776}, +{0, 64530, 5775}, +{0, 64268, 5760}, +{0, 63955, 5763}, +{0, 63708, 5756}, +{0, 63417, 5753}, +{0, 62657, 5751}, +{0, 61682, 5742}, +{0, 61233, 5736}, +{0, 61069, 5742}, +{0, 61310, 5746}, +{0, 61715, 5746}, +{0, 62000, 5746}, +{0, 62230, 5752}, +{0, 62449, 5757}, +{0, 62507, 5774}, +{0, 61654, 5746}, +{0, 60821, 5744}, +{0, 60387, 5737}, +{0, 59880, 5735}, +{0, 59496, 5728}, +{0, 59358, 5732}, +{0, 59354, 5723}, +{0, 59329, 5742}, +{0, 59331, 5737}, +{0, 59350, 5734}, +{0, 58819, 5728}, +{0, 58525, 5740}, +{0, 58515, 5728}, +{0, 58705, 5738}, +{0, 59026, 5744}, +{0, 59270, 5742}, +{0, 59452, 5751}, +{0, 59545, 5756}, +{0, 59445, 5766}, +{0, 58818, 5743}, +{0, 58052, 5742}, +{0, 57569, 5734}, +{0, 57291, 5741}, +{0, 57174, 5719}, +{0, 57123, 5728}, +{0, 57029, 5735}, +{0, 57037, 5725}, +{0, 57128, 5732}, +{0, 57275, 5739}, +{0, 57110, 5733}, +{0, 56866, 5719}, +{0, 56784, 5736}, +{0, 56829, 5726}, +{0, 56994, 5735}, +{0, 57163, 5734}, +{0, 57203, 5731}, +{0, 57254, 5731}, +{0, 57384, 5735}, +{0, 57097, 5737}, +{0, 56576, 5730}, +{0, 56363, 5713}, +{0, 56377, 5712}, +{0, 56788, 5709}, +{0, 57322, 5724}, +{0, 57840, 5728}, +{0, 58287, 5746}, +{0, 58599, 5765}, +{0, 58873, 5755}, +{0, 58992, 5759}, +{0, 59133, 5769}, +{0, 59547, 5776}, +{0, 59909, 5776}, +{0, 60181, 5785}, +{0, 60555, 5793}, +{0, 61020, 5794}, +{0, 61340, 5797}, +{0, 61674, 5807}, +{0, 62036, 5793}, +{0, 61854, 5794}, +{0, 61705, 5814}, +{0, 61585, 5800}, +{0, 61722, 5805}, +{0, 62005, 5809}, +{0, 62302, 5810}, +{0, 62595, 5805}, +{0, 62918, 5820}, +{0, 63313, 5820}, +{0, 63635, 5831}, +{0, 63577, 5836}, +{0, 63674, 5823}, +{0, 64003, 5819}, +{0, 64328, 5816}, +{0, 64621, 5828}, +{0, 64843, 5829}, +{0, 64937, 5817}, +{0, 65114, 5801}, +{0, 65204, 5813}, +{0, 64832, 5809}, +{0, 64433, 5810}, +{0, 64394, 5802}, +{0, 64461, 5801}, +{0, 64496, 5809}, +{0, 64595, 5796}, +{0, 64774, 5791}, +{0, 65024, 5797}, +{0, 65207, 5801}, +{0, 65222, 5796}, +{0, 64850, 5784}, +{0, 64501, 5796}, +{0, 64304, 5796}, +{0, 64228, 5791}, +{0, 64207, 5780}, +{0, 64083, 5781}, +{0, 63955, 5779}, +{0, 63836, 5782}, +{0, 63848, 5786}, +{0, 63637, 5773}, +{0, 63210, 5761}, +{0, 62985, 5764}, +{0, 63039, 5767}, +{0, 63197, 5760}, +{0, 63341, 5778}, +{0, 63544, 5769}, +{0, 63739, 5767}, +{0, 63995, 5772}, +{0, 64323, 5767}, +{0, 64049, 5771}, +{0, 63642, 5765}, +{0, 63411, 5776}, +{0, 63356, 5765}, +{0, 63354, 5760}, +{0, 63317, 5751}, +{0, 63314, 5766}, +{0, 63295, 5763}, +{0, 63400, 5766}, +{0, 63437, 5758}, +{0, 63369, 5753}, +{0, 63327, 5767}, +{0, 63399, 5759}, +{0, 63467, 5750}, +{0, 63522, 5749}, +{0, 63643, 5760}, +{0, 63746, 5760}, +{0, 63901, 5755}, +{0, 63995, 5758}, +{0, 63701, 5752}, +{0, 63011, 5745}, +{0, 62404, 5752}, +{0, 62038, 5750}, +{0, 61801, 5749}, +{0, 61751, 5745}, +{0, 61743, 5751}, +{0, 61793, 5749}, +{0, 61898, 5745}, +{0, 62023, 5747}, +{0, 61989, 5745}, +{0, 61826, 5761}, +{0, 61562, 5750}, +{0, 61468, 5744}, +{0, 61576, 5749}, +{0, 61709, 5746}, +{0, 61772, 5750}, +{0, 61894, 5748}, +{0, 62009, 5755}, +{0, 61689, 5750}, +{0, 60954, 5751}, +{0, 60651, 5746}, +{0, 60585, 5749}, +{0, 60813, 5753}, +{0, 61144, 5773}, +{0, 61595, 5769}, +{0, 62118, 5771}, +{0, 62545, 5772}, +{0, 63013, 5782}, +{0, 62921, 5776}, +{0, 62850, 5789}, +{0, 63039, 5782}, +{0, 63403, 5789}, +{0, 63687, 5795}, +{0, 64014, 5791}, +{0, 64196, 5800}, +{0, 64372, 5798}, +{0, 64558, 5792}, +{0, 64607, 5795}, +{0, 64151, 5787}, +{0, 63895, 5787}, +{0, 63954, 5799}, +{0, 64189, 5779}, +{0, 64587, 5797}, +{0, 64970, 5815}, +{0, 65360, 5812}, +{0, 65723, 5796}, +{0, 66100, 5807}, +{0, 65975, 5796}, +{0, 65534, 5808}, +{0, 65351, 5795}, +{0, 65235, 5793}, +{0, 65136, 5783}, +{0, 64956, 5786}, +{0, 64777, 5778}, +{0, 64592, 5776}, +{0, 64480, 5778}, +{0, 64341, 5773}, +{0, 63685, 5778}, +{0, 63290, 5765}, +{0, 63096, 5767}, +{0, 63082, 5765}, +{0, 63151, 5769}, +{0, 63320, 5775}, +{0, 63511, 5790}, +{0, 63711, 5780}, +{0, 63809, 5779}, +{0, 63518, 5773}, +{0, 63015, 5767}, +{0, 62667, 5757}, +{0, 62371, 5760}, +{0, 62291, 5769}, +{0, 62318, 5751}, +{0, 62416, 5759}, +{0, 62491, 5772}, +{0, 62615, 5768}, +{0, 62820, 5780}, +{0, 62766, 5766}, +{0, 62747, 5767}, +{0, 63006, 5772}, +{0, 63298, 5786}, +{0, 63805, 5800}, +{0, 64308, 5792}, +{0, 64580, 5798}, +{0, 64543, 5797}, +{0, 64519, 5794}, +{0, 64231, 5788}, +{0, 63415, 5779}, +{0, 62813, 5780}, +{0, 62529, 5770}, +{0, 62474, 5761}, +{0, 62398, 5768}, +{0, 62397, 5763}, +{0, 62343, 5759}, +{0, 62261, 5762}, +{0, 62380, 5747}, +{0, 62215, 5753}, +{0, 61797, 5751}, +{0, 61596, 5748}, +{0, 61604, 5756}, +{0, 61836, 5762}, +{0, 62020, 5772}, +{0, 62051, 5761}, +{0, 62117, 5753}, +{0, 62315, 5767}, +{0, 62360, 5753}, +{0, 61815, 5764}, +{0, 61413, 5765}, +{0, 61228, 5760}, +{0, 61243, 5763}, +{0, 61355, 5763}, +{0, 61465, 5763}, +{0, 61588, 5761}, +{0, 61827, 5756}, +{0, 62006, 5774}, +{0, 61740, 5766}, +{0, 61107, 5748}, +{0, 60842, 5763}, +{0, 60838, 5763}, +{0, 60879, 5764}, +{0, 60958, 5768}, +{0, 61025, 5765}, +{0, 61060, 5758}, +{0, 61128, 5766}, +{0, 61120, 5766}, +{0, 60481, 5756}, +{0, 59914, 5755}, +{0, 59784, 5756}, +{0, 59777, 5762}, +{0, 59909, 5754}, +{0, 60083, 5757}, +{0, 60273, 5750}, +{0, 60514, 5752}, +{0, 60767, 5765}, +{0, 60808, 5754}, +{0, 60216, 5760}, +{0, 59910, 5738}, +{0, 59901, 5752}, +{0, 60023, 5769}, +{0, 60248, 5747}, +{0, 60533, 5744}, +{0, 60757, 5758}, +{0, 60971, 5770}, +{0, 61228, 5762}, +{0, 61118, 5753}, +{0, 60529, 5747}, +{0, 60192, 5745}, +{0, 60154, 5760}, +{0, 60270, 5749}, +{0, 60504, 5748}, +{0, 60755, 5762}, +{0, 60987, 5762}, +{0, 61232, 5763}, +{0, 61545, 5772}, +{0, 61119, 5764}, +{0, 60678, 5754}, +{0, 60493, 5762}, +{0, 60521, 5758}, +{0, 60591, 5754}, +{0, 60694, 5764}, +{0, 60803, 5757}, +{0, 60882, 5765}, +{0, 61101, 5764}, +{0, 61053, 5762}, +{0, 60476, 5753}, +{0, 60163, 5745}, +{0, 60176, 5754}, +{0, 60286, 5753}, +{0, 60471, 5761}, +{0, 60597, 5762}, +{0, 60765, 5750}, +{0, 60997, 5761}, +{0, 61186, 5760}, +{0, 61057, 5762}, +{0, 60504, 5741}, +{0, 60319, 5755}, +{0, 60354, 5755}, +{0, 60391, 5750}, +{0, 60439, 5751}, +{0, 60638, 5759}, +{0, 60767, 5754}, +{0, 60935, 5758}, +{0, 61126, 5760}, +{0, 60949, 5745}, +{0, 60527, 5750}, +{0, 60443, 5760}, +{0, 60562, 5750}, +{0, 60801, 5748}, +{0, 61128, 5754}, +{0, 61414, 5750}, +{0, 61637, 5757}, +{0, 61799, 5764}, +{0, 61925, 5765}, +{0, 61318, 5750}, +{0, 60805, 5743}, +{0, 60637, 5753}, +{0, 60530, 5749}, +{0, 60663, 5751}, +{0, 60765, 5756}, +{0, 60836, 5761}, +{0, 61034, 5764}, +{0, 61247, 5756}, +{0, 61305, 5746}, +{0, 60906, 5748}, +{0, 60653, 5750}, +{0, 60763, 5755}, +{0, 60995, 5751}, +{0, 61257, 5750}, +{0, 61507, 5756}, +{0, 61611, 5763}, +{0, 61801, 5767}, +{0, 62006, 5761}, +{0, 61518, 5762}, +{0, 60908, 5756}, +{0, 60678, 5741}, +{0, 60636, 5741}, +{0, 60638, 5755}, +{0, 60782, 5742}, +{0, 60932, 5749}, +{0, 61152, 5753}, +{0, 61356, 5757}, +{0, 61590, 5752}, +{0, 61185, 5753}, +{0, 60885, 5744}, +{0, 60924, 5749}, +{0, 61051, 5745}, +{0, 61224, 5755}, +{0, 61432, 5758}, +{0, 61663, 5753}, +{0, 61788, 5757}, +{0, 61848, 5763}, +{0, 61655, 5762}, +{0, 61100, 5749}, +{0, 60799, 5753}, +{0, 60930, 5756}, +{0, 61177, 5769}, +{0, 61555, 5760}, +{0, 61857, 5761}, +{0, 62092, 5772}, +{0, 62220, 5776}, +{0, 62445, 5767}, +{0, 62334, 5773}, +{0, 61905, 5771}, +{0, 61789, 5772}, +{0, 61878, 5775}, +{0, 62054, 5771}, +{0, 62205, 5772}, +{0, 62328, 5766}, +{0, 62407, 5769}, +{0, 62495, 5765}, +{0, 62495, 5759}, +{0, 62005, 5761}, +{0, 61616, 5767}, +{0, 61503, 5766}, +{0, 61602, 5758}, +{0, 61782, 5765}, +{0, 61961, 5753}, +{0, 62120, 5769}, +{0, 62290, 5768}, +{0, 62478, 5762}, +{0, 62490, 5762}, +{0, 61913, 5760}, +{0, 61594, 5758}, +{0, 61515, 5765}, +{0, 61640, 5761}, +{0, 61692, 5759}, +{0, 61827, 5755}, +{0, 61797, 5751}, +{0, 61813, 5742}, +{0, 62036, 5745}, +{0, 61561, 5728}, +{0, 61086, 5738}, +{0, 60923, 5739}, +{0, 60929, 5749}, +{0, 61136, 5744}, +{0, 61373, 5761}, +{0, 61605, 5756}, +{0, 61880, 5768}, +{0, 62064, 5774}, +{0, 62169, 5777}, +{0, 61895, 5761}, +{0, 62248, 5790}, +{0, 62649, 5785}, +{0, 63056, 5790}, +{0, 63459, 5794}, +{0, 63755, 5790}, +{0, 63968, 5803}, +{0, 63975, 5787}, +{0, 64034, 5803}, +{0, 63465, 5792}, +{0, 62798, 5789}, +{0, 62708, 5780}, +{0, 62791, 5788}, +{0, 62952, 5778}, +{0, 63170, 5772}, +{0, 63326, 5790}, +{0, 63500, 5789}, +{0, 63731, 5793}, +{0, 63953, 5791}, +{0, 63556, 5791}, +{0, 63278, 5797}, +{0, 63188, 5799}, +{0, 63161, 5783}, +{0, 63197, 5793}, +{0, 63261, 5793}, +{0, 63118, 5795}, +{0, 63035, 5797}, +{0, 62978, 5804}, +{0, 62831, 5781}, +{0, 62288, 5783}, +{0, 61923, 5779}, +{0, 61893, 5786}, +{0, 62082, 5781}, +{0, 62299, 5780}, +{0, 62488, 5772}, +{0, 62663, 5784}, +{0, 62891, 5785}, +{0, 63095, 5783}, +{0, 62599, 5780}, +{0, 62140, 5774}, +{0, 61934, 5768}, +{0, 61857, 5781}, +{0, 61991, 5782}, +{0, 62116, 5770}, +{0, 62133, 5780}, +{0, 62187, 5793}, +{0, 62388, 5779}, +{0, 62226, 5771}, +{0, 61572, 5774}, +{0, 61252, 5767}, +{0, 61281, 5764}, +{0, 61458, 5774}, +{0, 61656, 5776}, +{0, 61844, 5780}, +{0, 62050, 5790}, +{0, 62420, 5782}, +{0, 62644, 5777}, +{0, 62145, 5781}, +{0, 61751, 5780}, +{0, 61625, 5777}, +{0, 61618, 5789}, +{0, 61696, 5782}, +{0, 61788, 5782}, +{0, 61874, 5777}, +{0, 62052, 5785}, +{0, 62266, 5778}, +{0, 62277, 5786}, +{0, 61693, 5772}, +{0, 61435, 5778}, +{0, 61478, 5774}, +{0, 61711, 5764}, +{0, 61963, 5774}, +{0, 62215, 5776}, +{0, 62488, 5775}, +{0, 62743, 5788}, +{0, 63075, 5777}, +{0, 62594, 5783}, +{0, 62240, 5774}, +{0, 62145, 5775}, +{0, 62187, 5777}, +{0, 62278, 5776}, +{0, 62370, 5787}, +{0, 62541, 5776}, +{0, 62705, 5782}, +{0, 62874, 5783}, +{0, 62884, 5776}, +{0, 62389, 5773}, +{0, 62256, 5777}, +{0, 62397, 5768}, +{0, 62622, 5762}, +{0, 62894, 5773}, +{0, 63120, 5786}, +{0, 63277, 5773}, +{0, 63460, 5786}, +{0, 63655, 5783}, +{0, 63108, 5776}, +{0, 62718, 5775}, +{0, 62604, 5767}, +{0, 62563, 5769}, +{0, 62588, 5765}, +{0, 62552, 5769}, +{0, 62597, 5777}, +{0, 62628, 5780}, +{0, 62750, 5772}, +{0, 62529, 5768}, +{0, 61909, 5758}, +{0, 61576, 5762}, +{0, 61491, 5766}, +{0, 61657, 5759}, +{0, 61816, 5770}, +{0, 61928, 5765}, +{0, 62069, 5770}, +{0, 62260, 5770}, +{0, 62413, 5767}, +{0, 61801, 5770}, +{0, 61443, 5760}, +{0, 61378, 5762}, +{0, 61482, 5765}, +{0, 61646, 5765}, +{0, 61804, 5770}, +{0, 61832, 5771}, +{0, 61897, 5765}, +{0, 62009, 5767}, +{0, 61689, 5760}, +{0, 61014, 5750}, +{0, 60775, 5767}, +{0, 60705, 5755}, +{0, 60819, 5763}, +{0, 61163, 5762}, +{0, 61478, 5768}, +{0, 61753, 5764}, +{0, 62056, 5767}, +{0, 62274, 5765}, +{0, 61735, 5768}, +{0, 61425, 5760}, +{0, 61502, 5765}, +{0, 61651, 5762}, +{0, 61912, 5769}, +{0, 62253, 5775}, +{0, 62469, 5770}, +{0, 62734, 5774}, +{0, 62879, 5780}, +{0, 62580, 5783}, +{0, 61939, 5776}, +{0, 61669, 5771}, +{0, 61602, 5767}, +{0, 61671, 5786}, +{0, 61839, 5781}, +{0, 61977, 5771}, +{0, 62185, 5776}, +{0, 62400, 5783}, +{0, 62562, 5778}, +{0, 61962, 5760}, +{0, 61616, 5757}, +{0, 61672, 5776}, +{0, 61838, 5778}, +{0, 62090, 5758}, +{0, 62358, 5772}, +{0, 62582, 5779}, +{0, 62693, 5792}, +{0, 62966, 5791}, +{0, 62697, 5791}, +{0, 62455, 5783}, +{0, 62467, 5769}, +{0, 62605, 5783}, +{0, 62840, 5782}, +{0, 63168, 5786}, +{0, 63532, 5784}, +{0, 63896, 5794}, +{0, 64291, 5805}, +{0, 64758, 5804}, +{0, 64611, 5794}, +{0, 64211, 5797}, +{0, 64158, 5792}, +{0, 64267, 5801}, +{0, 64491, 5802}, +{0, 64811, 5805}, +{0, 65062, 5815}, +{0, 65306, 5812}, +{0, 65441, 5804}, +{0, 65284, 5799}, +{0, 64434, 5774}, +{0, 63854, 5784}, +{0, 63529, 5769}, +{0, 63279, 5760}, +{0, 63190, 5774}, +{0, 63219, 5760}, +{0, 63263, 5769}, +{0, 63351, 5765}, +{0, 63564, 5787}, +{0, 63277, 5774}, +{0, 62796, 5769}, +{0, 62506, 5764}, +{0, 62471, 5767}, +{0, 62562, 5770}, +{0, 62702, 5773}, +{0, 62732, 5769}, +{0, 62756, 5769}, +{0, 62713, 5764}, +{0, 62552, 5751}, +{0, 61826, 5756}, +{0, 61372, 5737}, +{0, 61237, 5751}, +{0, 61209, 5748}, +{0, 61388, 5754}, +{0, 61627, 5755}, +{0, 61730, 5766}, +{0, 61872, 5759}, +{0, 62014, 5754}, +{0, 61843, 5745}, +{0, 61188, 5759}, +{0, 60888, 5747}, +{0, 60594, 5760}, +{0, 60498, 5748}, +{0, 60528, 5757}, +{0, 60562, 5760}, +{0, 60561, 5753}, +{0, 60578, 5761}, +{0, 60557, 5750}, +{0, 59837, 5740}, +{0, 59182, 5725}, +{0, 58867, 5734}, +{0, 58708, 5732}, +{0, 58715, 5737}, +{0, 59117, 5744}, +{0, 59494, 5750}, +{0, 59745, 5759}, +{0, 60013, 5751}, +{0, 60076, 5742}, +{0, 59533, 5746}, +{0, 59173, 5744}, +{0, 59078, 5750}, +{0, 59113, 5750}, +{0, 59176, 5736}, +{0, 59239, 5744}, +{0, 59261, 5742}, +{0, 59241, 5745}, +{0, 59107, 5738}, +{0, 58684, 5723}, +{0, 58056, 5724}, +{0, 58010, 5735}, +{0, 58179, 5725}, +{0, 58548, 5737}, +{0, 59193, 5734}, +{0, 60022, 5738}, +{0, 61146, 5744}, +{0, 62468, 5761}, +{0, 63258, 5771}, +{0, 63210, 5769}, +{0, 63247, 5785}, +{0, 63493, 5783}, +{0, 63955, 5803}, +{0, 64734, 5807}, +{0, 65604, 5823}, +{0, 66555, 5835}, +{0, 67298, 5832}, +{0, 68032, 5844}, +{0, 68529, 5855}, +{0, 68500, 5848}, +{0, 68548, 5838}, +{0, 68630, 5840}, +{0, 68718, 5842}, +{0, 68746, 5839}, +{0, 68648, 5832}, +{0, 68411, 5830}, +{0, 68303, 5823}, +{0, 68230, 5824}, +{0, 67843, 5833}, +{0, 67282, 5807}, +{0, 67002, 5809}, +{0, 66832, 5822}, +{0, 66800, 5821}, +{0, 66781, 5823}, +{0, 66724, 5813}, +{0, 66764, 5822}, +{0, 66858, 5811}, +{0, 67014, 5811}, +{0, 66649, 5821}, +{0, 66162, 5810}, +{0, 65993, 5806}, +{0, 65948, 5800}, +{0, 66044, 5805}, +{0, 66143, 5811}, +{0, 66272, 5808}, +{0, 66337, 5807}, +{0, 66426, 5796}, +{0, 66364, 5809}, +{0, 65737, 5791}, +{0, 65333, 5797}, +{0, 65088, 5803}, +{0, 65079, 5785}, +{0, 65175, 5788}, +{0, 65235, 5798}, +{0, 65320, 5797}, +{0, 65371, 5797}, +{0, 65491, 5798}, +{0, 65058, 5780}, +{0, 64592, 5780}, +{0, 64366, 5793}, +{0, 64345, 5779}, +{0, 64479, 5778}, +{0, 64627, 5785}, +{0, 64727, 5778}, +{0, 64825, 5788}, +{0, 64874, 5782}, +{0, 64721, 5783}, +{0, 63950, 5786}, +{0, 63438, 5779}, +{0, 63242, 5777}, +{0, 63245, 5777}, +{0, 63368, 5781}, +{0, 63546, 5783}, +{0, 63663, 5789}, +{0, 63828, 5786}, +{0, 63995, 5789}, +{0, 63575, 5788}, +{0, 62933, 5784}, +{0, 62672, 5774}, +{0, 62758, 5769}, +{0, 62906, 5767}, +{0, 63141, 5777}, +{0, 63371, 5775}, +{0, 63553, 5780}, +{0, 63762, 5789}, +{0, 63802, 5792}, +{0, 62974, 5774}, +{0, 62377, 5777}, +{0, 62180, 5768}, +{0, 62152, 5770}, +{0, 62287, 5782}, +{0, 62424, 5782}, +{0, 62565, 5777}, +{0, 62763, 5785}, +{0, 62931, 5785}, +{0, 62525, 5779}, +{0, 61871, 5769}, +{0, 61663, 5767}, +{0, 61701, 5765}, +{0, 61877, 5774}, +{0, 62115, 5768}, +{0, 62270, 5775}, +{0, 62541, 5777}, +{0, 62833, 5772}, +{0, 62867, 5769}, +{0, 62178, 5770}, +{0, 61743, 5766}, +{0, 61632, 5765}, +{0, 61631, 5767}, +{0, 61840, 5772}, +{0, 61915, 5773}, +{0, 62116, 5774}, +{0, 62273, 5785}, +{0, 62462, 5782}, +{0, 62189, 5763}, +{0, 61577, 5771}, +{0, 61343, 5765}, +{0, 61373, 5776}, +{0, 61595, 5779}, +{0, 61835, 5772}, +{0, 62136, 5770}, +{0, 62389, 5774}, +{0, 62707, 5767}, +{0, 62890, 5778}, +{0, 62388, 5772}, +{0, 62031, 5768}, +{0, 61919, 5766}, +{0, 62038, 5766}, +{0, 62217, 5767}, +{0, 62342, 5770}, +{0, 62421, 5779}, +{0, 62534, 5775}, +{0, 62860, 5787}, +{0, 62865, 5785}, +{0, 62653, 5787}, +{0, 62773, 5770}, +{0, 63067, 5791}, +{0, 63408, 5789}, +{0, 63896, 5794}, +{0, 64195, 5796}, +{0, 64389, 5795}, +{0, 64516, 5796}, +{0, 64547, 5792}, +{0, 63648, 5790}, +{0, 62962, 5769}, +{0, 62591, 5780}, +{0, 62426, 5771}, +{0, 62464, 5774}, +{0, 62530, 5775}, +{0, 62655, 5774}, +{0, 62848, 5764}, +{0, 63071, 5762}, +{0, 62915, 5775}, +{0, 62279, 5765}, +{0, 62044, 5761}, +{0, 62044, 5760}, +{0, 62180, 5768}, +{0, 62331, 5767}, +{0, 62405, 5779}, +{0, 62539, 5781}, +{0, 62760, 5778}, +{0, 62957, 5778}, +{0, 62434, 5768}, +{0, 61954, 5766}, +{0, 61722, 5762}, +{0, 61691, 5765}, +{0, 61757, 5767}, +{0, 61894, 5758}, +{0, 62029, 5770}, +{0, 62164, 5769}, +{0, 62290, 5776}, +{0, 62143, 5773}, +{0, 61442, 5766}, +{0, 61082, 5754}, +{0, 61039, 5755}, +{0, 61151, 5761}, +{0, 61337, 5762}, +{0, 61538, 5760}, +{0, 61818, 5772}, +{0, 62053, 5768}, +{0, 62239, 5763}, +{0, 61566, 5760}, +{0, 60885, 5753}, +{0, 60757, 5757}, +{0, 60844, 5753}, +{0, 61042, 5757}, +{0, 61332, 5756}, +{0, 61622, 5756}, +{0, 61812, 5770}, +{0, 61931, 5763}, +{0, 61776, 5761}, +{0, 61115, 5756}, +{0, 60638, 5749}, +{0, 60487, 5749}, +{0, 60707, 5761}, +{0, 60958, 5741}, +{0, 61158, 5756}, +{0, 61232, 5749}, +{0, 61287, 5747}, +{0, 61422, 5757}, +{0, 60814, 5744}, +{0, 60165, 5735}, +{0, 59844, 5727}, +{0, 59797, 5725}, +{0, 59908, 5732}, +{0, 59991, 5739}, +{0, 59970, 5736}, +{0, 60230, 5727}, +{0, 60650, 5722}, +{0, 60913, 5729}, +{0, 60711, 5720}, +{0, 60289, 5718}, +{0, 59960, 5734}, +{0, 59757, 5715}, +{0, 59668, 5722}, +{0, 59582, 5723}, +{0, 59557, 5726}, +{0, 59620, 5734}, +{0, 59743, 5732}, +{0, 59203, 5731}, +{0, 58719, 5717}, +{0, 58536, 5716}, +{0, 58412, 5724}, +{0, 58451, 5723}, +{0, 58468, 5720}, +{0, 58452, 5733}, +{0, 58319, 5726}, +{0, 58223, 5732}, +{0, 58068, 5725}, +{0, 57694, 5717}, +{0, 57391, 5719}, +{0, 57123, 5707}, +{0, 57030, 5715}, +{0, 56991, 5721}, +{0, 57046, 5732}, +{0, 57170, 5730}, +{0, 57315, 5726}, +{0, 57433, 5728}, +{0, 57085, 5717}, +{0, 56826, 5730}, +{0, 56789, 5732}, +{0, 56786, 5714}, +{0, 56961, 5734}, +{0, 57075, 5743}, +{0, 57095, 5732}, +{0, 57127, 5726}, +{0, 57015, 5728}, +{0, 56576, 5730}, +{0, 55986, 5730}, +{0, 55667, 5724}, +{0, 55510, 5734}, +{0, 55469, 5732}, +{0, 55538, 5731}, +{0, 55559, 5733}, +{0, 55658, 5733}, +{0, 55836, 5742}, +{0, 56030, 5735}, +{0, 55839, 5739}, +{0, 55578, 5724}, +{0, 55592, 5732}, +{0, 55720, 5734}, +{0, 55944, 5735}, +{0, 56176, 5745}, +{0, 56352, 5748}, +{0, 56539, 5737}, +{0, 56714, 5750}, +{0, 56522, 5728}, +{0, 56097, 5738}, +{0, 55919, 5735}, +{0, 55870, 5735}, +{0, 55922, 5740}, +{0, 56056, 5751}, +{0, 56190, 5758}, +{0, 56245, 5751}, +{0, 56441, 5750}, +{0, 56457, 5745}, +{0, 56152, 5742}, +{0, 55996, 5746}, +{0, 56028, 5738}, +{0, 56175, 5745}, +{0, 56364, 5746}, +{0, 56600, 5746}, +{0, 56790, 5741}, +{0, 57027, 5749}, +{0, 57145, 5758}, +{0, 56925, 5744}, +{0, 56706, 5738}, +{0, 56700, 5745}, +{0, 56700, 5735}, +{0, 56770, 5746}, +{0, 56851, 5742}, +{0, 56970, 5743}, +{0, 57079, 5742}, +{0, 57204, 5748}, +{0, 57197, 5756}, +{0, 56916, 5738}, +{0, 56684, 5732}, +{0, 56706, 5730}, +{0, 56826, 5735}, +{0, 57092, 5732}, +{0, 57270, 5748}, +{0, 57462, 5739}, +{0, 57681, 5743}, +{0, 57812, 5743}, +{0, 57435, 5732}, +{0, 57147, 5740}, +{0, 57097, 5731}, +{0, 57157, 5734}, +{0, 57390, 5735}, +{0, 57618, 5750}, +{0, 57691, 5749}, +{0, 57788, 5748}, +{0, 57849, 5754}, +{0, 57736, 5756}, +{0, 57358, 5752}, +{0, 57049, 5732}, +{0, 56992, 5749}, +{0, 57064, 5739}, +{0, 57221, 5745}, +{0, 57493, 5737}, +{0, 57816, 5739}, +{0, 57955, 5753}, +{0, 57976, 5752}, +{0, 57485, 5749}, +{0, 57193, 5732}, +{0, 57121, 5742}, +{0, 56931, 5745}, +{0, 56800, 5743}, +{0, 56758, 5740}, +{0, 56842, 5736}, +{0, 56831, 5736}, +{0, 56778, 5749}, +{0, 56617, 5737}, +{0, 56046, 5736}, +{0, 55890, 5734}, +{0, 56052, 5730}, +{0, 56415, 5740}, +{0, 56673, 5735}, +{0, 56920, 5747}, +{0, 57196, 5743}, +{0, 57563, 5739}, +{0, 57915, 5749}, +{0, 57932, 5749}, +{0, 57920, 5732}, +{0, 57985, 5747}, +{0, 58101, 5759}, +{0, 58398, 5756}, +{0, 58657, 5749}, +{0, 59000, 5760}, +{0, 59327, 5760}, +{0, 59683, 5764}, +{0, 59682, 5757}, +{0, 59383, 5768}, +{0, 59284, 5749}, +{0, 59326, 5754}, +{0, 59510, 5762}, +{0, 59662, 5765}, +{0, 59903, 5764}, +{0, 60130, 5764}, +{0, 60352, 5753}, +{0, 60435, 5782}, +{0, 60048, 5753}, +{0, 59756, 5758}, +{0, 59621, 5756}, +{0, 59580, 5752}, +{0, 59641, 5761}, +{0, 59830, 5760}, +{0, 59982, 5766}, +{0, 60149, 5766}, +{0, 60287, 5766}, +{0, 60185, 5761}, +{0, 59823, 5761}, +{0, 59783, 5752}, +{0, 59734, 5753}, +{0, 59608, 5752}, +{0, 59343, 5744}, +{0, 59035, 5766}, +{0, 58994, 5754}, +{0, 59095, 5757}, +{0, 58951, 5751}, +{0, 58311, 5753}, +{0, 57810, 5751}, +{0, 57513, 5739}, +{0, 57431, 5744}, +{0, 57433, 5757}, +{0, 57538, 5760}, +{0, 57600, 5756}, +{0, 57706, 5760}, +{0, 57906, 5766}, +{0, 57933, 5761}, +{0, 57692, 5753}, +{0, 57595, 5759}, +{0, 57634, 5749}, +{0, 57804, 5753}, +{0, 57975, 5766}, +{0, 58127, 5756}, +{0, 58261, 5764}, +{0, 58500, 5764}, +{0, 58681, 5764}, +{0, 58418, 5741}, +{0, 58108, 5760}, +{0, 57945, 5755}, +{0, 57934, 5753}, +{0, 58145, 5755}, +{0, 58416, 5773}, +{0, 58614, 5759}, +{0, 58815, 5765}, +{0, 58994, 5764}, +{0, 58933, 5762}, +{0, 58552, 5761}, +{0, 58483, 5755}, +{0, 58520, 5769}, +{0, 58665, 5753}, +{0, 58897, 5752}, +{0, 59088, 5760}, +{0, 59329, 5766}, +{0, 59615, 5761}, +{0, 59787, 5763}, +{0, 59506, 5768}, +{0, 59280, 5761}, +{0, 59177, 5762}, +{0, 59261, 5756}, +{0, 59249, 5760}, +{0, 59316, 5765}, +{0, 59307, 5767}, +{0, 59357, 5772}, +{0, 59403, 5771}, +{0, 59406, 5764}, +{0, 59254, 5754}, +{0, 59190, 5761}, +{0, 59291, 5763}, +{0, 59545, 5762}, +{0, 59840, 5762}, +{0, 60165, 5765}, +{0, 60390, 5763}, +{0, 60620, 5769}, +{0, 60771, 5775}, +{0, 60512, 5761}, +{0, 60360, 5761}, +{0, 60213, 5770}, +{0, 60156, 5766}, +{0, 60120, 5765}, +{0, 60130, 5784}, +{0, 60283, 5778}, +{0, 60401, 5769}, +{0, 60492, 5776}, +{0, 60330, 5764}, +{0, 60068, 5763}, +{0, 59978, 5767}, +{0, 59953, 5759}, +{0, 60063, 5773}, +{0, 60169, 5752}, +{0, 60333, 5762}, +{0, 60513, 5755}, +{0, 60772, 5757}, +{0, 60695, 5764}, +{0, 60163, 5752}, +{0, 59778, 5756}, +{0, 59684, 5753}, +{0, 59685, 5753}, +{0, 59651, 5761}, +{0, 59614, 5756}, +{0, 59552, 5757}, +{0, 59510, 5753}, +{0, 59595, 5755}, +{0, 59255, 5753}, +{0, 58770, 5759}, +{0, 58577, 5757}, +{0, 58560, 5755}, +{0, 58583, 5753}, +{0, 58583, 5752}, +{0, 58582, 5750}, +{0, 58583, 5757}, +{0, 58737, 5757}, +{0, 58552, 5744}, +{0, 58014, 5751}, +{0, 57624, 5744}, +{0, 57584, 5737}, +{0, 57686, 5745}, +{0, 57722, 5751}, +{0, 57675, 5747}, +{0, 57624, 5748}, +{0, 57671, 5756}, +{0, 57748, 5740}, +{0, 57307, 5740}, +{0, 56921, 5737}, +{0, 56786, 5749}, +{0, 56851, 5745}, +{0, 57043, 5747}, +{0, 57191, 5747}, +{0, 57347, 5734}, +{0, 57539, 5741}, +{0, 57752, 5738}, +{0, 57509, 5721}, +{0, 57133, 5731}, +{0, 56986, 5728}, +{0, 56996, 5738}, +{0, 57230, 5743}, +{0, 57410, 5739}, +{0, 57515, 5739}, +{0, 57627, 5743}, +{0, 57699, 5740}, +{0, 57510, 5735}, +{0, 57097, 5742}, +{0, 56980, 5734}, +{0, 56984, 5725}, +{0, 57093, 5748}, +{0, 57203, 5733}, +{0, 57436, 5742}, +{0, 57640, 5750}, +{0, 57861, 5746}, +{0, 57906, 5730}, +{0, 57431, 5722}, +{0, 57308, 5725}, +{0, 57289, 5729}, +{0, 57486, 5730}, +{0, 57666, 5740}, +{0, 57832, 5742}, +{0, 58065, 5735}, +{0, 58216, 5731}, +{0, 58216, 5734}, +{0, 57671, 5735}, +{0, 57250, 5733}, +{0, 57038, 5727}, +{0, 57094, 5731}, +{0, 57244, 5733}, +{0, 57376, 5728}, +{0, 57454, 5735}, +{0, 57602, 5727}, +{0, 57737, 5719}, +{0, 57455, 5718}, +{0, 57109, 5721}, +{0, 57022, 5720}, +{0, 57099, 5732}, +{0, 57309, 5724}, +{0, 57564, 5732}, +{0, 57830, 5735}, +{0, 57975, 5728}, +{0, 58161, 5740}, +{0, 58118, 5737}, +{0, 57710, 5719}, +{0, 57527, 5728}, +{0, 57501, 5724}, +{0, 57592, 5722}, +{0, 57661, 5727}, +{0, 57671, 5732}, +{0, 57641, 5741}, +{0, 57605, 5734}, +{0, 57559, 5734}, +{0, 57396, 5723}, +{0, 57569, 5738}, +{0, 58093, 5756}, +{0, 58718, 5779}, +{0, 59324, 5776}, +{0, 59817, 5780}, +{0, 60291, 5792}, +{0, 60676, 5785}, +{0, 60910, 5786}, +{0, 60723, 5785}, +{0, 60731, 5783}, +{0, 60825, 5783}, +{0, 60989, 5788}, +{0, 61151, 5780}, +{0, 61360, 5794}, +{0, 61532, 5795}, +{0, 61786, 5794}, +{0, 61971, 5790}, +{0, 61843, 5791}, +{0, 61696, 5798}, +{0, 61734, 5793}, +{0, 61824, 5790}, +{0, 61995, 5783}, +{0, 62082, 5795}, +{0, 62183, 5798}, +{0, 62341, 5794}, +{0, 62467, 5798}, +{0, 62186, 5797}, +{0, 61929, 5794}, +{0, 61792, 5793}, +{0, 61775, 5788}, +{0, 61872, 5790}, +{0, 61929, 5782}, +{0, 61920, 5787}, +{0, 61914, 5790}, +{0, 61872, 5778}, +{0, 61670, 5778}, +{0, 61182, 5774}, +{0, 60971, 5761}, +{0, 60887, 5776}, +{0, 60914, 5772}, +{0, 61053, 5777}, +{0, 61298, 5777}, +{0, 61471, 5766}, +{0, 61733, 5766}, +{0, 61731, 5761}, +{0, 61416, 5763}, +{0, 61276, 5766}, +{0, 60872, 5759}, +{0, 60318, 5765}, +{0, 59821, 5768}, +{0, 59663, 5762}, +{0, 59724, 5768}, +{0, 59571, 5774}, +{0, 59225, 5767}, +{0, 58531, 5752}, +{0, 58153, 5761}, +{0, 58064, 5755}, +{0, 58052, 5752}, +{0, 58131, 5769}, +{0, 58161, 5762}, +{0, 58336, 5765}, +{0, 58513, 5767}, +{0, 58586, 5757}, +{0, 58015, 5762}, +{0, 57681, 5744}, +{0, 57555, 5753}, +{0, 57602, 5755}, +{0, 57802, 5748}, +{0, 57908, 5763}, +{0, 58042, 5768}, +{0, 58226, 5754}, +{0, 58298, 5745}, +{0, 57702, 5743}, +{0, 57215, 5751}, +{0, 57052, 5760}, +{0, 56961, 5749}, +{0, 57115, 5746}, +{0, 57342, 5768}, +{0, 57435, 5762}, +{0, 57506, 5762}, +{0, 57588, 5764}, +{0, 57205, 5760}, +{0, 56804, 5761}, +{0, 56664, 5745}, +{0, 56707, 5753}, +{0, 56811, 5762}, +{0, 56943, 5762}, +{0, 57149, 5754}, +{0, 57383, 5758}, +{0, 57559, 5767}, +{0, 57256, 5752}, +{0, 56872, 5742}, +{0, 56762, 5746}, +{0, 56790, 5745}, +{0, 56834, 5749}, +{0, 57029, 5737}, +{0, 57260, 5736}, +{0, 57682, 5739}, +{0, 58314, 5754}, +{0, 58656, 5770}, +{0, 58643, 5764}, +{0, 58539, 5761}, +{0, 58542, 5768}, +{0, 58596, 5765}, +{0, 58691, 5765}, +{0, 58731, 5774}, +{0, 58934, 5772}, +{0, 59123, 5761}, +{0, 59054, 5768}, +{0, 58660, 5759}, +{0, 58449, 5757}, +{0, 58359, 5759}, +{0, 58418, 5751}, +{0, 58399, 5759}, +{0, 58423, 5759}, +{0, 58394, 5764}, +{0, 58424, 5756}, +{0, 58387, 5754}, +{0, 58087, 5749}, +{0, 57859, 5749}, +{0, 57822, 5747}, +{0, 57919, 5751}, +{0, 58108, 5753}, +{0, 58344, 5748}, +{0, 58588, 5747}, +{0, 58813, 5756}, +{0, 58906, 5751}, +{0, 58689, 5746}, +{0, 58544, 5744}, +{0, 58565, 5745}, +{0, 58666, 5745}, +{0, 58771, 5744}, +{0, 58778, 5738}, +{0, 58750, 5758}, +{0, 58706, 5738}, +{0, 58619, 5747}, +{0, 58347, 5752}, +{0, 58253, 5750}, +{0, 58209, 5737}, +{0, 58327, 5749}, +{0, 58465, 5747}, +{0, 58677, 5773}, +{0, 58822, 5754}, +{0, 58988, 5770}, +{0, 59120, 5763}, +{0, 58836, 5753}, +{0, 58669, 5756}, +{0, 58673, 5750}, +{0, 58754, 5765}, +{0, 58889, 5752}, +{0, 59021, 5757}, +{0, 59062, 5777}, +{0, 59104, 5766}, +{0, 59146, 5760}, +{0, 58839, 5765}, +{0, 58500, 5767}, +{0, 58373, 5749}, +{0, 58279, 5756}, +{0, 58422, 5762}, +{0, 58559, 5765}, +{0, 58758, 5764}, +{0, 58937, 5768}, +{0, 59153, 5770}, +{0, 58995, 5766}, +{0, 58621, 5757}, +{0, 58507, 5756}, +{0, 58526, 5759}, +{0, 58618, 5752}, +{0, 58798, 5757}, +{0, 58994, 5757}, +{0, 59106, 5759}, +{0, 59158, 5761}, +{0, 58934, 5764}, +{0, 58364, 5763}, +{0, 58120, 5759}, +{0, 58090, 5757}, +{0, 58150, 5760}, +{0, 58238, 5758}, +{0, 58464, 5767}, +{0, 58693, 5760}, +{0, 58911, 5771}, +{0, 59013, 5762}, +{0, 58653, 5762}, +{0, 58510, 5743}, +{0, 58587, 5754}, +{0, 58661, 5758}, +{0, 58808, 5754}, +{0, 58986, 5763}, +{0, 59128, 5760}, +{0, 59136, 5765}, +{0, 59133, 5764}, +{0, 58746, 5762}, +{0, 58407, 5751}, +{0, 58295, 5754}, +{0, 58307, 5751}, +{0, 58368, 5763}, +{0, 58517, 5758}, +{0, 58731, 5752}, +{0, 58854, 5756}, +{0, 59067, 5765}, +{0, 58864, 5749}, +{0, 58655, 5752}, +{0, 58601, 5741}, +{0, 58679, 5745}, +{0, 58786, 5756}, +{0, 58916, 5763}, +{0, 58981, 5758}, +{0, 58914, 5763}, +{0, 58891, 5759}, +{0, 58888, 5764}, +{0, 58676, 5747}, +{0, 58834, 5759}, +{0, 59073, 5776}, +{0, 59332, 5767}, +{0, 59562, 5773}, +{0, 59824, 5773}, +{0, 60261, 5768}, +{0, 60683, 5770}, +{0, 61001, 5771}, +}; +static const int16_t PAH8009_mems_HRD[][3*NF_PPG_PER_CHANNEL] = +{ +{6305, -1007, 8865}, +{5777, -95, 9889}, +{6385, 1137, 8897}, +{4401, 833, 5425}, +{4465, -1647, 3153}, +{19985, 3937, 1713}, +{-2447, -3775, 8273}, +{5009, 4017, 12657}, +{6769, 1329, 6033}, +{5025, -1567, 6145}, +{6225, 1025, 5889}, +{5681, -351, 5057}, +{5905, 113, 5745}, +{5793, -31, 6369}, +{5297, 193, 5857}, +{5121, 657, 6321}, +{5121, 1041, 5937}, +{5873, 17, 6753}, +{6577, -1583, 6065}, +{5825, -63, 6385}, +{5601, 33, 4961}, +{6097, -303, 4785}, +{6001, 433, 5697}, +{6001, 929, 5553}, +{6145, 561, 5201}, +{6353, 1009, 5009}, +{6481, 1697, 5153}, +{6049, 1633, 5441}, +{6033, 1361, 5697}, +{6113, 1313, 5681}, +{6161, 1697, 5409}, +{6145, 1345, 5537}, +{6081, 1889, 5505}, +{5985, 1425, 5409}, +{5985, 1809, 5505}, +{5953, 1729, 5553}, +{5953, 1569, 5681}, +{5889, 1649, 5489}, +{6065, 1409, 5713}, +{6017, 1761, 5457}, +{6001, 1953, 5521}, +{5985, 2065, 5617}, +{5777, 1793, 5633}, +{5633, 1601, 5745}, +{5809, 1601, 5857}, +{5809, 1633, 5665}, +{5713, 1761, 5633}, +{5841, 1697, 5777}, +{5745, 1713, 5617}, +{5825, 1713, 5793}, +{5905, 1633, 5713}, +{5841, 1601, 5681}, +{5921, 1761, 5649}, +{5889, 1649, 5553}, +{5985, 1649, 5569}, +{5825, 1857, 5937}, +{5809, 1585, 5601}, +{6017, 1569, 5441}, +{5601, 1377, 5697}, +{5841, 1265, 5825}, +{6049, 1857, 6145}, +{5889, 1585, 4977}, +{6609, 1185, 5521}, +{6161, 1697, 5441}, +{6065, 1633, 5489}, +{6193, 1633, 5505}, +{6225, 1569, 5441}, +{6129, 1521, 5329}, +{6129, 1569, 5409}, +{6081, 1473, 5345}, +{5857, 1377, 5537}, +{5905, 1153, 5665}, +{6113, 1217, 5441}, +{6209, 1441, 5409}, +{6145, 1121, 5505}, +{6097, 1121, 5585}, +{6177, 1089, 5473}, +{6193, 1281, 5345}, +{6225, 1265, 5457}, +{5985, 1249, 5361}, +{6209, 1425, 5761}, +{6049, 1057, 5585}, +{5969, 1009, 5793}, +{6017, 1153, 5649}, +{6065, 1377, 5569}, +{6001, 1345, 5617}, +{6033, 1345, 5457}, +{6241, 1473, 5457}, +{6097, 1425, 5473}, +{6161, 1521, 5441}, +{6129, 1569, 5441}, +{6097, 1537, 5441}, +{6065, 1505, 5425}, +{6177, 1681, 5441}, +{6113, 1745, 5505}, +{6337, 1505, 5233}, +{6129, 1649, 5393}, +{6225, 1617, 5361}, +{6177, 1553, 5329}, +{6305, 1569, 5201}, +{6209, 1633, 5265}, +{6401, 1745, 5233}, +{6225, 1569, 5281}, +{6385, 1585, 5217}, +{6321, 1665, 5217}, +{6289, 1521, 5121}, +{6321, 1761, 5249}, +{6289, 1569, 5201}, +{6273, 1601, 5217}, +{6273, 1649, 5233}, +{6321, 1649, 5313}, +{6321, 1601, 5249}, +{6321, 1569, 5249}, +{6273, 1569, 5297}, +{6161, 1441, 5249}, +{6257, 1537, 5329}, +{6225, 1425, 5313}, +{6289, 1697, 5425}, +{6257, 1281, 5153}, +{6305, 1281, 5249}, +{6337, 1393, 5393}, +{6321, 1201, 5313}, +{6369, 1425, 5361}, +{6257, 1537, 5201}, +{6385, 1473, 5137}, +{6433, 1569, 5137}, +{6369, 1745, 4977}, +{6417, 1585, 5153}, +{6289, 1585, 5105}, +{6289, 1585, 5185}, +{6321, 1649, 5185}, +{6241, 1569, 5329}, +{6337, 1713, 5313}, +{6209, 1537, 5281}, +{6369, 1569, 5265}, +{6049, 1713, 5265}, +{6241, 1649, 5489}, +{6353, 1409, 5169}, +{6177, 1409, 5041}, +{6369, 1505, 5377}, +{6273, 1521, 5393}, +{6289, 1553, 5329}, +{6289, 1633, 5185}, +{6273, 1617, 5217}, +{6257, 1761, 5089}, +{6337, 1777, 5201}, +{6209, 1617, 5297}, +{6257, 1729, 5185}, +{6401, 1841, 5121}, +{6353, 1745, 5169}, +{6273, 1601, 5137}, +{6369, 1793, 5153}, +{6337, 1713, 5153}, +{6369, 1713, 5201}, +{6385, 1665, 5217}, +{6241, 2017, 5025}, +{6369, 1761, 5025}, +{6337, 1697, 5105}, +{6369, 1761, 5137}, +{6401, 1809, 5057}, +{6353, 1793, 5089}, +{6417, 1841, 5073}, +{6385, 1873, 5041}, +{6385, 1809, 5073}, +{6417, 1905, 5089}, +{6353, 1841, 5057}, +{6353, 1873, 5073}, +{6337, 1873, 5073}, +{6353, 1889, 5025}, +{6385, 1857, 5153}, +{6305, 1873, 5121}, +{6337, 1857, 5089}, +{6289, 1889, 4961}, +{6241, 1825, 4769}, +{6225, 1841, 4737}, +{6305, 1921, 4977}, +{6353, 2177, 4561}, +{6161, 1697, 4225}, +{6401, 3089, 6225}, +{6321, 2769, 5537}, +{6177, 2449, 5153}, +{6177, 2545, 5057}, +{6145, 2545, 5153}, +{6177, 2561, 5025}, +{6161, 2561, 5073}, +{6145, 2513, 5057}, +{6161, 2385, 5025}, +{6161, 2657, 5121}, +{6161, 2753, 4897}, +{6145, 2689, 4913}, +{6145, 2753, 4977}, +{6145, 2801, 5009}, +{6161, 2673, 5073}, +{6129, 2657, 5025}, +{6145, 2705, 5041}, +{6145, 2625, 5041}, +{6129, 2577, 5089}, +{6113, 2625, 5073}, +{6081, 2641, 5041}, +{6081, 2593, 5105}, +{6161, 2689, 5233}, +{6033, 2449, 5121}, +{6081, 2497, 5137}, +{6097, 2577, 5233}, +{6097, 2465, 5169}, +{6113, 2481, 5153}, +{6097, 2561, 5121}, +{6081, 2513, 5105}, +{6113, 2561, 5153}, +{6129, 2545, 5105}, +{6129, 2529, 5089}, +{6097, 2497, 5169}, +{6113, 2513, 5185}, +{6097, 2401, 5169}, +{6193, 2529, 5217}, +{6161, 2801, 5153}, +{6113, 2737, 5009}, +{6129, 2577, 4961}, +{6081, 2561, 5217}, +{6049, 2449, 5057}, +{6049, 2321, 5169}, +{6097, 2497, 5249}, +{6065, 2449, 5313}, +{6017, 2513, 5185}, +{6049, 2529, 5201}, +{6097, 2481, 5201}, +{6065, 2369, 5297}, +{6001, 2401, 5233}, +{6017, 2417, 5313}, +{6033, 2385, 5281}, +{5985, 2337, 5217}, +{5969, 2385, 5329}, +{6049, 2337, 5457}, +{6081, 2577, 5329}, +{5969, 2481, 5249}, +{5953, 2257, 5409}, +{5953, 2353, 5521}, +{5873, 2289, 5393}, +{5473, 3185, 5297}, +{6081, 2817, 3889}, +{6161, 3313, 5569}, +{5745, 2769, 5249}, +{6449, 2849, 4913}, +{5857, 2593, 5009}, +{5953, 2481, 5233}, +{6273, 2369, 4817}, +{6353, 2609, 4929}, +{6209, 2385, 4849}, +{6337, 2177, 5073}, +{6225, 2129, 5041}, +{6353, 2033, 5057}, +{6321, 2193, 4945}, +{6417, 2017, 5057}, +{6321, 2001, 4993}, +{6417, 2017, 4833}, +{6385, 1969, 4961}, +{6353, 1953, 4961}, +{6321, 2049, 5025}, +{6401, 2209, 4945}, +{6449, 2049, 5041}, +{6465, 2161, 4961}, +{6337, 2113, 5009}, +{6417, 2225, 4897}, +{6481, 2305, 4961}, +{6465, 2049, 4673}, +{6225, 2897, 5377}, +{6193, 2657, 5537}, +{6449, 2385, 4673}, +{6353, 2273, 4753}, +{6273, 2369, 4529}, +{6369, 3169, 6049}, +{6337, 2753, 5361}, +{6113, 2417, 5009}, +{6273, 2257, 5009}, +{6225, 2433, 4897}, +{6225, 2129, 5153}, +{6257, 2641, 5137}, +{6001, 2353, 5281}, +{6193, 2241, 4849}, +{6305, 2481, 5617}, +{6529, 2817, 5809}, +{6337, 3473, 5441}, +{6129, 1345, 3569}, +{6049, 1585, 3985}, +{6241, 1633, 4177}, +{6225, 2081, 5009}, +{6273, 1985, 4977}, +{6145, 1969, 5265}, +{6289, 1713, 4577}, +{6401, 1649, 4769}, +{6273, 1505, 4993}, +{6305, 1553, 5521}, +{6145, 1617, 5393}, +{6193, 1505, 5185}, +{6305, 1761, 5313}, +{6081, 1569, 5425}, +{6177, 1537, 5297}, +{6209, 1473, 5441}, +{6257, 1569, 5441}, +{6177, 1409, 5297}, +{6241, 1473, 5185}, +{6177, 1601, 4913}, +{6177, 1553, 5137}, +{6257, 1361, 5633}, +{6193, 1729, 5617}, +{6193, 1425, 5409}, +{6241, 1569, 5329}, +{6193, 1665, 5217}, +{6289, 1489, 5201}, +{6257, 1521, 5297}, +{6225, 1553, 5297}, +{6113, 1713, 5249}, +{6209, 1713, 5281}, +{6225, 1697, 5329}, +{6209, 1745, 5217}, +{6241, 1697, 5233}, +{6193, 1697, 5233}, +{6193, 1809, 5297}, +{6273, 1825, 5217}, +{6241, 1841, 5233}, +{6241, 1697, 5265}, +{6225, 1905, 5233}, +{6209, 1793, 5265}, +{6193, 1873, 5233}, +{6257, 1873, 5265}, +{6209, 1825, 5249}, +{6257, 1809, 5233}, +{6209, 1793, 5185}, +{6241, 1825, 5217}, +{6193, 1857, 5297}, +{6225, 1729, 5329}, +{6097, 1633, 5361}, +{6161, 1841, 5377}, +{6129, 1841, 5377}, +{6129, 1841, 5345}, +{6113, 1713, 5393}, +{6129, 1681, 5393}, +{6113, 1697, 5425}, +{6129, 1649, 5409}, +{6081, 1601, 5457}, +{6113, 1713, 5425}, +{6097, 1713, 5505}, +{6113, 1601, 5441}, +{6081, 1649, 5409}, +{6081, 1617, 5521}, +{6017, 1649, 5473}, +{6065, 1601, 5441}, +{6081, 1585, 5441}, +{6113, 1713, 5473}, +{6097, 1793, 5441}, +{6081, 1713, 5425}, +{6081, 1745, 5457}, +{6097, 1665, 5441}, +{6113, 1697, 5441}, +{6097, 1729, 5425}, +{6081, 1713, 5441}, +{6097, 1697, 5425}, +{6113, 1697, 5425}, +{6113, 1745, 5409}, +{6081, 1745, 5473}, +{6049, 1713, 5377}, +{6097, 1681, 5409}, +{6081, 1873, 5409}, +{6097, 1809, 5377}, +{6145, 1777, 5489}, +{6193, 1761, 5281}, +{6113, 1489, 5281}, +{6209, 1521, 5393}, +{6129, 1793, 5265}, +{6145, 1937, 5377}, +{6225, 1905, 5361}, +{6145, 1713, 5473}, +{6145, 1473, 5489}, +{5873, 1793, 5473}, +{5985, 1729, 5553}, +{6017, 1473, 5457}, +{6033, 1697, 5665}, +{6033, 1873, 5953}, +{6065, 1713, 5425}, +{5985, 1425, 5489}, +{5889, 1329, 5537}, +{5953, 1233, 5489}, +{6033, 1233, 5601}, +{5729, 849, 5761}, +{5681, 705, 5969}, +{5761, 833, 6161}, +{5729, 689, 6017}, +{5841, 705, 5953}, +{5713, 305, 5953}, +{5537, 481, 6001}, +{5665, 545, 6145}, +{5601, 465, 6081}, +{5601, 417, 6049}, +{5681, 449, 6081}, +{5633, 305, 6209}, +{5617, 529, 6049}, +{5633, 513, 6001}, +{5745, 481, 5969}, +{5697, 561, 5937}, +{5745, 641, 5985}, +{5921, 929, 5793}, +{5857, 737, 5681}, +{5985, 913, 5681}, +{6001, 961, 5633}, +{6097, 1473, 5393}, +{6033, 1217, 5489}, +{6145, 1233, 5649}, +{6289, 1457, 5361}, +{6273, 1441, 5249}, +{6273, 1265, 5265}, +{6145, 1665, 5377}, +{6241, 1633, 5409}, +{6161, 1617, 5377}, +{6177, 1729, 5297}, +{6177, 1665, 5409}, +{6129, 1553, 5361}, +{6161, 1569, 5345}, +{6193, 1745, 5377}, +{6273, 1361, 5393}, +{6177, 1505, 5489}, +{5905, 1073, 5553}, +{5953, 1441, 5681}, +{5873, 1249, 5777}, +{5745, 1233, 5777}, +{5921, 849, 5921}, +{5825, 913, 5873}, +{5777, 801, 5873}, +{5745, 1185, 5841}, +{5793, 1089, 5873}, +{5761, 945, 5921}, +{5793, 1041, 5841}, +{5889, 1281, 5681}, +{5793, 1153, 5777}, +{5649, 1425, 5713}, +{5809, 1553, 5809}, +{5441, 1745, 5841}, +{5537, 1841, 5729}, +{6945, 641, 5521}, +{6097, 2113, 4945}, +{5953, 2705, 5329}, +{6193, 2449, 5585}, +{5841, 1953, 5249}, +{6321, 1793, 5329}, +{6369, 1633, 5425}, +{6177, 1745, 5185}, +{6305, 1457, 4833}, +{6353, 769, 5201}, +{6529, 817, 5265}, +{6305, 641, 5473}, +{6289, 497, 5313}, +{6241, 337, 5361}, +{6321, 145, 5409}, +{6257, -63, 5441}, +{6177, 273, 5489}, +{6129, 193, 5585}, +{6241, -79, 5633}, +{6017, 65, 5665}, +{6257, 49, 5617}, +{5985, -255, 5873}, +{6049, -111, 5537}, +{6273, -15, 5585}, +{6113, 17, 5585}, +{6033, -255, 5649}, +{6017, 17, 5569}, +{6225, -287, 5553}, +{6321, -127, 5489}, +{6081, 97, 5601}, +{6193, 209, 5201}, +{6385, 241, 5217}, +{6273, 321, 5233}, +{6769, 449, 5697}, +{6433, 257, 5249}, +{6545, 689, 5089}, +{6305, 1313, 5281}, +{6177, 721, 5505}, +{6193, 1825, 5649}, +{6129, 961, 4705}, +{6641, 1121, 4961}, +{6513, 801, 4945}, +{6673, 641, 5345}, +{6241, -159, 5185}, +{6353, 657, 4977}, +{6305, 1377, 5361}, +{6433, 561, 5265}, +{6129, 1745, 5265}, +{6561, 465, 5329}, +{6417, 1089, 5505}, +{6193, 785, 5745}, +{6065, 1233, 5729}, +{5793, 1777, 5521}, +{6001, 993, 5937}, +{5905, 769, 5697}, +{6033, 1105, 5489}, +{6049, 1377, 5537}, +{5873, 1153, 5649}, +{5937, 1281, 5665}, +{6097, 2001, 5409}, +{6081, 2065, 5217}, +{6177, 1953, 5217}, +{6129, 2081, 5297}, +{6385, 1873, 5313}, +{5745, 1761, 5457}, +{6081, 2385, 5361}, +{6273, 1537, 5041}, +{6433, 1857, 4737}, +{6529, 1905, 4881}, +{6801, 1857, 4929}, +{6401, 1649, 5201}, +{6017, 1713, 4865}, +{6497, 1793, 5217}, +{5985, 1377, 4977}, +{6177, 1521, 5425}, +{6161, 1697, 5457}, +{5985, 1169, 5345}, +{6033, 1713, 5473}, +{6193, 1473, 5649}, +{5873, 1761, 5873}, +{6289, 1761, 5665}, +{5873, 1505, 5649}, +{5985, 1441, 5473}, +{6081, 1057, 5713}, +{6097, 1057, 5585}, +{6049, 1057, 5553}, +{5873, 1377, 5505}, +{6049, 1313, 5521}, +{6161, 1521, 5489}, +{6097, 1841, 5617}, +{6273, 2209, 5329}, +{6273, 2081, 5233}, +{6161, 1537, 5473}, +{6049, 2225, 4817}, +{6385, 2753, 4721}, +{6513, 2593, 4465}, +{6641, 2545, 4625}, +{6561, 2337, 4785}, +{6449, 2209, 4705}, +{6113, 1633, 4993}, +{6257, 2273, 5057}, +{6193, 1953, 5153}, +{6081, 1969, 5393}, +{5969, 1729, 5601}, +{5905, 1489, 5617}, +{6001, 1681, 5569}, +{5953, 1233, 5457}, +{5905, 1601, 5649}, +{6049, 1473, 5889}, +{5825, 1025, 6001}, +{6033, 1185, 5649}, +{6113, 1409, 5361}, +{6145, 1329, 5505}, +{6097, 1569, 5377}, +{6257, 1489, 5361}, +{6353, 1777, 5121}, +{6385, 2225, 4881}, +{6305, 2769, 5041}, +{6001, 2145, 4785}, +{6513, 1713, 5281}, +{6481, 641, 4769}, +{6657, 1297, 5137}, +{6609, 1425, 5025}, +{6529, 1185, 5201}, +{6369, 1233, 5057}, +{6465, 1441, 5041}, +{6401, 1473, 5137}, +{6417, 1473, 5025}, +{6337, 1633, 5073}, +{6305, 1521, 5313}, +{6273, 1313, 5425}, +{6129, 1089, 5601}, +{6273, 1185, 5329}, +{6225, 481, 5185}, +{6033, 193, 5153}, +{6161, 929, 5377}, +{6145, 385, 5553}, +{6065, -95, 5953}, +{5809, 33, 5969}, +{5857, 81, 5617}, +{6097, -15, 5601}, +{6001, 113, 5569}, +{6193, 465, 5633}, +{6065, 337, 5633}, +{6161, 513, 5649}, +{6257, 145, 5393}, +{6145, 497, 5505}, +{6305, 817, 5233}, +{6449, 769, 5281}, +{6385, 801, 5537}, +{6241, 1057, 5313}, +{6273, 977, 5121}, +{6529, 1137, 4897}, +{6609, 1329, 4849}, +{6801, 1649, 4897}, +{6561, 1713, 4961}, +{6545, 1537, 4817}, +{6545, 1457, 5153}, +{6401, 1553, 5057}, +{6513, 1169, 5137}, +{6513, 833, 5217}, +{6529, 1393, 4913}, +{6049, 1697, 5041}, +{5969, 2929, 5729}, +{6049, 2481, 6001}, +{5985, 2289, 5521}, +{5937, 1553, 5681}, +{5985, 1937, 5649}, +{6081, 1953, 5521}, +{6065, 1857, 5441}, +{5953, 1457, 5489}, +{5937, 1393, 5521}, +{5937, 1841, 5489}, +{6081, 1953, 5377}, +{5969, 1809, 5265}, +{6129, 2289, 5217}, +{6097, 1953, 5377}, +{6081, 2433, 5185}, +{6097, 2689, 5025}, +{6065, 2977, 5025}, +{6161, 2625, 5041}, +{6177, 2689, 5041}, +{6193, 2785, 5025}, +{5985, 2913, 4001}, +{7281, 2417, 4865}, +{6481, 3697, 5569}, +{6161, 2993, 4289}, +{6289, 2465, 4769}, +{6001, 3041, 5105}, +{6017, 2369, 5649}, +{6033, 2753, 5297}, +{5921, 2321, 5393}, +{5857, 2033, 5345}, +{5809, 1905, 5377}, +{5841, 1953, 5489}, +{5889, 2225, 5729}, +{5825, 1985, 5729}, +{6033, 1793, 5633}, +{6049, 1553, 5521}, +{5521, 1505, 5313}, +{6545, 705, 5585}, +{5553, 1905, 5713}, +{6049, 1633, 5633}, +{6369, 1073, 5121}, +{6193, 1313, 4961}, +{6273, 1873, 5201}, +{6481, 1681, 5841}, +{6113, 945, 5729}, +{6369, 1217, 4833}, +{6049, 1409, 5553}, +{6017, 1, 5745}, +{6209, 257, 5457}, +{6049, 929, 5681}, +{6001, 465, 5777}, +{5937, 257, 5921}, +{6001, 433, 5793}, +{6033, 433, 5601}, +{5937, 481, 5473}, +{6017, 529, 5585}, +{6049, 305, 5777}, +{6081, 97, 5649}, +{6065, 209, 5729}, +{5937, -15, 5649}, +{5857, 145, 5921}, +{5905, -143, 6065}, +{5681, -79, 6161}, +{5921, -239, 5649}, +{5761, -111, 5665}, +{5889, 113, 5697}, +{5841, -31, 5713}, +{5761, -399, 5809}, +{5489, -911, 5633}, +{5521, -767, 5585}, +{6433, 449, 5729}, +{6145, 33, 5793}, +{6385, 273, 5505}, +{6401, 961, 5057}, +{6385, 1505, 5185}, +{6273, 1377, 5409}, +{5985, 1841, 5201}, +{5857, 1825, 5489}, +{5889, 2209, 5777}, +{6177, 1601, 5473}, +{6113, 1969, 5601}, +{6033, 1953, 5473}, +{6193, 1857, 5601}, +{6225, 1697, 5617}, +{5985, 2353, 5601}, +{6481, 2161, 6273}, +{5713, 1585, 4849}, +{5921, 1377, 4849}, +{5825, 1009, 6209}, +{5089, 529, 5537}, +{5409, 129, 6113}, +{5761, 177, 5697}, +{6193, 289, 5249}, +{6193, 449, 5665}, +{6049, 657, 5425}, +{5905, 1329, 5153}, +{6145, 1409, 5265}, +{5329, 1137, 5857}, +{6001, 817, 5793}, +{6097, 769, 5697}, +{6513, 1393, 5297}, +{6433, 1729, 5265}, +{6321, 1537, 5169}, +{6305, 1329, 5249}, +{6097, 1185, 5265}, +{6161, 833, 5537}, +{5825, 641, 5537}, +{5889, 513, 5809}, +{6049, 401, 5969}, +{5697, 177, 6049}, +{5681, -63, 6081}, +{5601, -191, 6113}, +{5505, -863, 6289}, +{5329, -559, 6161}, +{5489, -911, 6001}, +{5441, -735, 6209}, +{5521, -959, 6225}, +{5841, -303, 5745}, +{5825, -367, 5921}, +{5825, -159, 5761}, +{6001, -47, 5681}, +{5969, 49, 5697}, +{6257, 529, 5345}, +{6241, 449, 5601}, +{5969, 769, 5617}, +{6145, 497, 5649}, +{5953, 513, 5537}, +{6097, 625, 5521}, +{6145, 993, 5313}, +{5857, 289, 5745}, +{6001, 737, 5697}, +{6065, 353, 5825}, +{5873, 641, 5905}, +{6193, 1137, 5569}, +{6145, 929, 5633}, +{6129, 1153, 5505}, +{6081, 913, 5921}, +{5873, 833, 5777}, +{5937, 193, 5809}, +{5953, 689, 5921}, +{5857, 145, 5809}, +{5873, 289, 5665}, +{5889, 241, 5633}, +{5937, 433, 5793}, +{6001, 225, 5841}, +{5921, 417, 5697}, +{6033, 1041, 5633}, +{6049, 1057, 5409}, +{5809, 1233, 5841}, +{5985, 1441, 5633}, +{6001, 1313, 5697}, +{6049, 1137, 5777}, +{6385, 1473, 5537}, +{6465, 1697, 4977}, +{6465, 1505, 4865}, +{6513, 1649, 5073}, +{6209, 1633, 4945}, +{6705, 1601, 5073}, +{6369, 1633, 5137}, +{6625, 1393, 5345}, +{6113, 1633, 4993}, +{6193, 1217, 5105}, +{6097, 1297, 5649}, +{5905, 1057, 5841}, +{5649, 897, 5937}, +{5553, 417, 6209}, +{5729, 945, 5825}, +{5921, 721, 5553}, +{5761, 593, 5297}, +{5345, 721, 5905}, +{5665, 641, 6113}, +{5697, 625, 5953}, +{5937, 705, 6209}, +{5745, 1121, 6177}, +{5953, 1105, 5329}, +{5889, 1393, 5233}, +{5745, 1217, 5937}, +{5857, 1441, 6033}, +{5889, 1585, 6065}, +{6833, 1921, 4721}, +{6801, 1969, 4417}, +{6737, 1905, 4561}, +{6657, 1921, 4785}, +{6305, 1953, 5089}, +{6065, 1937, 5281}, +{6177, 1985, 5377}, +{5985, 1905, 5553}, +{6049, 1601, 5713}, +{6001, 1313, 5713}, +{5793, 689, 5697}, +{5601, 561, 5937}, +{5505, 657, 6225}, +{5457, 433, 6449}, +{5521, 609, 6305}, +{5457, 353, 6193}, +{5361, -79, 6385}, +{5553, -223, 6017}, +{5521, -143, 6049}, +{5489, -15, 5905}, +{5505, 401, 6193}, +{5809, 689, 5793}, +{5857, 273, 5681}, +{5697, 817, 5841}, +{6177, 1137, 5441}, +{6065, 1089, 5633}, +{5969, 1313, 5745}, +{6161, 1697, 5521}, +{6241, 1761, 5329}, +{6385, 1729, 5233}, +{6353, 1617, 5137}, +{6289, 1441, 5281}, +{6145, 1601, 5425}, +{6177, 1553, 5425}, +{6065, 1393, 5553}, +{6161, 1873, 5393}, +{5889, 705, 5649}, +{5953, 881, 5777}, +{5745, 609, 5873}, +{5681, 1089, 6033}, +{5697, 721, 6033}, +{5505, 433, 6273}, +{5649, 769, 6033}, +{5809, 385, 5969}, +{5809, 305, 5665}, +{6049, 209, 5553}, +{5697, 337, 5985}, +{5809, 577, 5953}, +{5745, 721, 5921}, +{5697, 689, 5873}, +{5713, 961, 5665}, +{6049, 1105, 5649}, +{6145, 881, 5713}, +{6289, 961, 4961}, +{6465, 1425, 4689}, +{6625, 1969, 4817}, +{6241, 1425, 5265}, +{6257, 1425, 5313}, +{6001, 1793, 5377}, +{6113, 1697, 5585}, +{6097, 1905, 5393}, +{6145, 1249, 5537}, +{6177, 1601, 5489}, +{6049, 1073, 5553}, +{5889, 1521, 5681}, +{5857, 1169, 5873}, +{6001, 897, 5601}, +{6129, 1041, 5505}, +{6193, 881, 5377}, +{6289, 353, 5313}, +{5393, 1281, 6017}, +{5377, 1793, 5345}, +{5585, 1601, 6433}, +{6385, -463, 5361}, +{6449, 705, 5153}, +{6449, 577, 5425}, +{5969, 1329, 5505}, +{6529, -351, 5473}, +{6625, -79, 4689}, +{6657, 65, 4737}, +{6257, 721, 5249}, +{6129, 577, 5473}, +{6353, 161, 5441}, +{6465, 289, 5217}, +{6481, 465, 5105}, +{6465, 993, 4913}, +{6625, 673, 4865}, +{6465, 97, 5217}, +{6529, -463, 5601}, +{6513, 465, 5297}, +{6689, 17, 4721}, +{6401, -95, 4993}, +{6241, -319, 5729}, +{6193, -543, 5457}, +{6177, -495, 5361}, +{6273, -543, 5441}, +{6097, -879, 5201}, +{5393, -1551, 5457}, +{6113, -1183, 5361}, +{6225, -847, 5889}, +{6033, -879, 5809}, +{6289, -783, 5457}, +{6529, -239, 4865}, +{6545, 145, 5137}, +{6113, 593, 5249}, +{6609, 737, 5665}, +{5953, 209, 5569}, +{6241, 833, 5553}, +{6241, 769, 5489}, +{6353, 497, 5201}, +{5905, 1617, 4849}, +{6801, 865, 5553}, +{6145, -399, 5569}, +{6193, 545, 5649}, +{6113, 177, 5377}, +{6369, 481, 5409}, +{6241, 113, 5393}, +{5921, 161, 5633}, +{5729, 289, 6033}, +{5873, 449, 5969}, +{6001, 433, 6001}, +{5873, 417, 5761}, +{5985, -143, 5617}, +{6145, 209, 5489}, +{6097, 593, 5633}, +{5953, 577, 5713}, +{6017, 497, 5665}, +{6145, 769, 5665}, +{6289, 737, 5553}, +{6289, 785, 5409}, +{6337, 561, 5313}, +{6321, 881, 5121}, +{6337, 1457, 4561}, +{6273, 1313, 5057}, +{6321, 657, 4961}, +{6657, 1457, 4737}, +{6497, 1041, 4721}, +{6049, 1569, 6017}, +{5937, 945, 6017}, +{6161, 1441, 5601}, +{5985, 753, 5457}, +{6017, 737, 5537}, +{5905, 1137, 5745}, +{5761, -143, 4977}, +{5809, -127, 4097}, +{6145, 81, 5649}, +{5825, -191, 7201}, +{6017, -127, 6049}, +{6161, -383, 5633}, +{6337, 353, 5425}, +{6161, 225, 5665}, +{5937, 353, 5521}, +{6257, 465, 5137}, +{6417, 1041, 4785}, +{5873, 1937, 6305}, +{5905, 1297, 6593}, +{5713, 961, 6065}, +{5889, 1521, 5345}, +{5889, 2193, 5409}, +{5777, 1489, 6193}, +{6033, 1473, 5777}, +{5857, 1409, 5473}, +{6081, 1361, 5217}, +{6225, 1569, 4913}, +{5905, 1681, 5841}, +{5825, 1729, 5985}, +{5889, 1617, 5841}, +{6033, 1697, 5329}, +{6209, 977, 5425}, +{5857, 1521, 5921}, +{5841, 1761, 5697}, +{6097, 1665, 5553}, +{6097, 1457, 5473}, +{6033, 1393, 5473}, +{5937, 1857, 5649}, +{5905, 2001, 5649}, +{5809, 1873, 5633}, +{5825, 2017, 5761}, +{5985, 2081, 5713}, +{6049, 1825, 5185}, +{5953, 2145, 5217}, +{5937, 2305, 5489}, +{6033, 2433, 5873}, +{6177, 2161, 5441}, +{6001, 2113, 5073}, +{6177, 1889, 5185}, +{6097, 2017, 5441}, +{6033, 2033, 5537}, +{6033, 1633, 5553}, +{5921, 1521, 5761}, +{5889, 1633, 5729}, +{5873, 1825, 5553}, +{5937, 1601, 5361}, +{5937, 1745, 5569}, +{5937, 1601, 5761}, +{5809, 1329, 5649}, +{6049, 1313, 5441}, +{6001, 1569, 5441}, +{5969, 1329, 5633}, +{5921, 1521, 5697}, +{5873, 1841, 5489}, +{5665, 2161, 5233}, +{6177, 2193, 5217}, +{6113, 2321, 5521}, +{5985, 1857, 5393}, +{5841, 2753, 5217}, +{6097, 2513, 5441}, +{6049, 2497, 5297}, +{6081, 2129, 5153}, +{6065, 2433, 5201}, +{6129, 2449, 5297}, +{6033, 2113, 5361}, +{6049, 2209, 5249}, +{5953, 1921, 5425}, +{5889, 1921, 5633}, +{5745, 1617, 5745}, +{5649, 1889, 5889}, +{5649, 1809, 5777}, +{5729, 1217, 5857}, +{5633, 1521, 5953}, +{5585, 1489, 5969}, +{5713, 1425, 5793}, +{5697, 1393, 5729}, +{5889, 1905, 5713}, +{5809, 1969, 5665}, +{5777, 2065, 5569}, +{6033, 2081, 5169}, +{5905, 3217, 5393}, +{5681, 2865, 5457}, +{6033, 2977, 5345}, +{6033, 2881, 4865}, +{6017, 3121, 5041}, +{5921, 3089, 5121}, +{6017, 2689, 5217}, +{6113, 2673, 5201}, +{5937, 2913, 4961}, +{6001, 2449, 5185}, +{5921, 2401, 5377}, +{5953, 2353, 5409}, +{5777, 2577, 5521}, +{5585, 2129, 5873}, +{5553, 2081, 5889}, +{5601, 2177, 5729}, +{5729, 1825, 5697}, +{5745, 1569, 5713}, +{5761, 1345, 5889}, +{5617, 1953, 5777}, +{5649, 2065, 5729}, +{5713, 2065, 5649}, +{5633, 2209, 5537}, +{5745, 1921, 5857}, +{5809, 2849, 5745}, +{5793, 2577, 5521}, +{6017, 2689, 5041}, +{6049, 2929, 5025}, +{6001, 2369, 5409}, +{6065, 2593, 5025}, +{6065, 2289, 5345}, +{6033, 2705, 5185}, +{5953, 2673, 5249}, +{5889, 2289, 5393}, +{5921, 2417, 5521}, +{5809, 2193, 5665}, +{5889, 2161, 5521}, +{5889, 2145, 5441}, +{5969, 1873, 5505}, +{5969, 1713, 5537}, +{5649, 1713, 5777}, +{5713, 1521, 5793}, +{5793, 1489, 5857}, +{5729, 1345, 5841}, +{5841, 1681, 5857}, +{5777, 2097, 5617}, +{5729, 2193, 5537}, +{5905, 2353, 5777}, +{5697, 2273, 5697}, +{5745, 2321, 5569}, +{6129, 2945, 4241}, +{6033, 3089, 4129}, +{6657, 1537, 5345}, +{6529, 2641, 5969}, +{5809, 3153, 5137}, +{6145, 2337, 5281}, +{6385, 1553, 5025}, +{6305, 1041, 5121}, +{6177, 545, 5521}, +{5873, 609, 5777}, +{5697, 657, 6145}, +{5553, 273, 5713}, +{5217, -447, 6545}, +{5393, 273, 6129}, +{5873, 257, 5713}, +{5985, 385, 5905}, +{5841, 369, 5953}, +{5889, 529, 5905}, +{5681, 385, 5985}, +{5921, 913, 5793}, +{6033, 961, 5937}, +{5969, 801, 5649}, +{6001, 1297, 5873}, +{6017, 1409, 5937}, +{6001, 1121, 5809}, +{5953, 817, 5697}, +{6289, 1057, 5217}, +{6017, 1409, 5329}, +{6385, 929, 5297}, +{6049, -895, 5729}, +{5953, -479, 5569}, +{6529, 273, 5713}, +{6273, 17, 5185}, +{5889, -63, 4353}, +{5713, -207, 5537}, +{6257, 17, 5009}, +{5505, -527, 7665}, +{5073, -911, 6673}, +{5777, -303, 5825}, +{6065, 17, 5569}, +{5905, 401, 6081}, +{6193, 1281, 5761}, +{6049, 321, 5233}, +{5953, 1505, 5569}, +{5745, 1345, 5537}, +{6193, 769, 5937}, +{6193, 1233, 5569}, +{6129, 1457, 5457}, +{6337, 1681, 5457}, +{5777, 529, 5009}, +{5825, 2161, 5953}, +{5841, 2865, 6417}, +{6609, 2657, 5665}, +{6017, 2913, 4353}, +{6081, 3281, 4401}, +{5873, 3713, 5025}, +{5969, 1105, 5905}, +{5345, 1089, 6721}, +{5137, 977, 6129}, +{5441, 961, 6433}, +{5649, 257, 5585}, +{5905, -111, 5489}, +{6001, 1969, 6001}, +{5873, 1633, 5681}, +{6145, 1377, 5121}, +{6513, 1841, 4337}, +{6305, 3121, 5169}, +{6465, 2529, 4977}, +{6465, 2625, 4801}, +{6769, 2305, 4593}, +{6657, 1521, 4945}, +{6241, 1601, 4817}, +{6065, 1073, 5665}, +{5937, 1265, 5617}, +{6033, 1169, 5729}, +{5969, 1185, 5777}, +{5841, 929, 6049}, +{5585, 1169, 6177}, +{5809, 801, 5985}, +{5585, 337, 5953}, +{5441, -495, 6193}, +{5233, -223, 6209}, +{5329, -463, 6321}, +{5297, -351, 6113}, +{5569, -367, 6049}, +{5697, 113, 6097}, +{5889, 273, 5857}, +{6097, 849, 5569}, +{6097, 673, 5649}, +{6097, 1377, 5473}, +{6113, 993, 5521}, +{6065, 753, 5633}, +{5921, 993, 5841}, +{5825, 1137, 5921}, +{6129, 945, 5617}, +{6161, 1233, 5425}, +{6001, 1233, 5553}, +{5873, 881, 5841}, +{5825, 1297, 5825}, +{5649, 1329, 5985}, +{5649, 1761, 5937}, +{5569, 1233, 6049}, +{5489, 689, 6081}, +{5761, 945, 6017}, +{5793, 753, 5809}, +{5649, 561, 5857}, +{5761, 513, 5937}, +{5665, 817, 5953}, +{5889, 929, 5937}, +{5841, 1217, 5681}, +{5761, 977, 5761}, +{5745, 1393, 5809}, +{5825, 1217, 5809}, +{6097, 2081, 5521}, +{6097, 1681, 5457}, +{6001, 1585, 5537}, +{6177, 1793, 5345}, +{6241, 1841, 5297}, +{6257, 1601, 5329}, +{6289, 1345, 5409}, +{6017, 1121, 5505}, +{5873, 1009, 5633}, +{5857, 1025, 5665}, +{5489, 753, 6305}, +{5521, 273, 6113}, +{5633, 673, 6113}, +{5681, 769, 5985}, +{5729, 465, 6017}, +{5873, 545, 5857}, +{5777, 257, 5889}, +{5889, 833, 5857}, +{6065, 449, 5921}, +{5761, 577, 5953}, +{5809, 1105, 5729}, +{5633, 1393, 5937}, +{5889, 1601, 5649}, +{5953, 1649, 5441}, +{5985, 705, 5585}, +{5873, 1009, 5457}, +{6401, 1713, 5281}, +{6225, 2081, 5361}, +{6177, 2337, 5409}, +{6065, 2001, 5521}, +{6033, 1985, 5457}, +{5937, 1457, 5585}, +{5841, 1201, 5665}, +{5649, 1521, 5745}, +{5665, 1393, 5937}, +{5745, 1633, 5905}, +{5761, 865, 5761}, +{5953, 721, 5729}, +{5681, 545, 5857}, +{5521, 721, 6129}, +{5569, 529, 6225}, +{5617, 817, 5953}, +{5649, 1233, 5985}, +{5473, 945, 5905}, +{5825, 945, 5777}, +{5969, 1569, 5745}, +{6161, 2353, 5185}, +{6161, 2721, 4977}, +{6321, 2577, 5057}, +{6033, 2433, 5249}, +{6225, 2865, 4929}, +{6225, 2465, 5105}, +{6289, 2273, 5185}, +{6081, 2417, 5265}, +{6209, 2257, 5121}, +{6129, 2225, 5233}, +{5921, 1521, 5697}, +{5921, 1681, 5761}, +{5889, 1505, 5553}, +{5681, 1329, 6049}, +{5745, 1281, 6017}, +{5793, 1425, 5745}, +{5761, 1201, 5761}, +{5809, 961, 5825}, +{5905, 721, 5793}, +{5857, 1009, 5665}, +{5841, 593, 5889}, +{5889, 1681, 5809}, +{5921, 1377, 5665}, +{6033, 1441, 5361}, +{6017, 1601, 5425}, +{5825, 2225, 5633}, +{6241, 2321, 4865}, +{6465, 2273, 4929}, +{6257, 2529, 5057}, +{6193, 2673, 5009}, +{6225, 2625, 4833}, +{6289, 2129, 5217}, +{6097, 2209, 5297}, +{6113, 2065, 5345}, +{5905, 2353, 5393}, +{5969, 2177, 5505}, +{5857, 1697, 5633}, +{5697, 1729, 5809}, +{5633, 1793, 5841}, +{5601, 1569, 5953}, +{5665, 1681, 5969}, +{5681, 961, 6113}, +{5665, 1105, 6001}, +{5953, 1377, 5601}, +{5921, 577, 5825}, +{5713, 865, 5921}, +{6017, 1393, 5585}, +{6033, 1473, 5457}, +{6065, 1409, 5345}, +{6225, 1425, 5297}, +{6241, 1873, 5201}, +{6321, 1841, 5105}, +{5921, 2257, 4737}, +{5761, 2705, 5601}, +{5969, 2497, 5169}, +{6177, 2081, 5217}, +{6193, 2129, 5265}, +{6033, 2417, 5489}, +{5969, 1937, 5425}, +{6225, 1697, 5457}, +{6609, 977, 5185}, +{6305, -415, 5361}, +{6417, 913, 5313}, +{6209, -31, 5393}, +{6193, -511, 5569}, +{6337, -511, 5249}, +{6289, -207, 5073}, +{5729, -927, 6177}, +{5729, -991, 5985}, +{6017, -687, 5681}, +{6145, -367, 5377}, +{6273, -207, 5409}, +{6033, -575, 5633}, +{6193, -543, 5553}, +{6305, -271, 5521}, +{6273, -255, 5441}, +{6353, -335, 5681}, +{6321, 497, 5089}, +{6193, 705, 5425}, +{6369, 209, 5553}, +{6417, 337, 5265}, +{6577, 225, 5201}, +{6497, 1, 4689}, +{6497, -95, 5649}, +{6465, -735, 5345}, +{6849, 273, 5105}, +{6657, 97, 5153}, +{6385, 433, 5057}, +{6161, -63, 5681}, +{5393, 209, 4881}, +{5313, -591, 6641}, +{3681, -639, 5713}, +{5585, -2383, 7441}, +{5409, -447, 6241}, +{5313, -927, 6321}, +{5265, -399, 6369}, +{5601, -367, 6177}, +{5729, -287, 6113}, +{5809, -223, 5825}, +{5937, 561, 5457}, +{5793, 561, 5521}, +{6257, -383, 6001}, +{5793, 865, 5825}, +{6113, 881, 5857}, +{5969, 1265, 5377}, +{6017, 593, 5809}, +{5969, 593, 5745}, +{6049, 641, 5889}, +{5921, 1089, 5473}, +{5809, 609, 5569}, +{5745, 353, 5585}, +{5745, 369, 6257}, +{5713, -95, 6225}, +{5857, 385, 6129}, +{5281, 673, 5793}, +{5633, -559, 6401}, +{4961, -511, 6097}, +{5073, -783, 6145}, +{5185, -415, 6913}, +{4961, 241, 6401}, +{5281, 913, 6273}, +{5761, 657, 5569}, +{6081, 401, 5201}, +{5777, 2481, 5729}, +{6385, 753, 5537}, +{6145, 1569, 5265}, +{6465, 2049, 4929}, +{6161, 2017, 5169}, +{6417, 1953, 4961}, +{6241, 1553, 5297}, +{6097, 1617, 5617}, +{5937, 1953, 5345}, +{6193, 1649, 5425}, +{6177, 929, 5169}, +{6017, 945, 5441}, +{5985, 977, 5809}, +{5505, 609, 6385}, +{5265, 545, 6497}, +{5185, 385, 6753}, +{5665, 737, 5985}, +{5633, 225, 5617}, +{5761, 625, 5665}, +{5889, 1297, 5873}, +{6001, 1665, 5697}, +{6113, 1249, 5409}, +{6129, 1825, 4961}, +{6353, 2305, 5025}, +{6401, 2593, 5025}, +{6305, 2673, 4881}, +{6081, 2929, 4865}, +{6209, 2385, 5297}, +{6193, 2881, 5633}, +{6465, 2769, 6145}, +{5969, 4161, 6209}, +{6961, 1489, 2113}, +{6289, 2673, 5569}, +{6177, 1729, 5345}, +{6049, 1729, 5393}, +{6145, 1761, 5585}, +{6081, 785, 5649}, +{6113, 577, 5889}, +{5761, 177, 5617}, +{5329, 65, 5681}, +{5297, 1, 6305}, +{5825, -831, 5505}, +{6049, -623, 5201}, +{5649, 113, 5761}, +{5553, 321, 5713}, +{5665, 449, 6065}, +{5857, 1073, 6081}, +{6641, 673, 4961}, +{6545, 1073, 5345}, +{6177, 977, 5393}, +{6129, 1297, 5457}, +{6129, 817, 5649}, +{6081, 961, 5409}, +{5921, 1137, 5745}, +{5793, 993, 5921}, +{5873, 1073, 6001}, +{5873, 801, 5969}, +{6145, 1169, 5569}, +{6225, 1313, 5409}, +{6257, 897, 5457}, +{5617, -687, 5841}, +{5425, -191, 6225}, +{5489, -287, 6353}, +{5393, -703, 6241}, +{5569, -191, 5953}, +{5841, -751, 5617}, +{5185, -2287, 5969}, +{1905, -2751, 6785}, +{2049, -1903, 6993}, +{3505, -639, 7633}, +{4641, -1295, 7649}, +{4049, -2447, 7313}, +{4337, -1791, 7617}, +{6001, -319, 5953}, +{5857, -47, 5873}, +{5393, -863, 5153}, +{6001, -223, 5121}, +{5905, 577, 6161}, +{5825, -463, 5713}, +{5809, -15, 5633}, +{5761, -591, 5537}, +{5633, -207, 5841}, +{5649, -367, 6177}, +{6065, 225, 5569}, +{6113, 17, 5393}, +{6145, -287, 5473}, +{5713, 929, 5697}, +{4785, -319, 5921}, +{4465, -1951, 6753}, +{4705, -3103, 6465}, +{4465, -655, 7633}, +{4449, -927, 7297}, +{5009, -751, 6833}, +{5249, -1103, 5777}, +{5473, -1679, 5633}, +{5825, -543, 5953}, +{5777, 289, 6097}, +{5649, 625, 6129}, +{5985, 257, 5697}, +{6161, 385, 5313}, +{6161, 865, 5537}, +{6065, 1505, 5825}, +{6321, 257, 6177}, +{6209, 529, 5137}, +{6273, 513, 5009}, +{5969, 401, 5921}, +{5713, -95, 6321}, +{6801, 1729, 4705}, +{6241, 529, 5185}, +{6209, 257, 5729}, +{6145, 609, 5489}, +{6049, -335, 6113}, +{5921, -735, 5745}, +{6081, 657, 5921}, +{6321, -15, 5505}, +{6241, -735, 5105}, +{6097, 385, 5489}, +{6145, 1025, 5553}, +{6049, 1681, 5537}, +{5937, 353, 5729}, +{5745, 1585, 5841}, +{5841, 1825, 5857}, +{6017, 1409, 5553}, +{6769, 1313, 5329}, +{6097, 1889, 5633}, +{6225, 2129, 5313}, +{6177, 1361, 5233}, +{5777, 2433, 5313}, +{6129, 1729, 5857}, +{5825, 881, 5713}, +{5713, 625, 5713}, +{5601, 1265, 5889}, +{5665, 1105, 6145}, +{5585, 1009, 5985}, +{5681, 689, 6001}, +{5649, 1233, 6065}, +{5585, 273, 5905}, +{5425, 209, 5585}, +{6129, 225, 5537}, +{6513, 2369, 5921}, +{6737, 1025, 5681}, +{6065, 753, 5073}, +{6289, 1089, 4865}, +{6241, 1649, 5409}, +{6305, 641, 5377}, +{6209, 769, 5249}, +{6257, 1681, 5521}, +{6353, 1425, 5345}, +{6321, 1137, 5089}, +{6289, 881, 5105}, +{6737, 769, 5265}, +{6449, 1025, 5153}, +{6289, 401, 5153}, +{6449, 385, 5361}, +{6497, 481, 5217}, +{6577, 353, 5105}, +{6385, 257, 5361}, +{6289, 273, 5361}, +{6257, -143, 5441}, +{5825, -159, 6385}, +{4881, -303, 5505}, +{5425, -751, 7169}, +{5681, 273, 6961}, +{5585, 1, 5921}, +{6017, 65, 6017}, +{6145, 337, 5457}, +{6305, 1137, 5025}, +{6545, 1441, 4641}, +{5457, 305, 5025}, +{6209, -671, 6689}, +{6161, 849, 5825}, +{6081, 625, 5169}, +{5985, 65, 5457}, +{5569, 529, 6017}, +{5265, 321, 5953}, +{5441, 577, 6433}, +{5857, 289, 6017}, +{5697, 145, 5873}, +{5745, 1105, 5313}, +{6097, 1153, 5489}, +{5601, 481, 5921}, +{5409, 49, 6193}, +{4769, 241, 5921}, +{4273, 177, 6833}, +{5377, -47, 7265}, +{5521, -15, 6481}, +{5729, -703, 5889}, +{5905, -31, 5761}, +{5889, 577, 5585}, +{5905, 1297, 5137}, +{5777, 1537, 6305}, +{5441, 449, 6625}, +{5473, -319, 6465}, +{6193, 369, 5617}, +{6273, 881, 5393}, +{6321, 849, 5249}, +{6065, 737, 5329}, +{6177, 1025, 5649}, +{6113, 1617, 5617}, +{6065, 1217, 5329}, +{5489, -175, 6049}, +{5329, -303, 6193}, +{5521, -207, 6033}, +{5249, 161, 6161}, +{5169, -31, 6449}, +{4737, -207, 6241}, +{3729, -1407, 7473}, +{4369, -2463, 7729}, +{4305, -1775, 7345}, +{4353, -927, 6881}, +{4737, -1407, 6753}, +{4993, -863, 6001}, +{5409, -687, 5761}, +{6081, -367, 5905}, +{5585, 321, 5857}, +{5681, -671, 6225}, +{5569, 209, 5937}, +{5457, 49, 6321}, +{5281, -415, 6497}, +{5297, -255, 6545}, +{5425, -271, 6209}, +{5857, 417, 6225}, +{5809, 593, 5937}, +{5841, 497, 5697}, +{5809, 497, 5457}, +{5953, 481, 5601}, +{3889, 801, 5921}, +{5169, -1583, 6929}, +{3889, -1455, 7249}, +{3985, -1807, 7249}, +{3009, -2479, 7825}, +{2897, -1279, 8353}, +{2881, -1055, 7969}, +{3105, -1487, 7441}, +{3217, -1679, 7345}, +{3745, -1407, 7761}, +{6561, -1135, 2257}, +{6993, -3679, 1905}, +{5217, -1023, 6945}, +{5137, 305, 7137}, +{5857, -783, 5553}, +{5649, -1103, 6305}, +{5633, 337, 6561}, +{5745, -1407, 5617}, +{5873, -367, 5569}, +{6369, -831, 4913}, +{5521, -2015, 5217}, +{4833, -2847, 5409}, +{4097, -2559, 6817}, +{3985, -2479, 7025}, +{3185, -2911, 6673}, +{2817, -2991, 6817}, +{1153, -3359, 8033}, +{993, -2863, 8273}, +{1441, -3311, 7473}, +{1425, -3263, 7617}, +{2129, -2959, 7409}, +{3361, -2879, 6721}, +{3825, -2575, 6641}, +{4513, -2463, 5921}, +{4689, -1967, 6321}, +{4737, -2111, 6209}, +{5345, -239, 6385}, +{5633, -239, 5665}, +{4737, -1215, 5361}, +{4657, -911, 6305}, +{3633, -1695, 7025}, +{4625, -1263, 7345}, +{4593, -1823, 6865}, +{4689, -1711, 6001}, +{4641, -2159, 5793}, +{4465, -2095, 5953}, +{3905, -2191, 6785}, +{3841, -1519, 6817}, +{3457, -2031, 6833}, +{2833, -2735, 7345}, +{2641, -1535, 8193}, +{3057, -1583, 7873}, +{3249, -1871, 7537}, +{3345, -1487, 7473}, +{4321, -735, 6945}, +{4417, -1471, 6609}, +{4401, -2175, 6273}, +{5793, -1391, 5489}, +{5457, -975, 6033}, +{5537, -767, 6417}, +{5857, -591, 5985}, +{5729, -383, 6033}, +{5553, -799, 5921}, +{5553, -15, 6273}, +{5505, 369, 5761}, +{6033, -143, 5345}, +{5985, -879, 4481}, +{5857, -367, 5585}, +{5905, -399, 5985}, +{5873, 1, 5857}, +{5953, -223, 5985}, +{5825, 657, 5857}, +{5665, -207, 6193}, +{5361, -399, 6209}, +{5345, -623, 6257}, +{5121, -1263, 6273}, +{5553, -991, 6129}, +{5985, -767, 5601}, +{5841, -175, 5889}, +{6177, 449, 5729}, +{6433, 97, 5121}, +{6337, 481, 5409}, +{6641, 1649, 5057}, +{6481, 337, 5265}, +{6289, 817, 5297}, +{6673, 369, 4881}, +{6561, 513, 4961}, +{7025, 1121, 4209}, +{6129, -3407, 3809}, +{6641, -767, 8721}, +{5169, -1807, 7265}, +{2689, -2703, 6801}, +{1649, -735, 8769}, +{2625, -3599, 4865}, +{4945, -5679, 4913}, +{5457, -3967, 5233}, +{5489, -6543, 3473}, +{3105, -5199, 4049}, +{3169, -6127, 5345}, +{3521, -5727, 4833}, +{3841, -5087, 5105}, +{3889, -5663, 5169}, +{3793, -5695, 5089}, +{4161, -4959, 4625}, +{3825, -4015, 4609}, +{4529, -4527, 5665}, +{4769, -4879, 6209}, +{4529, -4191, 4817}, +{4545, -4095, 5409}, +{4657, -4111, 5233}, +{4849, -4255, 5601}, +{4913, -4431, 5585}, +{4833, -4287, 5345}, +{4897, -4879, 5793}, +{4673, -3903, 5649}, +{5521, -4511, 5537}, +{5201, -4943, 5217}, +{5601, -5439, 5953}, +{2977, -3487, 3777}, +{2609, -3775, 4929}, +{641, -1983, 6865}, +{-207, -3631, 3857}, +{-719, -543, 481}, +{13217, -4719, 12625}, +{4305, 1057, 11297}, +{6593, -655, 4145}, +{7249, 1937, 5025}, +{6513, 737, 4961}, +{6305, 1521, 4417}, +{6193, 689, 5585}, +{6289, 1057, 5121}, +{6193, 1489, 5393}, +{6273, 2081, 4977}, +{6257, 1265, 4849}, +{6433, 1201, 5041}, +{6529, 945, 5201}, +{6673, 1505, 4897}, +{6801, 881, 5233}, +{6753, 1121, 5073}, +{6561, 529, 4897}, +{6161, 145, 5441}, +{6209, 65, 5473}, +{6257, -175, 5313}, +{6225, -31, 5313}, +{6241, -623, 5569}, +{6353, -399, 5505}, +{6481, -703, 5169}, +{6545, -111, 4945}, +{6529, 353, 5057}, +{6401, 17, 5409}, +{6609, 353, 5169}, +{6545, 273, 5041}, +{6593, 593, 4945}, +{6641, 993, 4817}, +{6689, 481, 5073}, +{6689, 721, 5041}, +{6737, 625, 4929}, +{6545, 673, 4865}, +{6801, 625, 4849}, +{6833, 529, 4673}, +{6545, 241, 5073}, +{6481, 161, 5217}, +{6449, 65, 5313}, +{6369, 209, 5185}, +{6481, 209, 5153}, +{6497, 81, 5297}, +{6641, 321, 5201}, +{6689, 513, 4897}, +{6657, 753, 4881}, +{6737, 753, 5009}, +{6753, 849, 4977}, +{6513, 1025, 5025}, +{6449, 1281, 5185}, +{6385, 1137, 5249}, +{6465, 1441, 5025}, +{6385, 1265, 5009}, +{6625, 625, 5201}, +{6801, 929, 5009}, +{6625, 1009, 5057}, +{6593, 577, 4929}, +{6369, 369, 5425}, +{6273, -15, 5569}, +{6241, -111, 5441}, +{6305, 225, 5217}, +{6305, 81, 5249}, +{6193, -255, 5473}, +{6513, -399, 5265}, +{6145, -351, 5345}, +{6353, 225, 5409}, +{6417, 257, 5281}, +{6561, 241, 5169}, +{6369, 353, 5185}, +{6433, 481, 5345}, +{6513, 801, 5009}, +{6513, 721, 5105}, +{6449, 641, 5201}, +{6513, 801, 5025}, +{6673, 1041, 4865}, +{6737, 225, 5089}, +{6497, 33, 5089}, +{6497, 417, 5281}, +{6337, 113, 5249}, +{6385, -15, 5329}, +{6353, 33, 5105}, +{6321, -191, 5281}, +{6225, -511, 5537}, +{6401, -287, 5281}, +{5953, 177, 5425}, +{7201, 273, 4849}, +{6305, -447, 5473}, +{6545, 817, 5553}, +{6113, 1009, 5297}, +{6705, 833, 5329}, +{6561, 1761, 4881}, +{6657, 1793, 4913}, +{6417, 1281, 4993}, +{6641, 1281, 4945}, +{6929, 1409, 4785}, +{6817, 1457, 4673}, +{6561, 1649, 4577}, +{6465, 865, 5473}, +{6161, 1329, 5425}, +{6081, 1153, 5793}, +{6241, 833, 6241}, +{5697, 1329, 6065}, +{5745, 2593, 5169}, +{6353, 1969, 4721}, +{6289, 1409, 4929}, +{5969, 1841, 4817}, +{6385, 2433, 4913}, +{6305, 1857, 5505}, +{6305, 1793, 5217}, +{6401, 2257, 4705}, +{6449, 2321, 5089}, +{6321, 2273, 5249}, +{6561, 2209, 5249}, +{6401, 2161, 5729}, +{6161, 1601, 4945}, +{6273, 1921, 4641}, +{6257, 1585, 4241}, +{6097, 1409, 5217}, +{5953, 1425, 4993}, +{5905, 1505, 5889}, +{5905, 1697, 6305}, +{5745, 1761, 5745}, +{6273, 1329, 5297}, +{6529, 945, 5105}, +{5985, 1921, 5313}, +{6049, 2065, 5553}, +{6001, 1697, 5905}, +{6033, 1457, 5569}, +{6193, 1697, 5377}, +{6305, 2001, 5137}, +{6065, 1617, 5617}, +{6113, 1921, 5441}, +{6225, 1665, 5361}, +{6177, 1649, 5281}, +{6001, 1841, 5409}, +{6225, 1905, 5409}, +{6257, 1521, 5553}, +{6257, 1121, 5249}, +{6193, 1041, 5441}, +{6065, 1649, 5585}, +{6065, 1777, 5313}, +{6225, 1441, 5217}, +{6257, 1489, 5329}, +{6225, 1489, 5361}, +{6081, 2209, 5265}, +{6161, 2033, 5265}, +{6385, 2017, 5265}, +{6385, 1937, 4977}, +{6497, 2305, 4929}, +{6305, 1921, 5249}, +{6273, 1953, 5137}, +{6305, 1857, 5185}, +{6241, 1985, 5073}, +{6273, 1857, 5217}, +{6161, 1521, 5361}, +{5921, 1857, 5617}, +{6001, 1809, 5553}, +{6065, 1457, 5361}, +{6145, 1681, 5281}, +{5969, 1185, 5553}, +{5985, 1297, 5825}, +{6049, 1633, 5457}, +{6225, 1681, 5169}, +{6097, 1521, 5313}, +{5937, 1985, 5377}, +{5985, 2081, 5777}, +{6065, 1841, 5457}, +{6161, 2193, 5249}, +{6209, 2321, 5137}, +{6257, 2337, 5009}, +{6129, 2033, 5249}, +{6337, 2433, 5313}, +{6289, 2577, 5249}, +{6289, 2033, 5073}, +{6257, 1649, 5089}, +{5921, 2385, 5457}, +{5793, 1633, 5953}, +{6129, 1393, 5393}, +{6273, 1585, 5425}, +{5873, 1969, 5617}, +{6017, 1569, 5489}, +{6161, 1825, 5441}, +{6033, 1537, 5585}, +{5969, 1857, 5441}, +{5761, 2177, 5617}, +{6033, 2113, 5521}, +{5985, 2017, 5281}, +{6193, 2257, 5185}, +{6225, 2401, 5217}, +{6065, 2033, 5457}, +{6129, 2001, 5441}, +{6305, 2497, 5121}, +{6241, 2305, 5057}, +{6209, 1441, 5153}, +{5905, 1889, 5505}, +{5729, 1697, 5889}, +{6065, 1585, 5505}, +{5905, 1617, 5633}, +{5937, 1937, 5617}, +{5905, 1889, 5569}, +{6129, 1569, 5505}, +{6193, 1361, 5345}, +{6193, 1873, 5249}, +{6145, 2129, 5137}, +{6337, 2129, 5249}, +{6065, 1761, 5633}, +{6081, 2081, 5265}, +{5921, 2113, 5441}, +{5793, 2305, 5585}, +{6081, 2113, 5265}, +{6369, 2673, 6081}, +{6081, 2449, 4961}, +{6129, 1313, 5297}, +{5761, 1441, 5665}, +{6465, 1265, 5681}, +{6001, 625, 5377}, +{6097, 1089, 5537}, +{6065, 945, 5441}, +{6289, 129, 5361}, +{6481, 257, 5553}, +{6273, 577, 5217}, +{6289, 1505, 5281}, +{6273, 801, 5489}, +{6049, 977, 5553}, +{6161, 1297, 5409}, +{6449, 1553, 5201}, +{6353, 1393, 5425}, +{6433, 1521, 5313}, +{6385, 849, 5137}, +{6641, 1537, 4961}, +{6481, 993, 5073}, +{6289, 1009, 5249}, +{6097, 945, 5521}, +{6273, 545, 5329}, +{6033, 641, 5393}, +{6001, 801, 5697}, +{5809, 449, 6017}, +{6385, 465, 4849}, +{6513, 1041, 4737}, +{6625, 2129, 4785}, +{6721, 1473, 4881}, +{6625, 1265, 4833}, +{6545, 1873, 4753}, +{6801, 2145, 4593}, +{6625, 1697, 4929}, +{6449, 1489, 4801}, +{6481, 1393, 5329}, +{6673, 1265, 4961}, +{6641, 993, 4961}, +{6417, 1505, 4993}, +{6081, 785, 5393}, +{6017, 977, 5617}, +{6033, 769, 5633}, +{6401, 1057, 5409}, +{6257, 705, 5489}, +{6369, 689, 5361}, +{6385, 993, 5201}, +{6353, 1825, 4817}, +{6385, 1921, 4945}, +{6433, 1585, 5201}, +{6449, 1809, 4721}, +{6705, 2065, 4641}, +{6593, 2289, 4881}, +{6385, 1985, 4833}, +{6369, 1777, 5057}, +{6449, 1489, 5185}, +{6337, 1889, 5089}, +{6321, 1281, 5521}, +{5713, 1345, 5745}, +{6225, 1105, 5649}, +{6097, 1361, 5281}, +{6001, 1441, 5601}, +{5985, 2081, 5537}, +{6129, 1505, 5377}, +{5905, 1937, 5201}, +{5873, 993, 5633}, +{5905, 2161, 5457}, +{6417, 2305, 5169}, +{6529, 2177, 4465}, +{6641, 2641, 4161}, +{6353, 2673, 4897}, +{6305, 2849, 4929}, +{6401, 2593, 4929}, +{6353, 2193, 5153}, +{6513, 1521, 5489}, +{6353, 2049, 5313}, +{6129, 2161, 4833}, +{6001, 1425, 5201}, +{6273, 1201, 5185}, +{6289, 1361, 5345}, +{5873, 1233, 5681}, +{5889, 1153, 5873}, +{5857, 1361, 5665}, +{6881, 1873, 4801}, +{6593, 1825, 4993}, +{6273, 1585, 5105}, +{6497, 1713, 5137}, +{6273, 2161, 4945}, +{6513, 2001, 4961}, +{6369, 2049, 5057}, +{6257, 1985, 5153}, +{6289, 2017, 5137}, +{6417, 2177, 4993}, +{6369, 1489, 5153}, +{6257, 1457, 5265}, +{6193, 1681, 5233}, +{6145, 1649, 5457}, +{6001, 1585, 5393}, +{6129, 993, 5457}, +{6017, 1601, 5329}, +{5953, 1889, 5489}, +{6305, 1201, 5377}, +{6561, 1153, 5105}, +{6481, 1921, 4993}, +{6017, 2081, 5345}, +{6001, 1521, 5937}, +{5649, 2017, 6561}, +{5633, 2145, 5969}, +{6129, 2401, 4961}, +{6561, 1745, 4721}, +{5985, 1825, 5681}, +{6113, 2289, 5521}, +{6385, 1873, 5361}, +{6177, 1809, 5249}, +{6081, 1889, 5281}, +{6081, 1617, 5345}, +{6129, 1377, 5569}, +{6129, 1217, 5441}, +{5985, 1265, 5489}, +{6065, 1793, 5489}, +{6273, 1329, 5409}, +{6465, 1521, 5249}, +{6337, 1601, 5169}, +{6225, 1745, 5121}, +{6177, 1665, 5553}, +{5889, 2065, 5569}, +{6081, 1921, 5409}, +{6193, 2241, 5025}, +{6241, 2097, 5185}, +{5937, 2257, 5361}, +{6369, 1601, 5409}, +{6129, 2017, 5041}, +{6417, 1329, 5169}, +{5969, 1233, 5393}, +{5985, 1617, 6049}, +{6273, 1345, 5265}, +{6369, 1137, 5105}, +{5969, 1553, 5489}, +{6257, 1265, 5553}, +{5985, 1249, 5905}, +{6065, 1697, 5185}, +{6305, 2033, 4897}, +{6481, 1825, 5121}, +{6321, 1697, 5377}, +{6353, 1713, 5041}, +{6065, 2593, 5137}, +{6241, 1985, 5425}, +{6481, 2529, 4721}, +{6577, 1937, 4881}, +{6465, 1569, 5153}, +{6273, 1729, 5329}, +{6081, 2033, 5281}, +{6305, 1681, 5281}, +{6161, 1377, 5073}, +{5937, 1585, 5169}, +{5825, 2369, 6225}, +{6225, 1473, 5169}, +{6433, 1889, 4833}, +{6353, 1745, 4849}, +{6321, 2321, 4737}, +{6129, 2449, 5153}, +{6257, 2177, 4929}, +{6241, 2417, 4769}, +{6273, 2417, 5249}, +{6305, 2257, 5313}, +{6353, 1921, 5009}, +{6225, 2241, 5137}, +{6145, 1969, 5265}, +{6161, 2129, 5105}, +{6369, 2001, 5137}, +{6337, 1681, 5009}, +{6145, 1905, 5169}, +{6177, 2209, 5249}, +{6129, 1697, 5489}, +{6241, 1921, 5009}, +{6545, 1793, 4769}, +{6321, 2241, 5313}, +{6161, 2081, 5505}, +{6209, 2241, 5153}, +{6289, 2209, 4865}, +{6209, 2545, 5041}, +{6289, 2113, 5329}, +{6257, 2305, 5185}, +{6465, 2225, 5041}, +{6273, 1873, 5137}, +{6145, 1681, 5185}, +{6081, 1937, 5537}, +{6113, 1697, 5377}, +{6097, 1521, 5249}, +{6097, 1713, 5345}, +{5953, 1889, 5537}, +{6337, 1489, 5329}, +{6049, 1601, 5457}, +{6289, 1761, 5265}, +{6193, 2081, 5089}, +{6289, 2177, 5041}, +{6177, 2001, 5121}, +{6289, 1953, 5057}, +{6257, 2241, 5073}, +{6225, 2225, 5137}, +{6161, 2129, 5233}, +{6353, 1857, 4993}, +{6257, 1745, 5057}, +{6705, 1265, 6097}, +{5425, 2721, 5409}, +{6577, 1441, 4993}, +{6033, 1745, 5329}, +{6129, 1905, 5585}, +{5969, 1473, 5649}, +{6177, 1473, 5633}, +{6241, 865, 5201}, +{6321, 1121, 5153}, +{6609, 1345, 4865}, +{6353, 1057, 5297}, +{6305, 785, 5457}, +{6401, 1169, 5281}, +{6465, 1281, 4961}, +{6529, 1169, 4737}, +{6769, 1729, 4593}, +{7169, 1121, 4865}, +{6721, 1217, 4737}, +{6737, 897, 4865}, +{6497, 417, 5233}, +{6529, 609, 5025}, +{6625, 289, 5009}, +{6513, 369, 4977}, +{6129, 209, 5217}, +{6273, 177, 5377}, +{6481, 49, 5185}, +{6401, 353, 4993}, +{6833, 1057, 4833}, +{6593, 1953, 4625}, +{6289, 801, 4849}, +{6737, 897, 5473}, +{6257, 1665, 4833}, +{6577, 1921, 4881}, +{6465, 913, 5457}, +{6737, 689, 5121}, +{6513, 897, 4945}, +{6305, 1489, 5121}, +{6241, 1393, 5585}, +{6241, 513, 5569}, +{6241, 801, 5377}, +{6241, 1393, 5553}, +{6097, 977, 5553}, +{6177, 449, 5585}, +{6385, 1089, 5329}, +{6449, 1793, 4705}, +{6369, 2257, 4945}, +{6849, 1457, 5489}, +{6465, 1697, 4689}, +{6801, 2001, 4769}, +{6529, 2113, 4849}, +{6593, 1713, 4913}, +{6385, 1265, 5105}, +{6481, 1329, 5585}, +{5905, 1409, 5361}, +{6321, 1633, 5313}, +{6209, 689, 5473}, +{6113, 401, 5713}, +{6049, 1265, 5473}, +{5969, 1409, 5553}, +{6033, 1601, 5633}, +{6289, 1409, 5105}, +{6417, 1569, 4865}, +{6385, 1793, 5073}, +{6225, 2177, 5185}, +{6257, 1665, 5281}, +{6529, 1921, 4801}, +{6369, 2241, 5009}, +{6449, 1953, 5249}, +{6321, 2273, 5009}, +{6305, 2257, 4945}, +{6321, 1585, 5201}, +{6273, 1393, 5153}, +{6097, 1649, 5361}, +{6049, 1793, 5489}, +{6161, 1057, 5489}, +{6033, 1057, 5569}, +{5905, 1313, 5745}, +{6145, 1281, 5553}, +{6257, 1073, 5329}, +{6257, 2017, 5169}, +{6081, 2097, 5393}, +{6129, 1665, 5729}, +{6145, 1665, 5537}, +{6241, 2177, 5009}, +{6305, 2129, 5025}, +{6097, 2273, 5281}, +{6129, 2609, 5249}, +{6513, 1521, 5137}, +{6433, 1937, 4881}, +{6305, 1297, 5169}, +{6097, 1473, 5329}, +{5985, 1473, 5809}, +{6113, 1553, 5185}, +{6257, 1265, 5041}, +{6033, 1713, 5345}, +{6065, 1569, 5553}, +{6433, 1345, 5217}, +{6209, 2161, 4993}, +{6257, 2657, 4945}, +{6129, 2609, 5153}, +{5969, 2625, 5329}, +{6033, 2529, 4961}, +{6081, 3169, 4945}, +{6369, 2657, 4961}, +{6465, 2497, 4833}, +{6289, 1665, 5153}, +{6081, 1473, 5329}, +{5905, 2081, 5425}, +{5857, 1889, 5729}, +{6033, 1825, 5537}, +{6161, 1729, 5233}, +{6065, 1745, 5617}, +{6049, 1553, 5809}, +{6273, 2017, 5009}, +{6401, 1585, 5041}, +{6129, 1969, 5105}, +{6081, 2161, 5729}, +{6209, 2385, 5185}, +{6353, 1857, 4993}, +{6241, 2225, 4881}, +{6065, 2033, 5425}, +{6097, 2401, 5489}, +{6193, 1937, 5265}, +{6193, 1185, 5281}, +{5953, 2017, 5233}, +{6065, 1633, 5537}, +{6065, 1873, 5473}, +{6081, 1569, 5473}, +{6177, 1649, 5473}, +{6177, 1569, 5457}, +{6209, 1265, 5457}, +{6225, 1201, 5345}, +{6193, 1921, 5041}, +{6273, 2161, 5601}, +{6353, 1857, 5297}, +{6433, 1425, 4993}, +{6321, 1873, 4849}, +{6161, 2657, 5201}, +{6273, 2033, 5505}, +{6241, 1825, 5569}, +{6193, 913, 5025}, +{6097, 673, 4977}, +{6545, 1761, 5729}, +{6065, -111, 5601}, +{5969, 881, 5473}, +{6161, 1409, 5121}, +{5889, 737, 5585}, +{6097, 1713, 5057}, +{6561, 1377, 4449}, +{6673, 1697, 5313}, +{6433, 2689, 5345}, +{6401, 2049, 4737}, +{6081, 1777, 5153}, +{5969, 1793, 5969}, +{6081, 1553, 5745}, +{6081, 2049, 5201}, +{6257, 1313, 5201}, +{6433, 1297, 4801}, +{6337, 1009, 5249}, +{6081, 1121, 5601}, +{5713, 289, 6017}, +{5793, 417, 6113}, +{5729, 737, 6209}, +{6385, 913, 5345}, +{6049, 1121, 5457}, +{6177, 1553, 5153}, +{6321, 1713, 5217}, +{6113, 1921, 5665}, +{6177, 1489, 5185}, +{6225, 1825, 4993}, +{6241, 2097, 5265}, +{6369, 2241, 5201}, +{6369, 2289, 5009}, +{6385, 1761, 5409}, +{6289, 2049, 4977}, +{6129, 1553, 4657}, +{5905, 609, 5697}, +{5713, 785, 5905}, +{6193, 1073, 5553}, +{5761, 1233, 5873}, +{6129, 737, 5697}, +{6321, 1297, 5089}, +{6561, 1297, 4865}, +{6337, 1825, 5649}, +{6161, 1793, 5489}, +{6177, 1585, 5217}, +{6113, 1729, 5217}, +{6353, 2465, 5041}, +{6353, 2513, 4929}, +{6193, 1729, 5345}, +{6161, 1633, 5217}, +{6097, 1473, 5345}, +{6081, 2129, 5377}, +{6145, 2001, 5281}, +{5825, 1473, 5457}, +{6241, 1393, 5265}, +{6241, 1937, 5073}, +{6225, 1425, 5585}, +{6273, 1873, 5281}, +{6369, 1761, 5025}, +{6289, 1793, 5281}, +{5937, 1809, 5537}, +{5905, 2433, 5617}, +{6209, 2001, 5297}, +{6097, 1953, 5425}, +{6017, 2305, 5441}, +{6257, 2385, 5297}, +{5921, 1713, 5505}, +{6081, 1937, 5505}, +{6001, 2193, 5457}, +{5745, 2177, 5777}, +{5505, 993, 5393}, +{5089, 2737, 6161}, +{6737, 1953, 5041}, +{6753, 465, 5457}, +{6209, 961, 4657}, +{6849, 1057, 4817}, +{6641, 2289, 4801}, +{6593, 1617, 4785}, +{6401, 673, 5585}, +{6641, 1841, 4769}, +{6593, 1585, 4625}, +{6625, 1249, 4929}, +{6561, 1329, 5169}, +{6609, 1233, 4609}, +{6609, 1393, 4785}, +{6657, 833, 4913}, +{6241, 721, 5505}, +{6561, 593, 5473}, +{6561, 625, 4961}, +{6241, 897, 5313}, +{6481, 513, 5537}, +{6353, 369, 5313}, +{6257, 497, 5153}, +{6529, 1297, 4849}, +{6673, 1153, 5041}, +{6465, 801, 5393}, +{6609, 1057, 4961}, +{6641, 1473, 4977}, +{6241, 2113, 4657}, +{6257, 1873, 4977}, +{6689, 1121, 5185}, +{6673, 1249, 4769}, +{6641, 1393, 4849}, +{6497, 849, 5137}, +{6401, 977, 5505}, +{6289, 1249, 5457}, +{6305, 1185, 5249}, +{6081, 1633, 5457}, +{6161, 1361, 5569}, +{6353, 1633, 5009}, +{6545, 1601, 4961}, +{6337, 2081, 4865}, +{6401, 1601, 5169}, +{6385, 1569, 5185}, +{6577, 2737, 4769}, +{6321, 2001, 5009}, +{6321, 2529, 4897}, +{6337, 2161, 5121}, +{6305, 1937, 5233}, +{6193, 1409, 5393}, +{5665, 1777, 5585}, +{5889, 1457, 5857}, +{6097, 1505, 5489}, +{6065, 1585, 5425}, +{5953, 1697, 5473}, +{5921, 1361, 5777}, +{6049, 1569, 5377}, +{6369, 2049, 4929}, +{6561, 1985, 4977}, +{6001, 2481, 5185}, +{6145, 2065, 5217}, +{6273, 2161, 4881}, +{6177, 2305, 5137}, +{6177, 2465, 5409}, +{6193, 2433, 5345}, +{6337, 1985, 5057}, +{6065, 1745, 5265}, +{5873, 1665, 5649}, +{5649, 2049, 5905}, +{6209, 1761, 5233}, +{6145, 1297, 5249}, +{5921, 1601, 5617}, +{6081, 1873, 5729}, +{6257, 1825, 5137}, +{6385, 1857, 4801}, +{6033, 2545, 5537}, +{6257, 2465, 5377}, +{6289, 2033, 5137}, +{6465, 1905, 4833}, +{6593, 2353, 4737}, +{6289, 2289, 4961}, +{6353, 2273, 4785}, +{6417, 1537, 5137}, +{6257, 1617, 5137}, +{6209, 1345, 5393}, +{6001, 1697, 5249}, +{6241, 1505, 5377}, +{6001, 1281, 5425}, +{6017, 1137, 5537}, +{5793, 1377, 5921}, +{5777, 1185, 6001}, +{6257, 1409, 5169}, +{6273, 1793, 5201}, +{5889, 1873, 5521}, +{5809, 2161, 5425}, +{5921, 2065, 5409}, +{6097, 1841, 4993}, +{6305, 1761, 5473}, +{6209, 1857, 5649}, +{6449, 1393, 5217}, +{6209, 1121, 5361}, +{6273, 1041, 5361}, +{6065, 1633, 5345}, +{6321, 1297, 5777}, +{6353, 705, 5521}, +{6081, 865, 5297}, +{6017, 1009, 5649}, +{6081, 1025, 5569}, +{6289, 545, 5537}, +{6209, 1105, 5153}, +{6449, 1217, 5233}, +{6273, 1521, 5233}, +{6465, 1105, 5233}, +{6497, 1137, 4945}, +{6401, 1457, 5041}, +{6529, 1713, 5329}, +{6353, 1137, 5409}, +{6561, 1553, 5041}, +{6481, 1377, 5009}, +{6481, 1297, 5073}, +{6449, 721, 5345}, +{6305, 881, 5393}, +{6065, 369, 5649}, +{5761, 529, 5825}, +{5777, 721, 6129}, +{5585, 1217, 6081}, +{6449, 961, 5361}, +{6337, 993, 5137}, +{6305, 1329, 5201}, +{6209, 2113, 5057}, +{6353, 1793, 5361}, +{6721, 1297, 5393}, +{6497, 1841, 4817}, +{6177, 2193, 5073}, +{6225, 2017, 5377}, +{6145, 2049, 5473}, +{6497, 1505, 5105}, +{6001, 2225, 4817}, +{6273, 1649, 5217}, +{5969, 1921, 5569}, +{6161, 1521, 5457}, +{6193, 1249, 5393}, +{6033, 1169, 5649}, +{5921, 1537, 5665}, +{6129, 1409, 5585}, +{6113, 1633, 5297}, +{6273, 1457, 5121}, +{6289, 2049, 5281}, +{6145, 1969, 5569}, +{6161, 1761, 5249}, +{6273, 1761, 5009}, +{6465, 2273, 5025}, +{6433, 2081, 4961}, +{6449, 1793, 5153}, +{6449, 1905, 5201}, +{6481, 1905, 5009}, +{6385, 1761, 4817}, +{6401, 1473, 4977}, +{6081, 1713, 5217}, +{6113, 1505, 5217}, +{6145, 1489, 5201}, +{6129, 1457, 5425}, +{6113, 1761, 5585}, +{6321, 1521, 5169}, +{6561, 1537, 5025}, +{6417, 1777, 4945}, +{6193, 2289, 5153}, +{6273, 1761, 5345}, +{6001, 2017, 5185}, +{6465, 2305, 4977}, +{6321, 2401, 4865}, +{6433, 1777, 5185}, +{6353, 1633, 5281}, +{6497, 2289, 5425}, +{6337, 1473, 5217}, +{6337, 1649, 5041}, +{6161, 2097, 5441}, +{6017, 1905, 5425}, +{6209, 1569, 5249}, +{6193, 1425, 5217}, +{5937, 1713, 5313}, +{5889, 1953, 5777}, +{6113, 1457, 5985}, +{6433, 1697, 5137}, +{6337, 2241, 5137}, +{6097, 2289, 5089}, +{6161, 1633, 5521}, +{6257, 1889, 5185}, +{6353, 2161, 4929}, +{6305, 1969, 5249}, +{6305, 2033, 5281}, +{6353, 2225, 5137}, +{6401, 1841, 5041}, +{6401, 1569, 5169}, +{6097, 1889, 5377}, +{6001, 1697, 5361}, +{6033, 1713, 5217}, +{6113, 1425, 5505}, +{6017, 1649, 5649}, +{6177, 1441, 5409}, +{6481, 1425, 5153}, +{6385, 1761, 4961}, +{6081, 1953, 5217}, +{5777, 2097, 5553}, +{6609, 961, 5761}, +{6353, 2017, 4769}, +{6449, 2225, 5057}, +{6385, 1505, 5537}, +{6081, 1969, 5281}, +{6161, 497, 5553}, +{6449, 1121, 5329}, +{6177, 897, 5313}, +{6129, 753, 4929}, +{6273, -79, 5425}, +{6129, 305, 5505}, +{6033, -127, 5633}, +{6049, -223, 5777}, +{6289, 273, 5617}, +{6305, 113, 5377}, +{6433, 657, 5121}, +{6353, 209, 5361}, +{6209, 65, 5793}, +{6241, 593, 5345}, +{6561, 753, 5153}, +{6433, 673, 5233}, +{6705, 737, 5329}, +{6465, -335, 5345}, +{6161, 257, 4945}, +{6369, 145, 5073}, +{6225, 337, 5793}, +{5969, -463, 5697}, +{6065, 49, 5505}, +{6657, -847, 6177}, +{5777, 497, 5233}, +{6401, 545, 5649}, +{6449, 1057, 5137}, +{6561, 993, 5073}, +{6481, 1537, 4817}, +{6881, 1137, 4993}, +{6321, 1537, 5121}, +{6433, 1729, 4929}, +{6561, 1297, 5457}, +{6449, 1217, 5265}, +{6177, 1921, 5121}, +{6305, 1633, 5201}, +{6017, 1217, 5185}, +{6353, 785, 5441}, +{6321, 737, 5489}, +{6129, 977, 5201}, +{6193, 1329, 5137}, +{6257, 801, 5825}, +{6177, 1169, 5377}, +{6801, 1361, 4753}, +{6769, 1777, 4657}, +{6257, 2305, 4625}, +{6417, 1889, 4545}, +{6641, 1937, 4865}, +{6545, 2193, 5105}, +{6433, 2065, 5185}, +{6769, 1937, 5105}, +{6577, 1761, 5393}, +{6241, 2337, 5105}, +{6257, 1825, 5201}, +{6017, 1681, 5153}, +{5921, 1009, 5425}, +{5985, 1121, 5457}, +{5825, 1185, 5489}, +{6113, 1105, 5777}, +{6193, 1457, 5537}, +{6337, 1697, 4625}, +{6321, 1985, 4721}, +{6657, 2465, 5585}, +{6433, 2241, 4833}, +{6561, 2577, 4401}, +{6481, 2577, 4545}, +{6289, 2673, 4897}, +{6401, 2193, 5169}, +{6385, 2257, 5169}, +{6145, 2241, 4881}, +{5905, 1889, 5409}, +{5905, 1329, 5601}, +{6257, 1537, 5345}, +{6081, 1281, 5217}, +{6065, 1361, 5265}, +{5841, 1345, 5489}, +{5681, 1409, 5761}, +{6353, 1601, 5121}, +{6449, 1761, 5265}, +{6353, 1985, 5233}, +{6273, 2129, 5297}, +{6273, 1985, 5233}, +{6161, 1969, 4961}, +{6129, 2209, 5201}, +{6129, 2161, 5249}, +{6097, 2241, 5233}, +{6129, 2465, 5217}, +{6193, 1905, 5361}, +{6097, 1697, 5249}, +{6017, 1585, 5521}, +{5697, 1697, 5761}, +{5729, 1793, 5969}, +{5761, 1729, 5521}, +{5857, 1521, 6097}, +{5873, 2017, 6033}, +{5985, 1809, 5537}, +{6081, 1985, 5313}, +{6049, 2241, 5617}, +{5937, 3393, 6065}, +{6241, 3681, 4721}, +{6481, 3569, 4673}, +{6577, 3521, 4433}, +{6145, 2881, 3889}, +{6257, 2817, 5201}, +{6337, 2769, 5777}, +{6289, 2577, 5777}, +{6177, 1985, 5793}, +{5969, 2529, 4321}, +{5921, 1649, 4865}, +{6033, 1825, 5089}, +{6033, 1537, 5681}, +{6161, 929, 5841}, +{6001, 1041, 4945}, +{6385, 1201, 5153}, +{5889, 1441, 5393}, +{6113, 1633, 5297}, +{6129, 1457, 5313}, +{6001, 2145, 5537}, +{6161, 1809, 6065}, +{6161, 1745, 5105}, +{6481, 1969, 5073}, +{6481, 2113, 5073}, +{6209, 1953, 5393}, +{6113, 1889, 5601}, +{6273, 2033, 5073}, +{6177, 1681, 5201}, +{6033, 1649, 5489}, +{6001, 2145, 5297}, +{5809, 1505, 5329}, +{5713, 1249, 5873}, +{5921, 1249, 5905}, +{5745, 1057, 6049}, +{5873, 1377, 5729}, +{6289, 1089, 5265}, +{5953, 1713, 5377}, +{5793, 1425, 5953}, +{5985, 1169, 5681}, +{6049, 1185, 5489}, +{6305, 1713, 4945}, +{6225, 1905, 5681}, +{6161, 1457, 5665}, +{6177, 1233, 5409}, +{6369, 1153, 5169}, +{6097, 1345, 5345}, +{6017, 1073, 5921}, +{5841, 1201, 5729}, +{6081, 1105, 5377}, +{5969, 1217, 5729}, +{5809, 1185, 5921}, +{5857, 929, 5697}, +{6065, 2097, 5249}, +{6033, 2033, 5281}, +{6001, 2449, 5441}, +{6193, 1681, 5441}, +{6177, 1937, 5201}, +{6049, 1969, 5393}, +{6033, 1713, 5729}, +{6001, 2209, 5361}, +{6161, 1649, 5345}, +{6097, 1361, 5505}, +{5729, 1361, 5745}, +{5793, 1857, 5777}, +{6033, 1217, 5745}, +{5889, 1233, 5553}, +{5969, 1169, 5553}, +{6017, 1185, 5617}, +{5985, 1265, 5681}, +{6001, 1233, 5569}, +{6033, 1137, 5473}, +{5985, 2033, 5313}, +{5969, 1537, 5569}, +{6145, 1473, 5233}, +{6209, 1713, 5201}, +{6033, 1985, 5537}, +{6097, 1777, 5649}, +{6209, 1489, 5457}, +{6033, 1217, 5489}, +{6065, 1569, 5505}, +{6081, 1713, 5457}, +{6209, 1425, 5441}, +{6209, 945, 5393}, +{6145, 1169, 5489}, +{5937, 1569, 5569}, +{6145, 1441, 5569}, +{6225, 1569, 5265}, +{6353, 1441, 5025}, +{6209, 1937, 5521}, +{6177, 1873, 5569}, +{6145, 1953, 5137}, +{6337, 2145, 4897}, +{6337, 2081, 5137}, +{6225, 1857, 5345}, +{6321, 2017, 5281}, +{6209, 1633, 5249}, +{6113, 1745, 5377}, +{6177, 1809, 5297}, +{5905, 1169, 5617}, +{5825, 1505, 5665}, +{6001, 1601, 5617}, +{6033, 1969, 5505}, +{6113, 1153, 5585}, +{6257, 1793, 5041}, +{6225, 1617, 5137}, +{5937, 2689, 5121}, +{5521, 1345, 6049}, +{6609, 1329, 5889}, +{6577, 1729, 5457}, +{5617, 2225, 5537}, +{6753, 1521, 5489}, +{6433, 1073, 5569}, +{6497, 1617, 4961}, +{6097, 1329, 4785}, +{6049, 481, 5857}, +{6017, -79, 5521}, +{6161, 689, 5313}, +{6401, 81, 5393}, +{6241, 65, 5617}, +{6417, 353, 5441}, +{6321, 305, 5169}, +{6433, 577, 5057}, +{6241, 593, 5361}, +{6225, 465, 5569}, +{6241, 497, 5377}, +{6129, 497, 5553}, +{6177, 241, 5617}, +{6353, 1185, 5489}, +{6545, 209, 5537}, +{6289, -255, 5313}, +{6241, -191, 5409}, +{5889, -79, 6145}, +{6385, -143, 5441}, +{6273, 161, 5441}, +{6209, 257, 5393}, +{5873, -271, 6049}, +{6353, -367, 5585}, +{6385, 33, 5633}, +{6513, 1329, 4961}, +{6465, 1105, 4993}, +{6545, 993, 5105}, +{6369, 737, 5233}, +{6513, 1889, 5233}, +{6209, 1505, 5297}, +{6529, 817, 5377}, +{6625, 1009, 5441}, +{6433, 1105, 4881}, +{6273, 1569, 4689}, +{6817, 1761, 5137}, +{5905, 849, 5489}, +{6241, 1505, 5233}, +{6081, 1921, 5345}, +{6257, 1089, 5857}, +{5969, 401, 5617}, +{5921, 1249, 5361}, +{6209, 2145, 5041}, +{6337, 1825, 5521}, +{6177, 1489, 5665}, +{6113, 1425, 5313}, +{6289, 2289, 4817}, +{6177, 1233, 5521}, +{6081, 1921, 5425}, +{6417, 913, 5665}, +{6145, 1073, 5345}, +{6049, 1313, 5329}, +{5697, 1089, 6209}, +{5777, 1073, 5969}, +{5825, 849, 5697}, +{5985, 1345, 5649}, +{5729, 1505, 5729}, +{5905, 1185, 5841}, +{5937, 1185, 5585}, +{5809, 1297, 5505}, +{5681, 1761, 5745}, +{5969, 1569, 5777}, +{5937, 1393, 5649}, +{6225, 1729, 5281}, +{6241, 1697, 5281}, +{5953, 1505, 5633}, +{6049, 1905, 5585}, +{6273, 1409, 5345}, +{6257, 1073, 5473}, +{5905, 609, 5505}, +{5729, 497, 5665}, +{5665, 561, 6145}, +{5713, 257, 5793}, +{5409, 113, 6145}, +{5345, 913, 6401}, +{5825, 753, 5921}, +{6225, 961, 5585}, +{6241, 481, 5361}, +{5569, 593, 6065}, +{6049, 225, 6273}, +{5713, 673, 6321}, +{5825, 721, 5793}, +{5969, 977, 5441}, +{5889, 881, 5841}, +{5857, 849, 6017}, +{5985, 497, 5809}, +{5729, 865, 5873}, +{5841, 1089, 5745}, +{5649, 657, 6241}, +{5617, 401, 6081}, +{5569, 497, 6033}, +{5617, 481, 5905}, +{5537, 513, 6337}, +{5745, 449, 5969}, +{5873, 641, 5713}, +{6001, 785, 5473}, +{6001, 1265, 5601}, +{5969, 1041, 5809}, +{5969, 753, 5601}, +{5921, 1297, 5505}, +{5841, 1441, 5713}, +{5937, 1409, 5905}, +{5873, 1297, 5857}, +{6065, 1361, 5537}, +{6081, 1041, 5473}, +{5777, 1121, 5825}, +{5809, 865, 6161}, +{5681, 865, 5953}, +{5761, 529, 5873}, +{5681, 1041, 6337}, +{5665, 705, 6241}, +{5745, 657, 5969}, +{6001, 929, 5457}, +{6001, 1153, 5457}, +{6033, 1521, 5569}, +{5985, 817, 5713}, +{6017, 1329, 5377}, +{6161, 1809, 5361}, +{6049, 1633, 5569}, +{6001, 1345, 5601}, +{5953, 1313, 5633}, +{6049, 1473, 5569}, +{6001, 1105, 5569}, +{5617, 833, 5793}, +{5889, 961, 5905}, +{5953, 881, 5633}, +{5889, 673, 5617}, +{5793, 753, 5809}, +{5809, 1073, 5969}, +{6177, 1137, 5425}, +{6209, 1009, 5361}, +{6049, 1025, 5473}, +{6081, 1297, 5617}, +{5889, 977, 5809}, +{6033, 1281, 5505}, +{5953, 1505, 5489}, +{6097, 1793, 5793}, +{6001, 1457, 5825}, +{6049, 1521, 5537}, +{5985, 1281, 5473}, +{5745, 1009, 5841}, +{5521, 945, 6417}, +{6049, 1441, 5633}, +{5921, 1185, 5425}, +{5809, 1265, 5633}, +{5633, 1329, 6337}, +{5697, 1265, 5985}, +{6097, 1105, 5537}, +{6081, 1441, 5233}, +{5921, 2161, 5425}, +{6049, 1537, 5857}, +{6033, 1521, 5601}, +{6113, 1537, 5217}, +{6097, 1985, 5233}, +{6049, 1809, 5585}, +{6257, 1425, 5425}, +{6033, 1377, 5377}, +{6225, 1553, 5297}, +{5921, 1057, 5649}, +{5681, 1393, 6097}, +{5825, 913, 5713}, +{5985, 1025, 5489}, +{5761, 625, 5889}, +{5617, 849, 6305}, +{5857, 593, 6161}, +{5937, 977, 5457}, +{5985, 1489, 5393}, +{6065, 1425, 5553}, +{5937, 1217, 5985}, +{5969, 977, 5665}, +{6081, 1665, 5329}, +{6113, 1537, 5489}, +{5841, 1537, 5921}, +{6129, 1537, 5617}, +{5985, 657, 5681}, +{5825, 657, 5745}, +{5665, 1089, 5857}, +{5889, 1137, 6001}, +{5713, 657, 6033}, +{5793, 929, 5809}, +{5681, 769, 5921}, +{5697, 1025, 6273}, +{5809, 1601, 5665}, +{6129, 913, 5457}, +{5921, 657, 5489}, +{5713, 1921, 5585}, +{5825, 1489, 5889}, +{5825, 1249, 5585}, +{5841, 1361, 5521}, +{5921, 1521, 5921}, +{5825, 1905, 5825}, +{5953, 769, 5713}, +{6049, 1217, 5489}, +{5857, 881, 5553}, +{5921, 1393, 5713}, +{5793, 1153, 6049}, +{5905, 881, 5601}, +{5825, 737, 5761}, +{5681, 1105, 6065}, +{5649, 833, 6273}, +{5729, 961, 6033}, +{5953, 753, 5521}, +{5985, 1057, 5553}, +{5729, 2177, 5569}, +{6305, 433, 6561}, +{6273, 1345, 5137}, +{6257, 1361, 5345}, +{5905, 1249, 5505}, +{6209, 1009, 5393}, +{6033, 1361, 5265}, +{6401, 369, 5697}, +{6769, 1217, 4529}, +{6801, 1089, 4561}, +{6433, 865, 4481}, +{6449, 369, 5265}, +{6257, 81, 5457}, +{6321, 497, 5377}, +{6305, 81, 5521}, +{6545, 177, 5153}, +{6577, 97, 5025}, +{6609, 513, 4817}, +{6721, 865, 4929}, +{6609, 705, 5121}, +{6353, 241, 5345}, +{6241, 465, 5345}, +{6369, 1217, 5249}, +{6321, 945, 5265}, +{6593, 497, 5281}, +{6529, 737, 5089}, +{6897, 369, 5201}, +{6417, 1121, 4561}, +{6833, 161, 4833}, +{6337, -79, 5425}, +{6545, 49, 5137}, +{6369, 305, 5137}, +{6369, 1, 5681}, +{5857, 897, 5345}, +{6225, 657, 5809}, +{6385, 1041, 5233}, +{6689, 1137, 5281}, +{6497, 1569, 4881}, +{6337, 2225, 4497}, +{6081, 1377, 5089}, +{6609, 1633, 4721}, +{6465, 2017, 4641}, +{6593, 2065, 5073}, +{6481, 1313, 5217}, +{6465, 1265, 5585}, +{6465, 1505, 5313}, +{6353, 1905, 5489}, +{6385, 1729, 5777}, +{6257, 2145, 5921}, +{5409, 1489, 4737}, +{5121, -463, 6465}, +{5505, 801, 6209}, +{5265, 1137, 6385}, +{5729, 577, 5969}, +{5873, 321, 5777}, +{5761, 1553, 5569}, +{5857, 1697, 5793}, +{5889, 1073, 6385}, +{5841, 1409, 5969}, +{6049, 1249, 5441}, +{6209, 929, 5201}, +{6017, 545, 5729}, +{6001, 1441, 5937}, +{6209, 1073, 5681}, +{6161, 1153, 5585}, +{5889, 881, 5489}, +{5729, 833, 5825}, +{5777, 673, 6193}, +{5585, 817, 5953}, +{5425, 369, 6193}, +{5585, 481, 6193}, +{5793, 737, 5969}, +{6209, 1105, 5345}, +{6209, 1185, 5249}, +{6113, 1745, 5457}, +{5873, 1889, 5889}, +{5825, 1313, 5985}, +{5777, 1329, 5729}, +{5841, 1425, 5617}, +{5777, 2225, 5713}, +{5905, 2385, 5793}, +{5937, 1345, 5777}, +{5729, 1409, 5681}, +{5745, 1233, 5761}, +{5537, 1441, 5921}, +{5473, 1537, 6017}, +{5553, 929, 5921}, +{5585, 849, 6017}, +{5585, 1057, 6017}, +{5473, 673, 6401}, +{5537, 881, 5985}, +{6145, 1121, 5569}, +{5953, 1793, 5521}, +{6001, 1537, 5809}, +{5889, 1457, 5777}, +{6017, 1377, 5617}, +{5905, 1905, 5489}, +{5953, 1793, 5601}, +{6049, 1489, 5569}, +{5969, 1569, 5809}, +{5905, 1137, 5633}, +{5713, 1313, 5809}, +{5569, 1649, 6081}, +{5793, 929, 5985}, +{5681, 769, 5857}, +{5681, 961, 5793}, +{5729, 1345, 6001}, +{5617, 561, 6225}, +{5601, 849, 6049}, +{5921, 1233, 5569}, +{5857, 1649, 5569}, +{6017, 1713, 5601}, +{5889, 769, 5889}, +{5777, 1121, 5729}, +{5937, 1761, 5553}, +{5889, 1473, 5633}, +{5857, 1361, 5985}, +{6033, 1617, 5713}, +{6257, 1601, 5521}, +{6225, 1185, 5249}, +{6161, 1105, 5153}, +{6017, 849, 5297}, +{5633, 1169, 5937}, +{6113, 1393, 5473}, +{6257, 401, 5441}, +{5937, 657, 5697}, +{5985, 993, 5777}, +{5969, 1441, 5601}, +{6241, 1073, 5473}, +{5857, 1729, 5489}, +{6017, 1633, 5649}, +{6065, 1681, 5681}, +{6113, 1457, 5281}, +{6193, 1745, 5153}, +{6209, 1825, 5409}, +{6113, 1729, 5585}, +{5937, 1697, 5665}, +{6033, 1105, 5841}, +{6033, 2001, 5537}, +{6145, 1665, 5249}, +{6209, 865, 5297}, +{6017, 1377, 5601}, +{5793, 769, 5889}, +{5697, 1025, 5889}, +{5601, 897, 6081}, +{5617, 1249, 6049}, +{6097, 833, 5697}, +{6193, 1105, 5409}, +{6001, 1313, 5553}, +{6033, 1617, 5521}, +{5985, 1745, 5617}, +{6001, 1409, 5761}, +{6033, 1537, 5441}, +{6129, 1729, 5313}, +{6017, 1665, 5313}, +{5905, 1617, 5953}, +{5825, 1457, 5937}, +{6097, 1585, 5553}, +{5969, 1153, 5665}, +{5857, 1441, 5633}, +{5889, 1169, 5761}, +{5889, 1217, 5873}, +{5889, 881, 5793}, +{5633, 1089, 5985}, +{5649, 961, 6033}, +{5617, 993, 6049}, +{5681, 849, 6065}, +{5745, 1057, 5937}, +{5921, 1185, 5745}, +{5825, 945, 5729}, +{5841, 1249, 5665}, +{5889, 1441, 5681}, +{5905, 1329, 5809}, +{5857, 1249, 5697}, +{5937, 1489, 5665}, +{5809, 1681, 5937}, +{5889, 1873, 5665}, +{5921, 1505, 5697}, +{6065, 1489, 5361}, +{6049, 1265, 5409}, +{6017, 1489, 5489}, +{5937, 1201, 5617}, +{5745, 1265, 5937}, +{5777, 1281, 5873}, +{5937, 1265, 5649}, +{5745, 945, 5969}, +{5777, 929, 5905}, +{5761, 945, 5905}, +{5777, 961, 5793}, +{5921, 561, 5777}, +{5857, 865, 5761}, +{5969, 1201, 5569}, +{5681, 1633, 5777}, +{5681, 1089, 6129}, +{5537, 1377, 6001}, +{5825, 1617, 5777}, +{5697, 1601, 5841}, +{5745, 1441, 5953}, +{5729, 1313, 5985}, +{5921, 1377, 5681}, +{5841, 1521, 5729}, +{5793, 929, 5969}, +{5585, 1601, 5937}, +{5761, 1281, 5921}, +{5697, 945, 5873}, +{5697, 881, 5921}, +{5713, 1073, 5841}, +{5585, 993, 5841}, +{5489, 961, 5985}, +{5889, 785, 6321}, +{5745, 1057, 6145}, +{6529, 1441, 5249}, +{6321, 561, 4401}, +{6497, 913, 5089}, +{6161, 513, 5553}, +{6449, 353, 5233}, +{6401, 417, 5121}, +{6273, 561, 5217}, +{6577, 273, 5249}, +{6465, -335, 5025}, +{6417, 97, 5041}, +{6497, -319, 5185}, +{6209, -559, 5345}, +{6001, -719, 5697}, +{5937, -1039, 6241}, +{5905, -895, 5745}, +{5985, -687, 5425}, +{5985, -1103, 5601}, +{6193, -911, 5393}, +{6257, -943, 5313}, +{6433, -351, 5233}, +{6129, 65, 4865}, +{6369, 49, 5937}, +{6305, -543, 5537}, +{6577, -383, 5345}, +{6785, 737, 5185}, +{6673, 289, 4593}, +{5969, 1313, 4817}, +{7969, 145, 4897}, +{6497, 1393, 5057}, +{6593, -591, 5169}, +{5921, -159, 5201}, +{6113, -367, 5761}, +{6129, 33, 5649}, +{6577, -447, 5361}, +{6177, 769, 5073}, +{6241, 209, 5761}, +{6209, -79, 6321}, +{6305, 209, 5713}, +{6577, 881, 4945}, +{6497, 1489, 4785}, +{6321, 657, 5313}, +{6241, 625, 5601}, +{6529, 929, 5377}, +{6449, 1489, 4977}, +{6193, 1585, 4961}, +{6273, 625, 5825}, +{6257, 1457, 5345}, +{6529, 785, 5249}, +{6289, 913, 4929}, +{6081, 385, 4897}, +{5809, -223, 6113}, +{5889, -271, 6049}, +{5761, -463, 5905}, +{5905, 33, 5793}, +{5921, 17, 5729}, +{5873, -111, 6049}, +{6081, -175, 5777}, +{6065, 65, 5697}, +{6193, 769, 5169}, +{6305, 865, 5121}, +{6337, 337, 5505}, +{6177, 417, 5697}, +{6241, 881, 5297}, +{6065, 1009, 5297}, +{6017, 545, 5745}, +{6193, 257, 5649}, +{6433, 641, 5361}, +{6401, 705, 5265}, +{6161, -399, 5473}, +{6033, 289, 5745}, +{6113, 257, 5553}, +{6161, -175, 5601}, +{6193, -335, 5569}, +{6113, 81, 5361}, +{6113, 465, 5393}, +{6001, 641, 5313}, +{6161, 2049, 6881}, +{6257, 1105, 5473}, +{6129, 1761, 5313}, +{6353, 2529, 5249}, +{6353, 2737, 5377}, +{6545, 2257, 4897}, +{6497, 2497, 5281}, +{6353, 2977, 4929}, +{6353, 2129, 3681}, +{6449, 2593, 4081}, +{6001, 1505, 5937}, +{6353, 1425, 5169}, +{6049, 1665, 5457}, +{5953, 1409, 5489}, +{6017, 977, 5617}, +{5617, 753, 5793}, +{5761, 897, 5713}, +{5825, 577, 5841}, +{5937, 753, 5649}, +{5793, 353, 5425}, +{6001, 225, 6049}, +{6353, 417, 5169}, +{6353, 577, 5521}, +{5921, 913, 5377}, +{6017, 1153, 5025}, +{6193, 1537, 6129}, +{5937, 1393, 5921}, +{5969, 1265, 5553}, +{6081, 1505, 5505}, +{6097, 1729, 5329}, +{6129, 1921, 5729}, +{5937, 1617, 5521}, +{6113, 1665, 5297}, +{6241, 1505, 5297}, +{6273, 1857, 5249}, +{5921, 1185, 5729}, +{5889, 1073, 5905}, +{6145, 1025, 5569}, +{6049, 961, 5457}, +{5889, 1089, 5665}, +{5745, 1057, 5921}, +{5889, 289, 5969}, +{6049, 929, 5585}, +{6129, 1105, 5425}, +{6049, 977, 5569}, +{5873, 1361, 5697}, +{6161, 1393, 5569}, +{6033, 1457, 5473}, +{6241, 1649, 5233}, +{6209, 2001, 5185}, +{6161, 1681, 5345}, +{6097, 1697, 5473}, +{6161, 1777, 5297}, +{6273, 1681, 5297}, +{6225, 1793, 5313}, +{6017, 1553, 5441}, +{5921, 1201, 5745}, +{5889, 1425, 5697}, +{6033, 1073, 5633}, +{5905, 1089, 5489}, +{5921, 897, 5681}, +{5745, 977, 6049}, +{5937, 1265, 5681}, +{6097, 865, 5473}, +{6081, 1217, 5441}, +{5873, 1281, 5713}, +{5889, 1697, 5729}, +{6129, 1585, 5553}, +{6097, 1489, 5425}, +{6097, 1457, 5409}, +{6049, 1633, 5473}, +{6033, 1697, 5569}, +{6129, 1505, 5441}, +{6129, 1537, 5473}, +{6177, 1761, 5345}, +{6193, 1585, 5361}, +{6145, 1393, 5441}, +{5841, 1473, 5697}, +{6065, 1233, 5585}, +{6129, 1073, 5425}, +{6001, 1073, 5553}, +{5969, 1185, 5649}, +{6049, 1089, 5697}, +{6129, 817, 5569}, +{6033, 1201, 5409}, +{6049, 993, 5553}, +{5969, 1361, 5553}, +{6017, 1313, 5633}, +{6225, 1409, 5313}, +{6209, 1217, 5297}, +{6193, 1457, 5329}, +{6193, 1633, 5345}, +{6033, 1505, 5665}, +{6129, 1537, 5441}, +{6145, 1553, 5409}, +{6161, 1473, 5457}, +{6161, 1281, 5553}, +{5969, 1361, 5617}, +{5985, 1281, 5617}, +{6033, 1249, 5553}, +{6001, 1041, 5585}, +{5969, 1137, 5681}, +{5889, 1089, 5825}, +{5921, 1185, 5761}, +{6113, 993, 5649}, +{6129, 1153, 5441}, +{6049, 1121, 5601}, +{6017, 1137, 5601}, +{6081, 1265, 5457}, +{6081, 1265, 5521}, +{6081, 1233, 5601}, +{5937, 1425, 5633}, +{6049, 1361, 5601}, +{6017, 1345, 5665}, +{5969, 1265, 5665}, +{6113, 1697, 5473}, +{6177, 1617, 5425}, +{6129, 1025, 5521}, +{5921, 1121, 5713}, +{5841, 1089, 5825}, +{6033, 1185, 5649}, +{5985, 1105, 5601}, +{5905, 1089, 5729}, +{5857, 737, 5873}, +{5857, 897, 5921}, +{5809, 849, 5809}, +{6129, 1073, 5505}, +{6001, 673, 5569}, +{6113, 1073, 5569}, +{6097, 1281, 5569}, +{6097, 1441, 5457}, +{6113, 1233, 5329}, +{5409, 1953, 5489}, +{6065, 1281, 5969}, +{5905, 1969, 5569}, +{6449, 1313, 4977}, +{6529, 1329, 4401}, +{6657, 945, 5041}, +{6273, 1121, 5473}, +{6369, 417, 5169}, +{6321, 385, 5345}, +{6289, 705, 5185}, +{6433, 417, 5329}, +{6161, 225, 5505}, +{6257, 417, 5121}, +{6657, 177, 4881}, +{6337, 241, 5393}, +{6369, 657, 5457}, +{6609, 849, 5089}, +{6577, 433, 5169}, +{6465, 913, 5169}, +{6641, 865, 4849}, +{6545, 1201, 4897}, +{6401, 945, 5265}, +{6449, 801, 5233}, +{6689, 929, 5025}, +{6625, 1041, 4945}, +{6577, 897, 4929}, +{6385, 417, 5201}, +{6289, 289, 5601}, +{6145, 241, 5521}, +{6193, 609, 5361}, +{6209, 353, 5537}, +{6385, 401, 5585}, +{6673, 609, 5265}, +{6273, 465, 5217}, +{6545, 513, 5105}, +{6369, 1185, 4977}, +{6465, 913, 5121}, +{6433, 753, 5249}, +{6305, 1137, 5265}, +{6321, 1313, 5249}, +{6289, 1313, 5441}, +{6321, 1057, 5393}, +{6257, 993, 5345}, +{6321, 1217, 5169}, +{6401, 817, 5201}, +{6465, 577, 5313}, +{6257, 481, 5537}, +{6401, 769, 5441}, +{6305, 513, 5249}, +{6001, 929, 5441}, +{5969, 849, 5825}, +{5953, 785, 6177}, +{6097, 609, 5777}, +{6097, 1281, 5425}, +{6081, 1489, 5617}, +{6145, 1345, 5553}, +{6289, 1185, 5073}, +{6225, 1313, 5169}, +{6433, 1409, 4961}, +{6113, 1521, 5537}, +{6225, 1265, 5681}, +{6161, 705, 5665}, +{6353, 1041, 5585}, +{5953, 1377, 5521}, +{6097, 1265, 5473}, +{6081, 1265, 5489}, +{5681, 881, 6193}, +{5857, 1521, 5953}, +{6209, 1457, 4977}, +{5969, 1537, 5617}, +{5889, 1313, 5793}, +{6049, 1553, 5937}, +{6065, 1425, 5745}, +{6001, 1681, 5521}, +{5537, 1937, 5777}, +{5889, 1937, 6273}, +{6289, 1329, 5489}, +{6257, 1201, 5057}, +{6241, 1425, 4721}, +{6209, 1937, 4929}, +{6049, 913, 5601}, +{5969, 1201, 5905}, +{6097, 1313, 5681}, +{6097, 1201, 5681}, +{5937, 1169, 5825}, +{5857, 1281, 5857}, +{6097, 1073, 5601}, +{6001, 1009, 5521}, +{5985, 1137, 5713}, +{6033, 1137, 5601}, +{5857, 1217, 5665}, +{5905, 1009, 5889}, +{5969, 1265, 5745}, +{5985, 1313, 5553}, +{6209, 1649, 5313}, +{6049, 1377, 5633}, +{6305, 1505, 5313}, +{6385, 1457, 5105}, +{6289, 1601, 5089}, +{6353, 1729, 5265}, +{6225, 1713, 5457}, +{6289, 1505, 5425}, +{6289, 1617, 5313}, +{6273, 1665, 5233}, +{6081, 1409, 5441}, +{6145, 1553, 5361}, +{5985, 977, 5665}, +{5953, 1169, 5809}, +{5825, 865, 5889}, +{5905, 1073, 5921}, +{5809, 945, 5921}, +{5777, 673, 5857}, +{5873, 897, 5745}, +{5921, 545, 5745}, +{5953, 865, 5761}, +{5985, 1041, 5713}, +{5921, 1025, 5873}, +{5969, 1025, 5745}, +{5969, 849, 5633}, +{5953, 1105, 5569}, +{5969, 1457, 5665}, +{5985, 1393, 5633}, +{6033, 1137, 5713}, +{6097, 961, 5697}, +{6209, 1025, 5329}, +{6113, 641, 5553}, +{6049, 1089, 5649}, +{6001, 753, 5729}, +{5953, 817, 5729}, +{5969, 721, 5777}, +{5825, 1073, 5809}, +{5841, 897, 5905}, +{5873, 1009, 5809}, +{6001, 801, 5713}, +{5937, 865, 5713}, +{5969, 1185, 5633}, +{5921, 1281, 5665}, +{5969, 1521, 5601}, +{6033, 1457, 5681}, +{6001, 1473, 5537}, +{6033, 1569, 5441}, +{5969, 1617, 5537}, +{5969, 1809, 5681}, +{6017, 1585, 5665}, +{6177, 1729, 5409}, +{6145, 1649, 5281}, +{6017, 1841, 5473}, +{5857, 1585, 5569}, +{5761, 1297, 5809}, +{5905, 1585, 5761}, +{5969, 1201, 5729}, +{5825, 1409, 5601}, +{5681, 1313, 5953}, +{5729, 1473, 6097}, +{5857, 1025, 5969}, +{5953, 1185, 5585}, +{5969, 1377, 5537}, +{5985, 1633, 5633}, +{5921, 1457, 5745}, +{5889, 1601, 5729}, +{5873, 1409, 5617}, +{5905, 1777, 5649}, +{5777, 1969, 5681}, +{5905, 1889, 5649}, +{6017, 1873, 5553}, +{5985, 1761, 5617}, +{6033, 1553, 5537}, +{5937, 1521, 5569}, +{5841, 1313, 5681}, +{5841, 1585, 5729}, +{5921, 1265, 5761}, +{5937, 1569, 5329}, +{5953, 1025, 5809}, +{5873, 1553, 5905}, +{5921, 945, 5953}, +{5841, 1249, 5713}, +{5729, 1889, 5521}, +{5857, 2337, 5569}, +{6193, 2129, 5393}, +{5825, 2497, 5473}, +{6113, 1985, 5361}, +{5921, 2097, 5473}, +{5953, 2209, 5537}, +{6193, 1953, 5361}, +{6065, 2113, 5377}, +{6001, 1953, 5441}, +{5905, 1857, 5553}, +{5793, 1873, 5665}, +{5761, 1345, 5729}, +{5777, 865, 5473}, +{5729, 1073, 5649}, +{5553, 1569, 6065}, +{5665, 1169, 6177}, +{5873, 1473, 5425}, +{5985, 1729, 5169}, +{6033, 1809, 5281}, +{5617, 1745, 6097}, +{5793, 1841, 5441}, +{5777, 2081, 5185}, +{5793, 1905, 5809}, +{5457, 1841, 5905}, +{5617, 1569, 6129}, +{5809, 1633, 5921}, +{5889, 1889, 5729}, +{5873, 1553, 5537}, +{5793, 1217, 5457}, +{5713, 1265, 6241}, +{5777, 1201, 5857}, +{5745, 1153, 5761}, +{5841, 1041, 5873}, +{6049, 1025, 5665}, +{6257, 945, 5665}, +{6065, 849, 5281}, +{6321, 1089, 5185}, +{6369, 1505, 5169}, +{6401, 977, 5425}, +{6097, 913, 5681}, +{6289, 1105, 5345}, +{6449, 1441, 5201}, +{6305, 1137, 5121}, +{6465, 1329, 5073}, +{6369, 897, 5393}, +{6497, 1073, 5249}, +{6433, 1121, 4929}, +{6241, 1121, 5281}, +{6193, 641, 5569}, +{6177, 433, 5553}, +{6113, 513, 5393}, +{6161, 705, 5457}, +{6273, 289, 5649}, +{6193, 337, 5665}, +{6401, 577, 5329}, +{6561, 385, 5217}, +{6305, 1121, 4929}, +{6065, 2193, 5425}, +{6769, -47, 5345}, +{6449, 1889, 5041}, +{6417, 1409, 5345}, +{6177, 1521, 5281}, +{6001, 1873, 5393}, +{6417, 1249, 5057}, +{6225, 945, 4929}, +{6241, 1041, 4945}, +{5969, 1601, 5329}, +{5665, 1889, 6081}, +{5649, 2417, 6609}, +{5745, 1361, 5585}, +{5985, 1441, 5473}, +{5953, 2289, 5537}, +{5985, 1393, 5377}, +{5921, 2081, 5441}, +{5905, 2241, 5601}, +{5985, 1921, 5489}, +{6097, 1969, 5249}, +{6081, 2161, 5169}, +{6097, 2065, 5329}, +{6097, 2241, 5585}, +{6097, 2241, 5393}, +{6065, 1809, 5409}, +{5969, 1633, 5377}, +{5937, 1745, 5537}, +{5953, 1985, 5601}, +{5921, 1793, 5553}, +{5889, 1729, 5569}, +{5793, 1809, 5937}, +{5841, 1793, 5873}, +{6129, 1665, 5505}, +{6241, 1361, 5361}, +{6049, 2081, 5105}, +{5937, 2273, 5249}, +{6033, 2161, 5633}, +{5921, 2017, 5905}, +{5889, 2033, 5713}, +{6001, 2097, 5217}, +{5825, 2337, 5553}, +{5953, 2129, 5633}, +{6017, 2065, 5409}, +{6017, 1777, 5457}, +{6065, 2273, 5297}, +{5889, 1873, 5537}, +{5809, 1825, 5713}, +{5745, 1425, 5841}, +{5777, 1777, 5745}, +{5889, 1265, 5585}, +{5809, 1681, 5777}, +{5873, 1553, 5777}, +{6033, 1505, 5665}, +{6065, 1393, 5489}, +{5953, 2017, 5329}, +{6129, 1553, 5553}, +{6065, 1185, 5521}, +{6049, 1297, 5489}, +{6017, 1585, 5377}, +{6033, 1889, 5329}, +{5953, 1921, 5537}, +{6113, 1681, 5473}, +{6177, 1825, 5297}, +{6113, 1697, 5329}, +{5985, 1505, 5425}, +{5937, 1457, 5649}, +{5857, 1425, 5921}, +{5825, 1185, 5681}, +{5809, 1377, 5745}, +{5713, 1393, 5873}, +{5745, 1217, 6049}, +{5825, 1281, 5777}, +{5937, 1169, 5649}, +{5905, 1185, 5585}, +{5873, 1345, 5665}, +{5857, 1377, 5713}, +{5873, 1633, 5873}, +{5889, 1473, 5745}, +{5841, 1249, 5601}, +{5873, 1729, 5617}, +{5793, 1761, 5633}, +{5777, 1441, 5969}, +{5873, 1681, 5713}, +{5985, 1665, 5505}, +{5969, 1601, 5617}, +{5873, 1537, 5617}, +{5857, 1297, 5841}, +{5761, 1313, 5969}, +{6017, 1377, 5409}, +{5953, 1265, 5473}, +{5889, 1329, 5537}, +{5873, 1265, 5809}, +{5953, 1169, 5697}, +{6049, 1249, 5489}, +{6113, 1361, 5441}, +{6065, 1601, 5441}, +{5873, 1585, 5553}, +{5809, 1617, 5761}, +{5841, 1857, 5665}, +{5873, 1793, 5489}, +{5969, 1809, 5505}, +{5857, 1873, 5633}, +{5969, 2225, 5409}, +{6017, 1617, 5537}, +{6049, 1697, 5521}, +{5953, 1505, 5553}, +{5905, 1761, 5489}, +{6001, 1601, 5825}, +{5905, 1393, 5553}, +{5921, 1441, 5505}, +{5777, 1265, 5633}, +{5681, 1681, 5889}, +{5985, 1521, 5617}, +{6065, 1169, 5441}, +{5969, 1425, 5473}, +{5841, 1521, 5649}, +{5777, 1857, 5809}, +{5793, 1745, 5953}, +{5825, 1745, 5553}, +{5841, 1841, 5553}, +{5889, 2017, 5569}, +{5793, 1873, 5681}, +{5937, 1889, 5729}, +{5921, 1985, 5505}, +{6017, 1921, 5441}, +{5905, 1649, 5681}, +{5905, 1585, 5697}, +{5937, 1761, 5569}, +{6097, 1409, 5265}, +{6017, 1377, 5441}, +{5905, 1377, 5649}, +{5793, 1665, 5921}, +{6001, 1521, 5649}, +{6065, 1473, 5361}, +{6033, 1313, 5521}, +{5873, 1777, 5697}, +{5841, 1649, 5857}, +{5761, 1569, 6001}, +{5841, 1793, 5409}, +{5777, 1729, 5537}, +{5809, 1713, 5713}, +{5713, 1905, 5777}, +{5761, 1681, 5969}, +{5889, 1937, 5569}, +{5857, 1713, 5553}, +{5777, 1521, 5761}, +{5745, 1457, 5857}, +{5745, 1777, 5745}, +{5825, 1393, 5777}, +{5825, 1377, 5777}, +{5825, 1345, 5761}, +{5745, 1681, 5841}, +{5697, 1361, 5841}, +{5761, 1377, 5905}, +{5937, 1409, 5633}, +{5873, 1617, 5601}, +{5745, 1857, 5521}, +{5793, 1793, 5601}, +{5793, 1969, 5889}, +{5857, 2049, 5489}, +{5889, 2161, 5377}, +{5873, 2385, 5409}, +{5873, 2193, 5585}, +{5793, 2001, 5681}, +{5985, 2401, 5297}, +{6001, 2289, 5377}, +{5873, 2289, 5409}, +{5857, 1729, 5617}, +{5825, 2017, 5601}, +{5889, 1761, 5569}, +{5841, 1713, 5521}, +{5793, 1601, 5601}, +{5825, 1873, 5793}, +{5841, 1521, 5857}, +{5921, 1441, 5633}, +{5905, 1793, 5601}, +{5809, 1745, 5713}, +{5809, 1793, 5713}, +{5905, 1761, 5745}, +{5921, 1745, 5473}, +{5713, 1745, 5425}, +{5793, 2129, 5585}, +{6689, 897, 6161}, +{6065, 2913, 5681}, +{6097, 1521, 5537}, +{6097, 1761, 5457}, +{6273, 1153, 5441}, +{6273, 1521, 5361}, +{6257, 1889, 5137}, +{6033, 1329, 5009}, +{6033, 209, 5729}, +{6113, 177, 5713}, +{5953, 609, 5761}, +{6129, 481, 5713}, +{5937, 481, 5665}, +{6129, 449, 5409}, +{6177, 369, 5457}, +{6177, 609, 5489}, +{6225, 305, 5569}, +{6097, 401, 5537}, +{6145, 305, 5649}, +{6081, 625, 5457}, +{6113, 705, 5457}, +{6081, 561, 5473}, +{6273, 609, 5633}, +{6433, 481, 5281}, +{6385, 529, 5217}, +{5873, 593, 5569}, +{6657, -1983, 5969}, +{5873, 1185, 5345}, +{6289, -607, 5681}, +{5489, 1441, 5313}, +{6033, -63, 5921}, +{6081, 1009, 5745}, +{5889, 1041, 6129}, +{6241, 817, 5345}, +{6145, 689, 5313}, +{6209, 1121, 5377}, +{6321, 1121, 5665}, +{6321, 1505, 5297}, +{6321, 1537, 5185}, +{6161, 2001, 4721}, +{6513, 2097, 5041}, +{6513, 1777, 5313}, +{6289, 1793, 5361}, +{5921, 2241, 4977}, +{6369, 2865, 4865}, +{5953, 3041, 5185}, +{6273, 3457, 4753}, +{6097, 3841, 4641}, +{6241, 3521, 4577}, +{6145, 2705, 4753}, +{6113, 2305, 4481}, +{5729, 2353, 4609}, +{5777, 3169, 7057}, +{6065, 2049, 4977}, +{6049, 1953, 5073}, +{5857, 2673, 5393}, +{5873, 2625, 5633}, +{5953, 2289, 5633}, +{5761, 2657, 5377}, +{5841, 2577, 5217}, +{5841, 2529, 5377}, +{5857, 2433, 5585}, +{5857, 2849, 5585}, +{5937, 2385, 5329}, +{5905, 2449, 5201}, +{6001, 2337, 5329}, +{5841, 2273, 5473}, +{5793, 2273, 5505}, +{5761, 2209, 5649}, +{5809, 2209, 5633}, +{5745, 2033, 5649}, +{5745, 2177, 5745}, +{5633, 2177, 5793}, +{5921, 2049, 5569}, +{5937, 1681, 5489}, +{5873, 1905, 5553}, +{5761, 2401, 5553}, +{5697, 2545, 5633}, +{5697, 2481, 5665}, +{5809, 2305, 5697}, +{5873, 2417, 5313}, +{5809, 2593, 5377}, +{5745, 2449, 5553}, +{5793, 2465, 5713}, +{5905, 2689, 5313}, +{5969, 2065, 5457}, +{5841, 2081, 5489}, +{5761, 1921, 5569}, +{5713, 2289, 5569}, +{5665, 2401, 5825}, +{5745, 1857, 5585}, +{5857, 1713, 5521}, +{5761, 1969, 5601}, +{5857, 2065, 5761}, +{5761, 1969, 5713}, +{6033, 1361, 5521}, +{5873, 2209, 5505}, +{5761, 2289, 5345}, +{5713, 2497, 5249}, +{5905, 2801, 5649}, +{6001, 2529, 5057}, +{6001, 2625, 5041}, +{6033, 2817, 5185}, +{5873, 2913, 5297}, +{5857, 2561, 5505}, +{5825, 2337, 5585}, +{5857, 2065, 5361}, +{5905, 2193, 5377}, +{5873, 1985, 5665}, +{5793, 1969, 5585}, +{5905, 1889, 5617}, +{5729, 1905, 5745}, +{5857, 1633, 5697}, +{5777, 1889, 5681}, +{5969, 2129, 5441}, +{6113, 1617, 5617}, +{6065, 1649, 5569}, +{5809, 2161, 5377}, +{5889, 2369, 5441}, +{5905, 1825, 5745}, +{6001, 2529, 5377}, +{6033, 2321, 5089}, +{6065, 2129, 5313}, +{5985, 2209, 5441}, +{6001, 2273, 5553}, +{6033, 1889, 5601}, +{5937, 1617, 5361}, +{5905, 1841, 5409}, +{5953, 1777, 5601}, +{6001, 1793, 5761}, +{5873, 1457, 5633}, +{5857, 1857, 5457}, +{5905, 1393, 5761}, +{5889, 1345, 5697}, +{5985, 1313, 5489}, +{6017, 1521, 5409}, +{5889, 2577, 5217}, +{5937, 2673, 5457}, +{5921, 2913, 5393}, +{5889, 2737, 5265}, +{6001, 2433, 5025}, +{6017, 2625, 5121}, +{5953, 2721, 5265}, +{6033, 2881, 5297}, +{6049, 2593, 5217}, +{6065, 2529, 5217}, +{5985, 2513, 5121}, +{5825, 2593, 5489}, +{5889, 2289, 5633}, +{5873, 2081, 5505}, +{5761, 1985, 5553}, +{5841, 2129, 5553}, +{5857, 2209, 5729}, +{5969, 1953, 5281}, +{5953, 2129, 5265}, +{5985, 2177, 5441}, +{5937, 2497, 5473}, +{6017, 2337, 5265}, +{6001, 2289, 5137}, +{5889, 2625, 5281}, +{5889, 2561, 5441}, +{5921, 2369, 5585}, +{6177, 2465, 5201}, +{5953, 2497, 5249}, +{5953, 2273, 5345}, +{6001, 2193, 5393}, +{5793, 2113, 5521}, +{5873, 1921, 5697}, +{5777, 1729, 5697}, +{5793, 2113, 5745}, +{5921, 1777, 5841}, +{5873, 2033, 5665}, +{5985, 1793, 5521}, +{5953, 1745, 5553}, +{5889, 2273, 5377}, +{5889, 2465, 5457}, +{6049, 2225, 5521}, +{5889, 2033, 5473}, +{5873, 2273, 5393}, +{5857, 2577, 5585}, +{5953, 2433, 5697}, +{6017, 2417, 5425}, +{6033, 2289, 5169}, +{5921, 2065, 5329}, +{5889, 1953, 5729}, +{5857, 2113, 5617}, +{6033, 1793, 5345}, +{5921, 2097, 5201}, +{5873, 1681, 5729}, +{5825, 2113, 5697}, +{5953, 1921, 5489}, +{5985, 1761, 5425}, +{6081, 1665, 5393}, +{6001, 2289, 5569}, +{6049, 2401, 5537}, +{6017, 2273, 5457}, +{5921, 1809, 5297}, +{5937, 2225, 5329}, +{5985, 2433, 5585}, +{5953, 2049, 5425}, +{6033, 2193, 5297}, +{5969, 2113, 5393}, +{5857, 1809, 5505}, +{5921, 1969, 5537}, +{5937, 2353, 5265}, +{5985, 2033, 5393}, +{5841, 2257, 5409}, +{5777, 2049, 5649}, +{5809, 1873, 5857}, +{5921, 1793, 5393}, +{5713, 2785, 5745}, +{6017, 1777, 5649}, +{5857, 2785, 5313}, +{6065, 2049, 5937}, +{6033, 2113, 5281}, +{6001, 1985, 5153}, +{5905, 2417, 5505}, +{5713, 2305, 5713}, +{5905, 2641, 5921}, +{6497, 1777, 4417}, +{6497, 673, 4625}, +{6721, 1057, 4785}, +}; +static const uint32_t duration_HRD[] = +{ +41, +39, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +40, +40, +80, +40, +40, +}; +static const uint32_t frame_HRD[] = +{ +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +151, +152, +153, +154, +155, +156, +157, +158, +159, +160, +161, +162, +163, +164, +165, +166, +167, +168, +169, +170, +171, +172, +173, +174, +175, +176, +177, +178, +179, +180, +181, +182, +183, +184, +185, +186, +187, +188, +189, +190, +191, +192, +193, +194, +195, +196, +197, +198, +199, +200, +201, +202, +203, +204, +205, +206, +207, +208, +209, +210, +211, +212, +213, +214, +215, +216, +217, +218, +219, +220, +221, +222, +223, +224, +225, +226, +227, +228, +229, +230, +231, +232, +233, +234, +235, +236, +237, +238, +239, +240, +241, +242, +243, +244, +245, +246, +247, +248, +249, +250, +251, +252, +253, +254, +255, +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +60, +61, +62, +63, +64, +65, +66, +67, +68, +69, +70, +71, +72, +73, +74, +75, +76, +77, +78, +79, +80, +81, +82, +83, +84, +85, +86, +87, +88, +89, +90, +91, +92, +93, +94, +95, +96, +97, +98, +99, +100, +101, +102, +103, +104, +105, +106, +107, +108, +109, +110, +111, +112, +113, +114, +115, +116, +117, +118, +119, +120, +121, +122, +123, +124, +125, +126, +127, +128, +129, +130, +131, +132, +133, +134, +135, +136, +137, +138, +139, +140, +141, +142, +143, +144, +145, +146, +147, +148, +149, +150, +}; + +static const uint8_t touch_HRD[] = +{ +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +1, +}; + +static const int32_t Expo_time[][NF_PPG_PER_CHANNEL*NF_PPG_CHANNEL] = +{ +{0, 256, 40}, +{0, 240, 40}, +{0, 224, 40}, +{0, 208, 40}, +{0, 208, 40}, +{0, 192, 40}, +{0, 184, 40}, +{0, 176, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +{0, 168, 40}, +}; + + + + +#endif diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pxialg.h b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pxialg.h new file mode 100644 index 000000000..ac2b98c25 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pxialg.h @@ -0,0 +1,698 @@ +#ifndef PXIALG_H__ +#define PXIALG_H__ +#include "stdint.h" +#include "pxivar.h" + +#define FW 1 + +#define FW_DEBUG 0 +#if ( FW == 0 ) +#undef FW_DEBUG +#define FW_DEBUG 0 +#endif + +//#define STRIIV + +#if FW == 1 +#define PXIALG_API +#else +#ifdef PXIALG_EXPORTS +#define PXIALG_API __declspec(dllexport) +#else +#define PXIALG_API __declspec(dllimport) +#endif +#endif +/* +typedef struct { + uint8_t frame_count; + uint32_t time; + uint8_t touch_flag; + uint32_t nf_ppg_channel; + uint32_t nf_ppg_per_channel; + int32_t *ppg_data; + uint32_t nf_mems; + int16_t *mems_data; +} pah8series_data_t; + +typedef enum { + FLAG_DATA_READY = 0, + FLAG_DATA_NOT_READY, + FLAG_DATA_LOSS, + FLAG_NO_TOUCH, + FLAG_DATA_ERROR, + FLAG_POOR_SIGNAL, + FLAG_FIFO_ERROR, + FLAG_TIMMING_ERROR, + FLAG_MEMS_ERROR, + FLAG_HR_UPDATE = 16, + FLAG_SG_UPDATE, +} PXI_STATUS_FLAG; + +typedef enum { + _quick_report_rms_gs_th = 0, + _hr_speed_mode, + _support_cal_motion_idx_enhancement_enh, + _rsv1, + _set_switch_mems_fft_max_energy_th, + _set_switch_mems_large_energy_num_th, + _set_switch_mn_fft_energy_lo_thr, + _set_switch_mn_fft_energy_hi_thr, + + _ppg_large_energy_num_th, + _max_hr_idx_th, + _min_hr_idx_th, + _ppg_fft_total_peak_num_th, + _mems_large_energy_num_th, + _mems_fft_max_energy_th, + _support_signal_grade_motion_detection_enh, + _support_signal_grade_check_signal_lelvel_enh, + _support_signal_grade_large_energy_num_enh, + _rsv2, + _rsv3, + _set_reg_shake_count_th0, +} PXI_PARAM_SET; + +typedef enum { + _rms_gs = 0, + _signal_level, + _cal_motion_idx, + _is_prediction_hr, + _get_switch_mems_fft_max_energy_th, + _get_switch_mems_large_energy_num_th, + _get_switch_mn_fft_energy_lo_thr, + _get_switch_mn_fft_energy_hi_thr, + + _hr_sample_count, + _ppg_large_energy_num, + _signal_grade_motion_frm, + _ppg_fft_max_energy_idx, + _ppg_fft_total_peak_num, + _mems_large_energy_num, + _mems_fft_max_energy, + _grade, + _signal_grade_hr_to_low_frm, + _flag_signal_grade_ready_go, + _motion_flag, + _get_reg_shake_count_th0, +} PXI_PARAM_GET; + +typedef enum { + MemsLargeEnergyNumTh = 0, + MemsFftMaxEnergyTh, + QuickReportRmsGsTh, + SupportSigGradeMotionDetection, + PpgLargeEnergyNumTh, + SupportSigGradeLargeEnergyNumEnh, + SupportSigGradeLargeEnergyNumTh, + SigGradeThr, + SupportSigGradeCheckSigLevel, + FlagCheckNotStableFirstHR, + MaxHrDefinition, + MinHrDefinition, +} PXI_PARAM2; +*/ + +#if FW == 1 +/** + * @brief When HRD and MEMS data are ready, call this function to do the algorithm processing + * + * @param[in] HRD_Data Pointer to the buffer where HRD data (13 Bytes) is stored. + * @param[in] MEMS_Data Pointer to the buffer where MEMS data (3*sizeof(float) Bytes) is stored. + * + * @return Return one of the PXI_STATUS_FLAG types. + */ +PXIALG_API int32_t PxiAlg_ProcessByTime(unsigned char *HRD_Data, float *MEMS_Data, float time); +PXIALG_API int32_t PxiAlg_Process(unsigned char *HRD_Data, float *MEMS_Data); + +/** + * @brief Call this function to get Heart Rate + * + * @param[out] hr Pointer to a float variable where heart rate is stored + * + * @return None + */ +PXIALG_API void PxiAlg_HrGet(float *hr); + + +PXIALG_API void PxiAlg_FlagInitialSignalNoiseGet(uint8_t *flag); +/** + * @brief Call this function to feed Algorithm raw data(19 Bytes), and get Signal Grade and Heart Rate + * + * @param[in] pixart_19_byte_data Pointer to a arrag where raw data is stored + * Format: 13 bytes PPG + G-sensor X_L[13] + X_H[14] + Y_L[15] + Y_H[16] + Z_L[17] + Z_H[18] + * @param[out] grade Pointer to a float variable where signal grade is stored. + * @param[out] heart_rate Pointer to a float variable where heart rate is stored + * + * @return status bit field, combinatoin of the list below + * 1 << FLAG_DATA_READY, + * 1 << FLAG_DATA_NOT_READY, + * 1 << FLAG_DATA_LOSS, + * 1 << FLAG_NO_TOUCH, + * 1 << FLAG_DATA_ERROR, + * 1 << FLAG_POOR_SIGNAL, + * 1 << FLAG_FIFO_ERROR, + * 1 << FLAG_TIMMING_ERROR, + * 1 << FLAG_MEMS_ERROR, + * 1 << FLAG_HR_UPDATE, + * 1 << FLAG_SG_UPDATE, + */ +PXIALG_API uint32_t PxiAlg_HRM(uint8_t *pixart_19_byte_data, float *grade, float * heart_rate); +#else +/** + * @brief When HRD, MEMS, and ECG data are ready, call this function to do the algorithm processing + * + * @param[in] HRD_Data Pointer to the buffer where HRD data (13 Bytes) is stored. + * @param[in] MEMS_Data Pointer to the buffer where MEMS data (12 Bytes) is stored. + * @param[in] ECG_Data Pointer to the buffer where ECG data (4 Bytes) is stored. + * + * @return Return one of the PXI_STATUS_FLAG types. + */ +PXIALG_API int32_t PxiAlg_Process(unsigned char *HRD_Data, float *MEMS_Data, float ECG_Data); + +/** + * @brief When HRD, MEMS, ECG data, and time interval are ready, call this function to do the algorithm processing + * + * @param[in] HRD_Data Pointer to the buffer where HRD data (13 Bytes) is stored. + * @param[in] MEMS_Data Pointer to the buffer where MEMS data (12 Bytes) is stored. + * @param[in] ECG_Data Pointer to the buffer where ECG data (4 Bytes) is stored. + * @param[in] time Time interval. + * + * @return Return one of the PXI_STATUS_FLAG types. + */ +PXIALG_API int32_t PxiAlg_ProcessByTime(unsigned char *HRD_Data, float *MEMS_Data, float ECG_Data, float time); + +/** + * @brief Call this function to get Heart Rate + * + * @param[out] hr Pointer to a float variable where heart rate is stored + * + * @return None + */ +PXIALG_API void PxiAlg_HrGet(float *hr); + +PXIALG_API void PxiAlg_FlagInitialSignalNoiseGet(uint8_t *flag); + +/** + * @brief Call this function to get output + * + * @param[out] output Pointer to a SHr_motion_plot variable where output information is stored + * + * @return None + */ +PXIALG_API int32_t PxiAlg_OutputGet(void *output); + +/** + * @brief Call this function to get a specific parameter + * + * @param[out] param Pointer to the start address of the variable of parameter list + * @param[in] offset Offset of the parameter variable + * @param[in] size Type size of the parameter + * + * @return None + */ +PXIALG_API void PxiAlg_ParamGet(uint8_t *param, int32_t offset, int32_t size); + +/** + * @brief Call this function to set a specific parameter + * + * @param[in] offset Offset of the parameter variable + * @param[in] size Type size of the parameter + * @param[in] param Pointer to the start address of the variable of parameter list + * + * @return None + */ +PXIALG_API void PxiAlg_ParamSet(int32_t offset, int32_t size, uint8_t *param); +#endif + +/** +* @brief When HRD, MEMS, and Expo data are ready, call this function to do the algorithm processing +* +* @param[in] HRD_Data Pointer to the buffer where HRD data (13 Bytes) is stored. +* @param[in] MEMS_Data Pointer to the buffer where MEMS data (12 Bytes) is stored. +* @param[in] expo Exposure Time. +* +* @return Return one of the PXI_STATUS_FLAG types. +*/ +PXIALG_API int32_t PxiAlg_Process_Expo(unsigned char *HRD_Data, float *MEMS_Data, int expo); + +/** + * @brief Call this function to determine the version of the algorithm + * + * + * @return Version of the algorithm + */ +PXIALG_API int32_t PxiAlg_Version(void); + +/** + * @brief Call this funtion to get Ready_Flag + * + * @return Return Ready_Flag + */ +PXIALG_API unsigned char PxiAlg_GetReadyFlag(void); + +/** + * @brief Call this funtion to get Motion_Flag + * + * @return Return Motion_Flag + */ +PXIALG_API unsigned char PxiAlg_GetMotionFlag(void); + + +/** +* @brief Call this function to get force flag +* +* @return force_flag +*/ +PXIALG_API unsigned char PxiAlg_GetForceFlag(void); + +/** + * @brief Call this funtion to get Timeout_Flag + * + * @return Return Timeout_Flag + */ +PXIALG_API unsigned char PxiAlg_GetTimeoutFlag(void); + +/** + * @brief Call this function to set PPG buffer pointer and size + * + * @param[in] ppg_buffer Pointer to a float buffer where the PPG data would be stored + * @param[in] size PPG buffer size + * + * @return None + */ +PXIALG_API void PxiAlg_SetPPGBuffer(float *ppg_buffer, int32_t size); + +/** + * @brief Call this function to set algorithm parameters + * + * @param[in] hr_param Pointer to a "HR_Param" sturcture where the parameters are stored. + * + * @return None + */ +PXIALG_API void PxiAlg_SetParam(void *hr_param); + +/** + * @brief Call this function to set data + * + * @param[in] data Pointer to an algorithm-dependent data + * + * @return None + */ +PXIALG_API void PxiAlg_SetData(void *data); + + +/** + * @brief Call this function to notify algorithm the Output Data Rate of PPG Sensor + * + * @param[in] odr The Output Data Rate of PPG Sensor. Only 10,20,40,160 and 200 ODR are supported. + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetODR(int32_t odr); + +/** + * @brief Call this function to notify algorithm the Timeout Length of PPG Sensor + * + * @param[in] t The Timeout Length of PPG Sensor. Unit: second. + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetTimeoutLength(int32_t t); + +/** + * @brief Call this function to notify algorithm the Quality Threshold of PPG Sensor + * + * @param[in] th The Quality Threshold of PPG Sensor. Range: 0.0 ~ 1.0 + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetQualityThreshold(float th); + +/** +* @brief Call this function to notify algorithm the HR smooth weight of PPG Sensor +* +* @param[in] w The weight. Range: 0.0 ~ 1.0 +* +* @return 1 for success. 0 for failure. +*/ +PXIALG_API uint8_t PxiAlg_SetHRSmoothWeight(float w); + +/** +* @brief Call this function to notify algorithm the length of process window of PPG Sensor +* +* @param[in] t The normal time window. +* @param[in] t_fast The fast time window. +* +* @return 1 for success. 0 for failure. +*/ +PXIALG_API uint8_t PxiAlg_SetProcWindow(float t, float t_fast); + +/** + * @brief Call this function to notify algorithm the number of PPG sample to skip + * + * @param[in] num The number + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetSkipSampleNum(int num); + + +/** + * @brief Call this function to notify algorithm the MEMS Scale of Motion Sensor + * + * @param[in] scale The MEMS Scale of Motion Sensor. 0: +-2G, 1: +-4G, 2: +-8G, and 3: +-16G + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetMemsScale(int scale); +PXIALG_API uint8_t PxiAlg_SetMemsScaleBase(int scale, int th); + + + + + +/** + * @brief Call this function to notify algorithm the time length to force hr to update + * + * @param[in] t The time length + * @param[in] ub The upper bound + * @param[in] lb The lower bound + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetForceOutput(int t, int ub, int lb); + + + +/** + * @brief Call this function to notify algorithm force hr to output + * + * @param[in] t The time length + * @param[in] ub The upper bound + * @param[in] lb The lower bound + * @param[in] link_flag To link with normal output + * @param[in] w Smoothing weight between force and normal + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetForceOutputLink(int t, int ub, int lb, int link_flag, float w); + + +/** + * @brief Call this function to notify algorithm normal hr to output + * + * @param[in] ub The upper bound + * @param[in] lb The lower bound + * @param[in] static_flag First normal output at static + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetNormalOutput(int ub, int lb, int static_flag); + + +/** + * @brief Call this function to notify algorithm the time to force hr to output + * + * @param[in] t The duration + * @param[in] bpm The amplitude + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetForceRipple(int t, int bpm); + + +/** + * @brief Call this function to notify algorithm the time to force hr to output + * + * @param[in] ch The ppg channel selection + * @param[in] flag The resample flag + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetPackage(int ch, int flag); + + +/** + * @brief Call this function to notify algorithm the time length to force hr to update + * + * @param[in] t The time length + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetForceUpdateTimeLength(int t); +/** + * @brief Call this function to notify algorithm the time to force hr to output + * + * @param[in] t The time length + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetForceOutputTime(int t); +/** + * @brief Call this function to notify algorithm the bound of hr + * + * @param[in] ub The upper bound + * @param[in] lb The lower bound + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetFullHRBound(int ub, int lb); +/** + * @brief Call this function to notify algorithm the bound of first hr + * + * @param[in] ub The upper bound + * @param[in] lb The lower bound + * @param[in] t The time length to keep this bound + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetFirstHRBound(int ub, int lb, int t); + + + +/** + * @brief Call this function to notify algorithm the MEMS Energy Threshold of Motion Sensor + * + * @param[in] lower The MEMS energy lower threshold + * @param[in] upper The MEMS energy upper threshold + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetMemsEnergyThrd(int lower, int upper); + +/** + * @brief Call this function to set PPG Signal Grade Threshold + * + * @param[in] threshold The PPG Signal Grade Threshold. Its value ranges from 0 to 100. + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetSigGradeThrd(float thrd); + +/** + * @brief Call this function to set parameters of PPG Signal Grade + * + * @param[in] frm_thrd The PPG Signal Grade Frame Threshold. + * @param[in] rep_count The PPG Signal Grade Repetitive Counter. + * + * @return 1 for success. 0 for failure. + */ +PXIALG_API uint8_t PxiAlg_SetSigGradeParam(int16_t frm_thrd, int16_t rep_count); + +/** + * @brief Call this function to enable or disable fast output mode + * + * @param[in] en The flag of fast output mode. + */ + +PXIALG_API void PxiAlg_EnableFastOutput(uint8_t en); + +/** + * @brief Call this function to enable or disable motion mode + * + * @param[in] en The flag of motion mode. + */ +PXIALG_API void PxiAlg_EnableMotionMode(uint8_t en); + +/** + * @brief Call this function to enable or disable auto mode + * + * @param[in] en The flag of auto mode. + */ +PXIALG_API void PxiAlg_EnableAutoMode(uint8_t en); + +/** + * @brief Call this function to enable or disable tracking mode after fast output + * + * @param[in] en The flag of tracking mode. + */ +PXIALG_API void PxiAlg_EnableTrackingAfterFastOut(uint8_t en); + +/** + * @brief Call this function to enable or disable mems0 signal grade mode + * + * @param[in] en 1 : enable. 0 : disable. + */ +PXIALG_API void PxiAlg_EnableMEMS0SigGrade(uint8_t en); + +//PXIALG_API void PxiAlg_EnableMEMS0SigGrade(uint8_t en, uint8_t idx); +//// idx = 0: PxiAlg_EnableFastOutput(uint8_t en); +//// idx = 1: PxiAlg_EnableMotionMode(uint8_t en); +//// idx = 2: PxiAlg_EnableAutoMode(uint8_t en); +//// idx = 3: PxiAlg_EnableTrackingAfterFastOut(uint8_t en); + +/** + * @brief Call this function to get PPG Signal Grade + * + * @param[out] grade Pointer to a float variable where signal grade is stored. + * + * @return Return 1 when Signal Grade is ready. Otherwise, return 0. + */ +PXIALG_API uint8_t PxiAlg_GetSigGrade(float *grade); + +/** + * @brief Call this function to get the alarm flag of fast output + * + * @param[out] flag The alarm flag of fast output + * + * @return Return 1 when the flag is set. Otherwise, return 0. + */ +PXIALG_API uint8_t PxiAlg_GetFastOutAlarmFlag(void); + +/** + * @brief Call this function to get the alarm flag of signal bad + * + * @param[out] flag The alarm flag of fast output + * + * @return Return 1 when the flag is set. Otherwise, return 0. + */ +PXIALG_API uint8_t PxiAlg_GetSignalBadAlarm(void); + +/** + * @brief Call this function to open algorithm + */ +#if FW == 1 +PXIALG_API uint8_t PxiAlg_Open_Mem(void *mem); +#else +PXIALG_API void PxiAlg_Open(void); +#endif + +/** + * @brief Call this function to close algorithm + */ +PXIALG_API void PxiAlg_Close(void); + +/** + * @brief Call this function to initialize 200Hz low-pass filter + */ +PXIALG_API void PxiAlg_LPF200Hz_Init(void); + +/** + * @brief Call this function to process 200Hz low-pass filter + */ +PXIALG_API float PxiAlg_LPF200Hz_Process(float data); + +/** + * @brief Call this function to get PPG Signal Level + * + * @param[out] grade Pointer to a float variable where signal level is stored. + * + * @return Return 1 when Signal Level is ready. Otherwise, return 0. + */ +#ifndef REDUCE_MORE_CODE_SIZE +PXIALG_API uint8_t PxiAlg_Get_Signal_Level(float *level); +#endif +/** + * @brief Call this function to enable/disable Check_Not_Stable_First_HR + * + * @param[in] 1 : enable, 0: disable + */ +PXIALG_API void PxiAlg_Check_Not_Stable_First_HR(uint8_t check); + +/** + * @brief Call this function to set Signal_Grade_Large_Energy_Num_Th_Lo + * + * @param[in] Threshold. + * + */ +PXIALG_API void PxiAlg_Set_Signal_Grade_Large_Energy_Num_Th_Lo(uint8_t th) ; + +/** + * @brief Call this function to Set SportMode + * + * @@param[in] en 0: disable 1: enable + * + * @return Return 1 when Set Signal Grade Large Energy Num Threshold is ready. Otherwise, return 0. + */ +PXIALG_API void PxiAlg_SetSportMode(uint8_t en); + +/** + * @brief Call this function to Set Signal Grade Large Energy Num Threshold + * + * @@param[in] th => threshold + * + * @return Return 1 when Set Signal Grade Large Energy Num Threshold is ready. Otherwise, return 0. + */ +PXIALG_API uint8_t PxiAlg_Set_Signal_Grade_Large_Energy_Num_Th(uint8_t th); + + +/** + * @brief Call this function to Set Algorithm Parameters + * + * @@param[in] index - index of parameters, param - parameter value + * + * @return Return 1 when Set algorithm parameter suceeessfully. Otherwise, return 0. + */ +PXIALG_API uint8_t PxiAlg_Set_Parameter(uint32_t index, float param); + +/** + * @brief Call this function to Get Algorithm Parameters + * + * @@param[in] index - index of parameters, *param - pointer to parameter value + * + * @return Return 1 when Set algorithm parameter suceeessfully. Otherwise, return 0. + */ +PXIALG_API uint8_t PxiAlg_Get_Parameter(uint32_t index, float *param); + +/** +* @brief Call this function to Set Algorithm Parameters (2nd Version) +* +* @@param[in] index - index of parameters, param - parameter value +* +* @return Return 1 when Set algorithm parameter suceeessfully. Otherwise, return 0. +*/ +PXIALG_API uint8_t PxiAlg_Set_Parameter2(uint32_t index, float param); + +/** +* @brief Call this function to Get Algorithm Parameters (2nd Version) +* +* @@param[in] index - index of parameters, *param - pointer to parameter value +* +* @return Return 1 when Set algorithm parameter suceeessfully. Otherwise, return 0. +*/ +PXIALG_API uint8_t PxiAlg_Get_Parameter2(uint32_t index, float *param); + + + +PXIALG_API uint8_t PxiAlg_Set_Cal_Flag_HR_Trust_Energy_Ratio(float fValue); +PXIALG_API uint8_t PxiAlg_Set_Cal_Flag_HR_Trust_Large_Energy_Num_Th(uint16_t fValue); +PXIALG_API uint8_t PxiAlg_Get_Cal_Flag_HR_Trust_Energy_Ratio(float *fValue); +PXIALG_API uint8_t PxiAlg_Get_Cal_Flag_HR_Trust_Large_Energy_Num_Th(uint16_t *fValue); + +PXIALG_API uint8_t PxiAlg_Get_Flag_HR_Trust(uint8_t *flag); + +#if (ANDROID_JNI==1) +PXIALG_API uint8_t PxiAlg_Get_ParameterName(uint32_t index, const char **param); +#endif + +PXIALG_API uint8_t PxiAlg_DecodeProcess(uint32_t data, int touch_flag, float time_in); +PXIALG_API uint8_t PxiAlg_Entrance_0(pah8series_data_t *pah8series_data); +PXIALG_API uint8_t PxiAlg_Entrance(pah8series_data_t *pah8series_data); +PXIALG_API uint8_t PxiAlg_EntranceD(pah8series_data_t *pah8series_data); +PXIALG_API uint32_t PxiAlg_Query_Mem_Size(); +PXIALG_API uint8_t PxiAlg_GetHrUpdateFlag(); + +PXIALG_API void PxiAlg_SetData_Seg(pah8series_data_t *pah8series_data); +PXIALG_API uint8_t PxiAlg_Process_Seg(uint8_t *is_finished); +PXIALG_API uint8_t PxiAlg_ProcessD_Seg(uint8_t *is_finished); +#endif /* PXIALG_H__ */ diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pxivar.h b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pxivar.h new file mode 100644 index 000000000..0f1dd761b --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/pxivar.h @@ -0,0 +1,96 @@ +#ifndef PXIVAR_H__ +#define PXIVAR_H__ + +#include "stdint.h" + +#ifndef pah8series_data_t +typedef struct { + uint8_t frame_count; + uint32_t time; + uint8_t touch_flag; + uint32_t nf_ppg_channel; + uint32_t nf_ppg_per_channel; + int32_t *ppg_data; + uint32_t nf_mems; + int16_t *mems_data; +} pah8series_data_t; +#endif + +typedef enum { + FLAG_DATA_READY = 0, + FLAG_DATA_NOT_READY, + FLAG_DATA_LOSS, + FLAG_NO_TOUCH, + FLAG_DATA_ERROR, + FLAG_POOR_SIGNAL, + FLAG_FIFO_ERROR, + FLAG_TIMMING_ERROR, + FLAG_MEMS_ERROR, + FLAG_HR_UPDATE = 16, + FLAG_SG_UPDATE, +} PXI_STATUS_FLAG; + +typedef enum { + _quick_report_rms_gs_th = 0, + _hr_speed_mode, + _support_cal_motion_idx_enhancement_enh, + _rsv1, + _set_switch_mems_fft_max_energy_th, + _set_switch_mems_large_energy_num_th, + _set_switch_mn_fft_energy_lo_thr, + _set_switch_mn_fft_energy_hi_thr, + + _ppg_large_energy_num_th, + _max_hr_idx_th, + _min_hr_idx_th, + _ppg_fft_total_peak_num_th, + _mems_large_energy_num_th, + _mems_fft_max_energy_th, + _support_signal_grade_motion_detection_enh, + _support_signal_grade_check_signal_lelvel_enh, + _support_signal_grade_large_energy_num_enh, + _rsv2, + _rsv3, + _set_reg_shake_count_th0, +} PXI_PARAM_SET; + +typedef enum { + _rms_gs = 0, + _signal_level, + _cal_motion_idx, + _is_prediction_hr, + _get_switch_mems_fft_max_energy_th, + _get_switch_mems_large_energy_num_th, + _get_switch_mn_fft_energy_lo_thr, + _get_switch_mn_fft_energy_hi_thr, + + _hr_sample_count, + _ppg_large_energy_num, + _signal_grade_motion_frm, + _ppg_fft_max_energy_idx, + _ppg_fft_total_peak_num, + _mems_large_energy_num, + _mems_fft_max_energy, + _grade, + _signal_grade_hr_to_low_frm, + _flag_signal_grade_ready_go, + _motion_flag, + _get_reg_shake_count_th0, +} PXI_PARAM_GET; + +typedef enum { + MemsLargeEnergyNumTh = 0, + MemsFftMaxEnergyTh, + QuickReportRmsGsTh, + SupportSigGradeMotionDetection, + PpgLargeEnergyNumTh, + SupportSigGradeLargeEnergyNumEnh, + SupportSigGradeLargeEnergyNumTh, + SigGradeThr, + SupportSigGradeCheckSigLevel, + FlagCheckNotStableFirstHR, + MaxHrDefinition, + MinHrDefinition, +} PXI_PARAM2; + +#endif /* PXIVAR_H__ */ diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/test_library_HRD.c b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/test_library_HRD.c new file mode 100644 index 000000000..708570159 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_hr/V303009/test_library_HRD.c @@ -0,0 +1,112 @@ + +#include "pah8009_testpattern_HRD.h" +// platform +#include +#include "pah800x_main.h" +#include "pah800x_bsp.h" +#include +//#include "nrf_delay.h" +#define array_szie(arr) (sizeof(arr) / sizeof(arr[0])) + + + + +void test_library_HRD(void) +{ + int i = 0; + void *hr_pBuffer = NULL; + static ppg_mems_data_t ppg_mems_data_alg; + + sRaw_Data_13Bytes hr_data; + + + // static Hr-V301009 + + PxiAlg_Close(); + int32_t version = PxiAlg_Version(); + DEBUG_PRINT("HR_Version = %d \r\n", version); + + + uint32_t Query_Mem_Size = PxiAlg_Query_Mem_Size(); + DEBUG_PRINT("HR_Mem_Size = %d \r\n", Query_Mem_Size); + + hr_pBuffer = malloc(Query_Mem_Size); + + + if(!PxiAlg_Open_Mem(hr_pBuffer)) + DEBUG_PRINT("PxiAlg_Open_Mem fail \n"); + + + PxiAlg_SetQualityThreshold(0.35f); + PxiAlg_SetHRSmoothWeight(0.9f); + PxiAlg_SetProcWindow(5.0f, 5.0f); + PxiAlg_SetTimeoutLength(30.0f); + PxiAlg_SetMemsScale(1); //MEMS 2/4/8/16G : 0/1/2/3 + PxiAlg_SetSkipSampleNum(10); + PxiAlg_SetMemsScaleBase(1, 0); //MEMS 2/4/8/16G : 0/1/2/3 + PxiAlg_SetForceOutputLink(0, 150, 40, 1, 0.9f); + PxiAlg_SetNormalOutput(200, 40, 0); + PxiAlg_SetForceRipple(3, 1); + //PxiAlg_SetForceOutput(30, 120, 45); + //PxiAlg_SetForceOutputTime(10); + PxiAlg_SetPackage(0, 1); + + + +//-----------------------------------------------// + + LOG_PRINT("ARRAY_SIZE = %d\n",array_szie(PAH8009_rawdata_HRD)); +//****************************************************************** + + float hr = 0.0f; + float hr_grader = 0.0f; + +//******************************************************************* + + //nrf_delay_ms(50); + + + for( i = 0 ; i 0 ? 0x80 : 0x00; + //LOG_PRINT("touch = %d ", hr_data.touch); + hr_data.rsv2 = 0; + + int exposure_time = Expo_time[i][1]; + //LOG_PRINT("exposure_time = %d \n",exposure_time); + + ppg_mems_data_alg.MEMS_Data[0]=PAH8009_mems_HRD[i][0]; + ppg_mems_data_alg.MEMS_Data[1]=PAH8009_mems_HRD[i][1]; + ppg_mems_data_alg.MEMS_Data[2]=PAH8009_mems_HRD[i][2]; + + int32_t ret = PxiAlg_Process_Expo((uint8_t*)&hr_data, ppg_mems_data_alg.MEMS_Data, exposure_time); + + //LOG_PRINT("ret_HR %d \n",ret); + + if(PxiAlg_GetHrUpdateFlag()) + { + PxiAlg_HrGet(&hr); + PxiAlg_GetSigGrade(&hr_grader); + } + + LOG_PRINT("ret %d , hr %f , hr_grade %f \n", ret, hr, hr_grader); + + } + + PxiAlg_Close(); + + return; +} diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/libv703_0_1.a b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/libv703_0_1.a new file mode 100644 index 0000000000000000000000000000000000000000..0cb0d3ba7446401a2e4e2e27b850c539d314d63a GIT binary patch literal 902382 zcmeF43w%|@weV-3opVme0|SW)0(v04l!r-pil_vVkZ2+?0YpU)d7O}FUd@A7X$3=g zsCa1sMXNSaK#J5_!N=|OdeMSftCosduGd;?p|$;bd%fPO)Ozc;X4dSzX0NmJz-#;U zyT6_v;mm)nHEY()o;@@BarPcQv!bP{_R^#aBi>K;w8_&i%AP(wdr~BlrBvqsk;s(E zQ>S8%B}qbvV?vyD$KU^YX#@MFcg6qKzfkkD!t=NDX%TY%o=6fQpTBVWqoUWp*B6TL zY5etD{G90bty@ID7iNoopSHyPC5^pNBwg|SzWr@`SS0-g|C0CIA^2bF-DTy?^Kzo) zv9`RDrs|kbG_N_Vjs^^?BiOBnQzrXQa-z>y|LO`AE)(vRI)S8sf|_LRM_I?nb+P1 zO%v}6<KZPv|E9%>6`$vl!>)N7V7F9idPE%uRTT4Zq?nTh@%)r>zOrrvW9jM9; zEsDJ;TGr4SHS>AI)L@QzNq$MW$9_Jwb#%UAKc8API)5@1JAVqL%jHf~(9}{Di(-q& z2%C&HhkA1h)IDNHG)jG4tR-6B(A3mc3qi(cpusMY z7psD>T4Rn5T1!UdX;a5@w>nu}tyJ+8)U~v>Ifbge(XAGHl&LmbQpas}ukyO3jTQA# zW3YAGqqL=|D%RSHZLfib(&&Qb>Wa3Qrw_~F75eY|+7@?%mETm?EC=Y~80{raIkbtkW=p1p8-c7_32TGaKeI;9>Ui@pkD zgw%S^Na*JBNL3rD@U+++9<>iSIyy-*mSdwMg`v?&!pNwT@uQkEFm`L8_wt_g6oR>% z8l$4l-p!z>wcU-0TJ1k1`YUNf)OyvJvyB1Kl>3f{rU4rcO;y~W)~!;FX{Od}D`QA= zO#DYQtu2EIt)&|Jdrd`qeVZDlqooxs6%DX@YiSjFm@6(RzcRL5;9`$tOi*5oV^nSd z*bCXO>niGD1sp{Ij#`-3KD4HwZbhuRv*c=6*%gh|rH~05%W1(VDxS~<$@+rzOa ziB;ECG-8xdIkyOpM7Iq_FlTmMQ;A&ImBm_PZL`~JYGN&V7IIZEHmDb8WFBf7i}77cCEC|+09)X)HjBhD6b@<0F;)nzbM>KG(uPn})YX2^6N zHG#rh8Z9jnEiHA?*4mb6C2SjWqq&Njnl?Ax5UXg6*3>sukf^n-nn@tO=8BdWWvW=g zEE?*#mu~x$6JCpK-6*V~+pA!GQ`k}(tGJ2UuRE)}!N zs#uE60a|FD7GACxB`E?C3n1^6}xwNg;kYCjf<4W5~Sc}G5YvFjoP!*Qp ztZ{V=1|!q6jQZ-j#%eek*MUO;a#4$?0eobzhr!7WQpn|QxvJZh?G1)p9RT2x$zK|+ zuWP)?P~pJnpQEg<+379VBCNq6=)x9t`a(IB0|7LGZbL~;a`clyOK8^1e1{vLzH!1T zbrQ!hf&LhEw(y1gw5<0eZ5(A!$FsDN$dV*A*Qu#)V%5Z^${R0C(!(>GJPKDa{cP`i zsE2sRNDhK(-BMcQi1U|#bsUX!oL5||F%s$SEOd5O)>L`^ zIVXGiq>FN7Gb~BEIls8TvMe|mjUP+=mmm_N`664`pqi}IW5xHxBjV5wkvJ_RL`OkL zbmnh*aceLnj^?h--&`~G&dkuBnG-v^c1WAlSb8vcN!N~9-w`3zpp0Ly5rR_o?jjMqJaf(E)`8$CEA!Ui8=3pz z@8RGZ>7hpwGP{nvmw8KYMrK#=IK(q6bLSEGUUOOIt|P~vsHwSZ>-w6S%ssCkpZ5GM zm!*fFKbE=oZ01f#KiCZE<(Fjc`tV(--@AV-$lUw-yHA9EFgtUf{Ql?J znfvAU)3Y-le*ImD|U2*a(H*1M<3q3 z&chwM4|^E=^)vHBc^=;DX^Y>@H*NQN+TuMA?e(-pc=zFCGiS%{1Rgcxb)G07KjVZX z(;w8D@jAwbJq+c0;(`2(*D*fqiEqu_XT#vP6h^?VyJyKBo*>7s1QE>Nd?dXyK@{e0 zj_unXthwM$*!SO1<5Obj4^G6ef2>Imk-OzsxUcgo3sdvAJcA=6jh(il=1)b{?McGk zojM>rT-vYd@(0D#?U{SOlXiYr<{t30H#P0phoPh8?T-x_)Ab!OuJfsc8@6Xgj{GWf z?CU2WSAUp88tpwL{j2OyZO4(4s;c{fdEwouRxm&F*6&nKgBrqoBc5L8w10SaiRDO1 zw%JGavX3k^5TCciN4D8V_Og#G)%Nk{BirmFd)Y^pn&9KlN4D8V_Og#GHR$8dN4D8V z_Og#GHN^edyGugl?ZKn*^3C1IU-p&5HV?=9C<*)d4)5OVWBYP9wyBBSFZ3ZF+2%Nz zz5C@v|MFA&`S|paZH|+H&wkzbOyWN6&XOd5+s$#d;oUF$$WoKJPpG?(Y_pH-k>YPP53-uAuV6_4$zvXcTGqw=pv@4Nz}G}fSxNz%vY{FAq3hpe@` zGAEAwqgAptFMY~6B6Iw%Q|XTl7MU09I@K?>HFzW^bL_!W>A~$enIl2ddD~AjN6YUk zewsOA*QuafIe(ZL*>&nzf_T4jQ))d%*EyqO_mQ8gk#yl>A{flv|DDSFc0PR@w9FYd zZtobC_s7jAJAU|bEG73!cQxIyyX1`DZofVEf?G+pZ@z#x%bd9DlMTC5VP%)_$C~Zs zZAnMB2J`+DEGQ4Ii>xhhMp?PiOTFr})|HG#abnX`$bKk!z7~J@b^{ZgP`#%X5oXkHEd^}Kf z?qh)(s^R`3F{!gyw*1fRQF*6opd}Jc{c8JwSK6+!*9XPh8*bYhvckJN=cPR`VDH-- zHs6%GSISW$`J%m>Z%Q5|ZC+|FzjIfY_1xfs%)5?U8W>O>6z?aVym5fqvZL}(b|wr+ z{pE|hezm#F%73iOiP_G_nJ)VzMP-jFhNGiQ@z3Hwu-$X)vb8hWT!BO1gY7@5CT`^| zw>cb-oPgt!6CI9T0gn|=qL8A zgH^(n{O6Xgtqa#%2OrtGFk~I<8h*=`N9;Yp53alA z@GLIhmo|F+b%D^V(E~#RVbA^Gx^?k3_MXmO^B%p*FQ@7KQCU&~mQ;Gxb?f8H*>aU% zgb?{ae|cv&@*~~IgXzA0*1tZWydBm}q2N2Hmu-gaq*`wM$)5Flj!g0Qd!)yF9otV% z>Q|Gqz5K)A(PKeb_Q6@{Zv?GJy3*h1v>tinfwi|k(lIKSjdCeLEz0w|k#}ZW`F=UN z)GGQ3eS{gz4?dgT85G5^ZcYz|U~hVK`=S>{ zy{(V$ojv*XvEOr=_Ipp$e&1=@?>|lZhfmYKYxkR{*`B9ozw0#p?>SBTy{Bov?=oS#|I@SI74M&pPT3j23--L_9GlYq=ev)bUJQFrBZl!51I4-dSv*s@ zxn^r;==h`C;cVrIJ#SBR*AZ*;`xJNA?ss@w_gKcrJtt1PjGggi^w^fWPSbw>Y1%)0 zn)Y40-{o!8WBfZ$(|*@!+V6?C?{S-r-Sh5gZ?k>zW%O9*{qgoa#x#1*JEtAf-uUg- zV;M=Gql{g<-{#x8$1+BLj(u)#d>K8q?Y`5r-+!9+U%9hrLT#7$e1!*H(e3bDERKybV0 z*quKqeSO}0IoqeMcS^l&^f{JQY+X^_o^-UlZP%a!<0Dr3=EF0p?nnv1aond5rFI5? zyY9tJ(#z=WDZ_&)odpX!8`oQN-`rpo%A-cd)7Mh}dvIsMFYoR5X)yVh1FraQD}O|F z+Yi?)l)(wT5CvEyb{P&r1 zMY}ch(Pz%t$Vp=liE%eS7D~4-6kF|i;-Q=WHI#k_r0cI^ z+}n{66q#vvi;j#@B6EQJ&KH>j?-u8S<_wX!<(nX}!Qy@>1-`f3FM{C%oxc%xhraip zRs9k(1_Tdu4zxP%Jn~uQxv&4ZHQ|_dr zx2}7VM-^CW3#_^FNaPr_pFE5E&~j+AjSqe%&zf)8ogn0Qcu#`Zy7BqXw%+pV&yIz} z`^P>8`@25s+VrFH4R1t_Eqh%^3WopvPu7pC20sz#NKX{wI^GD__a};up9Tb+w@447 zhT#t-!~&UH+C=8p4qI1s9sBs#i4QG58M3!N_*wa>UnO>I3yWhPhX(A`_=Za%z zCmwpbtNfIGw7j|hQShGjgO3we9{c!th&+5qdgu(j-Sx|D&wbE!&;Of!Bv|O|CB5$> z>g+*x*K#M)Dyqkkp(}p$>~RK|*v$+8aoEp?M6e+BM=4te6eM349)905>FYyc{%ort zbtzoKo$>uUCxwp)I~*1VHasVSp&j4)W#Qw0whD6eHRs9!D$+gqVsp)b;2XkzFgRmt zFp`%0YgqHWJt_RS=oqzO!PX6D!Wp@b=ijzFc(Lk*qh9a&-oJN@3NO5E_nEem+_k4` zYcMVCfge2qBV71F=tmEp?Ar8vO4YIO<6Zathdp-g!j7@wgAp%)|$;HEcm*k9~f@ zZI1^s9twwokKYyEyTuZFnh0f1JbOX<#(^R;623b5 zp?3qf9SmfI!S+~tqT2U{b*;_cx_RT^zXUlz1R? z{T<2od=!zM;Ak4I)WF5c-0aO=JL=@mJfd}VEza$FE$UY(DAso`zzx;#qm*d$0xrlI%E1PMlEV{YZ(|kGy4r zIZ`68CnfT_QXOPwmxYwo)th_fx(+^90@7-lWx@Q+|O^KTK>Pm)Ni2Q%E z!0yeJwykjYQWWm$uZY&e4MN_S;6`nIBbok%iihAHeeW+e;Lck4vyLLw>6lKa7Lqq* zMJrqIM;s0EM;zLtbI&&1s|`P3fqS#z=PK|k71e$<>c=U1dq6A7AE(4Cj0X2)P;$8E zTGlo0{^K~Iy6;#@&G6}dV{h}&?dq*~|8X<@d=0j+5EH*Nb>Yv$`6&TdB*_n4>Q?vu zINy%^Gx#V2{huYSb+8AOC9ZL-ddOgl0pgoJb{_fvxD+D*OI+s^*Mr-?f~tow7Iz@lk)YPu`J)6T|Z>?XNmV>b6s#%FL_-x7Yw|8WLSGg-o2`*FwJ*?HvM zgV8^@=N=Y^W+#XAh23ok(2a9+A#s0#la}A0o8T~{CmLy2&O@@rO3UpmT-n1i3jBAw zHZ{wRcjC7WpgHA47$svIbbA`lko&{%L0q z=|8|)a5jt@lZD;CD1Aoq#mRv|aC+q|QIu}?mncNSNYGuHoD9j}86X!Tlx`&lQ5lB& zD|N={V324aoO12w`T%f^~!RgR5;3;PCC(fP-?JzJjYtUV@2V+&o3@%E) zY_Jf6f+BD>ieylOCySw}gy&55XoqaN#S+=+1K^ivLnlH7A%SMjgii>!Od8yS#Y)^KR*bS65@hk@I}&bRKo~l9uGg8QWchQOql3`)J^n>Uq*kS zk6ehXWVJDb$mZ%~Y^xmEL1iD1MNQISC>=KSWQwdP9Ys?n!Y*%aVAbq0hN;?_Y7#Nz zBIx64-$+nDCrokn6VG=*(xvbh*pwpAI*M&p_PJRjzG)XpfRD98IZ3pXr98tDxHYUS zGZTVx*=Dy&Gx!8HgpN)M+z6L0glK{y1N9 zSvws;MSaUI1Xbv|y$BCTv(Ej7+4`3ziGE*Jtqh|`$V!scZkrG~TeZbnxTqEyjBO!n z92%aHp~_P*Vi1Cz2Aa&F28FI%U!&49WSXH)a8nm>f#%Zm_HwO21T;44cE_-eHQH`f}lvEG0!%?K*c9c>2O zy}~ftx!QnTYYf=E&d9T8qoH~5b_BH<_iiyX`?eW*9@=5R{(BAhPL}}>??O=3{_b7_ z9@%fefkzBDc+h~yo;2X`rwn-FkOBXA*nsc9V8B1UWWZBL4fyBR4EUGh1{`|JfM?z@ z;Mo%f{NOzUj{MGm=iWEq`9B!&!YKsRyg&TZ(7Y&ys_vqi>ZJq(W%hESp?M|6fFGwB za5Mu!b&59znK0CV;}H`^nlKh&;{fQ_?~XU%mnVj)*p%kPz2^~}oIhMaoy_ywluQLG zg8!3dLWT*04EWtp6Cx&zL{M$;=dqbE1;UUo$12M@AL)Hrs%?!&QpF}%%@ahw%`osO z^V_XZMuuIaMnl=McB!EBRSA?XOQdvpib_j=_WU$TFUX+u!awzK`!=?F;@I%gWNJ~2@RdZ*NEdJRFf?`;`pP!(<;WWeU32HX)b;2%aBuw|?P zUmI`0*Ru@RI@y42(+$`@(||i?8E{vg0Xqr}xVsoZRr{V&1HN&UVRqkq1MXjBz&95g z@W2uis!gahq27R<%_g*&u)>7Z27GIc3F}PQXu|CV?Al_$?rjDdB&`Sn<=O}{ed=I~dpf=-ok0V?KgM|IaTL{-n z_}+Vl=F#^}_!L17XZC@_G}V#1_;DVB3g;(2K;P=0Y6`jpuD}a#?bs?odNG|G|YZ^y8$P+ zAgIdydYhs7cn3nW+}fw^H8g)bjG#8~CodRgpS_f(CL$G%u>OFwT6##ZP8qtOl{Ubg zvh0wRfuuYpS%VB+vNhD8RBM<){jGD2eCJpZ4~_KDSc8UG<2{sR&`@i#ho&RR$=#k{ z%|ueIm1X^5Ak{Y8I_05H4a%`ZI$7pe2?kBF5wA5N+=xVKMgX*kWq-}Cbud?b5 z-8w5FLv245XQ!2D&_*l8piNd<1|Ho96V&l}LPCnnl=>6Yv(z$3wqn9CT#Bjmxt6t6$;|o?jmT8UBtJFCXF^=1fA z?UM{saOax7B~rSaYyn|E1ZnxP=c=tzZ0D-hJON^R4sI2d&cg+)>RI`P%0{INE;q{Q z2M>(b{=yeqs*UrK!l{;$Er63t;roS9; zTeA$BVdW+XwWS7yFIQVZ_NDL@xTRE8is?`$T!Q5cS2yWVun16-Lvn#EPgGS7Fnr z^lEgjD*hEb%2V>2=_oI}29NTTd~HP7??WZzCyYB$TljoczS3V{ls^v3SH8y^LORL}XBp*Z(@|zPCqi|dG?LPj$5MLAcuG&rqV%-MDy`z2KAqAR&7|~Ra({Ml46oyT1x55utO>Tv#_(MbnarZnZ1P4bE+wwS4-*qdP)~G<3_FzA5uaU zz%zo<&l-*V18ihvbJ%F)BgRI4&e+J$V< zjjYnI8jXC+Xyn(7Mt*%3`G3P`v5{5!->{KY`e#NXzrBR~ zzhgA=FKV$d6T`ou2K=qjn7>cJ!9gU1KT#I{Do5Er!38JP;S<6iC~1ZqZT}1Nsq`PP zauF&2a0LwwAAJhbmJCnr^Jkc8Em4D8br=^1s^VuG@eDFH?qFl%4#AD9Dn8WMxWjPc zD*3s%apgf^ID#8jrHA82ROu18u~a&9ma3adkHp4T=~0V>{Vr5YegfC4c#j6Axa}91 zO7RA!QM`fa6mQ@niZ?I=N?+ba=_^){eer6Nm#m@m zmFp-yZzI{4-cItXwy3mR5C+P&k-U5drRU#kq`QptE+f6yNbgr^RrdvtkbL1mN?-jX zr58O#_SYOD`L%~he%%WsU;L8MondN|1*uLA>2$bUqtihtSM%OLxlUdLi?A%vs@_za zULS~(_a%bT6$zBCOr&&Gib`*n*Mq9lR9bD(*b++DRFnPES|iE~ks_BkDzb>k_>FXu zIQ~o(jQZbF{|D6nw)#Io{l5l9Yw_!r0Iom7fed-Y&I)W*Mne5>iL-(-qM)4WVf4U{ zwMc#k4#>vP`;tT%O`OqF|1b@%6d(Py)QP~;GE1DzGhRo}1cwR%I~0BbKakoX-vpWb z40%*1g!&F8TEo60Q$cz4>|A96|LF+ls_k{2BMrY47;v_nq#11F%kdt`YN&Lh~oNy8!JBg$S)?&yoCz0hO z<~WIkPNL39tacLr;3RfBiN~D83r^zSoW$>)gf(2K&yWl!F~&*Ea1td>Vu_PzbrS2H z#NAF}zmxbEC-JJ2IO!x#=|m)X1eT6l+J4#^b}wv;VX{Appu9AodVu{erW{4zi5EQ_ zFZyo0=#hBQ_u@s5#)}Tbiw?$%9*Y+}9xr+#Ui4(V=pW-n-;WplQ@rS@c+o${iw?z$ zo{1OzK#Sy9uQ$ixc&q2MNbUT%gsn=m zM6Kv(7i+C_;l!nN0lXf|Tzh>CXn#@|*v zdIc;WoKN5>%N}FJ)`Dn^b^T_k8GDb`2ZjU^&i|H#3m$Vsj|GB5p4IU81T@Y6l1BKz z*`_}qi(O-gn`k>SIfQ0U9X4V2|2^ZJE1>KhXKMF65a`^Rn>*EK>5-3B1C(s2qnY#YqAWB zGwo4W@*m1ICN|{yt`ZUoZB1nEjq!?7z$GzuSxblg$3f zUhJP?_RsWU|01)0u^0Pe%>Gy}_HQx!w|cQZ$?Q+|V*h()|NCC-KW6qH_hK&+yxmwN z^xQxDG5dbK*bij(1ADO_!t96iVn34EkL<;M0<%Ys+ij;Xvnjo}y_DHs+Kc^MW{(^f z#yn<*-2LdWh}kddC5#GYkKDcg8=3u$z4&is_N~3xuV(hEd$I3i_MN@h-@)wf=*9jn zW`9>N_Fc@rs~7ukGy8A%V*e1g9_RX*_!RbFpA z#65^~&&u#+;64_3@9Ygc-rgJdcUa*2S>XQMhrq8_$6vH8Mvj}byx=ya^1It3c0iw;cLRrTJ*}qG|wYUl%xVTtK@L7tB zD_h`I(JL2Mz}wMd8U(&4w!Kk4(J)pWsj97L5$*6^^6Akw5mirJY!wagz)5^nc7uB7 zs-PEBU!7ZB4ey<8g-3_B8R9ZWOqN=LkBqEuYHAiW_{Lp)D|NYgqGEnytYzuSXkNCc z!DKnSVOJ+}tEzOCl8P0gM*VkXQ(bGU9!&+hC==0WZdqCGHPP~-YxAS?uPM!sMzyY} zOg$G;lg@@=JHMr+3EsM%TV2uI zR<|ssD_C4oj^6Uh%iChj(y%nvQqwN?ooG>Gb!>$cLBqq_`TfP z>l!VF2j9vpUMzCBu+G#X8A|PqthE52YN~o;6dt0Ay9w$lAq6+nue%X0Pk3i zfxX%WW$M|!CKSSRa6MWK-+5+lGz*k2$cnm2AVqFT zirj39WLZ8{F@=S0RhnC3_~7MeTdV;FH~D~I=&+4TqxcBhXjOa5vKY!++gh4HVLTl- z+S*pp1}_y}2B!b{JqY6ZOVyanEDZe(ewSmBceCI%mA zm3nrsnOhYG8$>?S7bCBZ)l{_Cw_)g7qx*IXJT+Rraa}!U*G#~x+@Y_F8hC|#EG`T5 z4eaDaG-{$iKNmPpJ|NDm= zt7zqZt`f54I7F-KYH9>~<}+563Dx{5#~4337VtlLI`seeiOH&p9xrj5T16gjhbsfN z4b>C2)Qtu6&d z%yN5ZgP2?fz$5NuRg_o`gRo3(iPg&{YsBqa-L$+BH$$vNG&e7e!ira}tFT2~jVhv{ zN#={zwMOyr_^{kk^18;Frf5YaLl!(8-4A!ixI3YAJz58H~KRxSC(l zEU~R(X$g8kv1nx&_k?rN8YhwuJvTNQC8MyLi8*rLf^uu-H?>#Q%F$abjSykfR#d5! zV1)^1ajh1Z0MRO#j9ggS)Ko3YbOn_an&B8>neqfq(Nlq3qf;_^Wo!lPG0KJ}8EGBO ztEf_wjmiPx&MD1@SC+RoH^WLNH(!)PYaL)62n>s2};Xh}F`Ga9-; zuF#xjmeVec9dgy0-&iXO%ktpG2#sxZjqNbOsi_&tgLSIcJX!>^jaMW+NPkhetHi6y zVyeU8epFKeGnzEkz1cwL@CpnTF^g*$U+b{z4yIElA0|~6Oe$-9Jx4TQ7e zQX;g~N++?(Nvw#rs=aNc{$8cN)ud9}0t230^+sDEiBk`}6l7Vnb!Dq)t80kK=|+xZ zu@%it(dulWUc!NAbCg_729A+}mb&KVdYA(t6Ar83SWQMCC@*X&2gkC2mXRE8A=2nVRgWaCS#>b(Q+6ud9hk2MWL@S^;NuQPo)*D&e;dp{x|6X zN6zonvadkH;CBwx8CC+yMmAM5>{?hhHrco)D4M<`sQA;bmask&0E9-88wWWsT74L0t z($wqyRr=&2@C@rD*(+2ha1(kHwKfPWPQC+3E{zR>^+0SztffjG8Az?kI(rSA5L4Yp z4XIFez3ds%M@;UdF*qkHH-g;f#F2FDLp_)P+gUTjaH(p%S%8E zBc|>T0@gyy@I^?lBMKOwn;M#-&GC2xa=}yyCBreE%vDicBUuthG9X?V<& zHGmUFdJw(|4m2C0xF?urR^%~kUA44@byrLkBDZQ(uhgAUstRU=r7ack_9ba4Co0_d z&dj8Gg1b{X{X%yNh33Gd1ocfYcFCOr&ey;pR#Rh4R>IjXu+tc*#y>qji8;=t1a=-& z=z~U_i19K5%xCg-W~vQpM6J~UAdmYVTcUX7k`GzqV$!eCJ>_YRb* z^)(DxvLc4DDJEldAshH~-z}z2V|ZWf72kNOA?0-)2u>X?LIcZl>6+vUu?Wtk%d@+6 zu!7a8+}Xu41?M+lbixdUrka+)h^3AJ@eC-89%_|^=NZwH z>cCnKFZyb$gW;$RyS0|WqAMp090(j89fN)fJA>K=t-`(bh38YH!)QtQ+-UiNIdk&MVUKnMxy5s%SI(OsomZNF zrB_;(A1{-Z$Z7Nm2|KR~*3{c&{LE78hi50StfIht4v|BPgk>_WA&U*9Qo^K0x60AtUuV zkrJ;LDe=0I67r)OK#K6RtP`^mLp@!o+7svD4lm7}GuE*-Qv*4eLLFU6u`;8#142Pc z;?>VrE$^eCchor<^@i1N^z)Ufdh2rCb8c|zLcSJHUJYbH#=U5PdNHEzTM&+X zF`|<#-awt>=}k`|;2EPRTxWGxQbzliL1`^8Bj^i4a!-w_MKR3(Ev;fseG{y6-2uik zKd56Id5Zu_)$*aOsSS=k_@<^%>rYL;l zX(^s6q9vUpZ~}qDEI2Mx<-$!3*;D63lSRwH;eys^E}Zyl6bp*v(J(1Nfi0j!a9$>N z&dRF#SQ#wiy^?~8`g%t)JI)3rrp=r<8?h;odDb6I#uUwH21RNh%NIW$wjll?fz9 zr*O02^Z_R};m93@GE@$5(g><0H=XjOP4ZkSfipA+3-Q(%1SqozPSm?*YT%L0P>=VF zIL`PqCff+gzCCj%QrM?`q_hQfk!nJOJ)PU) z6z3!L@r#q4kFAeiIsL%2$Bm`f$Fmgsge=9(H=hd40-V;<^P#Dd^Mjh63R~Qua4?f) zcr&1!=2h*dutkq*n(>^Z->m6xU~Fri)xFZ_v=_`?>JpMOaXKD7VrnqQ+#T>8dpY8} zX~SNQ`K}xWeK!rGzLSn0)tzC#dkfY=@h+5s5s0xbm~*~Ug6h2SlfI+wZq|47Y-aav z<|xzByzgXJO<_*_9)<7B@3CN0znn&44De2+PK$M`lZ~a7Djv_eK=r9^wQAMi$!s>a zv21Xo#;a_`kgL`~QmrQkp}JTeTnyDGC{#>ZNkeON0ltSCBY^C3V1(fo`ty7^Bjxn5 zayY*#hwWl`8?+;vQ(K~smy~2qMSboveIzHVq9*AUm~`MI@CrDIjK@^+oSHhWf?KF! z4FZqap`cdCBF|AfXC0bpg#k+fxekCk=^7g$w>mpshF?WxLS8b%{{d?77CScqB69|U z=;e7?$5WlUKJJ`zXocE3Gi+2HuHrGPyq>I^P#w48A!%bwUdT~(!fUpw0&rvuml%aS zE>_=gRP1~!p#TGQ_8J>e`lA#~&CXg!9$?QA>c6=%1q}D9ssH9;3M6U}1>szsnhV#C zbW+`8hMwg$R=9~k-a{a79#HoV;J7JPtkjn+)b^9tyfKTq`VGOr86mic<2?qfS2x^1 zBetkR!YWweiAr^5V;R2NT%8STmFL=Ei>Wi>kksvWlekg0saydx!j(1I0Pro(t+iI= zG{YUD)hnXSZTfV9dlpV@BP>xRE8s5A#vIWouP;i0JWYpZ(xnDY42z0-d3HoyjdpHW zg{~;?SB2yJM)1E3r_ne!l@v3$Vpvcr%Y>{i%N{{BK!s zYcu>=J>Tow26wQuF0QO=gxh}`n(OLgEsN{nE@SmyG<#Z>N=&G)U)C@Ij4E1IPNy^)m6BoDCwN@>glrte#U$eNbv8uiuZZfW{Yis@7_aHBJ z?{9_#_9yoi=f8;43)NncTfela1&$9I{u*UmSXj33uT{?Cze+*S6Bf&}Re5sQXll-F zh6e(`F;Uyf=2+{*TG>%$E9Vs#PppEsJt_b(^k*Elqq9p3qODW13Rgv|vYIDPiB?T& zo>I69P2m1tOz4xv2!+o1WkC342uwY4D3GHw2%rd8AFXL`tdeUtki(1CowBRJoV>FM~JWhX4Ksi!h{tr&<&MN4XnXP?~*R>d~`9jUwLvXC-ar!$; zf1j^g#Np9eK1TbQi0pb*?HY7yI7Dle6m8=F4>~bsX)g{>&|Afc(P_Vly8VV}J#-Z8 zF|Zx6$D})wfYyw1woyQr;cT1B^;UI#oUQvtP;Y(h2{y2&t398jI;<+rDeNq#_=_Bg zQ~bG3@wr?x&?#;T*MK+dR&n0WbTrd>9?;+h$oA2oxBss+ZX4wA`h2k(*q5>0F6HH% zVL-PONU_G1#?fHt& z&@+F?3Dw3ug|UV1I;_acebP*9y82E~sFqM-z7h4B27jWTKt zFiz4Jn+Z-XXiVIow*Gd9TNtao8aLw6Tmu3Y6|7EB;&uziKM4A4>z3%&7RF|ldwlm2 z$nLE{e9v*G5VwT*p5wMK6y^2jYTVpz+d~6;ZR7pA6R4Z}i;}pl1Oa-ZaJP$Frfcg; z;l8syhO# z^RbFLXE4JVo89pSjv{bkIuC%TCtca3s=SB zx6x&KqH#*g)bdO8w!GHK8Pz_W)`o>Q?(QSC$MbZJGwj>&DBeA&O4nH(SHY0ofq6sr z8dYgW1CyBwPrK~<`G8?M2ROj0!zRNb;*L{cZ(oZoeuZN^T4!?lHZ-1R)_<`tv;He! z1ZO|cwbNMxx;Y(&V=9af0#)%jJlu)b9oya66}BSgiI&wDb&@aib*bzS3WBq(rUnhu>Q2 zth2`Hz6eV@jKNva!D0ygag8%ZIj35!^RcPu}`E>i?oo-ufEbZ~NqJbRYZIfAz`R zm_B;@^b7UY*{_F@#@#Q6^f9(OzEE#>eWBjEzEE%9{zAPy+9z+$8MoeMkALcux4!NR zhx_EMud%({CvSZn*WUO-z5TpT-ugO%zt<;k&ar=Q+w}cDdF$&oJ=G^~eO)83!E3AP z$Rut>?2aLQ?I9ccuXKF)hBO#?IHX7uYRxCaXEibJb{|b1o{|>45{C*znuY+xqOlX#HK_*e7UvI9C6vI(m0cU&84W zl)z4k$9u3sQfDXmQTCb?bwdlD8BEe=8f-g7`g8K8IOh|F>2sfOod&%+XF-A!bZkYA zX0*1rPJid>@2~3b)%yD~{XJBFpQFE_QSiLMRgT9Cv}URPF4Eu5*~*CKbM^QC+ye{* zUsCPrp0)xBM%9A^PL<m7|g$w%KNuWuWtFqiPr24W%$j(smvvtXE+7o@a z7t7r1h4B(_hG$iso)NManOoMq&%?5hqSt_3sfs&OZ&3IAp>vf4ngFYpu3abVQ%SZy z%^cR3-BNUCIa_;jE9Qi$D|EKK!dr2sA8IEleN5ZC*G{H8muel&czw2UgtolWX{sA^ zlR2FZ?z&ViH(5F{NPiE|-|j`I2FC@Qw8hi9?v{5iE!8+S8y$Dm+Rb)H5bqCq3Hoz; z$?5oW_m+@dqiSOA=jTcZ{CUpd?!ysCZ8|63zl{;-XD|Z!oPWjr40;=GDraVgK}nq= z=k+_$CoiM4x8Bw+|K2BWeVx%iLT@T=T^~J;IJJX#JX^-S+~)KS-CK0Wc228Xxa;w@ z=t#AKNpwF0wxr_;Ix@B>oL5&7Ik)%)-3u0%YKsN>+sOf!QSd^3$dR}`$i3Dz)A6pq z!}=Tc0O!Iw#xp_pf9Ku|=XSycj_;t(>C6!B{Y!A64Ql{>VS?=IaC_h7>U*M|^_&49 zLARHCj}o+Ny0T1ke85EoY=sey1XMV{W$N#+{&uf3=^RicjKk>%2_b!6KSf&%)bZ%^ z`oRRv1M#{5-)=vL?KV+gO5?g6aC0eK!bnxopQ$5qu42JRh>^f1#M(f$Py%z0y3sUv zrXHsCjicwx@*wy#KeN|b8w0ab)JyAo(s5rA za3cTAkMgz2{(8dJ;I`2Au<{De+V^~1o1V(tWGih?@%%06c-yRjJFBxiwT4@&Wjj;b z+?jY+za2?;C*PCujnuvUzkNop^^GupZad1h?x`)c?sIL2KKT7x+75q@g*r)J_v^p6 z+27ktw!q)}OYd{wUwdES^U5sPPJCX;>uFxm<97t|nIFHotW z<%E?B$%M3E3;cAhE~hyw+93a{k^jN3BeS9_VB_*pMX*RJ+!!p4AB#8g~ z%mqlmn#@FC^&=-&W~(1Rxd@aXk_jQ@&+2_V$`1AY-8{(f{v!QBrZz>Ubpmq4G1ujd zG}ui-!iFDidE@ivBsUZ4Qw(;K%3qlI^Jl6r>d8Mc)fbuSha7PWMIOzVwkqmpF#RmX zd5jAg7c(wpyom8)#!DF2GHzzPn(;=)w=>?tcpKv#jPGUK#dsIvy^QxWeuVKs#!oUn z#P|iqFEKvK_&DQt7@uJL9^>CJ{sZGr7zf>aSG!>jE6EF$#^W|$&6<)E@r%l z@nXi6jBjMz!gv+quQI-c@vV%%Zg84z%XeX@48Xy$9B;N6ddc@P-o^M~#?LZ-k?~86 zUuFCn<2M<<&G=o$Ck%GG3MAygzjr+KXBz)dpW-?}K8vyYMt1F=#zV9p$?V56hBu(= z58A7Du`3C(dIg`s(;ahN-Ymv>j0+fF$+(R1e8x0hVmwQjzLN2cj2js@GhV@%##b!w zt4zP1@vV$+XH4TQ`rElCo)cAJdp8OjA{Hve-Wmq@f-D{ znSLVU9L6-hWB!>;Pvbr6^O&B-f7F*U{d~qWAE5mbrmtpP&$yX!8{^fC*Dzkk_;$uy z7;j@t^8?1;#q_%v?`Ql7Zu)GlCB*p_7pT+nb#v>SyW_$tT9L7@_&tN>8aRKAY8J96$$oN{u zm5gf`-^jRy@iNA%7~jHpJ>y#$f1UB2jPGH*lkpzL`xrmU_;JSHXZ$SV=NP}p_*KSl zFn)*ey9PTwResyBy7I2C{F&BQsHfv;`%jOln2?P-05Jek?kdJ6S3 z485C#ge_88{rox6&4l_S#Okanc5SX z+LJtEd}%B`f2R0QPhOBIK4gjync_pH_>d_+=V%5iWQ&0;K7Xe8P*3q8Q+&u2A2P*< zOz|O8d;>8s{l6_TSbY9W@u8k-iA?b!Q+%Y6McU#lR-Qjo|3y9dJIj3;`A&G7bpWn> z%Ke?{N0wL~>SY=~{yfN0Ykv{O6B*O-5&FBF>FIa|_17}}4UB6T-^jR;aSP*Rj8`#U z!+0Izjg0B|1>@hs^xGKI@eJDE%k*80_b}ea_$kJR7}N0wmiHRdpI}VK7ifQq>FIa@ z^(pRp2sw>$gz-qmlNnEET*$bX@nXhH7&kL+V@&I5jDI83?_f;pXSApFF*2=>k!k&l ze3F#JeKiv#xofgGcIL3pK&$gTE_K^ zS2JG2cpc+yjCU~J%XmNIM;ISse31%?z;ByEXH|^=QCc!xR!A}W4K|_Q{EcJ>lkliyo2#x#`_sR!uSy5!;D{J ze4O!njDN@YQ^xYKfB4b+AL9(hBN>lnJe~1O#-4nsF`T6^vIizMb(F#@iV0 zV!W5}lZ>BYe2DQ;#;-B{72^*Wf5iCDj1%E$jOO-BVw}b}gYi&oX7Y|#-)tQ7%yaeE#o%ED;Td~d<)}sj5jjA zmGK>nw=lkw@jZ-pG2YAgDaKDTeva{rj9+1Vobg+X-(mb)#=mF$0ppJtpJM!H#vwR% z!Viw;iHy@24`iId_*}-L8Bb)K#drqeS&Z`-7cwqpT*`P6<7*jLGQN>%7k*Dzkk zcpGDR?CP|?lak-IIENh{`!gLMqn?g>kw?2u&v8@ee<<_s&*UHVbi9vDHgu$+(blG2?}d>G&G`S2KML<9fz)e2w|(_oDHFChm$jciyVI|>PjbD` znM3q<9`onV^O*f&#w^tX%Yzt8wN#;-Dd zkMW-w)AcxAANP0>xq$Hvj4K(}FsAz%(BCagzn<~^j2~zGea25SeuFXHZ-C{$&GdA? z0qW`c4e~(u_zU?0##xN>7#A4qHa#S4IQ!;3zwXb}Us2!Rb%IR&6`95p(O_CMtDhTcs=!WN@gy#7q_qMqVK zrg)L5eUT$>p~%#}$ke{b)V`zKoHAjHF)Utxrg%|L@gh^a$P_Pf#4Qz>;zg!-ktyCW zZcdr7#rZ5=f2Md*Pw^sCyvP(Ua>Okanc_vJc#$dI^WB^>VT*ArUVo-|QBUzAQ@qF# zw-jWG51HaarufFWIc35Y6IguyO!1+f;zOqRkRxs>$P^zk#fMDsO>lF{ge@*)@%b~w zhkA++nc_o^xTPRde8?0ZGR1eHn^Puikd_+WQuQ+n^PuiF@?qF&lDf(DL!P14>{tNf=uxt zQ+&u2-xN2eOxR)?i_f1aKGaiu$P^!P#4QDx;zOqRkSRXr>d{SOIUoDvH1L%;zK>fhfMJyQ+&u2A2P*%_6`7_0b zdWsL3;zOqRkSRW7iVvCM%VqJ+Ve$Dh#fN%|51Haaru70c#fwbwB2&D`6z?1sZ$69H zpDA9{Q@qF&FEYi8Oz|R9yvP(UGR2$E;+@Ol^=FC~^%O5M#fwbW^O0%2j!f|*Q~YyT zd_^oif2R0QPw^pBe8|+E$P^DU#e+=kiA?QT#Nxez#p}-$FX|~?WQrG=;zg!-kttqe ziWiyUy@JJC!s7L3iWl`1FEYi8Oxquswm&k(k4*8Gu=wV&`23mTLp{ZZOz|O8dm>Xj z$P^DUwIA|iH_CZ#N+xV^6^qxODPGi5yvP(UGR2D=aZ5#}c#&!QBUAiWxjALR7Ue8n zf2Md*Pw^sCyvP(Ua>Okanc_vJ_>if6%iWwZVT%PUUVo-|QBUzAQ@qF&FLJ~!6`A5i zruIdq_!qc2Wx^I$vv~cP;zd2hi%jt%Q@qF#w^U?`7n$Nkrg*P*bIOD*u3_=|GsTN~ ziWiyUMW%R>BW|h46fZKxi%jueOka znc_vJ_>dXV4qJhQh&lE4}DPClX7n$Nkj<}^FQ@qI3zQ`1RgPT((Y|+Hx^=FC~^%O5M z#fwbwB1ha(kttqeiVvCEx5>>Z6Snvgi`SniUer^($P_O!#fuzqOGT!5k*R%=DgH0H zIc35Ytt?)Drg%|L@gh^a$P_Pf#4Qz>;zg$Tkg0v)RoceK7VRuvf2Md*Pw^sCyvP(U za>OkYnc_vJ_C==n+ufWpVT z;zg!-ktyCUyE$dT7GGiU`ZL9gdWsjB;zg!-kt1%Y$P_O!#fwbwe#Olx6SlaS#p}-$ zFX|~?WQrG=;zf?Qr6N(B1(Cfc6jL3=76neJ~wp6Zs0Je~1u#&o|J z+TY0ZbpIFX+nAnyABFm_GyR>6>Ha9Rzn|%M8tf(^VT(;B0^|MGB=l$6{-{rMGa#oh zp3j)>mqUAMALK@6Pwj>JWlaB7#@Q`U z$GDL3m5fUnU(0wg<86%T_k9@Oy-dH8@gBze7}M_o(H}i;37LK$hGzn(&CFi@wh2Ep6G^tk?QA{c&u(^Yf0p(pG}C$p^V50; zc`CD~^$hA~Gd-Uy*kj_HGgqwzz|}pFh+3 z1@--1C&;vZMIOZTbiEh#5vHg1zr)qYge|tP`23mTLp{ZZOz|Pp_D7Dmr6N;2$P<~K z*4JBHjZE0$>nvV>rg%|L@gh^a$P_Pf#4Qz>;zg$TkS81VZW0o<*v8`ZXNni~6fbg` z>lB&dN2dOOO#2t|1uTCKW7_}Fp7uZF8O(kb<2-}iBqVHcC#%0dQ~gn&}N5i`k;L=)6Zvo1LI1@)r@Nx)A)tu)iZrF<2J^t8Lwfyj`2pu zcQB^$5aXfo5P27~-^+ME<3|`DWc+=`Pcx?D1uXwXrhkp`yNuswe2Oux-_bv<-;rtk zj!f%!WLlpi)A}5FsJmW5ru8}U2&SLNc!t4l=#a3*4z_>!bAp=*^&x}Zr1Ez+^XJcr zZYI=cFsAVc^|ZetN0|Lc#x#DRJ&j+;m!?_nYm4D;pk}#mH5z;`q}Ld{2h!5U zv6uUf+}|9Q`^w`6ABOY`2EPL7Hw``x>EFR$I{eA_<-Q>w;_a~1$>%>h{1NadgXO*; zkN=$ZNrLn|_&W>iq(9mBV}@S#?bU`}9(#Tr{$wAK_BoK2$6x(4&xG`M;m>KW0!aT0 z{K+SCNqc#0_!9g%?JtiFPr%=qT3-$6KN|W*NDl~*zZJm4fd^~*TY%+y-l^~Hz$FIX z2`tys&i3pA{t~d9gJeANSn+1yGc?O%zdL}P_IMh2m%%Rp%jd;8?e{A1PmKI;0lx!m zYk%_C?Ux3>5Bw{G<+0dr3{HTwd>)CDUmjci2mCqp9R%q_P&(}=kCh_8j($AwMZivb z%444^ft~uy0E3w2`L-+ zAy5AMnV$1Enf?LBI~mJ8i9WX2Bc9UbL9;?U_lswN6Cf@BB%2>w>@^YM{k9q}N4ipc z-n<+e@Pp5Xm;Dt#VP*fWE>rFW^7nMwJdzKHP^%)UhNWVe0iG5f2SzMSb7Fut1c zHH@!gd_ChR;|j)AiYeY0(=TOQ$L#U`66#-g{|5Qv_eGAvm^%p$8C;xc-Oy%S8Xr9|Y^zoZJ z{@{8u7h!CRxb_L+Rp57A`>=Qu_-%vb zSSaUr{Dj4Cr9J%Nr=R!$($gJ;Xg&cR;c|ZwfVqb_O~8xm3?3-pZMI^g8{Z%S@2oWZ z4HED!MsbdzhqqLV8rT0IF&$X0*YGn)Ahl+u~Go9vz`DO^P`TKnN zY^{l|ez=$bOveM6VyZ_!N?hjQF{04J=ZmX6JWgEe;R&M3!xxHr4`+*Z4^I+b_3#w2 z!Nb#pe6|+Ff04M`!xxL49==38}%k>la(#l;?u ziaZZjh!PK1iG{!vPfSET`lX`Q!*$|I9{ZcbDv$pE689cpRuoy-e_cfoL_|cy8AN21 zK_%U}VE{o9P*K4IW^^PBh#-T2IVV(>H6UUZ1CC+MIj}|+b4EqQ9M{F174>`HI(52F z7q0*3+sBW8KM&mZ_tvS<)!o(A;odpeot#N;aI-S$hq&`H>C@b0ne;>5H5oqK-IC!W z-Mtw;+VQuy(*8NtJ(c0(-C}UMekZy&GwCP0k1~9!`vRQKT2FI7g40>}Y4~&64tM2r zInA{I^O{zc)7(1XeH8J2LWktor+J3!0>&;8mNQ&0@Q`Hup6U96M;hjDaq-$!mYHrC z*gk*Q6a1bg<9Yu9;N^xVfYbXcGu>410Ve%uFt0IXndwdi-(>hK@MVTC1TQjt71%yM zyAizDq~8r5i*t^a|1fxtNq-8Q_V+Be7@YR^EcYfj?eAIcBXHW^v)mWpw7+LL{+3lI ztq#u*au_?){o`!c0-Wv-v)wx20ZIHE*8#kx;Z4Blcsa-Mx2bq-Cd(PFH#ogsIl~PE z&(~zMoWC_S#PIImiwy4%o@97DIK4`m>ka`wVA78Uzhn4R@G`?^fm^40>|>%mHJx-@s2g45%rxyyso-y?1A`he~HXlt;& zo*V{Fmo?qK;M7{vjRCYu0@id5X(HTK?pW}~NqQ@HY9_t4J2#Ww+FhJUZ{x1Zq_=Um zX42cb2f?Y;);$JD_rJF8d2rgkw(hkw7_DmOKFOrFb6;iBaaRI2mUwSMmiCT+?%7`N zwgacfXM49H*v|jDg6;e*51ymNq2#{c1%?NK?R;k_I5Qsv_cQVPg9l(tmZiNL4^FTD z+q)^?!!#N79SL4y;!gtG`QP8bcK$a9Y=58dQn3B~#zwIHea4%?_V*L-0o(cM!(jXS zluv@wrNX@iPPbQudoPpT!F>g8on+|Xeg@n73#;PbOY?VdEx~Djb#Uu~dzkzk(}NZ6 zhOT=i|Awv%9-72&=(ftlZ{&6YcT3VYa(iadtK2wn*Cf5lHDuB^amQuyZ{kkNq*uGS zne=KmFO$BhyD5{tsk=LqzPVeJN#EQ(mr3vL-pZtRcOPfcd%Ev4={?==ne@DCg$vAd z{qt@;UT`K$!F9=`7hKOwddY2>NiVtWGU>H$k4$>4tIMSKag#IYeca)h^ex*| z7kY6!*AASXZ?tbUSC#hq?X1Y5Bw4_)PlF?l5qd zr2L)T@tO2p-I?HSN&2qt{7m|A*9cDY4|g|b(sy?cfV(C6cXy9v()V<)WYYI^Z)ei? zcAsa`_jW&I()V>uapS*RQvSYfEj|cHmi=7EO!|JVI+I@K%9->!w^b&6l-ntjKFaNx zNgw0JWzxsEhD>_BI}V)oPrW-WlRn#0oslie4Y^i$n$ne7PmeX82a5^77&20$2(xi6ndz&P=xs_yBDlu0K0~`3zH*nQjwsy1&eHJ;3Sx$eFGd z%x7{MKLBjs*V`VP&Ua?I-N5Pf;7qqK_)3$1ESS$nwY-DD>3ndeI}CiiCZoN_gQuAI z)4}O7%bgES_s3c8a&Wpo&T`j*J0%%rx!b_${y59s4^H>TS#DvJ{{?WmKhAQmgVX(S zmU|zZ?vJzFGH|*-&T`*@)BSOl`wg7#kF#7eJcv#A$62m5INcv-x%K&=Hd)SeUBT)3 z@l2P`q@V2ufYb5sY`1+TeYV>RoNn*gZd4|Hj++7=nAA7N9SKgaH|DsLz?+%$zk#x26xpG zlfE-J?e7cSNN~D77rJ_IClfyzoGy*-Sa6@jXmqnO>DRf-!RfCWG`gF?y^{F(?m_Sc z2{*cD!8aIw6Pz9|jcytE4wL>1_*_0b_e-N|i5CwRDB}5ZC3tNjvJ)aDQ+Q z!#jbChU>tyD$@K@z?T?45j@}UZ19bSuL9p~_zv*HhW`bA#_%iPHw=Fa{@C!3;I9og z$Hv{ytbYY~lHtw4#~AJhKF#nj@akrL_XjW1)kXgu4E`w@&>P)xj8En~jqWUPJHwZQ zH#B@JxToPq!2Jxr1RiGi1Mq%^zXMM++!QZT9Ax2xfG z!21~97(Ci=3EW_KTkx@l_XN*0d?0v4a!;Yr9SNRncqaG)6Mr%ICc`&?uQc)h1m9=) zS@8WP{%!DMhQ9>AXgG%#dEPVJ2K&l;`=ziap~@N&bafzvrnqq_jiIgQqT z9k{RI`@lOGehR#g;ice%41WfmZumFw@rKvJ*gey5C-8ZO^Wduu4+P(2csTfO!(+h@ z89o&JxZxRK&RKN*&Ihla+;eGk*MgUr^n1aa!)W}I;N{q6$~-rHW6lT5z#nKb&KJwU z>GK7gk8!S9Cz&rbx(?t@hP#1#8SV$(!thWq-&xf9M}pJqkw$;6+ufw|TsOw>Eb#G$ zF9Dx!_y+Lb4KDy+WcX=tdi~JomV)_?qPAxl_%_4K!S@+%*}=Jg8twpo$Z$9CqlWu| z)8}W6ZYcN(lRgsss^LlCF{`BQIR-q#@GNj1?+9pnF9G*Ad;@qF!wbNB8-5x*%J5R~ zL57!sry5=kPXC@6w*Lkg4^4UpFyE=r_H+YZZ@3@$9>YVyPZ}Nxe#7u2@MngP0smll z7I^h!g52mX0dHXV2JmKv7l5}g{4{t+!%M+?8D0jiH@qA?)o@E(yd7`2133NrV3?1B z`Obp&M?Y|*;i2H$4UYsrY&HoxWeSXvEJ_YY>(tiOr7;f3g`Df&se*^IO zCcOvvX2V;7pD?@&IDKEJ(TxJXYtpBJzchR@c)8&@;AVJ6Dodlg8oZX_yTF|cKL)Nf zyac?H;eUh28vYra{=K3`x5h>oKTUcE@WqC^gReKdCHNu3JA+>_d;s_}!-s&E8$JoV zT5^Hg=*|VVF+3lt)$ps}afUwuA7=O`@L7gibjJC>a3%O|!`;Bo z814_|GgYmBC-53(eq0CUGf_>S0v=%aL~xzq+2E56Uj@Fv@EzdW4F3!KxZzj8uNwXs z{ITI5!CxD0UWJymNZVHdUfb~IU_L{XrP1{RR~Q}!?qqm>@Fs>Ez?&OB0lbCbbHF4ZvnpF@K7+H zF=~J82Y$iuWbjhM$Ai;njE(MW@DC>a3UGTfU%L&QJ~M1|kAk-{>5IX;8vYPG(eU@+ zlMOf9#JNiiw+G*DcvJ8*hWmn_H@qYGCBq}ZuNXcU{F>q8z)KCE1^&+P<=|D!{PI?C z2g8qmi-unU4>SA$_!h(8fgd&8vrE z9|%t0uWWQjfPXRRr-PfXl9qP?xUJ!9!4-z@0dH*had7(m`bM_|+}oso0^VTNwEQ2z zvrYQy)fm4Fw+G*5xGVS(!@a=^4G#e?GQ1b~S;Gf{`TZJMu>Rm544)2eY1(%IxUJ!9 z!NZ%T`R@f^VYbhc;Ij?C0p8c}GI09Lw$c3xo@&xtb;b3%;SIrGnd_Tg;P(t~4gT6( z5A6mXj(d)}eq+EN8J-SqjeB&Oek%Ab!*jvU;2w{rUjsfB_XL#h0pD-<2{7*&X!`5m zUZ#Ej0rxh%96Z4Anww($G~5w9(r{1kfrbZwPcXbIc!uH8;5mk;fv+%p3ixKj=YbzE z+z5Wo@ZI2{rvDxX|7`mEHE>gt{wcVX;a|WV4Y%A3=M%#lfVVK*1N^q(t-$*l-UXcA zM|7Q4S@E3;H*c|64 zvww8}Z)mtXxZ3cR;GTwe25)Ql0Pt|bhk(Z#J_&rZ;d8-f8lDe6-|(H_g=T+W1ir`c ztKbJs{3qaN4gUmw&2Wou&V6dQ61?1SH}E>RXROCdfAA)TcLEm;*MYY-JO#Xy;S<5U zC$8nq22VD875Fs6cYv=j{4emshF<}{VEAM3yM})Re`dIOciewBTmf!r`fqdaMuz)= zi-w1R2OHiWysO~`@cxER03T`i9Pnv|uLRFFd^`AR!wZ?;j8`v%Up46;f!{U!1NaNW ztM|b7XAQ3pZjXD!+W(t@H!{2hxToQv;4KaB2Oes8GI*rnr^@!)JkK8@?QTx#3&EpBR1w{HWoVz%Ls90Q`jE@4!zPZrTg;6Eps=2mZ;VcLo1q zxDR+$6Tbs^HN*RYS2sKf+`{m&;FgBZ1h+Cg56pY+x_{jQZfp2q@Op+{1Xmb-AAB6{ zd20S|!BY*dmdE&ld%&9B4!oD)YVZ`py}`#A-X8pS!~1|QH9Qe~gW+Sq_Z$8@nD?x; z{>#Ac8NM0(qv40Zyhp9^FMu~O{2sWE;cvjaN3HQqYVbaS;dQ}vhP!}w#XVAuuLb{V z(uaW8FzI`P*E4(&xXSR+;68?Dfd?AC6g<@MP2lScKM20h@blp34ZjQi!0^}LUk$HX zK>KjdQ`e_0xW@1%;9U)u!55kQ+kq#V^u55-4Nm~$k}WJv+@at?XXQpW1Dr1N+_~V7 zFb9;S(aq1KH+8pxTWYdv>K*`ZZOVHN%sHjze+OJ|(!T;H&3E(MZ{W{N{8~lyw`NCr z2XNnno4Jj_mn7Fi&0II|ab|t{gBwhJJAqG3^3QYog1<8LO#-L=)7(u5V-tm?xjP0t zKoKvmp90>=@GS61!*jp~8NLL3gyH$%8HR5F&oO)l_)5bIz_%D)2!6ou)8MBKF9yGE zcq#Z3!ykaZH@pnoB)3^ys^`q6Mpa6iLs!9xvq0H^PhHFq0>CzEKmX(GJ4)2e&bN z3b?c3S>PJObHD=)Ujp9E@O z2Vg$ak)_dn2foa3(=z7QhSvixGTars#Bd+*zYXsI{@L)p;5G0}L+hIa?qK*>aCgIJ zg10n054^MCTfhexei(d+;TORt8-5>rp5br7*BD-{7V|B`?ZD3)t_FW(xHmX`p{~(w z4_+V7EOh<$0rxRH5xkq>W581l{~dg~;mg4D4Brg?r{RadZy0_7{IlWr!0X|eg0|-y zaIN7cz0seB*9A{8+y(qM!?oaR4G#e?GQ2nV--ZtYyH25c-2XZnyoTXf;C6;D1#e{d zCU7^y4}xnAKM&r^@Vnq641W#2(D15#aDUx!TX4Fp;W~rU^UE5p2l#}}8qw&s0;lJL zHQaXKw>qWidx8IE;wOM_(`1~#4g>#S&NrulaZ4>Mt=zfbxhDU7@Dfc%{#(I6oBWSt z^0#)+g0C|9-v)nU@-GAbZu0+{$=}8`$I9Pn@>hV<=kN1eHMj-tk;sDknc#Mccr$P? z_z9DLckrgkcskFG2Cur2W@vQNz=KWt3E+07{Byu{CVd`wW0QUhcyq%KgA0aV1otug zKA88UWNCEYg10xk+7`H9VYnSQ-9GJH75FW)ens$6rhNm!<4peH;K_!^f?JvOKNLLO zq|X4``pyFX$JBQ@_&ihJP2l?tF95%5_(||`!%M)OSJCyK=RN|TW$OO{Jlv$O)(_*4 zNpA-}$E0rzzTTvl!0GvBo*M){#-xt`&oo>Qe#?|M4SbhLKLz}d;q$sFE!~OgNK;(@4)Yx^rrnW9-H*G-~n13Ubfl*JlSv;aJtNQWpMk% znD4d)Kc8@Ww=?(y!+U{$G&~C2GTDCZ-9g}V{?*=10~byDG2rxl{`T%v@JN$>COCcn zyuCXge2PiG9DIS{>%i&!s=d1n{E$h%AH3M`LhvVsp8==)UwiioxOK9<+q<{H>GO#8 z?h|nO{Gq-33Y`A_ZhQALc&y34>Xz8Q47UW&F}yDLTEiW|4;iioFE-o@%-`pdrM>F| z#t%m&JP@2dUuf@k1a~#*BftX;?*|@XcpUgZ!wul{{g(Fb2=E+}ej@lRaJ>FuXRn>uPEHD!}{=25oN@_!Yz5z~!cCdI`+mAkg?N!SfAo z2kz1=P2UCF*YMup(S}EZKkKCNIDdipj)E+W?i6s|@Oj{Z;YM(}T;T2mC(Xf|>yLmR zGw0`*!0GkCO!p3Ws7e0{JZuduai04f{66mK%hKpt55V=XN$&{$%%t}O-)z$RgTFKB zJAvOZ=_A3*P5Qy$wOhKd%yUPBSJ_+{@9%^AnDmRlHyOSb+}_0B3+8tcWtrz516P^! zCE)$n49S=eeGINK=|6&xGU?5>M*SweJ@{Nxeiv{HlU@t%V)AbT?q<^W01qH2r$; zi6;Gi@MVUd2H$GKfhFcH9{b0izf!FAq)?WiY-=q%$SDW+^;4T{O zD%>b=u1bwYHx+!#s><`+31Az426(C_BB zfXgO+Z!mw8NtStTJoxWsd^iH!O_N=fI~BZ>$v+o-SQ8DH=jMaYHTmxZr}b~*9s$>z z{4arLH%arq3%=6i{~Da;uXewKPcr#iZ-ep3C zsV4r^Onj}I4X!ouSAowo@waB;`?v?d!%X~h;OkBNo0<46+^66%CjJ-jA`{zVSO#C2s5%@t9 z{||6F|C#6R1@j#NSsLAwnf%+hSHW+X{GWh#GxdEBPLlC^39Aml{o=%EbZxl^Mi0iR*w z%V7Q{lq~byU~pRBa5oH`*0;Oc2YkKBKaue!|B;#aJ>3lO!zTWG@D3*a>P-CJ?l$mi zCjL?II1~RuCVpS{7WgX@{{{FY6aQ-_em~b@2R!dG@s;4qO#G(cbbayr5a8xrw0|1i zcHsL={O+0fQEoJNT@ybIoW2h{&z+cwALGshZ)D==p0S|5H71KiW(-x>U= z$-iGF{&05?c!-HV8r-zG)<4gkk%>Rj%>^H1;;#XBHt~06;_-We;29?VCGeIe{@qOc zvF>y5l_vgo@IEGf&0%(Zk9QT|2TlCu;KNLOA8^{gC%SFHZ<_c$!Lv<#Jvi;(6WwHR z+P^2eqruBf{#oD~P5z5A@u#|Lz@55ke>S>%z)zU?Mc}PW`m5j%P5Ou6HCkx?dF~r< z-f(UwJRdN;7Wk3PG``Vw0`oVbWSQrBfEx|>1HWM6hcUlN-xvJ0NuLD%)TAE;e%GY` z4ZO)3X?+)hamf;v)7+Kdk!F2w2hUwo)91NIzzYn&0DjN#JK*N6()cgHJq`Z`-qY}! zJLCO!!yUjE8{QoJis8QCw7s+3AaHvAJ=5(1KFG9x6qvukBFj8C1)T0LXS-v;$C>yu z!RxP;#$O6f_s`kxdhj_W{(f-D#6Jn%c5}_&=-vSLP{c1$d;lJt@ErFQ_-a$$D!br% zeJu@`=hg=AV9M(Z9&5M&=5MyhGS3YJ-)+hp4nEhUj|LxP@=pWbZ_-Z!^BqZ9@O>2U zF^1=ZUp4W!gHJW-3&Fpd^q0W1O!^1lwmB_-uKNsJY^^-cEeD@x;@8|2`=hxY?g-x5 za8K~@n`-_>Hvs&t;a$Oe$5xg`HyZq*;c4I#&GB&x_;ADLfmb)&2ySKgZtyyW9|yNL z{2I8U;ZMO;hJOKfHQaJH+^;jd0l2^69^fH{w*v2Eco*=VhDU+-F+3H#zu}X?qYcji zk2icZc(UQU!26l)^B8zn!%M)IYj@+x!@J-{!=Hk$H~bAaz5ZwUJH@a5H&xK<|8`s2j2;9V20bcmjbu*@on8Fne=wWx)Ht{hYlP!Z z@^9)k%JAl{HpAWBunhNfV=|m~M`pO-&dPAfU7g`tcYlWaxEC_Kh5IDK{oU^w-paKL z$G^0HYu7!)gWUER-o}j$EaUTb?$}KF_U^n4@91vG#1C@|0vCP%?(E*o#P8~U$fOT< z?e{?-7HQw^u4jh#blYWkZ&#P$eci+i@8=HBaGg6j!=v0;86M*<4lM1hcmK?!k9Tin zcmlr6Bkh&=iEhKd(*A?pmYMVhw|^%65O+)_eVV&8lYXeXE5nDoB^f@_eVgHyBz~ddrx!+WztV}XJ+_RcVplyQEVIhe*AqIp5-17Ec?fqZfPd}+3t(L zQr~R1>VDEb&avCzP1bb-_x0!Zxp=u`%FZ=|hYsyA#`PH5tCOpnRzJON!sIE3POqCX zYU-$ieR|#S`sss5O&?Xa{p9KOQzws_-xAZK8T7s*kE-uSDe&mDEv8>L@046q7oNNgc(c zj$%?rF{z`J)KN<6C?$22k~&IB9i^m>Qc_1LsiTzCQA+A4Cv}vQI?72Mc!fOlUpc9x zoYYZH>L@35l#@EjNgcIG9kodvco{#GT$|KUo77R8)KQz%QJd6(7Y#LUQb+Hk4t%X4 zr1nng=*>Fn>c%uoo;JNlb_eMp`^t{>NB)0>3_Nmr{mxUz)=!*x`rwBld;E6X{f1V^1y+;>R9{0fi-np1AcOy_{p{m99RhH#qe1UpS9t$clgZb z>-;`6a3GWvNsFuNEh!b2R0EMu()@1dql)YlukunoaR)i z)^M{(jwH?>Y~pc~ic0D&aPx_mq3K;;Pq@575IuO#!3`)ag zz33(JVML&pWDV;NuO?Jb_H~Xsbn=+G(e>jeOr|~k;3@2r)MV)}Sqwh>Ho~VbjGqj~ zC)>qj_BL&{&X-X?c`Qpv%L^I&xWkO>6Mk|_YmRISLWDmtXav2qOy)%yy^}Kh>V!7+ zN!sGw&_aBh!IltKuaB-~uh19yUfJA!+n}m^uWSqa=I}nt*H$L3-;a@8To_+fnuerGU#Sl>cTc6~jve1E1k@nMS>3fa9|cdde-cck$J?%XWLPf?5?4*G(h z)*4^e*H2@Ouj}ilt;W~&jdmX2Jl5-X6%()P>nESa58Jok_c7z^`uZtl>igAX`F`SP zd|h9Bx5w^RMP1)$|M3$rmJ{tizPsQTqy5KUBX~c%|L9R)jP@UY{lNHW|MA`K{p@!1 z*B11n{l{Nvct2aOzwYopJ1Xr5zxn7FxIv8{wr{bJ?H?V8ioT;veAvE4zk5eQiKwWj zrjj3qHdWHH*I`o(P`N}jXbacsYU>4%9EW8NYvZOm}DQSZaizPiCO8y$a z=L$!D$&Ym23EQlsbAgi15lRKELdV~d4y+~JawUK9%5wCSS<=C-q7c_6pe5>Qt>iCseNOE}KZ$WfJwl7D6impgmN8hpzdu83OWj#@p(-Q^y zBFX8e#%zsl$+Ex9q@zPb+25N;_c%Spmyx&Y%nq#^4q;SoCL)j1iab55Y`CT!ue3ZG;~QGY0obYxrF+W3Znx zM$`*MzZo(S(W)2y^gR=?LT|(?=V$3Qi$9Dq1`jZ6`2EuuQF@IZpiFv=A6GI)v_)(D zOe+%+wX?<#K$(bWBh>hjDH9R(d5u4wY=ob286(Qz4_T93<0p6-BVLh0v`K3Gv6;yd zZIT*4_-7*G4)uq%jqu|^#)x*F8b6q1BI1_D`+bd{E@iUBE%g(mOhnYuydQT=MBYz9 zjZxz#P1f+UC1d3MkYx>jHZn$yKlNmc=uoNgw{tTQ@pkcZo=il%w*FRcCL&tfnz*Gk zekNqItk85n%4QOhkMr#N%yEJp9NNUZ#v_&#sAwpBjH2uvz>WB4flY^(UfC zMBGw;uE<2h2d%$U$V9{~^^-vx;m_(BBi{P{bf1Zcw|?)qrSULW6Ay!Ok(((rZYh59 zC^Jyj_tFHg7wr}C7LK}Yg%e$T$VBb&lWo(U_#_vf|g4`f1~%_V{V1O^>!;JQ&7PF@Gsx^2Z}#JP^j?U_1+pN5Oaw z7LS4c$(yY|>c84(Sc%8Kc=+?r z{%%vIjHoB`{`P>4SYa%SXQXm3I+G=Cn7ya@*c!iHE;@JpSe50WcrW;q&njn2*Q6d_0HG z`&%-ZcEo)e&*Ag_-jB@^&*Ag&g;zeF!{_5Ud_KN*&Bw!YJ|3U*@eDn`;tV~SE#&)M?RiA=i^gHK0bHko&f8^u2 zb3Q(U~C zpI7Cvrm40N4{^o#$SKB$L2-qq$8&^Yd>gPB&k>4oON;Rwp%~8*PF5#Qo1#Ph#GeC1n+x2-&Q&r}=D+~pCxjfl5xAs$l-@un=qn^KBEF2n+Fq zun%^2%jAw|&_})MG9B4jEBBrJoL%iHJLJ^$$l{&`ik+;SB!@~c{Rrt8V`NNc<3v}L!Z3HW6Ow->|#8^ z6yp)57>_XW?oOuAct4Ftm|}d%S&R?$VtlB}n?1Ic_)wSkcQO%iug8aaF+S9b@faj; z{g^`KeIR`^BASTHTQ2fi!=#2WQEJ)meCeAR>?JKI>akLMvM9&x zG5N{u!%xnw_{rHZKRG|ar=LLaGnD72OJp{PpP@WICnAUP{0xX3%JcmW_I=3DP@b-b zKcMM{^8Cz&9Ln;xs#ptD)xOV(0+SyPHHSxfQdcPYNkkrx0nwM0XtyqB1Xh_`-xol}ahbL5pqTSk1H zBkwV0BH~>;zRr=iA~RXyK8;WIrD(im6*}I=)%p7pJjCK1X2o%r)h0t@R8H9sC0a?` zxBgU`WQ}%jd4W%}#_Q(Wm1K~%KJ-&Bx_u-A3l@R zC~w&hnn`LrLX_kAj=Z*Lwr@GU)GNpH9eIB-lO;Y=`4L#xE^b4~PfOA!aum;$7H^?= zzFCTAf@K}qS9laC@1v%5ab!=4%}$B?R7z|_O7WKWr;0Q=-n#w_k|sx6P~P%PljBVo zU*wkk2`Y(?$I^0qek#YeGs^Mpzj8d?EN73AcyumjkAwIkqMY5={m6}jTJEt@_$JE= z$ZMyZqFD}S^1M!ALf;<6?%u8#tUv0FWCQHu&2FXpHk>tMxOb3M`vX^osnmI zK1oZ~8I3%{^GRB=PHN;?9g}ogBhTi%6DA_^lAd?8WS!f{Q#qfcCF}Giuk)L{PH^OT z9D{X=BhTNwqb2JsN1n6!BrRDdI`TY?NjlY$=V#v0Hv7HFJ6f_1((+u)Cuzxkzo6sy z055b?`b!Hq^3=u)9$^%IR^mk{r$%3BuhF?1Zoo zkmH)^@U+6g;-|5iy27#Occ|o8jBlpY`m6XPIlio^_1E-iay0bS`YZf2nR}{P(OQ4K zpC(76Zml`Wa24dQ)6(E*1grJOaGD&AV72}jPLfx6v!mAE;4ta&n)nTxq{nxIYW)C{ zCUZBiE9$3uX>v3`*2WXRvfpcx_!ZunsP%Ivlb$^d#52v>>^9EF6VFJ~;t5Cg`zR}1!T4JzN$2@(!=c2FjC$0raFye4oTiz$!BUDgPdTcA zTgMkH-wWj+medo?LreaCY?2!77bSmlHm#R?eG(frqU7(}rm^uM;O}cDnWG&@zU-4^ zjxT9y{l#dKIXd`Ce$YxY$49oma7{8t?JD_EKg}GEVE!qiW{xK^C4ciN%^dA)wdt1# z`Q_@UT_t}{I?WtynOc9(HmNykS1CJK`Wq!lY}AaBAI#E&LbvHrn=O{|-hP%RWwGqfIT}%t~X~ zr5YRWabwB5>nuTNv61FqIzrX-o8 z4O#YkeVW;B$oL_qd?PK5jrzFO-=s+@ikeaOJ9(PfZrS)95c$Si66-ISlX9b4%YOCJ zSi5E8I}2ss!Zem!7DKE&^#fgDAm~b4of*ZBh)JmdHj=PiVxQ8JTY_K?`QCK56RBz z{7fM!H$GVX=$LFky|yX(Th&RX_#n+rO8rD5iH)~pc7m$6go~NUzrSqAtO2)0+A4c+ z#uKozzdN7A>OJOSdMSc)Ks-s4@1drd>`@v|*UJ7{IgPdBZ#<2NcOct&ew<8W?J*foBju~QX)F&H3=l;>jnhpUPc_Sad`vTO zTP3ma!RdFTG&VkNvKI{5+Z)l{Ire)}Q2c*;BK;ke^f{uj3nJlMS+44YElFGe=9_&%n}De?npd{p|(a zQ1R;<@?C9{%N`OdJgti^tbFGuCCBFze?x_`R8O{4l*7-zh1_Z&sJ%hw0_`VR|`!Z>BbWv${5ZZ>BbW z$W^P)l;xWtI85_;ILJ3a==d!IA>TBnz?_0VhUtIoau|NeQfO!V#^CS?M;USl*B^{u z$#hJq8#Hi2!>~~kCOiB@=CFq86B;Jh4X&SFKgO$}^@ridFp;u7e^7I`Q82SKWWx9Z z>G*ngK6E;Nc9UM+z=lI7kBw7?HXI%$Y(IIz^g7zUfInCyTCL_A0ZV(zjJxTTJ4lfgvq;5ND)cCp~ z4U@*!4V+p(YWjiob<*{rPj;-YpMqZ<#ajCH$#zSW=&QBOl`IoRO{?2u)TBeP1w*0U zM{iG>P(QV9_`wYg(+@=Z>c?dR2G@^4i>B58LDIGprcOhPB&X>gUvMVT_Nh;`{jg#I zp@aRetD160%zW;<}{f7YQ=!Kqv8U5dfJ5H z6UO7$VC#0NpE{vo?1V8BrXOkhe>c=Nbu5mDaib2MG~M@O-7fr5SsWl!r^(?pXi~$p zdguQ)#}W_2?dqow*-e5V*?9@M|9G^Xj%sVciY>!Q^3M5ft&R}3^~vP{Asp2{*2(YcK01ssssbA$HS ze@)|73yHoxnG>Dgr~YfIKMiIw+wL~!!KBrHd}3j87++=g2#^k?b-Pa)J8F8pOlCr9 z9A2@bjyNzq;)YM0Fomarq4)u5-OmOcIBe9EDfnS3aR!Z=wDn=*naE#IZ-RdnpR7jd zb-^qAEgXDS2A^8}*2bq+pMM9U+hG262Kl?NS|hSi(RHNOx;j9&SxeT1T7CX0o;Iz;r&hl={qTpdsny?>ejACWR(}Njb;PGu ze>DBJ;!~?Xh5owYQ>%X*{dVG0t3QkWdg4>7e-Zum;!~@CE&cVyr&j+i`W50+tG|$b zrTEn9zevA>_|)pZLw^JDsn!3Sen;`C)n873L-DEAZ-H&yrjz*8>bIxAk@(c=ccI@| zd}{TJ^sB_DR(~-4jm4){e+2za#HUt&Ed4IxQ>#Cnezo}2>YqZttN7IF&!NAm_|)pp zr@xu_)au_se{=Dv)qjM3H}R>}f1ZAK@u}5+i+&IBsnuUbzo+=r>iOV=pzxdSZFQLDs_|)ptX+7kB8`J*V zxxkNI1EelHcJXg_==e;nZSd!g?f=>~_%e6+e^BO*{}0L>nwGi6e>oTT`-5{a&q0jm zC;zcO`MEm&FgM$eRwe~;bx7bd$7q$9y`URg_eV(KB{BF1Q)@Tt|m1G>!+X(zS%4?$PlD&i34OxLeAhR=*!~W$>xh9{{c8P^&)_y5b%whg$tzpeutd}{R%gw}GX)t?Ssai5e!t^N_vmBFW0{}^a3hg$v9p)2l}a;Vjx1zj0@YW2^C z)^e!TzXZBsfs{k7{^ih>!KYS#KD3rYt^O_075|iSsMWs%x-$6G>fZyc-+|V0sMTKvUGb2VL#_Uo(3Qcb zR{vXQEr(ithx2L0!%_~l`c0rKgHNsg>d;yawfb$LD;|+@sMT)|T^W38^*caoIn?TR zg|2v1%Ar=j8+2vxsnzcVt>sXw-w(QCp_D_d{s8F8;8UwV7+TArR(}L^#lNH+YW4Sm zt_(i4`XiyW9BTC^L02r2a;Vjx0$mw=YW1f>YdO^Fp8{R+n3O}U{^`(_!KYS#7POW_ zt^Nhj6^~0f)aqXXT^W38^)H9ka;Vk61-jx1DTiA9JD@9rPp$qv&{__)`U{~eo|JN^ z)qfniGWgW$KMk$rP^-Tby5cD*hg$u2peut%rDCZd|hg$vBp(}$=t$s^rEr(kD_Rtm2N;%Z(cYv-8KDGLtptT%o^?N~A zJSXK)t6zk!3_i8`y`i-nYV`+0S3ED}P^&)#x-$6G>JNq1a;Vkc3%cS3DTiA9kQ8~L3_i8`)1kE-YV}Wnu6Rkxp;rHN=*r+zt3L}`%b`~P z0_cjxQVzBHmq1qrpIZIPp|u=p^>2Z$cv;G!R{sv@%HUJ0e-E^lL#_To=!#dQ9BTC+ zhpr4hwfav(YdO^FFM+OjRm!1Oe<^fj@Tt{*2U^RaR(~0E#S$rpTKzAfD}zt1{EcP^frK%Ar=j33O%fsnuT{TFaqUzb$md>rxK2`t6}BgHNq~2WTyaTK%rj6>ms6 z)arMGt_(i4`n{mF9BTCkKvyi4a;ViG3|$#~YW0UeYdO^FkASXtQ_7)Me=q3D;8UwV z5?aflR{ucginpX3YV{{UR|cP2{VC8|4z>EnKv%piMw?_cwfq)R(}a}W$>xhUka_|P^;ewMYMSV6Fn@{>T@dJhBvXWP^-^V zi2Bs(_rT?So9*Sgm0JCS=5JAI69Ki0l@wH}5Q!cv2OgLe{L zhVH(z=$)Wj?;@IiB6rZPqQ^2O=vj;j<;fP2#`Db{sTZ^l#9uM~H5L?J{_G z(XF7nhnUvTt@jYW%$Pkz_cbvWKo8nW{4442E&3MdZu^Mlu-koK(R>^-c%*2qQn#Q_ zr`}Kex%e2gzvu<@>qIZY$KV4*KaY>@qeQ<#9qRpvdbIeT;$!d_(cj~vThMLM|AWSg z-yT}mw*z(P!yeGxLO-0%_bbqt=skr|P9w%*^1l?_X+D^S6#kzEV zTOC@D3u^T{Kx_Hb>Thh~snzFw&ejM1Z*~2*d!#I1k2PCYEBM_e{Izv;GIdewdilCI z@L*|zfB!dq_&=@J#Fbdrq?K6L!7H(@$t$t0hLu>?l$BW5AuF-2sVlLrX)Cd==_|3W zLsw#5hpoiA4qu6N9kCMYI&vk}b<|3%>*&9>E`R<#=C3XDPv;fKuEe^I`)lj+eRcd_ zTV@x`d2|j&otYP%@YmM$r`zSkzqYPFU9Xe=+PeO9y-r?pFEM)-_`#)^*xS ztcw@HSXRn)#~CZJu9<&rU0u*e|8^@&udVA(`|zy4 zwyr;2ue1N!y8d*%&iQNW`qTBA{nys@r|Wg@N~~+nO04U=l~@;VaIUOz{`{3#*9CuV zU0wccoWJm|t?N(s`HNO!T^CDT{9o@qQtLdt1+?D3rB=U_@u}7C3$4#qP%-bO+Sc?RxP$Lbnd(45t4N@wbK6@`peV4lyH* zzJ&2NNc;`dH;TTA`XcjH4jEPe5B&_6}x~qB}zm zeo}OA`k{R8+Z7+-!6_E|oQ`8uW$>wWeS1Myd?4}E>K7Rwd}{T(K@WaP>gD#xJuRAb zRT*6!H0!E*Mq;Sd-;jBq6~BrxMpp-2P5(KGp;o_#@u}74_Nw9oUM$q=_kpf@L40cU z`_q3>d}{S~f!4Nh`&PXqG1MBf7yZTJQ>#D9_|)px(|=jwsnwrEKeUZn{VDWck$7tL zPle9CD*hRaF}gbFztdkLG1ThMF+R2W7tnuA;;Gf2NB?#4snx%V{u|;`tA7`CZmIb9 zF~;cXpdXRI|1aZHtN#T3wkx5a;lF-BJh&10(S9f_e<{|D&YyW;=C z7^AC${+<4N5<{(i8ysu7_r-4qU1fB2&=vGQkQi$9yEE^H;^!G-bal`r`X5OQwfa2Q zYu=$IFSW+(LjPmQORfGGXw5sGF`+JMjhRUQ6Uj@h{&CQ`e~W(-V~nm2dItSZC5Br4 z3z_#n;$O-bqpO3yg8njzp;rG|<5R28`ApSk5>KuEgV0*nql^jVQ)|p)^goxp)apM= z{|oV{)qj!xm*P{a{~@&2^>4<6x~MhgGx}diUTXCn=2V)u3AE;=)|l1le=T{b)nAK# zXeYJ$>(CGFq*lKRwAQs5V?sNrHKqss(ErrxmyA!XejobZNZY8@A3#5}javP|^uLvO zYW4So*0$}-n9w$Ajj5ymo#drff1L5D)jx>-_YzO7{vpPvR{v1?q0Q9lA4fm*C$;(~ z(GTlFt^Rq?x-J(oCaep!##~DO2WcC%`tyxXt^T$2LqAiie>45iHfr^6rytrzt^Oit zZQGNK32md+m}lw#C~c!w|2=5U`w?TpenPD=pVANQq*nhM`k`;B)&GHhXeYJ$E%6Sm z*3}wX>!Q|}w)8_?)aq|Q|0iibwfY;;|5uR(}-zurAcK{%&tP8dJv!Hcd&Ss3mOKn)FHD(U|urAc9>@4YW4Sr&aEl_XvP>_9rQT*tt5t8{iB$7E%A?IjM3FW zpG3d4#89h0mwDF~|02d1T^;mg^xH@bwfeU)?>ge&#TcWjgT9YGU;M;Et^TvjyRP^z zGRElYpkJZiPGYFl|CD*x6aRC@7+oFo*Yx?4DHdw=o34hu>x<9#Z>x;14w~=cR#iw0 zwfdczw^IBrj4`@8=*{T!g;p%o>Tk)s8;C!UF-BJhy)AvdOpS$F{e75sL-F@#jM3FW zkEY*AVyM+WjCnT_|0u>7T^;ms^gBxowfeJ}w@UoEj4`@8=!@uYEHTvT-^9F|h|jMp zR~cO$^j-A%k~kJ>^`B(kYVn_CjM3FW^D97AT_uKE{g0S;Q}I7#jM3FWe@=fhiJ?}1 z6%6;e&BbpDU1fB2&@Je9lNf6CJ2G!~@jEld=<1-m(B})zSg6(S%e+0s-;yy#R|h?i zelLlkR(}uX&5OSeV~nm2dVl(S0Urys`cs*=ApT*DF}gbFqv#hUhFX0-7R{B!KZh|! zR|m~UJ5^5<0iN_>K6eGP*kG>*?1~>k4yNcfqy2|M4peyKe17e|8zdQ2|7eCJ!qpO21(H|i()aq}~ zyt|7(j4?)62fZtO?i5(4)vssXJ;k5E7^AC$KA8Sq5<{*23Cz2<_@^+&=<1+Pr@xQH zP^*6l^X@DD<%}`9I_UZIM@kH}`gb$$e&XNH7^AC$evtnD5<{*2OUzp*{;P~Jx;p4L z=pP_4)arlEyrabbnlVOK2mL+$(Go+gev9VFJ4XCg&{alP2i=DLSc#!lzYFu$i@zCT zjIIv42mNspL#_Tm<{dBowu~{lI_MqfA1E=@>hI6I6T~0Q7^AC$9!LKmiJ?~iDCV6g z{&9>kx;p5S=ueUuYW3$b@4@0<#2BNigT9PD2Qw_x>fg$|4dUO)7^AC$zL)+KiJ?~i z8Rk7i{1+Hwbal`#)8_z*gv({z=eU*9^vlx~Mf~CjFzO zE^75>8=qSJx%7{bcxv^pht|4oGBMN|a~u6*B`>x5i=Z{{lZ*-b54FZTOaC~@ORfH^ z#-~>Q4f>%jYV|*d*1EoCOsI=mW4@<)*~_|)pRp?{*p zQ>(uzw6?7~V?x`gH6~9#^aHi}eT`48{+9GZKTxZ`D|GH8X~XV}F}gbFz3HDUG1TfG zK>rl+sns7#|5Wj*)t^XzhWOO#H_$&#d}{Sig4VXpU`%KawZ_b(f4bzQR{tFOp>5Ra zpGW@;iKkZo68fQS)aqYOKeUZn{oA3nZFe&!w2fM0?x#Of>Y`Tv5&EHR)aoyy|2K)J zR{t6Lp>5Razd%2vD^h4XI z)n5ehotYwQc+fOKlsq#_*>ntNt!+rdFRn-Kajb`uxd7t&3WH{)C^_wKZcn zVaGzPG275TOMGhecQQV;`n%CTTjHtJ-`n`q>hDKC^fR^k&7@u1GQ|O0%hFbmep|!6rX3ROVj?@}6kA7$~wfeU~Yu>vUGh6af zYs`K0Ltbk2AEAG)#8a!ki2fY$snvfSTI+g?G3QAPwZ^VHZ<^dYtSpVJS0 zNUi?Q#-~>QH~QyG`PAw+T{HEm)o(%n0*R+qzm4&!)o({XY$Iy*H-px7@4=W0rA%s# zsiA+7_|)oe2d#N`WK76QtuZ^(4|%E89}TT}$1&z&DW6(n4x%60Os)QL(35<{*2b;hSw|3>CcnA)apNHd}{SyqJO!>Q>*_GwAS@0V?tfj8uK~*DaU3x z%e1bwp|vh*jaireRg#xl{SL;bR=*SduwK;a7ofGSTE>L+qSlx#=+BqBsMQ~2d}{T# zqkpx;Q>(u(wANK;VyHD{4E;vQORfIl(3#CVeyEFD z{dv$@*Hw%Obx~`~HT18Qx~SE^#rV|f-$DO6iKkZoLE}@a|0wr&j+T z^zRj)TKxy1wXR1Q6UwL7n8)bfCwZyWe*;?czRj4Bms(@qr+>fXrB?q_`k|fF>VHmu zfy7g*pKG1gwHkEQKP84*W17={KzwTT+Zdl({dV*plz3|OH>4lhMy-Ao{m_Th>i34$ ze(1-ThonqujTu1yVezTe9|4_vMEt!NV{~=UBk4aXG1Tfen7q?WUTTdwoc=<|ORfG) zXs!25#{5fSs5NFb{g9Vh{i~rh?{$n>BzdVd=0^IDiBGNm!_b=dUyKQPsWs*a`XMj1 z`Y#xtTK$*lKQ47qtH0Fv)at)O{|SkwR{tAlZQBowc~WAiHRc!kAuqN1t=3NSwt=pC zO7c=`Ogs7^FSYu3jDvSG@Bk1Crk{8hH{_*$Msz#sXGK>~KPS2~_4A^usb3Jy_k45s zE(VuD)Gvy^1NBRyccoq|dOzwAe=zmS;vY%a%^^PSS%Yoc$UeqHpv z)NhDhM7>n>OVn?Qeuw%k(VtPjE&6BbcSJYCdw02aMYpAXPxMCA?~Cq1{ekE$s6Q0# z-?#io^zQUO7CoB!6VcPD|1Fx|D^Yza^{3*WL;WAomr*Yh{SWHTMBhXGx#)jUe<7Oh z9Ok|h{WkSiqL)#BE&3Sm%_;JupM>Y~@9ZZ3Lb>K3B&)N6>|lDehn9jVt8y%%*W(e>18 ziJnT`TJ-VMYm4^pMDf8FmJ8{xBf62gt?1jS*A@K`H6M;)d4_sD(XUgt7yU8y`l7$3 z=7TaUIle1WDY_MP2hsk$pbbQKrQcC>iF!lP1F1WS-kEwM(Icrli=IGTCHgSxjYXeK zy@}|vsk?~2l)75<_0(NO-%Y)#X#TEXZZpv@P;V~!E$VKf|3lqf^pDg%M6ZUSC)ZPS z8|q%7H>Bo6LM+{=Yee^g*72ThDJJCB(4-vg5H6My%si)pS^fc-nMbDrfD*9aNFec2S9wz=jsKfYh zH}y{9KT5r`=;x?+5zVgw(sx=IJWO2gq1>ddQ6v%^^59UNnci+<~Gw#N_yp84C~T+(Dvw2<0Y< z<}RC?B$~TO?qJdE`rKsET-98IXcnEDBKlD3LqwlMJyrBs)YC-!=g!kbUq_#ru-rv` znCM5T4;TGB^%0`qq&`ygr_@J@{(<^v(M|B2E_aORwW*I4-I4k@(VJ5rFSIik0xK2P)>)N@6T zp*~;q6zU5^A4`3qXg-h2T_pN^>Wf9sr{+e+ax3+vq935XO!QOK^F%M9zFhQ&)K`e+ zGq2p0qWL^4ca`XtxSyY!FM56It3`LAZWLXhzDD!_>T5+0qvlSBWgqJ6MUSWchv@0l zH;6uw`bN=bQr{%{V(ObkUrT+9=sT%z70qWTx!XiPM}52KrPOzb{x|iVqQ9r+L4ajd zOrUdji{_sS%iSZI&mD62ir$R+KGFO$MY;P$52juqdROXyir%040nrnw9~6BA^+Tdh zrG8lSZ0biu^S-*yXKtY80gB~b>K3ATKRmZk^h?zL68#P}2OccEkDXg2dO39~(JgRq zF!z|~_SBDy?n3>9=pyx#q6bnxC3+X?r$z5i{fy{I)X$1OiuyUxr&DuK!7`Wn1<~`V zUle^C^-H4tJ=n#fpQZn@=%v)Jh~_=g+^eF0q+TMrDeg7pUK8Dx`gPHrsoxOYi+ZW( zEvY%kVHryOmgs$`-xhr!^*f>uqkdQPDb(+Yo=rVO^ySp=i@u5a1JMhpKNS5W^+%$Y zP=74?BkE5?e@p#u(f+>Kr=nZq{zmRUqB~MA6WxvaGtqsiKNmfO`U}x}P=6_UEcI8S zr&50{n)jM=--tew`diVLP=6=-dg|{*-$Tt40+vP8KZ;&V{gY_k!^!o zdb#K(xGv89DtayI-$e5si|UTlzl*;awZp)SrA(a@J&<}8(K}JEDtaGko~*Epqh3w) z#neqjUupC|sGEs@H}&eG7g9GD&HD*CzUYMIE$THy|A)Gz=pU)q6ula*-*bE!3Jb6C zb8Cs-kh-<#Zqz)HVmXMKFGgXxntC14H&C|~eFycrq93AeC;DmX^+YeBZZG;f>h(qc zN?jqkSsUm|(QTlJ5qNNy*KqnqQ_Hr7JVpnmFSbHHx_*k z^(La{QFjr2BXzat`>De@=n3ks;=fA0spt=>`LY<6Z>YomnOg^%6A&zGQFjx)0d;rL zn^W^8GAw+rw5OqQHVbn#@CsCI~pGjR7eGzr7=xeAsA;NMC zbsy0SsQZe3oO%ndpGeuuih=w;MfivEduE748cLJttV4)xZe^V9=H??OFD^j_5A z_!>(+So}k%Ia$MUB=xqUPyIiPoe8{@bN|0jNk|Bx2$`wRBuUYRkV=Xo6++riiZ*qm ztVxI`WG_MzLI@$AkbMi;Lp<5DXW#jMuk(J7nP;Ap-~an^oU7|xea=1GY380e_rUv$ zFM_*@uZFvcZ-#l1U0V0R2Z|qoyNjQPdx+nJ4-$U{A1wX`?kWBSK196k7Kyp@nAWCn zZ}GNpAMuXxq2ku?Vd8z^!^J(|zTzX`BgEzKk>cawqr|7e{lw?OM~g3m`-`uGxig#A zZSX+x{qP|16Yya1OYji!JMd8Pr*OIW2Y8scTH3)^?HKV!@NjW`c!anye5|-7e4KbM zm^;^Lb%RHV4}(XG`@>_z$HHU96X4^;Q{Zvp3*hnME8z<9jqnNLyWk1phu{;%&%zVM zufyEgPwRd7B=J}9$>Lw(Q^Ym5N_?t#Gx#*|cJS%qrtoBO8~6-yM|g_(Aoxu2k+5%% z!(iVY$H7z8oCcpIJ`X-yd^voM_Y2CiJyn3i{FCJ7k>cP5`PVE zDEp0DOt~IQUZWiST9OGvUj{7s6MFuYzZa zZ-Qru?}o1wKMY?beh!{3UI||<{s6v4{5gEB_$PRdc%Ax*uM=+q&lPV2UoXzV^TfNs zH;DIvZxkO0-y}X9o-ZB(-z**j-y%L4zEykSul`Nv9I!G5fih5cA*7ub)L_JsXdX@A&{ zm3qUzKRE#Q{mJ8C-=91Y_Wj8-Vc(y;5cd7at6<-6yb1RG#=BuZK6)7TPphwqU;6~0$|E_|Q(UU;#1 z34Fi!QTPGz)9}B=FThL0ufh+C--aI&zYjkw{tR9!{sn$S{1^PFc++$Mn*1?Uwn&_P zOdif3J7pW1$K?ZlLfjO7Qrrf9O1wwn?9&C#*>|9MM*bl9S@DsukHONPzx#UHftMDX zKMu)In&;GyftQKL!_SLPgI^F&fj$2s_(l0E;pO5v@Jr&mVIR-rzQpSH#c5uZrJ+UlV@}zb^h7enb2-yh2=U+r)2*Yr$`cH;3OAH-J})8^iC2o5Syl z+rs}5cYs%kyTR{?d%^FEkAgoC4~0JzkAgoEPk=ubpALT_o(8WLUj%$mWm+G>TZ(^%`GtwJHf)%< zo_IUBzPKg4wYW39jref5f%sT>Tk)wdzig4#40wC-^>9P+z3>j=XJB@qrnM5ziob>% ziL39BxUqN(IK)lhoOn;TiTEIRNAV!Iskj2(Nqi36OnfE0v-mc+xp*ne4&Ag~fm?__ zhFgk%fp-@&Dcn|Slcu(;d_&>UCk58Os=X6?d{`g3fX!xa;w9bO}7M~06BfcE=v68M# zob4bF=j`Xu>?^+j?kHXecM?Ac`?yJuB+ho0hx5lxdWvR0`B&gB;y2*^#UH{xuF>km zS$@eTEjWKHqpxV#0iV{d@B!jK;RD6BvWdHkH->wNw}uZAZwDVNZU*-h?*Sho?h5x3 z9|rdp4~6@P$HRw;C&NCT($vIRo*YOE&L2qqIJNj~0Il`}ii>cVh}UV9*xR!SJWzgf*xR!`JV-tZ zd)sz_2g~mUdpq}md1553PVi9i!Em{_H#|%{06s=M1RgFP1CJ1ohke@5gpZZK1U^oD zEj&_uJv>Uh5FRal5FR6b7UoHtwBCS^7k>bc6Mq7a7k>v=h<}1l5UrCyOtK z&k$b=PZ7_D&lKMYPZd7^pCx__K3lvDK1ci-JWc#Ae6IKt_&o6%_+R2*;OXM(k@$S^ zhVTXAy6}bKZQ&W>fG-m70$(g{2VWxI7rs<{0DPIaH+;FcAAE(l9G)p24bKvv2wy3l z3|}Qa7oIJ?7`|G36?~0&9(=9%Hh7NsUidok!|+`3)A04;m*9Egx8NJZAHX+?zkqKN z{{YVy{|VnLUN4vU7I7W;R&jlJfj9%-Cf*6YUEB)3L%bKfP}~K+Q+zOdm$)x{w|Ee| zNPH}Ok9a(MuXqxCpLh!FpFbDC{uy!=yjaaV_EQ{wDH>f!wFGW87B5-$~R06!w$0)A9nAAU^S7=B#5 zBm9K8HTei>dNUIqJg zupcJQzkU+Vzkc#Fnm5(|0KX;v1%6vxW5>iR#p}aIiZ_Sf5pM;*E6%|G5eK|V+!B6I z+!}sg+yVYT+!_8*d@%fxxHtTle23NarRevIA{L?&2RE=!M}^&g^v?| z2LB=c3jS04EBu%EPuTxp%3BY!)b72gGW=A&=} z&3U@giwVZWzlFC`|1-S3`1i!woO(EaJhAFKr>2Sg z#_*2f&0x>WzzsF03A}^2S>kL{^>F?;W4qGqB)>P@OxzLn%wBLtbNa%(;4!U!iL*Pa zhx5lD8%)z&el)y`cpU7RQ{YCLGYxJmo}M_{LOq;6F4@I2E#y=1hcl5ucJcyN`M}e>}7)G#%tGfcF(&40jaIg?W)|TJzzS z;suGboz%eju@ct7!@uxGvu@2WW~;N8S46KA`qhx5lzd!J^1`LE!v;&0(@ z;=kb5nzPO>Y0d%iaQ;|o8zioFp!^nacX55#b9RK=XwEKhTk&p*vpv+q`D3i@PIHj_ ze(=HKZm?$_0k_kf0r2kPA&Ij+)x-H?uZ^HNME(T0mv|EFnPUq!e3_e0Lk4&7MDi7z6cQ=scEcub}+2XOV zXHJHX)SR>7qr~SW&Yq(l&L0PF2F*12+3>mIIk0CggwK<|7d~1uA4r`2mpq(5KHgHA z>GI3q^To?y&s+uf*PM^x0piaRXD?6>=Z~AWhUP-~-{Bcz-bf`svkrWb{Fd+_&D=V1 z_F{QBe>}a0G?&OXgD(}gfW4g^;K7>H1s)F?;dp&6`m+uE(Asz^O=2&>B z=1hRg#U~}s&QuTQkH0sWW|sVP_)75%*fZzA!!+kc_!#jmiL+O!hx5nfTSzloehGZF zcq#0e%i-ag^Ey02{8r-ZHR|E~@%mQLTr2+tJV(3+_RO+YiI3Hsn(%SrT8XpQsfY8& z@vB2KSH1y!y|^LlnJwUvn$rdzCEg=(cAk1Te|*0VG&jh1hi?@3ggtX0e3Sezc#LKq zn>agP9?l>4Z!FEt@~6PJh$q9IIRhT6IhVu7i?2+ay;VJ&KOW#5ng#L;;M>FtVb5F& zkJFqd;ql^U6X%bQ2j`DVww&g6%~=WGAzlT0AJG@^Lisgt5ABEf9lle(taW1VFRBgS zC0_@=TigI%ByI?MKTp9iA;dGjaa7E^z*M8t2kHsK0v|{E&DS?DOXa_+j~*VV^(uz)R)thkgD$0Y4)D z4D9pgHTY5aH({SYAHk2we+v8j`2l`h{ukKi&$?|AKOw&X?DJ;}_(}Qtu+N_z;iu$x zg>Tk*(hj~=+&*#kX*F>Em?0f$o{>KYepcKI_G|VARI=s_Nt}I74V*uI$OxKc@+ZL0 zizmT;z2CW&tT`9LcZe@ZoP9w(oIkF}ESeYPZ-AGJZ-!qI-w(emei*(}GapNweMKJ5 z9|PnWnpfptgI^QB3BNA>1b##O9lS#P6YTT6M%%>q>U*u9IDc#nIDZU^jcMN0-`yI1 zOS~QYwzw(0QrsMVN4yvOuDBcgA8`+OmG}twJ@L`-`{EJs2jWqQ^T)@4bN1tCK2$RS z{zyCp_G!En{#gDh_!IF$c(r&L{HgdA_%rd_@aN(`;4j2A+9m!{TpRvMTo3+Q+z4JH zZUKKIZV!Je?h1b=?gM`>9ti&+9tr;_o(TUWo(lggo&o{N>F3M_=(4m4f4{!5J?z&vc7Xlb#m=x_yVw=>>j}HV z{Ni$2J>gdR_o5HnTHF`*>uvhM@2VdN`}H$J;r8l>!+zb%NVtRiSlF*`sen7nPlWw? zl~drZ@{{5G>pI*TCMN{5{-A{%1J9uNcnBr!%Lln)mnCfSby% z4||_&ZFpz-I-uGMyvZwPz;XCt_cd=uFFFq^@<%eR2NAF>tP zUY_@S%g?q{mhrRD>B-~qmEbRSP74YHm6JhUzsyueek@A!A-j6gD?k_(L_P(I$@F4ja zu=nR&3J;Z^345Q+Z1@=YIk5Mi%!7}WpAUQA$O3qj{6g6KHx|KT z-|t~R{{0#DW7yx}3)GiYPwdB`HQgAJa92 z{kW_Ve2w}hupe7BgRhfs0sHY$D|nuKJJ^qL+QWW~(*Zu-*MHcLQ@X-_tkE5wq^2i4 zMO=B@n}_uCwlCiIz5Bs))eMAvpK~be`<%n!+tl#B$<=%xaxCooffcat2Tp|VRDTNm zicZ&L*!R1p!b{Xlga55NzP16s#v?`B3v!%E}`X{8? zFmc25?W_GRJ{zu;t`uqA1#c?mE=9F%#Cz9H+*r) zP#pXo%~Rr$@Jr&m;J3v;!yk$F=66!Q7EgtL5kCvBlg{9@>hOCU8;K8tIVe$Dv*8`Y zmA?bhOx&(P@@>VHzbmn?cp1LCcxzrif4F!cJV<;yJW~8Se4_XOUUNQ0JQF@&{4qRJ z+=|zGUoV~l-!5Jb-!HCw?f2v2kqwjQ4c5|n0Or6&X|2CQ;*Z3K!E40x;NQgG!ZmAD z_8l^bHx*w1HxRFcbK<7i#Jh?o!h4CIgu9CCHcH%EJQ(gTu6%ta2Q*6SPke>AJFgWy zU3_Kb>j}lH;mgERA~6RvO6%CBi8Jd~a*dr5w-FxzcM#8n4-|h4A0|GmS>j>hjd}iS zwzw(G!GzM9l+K#W`juG8e!8`6GG2FYD>>Ypi`UJ)3=TIJ<2TeCINV%`Pq#f59B#PC zGaJdn;pQg%ciJ|XV?eMT#&1^O@XwIP@ZYP4!_C|Hbem+s;h!@f;L~l71&5o@@aZ)suY=uv^ z0Tvu?c(1)o!%AHShZ~N&l}Xoc790&Lv8*LNU8h-axY-?_m50O4zW7G+aJcD)Z!8ao zn?vyF`pSaC%@O#VJk0A{S%dIR3LI`m;L~frSa7&G9-nRlEST4^u_ocubv@7FhMQI< zUGG_NxH$`-p1)_o;pSiXbbDaI;pQTIdajWLhnp+#E#%>F!?DOR>3In$aJab-pY~g^;BfOGKJ6=E!Qti!d|P=q+&qtOCl804*YLZ` z!{O!~{2uafxcLabr#u{PzQnhehr`Ve_`T%eaPtR#Z+SS}aO}0rKJsw5*$Cf39u7BK z;P;h>!_Bt%j`DE0X^ihA4~Ltb@tx)2aI+hJKY2LZ?1}Fp4~Lsh`2FSKaKn%3Ojmh0 z+#G`MCJ%?3!|?~m!{O#={DJatxEX@)E)R#B5%?bRaJV@he~>&JZYJRmmWRX58Tg*^ zaJV@ae~3IBZZ5+2l83|1EPQWyINb2hQl^hQ9ByvLA1V)r8{Q8wbGSSlZvKt$D-Va8 z$MHwV!{KHb{z!Q^+;9xN%u(`ixOoTPPaY08AK{Odhr`X6`2O;6xcL!3KpqY^f8htp z!{KJVn#m86hr`Xr_`&jUxY-QDk*hnrdW3VAr(%*CG|4~Lsu@e}0XaC0~QM0q&eEWuBdhr`Vi_(}3`xZyn+ zGbhQz;f7s}nUm$=aKrAx%qjA4xcLNssyrNSczf^6Y4UKm;VrH+r_00PhR1oC$?|Zx zVRv5U40$-*up2HjMIH_}>^{q!DG!I6M);}naJXT&ROT#sINb1(ugux+N11cv z;c&xln#?qLINY#%C3CJk9B%sJ&y$D4%^>{0c{to$hQCN24mVfhFP4YH&5ig=g`Xu4hno-ZSIWcT=5zd2@^HA}ki?nU@^HBM1AnzV z9B$TKKly9q;c&At{#toB+-!xPBM*n0?eW*i!{Me0ey%(mZd&56mxsg6?)Z7~aJcD+ zzd;@jHwWTxl!wDjZ~RU2aJcD*pDz!Gn{xck@^H8rg}+4}4mT6?~;eZ4Tn3)+$|4>o5%5s znewq8^;c)W_ez80pZaBnA=6-oN-29AxKpqY^)iy}} z-|}#{*#N&p9u7B~;UAQT!_7AMhveaKlf^$Q4~Ls(_@(l2xM_`lL>>+|d*L6Ihr>-5 z{A2QPxH%aAxI7$g4#z(s4~Lt9_$TGza5Dn`lsp`6j>kVO4~LtR@XyG@;pR;Iv+{7b z`4|2xZzM5nHBPI zxLLPW@^8w+;btTJTk>$Y*%JS@JREMe$FG!!!%YtVjyxQ0THxQ6hr`Y8`2Wbm;bvd_ zDtS2E9DsjM9u7CX@$bvS;pQm(2l8;Z8H)c<9u7C7@E^&;;pPPV$MSHvISv1bJREM$ z!LOEw!_9^GPvzloGZX)rJREMW!+$Ohhnt)6U&zDZhF`nQd?^oy8=hv!d?gQuo5%29 z%fsP@UlYx&k%z<0Yxr;E;c&yRO=iB8hrB!{MeczPdadZU*Alk%z<0aC{AUINb0QW@cS^INVIc*OZ6D%_;bw zbUwi0hL@jaHdGIXpEH_`uPqOU8=kt$Y$Okd8=kt${H*zKxLJzdOg$Wa9_lIl=JIg3 zS&pwO4~H9GqLkS}9u7C};kT5B!_8;-t>ocw^A-LVZ6_RVc-cy(fqFRn9N9+rZRO!` zvn75zc{to`kKbM%4mUY`LwPvdw7~Bm4~Lsp_+Pc1aJcD?5A|>~7Wc;I3LI|w;hV_A z;ieqFqdXjLM&X;v!{KHEekXZ2+?<5}P1^~F8;*mWX`vntKespw-%=h9H*@j3%ERI2 zMm%q}kQN+n9>TX(4~L(xdS^$xLI$bf`s5hr`Vd_%8BrxY-fEzdRgncpu43 zS9v(x?1}Ft4~Lsh_ygqOaMK-spgbII4#jtuhr1V2a~4mb7igXQ6HvjcvJJREMC;)lw^;bu2{xjY{4w%yxH$+vTpkWLhvP@c!{KHi{#bc9+>F2F~87Y1;c&Ad z{#1E5+|JREM?;-|>N;id!rOnErmbj44Vhr`Vw z__O5UaC0R7Y7F%41b9{9By92 zUn&oWn|JY-$;0916a3}!aJX56zd{}kH^1O#%ERHNdY$BF$;08M7XC_kINWTGze*ks zHx2N!<>7GC7=N`q9B!K9uaSqtO*V2Z(+fXW9u7CWk3;5q zc{tn*!OxS2!_7$i4f1ffIRSs8JRELL!`~zihnutU^X1`ib0Pj_c{tq6#NQ$hhnws0 zx5~re<`(<{c{tqMjlWGE4mV5ix68xf<_Y{A@^H9$0l!cl4mWS$@05qb%_{s|@^HBM z6o0oo9B#hFFOrAD&2RX77GC55H6%4maiaN95sfGaCP> zJRELL#6Knvhnvax$K~O0GY$WQJREK=!apewhnp+$PszjKW*+`&c{tqMhJQvL4mbDU zpOuHh%@X``@^H9$9KTE+4mZ!^pO=Tj&FlCV-H{0ezE+%&_#DG!I6R`|E% z;c(L)|F%3FZuY~kl!wDj5BxjwaJV@P{~vic-1Nt7Gi8~!_aINYqWdGg=O!{Mej{s(zD+|As;9u7C>;cLjl;pSrey7F+i;eCZNya{kxaJZR^Ur!zmH@D)~ zmxsg6-S`dU;c)YBd@Xr6+&qroP#z99%kZ`3;c&xy7-cq+hr`V~_>JY^aPu*K6L~n? ze1)$g4~Lr{@texS;ijx^@|(%S;bsFoZ&nC7rapcPc{to`kKa-r4mUac zR`PJT*#*xp%A^H{n|Ap6@^HA>7r(VU9B#Vdw~>d#%^`Sx`6ewm+#HGDRvr#FL-5Omn@8}x&@U}G-0=QWnO)Sw;ontx58px_4mY3TTgt=X<{SL3@^HBM z6~CK29B$UxBKcPGaJZ?3Z!Hgpo6YfU7F1G`_56<@bfd%>;ZW^>B0)pM>fz<>7F%2H!^>4mUsJ50!_*P1%;oA0`in zoAvRB%fsQO4!*BE9B%62kC2DM&35=B<>7F{?~!DVl83`hb9_H}INY?wA1x1un|<*8 z<>7GC6+b{84mXG32g<|Y<_P>Cc{tn*#1EE-!_9E~5P3M<9FHF=4~Lsc_;PtT+)Tj_ zlZV62dH7@G;c#;?ez-gwZmzU4%>x4~Lt9_!`=NINVIcpQ|2@Y2wrI=M^~IOvC?69u7Ab;it>P;bs>8 ze0ezB%*9_I4~Lsu@E6L%;pTSyy4rp?+&qcDR6QJ*h;4{Pps1xY-*&PaY08UGO)^!{O!tJii!`794H{<8M(9$Iapq_*)AcZpPsk z$iw00Wc+RNaJZR@zg->`vU)gP5}$#8rNH6lJp8NjaJb?9A2YAX!{KH& z{&jgc+|0wjArFU}`S{w}PB`2w#jjKk$J^qk@b45j+$_hxD-Va8H}U_Ghr`YL_*L?7 zxcLnKo;)0GzQS*$?S#Wk&8?IFSUnsci8sQ3Qs8j2C4RL$9B#J9e<}}$n+)%9B!82|B{Ep z%~E_FZ6_RVR^V%_Q+Ynav5xpZ_;m{$ZdT)K%ERI28~l3maJcyuzrH*iZmMsS{08!H zxT%TXRND!Mo9*x$tB1qKYG{n#L>>+|&GB{Q;c(Lyzo|SNZaUyMlZV4iSN!JkaJcDS z*=sxDa5EHNPdywyj>K{J`toqNslab74~HAx=QOj8JREM$#y60M!_5WwZRO!`b1{B% zZ6_RVZoy~N!?A<-PJFh&;pPE+BY8O7Jce&94~LuQ@F5R}8{TU*laq(T%}RU|c{tpx z!q?UI!{O#<{Lbp(@NqeKKh{ihc{tpx-yr#2St~*jIcBzEgq2&1`&Uc{tqMfZtCZ4mY>qyU4@g=3e~% z@^H9$2;Ws64mXeDx6<~*;pQ!T5A|^P*evhi50Zz&&1d+7<>7Gi9lobL9BzKYA0iKj zn;P3D-%B12H?{G-<>7Es2VYOy4~Ls3_`d4l@bP4J!5<+HhnsfzBjw?6voHQAc{tqg zp0=5O@^HA}{cSTx%fsR3FnoP&Cme1@;|HsUW03d+{Ez~No73<^<>7F14!&F-4mTI# zhsnd?W+wg^c{tq6!4H>*!_7SW*4lnJ+$_P5QV)lZ&+{05v^*Scmf^?9!{O#N{8)K7 z+`NN7ULFoNALGZ#!{O#D{CIgd+5D&8JseZS1MpJ|9Bzi= z&yt73&GGoN<>7EM34e|}9B!uIr^&%m50MkQ~dVYemLB8 z#LrU?$MxcF_!|lwZhGNwl!wF3QTUtW;cznqKVKdWHzV;k%fsQO0)LA<9BwA!8*2OE za5Dpchk7_}7hi#2Sm1Co2Y;tL9ByvL-z5)+n>+D$%fsR30sJC)INUsnzegSpH&5bs z(DuXO=3V>)>fyLw%zIU5{$1d3^A&!HJREL*!apbvhnv6f56Q#fX8nfAbFizl;BZqX zab~GJ9B%63GunPQ+%&^Kp&pLM#k=93EO5AKkAF%Y4mbPZpO%NiO%MDt@^H904F9Y= z9B%sKpOc5f&0u_1+Yg7Elkm&c!||f{4E#$44maoFUzUf%%_aC(7F%5Z_4K4~Ltl@o%e#<1O)v_>~0?H!JY($iw00J^Z`!aJcyt{~vic z+`0Da-xLJ*FqV0#nO&Xr|pQwk!$6Z_xzrH*iZtCDS zkcY!feS9r>INa=j-%uV7H%;-i<>7F%D}Ez+INY?s@2KsE!_7hX&D6uOsrXR*<^>Kn z{qc3>;c#;dehYax+>F6*DG!I6iTJJL;czn$l5hr`Xw_?@)-Ef0sAL-1|n;c#;VzO6hQZU*Dq$;091SUd-MObZS-qwzay z`{8hNHhypQaO@>MAHPq5!_DRR4)SogxfZ{#JRELr!grL1!_7i`CwVyBEXH@1hr`Vh zd~4fhq4~LuXcn;W^ z794K+;E$At!%bg&3vE9fZpPvV)To>TM}P5&_<;ouHIoB8;EsfXh{@g4Z-1r9fh@#o9K z;pP$i1@dsXc?N%>JRELb#?O$4!_8axi{#;O^De%%wjT~RKjJS}565NVKk!!+INa2X z7EM7=OJy9Bz)o&y$D4O$Gi2c{tom#J8zg`SS-3H#6|J zs)yqi@l5=J0*9M9_}k>+aB~y>c6m75EX3a-4~Lt@_=WOtxOoJBr#u{Pp2goK4~LtV z@psF^;pT1pB6&F6e1N}49u7C36wa@^HA>3%^tz4mbPZACZT{O%ME| z@^H906#tk!9Bz)rKQ0f4n_>7T-P{5$e+xY-N;t~?xWy5RpK4~LtB@vG$FaMKt6 zo;)0G2I1eAhr`XW_z&daa5EnNp*$RJPQrgA4~LsG@E^;=;pRO2C-QK(xdgvj9u7BG z;Xjp!!_D>h&*b57vjG3OJREKo;lGfF!_9;EFXiEI^924Yc{toWkN;X84mYpi*T}=+ z<{kVu@^HBM2>-1-9B#hEeVkaJX4_$K-#Mhr`WA_@CtAaI+=; zXL&f>Y>)p%9u7B+@xRK$;bv$2Z}M=sX^sC~9u7BqoJRELb#BVGQhnp4n zP2}NlvkG5F9u7C3;y0Ct!_Bw&&E(;5^BaD1c{tqEXqtRoc{to`gy#(n(t^XymiR5@ z;c&A(ek*x6+%&=0lZV4i3w(WfINa=x-&!6HH~ZqZk%z<00r&>;aJcD>-&P(DH~sM2 z$;07hAiizQ%F_#nn~C_WdN}-^IH%(q$;07h8oseS9BwYchddl^X5n-4aJab+-$Wh` zH}mm3%ERGiA-<_R9Bvllcan$0%_I0`@^H9$2EVgB9By95H7GiE54mB7dYH(wo~$L)x*(7Tp!=Az~P4XY{~2{4~Ltb@O#L^ z;bu4dp7LjZZ5#@q3wsm&5ii(>ftz0d>g(;fy2$c_=Du(aPu(!V0k#) zJcaKm4~LuO_(SC3aI*s6OCAn4EAe}3`{8i&J^pa@a2zK74d1uG;ih`C+Ah<>7F%7=OGx9Bv-LkCTVP&9nIN@^H9$1z#Z# zhnu(YC&7GC7=M~P9By{TpDquFn>P5#@^HA>2Y-e<9B#Ver^v(MrYHVPc{tqk z#ZQ%o!_7eaS@LkW8IC_&9u7ChsFOY}B&As>w<>7Gi5PpU{9B!V%UnCEQn-}pH%fsPj1^yCw zINYqlUn&oWo7MQsFX6ZXa9RqUzWaHZEH0((x+^uz&U$H|4-yek=HRHSN-;>`4XA*>|UL-xEGXO`r5BdscyS_QPr1kA%-r zGd6w7&M0uso?lSz~)JvRw zp};x&W<`Aqc)6NZ^lWTeaL&GKQQsYYOHEJu_Y0h}A6nE8hd)#^lKzVV=j=zgHOW^8imZneHS_RJ8ze?lte+67y&C2vC z%Nd*&oU>n(INyH{Z>i?z^eMYtfphk?)2_yRUk7ferf%Zwjs?!yH!13y!8@sGLC*!1 z7M!#1T-0}k+on4)Gvkys#!umqQE)(m) z-4)39wc#_=)JdE@ufRF`Mn!!Sc)FTq^p_PlXWyZy?+jm|rYrrN0_W^`*qq-U9^zJ; zt7a(utp(26^KdBN^U$T*ZEAR!k-fLTIeYG&=6mi+R^tYg7Iz=Bj}$m(zp$uZ1V5%` zG5xXv=j@ji^~>QG)VxanMuBtotBd+C;5XH*p?|-?IeQLelHYy~_fYLaHT-IQ_R9k2 z>>C#KysW(1*J^l)ZI&BxT5!&uT?YC2{FtcrtD4UA>!d4DT5!(3Z&BY5URTXP`i%>m zv#%)XC&G2qoI+o}z&ZOFMg67lHfmenC;c5Dqnq=yxe_&i?75ei__S&2suZ z3Y@e5u&7@Rw^#E8{eA_`*_W-C8vnel0q?J7{lwXx1wy3Xw$E%r0e@cOK_S1{{8SrUpE~P)G zz&ZQ*Mg0Q!Tr~^nFD`J-eg#dZbY`cu624T;D*77>oU^aJerkMwvJQN+n!1Uz+ou~@ zT5!(31&!yof_G5Uj()cS=j?~l`0^bNw^lQfey;-O>?arXQ{jEoOrz(AVp?#{es)nm z2R=Z}Jo?@R&e<<6>X*QWs#!`uq`*1*SBv@;aJib5^s@?_vtLuxe-B@!hW850UQ^(l zeeDfWmoU<=$K7P`uia~?Z=ZbOqJUmYoeA&c}3?QV}_QO6}f}QmXGc|;-utCV!lu;2aGST7%*b=*b^!S zj2$#?(5T|CRZj0Ta?JSu8ohscMb}>clO;=DmG4zPXy~LaBL^K*)fan~j~g*&=!hXB zDkfF+x*F;$J|#@WdwGP3uOK_mb7GDzRPTen_1X}tzjjHq%*k1^>B zqdS*Zln(*Amrp3K@`O}=vrc2iao!O28NSv{s{CHv$DFv$s{W9ehGXx_JKan<+_GkhOlJuHz0HH1dQh zukq>DIHF=e`pX0KV`a?f^z&`di2uD|rE5w_TlH1CB&s}V>1W}Ps!rSh-I@mU8Z~~v zTBiM1QRRh}AJSvL9=+E#rB9Vthyi`79@wYKi+(_#R#l#cKCP?Ny~mE(bwHOfSBT1M*IKWj14_cm&0O1ssZk>ajUVt&XHxnX zIGyh!N0g5n(0kOFF%`qpX)7OA>|8!1otp9GRb=V1;oARS7iJaTdaYT>MdPmW zyLK5dZhS?4150lLYYqSB=2To3UxYs8rGpRF3FO&(vkJ2<0}RY zIqtvaj2tmKe=F4A9G31lVn&P~GNJjPii&X~2A@!o2LJ!BZBm+cU6<(*PTE&l@>jJt zu&itccY1XGza2AJx%83lnwR}wUCY#ze&0sPP#ye*7U}&0`Xs(Rec<`1 zoj&$UAI0gywQn^=M7KqZ@~UF=B0-wf6u!xaq+yS=^@J=$>mpm`_4wHO`kg>7#fa`?WSsF2C~g?oFb&<7EhukJ9IScW2__@4Ga8-~8plT)xKleIb1m z&tu0LKP#iw^kn%5##oX>UBM}GU7mdyKgE!)?)WZoBPURTfK`{(C%ESc9Z z-9YDZ#q-K<-(Ds2TGgyxRxh1UwvXph^Yez3%zJdBsxOcJCG)!1D{NmnT;SjHPAQqU zI?WsBZR1mZ`%WyGcWIh8Fnyiv!F~xbD zTk?IsPv3WB`a0it`}C3jz7Lnox@ww8H4O6Jwsrm%fG7R?)9GVk)W%o|-Y@06l>=_Pr8Z{MXQ z^PXJGybDX_tuC6EUN-Xgyn9OK{kWESJat)o{`F~4IK8_R&Es&j#n+cex816)e=n8H zTUs=)WzoE!O6Kt%Q&r9Twq#zjZ42ACThY9F=^ygq?c+V7s+zZX>WWYA%%XX%i{|ZK zGVk8C%;TxJ;(0Z;D{NoeqIpM_%=>sP^A0VUH@0Zr?nU!XE}6GwdJRccr)&D*DF-g_nUZd}Veo}(>3 zy$u@{wr}5}c|2uPe0_O+E%W{?nK!*?UZ-m*#7M1J3l6gaSDBLgEKNWm0?&nmL%;PO;T;BVA3TR6Rk z6wPZ~GOuHrSJn14OkMH3B}Mak7tK4QWFGI8Q`Po$FPYb*QDOTIEt)sJWZsQynK!y* z-lawJ4lkO=%NdK$zt`6?kC$5(pWd>@h3(5f)~UR{l+3G{?vz$_dUCfrzYvpRQmU+*W%v(`3@96Y5`Ce?_CneiAY%TNNFPYal3a58K(Y!xP=3Ty) zdB2p*TUa!2P|-XNEnIwgJh_&6by8P+{xwK1O6K)RuiebwK29u}_eROQkJmEq<&t?zi{?!#n)hePye;cjeR=#+ zGOt;BV3ps#lZ)mx<~i&1=XCX|TwT^OuVLznuP-x;=AD}UCST*{UyqV`6V@`XYstJC z>GiAm?K{0_-h`5QH>P=2U0;qbnK!m*-Wf&nDqk~@{+vI(Z>?qft}2?PWs4S z9+j^*NPkXuXDiprG_Q`CPjsw$8~pe6;EU9a%YU=<^*nB#y5jFUe3$BF^U@WF@0;J} z$Ms;hl6n2Nt@?B{FPT@nW#M#8Pjm98qkGA`vUHr`M(OMMmEXSoOXe+2^ZKNS?Ykg- zzuxx zU-{E}eaXBp(!7Z&;`CmcKJusciIREC(mcPMy>euJ-qMnJLwBoQ#%to4cX`pgw@c>L zY*@HWF)%;x$C9pg>N*m5<-2c6zVD*+;`02@gITG~pN zU(e6$U()q$m-Zv>o&v9YcSOneoii})mroZ6-*;~M$ba84CG$>9|A^1YUs$Qj&pWnc zUZd-)m(5K7_AqZ=(Y#YVFMk``s-mpyM|OmHF^`XFCEZ4I{`>ibe0NdF_U)g#;+5aN z8>{H9ZC)tz-F2xezC4!PlCFR0jsd6R=Jb(2U+ycJxB7*28K>)Re$lb+Dw)@$;W}kw zH`csc)7SI!9#37mILB80rS!krE7EZR^M6R6^V`SgqO-rOZ|W94T~>BS^0m?xg?V+- z2b)rK^(b5ax@u*Od4S@TpT||QxSQF0owC={w&Yj7nl5!mA%z5eQodbEz+D0 z9sVDCZyq02ku`qbPOs^N&`D>-fFU~&A`mti2x}rlK!yeel`(`Y5DZBONd!iHKnQ`b zh(Z7vWEzG*8FkQMQ3vsNYOg*tAivM^zJI*0`6#!( zb*j#(z3SGzxBBfvhrr($SP`+HAGGGdbNh4{_~SqC==#v1XS+M!Pa=8-W@Tl8eJ_Nc zI}F12CpO{#Uv!$(7UB*9*~x)mX8_2uCq4eyz_$-A8wj=semr;ez?lOY29}hZ$u22r zhH!g`o`LJ1dJ1%|8aTkY7Gx#x|Du6;%RFy%cO(q%v*g%d%bLBA&Ut@|FZt6dx>sHM;Yj!MeGgA%JPBxMab_w;Do_@))|ha z&qbNYaSwJlgSu>muf}#{=*6ZnS*gz(FM)4;lg;qhjPosvGV48d3fI zQJ$Ke#>I=?btl%>%rqiif~L5jDcERPn3TBVsyle!EVpyXBYk%Mrmx$YvN)-8OHd!{ zYeSMUT7tfJeG~b8WFM%4(U z&+Vv8+Pa+%MbVn?!Q0hbw%(8RWK|w5_rY`)Vx|@MrVjIjQTM z>l>H5ZZAlT^7%Q!Kd(->tfio9UTULYps!OKlfs-qNvTd(lHtsTm}V8z4CS#PW!Tli z$eqTBf>+mzczd2Q94!mo)_t>t&$XIIEKhBm_f!mYn5ocfNZq;ycd_lW48PqF#twEb%DtoW8efcUPZ#^?pxtYdHeQN|O#Ivak>!gEd~2G#ZpWTBOU^7v&ov6y zI84L8njW#ZVE*vXDqr+YFZd@eG71}mO!J30zNv~BS#^NMS#rjlwBIOSM=vfm-4#057X@KY zhmI~>YlYHi?_FFl{Hw(Uj&BYW42S<6mlhWfhyUm2nC>zSoj+v$@VdL=H#@#xRUd0i zdSg|6gb}}gmECPj+FxgjY_-}W2TyFRv%2lxHlc?LbKW;r)kPbjuY1>#GN~)hY)tFi zbU~vGKg#r@gr-Yc$V5L%_M=okO82AAew5)ynSPYe^sS#gos#`zseaVikJ5E=K#vnS zAFjC_-)a8bZ7u21m=wA*NR#})+*Fdj)1f5kA1n7X-Tk@pPfKj-sZp{YrTS62A9WT) z?Pl!MwInw6_S4CUgv{8dB-2haH`UOJvn!jm1fB37TUmQDk{Om_(J~?&flXEA_uNvVmg}^-99AdOA zNy^y!ZQb+e6`0M^(hSl?5V8- ze6{Zx?z&d@=tg)Q{`@M-yxU&1?lTrNS`9L82irU~r;Sfz)?9`0*085p4d2Cm4&Q%v z8Dwk%S!`P3+}qQVTRJ3d-e!!JBb_}ZFU%8cocBa+^Y(!}jXzl5bnwpl=7T||9LPg& z&!U|Pp88`6S&OzA^=Y<#zBL!U_H>*1+0*a$^{jcz+vUt#aJ6lEw&XxxPxM)DxV6jF z1ARY@+j)hgqaM;h(*vJSc`iYEE}n6C8sGBzqF(l9ooO=aa)`7p_m^MM6xZ%@_?nL; z_@dtTE`R+cl8kURr= zf4RK-$4mA_(Kyze zr1UM9R4uvd4&Dj1(Z+2X_T4I*83%`Y#?pwFrBITwWGW)++ zx6L?IV{hJfr)SP9M!3~?X}|GlbmP^uj4hYaG8bN=xr2uorW{Z8E3v){yJATz^TGcl z=8>9u60>%ZV`$C(F`i3n9O2eCYxYn4G@_BUH+WshQ>poFGp2l5XQp&69tVWl*CQD?&(Ar~Te3zO{ zo`;Xcl2G<8klM!LO+M?gj?Wf1^-W9Not@MY4BzPm2PJI|hV=`C>0~wBuy*)7$7Ai( zQIvJs)@?@8*5JydWx-W66qFbXB|^BDj+mL&vaK?(w7zM?Oe#r+mC3>-Gt-{iR!RD~ zr>4$D^!#0}MMy|{^OBi9SbMpb9h{lA{S^q=>{tbs)4bcN+;zeIpvLcX+XjtqS!8e8 ze*o5e2SFFqLrQp-eW#I@{>%#S|8dzA;hUE5%>E~=n{1yxweO0(>EKM&zS5evRoR<@ ztCSCn0#%;ICNJc;%CxVf?s%PPs|QvFQ|g-QeAcFf;Qfw*#UH1&yh6*N9`Zx-RS%^` zuke{?`hB#y_{lt5D6-s@@H=e52LmS&|jzoO-WYK7F2_(Wqk&56&tKcPE} zCHrV@R8B}g_SCIT2tQ~~afW+Rc5WgR_pzsLLr1rD9`vxvAYtF*gkA?V_Ct=R?oQc0 zWKPJ~OIl`Q&ZgkENqN~*LX4G@J+=EBp49ybBrS2Do0|^8{162t^@_1HWoIM_Lt2<# z3&Eze&D(-t1PM*c+#R}Lyff6E(hBW*o5j7T^@kpf2lu%OULqwABN&V+FuI-ax;}pT zW9Tn!XidO~<%v4x4gb78wZQ?so{q4ds1LotZxgMcDQH6Df~dNyb=IWFomWXb;{PnQ z;QaB0#?=L$HT%8c`&WKU{E3`cUsc!oV`gJyfe&>5;h^i|Khr*EhgA5Y4tYcW7g9j1 zOlV9?-*;8F3qG0qcq*NtY00e)t99!WNv@XAm*8%>PaDHnI^Sx2eH+gkXt1a5`=P!$ z)bP|Ei-ovX%;P(Ul2XrjGAVp_Xp+kry3}Md&)H^`~n%>SSI zXDo*2q4yo0%FC|ct)7_oy{5N3hH*a5Yxi0VssqA#*1~KQW}FZHm-L|_eJk$l80W2r zUwK#n<&^QHyZ*wDJDynTv71*diZqf^k2~VLA)6viu<{7Dr#1xpY{$Gy&ef;32KyH6 zhkJme2xn;5?NA<}b++nNNfF0Gmv*-Yr8Fk=p5$;kI&Qb8=LIXv_DzLm zdpDSQsb4+G{o1qM!eD!5eOg1X=bN`2zR2NTPgNg>XYF0y;>W}P<@*}kF@3#7zw^xm z>DoTtQ@{K5vbMbTa9b29D#0IDDn{2}qGuB&Z*xS`7Izv4FegJeAcncl& zSbJteh&?GU#P{#RCQr;PZ(*1{x<08j#CP>ki1X2=LYqC>_vjR`nd!CCa;ndSl*PC= zxrfI<$sgWCYk~UBfRtoSJ!_Cu_|`tkQWI^D@Lhd9n8d&HQxTTt`VOM!qfNe;zixWu z@iw0cKN^P0{y}oK_TQVBzQgo7^IyKJRWvnS|4CzXv>WxAZ9vmIH1q@1Y8OhQywr${A~8MT(^y#m@u7}GyJm4iUb7%wTc?kqnL!xM9a zhU`Jp74@k-0qSh6$s7FF`h>g?dqM+{;SGPQKA|hsKv}DlqcWO13mUG;j6~>s^^{EXZ zH2pjuBtJZLYhzeRLpWIFq_)a%p0%(-gi^ID`7B>;YPj!P=#Me6n?P3kKD5^Nsr<^u z?^b-e&UOg2%)B^(^exh(NMC}U;H*z`hNN|Fb);n+ccdksbEc(!?*w^BQg};fQl`_9 z7X;x*O3f&o`Od8n&ID2zd7ME=8ssW~S<*%R9}0S5ey>c+XbFWC zv84reyISwIr#eR_-R8`O6-uQ!-5K=~nf>6DC|D&`rls$We=)@{dDisW^n2&-`1WTO zq_)O*q9<)y`X`%n)QY&TJkiat+P0?*yX=du*>q)N(Z-q;FZNC_)vPd`G3Pd9-`Og5 z)yO``pWXm#;Xa77{IKx%)I8_%M33JTe$EWKn{u<7_ZzGBM;YT+#GNBy>S0IDl>3rx z?~tT~6NYuGDYusw)5=H9sMhTIXF?5;HV?#Gl^YHBW-!`B?}9!bZTx)&X~$Q7_rr?$ z=X`MQGk%4;B-bD@Ns3A8c?uy9B$e~`N6{27NOfjIn|9gLoZ--ZU3IpkgyY%1wO>M? zaHqu>zkd8BNOPxun$z+k7o;_~p}xabSz-)#6O1ltmyM#|-Mc&~aebue^ZK+rx2N%< zH|})^6Iq|u>h?rk;pBVh?{MdM5!%`N6Vno2HG;R2m74jk2E*Me%9yh}d|&+^ATN!7 z_6F|*xye`e=Z@yP)*CPOIcbo4A5Y5r-lC^}y}awkP`YhBjiu92m00Vj+1W zd91T^+Ukj#w5jOn7keg{ikF9fK7W{yCB?3%bz{zPw)L$(?G1^rn&zJk-)c^2h|Fqg zHj0;<_O+qq;c4u($$HwH(i-DVX)p+Z zv0>AyoG2sf^hG21bJ0V|O4jsw@K(3=@{i3mFhK??v8TadwA)#9MdCFN$D+-NeRwa*hL5) z-AFWLF1kN82kxVG8IMG#CG3u!@xA8~>;Yfg7fXngwROY~kk8f_U)?KkuNu-j%K7%! zd}Wro(?KLwYf@%Q^vsv6hnGf0Ip^n43yZ+Qnip-mjAc`Nm)b zz(@8G$Sy(S8ShgEO(W704w1bM_&+6_q=dUxCDb4#=Yvu1)YI?-dAfqVki9!)}B6C`-|O;C!n1kg0l6%oe0rXINzGgOEtAA zl-Pq(O>Jq{b<5JEUN)xP16DgP`ml*=hxP#jUb(q% zTEcV2dz)WOnQW?0-h0V&af|EOqMd!2Mv{-ti|(fyeHWWRV|^;DlR>Mm@o!$wg{D|Y zS2Qg@Qe%yE-aj3D7FOlQ8tu(>q4g0?pGKI<;8$F|7(^>WWc zXJC|h-<$QDUB))=($w)LmQQ<1T__pbH*F?*lvbjV==*y4k}ruCqJ0t7{>TLD-CZ8s zl?Zzzcl%O6f9fLd(u61zDRUo;W4?=ZjyEsuoJ?}{?CE2DmpZM`=2tCpwmH1!!{%JC zC*~MD`&a~Fj!k?d>eZxe&xcGrCPBN>H;)}##XQq+I{O&pOcX<#9}qU zsFH0?ZHO!!w+~MJ1Glvy+npL^oO=45<%R345erht7@y~cQEueY&DOT77F{&rysOqk z8J;z8k8=5p;k%p`?pb^+q08B~`uZ-zp3EBiCet~x8|Sk-I>x=>gS|#i^d+cqPs|xu zf8D#H;43nFkT&$}nSF_c`_6>cr#FnWr#H0mz@3mU%C)KKpf3tmdry;AaBAaw%bR37 zr0o&*{Gb)OhF-SLBzu1cUl*;ET*+Rcr7^G zUgGsNI=~u9IoUzO2MP1k+pyjW^FfO|_4FfAY-S0TA?(d<46@R&r|ta~ z_6S@sr^nZ)Hbi(HddroTc`n{_`7M{Hso6_3kv5c;aIS;(a~Q+f{0d_YNqzXfqy#oP zhQnM6I~@D^SP#G|=sB7SupdtPQlZ)Ef_7tsBtv_GdE9i`oYNXPejoXFX}eyg1u1zE z(9R+X|Irjm_GqFGlm3v_OjdWTE;f49!{|Y4Pb=LwFTOX~cMGxLa{hN25T-xd)2^NlJjlTyMY(pX`i>HF0};D$Es7#?X6dO^sTf zWOK&nd<-j%_&SKUJAP?ztBsXGTE@;W;txGGxg~z*R#Ohl1-HS--u5t^+sT}`5=IW# zKS?E_=*W>v_D&kwvvH$7wXUsfn-^j4En{C8DM68TXaRI?A-mt6ORy$~y`G1kh7c}a zBWdX~$l3(bNAfa1=l7NtBPpbF`@*>3AlQiu@->d%R8Lm9Yic&VvwZ&NEPr_>lC!5? zpP$poyCA1Ep40)%0AXZrF$q@eQEx1OwbGI=7o;q_H2-a)ho%tfnZ-+TI^&^svzP9) znn>-Cctsmm!5B0iR`7LJsNL)ZIStt%^P@~3pI(sS9K7@o5EAr2`y1$k_GHSPzuz3) zFwkm)werBqRY~!!*@f?&F_PN1X1}n=3@h5g{9Qrwb4tA|7rVXl4-!kX7rmYo?;K>F z&@i|zXK6dS${rY!9BqY>cL?k}R<_UmlehZGCvvlz;GV#03?WZ?V3&6A(Z*#3n{u-1 zng)?jWW@$|DzM}0awSE!7_3Jp#kUNq%L#{jqt?MBR7bj^B;mlvMeasAFM7Jwo|@Nz z^orp9up)Q1W_R~4$juwrc~Qt(o5_?*SBX$Uq*jtFPU8vCaXkCb6HA*}Y0*6FTM#vU zV8{zrJGqPc6QpabxJ}~D8JCw6E#}_qz6UpPg_uvT#TytJ} z>XV9-`5(eN1`Z!QGdi`={Z^#$w-s;?ANmIV#)K6mL=pl`@yX*F5G6g8x98f;0f0% z=SiE-0(V$VmM5;=Z#VB-GAsCWJ;;0)c95CW@O;!q$Gz@bvO3|1c28KsojyqO zr>mXxDGV7sXgC-L+|CipJH9RYBU#_USmJtd;RqAS&Ems%?6)3|u%48Rj42UD$IKw7Gwgk<2ZKxYGrJqHjpvgOZKbOYOrNK(z=T7whneJdR z3Pr2FwpO(PbczUNGXAfeSUHT`azZs5voAa<^y7ejGm9VKkVxehQY8pF3H8@=LmC1{ z2w(-?%x8a~OuBKn8z$9H2w?i1Q0XVp%Gxi`Pw>CxAZl5nMa7vSODOj8HA`zW&+NwhR;x^S*>tGk)}CZ#J|3f2Sh`iL6S z-8dW!Jj?z|3#djw-%NC4fB#rEo zE?EhFbK~`7pi_p^-GTJ;PqnB42rIiXxRbQJ+|(UNH~9=s(~&6LBwyE)fn6C+cL&l> zK6%r1>g7*t=yK4drzM~}kPY$~ov;Bq5`>%R*JXr-j9jr?k9$2gw(r+~{Q!pqjW-$s zt}DZ-20gOn1h658fB-Vt!a;{@(YNZxdi^qOGD<`V2X^Av0dgl(89;X3-1(&f8`1XX zv{gF}rB{&dzDYQ_BdW&%x4xq)-B?$EEXwTTu%Pq06|b#Kv^#Fi89-9JH}u0v0~?l0XxL7!YR{(g%qGa~0#7MM^MKMO^mSSuOEw#81T2yd+L{B5W4b3GL z-_{cn25F%X&+`vnTjt=ZF0QeWmiX9>$`o6jb5vRpMFV-Nl5SS(sm&qaLTa%+E zUg)C|IHuMhX6T!jHqQyb=tOe#2^UCKDUPZ8JH@#he=4m#}jH{7X)SFbX?)4;0f`hu7iM!(%>VAQ^6Xz-aqzzgEBQ$rY=C)r`!|PQIuO~HZ z{~i>RKk10Di`L7slg6?`A*d^@&}+1wa+~N=E7K{WQ<*qLvWCzd#HMc(7Ltx(M3S_S zKi+eC1w}CipI$*kdvp++O8|-XYhv`%V)XNm(Jyd}fm)1#{xJpyjxkh=G1NcC(7-Y7 z(qi1@ALFjTG49r4-0dIZ?!Ynb(PG@=ALE|DF+5rfkADnL;26KsV*JWK#;*d$xL=EL zzkiJT1INhMV&wbB$PXN&P>WIMAEPjEjHz0Tss1sh29EKd7UMzx7!L-HQK7}C@Q+au zI7YP=quM`4b>J9tv>0>zW6TL0<54Zfqy8}-4IE>E7Gr^bj0J&XEY@Ny_K&eRaE#?z zjOG3@mIsdUq!!~z7Q;jzq`@y1lhO5>f#J7Wgx~s`_-$YlUM+^#&xALKOfA=#Xwo7y z`I~48Y@$Vr0SC9}<6BGM7=P4a{Lw$g9|OnOp~cwYA7e-07_VqCUh$9dO5hl;X)#{& zkMUaI7;kDZ-t>?0X5bhHv=|5cV;l$^<83X*+bjleBX0+;z++m3WBw+N1vc@a7UM(z z7#{|XaZ-zM(l1db11IXV7U8tNiPM2ioYP{Q^D}WSaNqcs7U5t1CjJ%J#J{x||MoNS z@4&gZtVOu&Z{l)b6aUd-{Kr4We*(w&QH$}Te~cdk$FP{y`od!N>wgw=!1aYgi{W4~ zc$;#V0}cwIT7*!46QO}kxU?89{}`^oF`~@Td<7Oo!(THpP196Pqd`=@rc*H_*>O2Y*nCVa4Xt7LI(npmR zgE9`)(dHj25pfdYWW*_yQG!R>=qdx-deBZs4cJ~_e=2S3kfa^GF*3bn?@B@jh|rzh zE@J~DsjpHyn%-F}9!2H15uK(y&3!l17QoJm>q_26x(_2hLSri1f4#1zt#ms=8fVG- zBlT3#8NwM&DVNDXRZHFzjq zgV_lh%t_W@Zn_4)$Mj~1AE(2P2OC#H= zEG&!FV0pX-D-tw#JXwR4=^8wdp}~{gG+5PBgVlXCXzZ`Snn4<@9j3v$;Tk+Ok^#;3 z`Y{^(_Lo|)r^jiqaiRvlo20>}$vPD2FinRt4K`QmP_4sk9Uj);_w#gEsKa6%mT9nM zr3Ou_HF##74jXjv>aazFty^_?PKW1p*rCC;mvwkmhdny%)u82o2G1VS;15R_(8jm@ zT?Vuo|M&reZKRDpe}chI0)ININnSXw!xaWyN!NeT;i65M!VaefJ3|@Je)^J2he!rA z1uw@kplRC^uLXNOL4!AvHQ1l7!CM&`9O$OO!JZ7Lo&V{pNe=bb;P4;~{yK~SP0l;R zHObMD45+qu$7qsc<23kSq7IXEn5@CyiWpEk$EWE~rUm=3QiBuK8vK2>2LE`N0o8VL zo+kNtp$4BU)`ESyOoP)a8PLpqwpx>1UdP~d(kQ;&ph>>l%Yat!_Xo6KKOSns-i3W@5TTNy)xx#5kYS(6pWJEPOO|hCR#1yYl8&i9Y!b}~sc`cYp-e7n#wfULX#zu)*nr0oynomVpFI_OH8gv?V-jA z<970Bh5VV5ZzoTX$X`$=^>D^)gps7tXE)#`2B_Pqx#9Va40FN=`x+8R!vq<(UjaAy zv)n}=-;A^jrVFWFu+*~*Ws5oL9>x}1v=nlN(=gPXo2S_c<}1V|zCui(npc`gqJnEc zC3`SNUGg7;E{r>ppjLWcMAy~9L_7V*NF*Zi#~+h?Kpz~cTlx<|$X15V#GYDde;7jQ zRq;P){B}&`M@aa0DpY|_=z+1O<0$Z_h(D%m7whMrrEsbI zp4t*SBfm#w!ldkNF;g=QYJ`!_mQ0@c!Ivk_AHi-4S<#a}%QD{5827hsHv{3sh%_ie#g9M&ZL6EimGA`MoC#kLA5b!T18d0aZhD&dH&#B z_@3C9kzc}ojDAEp#2jzr=MNq`cJRIVo)P!uYE>eX%d-2B3Bl|6gq7iLxV z8a~%3oi(Dow7RsQtaNU15zyG;vSO%;B4fnRvE#-V@PGHA_vGZ}5?2rD%3`kE5hKUt zd&UhOm*X*pa;w*|GqkK?R&o9fg{+`QS5(a)sVS(2HZp9eF%~jCq^6{#xawDfi;Aj> zXU)>Q#$M~ieTG)lKw*|uR8$%zp2C8%VuMv*PI+8Y6^oP!GsdEik6 zvyBq^&*+NMS;b{6C|5C-Uq^rge*MBvF^@l(Ux)DPP<|a|loS{xQ;ZTYRAiJ?8dJvB zl;@TeOodu395I%+gXW;vKg~@YobkTn8#CHTuBw;tC#vxd&WX!I83}VOas@kF0ozM)AiHV>u5m)uoIyA=jotbB|FKq`qls=Z~8P zDrmQ+rl%0+*y4hsIlQF&J@Us?6+?L1FUOKr;|Ie_rxI;S%93ALQCyN=R`F1NHxNo7 z8I{mOhb#dzN{dt+0x}K(8Ha$3GY!(9B2kjDD9LD)NIbvv4uQ5@FJXac1nO41S~8I2OL6(B3R=Wv;o%Btf0DpG;@)x|TQ z+d{XziVLcz<W zEYV!TTXhw*JxDkmJ^UQ`w3QnrRRuGOuZaQ;fHm(CYM@{qtncIxE3PgsB)uqqWN~eA z8B@=uo_tcu`K-mzj>Wy9GjLxr3y`kO`rXiqawy?~(sIM!A9^M?Hg?7=(og-UhcUFG zs;an*4&5N_k;FT(t=s}6AH>|xIrkVvQn6%Ju@mQpp6ZMVS@!6R$K_p z4yH8am0Mah3(T{SBI$mfp5j6lTQ7?nMYyJ_Y07C1{S=FG_N&8b#f1;%6O*(j`RCb~ zRawy^zo0t5pqM#H$p%8+3~6u~CcjpdP-R60Z)(KFgIAX3Q-6NtzBC=+1wC~NOvqGc zIhkLz4qshWGpm}VxS%+nN*S?{fqRS@VU&!SK>it#Kh`K23oD%x(qh1)rfgR6@M380 z)t+jYVk!Tsw5WO-!BNFCV7&tiIHt3N*4Pa2%r7b+i!vAkX6Kg{!Q=@2p1Z(rj`ZU$ z@S7|BxC{KKCKg#Zg)gkvKqd7Br|_MteCHZ;^vGwOzZ_O2j4SBcF`szQ@?&WxWyb>) zlf_@Y=1m4bSka1($jZ5>;-PX@4Y1Cvtel!(%9eesh^2&@m_g^_{8A_tI;6mAkouRF zmsI2zOo0?ZtbCR*SYkb-TVtAN4g*WZbvMTKFvevW<9Zt7da=ZnR8$ofbA^1cH)fSi zEiWj`p9MMLV?LcxXrrOwi%5h3@mbqc;e=l54>N6XQE5Rrlowrb)5gG-m&Pz?0^B)+ zi~*%Z#0Qq*F!Hh`)wqI6g4G36M=>pYr8Ns7OL}E-RcS?0X<=#g9FZH%E5CZ0p;el4 z=0i6#hQN)Fna7F%{%CVN6v;A*_Y@-3ioFRWZzvv{}%*7S9-1 znX*MUb$W`cNpA85s9D(nks>lt`1`=5AU()n2iy&NbjKdBD&|^wlq^4wQKd!xI>5tU z2YC4F01tm1B&GgJh>yP(;^VJ|_$WPe{v=*}YSc>t@~M1BjAd2LCS1td_2%5-YC1aK z!+I@IEv8+631~+G|Cv_Jz+jB3^p}(QC7@ua9QK9WZ;qC+{CsH{Q7hbAPQTm+^je_~ zdarcSlBDsVH%s4M(&-_yOfK!+yhLC=f~DLI0zk(jlP|Y>tpX}nNzi9fwc-%bX}i8= ze-F<{J|4oC2(w^poK60pZIr?f)6RioV&D$Bw5+%sRMXMj z7)r{Lj?QE0zi{6@3Z`sh;=T95jtQB}%jkNS4)De-vEZ3j1tTfkG>R1^Te0RB%>m7& zd{Ly2$1E_+DYR+|Nd}pAt=Ps*gAE9>W@Qs1TfEF-E53lfBwRHN^*w|G_8my8BQr1& zDJrUht%|X1Wt9(W1?7gl2w3sc+);r7knkk1x`R@i3e(DrVwm8dl<0M=F{`?W5V?#s zDyNki6WNmaUUs2tlBsM7#@xnzOi~5wqNz}~Bl5{w3ofuH0RO_40sKppa}lVeLUtWC zlwG;?F~tQ{vntB9LL_ac1g6Den8pf?8_M~@kc|mN#&n~EI$?W-UWXWCXB*Q>$y8bf zca75wax1_Hrbbc{u+S2IwA{7(4Fhf`VbZK-c_k}ty2Laf8eKfV-J?-cnGb6#vUXyA zP=>6=*mPY6gE*aX$HN+ycT8xj;vRr>z`znU`UjL7V%Hpik*u7cspvrg)Hj7QB|Ae)Hf9X%S!qWuP z|LvyhB)Pc@jvMdq8uSJ#vk;zV7%;MAP9qLByyOoFxW&nWkTHb0O2{Irk}RSa!!s%J ze8h;e206`^V918mZZ^@YjbAx)N-;l7rQL02@^iW-@_ih++RVWehY9~YE+59PDg4@< zUwJ$$#H98hHk2k$jyV=y26UP~VJ6y{fB#=pc?3^H8*?|xZnK$Oxo=y3RiRi$Vq`4F zk(^!ZdhNef5h94`w?>(5)LxLt+-)|qRkM6M*BE3DqTwQWQ3jdqlv9OV#CO=tPAZ8r z)8C-Cx_OB9++w(SCY77a5#$R0YlXAkWU{6?&EYhJOjDYuFzFL5tOy@}HK##Mv=b+- zGq0Z*sg5PVTu#k(5m|_}F@I~O@DVkd!8L>k4OS5%)Mj>3EpfsJ&NQVS3H;iLUxhqM z=nz#B$BP(Lv6#24A(U(Q|5+NsMPrCI!%tO0$Bh&v2+f3djQ=H{aC17bV5Xhc{HW$; z-ME9fh^8Ri98YD`I!lB8uQh~qGHbZ`H!7Uf$~)I>Jk`AWLkO*l?6jDy4$-!u5wW%s zc&yp2hn1}&aM-`-VWA7$Nbj3^*qfx`ty>8DKerI}ueT7^cMD)FmEreaJ zhrLPOo@8O!Y9m2Q1D!nm`|)pey*J65R}ZV}rQ?gg-X=ZlP1;V29u}s>8@01P-a^0B?TL}BwErfmZ7Q!C5g|Kh4u&jtM|^{~3$0Cjv)4||g~ zdHNQ@p3}qLq!0Z|4||h-{BJ$%P0Hc29`+{l(0}x>Hz~6p^{}wYy-}N7Xw$}$o8)b= z9`+`6u}lw}bmKIv)WhCHZzF^?InBMvTEc%cI13WE-8jH<8_I8GY{E3GHCaQJK5fL3 z$u7bq3Lm$*J27BQ6%x0QNFPWiTN=?uE7$%~4l6SzF`FG!R~WzlaGB>)4&iL(+`;@1 z^>5GPC7b(EcA9_1w6-6!qqkU-0V?e!ZJt@8{Pde%);1juzp7_7Fnz5@~*fUgfX=Maohs ztqtapMe3knSZ$~BYg-;8Sfmef%0kFntpP|!x(H!5NAh&sPOp$KR_bz*-&Xj9+4vo# zxNi<&trC7%h%M8_jgpxy;jLnWAVj8<)hxe{wkGg+PGLdz2^ZH8!rOw-7|h$F@OL81 zX}lzIgvP!+H^1Un7w<{dM4l!y*8o3xOY`4_`^#Yu>Vu`a4evwA?B>EM`!Fc?mCN>!pm2NfRbmqgvKu8Fl})x4%gX{mzQj7;XFJP7|Y=`60;Z$V|fUB1$Vr$uvy`lPpuRxrZS4a)a27qnOA2vs7cR!Zby8Hjo4$0=G7$A z3kAUP)P@g=Em(3a!ws0dvUxN!+0@Txc^0_~SSHnPFVHuoziNX*g zu-M)l%M&Ta0g;(1?k@^Uj?{8fY!DBTC(_(W*bs3QBF0Fb2Iwnn9!Tdige+yy#Ux@ru<;P_ybFk}HIb^GBGtkMXkaTlp}`83 z&dNY8{Gn7(M~7Ifi^^EnhJjS`xq;i_xk(oK9b9X$=rVHnPUk@@__d5*W%Y#fs9j|d zzQ$S+gkbfS$**FQUv%Ax+#d>=<#L3GA&mZ#hqzmWkoDo=638?wbvaOri9pntm{lh5 z7<2jcDX~nOtyHmO{4c7K#VArEQZa`coi9=WA({1&q7bed^q`3Ij&NK*GOTQvTA7lE zxaI%iSJ}qo!<$FAWRa$xHM%U3Hfiu$pF2gE`;-CRKzULs`L$exgi2(Il=H7xw2R6U z#aGF7mh&r&>}+Y>i4Wlpt|?V6C%=M#r7c6G_U4lD zBF-ogM`*p5YlZ2PO)aUc%QG7+&D>tHc{Ul814vSNk4rSy&|y27cWyB~CG)aK<(g91 zG$-}a+F&}kAHTWf0~Y*(CeUFG1zu0!;^9-PPVtH>$Lp{$%?PT@J>*TMV>D?irXUFHeYMyk0D zy~gvLiS2?&zQ&e)52how0Fz^g?0sRpZFc9nW$DP(v>b`V%2A|8Oci20dYGqEEQ=r` ztj);@RO;--^D5H=t&D|@=V^EG5GnjB*11xboF`-Xe7h0Lf1HJNe zihCOiXR&P}`e7U1hvY&+SP&M6a?3^h3T=|LW;d@tC>qx8Meh^sP4q(O`>aG{4d(I~ zzvfrS1lyWR=Z^d;)@YxIZ^B1b}l@b4#Ly7}DQO-RIY zRrDS)@(7kCFp%4p>w=Cv)w!YsX<070 zpeM1k*vyAnHH-co&ICL$V%=fk9L^Ib`bZn@FE$2cOBA;#A_*|dy~^%l0vqVU2ZeAx z6nEo|s14_EF_?=c62~hqhhN3LxVQ&`?F%-o4i_;(Z00w32jZEBA&+_VvY7|ddJYyo zVzwU6LqJDj1t!}_cQIawHzmX^uhap>&ay1F7Uf=zm^YxN{6mOFa64bih>aGjZ1G_{ zTMk|@ojA*<{{^%BwmDayluntCPTC_yJ;z0(|}}i5zU>)6ze-t3GKMQs01-% zMR0#ByNa@ut3aq4wwjY^6SJY{&oJV$SwoJv@YsyiNN;{k5p~y=TZ1VU&4yww8p%V5 zImyWxbTTU;d~T8t7+~~ZvxQhAgo^a=YYd;GWcuzD4N%s)NFR)ttZ72Fd4m)_V21g4 z_*F0rV=T8)n|PN?+&zi;7S<0eq?|29TNW)sKIljj+F?P%Qq)`cKzn1mti8G9cAife z2TGUS)j-v-G&h=r>CNC`eozW5HL1b}GR@ZMvTgHLq1w1CL+GF^U2bkYf!B*{IU+91 zZ>)aec)DYGOz~LD#pf8gcEk5zVvdokSMj(+rZbY~3C9#$iz22uj`kuKPf-l-<8mf~ z0%Pqm##~K9LPS(1>%t+Q7@#a@|sIF`e0j21DW{8-Np=6A|sT_)DEu*_n46?v59 z;bWy!XY(Jueq zQQo_WeJmldnc01i9M{Col9(&R9)Q^9tm3I`FmcB!;gAokp#!mrR5q$~9#-s=i>=6f z?k^@H(V^g$hjl?Y&4@yQnqw0AKuk=!(Dw%1xEVmYSObz%gP53wUD<8h@TMgfbTGTJ zxZ-)Llz>+DjC~XW6P|T1T7jr6D{*tGHgP9ZH?$T6Qq7#}=ld+oy8v z;pXqyJT#sSPeLhF3RM9nwfBQRh=DH`oP4&6EZ>SSi1^jT(Lpkx&UVcBq) z&L!ft2^j}6!9s|~b)mco+xUntJB%3fxNZ?oJgSo8R1CK*ngFa^@@bI!951Rk2Q^@w<>C`(ALN#`{U3Np>&_7rjC?A2N3o^=5*!^#H|o$8-9$SzxFiO(fO zN_vPmvi#%ZV_WvPEQrs;3FcU;Q_kwpgV@L&%5;NNtL@*j+NLjNaS8nuAo7!9X2bNb zsZCIr3u4eyq2Vh2hRioD4jK|le=dg{38#fOl0_hX9TMgZqT!dApR}y9uD0=b{M2F@ zT882B8`=C>CX3C`>*D8f`MF$33H;n9*x2-Qe+b+k$e6B;* zjrKK;wZZG0Plc=x{cW4AVcXii;CeB9N5oF|uE>|7UXFexW_Rp=$I+1+>n1;$nvQhm z`Rm^5*cSYP^TiMv|3-B-_-;^CRXVG%)-VkQr^RKhs?F+A+M}{t{tWU@3Hhgx{4*QQ z#hX2&pu2QVQO-heq7=cbsQFlouYc6gfVogdVES>W^fQBx{%2Od2S>fl@T-D!vXp@W zv-}k~9=;z6pN)73;#|aeh({tGgLo|B$%v;QEBBzrZYi zSdWKSYY`ScLn>vgS^?u8NG^YAoaz8I_WXM7)u{{Z6Y zh*f#B_zxqw7x50n2N1U+K7{x%;-iR9B0i7!8^l);t8T~g!+xBU1Y+!v-I8%A;#93tbPw8`4PlN5x##+JVc}IA z#%jD~9HxbrPH@2Q0U&#US=nQ9WskA4$5`1@E@Ibgv_!rVv_%|d!;S0(W@V4bl|9DF9%E(CjqF7tdx2TmV{&DWv9iZl*^5N>qL977tn4wl zvd382W324SU!kCO%|@imM7%O}7hcS5m zVv)VTtn4wlvd382W324OqWr}ndx2TmV{&DWv9iZl*^@uo$Me??*$d3d9+NA3jFmmc z%3eE^zuS<#z^v>sxw6Mt*<-Bi@n3u4R?YBxEh;YY49v@imM7%O}H$5UkfIv{(2S=nQ9Wsk8_=7O=Z-$6=;-0JkI9ui#>yUJ zW$$)mF9F#L%*q~=b%*q~mAzDCFAdoX%*q~;-0JkI9ui#!5e9Re$NoUMFNPFe`gZuIw>Z_82RBoshlG$X;Mp_LyARW322k zR`xn0dtH#dz^v>sxw6Mt*<-BibwTzrkiEdH>@m5r$5`28tn6hVdtH&ez^v>sxw6Mt z*<-BikzY+ye`X^S*$d3d9+NA3jFmmc%3h{21}?L42eKEKl|3d`_82RBjFr7RkiBlm zUSL-Cm|WRotol1+WxpG;*B#jl%*q~zvKN?@JtkN77%TmZReAP6 z_Og(@z^v>sxw6Mt<&Uwl568o5e`cd6vKN?@JtkN77%O{>mA#&tHPSwNA$x&Y*<*5L zkFm1HSlR1^?Da@imQ8LR$qC$iTM*$d3d9+NA3jFmmc%3eQY?-$5k zU{>~+T-jr+>@imMeu3=uNA?1`f!SBj4;ZWG1&sHj z_^pT!BUbzUEdDVhKaThm;x7z#A6UoLOdC98RAOB^AI;6UV*p; z@piSPQzN7bJ_{PwW;rlK>jzt`gxC3JNe%&uV zyw>l>@HvDZ_d`4kF?>bo7ybdnQxKORo{qQ-F`WJ4r++qLIM=~Xz7X+Z#LEz`M7$dD z2E@-H-i7!L#0L-`LVN`A3B)H6e}VWs;tPn?Yk91FMaTsX<7mX~5T_#UiMTJ~VTi{f zegN?l#3hKQBQ8h$FyeWL7b0Gacp2iAh*u+Chj;_x7R1{Tzkqlb;@ybfK)fIE0mO$8 zA3^*s;tvp?KztJMImBNf{s!?C#PFJ@Uw^eAb|7{kjz>HMaW3LK#G?_9MLZdC5#nix z%Me#0u0}i?@xzGcAzp}h5#k2KD-dr$>_xls%v z2=N)j=MjI4_VqAD@pACm`;DxHsZ{h_ew7L7aC!UAzq1i4dV5PHzMAQxEb*-#IGXWgLpsUV~9^7 zK8yG(#NQykg!p^JR}lxv4MEo4oroh4MVgTA47Z`@hQY-5r2XBJmO1;zeh|y2WEe)KFPhtphaZl3B;qlM$044GxCrqy#AS%dPw46Cc?|Jl#LEz`M7$dDI>Z|gdl7FzycO|t zh@VHi1M$m!B_GvXeIa}ke4`~c!9 zh)WPxBc6wNHR273w<6ww_yFQ}5uZhT32}6YfB7XM?uo zSj6#&6A&jOPDh-9xCi3ii2EV#k9ZK`VTgw#9*KAi;&F)YL;L{ZDTqrDPe)vixC-%N z#48X#iFgg-^@ukj-i&xV;ujF_LcAOC8;JKJK7{xP;^T-(?8gAnH-9*uY`;t7Z+Aud8(jd(WVd59MxUW|Ad;?;;ZBHoO6 z3*xPapGUj{@ym!`MZ5>`Uc|=`pF{jTVvGFjjE$EL#9@dd5Vu3z0dXSYRK%STXCm%_ zxG&-%i1QGSMm!er1jP3tEhS{Z$#XJcn9K_5${EO0C6kg!-(HSd;;+&h)*Fti}(w~Um^Ym@dd=+A~xh_x_mxB z9Dz6*aV+8vh!YWKBJPH`C*t0Svk?zMoQpUQ@kqpD5Klrp9dRY%YQ(jO=OTU-@jS$f z5H}!RgLpmSjfgiRZbsaKcst@35br^}7x6K~#}R*o_!Gou5T8T*4dQPRUqx(@pM|sb z9g5h6I1+I@;#9<$h-T#mRJ@odBk z5idi$8u2>B>k)56>_xl<@$-mxAbuI~tBCg?{s{3I#ODxyf%qH5mk@uC_$uNsdF%jd z&k=|t5qChGh&U5*Kg2^2k3~EI@npm$h$|6SBYqh1JjBZouSdKYaSP(@h+jk8iuf?% zqlk|qK7sfo;x7=NM{JYFJh1w8A`U|wfjAm*JH&~IlM(kvJP7e{#N!Z8M_h%t7V&Jv z4-~79E&&^aW};M5syJU z4)FtsrywptJPmOf;&Q~bh!-JVhIl37ClRkhyaBNn@fO5e5w{@Tj`&r?dl2tMd;sww z#D@_dMf?%sPY{2F_#4ER5Py&OD&in{tPdOiY>1tR!w|(T!y$DaTVfP#B&ipiuf_aix4kHybSS5#H$f+ zNBjcfU5Ixhehu*(h+7dKMtl_UyNHh=K92YV;8;JKJK7jZT;=_oKAU=xt7~0MBE#3Kg8LH^AL|lJQnc;#P=bdjJOE#G{j|ys}a{Cei-p%h*uzf z67g!p>kw~1>_xl<@pi;7BYqX}8;JKKZbf_;@lnJdAU=-xB;s?3ze0Qg@wbSLcK+*e z3t|UiC*m-~5r`uZ$0F{4I1zCw;?9UO5%)$s1o0TeMTn;(E=OF8crN0_h?gOL67g!p z>kw~1>_yy+_&LNcAl`*|H{#b2??rq7aVz4(h>s#ZhWG=-ClH@Rdbw%hE+kjyg)@0HlD9*w&L?5v)%hfh z)%hfh)%hfh`yzcq5a%JDfOrz($%xf?B+OnFlGh?u=aI1R^N@ToVs%~#3%^T~%c=l} z*%*xaZ(x?6U-R(tb$wv{&uplkO8m{nP+bh1gIM)s7GCva#(5~b>e);_il%?I3}vO< zL+01cSjvMbtMhO|D9hK^`1$gR!;ri!Vi)3Y#1V+yh$9h4A&y2IgE$s(9O8C}Z$pgF zA8t?Op|ZU2`MtLzIX?fEolmRE51%K?&UaOEd>$)49~GZp%FY*6@$vbe_{wvc`SDt@UQa0*)~P z;rDgOT4A!rWNlEQ@mz4L@h8N140xU&%_5m?RN zA;!zVr?l{|gZmSWTfwd7%Mil{?2>Ye@po_!()cX6BQ^d8+_4&yxjSBC8Ke z)|kx2=^B%>!!k6^1Xk_EVvxDErzR(JZC{N?0r%HTaJ44?4ESMhJJ zwZPA7JRf+6#>;?T)_5)Os~T?x-lOp!fcI+rGVmdd-vmCQ@nPV1HU1m$2O6IOKB4iy zfKO^n&el4mvDIuCXEk;Kf1&Yhz~?ni1-_thci?X|?hkxL4?|>6DZUI*3{aK8iz-m2h zG4=qf^|ZzKAK-3U{A0jsJ#8^Q23G57i$Ttw>aT^r3_M8VAdB9g2N)s1lSTI6yv#^o zug2|xx61efj5J_Xeglkdz&5B;_BX)j2dtmZN6wleeOkyz16#E46M^SxOwO9xqJ=L5 z*3Yl21=i1-n+II2#cu#6eMHzJXG7`d$87}G&vV-fte=-g&VH)a?#KTOOxldl_ZIL% zO@0(uKVOZU&GfDo{tU2w-qd+u{k){_fjh|ge1KsAcdEu=;MULki3Qfr-$?}4&)dlW zJ`4Yg^!5g~e%{U?;83|<7+~Z9>*vdi1J=)vc>q{Hzlof!l&PKXPz9`?mqN};($7C3 zXCdk5ldJ^R&%;;`te@vW&N|Z1=OAYr>E~ULvy1faBi{tp&#QPFc#=cq|9#+T8h;F| zpWpCLV6P^>2)se#AA$Ar7=oef_G@xCuzub`dtm*%g*4!F?fdoa!20 zXMnvLzX05z>H9NqmB#d}9xeUkEFS&)=D!2$`(k6n_7)~0qfsS4g%J{=eryDs1|+#@Fk54fc5X=$XPSF@&;jm z@eptijUNNnzjs>>tbZT34!BGU|9jx+8gB>IzsGt7SpU9kFL0|C{;$CL_hH9@_3wpF z1JBjIk2w#le~5NlYOe!;_3v$l1MA<@ zcz`ps@DBh#pm8a%{{2Tau>SqYe*rJn!jrRG^zTm^fwyRK()XJ+eiqoFy??$7SpVMP zb>I?BehB!y#_t2`-+z1ptiQkhC9wWI!neTs_bO)SJNownVZi$L5plr!_XNqn`u7WW z0KcrIrysEXK79_b{=PjqJLQTN{(fNneeV+BR_*=enZWw{<>YJ>{eAg*VEui{CxP|% zjh_bA-xnumm+0?bzX)6usoKkH!20{g2Z8nXjmcRe`uoHG0A8oPk9!XIl*Si<&uUC= zzV-KoLx4AE<4ZKK{yuF-;1Vr;8NmAc4t;<(YVsk#`unbGSbx8AJ+S`%V-v9c{@(Mz6SeoR{u@|--)=wfTuuHCu>Sts z3E)RH`DeiT`)%I<>+hfa0DMjh?|`{OfB(r1tiM0i0a$;3qZ6?Heo{|h{e6^y!20_; zdBFPnHRFMUVpaQ^46MIT@*uGOK1nTbPc8g>;Bu{gml4+FYk~Fm1vUe3|37@42Y3`! z`@T<5L{Od+++$yMFdw z@%KFEJ@1@%hU@>|>k{whKJT2VJ2N}GGcoNqBHQ0v+>LC%pMMm2SM&Yv^T_u5{kM?q z_vfD=+wa%EL%z)n|0lBje!L@(rR8z{yCd80Lo1N~Hp34_w%=#xk?r@@8zI~8b2me_ z-yd&-Y`>4)4f!xL{u#(ECeKH<-(T|C8TR|rhX7(2!A~z?WPgZpQLmq4LFUS*g@#6cqWymL)+zICrSD4%# zd5OtuBUhO`06Bi%8|nD0iun0(q^n2%)ztIZ6ZZR(7UcN(ZKUI~B<%MW@!1jVq@$aK z_T7{II=Xgbd_)Paj_yF@;TlnY1oEyXpMboh$vijP#^m#nlhuLY7a{Ls+OI+0*yNj$ zxgr! z`lNjow;Hm&zPSeSL#DkCa;?dOkUuiH8u>Pp>yTeJc?5ENt>(5s#wkL0t>z}C+Pk{R zsrIgJW~#lL+c(wT%^jL*@9s`cwRd-Cr`mhC%Tw(=-1VvUp6;Ghdr$Xps=b$cG1cD7 zy_srX-F=>FU)_C|YG1=GOSP}zR!YuAxk%P@Yaqwvv!?5lYVYl;QtiE6U8;R8*PLo! z%Z*R9ukChCwXf~kQtjoA&kBg+FLwv0+AAFI?T_sh?(9_iI_`>8`#SE%RC^zPt{sQ( z$-JP?d!ThsrCV` zHq}1BjYzfU+_+SG&TW@!ALyp0+6TJ5Q|*KNxqY0zLGI{O`(SrgYWTtKqEvgOyCKzH z>F!Lm4{?vB+K0I3Qtj(G-s>I5zn=Rv)jrhm-t5>u)cuocU*D~YbL-f?zFQ+X*XHuA zasyNCRjxYKUhOtYwO6}MQ|-gtwyE}EZnsqX25wfWeFL{3)n4O{O10OxlT+<^w=mV7 zcUPv`3+|3od%@kGYA?EHQ|(3fTB^O)eUfUgb>F1g>-=Yvxcur|$KnK_1Lm^{)}`QRH}h8R4EqUMX2-Biw7q_VX+6b)8|_KS#Eo zKfg!5%C!H1Y(GDCz`2jTUwai~`}vXgs@l(&eUR<-ol0bTzLiHlKxYTnn|ZJ5AtslQ zhnYMM**-sNJLGoLJ_&h0lcyuw=cDmn)weNE@*3gxN4B3wk3hDcFHc0apI^^Hwx91V zLbjh5u0pn-7jI#^jt=v85AvGkeDYCbdw%*H@vG$J3N zlZ)lM3GzadTab@2c_Q)|Chv-Tj>&Dvi%g!4{J2>@`yzKR(|;JU{reopBirvw&Oo-$ zTe%R~USH$Am>Zk@*Nw>bdKvG%wD*%gh-~i{e-hbV|9J`7UN3qZ*p$I*?fpAzBmZsg=NW)(uUD*(yt28TP>XEu*BOCq@7EcF zY_C6Tg>0`s@Y>JwroYL^pP2QxC-NgE&qsdT<>QW_q4MUU{WBJnyBm-&ekiypC!A47tC_-yyGM z*7qOC{7y}$hwr6vCa;3LyUD8~+vlP7LAKv7@m@Cjed7km_WART$oBikO_1&Pk1fdd zdFvCA?e~Mc)|vW#4|!WNKXZ`zos7=Ue#rGEAC7FFfA8-t!!>WMKa<0oyb#$w@BB(+ z`+X$$9Xp%;7bDNbHC*lQA>@Zl`%}pF`%&KOWxqfDFS31p{U^vzn(6rl`4rRNugLcM z+JBKRFzqYjTBZHIwg>Ve(_W5jpI@Crw%?alA)l69a~R?3knQ(vym!k!Z*VhY`+eF3 zWPS$G<*^g8{XS$5Wcz)`UdWG``gUad{l~$`Jm=Q_jzJ!WdDeU?a>2CoTCn~8<5J`S zIET>s>yYj9MQ%s7&llmnQUx5Nw0gBirXA3`e%#Z;`51fQ-ujfxkj<1pa+IF&faJ`q;wihMmk0ad)$nku1q~pCr_V=HcB7d87 zIMQ8@Y_I>`iEMul{~&Tae;w(bLcYrk{|fRFlix)?&rHwf$d8%!ACMQC_P>zFnD&m? z_v~nLH{|&Ho{?^CagQQ5B?Gj$ms9QI z-Dk*qnf70hZ%Oi4*Kr;DeL#y_9r?PXy~X8__e*j|w*m4_$u;U0HwrnvN^U%Imt_Ca z;wB--Nh-O$kb9W+gOKZ!4odEL&Qz?`^U(A zP5aNtpP2TtJ~*D6_MXV`_jM)L4|#xTuR)IMyW~b74>avtB2P%xcggL7JlM3)LXOYJ zZgB@A&ocEVBIiy0LgXPP--vvMslONb$z*;yxkr(|GWi+gKTUoGIc^Uv?jz($Nq;Tw zN922x`W9E#*SYsi?vDJO$^DT3HF*Q%GSlBkTIoTXge>(C2 zGyM6;w!ce}|4N2$aknC`m3*FQaStP}p0uyxod2b$t_ORui+kJP8L9mdkr~f>OW4^uj#%=?q}-D2HdW0C#*tkdu$YuCJSbe3z-8j2!>IZ^_L`)%SA;AwOyAPe#rspYKcV zLgXFI`}u~{@crFA$RC;EpGF>MhJO=zk{SNX)bQ)NUy=Vd!*?3!+;lVi8pugA_Iv}7 z`JJpT?;`RMrhXITxIA)hOXT>SY>R6}zR1+?jU4+Q=ng=R&xdbuCnDc%>d!}>YUbxU zB#q+{`W&3Y3h$j)em)NB0p*BuRz|})Zdn> zU*A25{EDf65qW{Be=k*E<^G5Ko~i#EnZNOtSIKo5Z0EPy^+x{E)DJW8@! za+l;g)fTrc^5dp{k5v5zZVvKLQ-2sTfAg)=a|&|Y9%|f$$Xl5D8<77t^-EIqdG`eJ zOjG|Ra_^O5|DPep^;>X1As=h%SFFVOfT{0^9H*z~`XR^PqqevjGfe%Ssrov%FY?Ex{y5|#P5n8k`g(Uc@?WO@4&;kX{UfRR2KNH;I?46;7WV=2 zJ*NKKRDGlS3%SA6uQ~+RZ%utUa$KHGt`eEwdCRNCH6nj!>c^z&hr5Z$^Gy9z!BKs^8EZihQ=IKMi@1slOOGzBY0tX$x`rgR`wAB)^#+RsDomb`yU?rP+1O#9u)@io>xiQI8D zH8}r5KGw|d=g8}t_Fs@sG3_f2bLKaVCAT{AHKu(Ka)0d}cQV%@k2cG%8981bZ*kip z&o=E-kykge+?B{Dn)W-8cQNftk@=e(d6nF&$dgU` zr^uTn^HXv^BhNJL9XG)FlWAWa`9G$85b`MPp7W2qe$rlY&BzBQ8S{@k*VMNm$N4F_ zcI5bcZhT%twtv6r6y!MmlDi1`Leu|E$oB95EJn8X4?To@rKx`j`KV<1jBsxwpPaOp z+?UAldEPDVPvqmw^mnPj^%7IRHga|H{XxkMLB2I|#lKxuUAY^{$FRzlTMPAReZ;EW6C%GkZ{C)_Z z-;mES!_P(@X@)-(`GgMI{|I*+@>M3Ej{H^fd2EEc0Qql|FGpUOoS% z{Cb3Y0QrdI1Z{+S0(oFEz83ceGVj@!SBv``c{7uLL*CisP6ce=Cig~;_ZzpkO5}r0 zdjs;xCU1s(p2<5PUvBbrWZsjn)3Yz~Z6+U!{E*4#B0p*J)yOZIycqd)lb=BT*yJ~m z|7Y^&$Um9<8}eT!cPiq1XoWa^y^-VZmoWdxolScK@~S3phTP5M9gusPJRO<${3r8| zJksQ2k@qn9T;$m%UyXc#$%~OsHu(wUb4-2%`C^klN50zR-;i%Mxl=9Pzb5xae#+!Z zpn1&5(aFc?aZ9$@bmirX#Oq^1jGJO+FSm{+^`8or}DwX}=nIXOkBr$LlpM z?g`}mO#2(i$C>;&^4TW;hJ2aHo$9bWOzw?*pUIWTPnq0+{JP1TA%AT04#>PGUf1_@ z{KnLG_Fxzl408$sZwKWb#kQH=4X6zPygV*J*KUAirhW2P1!Las%>;$>;GFHx{{{ z$vYvBHhE9vR+A4z-q+-lkWV!EBII*Sz6tqClOIH0V)Bc~FPQux@>?eVi2S9=D-3t; z2a{Jv{@3I|$X&a{^<9tL*W}HR*E4xXWZv_u+s91gu_hmYJkI13k+(K^A@U9;--x`c z$qyj!Ve$*e^GyB#`EZkeKt9pr4jbb836pyvUuW__;IG00DvyaV#fCeJ|T zJ-|Bu`y=xnV9h5W^B!Q$7b5c>V9hrm^B!Q$_apNjV9n1X^B!Q$?<2?GbG5kdk$KOr zwwG<>+*T&{M4o1H4w?7#YJDy8aVBqy%zJjVeS733CQnCx)#Uwi&iyO?|*@@ghOhs=9&b^Pxk_cHlARQ6@Jde{S-2 z$bXtV4Vm|->h$c3Tw(HY$ZwkZ^O2u0`8woyKSqnY7x`k-{w(sfCcldue}CEHzC|8t z#`iCBlgZsT#^+m;*G2xKN1WaQ@@;EsF1byRKQ?&+@+!S!dnWO#A!Do16A;kzX?TALOGG(Lp~wdo<_LWk?r$W z-bX&Ft4_cO_XV>3d*VMJ^PVYrjc|V=+xxM!h5ui{ZDAwwR++rDTXB@A{qVn@uA}P_ zaslh0Cr*qiLS|KW{8ydHjhQ?$lXuDFSs~+N8~X3;_RX}PmC1`j=5J1V;(3fWhRj9O z6TkPkHu zDzD}COXaoQ38`G}7N&BAyD62|aZ6LVkNa=P+@yNq`}=QFxu5GaTINsM`@3~hd0jU= zWSRc~Zs$~c&dpD?4|Hdy+6TF7Q+cp^D3vSS8>!)kxQ|kKJ@-v24|Tt%^7?Ltl3hPl zu4^h+yA4u#nA<9qH*j-9mie!7r=)V;-H@s;xMx!BMfXK2<9V&kc6rvh{;6E=Hc90M zw`(dly8T0z<=y1YP37TkNh)vX-VB)^S$g98yMIIGd%h?3U#o2@)5CxH{_K;>vfiF3Cq44dMHjjQR8e@YWJuW7AO$OA@?u4%0g z|1X69*GWNMEAzN2$I5)GR1{nDOE1rCL|s4M8ifqb7LIe-wyBNPYWREi6;h=Dm$ahzr$j$eq=FXZPS zU>r+6cAk&D`&kOLvHyG=fuF-r5J%zXQmmizfN@UD+!x{;6yk^racqS+wnChr+E`nR zb5RVN1Qtipj4e)CG0tYu^bn_^7)M-;BQC}f7h`9&acsCetjo7Hj<`0Ctu~ILHjbh; zj-ob>qBf4AE{>uuj-oD(qArf2F3wP099vx+TU{JmT^w7z={JtJK90CPj;%h9tv-&e zK8~$Ej;%h9t=^0+j-nxsq9IO0LmXQ}99sj&HhMJHE1NxVq#ig*58(}nB926=ISy%L zXF_p+q|R?R(i+DUiL)a8aZZHdu$*}B{MIFuOkHhFGKk-{d~gWX`t|OeU%^7jBK4c2cYcLPYce*!Ld7Lh-;lJ%HPn!d zts$AWynnYz*U9o|Ojb@~GQ*9@m+Z5)H&pdU0pM2b?@^Q5k%!-ejOWtfRaT_btB%5F%ZaRg0GC2i*NcD4E2xlDFND75yE(&pf zP>7ppA)GC+Hf|aPf0zuNB{Nir+g70vC&wQ=r8aKgg}6l(;uckin^D0ZqGYhRS1R}e zqS&}v3USjY#JyD^Zf6C*_m{!q##Qi#s9=*7TkwY{vHq|VFnNy^{L#wWTC;rP7FDQE z7HZKSs-=gxMHT!}CD`QsR>1XK-Lc1AP@yqdlEs?1Hscmmh+9-4ZbpT;!4zwfw_Y)B zCB>TL&0CBswpf#_&0^fa6#bc*pWb3V4i++NHHE@ig6tmvD-x&?va zpnUsHTQGY{>mF^>XU^sZ+rIZ)zuDpcA@Uta%Qpo7&xynT*$MuqmJ0%rBaR)0Qh#*x zwr%#*;QS6QR)%i;Mv89y78+Z_B=|!dTK#T?{}0pPw{m3v{-)$e9K`z_08U8tGm7Z!`(%uIDy9{!MI zbeO@s-}4wBW-;$~L&k@hlrtUU!))gLzRLJ8qj`T`YkZhhIX8;luVTz=-fud_>t^9M zQ{#18@|&vhx&_AV$ZxLxXvqGv+mg<&KN^~TbbkGS#_Rn0^EKmje*Jlx@jAc$U>d!T zoSy8~tMlv6giXE9um5ylyw0!R-i_Dw>krJv>-_pXxbZr_{@7r=&aXe#8?W>0Kad)) z^XvET(fi5Z{QC0%<8^-hp}}~aUw`swyw0ybCK#{t>(4ul*ZKA53C8RE`uD%_I=}v0 z!FZitzdtcv=hq+bqW81U`Sr&b<8{9L!O45<=lnwP)jGNUEEcBT&%cK-W%YhcG=7&w z@cSbVVd>QS^Hv(aOYxv1uJLD%PL#`O|Dbo!{PQ{9edI7)hP(-5dN# z1ezNB34n)C)8LPPFim=(X!1uC_EY0GDU#oFdgZV92V=z>MKM;Bd>!LyT;SK)i z%_d!J4gRAdOry?YqmHf7Z?V29th<7mLb4ocbWY@C71agpNX{*3{3b>4`z8-zq6_|A zO{0gQfS{#f8m z*m#Qmq8tpCezHOMGdQ}W+#eLY(YJ#?e0ZaM`*Ro=IdLcG!Y}I1t>`~CpsC)U;(5?5 z)L#vv@ozLhgRX@JeK$1teFB^Oo7zLzT{QT!ZyKHH27ij@O_;(4-S(UOr!6!!`A=&e z!isA0hb?cyoHqH-STwp0oBVmNH#+ZnWG?77S@4HB)Zn-omaCktK{fghBOb!rtf2E; z@F$~aD)`e@f^N$4=>VpvZ!>fq=3YJ{uuUgcJ_-2h@aB+D0p5hEF6uG1nDnF5TGaQQ zd>-IX{`lrWHyzz@<jRp*bxG&=S=9ebUQv`+UQb;(HmX9kW! z-w8$C>lJmcCui@d!Ey=9wWteEPW?H&Zj*KXgqPEyYqM703bi`cT0Ntz)eX2--;uTc z!v+V}4F*?#!ZuW^b5^Ul5QYtYGj4 z-QzXrI&9EcZqVsz(ly_p)6<~y)u1D7(6jRfUC)jFyc45n^q+V=gk46XF0n>Egf!~* z+o*5sMt##Z>QSyyPxu@4P1~rOLZfc2jXLp-y1Q=DO`%Drxk)$nCciGs5j{*E_Nd{F zhI3mzp62~rB!~H=R5wes>j$ZtX@NsngF#IFV1L)PENC{psE}U!yx)kj{LKZZ23L9M&u| zEkQLJX3m~Ar*(e&yqUA7v(7|L#;lpM+gjTv?=h|V0!Dk$+M@o z&F5U39=OO&M?DAf}4@oK!12ONPzNd%>SrC9Pb~sbSe!(#jn|s+FB3t(ny%SF~)o-}fcu{=H_K z{oW-dIKEh~+go@G>2AgMY6i>9zTXj;=FI$OW+^id*=h90S<{*SBx-YJz4_gUZO@F| zA75;HW^yvC!|zf}xj(AdoZaLyv*Y)Lwmvht*+uCOy0$(u`F@{h+d29A*2!+*zO%SC z*^K>z9!B*v(C?E?m%iO*&Z3SYJNf=79Y>LE_8&B2bM{^2cdlks1;3At^_dMzJ_+cg zWIOYVCJvijaQ;J-4x8=RAMN9?+z7NZ+mAm6#ZtTcGuw__s*k1IG_=>uRwtM8lTyEx zX=!$g@(0scYS&Ko%_HAO#9D3v+HLlYRq)p~Vl7u?Qk&hf{OLrjwfk@XkWBkp*N4A4o(!Dr+Mlt-f$f@IZlC8*uw$)VvwnY*nyA#8jn~_7{bsp+r9Z2S z{bpBCyco-Yv+q#g?XN;7<)>tzFfA4{c}GfAo&Ec2)bm zLaLVQC)RR(==5gy_yvDb8f)!a)bABi{c?50TDv0sULjS>g&1q?iu8MhRBdWS`b{92 zUJht${V8$mmqRAC+4bg6nv>di0Tk=le*{YP%cUP{?RxVoJXOo3A8YM;^LvF~Y_b2`6^k>wPx-PrHfI*Ie1#pGGfP&kJ;mnCo1o~gwZ-Pl z@+jnNDa+tjm=z0spizS=C2i{np2yXU*NXcpYg=b zvrEmN`BRzLoLy@Evq94AKTW14E%iqBA171IoYpvWcB%Q(lGvPG zYW_?lHfOdq`B_11POSldwaHG2KTC+k+1X5g0QYC~si9M|nLVSIE0#&;{`@{QbZXN4 zMT%5&YUA*y@Tun1#^KLiY_mVs#&KuYzCXOi=Iq)}pJ)4bZ>sauyIroOq}sVolHTQN zPpUmN=W=l>)t;Jlxnz}UPtCi0(`(z)r?I#!m3iN#PhI63;neVPpDLGdcoCV87ruGzhf0-yQ)9h!UV*12b ze!*#%sXsNc!XL|1f@>XDJR0WE4y&BizvHDvYTvnmb0^%-9Ke_$C^ZRiV!^g& zrZ0QG>fd3eK6~Ej-!-;9v;6$lZrd}<&u@XYJ+u7$NxE&%EI+>mnRdV3*qk}5%f6ZX z=40zK)91G;+n$*||MA1NXQt18)nwYUC!zl1fNjq#Kfj^c_RREU&m8?X_O?E=e*G5< zwmq}`Wl#6A=Xd_sA7*&})ws=>>B}Ba{dYLFJ~MsUv$*V~{Oln%d)}5kQOlm0WlzPj z=U&;9Er0dLOs~I~VsmEsEqB7S+(CZ1qxy2^P|KY(Eq9i*+-cEr=RwPz_$>G3*K%hA z`Rw6;x#RtE2l#yUdxZRQ-&14{#mgN}^VzG9as)NYSbj#A5}9{(K6^zlpS{Yr+_5X4 zy*!uCUV~fipd+_Mq^2Xg_OqA4^4V)$@)JDUNA}Psx22>iGRK&F_99c>UtdlQlGzRA zv)6?3*#k{Jd!)%{4>kGhu_m8A*vRc0b~>_$8@bmbRgs<2>=7rQJ>=xG#~k^YpY1ez z)X8U0s`A<6j@&nr>Lasf%KMXtR7G~}XAeGkf0kkg$sT_4+2c>%e+8ZzB)j(g?|D)c z*(voubVyZXr!;#Q%4d&5@>4?FNA^gR&tB8WXOBg4qfDxg?388?M|uAPJUdACfRxW3 zk@DF?Qa*c3lArvgI?XQA>|sf6%SjEA-A=PdCb?(F4w5}K$*&qy6`8ZkeD?4pcmJdY z$((@XvqvboA1F0QX6+aJ4Llksg^m*7Oa6I#d2 znKz|Pmk1_ojx1?E*zyJ2PoA})?f=t(Z;z8unlo=++bnL!voXDe))H1^dosA+%HdKq zN$Z$dlc%?ioil4{>*#rHliO#swT_=NHI93Wwzj#ge&PB_O|QmGqaUqZU^2+e$@5#Y zGbCHbteI`|S|{#3XHNSJOkdlyWTO0l&23XKMR=1h-!x|Cy!q`qq*5vGIa6m&nc2R-ou6&6-sVlk_C9U$f?4f;x>_epo;P`KyaDFT zcN6B#nbJ0YKK5u^w(aY-oHK9l$+Ko2;8#m?$&H>od+LPA^XJQZ$dx#n&E1%p`?XD- zFlQ##mo&sq-2DH{YoDgQw#qInT{Ll=K_94{6MCMto}`KuMfqO)qe!;`H^_C`X7xatM7?t#b_!#^>_E#Z|p?{5pQ1Fzc;S?94oSeGYRJ^L*GZ|qg&qLsq{rrmg&4@nrR*!4<)i)sJEQds0tU-@^Lf$?B)F{(Y$@tLNW!tO%a0 z{t(uGAoXPRN3cG4vif6K|Dn{A)t|un;K}OmVEso@PgZ|7>w_n&f1LFnOFdcr)2t7k ztp0h{eSpTWilhuF4`rygxzh(VrQcqU@BkO}FtMAeQJ}hUl`mW&e z&!r!-`kt&0o~*u#K5Rc^_1l8WzmR^&>UU&)@MQHzfP0q9_DNQMF@1%2vib*%C#&b* zr7!X)$o zYpExze}MJDlhwb<`fsG3te(#?uLz#3{&&`YEA?dcf3rS#vidGK;PqTbmNQv>UvPQ& z<4t7s1Hcu*lhs#&wI8zjjlkvK%k+@dj{;W&PgdUo)_%z9w+EO1ApMZl^LgqO!IRau zgS8*B`j6=Q$o!Jk|7<*2{osxm?~gKGvihOmir~rWhq3-AsVA#1us(RQ`g+#?EcImd z!&x6ZS^bV+oiDO_KKESbi>!W$@nrR@W0cwtS^ZGs$?6ZF56g|L{u*%kFZc&9vicjq z6~U9$KLjrS760HxR?kznir~rWhv9kM+CN!+0j&L#)sJR<=!dMH&mq_T$?9)n{ckco zWc9bv|1O@a{%LSUs3)uMij&duKct?lejWNh#gop`XQ?y z&idfV>PNFa93RQ*$FM$lvie!TNuso~(Wr>w_n&Z)g27sVA%7 zkN#irWc3GuD?&Y4{Sow`o~(YM@nrRjz~$i~_hj|_yJ;1{lhxnG`mo)S)!)VX;K}Ow ze0E)5Wc5{eZh3hbHW0kX>TAFi!IRaGVtogxC#!E}eeh)UZ?k>{sVA#{kM+Tm)ql(S z6{Vi6{zujaPgY-!6LGC4tLO99wVteg0P8zS|77)pSsy%EeLd?}l6tcG;j9mytbSwG zcanOt`q8Wpo~(Wb>q9?e^|M$XJX!r*`tW`yt3L{?%Ym%^IM#>dMpl0k>sOZPB&$D- z^}&fbc=Wc7TG zyw;P|f57@MUb6a6SRXuD{Yv=QR=$c%KUsYja7FNB^<7yXmK#}pPu2%dR^Q0_Ri%Hj z`i)p0JX!rb)`xz`>iHac?Vqgv1lEV`hphe-)(1~k|2*qglj$L=f0^~clhwb@`mkQe z>fdI4@MQJBvOX+lvid(+A3Rz86*%=N?<&(nR(}n+B6za;8(1IyC!37KMgMLF5@Mue;!;BJX!raVC{#j{u6L{59x=j{tIwL@MQJBg0&yA`eoqqp3)Cl zeFr>my&`zB`m4a@y`-M3{yNqNPgegc>sOb0vid(+A3Rw-|4z8BN3!~!U|o-7^##_i zA^nrp*Rwu&vigJQ!~Tt|{xop;n$izh{Wv+lPx5eYo%gd#Ivicpt z6~U9$pThbIsVA#HgZ06a)!)tf&<|PteXI|jtp0J^-r@tc(VHESs%_%$m(Ba zeeh)UV|v1eX8(1GaS^Y}AP#?BuvidGy-OkDC3t)ZUk=56O^?gTH zzYJX7N2Z6YzQgLM51y>P9<0~X$m*MoC#xR^F7GS-lhscER|HR1e+PZo&dKUO0hjla ze#q*-V14jp^c_G^d`=;&AIJLO$?CtN5BnLi`it@RM07tuR(}~-_XA}0SFt|q zKgsH^V}0;s^|knW9@;-yeIr==C#&Cx^`RfK`cbS8o~(Wzeb^6>)qesm&xP&T_%B!= zJX!01XZ=8_C#(OP^}&+aY>w_n&{~KQz==F25 z`gZ>9fWA23<3(0~obhD!XMy$m3$pq}rk<>R6#DHxSmtX2xHm~vz_*cyNX^gS zs`Z42<2r3=sPLZPs`Z5rB3B77H2yMjwfL*R)x(5uB5xr45Nm?}gj^%O1FnTuhyDkH zt3v%ohBqeXrG5PWZM#696dR=LR@XENxRTcgST~~1RNb&2?j}ktLyovBN ztQjqQ6Mf*9$tCgcu%=n~Gx|-1eZ}1z&&OQKgRkw!jBvOHT_)i-x|LvcHdS15#JT8{nUVUT($J`q=tXvta-lhW#Fp7 zJ@NUgs$F~yxO#!`aQc0OcQpPH`hCSe3vS*|_+{h2CGRi(XYv8U9q?JE>OkRD4fiD< zB)-P@W^nbv;>Q}^o;8Pv-e83C}S8Ec(O6Uq(Jc_%_3LgPTLmL*yf+=4aL% zC0vfrR@%>4^3me=Bp)N(ZukiDvEt7IS05*Q4gK-Lw~8$B!jFNQ&li4@{sQ5r=`R%ik$$1@O86XCeUWfa zaP!5&Yl5pT5w2oQ;9>Nk&l=V*l9~zRONFPh{xabiQ}aFj&Eh-sLO-_%_XJnnDqKUpO?U#h`gY-Mz|CP?Q|SXA!umU; z<{VRh8SC#9{{Wc>VZ1(I{bJ#dSReeK;O=*eAArw*Rrd%F2Ujl<9t-Y%ukb#s3Da;8 zxcNTu=YdQ23ois$KOp=z>mL;Ufb|avuY}KK)qz(AS3NAgE4VpuIk*&RhJm|3A~hSc z=277>;OfVOXMn4g3ePiq3^@#Y7Pu7n8v4hj{%*sslb;a(H~C57HSt-jI{0B=?Q>(p zyRs(KPosZIhMh%zTDYAx&j=qw|E%z7hOZ$%C;kD$&yt@P|AFDY_#9XDg7_Npi^9Xf z)xnQ4HQR%`za%x2z|AiUPh(BsS>#v5&tpxfKLlI~d<<(|m71sNUlV?nKJZuMQ2#wx z`&kvA(VAbE`ZdATp=KR$)f?jb)4wS^nDuW74>Md~&D-L~k;8VoJ8S+ceg?QI@NwjK z#Gl2QcZF{NR|o$xxb&X*0r;$^_4VNH?~5Nt|AFw%fvZDJJN-xE43AfXS`ZK^)--};J{z3Q(*8C`Z1GqWVJWc*d{Oha_ z{EqRT(f=$p--AoP2(O6G!lhq@hk~nq6Rt5l%J5ilb*O2fpC|R>z&&OOPo@7|c$)EZ z4If5skebuTO~TiJtN#!lj(x6v7eFp@Cydt~_)k4q{UOGa)jtU?|5N%TtA7?;5jdERqVtw#r^&RjzU8jevzQ6Hg^^NrXaAJ!WS^W%CPgcLkc(VE%=)<)UvidRT zx9V@1{(0nogcp*R310@T{#W=8`oNEYyE}YP!;8N^tSS@kj{d7U2-kqSuOPe+xU{11 zNv!E8%-`l!uOy6*`>w2$F#pXNt_;kjky}}6$m;u7T4Mqv^YdC#&Dmc(VF!=)<_k>ZgHqTzj%6jEk%_v+2XQ$m$O;o~-^5`c-7w$m-7k z>$uKgO&AwhYc8M<<07lS%6PK+>*!aNago(O0M>Cm!kREHverCKAI3#i{{sDL(kEH{ zEA(L*lGT3!)^UB!8vZZ`FS6Er57u#!)&FihS^eMiVH(KlSH$+Io~)j~_04sY@sicA z1J-HddpXx#YRFnMkUk7cR?qji4!aR+!g3~S%_#aXELr`wU>$Zx)`aCo)|y@E!?0xa z{M*!JJ!CrDS!1{|@P72XXoMG8{h`K_)gMXUOX|t$&jIVWE?~{-QbX37i|NC#Wc9a$ z%hr(k#jG)08TelMHKm5E{t@HJ>iJvWTyLo-tA7hzwwCyJS!1{|@Q3tkOAT55m-OZ0 z$?CtMuMkgGU)CXxt0P#)Mb?_m^y|p5Wc5Ah!??)m*P!ns^DQAQvijFK>`?Jd)mm0GAA2@84_+MCKxH9k`^wm;BR=+B)x0ekQ-yNJY zTp4(E`VFLptiF=N)`(x9HHIq#Z$O`y8nXJ)9JU~S3~LNm25zA*N)1{4ZXC8&{AAV` zt_<8pUnezW_4{$ydhrLb#&Bg|{ti6XAT?z5XL8s^@#nI}aAn{N>6@g6te(FiFB>kN zzZ=gPt_*w^{f1IQR{s=--AMd%tT9{}_$B%gQbSh%35VTS{1>b-Tp9Rl`jJvYR{t-D z9VLDRoSfwhR|f7xzlqe4)t7_IMvLd~%yWh-1M_$0xsue7)z@*@X7Np|Fm>yB{gLAZ*bTN;{VGU!*Yc2YxDKZL_>FTRR3 zhARWt(C;8MWc4KuyQBEcSYx;{@D}ttNex;3Bo4c?_&r!-xH9lG`dy@ktbTtEyQ}zv zS!1{|@Zt2kNex*&fAe29N&I=NFfK5hcAEGV!8yZ~fmf!VE;VHJ z6&!Yk_gze|p5lkI#&Biejp_H28nXJWIqWR)+p)%QW#FCY_m zdVY6YHe38$))=k~+)h77YRKx3<*;+bpU4`+m4Q#C|Buv=)nCS8=ZU|HHHIq#Uq?S* zYRKyE=dkVKA7+i=%D_wM7f20RJ#U*V+ebWayUH1^49wdYa{EdRSv_yFDcesxf2x%; zTp5_ROyu^L8nXJXxP(!5fcT!^oZ-sAYtkPmHDvYcaoB^zSF^@&W#Byh!BRt3-^^hT z5kHnShARV)qd!z?$m%B=PgcJJ{b5p1R=+1$$2FTZp?|X0@G@NPa2b}Yet-HS#FNz@ zOn;qeyr9VbIS^b&x$BHMbzkvQY@nrS#FlvANTvPqNnVvT5#g@nrR7P&!{^^&RQMe38|cgLPbeS#t*d!HcXl z1L)5bPgXzFc(VFo^k?B8yvXW#N}W4fJXt+Yd2{E8C#&bFVeVY;&nZe)$=W?%a(7I+(P_= z7g=k#iRUg7Pgc)Wp1W8)Sv?o4j*G1R8nBM*2G(4HfAAt}%`Nm{zd=^N6s*HO#hNfI zS!>tSLKQ^AM{&V{9J|(OF-gvV5pXnFjAH2xw|1zGe{$Kh_ z@ef{P^(*7|IqJ#kSEav9>dESR8BbQdETYr@vA>S^Wm| zSBWR9uQ#5oemMQrQcqT2GM=n{GkR`Bc#+j_Nq?<)vifc4PZCd7zmxG~^}ErB{SR3^ ze}AQ(tbR}Wu&t8S9}L!Q^>EgNZI!GwN7IL4$?7ix>#&!yCJal~nk(tUuw?c3gLT-4 zSrdjOYt2&n>tvab)jw}MS^dlO*GoNFJ@4;RPgegCJ>SrHk=1`^JX!ru^kJEk)&FZe zS^WxKP#@-gn1`x%|QAaW!lK*w}W+F7PBVI3t4OKr4RE$R{w6RL zO_+DG)?7~?-pge54}*2srK}0VlC|b3`Xw@6vijGIC#!#p{$8mktLGz`)RWcou}8W4 zq@Jw)8~U(sC#(N~KJ3HE>O11gZ=ILUV4WAT)~rS!=7p@Dj}1~!R?o*k9%nMn49etP=vii-zIxpi{6V?k^Yqq9;P{u`8znk%7^^@rzl6tcG znZ}dV?@j-()RWaOFrKV_fBHwHo~-_G`Y`Wg^+(f(c_*tsAFT6!5o^M{leOkj`Y`Wg z^*0(%R(~t~qcUw|_4gQ0R)0VJV^U96zmz`A3t9bB^!(6(7g_yF^pA@ttAC9?%sW~A zmtdXuZ&(xNovbxK(1-UjS$${x23v<+4V-&I#!J?k9`sL&C#xR>)?wFU4L|7MMb?^X z`lrQ{)o%jUVK-&XGg3p=n$78-6;D>b4ShJalGSfdAC4nr^{w>JNk3%uQ|QC{nyh{n z{qs^!RzH_MY(Hf6`_sQ5^0c2~R(~%2tK!M( z7ty~ao~-@~dVaXXi>&@e8#FN!OLC+7bc#+jVL;qj# zWc9BaPgegX{X0@mR{uWzyW+{}Kc;_AJX!tM^zVx&tN)(<1My__f6#v@o~-^K`j5nu z)vweQo*&BbBCGF0|A~0A`d;*(iYKe@P5+sAviknUlhqHT=ZAj0$m$!w`d-_RHQ~KR z)|!#@VgEo@zXMo@-Gwz_ShCi%(uemcS^Zwdlhx0m|3apdto}%_j_X*~d?__#tvQiC z3`dn*M*{$?9*W57&su>TjnH%Y>}{39ydq8PX*@9DD`CZ9dQ4M z&O2FsZ?MjL1#7~*leMNFeOPW}^|fFfwvjbqShCh^L?4DFtKS-|!*0i#?_`?ETC)>9 zFK*#QRzKNzvidgqFfOwC1Hd}2Ls;{J^hwql-oK;6lGUFJ)?qJXO&FG}HJ8wb@sicw z0oGyfW=$BDtTp%1hhfR;Ujpl}udyZ^@5oy77X6PhFJ$!}8c$aLDSa3hS^b}29oI6} zg!4VJ)^x!AIJuu>Tx9iKj3=w_O8>Lelhvq36Y2yvXV=GoGyeD*C^ro~-^RbuZ)5>Hm&m7W*Z@gl3|eQmkU;>qgE>AQ$0 zs~d6!SuXHj~7`z?~lu^CZ4RmK;Kn7S^XHWZhI}P3CoJCHCxh$WkpuMJ$*On zldOJc`mn6X>Su#>T=Q5H&cn%Cvk!eZ4=1ZX5v;?W%9`#nUb5DlN#8>}S^Xu(lht2N z-&5+z>aVBg7ae$!)!$6Nx_Gks#q?o6Mpl0>eb|qY)jvuf_G4uAPtb?`7+L*)!8-5n zvnEU%S!+I~Uqhyito}RW$?AWi=MCj}k=6fYJX!s}^!$#_X2Itn28nV_@ z(623?tbPNq&R3B&c#+j_WjtB^MEX8bPgdV*JX!q| z`o2<6R=*d0Kk;PsbLjac7+z%c`_i8z`$Mw&1L@b5db0Xc!Md!@WKCFBWUV=uet-;1 zR)0BtPCQxt)%5%#4llC$n~f){znwlTTeA9l>BBN4tACJwkn~Sh{{;PD@nrSS&{v8l ztAB+)EJL#TH|U2*Jz4$#z`CryV@+6AWUcv$emxnMto~o)$?8|=h59h>Wc8~UPgdWJ zJ}eWm`U>O8>if}$WkptBNgtLKS^fI-LuLBO>WlPYS&`K@(1&G3R=)*Um(^CR3CoJC zH52Li#VlTA^{vK})lZ?Xl6tcGImVOK&!?}Jdb0XM>4%9Yt3Q%HEGx456Y0aUBC9`@ zo?js2MOJ?G?2JyvXVwHJ+^g3HrR$lhwaq zJX!rK^aZIWtAF2kvigtdi&9Tk|DEw<^*_KtiCsWSQljV74%_UkkxMh)^$;24SxuL7g=i>=tG}m^`q#+zL%_?&r;LlHCg>m zU>(zx)J)1QfN)1_S&Zpl< zJX!sf#*@`wOCNp{LRNo2SjY7+Yeq<)WUX0Bzp;3-`nSM3?7OTPDK%uR`H+5;c(VF0 zjVG)BhW;EmK9be{LVvD!vid*h!*5r}>dSC{z5W)3tiB_C_$>-q{c7~#8V*@~5Bg1H z`pN3orVrO-$m;vhhjTfy`aD>dRUK#i{D9~%jWcB0e zo28zterx(L?_~8m(ua8`tKXGAT)!f#p99u;na`SV9h(=Rtl3d&$Xat5J%3z=7g_yX;If^?FJX=0%D@lM?;tAC1q zSE(nff02GS@nrR{(oYgkR{uFzr|o~N3DZN?n(yetw2{^SW;|K_U-YdqF0%S=cD#29to}drVV#oIFQ5_AL4c2KR zYfT^eusxI2uV*}2eKkFQh>90keI0#RZe;aM^kLe_>c@k1+O}rRUeYI7Yqq1GC7!H) zH~O$V$?7N5hvi9DKht=!`n~D*mj21=7Z^`gzd!wKsVA#H+<3D3qv_{JJz4$9#*@{b zPCr-b$?DIi|BraG`ito2i6^VSl77B;vifW3+r^XB-%7tgJX!sn^!tb>tG}OqU-4x1 z57X;=$N1O4x~|`1P1skHb=Y_5!?cmr{{SxAPsa5NYYbNg{)2vhsUfS!ZBMT3NdD^_ zelmmmo}>nsa9r7e!Z=*uo+jaP^1;Fb$cG45k`EOgMm|iqj@(JkGn>G%scJdj*{@EsH3O_=Bmhf}rvxQ$GpCkM(xrZ#D55f8@3$i}T z;&axVEA`)!&lCQUe7Rmm3$^BFrjFa5|1#SbB0B%CK-EZji8M0gMKBH_Kr zmkRGozD)Qi^5w#(ldllwvpCAG6uzE(mGIr(*kwZXZE#FO>e8vR)Fu=pY5Fy12h5%CS=M}__K79JDk z^A^gM3U5n(T)36|gzyydlfrYz{bhRQgL6-bC+qV%_Giu0;twZ3BYZSDOxs!HXT@Ji z9w2>Q3C=wyo~+ODxSlo7i@%-xg79K;=<{)M=<^lwKkj~)TD^gF^=YDi!&8y;jlV20AAcsDOlEZX1kcY^0ZV1l3 zF7;%69>^xFc|-i>O8UG6oO?&=$(6zLc?D(fiocQkp75>Y&?lcupnX0^=1qZky#&s^FZE=7 zu84mw!3W~`%z?5Gg+C^TKK=6t!o2@WUn704!28NSl6tZ}Z=^H0>|^nK=0Mpe!hE)X z_BoIo`plCH(q|nw_o>vA^*JOPvgR}K{@DVb3-j3m+UNG<(B~9#t@Jq^ocluR$(6zH z&6+R8FCc# z+$eoM1I~Rb^<;gX$xE#HPW)Ts?}gtbhd#e1hw1!-JY4$x2b}vs>dBSCuYgmQvLD5- zLjFm(8#(mZmmKdE@Nl=E5hm-tJ`e+yqp4t?H1 z4t+jM9xZ+Pd+q;`dVjBd@XxSjnfO=8{|diB4t?@Z$!ecJk(;GYe}BEh4K#R>_4z9N z6B=b@;ydELIk4auR;7IG)? zyysn?)3OUVx3YM$K96NGYdVXcN$w)NH#ziq5IOXDJh?@t^JH*t6{#odb6R+RdKn+$ zj@O0c)r2o0hdys4hd!5($4Q?LfOB1?o~+Mrd5ksP#6L^!F8m@n^vTDYYM)<|x0F74 zpLni^)RXnOE__U9Sx@oH$i0L+U@+~oJ9%~SeaI7}&vo&?+#2G^`n;D))~qRh19ETS zA~{SaH#?oqt;pNpAG{{we>pzzKCnIqW+&FHEq*eYe~=KbHgf2*og9|u;pA=c4_-&( zf4K^&C+qWJPGk*lSj6j0avx!SO`?5XMGk%5PTn5>;I$b4%khsN2G-}s@Rpdee&Uys zdE+Bqylp`H{@{nb8SB8TbZX^KAIhNla;8mTAib8L8cF5}Iqc=7O7 zRuJZ4M*HM$PW$9rSD$;sw^ptw^<;g%4L9*J{=o;lxcbZLgt@A;Pb%$mGdy=yPS|>EjsWL2m3p#1Z>Pi>t~9*1Aa5qT6*=@di5&Xei#$*IzXEu@~T&*$NNlx5tY@Vc2iUifx$=<^YB z=<@~gKGNqa;M|r{PuA!5@V>~ht;F+Q$g&B-y#G=A{Fxm3EW<@Bea=ru-v70=)RXmj zKC7^XH*n+Ci#$=dH#tn_ATr;4cooP8$aL0&b9|%VMb_v1Y{Z)F#5a?9BRF1T$)V33 z$YDCCk`IzTXMl4%NIhAf|1+C4d?Vtu4|yly1IVGz$|eavM-KhGMQ#=UE_ruhf4|;jVcw%x zwukT^tJ%b@bTmY!Y7mW5k8;Hoh4ou zk@pk6mb}04jpPG_?;#&3d_Vah;it&l(c<+S`4Hi^$cGBQOFm5aOY-5u-;j?G{)2p^ z@IU0EggfKDm@@9X@mh_1jPTmzV}<*Wj}u;xe7tZq`4k-J@MWcnV&Qkmmk57JUL^bt`BLFO$d?KKL%v+NGw(OK zLU=VY50ZGTO} zrRyM{bzAeYJe;>bkmeQnS@5gkW8l}sbK%#;r<674!*9r61ivZ123{n-0e(w-5B#?H zarmF&m*98AuO+T|x5Rn-w`l$)|1Rw9N?hEx1kT%UL$gGEZ}?O3F7RjK-4YiM z3+L^5JxKO*HKXA##N*&E#j|0*K6DQJmHf%@f5g0wBkR}4T@3p*P*=fzz0%FFUt7fM zFR~4Ex)#D;Ydz1x--us|@gwl6;^*Pj#Bagv#h<{di`nNn%N-y_+K)8Lo8P3-0$xkJ2E4X74|69ejh--X zijzifxPy3Ccs=pHa85h{t`X0I*B2iHZy-J$4l$p5mCcLUcQ?z29HwzM+)?~Eypi}N zxRaQDakJckOXD+m6Y)=QXK}-{4`H^8n0;KcUB&Cb-Nc>X?&4l>4{?9Er+9aGQ*kZK z2Qa2F8RkuW(l`X}CFb+9vfQCegMB!&TZ-qyTZwOiw-)o6(OK?jrtvhqt+=os=62%u z@!N~Pf_sa9h5Lw`q#XjX+(}Ji6}X=`2lp3ufp-vZ4eux(2oDgmKVf#DcnrLgcsk4- z-!zVZ2Z>LHcM+ct?net`olqj}yNGj~9OmPZ0kIPZU?N56J=IRxl4Lq_H+US-cTEMZ7sY zRooArCf*I6F5VwLP&^5qA)XD-6tmAywqATT%mWo^Tn-;3z6Cy5%)T_)+2ZHmL&WSS zlRZ@YZ?$W_-XhQ@$2xZ;t%1!iNAqQ6aNXHE^d)_(8-=5 zUK2i3+z~!Yyg7WfxIcW3cqn|Xcock|cp7}Z_y~BO_!Rg8@dfaO;%nfG#CO3LiywzC z5x)#yDt-^XO#CH0U;Hb4xp<}Y8D7~d#H+zqiZ_54hm+_o4Znl3&x_Np3h6eym`Ccer|I#!^srg# z#py0ix}T^f-6To(FXTJGFUqeEza-ue{!z`w@XPXD;a9{x;aA1m!<*@}_k%l#2f(Ll zJ%ivI#e2hRs2KsjruB@3-H(OcPlsPuQxCr(o(;b#J{<0)b)E<>l0OwbPse)(?AJG) z1J9G62m7@-7sD6I&xif`qXqC=TIa2>_gB0Vo}=Tv7xsR755jG=o`taY^?CxnSN$_^ zdo|C)3*}#ey?@keu=kHz1n1Ph1OG$)V%YmBeFS?yr6q8v{{r^DMqk6;U+8=I4Xx*A z*!%qa2EQeruHZ}e+u<|Ivfgip&nYYJdsEn-@ICc~{RzGQOgkFyKhqxeJ}_&+-Up@w z?EO{v{Iaa~V=3%^xS6(pW4!l8;d20s`;+v9y+27W*!zC)8E4sVv_0Fy-mjw{?EN|h zz}`1w5bS+3hQQvxqVPFr-oIjRy!VCR^Uku~M`9%G{T#-^8Qo8u0DE7B$#6sY>F@xZ zE-+-VO#W-w&sTmAZz2CP?B^VRgSVE? zuwUh5t-m3>oqQ8`s(f>}k9;fG&)>C!`^&e7{T$p{@BsM^u%Aa;AKqDhL--)Azp&5h zuJT>+v*mljyUFtzYQ^WI_}sMY9`f76eqN~`JWPH7JX|~o-d8*X_VYe_z<%Cm??SKZ z)ChQg@krQz`^Lil+gJGArOnKY;rv`H{ZdKeXqrCar(ym$q;VztbX_Zc5xzzID}1*& z&;CLWiHE}cLQUf+_&MiboOO?inoKe5>JBrh|h-y ziVOQ53=y-dTy~h4t7~?D@s4nvcqTkqd>K4b%)`prL&ZE~mYpN6Nq^q5{8C9{Fnqe0 zyGdC-XfX|LB4;lV^XEUyFN`$)gxQHZjZV!I-!3jZzj>edSUkTB(zpeFTKrG=1#x4Z zZ+cza1LlgJ2Jcsy{ZM=g{F(S3_#5%d@Q>ohyCv?EE(mGd)+6ze;`h=#m(Du|>_3kg zE(*DHUNGQr^Pj}IblMnjxcMn@E^Rjh4mZCi&ZX^Oz~QDkZB{Nlm&1U=O-p=wUV#CJ zn^p0xV8Fb7mBB?b*S^F&4#Lm(0{n-B0C%fsP@ zt5a?hc{tpBi|;HChnrvUUF6|#Qn#Hg zH#vMyc{to`gx^#i4maKLo5{oBW=s6$@^HB6i|-{5ha3Jr=C+WB!wr8Qb6d*8;fBAD zxvk{kaKqon+}84NxS5RKMjj3~_4sY&;czn>f3mJeaJb>MC%L}r;pihiAK$OU;buO* zzdRgnuEXyj4~LuE@jJ@H;fBvD%?*%;!ws*0$(^F@gu~72_+8Y)F-XkkkmhzRak%*e zKUf|PH~+y8k%z<0Px#&B;c)Xies_5|+%&36eyBVgZdS(cArFU}_V_*J;c(Ldzn455 zZg@>iZkRkAZo1+3mWRX5miT?-;c(LzKU^LTH-qr|%ERG?*W=_y$iv}g1b#nxINXfI z?=KIBo5}cEc{tq6!jF`P!_5)+QSxxO;q^PY(eiM(ISoHX9u7C>;m69u;pS3&oje?F zuEvj(hr4~Lsa@Dt_XaPu_&0C_mvyo8@54~LsY_{s8cxLJ&! zA`gd~CHSfGaJcyzKTRGEH~+;?mxsemwqf!I%ERG?*BRwz$iv~L4SuFP9B%mB)m*(i z9B%l0)!Zz3INb2Mq})OBaJcD?KUf|PH@rqEH(MSKH+}Jk$iv}gXZ)e^aJb>KS#yWU z!{LV4H02JLhr`WS{1NhSxS5PUQXURB_4uRY;c#;V{%CnP+#HXeBM*n0zu}LOhr`Wz z_+#baaC0gCIC(hST#Y|o9u7A*<4=%>!_D3Jx$~PaY08ytXTMzC0XmdgJHG!{KHi{sMV8 z-0X(GP#z99!|)f$!{KH>{KfKcxZ$;9xl82Xa5E8qsXQER4#Zz34~LsW@bl&2aB~#? za(Ou1%*9_J4~Lu6@mI>j;pTk&0(m&xT!cThQDFfbZf?V0ryh=L#k?LZcYTS&&ExnR zExG{sezpiNno*@VCpu;pRL1X<9!VZdOVvcaM5F?iRPf z-&^8v!)Mgy?vsbZ4WCz=Jp4aO9BwYd zzaS5Xn=A2Wr7vl~;pRU4tLou+Mf@24wGxM$=kTw~!{O#d{MqSC8gRJz82`3OB`+v!+#?W zhnu7D=WG3NxH%X9qk1@g5cAouxt~fLZmz-qEDwj98}ReAemLAbivL|b9KVVGj{l>? z;pSERpYm|H;d5PcyofUmINW@RZfvZA=4q!~^Ad-fPWTq`aJb<$eYuOYemLCp$G1@rhaWrTX^dQ3c{tn*!?%-% z!_B_J>&9V43<>7EM7k`P?4~Lse@Ez2{;m3Hd#;+$2 zhnrjQIe9qT@H)ZVrCL86Zg>q~F0USr5Wj-ou*Bi!pZJdQaJb=PU2^=wO9Ku!d{jV= z2L;oB!;eM(f$t&@hnvPLCEryZ4mZv4^R<3B-0+&g+@|W`@Z;MX;d!7j4LIEN!1IP8 zX~5xTbNuC6KOAm$!Edb|j;+M(R-4L{tB%h4mXG3`>KbdkN6mT zzY>R=Q}F%e;c#<0oupa>xaV)uSv}9 zrXG$V;`Maj2Nx;&X?WINW@WKSCZ3H|%1byFu%R!%cOw z{IMktH>=@~lZV62n)n;FemLB8!=I!cjuXXO;!iGdxao^OMIH_}JK}HB z`r&ZHu9>+r)WdPQcpU!B5{H{<__O5Ua5EEsv(^uX8+P@}ov$8_^Th0ymz!7OaB~s< z0(m&xu&Z3|7Ofu+H|+kEyHq_Kmx$TjDtB3l!_Cw9`SNhMVOONwty(`EZr;aVr5=t2 z;?M9`mpI&fhrdQ14mUsHZ`1nWaMPlB@;9o7;|B4n_?t=`Zq~)$EDwj98vN~AKOAnh zz~7-Bj@!k3@OPFt-0Y0MOCAn4gYkE0{cyOc!{4tSj{C&Ct~2*QiNnpo_y^_TaB~=* zH}FUU4mW4wA5{;>LNTxX%sp1(aC0U8ad|l0T!X($>xaV)pXZo+Mm-!)i=VxaY5DlL+KLp>a? zi`T)wS>kY$$1jqH!%Zjry;?sUZumUM+`H=Gct^Yw{$C{yH$(C7$;07h7@j+zX~5xT z3jQPYaC|5}2>)@3!_86nPvqfnb1eRTtsf3IycRY0xq3K06JLSQe>8!@k4%{{0d4mXSOKdFJ^NAVK;&m|5w-{Ai%4~Lsy@W05z;ijr( z^1sT%;iftMH+eYRtb+et9u7C_;Qx?^!wt{p=l+z3!%Y`_ra|H73x}It_^dn}ZhGSz z$iv}gCp=HIrU8eWA^3*!aJbnUUo8)Zn^E{i@^H900N+?14mUIK>;RPp9BvN9uOttL zn`7`z<>7F1GQOES9B$6SH|4ma21SC)sv&Fy%0)Jg*mH}~UP z%fsR3F?<_&INbal-&P(DH?QE^$;091ZTu?oaJcypzp6YOZa&AaCJ%?3@A2*B;c)XC zo;N;B0}eM0S5BTM($j#$4X-24ttk(On^o~^$;07hE&ST@aJX3?zm7Z{Zg|~sZe4je z+-!#LAPG6@Og{59`bOwc?;iD9u7C}<2RLu!_BAo z&E(;5^9_D;c{tqs7vD=B4ma6W$!{SKhZ|n6onuFjG~jT<>$P)R$;07hE&SH z*MR5x%fsP@*L~-9kcYz!pQV`FQ63IA$KnUb!{LV4gXady!{O#^{7&+4xVad=vpgJb z7T^cT!{O#e{4VlvxVa0zt2`WT9>x!rhr`X&_#yIexZ$;#b@IdH;c(LgzqdRbZd&2@k%z-gd;D;DINWr= z?<)_7n~wMq@^HA}^9^(R$;07hOZ@)waJcD%ua$?x4WEIS8z~Qmo89rFOnErme1or-hr`V;_*wFBxT$KB{6X??xM_|*SRM{HtKetL!{KIa z{2}sixM9E7+@bPtxaopFOdbw5yq`esaCtb~Y>z)e9u7AH@JGtS;fD7g$Q>mQhnv0e zN6W+EW+Z-&JREL#zk=K`@^HABjz3l&4mY#$$H~LtW)A*%c{tphj6Xph4mW4v=gPz3 z=0g05@^HAh5`U6B9ByvJpDYiDo4fF*$iw00Vf?A`aJYF2|2KI!+&qszO&$(6ui;OZ zhr`Xg_%r0;aPu+#OnErme1$(t9u7A@;m?+b!wsKrm^()v4mVBOCV#Fx9Bx|S&y$D4 z&Fc8`<>7F%9)6xY9Bw+|FOY}BO*j07@^HA>5`U3A9B%sJFP4YH4WDV4yF?xiH$(B4 z%ERGiU;JhAaJb?9D01`V;cznrf4MvyZVtv@ArFU}qw!bD!{O#c`~rD6+?iN8r6 z4mXSOH_OA}W(oclc{tpBjlWeM4mbbB-zE=-n{2z}Z-@{QdH9xY-&1fIJ*-hT$Y8G?UX z9u7Bq_vGPlb2NUjJRELL!oM#MhnutT zAIQVu=3@MZ@^HAh3jdKj9ByvJe=HA&n>+EJ$iw00LHxhv;c)W=eu+FBZl1?~Di4Pn z-ajYznLHeB-obw^4~LtN@L$No;pPkcm-2A9`5yn3JREL*!~aJf4mZ`SCjYfO9Bx|R zzmbQ-4e#NT`&J$fH*4d+lZV622Kevg;c&AF{s(zD+-!>fQ63IA+u(nahr`Vd_@CwB za5EVHUwJs(48#8-4~LtP_+RDWa5EAAn>-wD4#fX14~LsW@PEj|;bsp0PkA`p@IFPk zOjY6WC^+1lh0n^v;pQTI19>>yT#2uehr`Vc_=fUuxVZygEf0sA2l2e{B@H;-Jb`a4 z4~LuQ@lE96aKmR5=2nu2!_B++rt)yO`550!9u7BO;+xCE;pPW?3wb!){Elxa4~LuT z)sp9hJ88h-rUky0JRELT!MB!&!_7MQHu7+|$>ZC~!{Me2zMVWAZhGPQK%O+bB4aJZR?UrQbiH;3cb zmWRX5arkxQ;c#;*o(~sF0}eOm;5*2};pSredh&3%S%A;U!{O#8e2qLDZg|hD-1_ox zxOo`Afjk^;p2CMb9By8~=jGvW^9FuHc{tp>hwms4hns)nH7F13Vs`TINY3r-&P(DH<#eIlZV62)%fk@;c&zInB{uQ!{O#Gd>?r@ z+&ql$D-Va8r||vc;c)XJzP~&iZWiHpkcY#~V*HNsaJX55A0Q8ho3HT$<>7F{=LzO^ zl83`hcJ<_UmWRX5O87zYaJXrM-$fn{H*4Z|m50Mk4SujZ9Bw+{hseX>rU!mEc{tqg zK5x0*<>7GC4?k2M4mZ2t_mGFf&7Sx@<>7F%AAT=+INXfG50i((%{2Vp@^H907{8A^ z9Bz)r50{6-%}Mxu<>7F1CVqrG9BwYa?9ByvIkCcbQ&HeaM z@^H9$3_n^P4mZ!?$H>Fs<~96Sc{tp>gRhf^!_7zdaq@7u`2s&)9u7C(<0r_&;pR8| zM0q&eRIicz0rGIT;l22BljPxWvnqbFJREM;#ZQrk!%ZGPRUQsEUGUT7;c&zI`{ky~ z!{KIo{DJatxEY9_ArFU}-SIQ!;czn?UoQ`bo6-1L@^HABgg;0g4mb7qgXQ6H!+Q+o zX3N9j<^=p9@^H909e=1i9B$6XA0`inoB8;|<>7F19sUS;INaQZKT;kJH}~O>l83|1 zWB8-x;c)XDevUjGZeGP7BM*n0cksu`!{O#*{BiPdxcLfyygVFke!`z14~Lt~n#s?V zhr7F16#hJU zINZ#|pDz!Go73_07GC8GnO39Bwwp-zX1UTXRp#!{MfS?c|@4hr6&|19u7CF;QuZUhnuzW z&&k8#W&`~5@^HA>1pg0tINWTCe?cA&H{0M}l!wC&?-`qWNgfV2gYhrR!{KIc{44Ts zxEYCmRUQsE6Y#Ie!{KH+{&jgc+|0(mArFU}qw#Ob!{O#6{33Zc+?<7fOCAn47vkTR zhr`X4_;pPwgC-QK(X|zuA|CWctO-uX|c{tpx zhW}I^4ma!KKa+>UO&FXiEI(;NSlJREKY;{PKLhnwB-U(3Vc zW;p&Ec{tpR!G9|chnq?G@8scdQ;+{%9u7B$A@Xh4maI+P@xjYp52 z4~Luf_>hOg&3gE}JREL1;y09s!%a7QM|n8hY=P$uvC@FUP4C3HPV#WL8HnFl9u7CV z;Wv?o!_9DfXL&f>jKO!2hr`Vzd{=om+|0yxlZV62VR+uSD-Af@9Gf`TLmmz{r{a6c z!{O#E{HF47xVZ?wnLHeB7T`CRhr`W{_+IjGxVa0zg*+T?9>Q-a4~Ltl@VxO@8gRII zA#rYNc{tp>iQh&Z4ma=Nx0Q#(%@X`}@^HBM8o#|f9BzKb_m+plO?JKH`^dxLrYXL! zJREM?;QPtL;bskde|b3EFQXDi4R7>G;9&aJV@HKSUl5H*@g2$;07hE`E1;INY3$ zA1V)roAdE|$iw00GW?$MaJab!zn455Zf?O3lZV62z4*Q5;c&AMzmGf|Zl1vpmxsg6 zOZa`|;c&AEKSCZ3H}B*3lZV62r}+Kl;c)XUzE&O%H^1OV%ERHNK`!}G@^H9miXSZx zhnu$eG4gP@Sqnc_9u7C_FFemWRX5MEn$aINThFpDGWBn?vx^*e8ab2EOHJRENB!5<_Khnq+62g}3Z=4t$Fc{tp>h(AOg4mWS& z50!_*&0_pv@^H9Wf7FXsY(7Qc{toO!5=LThnv>;Ir4D0 zSp$EJJRELn@W;x-;ieP*IC(hS^u!-84~Ls=@F&Q_;if-+t~?xWcEz744~Ls!_><(} za8rvvSso5I-wDj>4ZN4~Lr*@u$nf;pPnd8S-$rnTJ19 z9u7D2@n^}y;pSTW+469>xeb4gJRENB!=Eb;hnq+7=gGt2=I{9P<>7Gi3VxnE9B$sm zUmy>Mn-B08%ERI2bNof}aJcynf3Z9qZhpgGA`gd~hU+JPsXQERn&U5%hr>-f{Cs&h z+^mJaTpkWL8{n^yhr`V#_$%e%aI+bHfjk^;w#8p14~Lr_@mI^k;bsW_8hJR}?1R5n z9u7C7@z=@2;pPDR_407InTfwa9u7B$<8PFQ!_9H{o8;ke^Edp>@^H907k`U99BwYb z-zpD>o2&7+$;0917X0nqmhr`Vh{C)CpxcM4?zdRgne#So_4~Lt~2FX7t4~LtT@DItu;ieV-VR<;*td4&~ z9u7C_;TOuo;ie=0QF%DrbjLp?4~LsA@sG>H;ifPC33)i&?2La>9u7Bq;GdF*!_9v9 zr{&>rGYN9B%%G|A#yrZqCKOAP({rJREKo;op#l z!_8v+oAPkD`2@d69u7BO;op*n!_ANQx8>n*^9TN)@^H9m6v@9M4~LtU_;=;uaI-4@ zU-EFcSr`AFJRENF_{H*Yxaop_UmgxOo8v!_hr`Ww_z&gba5Dh^kvtr3cEf)x4~Lt5 z@t?@U;bsi}-|}#{nT%f|4~Lss_)q2GaC0R7GkG}NoPhsa9u7CB;lGfF!_E2lFXiEI zGavtzJREMW!~aJf4mY>qzm|u?&3*W9hr`Xf z_}}H>aFfUXArFU}F8Dv?;c(LnpQ+9;;Bd1&J}VE0n*sO+@^HA>4PPY>hns!y4dvl* zGa6ql4~Lrr@VtR~8gRIoiEk_qhnvIjP2}Nla~yspc{tphif<|phnsWp&E(;5b1A;L zJREKo;9JPU;pRqsOL;il+=*XV9u7AT;#pH<5?K%{}i~hnr{dUFG3$^9sJ3JREM`#&?&8!_9~I z9`bOw`2ycl9u7A@;5U_r!_6P~&E(;5)2L(eo6E!DrX{|YJRELT!*3xEhno)gE#={G zvmt&fc{tp3#cwSShnrsbZRFu_(;L67JRELz!fz)JhnwB;+snh@W;njLJREMu;QPqK z;btsNJREL1G)Cd zaJZR`A1x1un>qL~@^H902|rdI4mW4v>*V2Zb0L15JREMWz>k-Q!_D>h3G#5bxg9@I z9u7AT;17_8!_A}kN%C;Gc@{re9u7Az zKzTUa{EnX?4~LuTPRY-dhr>-ve7!szZdSw3l83|1y7+_S;c%13A1n`tn=bg-@^HA> z9Dj&B9B#J5A1V)rn;r3o$;07hF#d3PINa=wKSCZ3H>2=J%ERGiBK|0OINZ#@A1x1u zn?vz)%g+&qmxSso5IFX2y-hr`Vx{HgMAxOpG{H+eYRe1<1b?199BwwnpDz!G zn{Dv(8ildW=;I<@^HAR!QUYdhnr6LJLTbU(*u8(JREMe#@{Uu zhns%*d*tD8GYEgLJRENJ#NQ_mhnxNI_shfKW*q(jc{tom#Xl$yhns`(56Q#f<|zEb z@^HABi+@BO4mYRc7s|uo=6w94@^HAh4F8xs9B!_~KQ0f4o7?bD$iw00KKzsNaJYFC z|CBr&Zl1+IEf0sAm+{ZY!{O#_{Il|KxcLzOcX>G6e2#xk9u7C(;GdU=!_6=Ff5^k( zra|ZAUyz5xO*8z9@^H9mi+@QT4mWGzUzUf%%?9{a7EM8~=_x9Bz)r zzbg-in-lT>l83|18Tj|);czn#zgQj)H}moD%fsR3I{XLnaJac0|Dik_ZXUpYBoBw1 zC-5K3!{O#1_)p~FaPvC;-|}#{c^AJ#9u7Aj<3E*$!_AlY&*b57^8@~Kc{tqsj{ia) z4mXXuB>$y69Bx|TzmkW;&1(4n$iv~L1O97yINWr^e7F%CH^~kINbEb ze=iS*o1O7L$iv}gDE>!zINXfD|0EBGn>zf@@^HABg8#2P9ByXef02j7&5`(D<>7F1 z0{%C7INY3$|6LvqH}mj+$iv}gKK@U6INV%^&onALehY`2+woa>INUsdZy*nco5%50 z@^H9$4&P874mYpjtL5Qv^G|#uc{tpBgl{Ylhnp|(P2}Nl^8=m_u1o_CH-F%p%ERHN zao6OV$;08M6~4JV9Bx*}w~&X!4WBumYbg(hn@;$Z<>7GC4c|&04mVrkTg$`YrVqZ2 zJRELz!nc)&!_DsacJgqz*%!ZxJREMu;#ZZ2!_5@@YVvTnnT2mJ4~Ls0@vF5jXWG~-o~#l4~Lr%@f*m);pTIE$iw00JA7Uq4mZEzH-5d}nz$-1NeCk%z<0_V}*yaJU(O?7F%559*y9BxMAd&-v{7&+4xLFOqvpgJb z*2NE!hr>-Czl%H^Zo1-km50O47Wl#PaJcD>A0iKjn}PV<uXo2T(3<>7GiB7T%S9BvljN6W+E=6(Da zc{tpBiXSTvhnsKkb@Fhy`2{~t9u7BEJ(3?U4~LuP_zCiGxLE~1Q63IAYvT`)hr`VV z_(}3`xao|aEDwj9&GA#@;c&A(eyThiZU*9~$;07hH~e&YINa=mKTsYHH>2@0t~97l>D$3IfyaFgDOER$U*pWfaelWoi`*G#5E`p^4?F*>CGd6Q2Jl9T>%T6x1XF;asAWb-fHU8x0-<^&fA|#08ZJ zCC=MlOXL1V_!>30rf)TfG~m4b6N!ucGw{vnOB&Co|220Mu)uly#Yq+WkKnu1EJ@#L z?k{oP{x=$LPbQoAK{X8%*F0L{ynTC`;`t9huBHP$8<+;1x9?fj_k#bfW^4KvOPseK zQr7PQzpQ3&`Zr3Px1U_rPlp$&si%Lp#CiJ@%lcE{_tcz0&l#2moVVxWFpH=6TKE$+ zH`0Gz;=KLBvi=G9OEu5Xe_P_b{X1p-V)%PCd>mlSe@mRV|GBLH4gOV4ra|g6NiY)U z?b{_TZhw2Yftt1G8<#k5-?gmo39qE47k$eT=j{iT^+VuRYWARCrNnvr31$6ccr`WC z>DMZ8-u}3<{zP~kHK)?olsIoczpP&XZ=mK{`i)AQw|}s#UkGok<_Y?4CC=L~D(l~Y zd#G7V&jmaUIB)-bS^qPq#CiLR%li57 zSTzgiCzd#Ge{Wg;AUsLULi*_?&fC9M)-Qr*sCkF};1cKUzb@-}tBdR*YJR3avc!4& z<_%NhpI0mRXf^E;*BoEsy#0n{{l@TIHC^fXg_H)Ix9?Zh4}ecoGl>4|66ftlmi1%d zbJa|szp%u4`@_rnqv4Cy97lh7iSzdJ%KD4pE7i=W=NDueaNhpTvi@H9dNmKy-%{ed z{Yz#2Yw&Gq7SZ2b;=Db(Qy0(wui<;uu$ywtLnY4JH%Sle75nD!BWhYDuHhGU8gSlz z{jz>T_$f6T(?3_@y#4lNeLwggY6j51QsTV*h_Zep{F<7v^lz0oZ$G=NKOFw2nxpCY z1Cj=uw?C(>p9g=S=3@GPmpE^KYgvCM{HdCI>Axy*-v0Tr{w4TpHLuZsSK_=q55Hy~ z)9tZL`j-7cO~b@B+sVUud+t_cAD8DYP`0;tWcpTfSc&uY$Ia|ojh%3-Cyj`y83?U80-scO={rO>9gv0A5}kbT1LmT zj2kd<{DkHCLDLSd(0!-XjZ3!c@^!c6>$KI&Y=>9UV>x=4iRr=5zt%}FZ{0~RZ{0~R zZ{3{A<*gjQytU((w|ac#`U__*3;Il(HFa#oDJU#V=UU~mfxGW8adLg#jEbMjF4NMF zX=-i1y85~?1sYU$P~GIxI)_dl+`V@2torm5t>q|dE7n`SJRR$D7Z02|vA&jtg}Cpu zsp&F0YU0$2BU!fEqwF$LIM}j_`%b7EGpTlH-I$7%_~h(9WoGSP*09X7vh%vIdN16i z|1LxSddNM>eqx1skIIAZQT8)Z(X(R9_Sm#S3{6+N+8w6N7*kg~f78jCR{rxWtmv=V zUZW<@s{6mLtWZ^MX5VQuxSkh&(0feiUfVZafYNV?;uWTFgoSHwTCz-8(d;mJ)cD!~ z(*}W07Jh7n^)By%Q;`%l=dWkK4nA?z%-ZFjbX`Ix zPpq3!J9NslY4sD**4K@z*yO@W`qhm|+nauotti-G;*6Q~#kKt95>!~nGRa>rfrY00 z-18>=b!8LBPaQS6c1YcfiPOeT95b>0kiVYt-P0vv#@KZ295-s#DD=2-V19O zTQ_>v_}aGynDK4a9>@pWnAbcnRROy@Dvrc9~hk~Vc( zeO>1rcinT7nf0T_Oj_n(lP6A1m!PusjN^1BGjZmagF26@ub(k-^sM@{;{Sc{un2#l z^_Me~=~;2mbT_6j)=OXM(#_<;sO@A)Kso-P;n(`S-N>w7`@V0 zbaDHRPLtVMRQOulzVvWX;V|2K*%$X@Gdy0id-|Vlk`$ITPv3{6|K;oB{&shSM{#{T zoWnM3Z-02Yec3N{tdEDDSjPJ5(*N@HZIn)Udf0R6D6Vg0GUe-AcwaU%AUW2zl9#c* z!_xoq^^HjDYqy;3JIIIGK7D62xj&n^Gks@$&C>tk_MMive0|f?f|kh@M{)bENTR$u zas?d^F_m|xuAt-LoAU0$6?8mqRo-2@g6_|X?(P+ItEQEeukVQ!bemLkyi9m`=L>ubM)E?wM~>0$-l%N1SE z6?EJ^C_mmlE9e@f3s`wKWCdNWqT4@pTpx;~csbp&qB~#(-SCR;pcQn7R&>X#pu3== zJ1up~`*}Q4(Q!X)d8gxF72UNfSYN|*{VzZN?q0$AI#hIzt)SbcqI+Ql-SCQz-O!eI zdM8zMOIFYwUeU4J(DK&zw~CJYip%RRt?1gUpu44_>#&0Ejf$@G3cBAaI-YJ`-uBg` z>vj3hji+OmcRARxqT^}F<#m%PI-Z_e-tnGM(ebp?^451pMR)iLI^LF`{B&@idwJ{Q z<=*ApIVBba)&$mhcS;qOkPR07p%4ITs z*eoqAJT*}GzIw&_HcXHI@Eir}<7u(t`Zldt-+=WqnWlv`=u2_?2D$6*WxJ=Y{Cws# z@_(c|XPJ?yTglJc;b<5<4bC=f&m@hnKTNlW`fL08ra8+vy*yo8JWQHqCZ;o^d2yrC zyts^~6^l$aE1k&Z>3w#KqqvNxE6b0!SH}jKGkiYpkmBO;o?fxOIs2v0sanqQo?NlM zXVQ}-*CxmL%M7Z&s}D=<70>i<2u3I>sv% z>uZ-jr*lZUU~#?-PXCMR`zUqkSL$>Q!&vK9J$I{FY1`S(va>%kA$6@D%VdTo|8Ba$ z%lcZS|J;^N>svZzryE@L>2g&Z#nan5iSlmj*9|g1mYt4bm+mcg9@BZ+=mWZRD2#5K z_w2Prw_clW-mOE2t_7p7-MV(&Y_rWebm-Q7^B(D28Y7z?)ql_q*=%u5oR;sF`B{ui z`^&Qpx-Ye1X07yrE(_;nn&j8NYIIH9H9Ei1U88F@d~$Tn#?_;1I#-Wwc1?A5PXD%z zjvrprq0!Hy+Z-EDjy}G+b)yfTef^L5^OkqWY=3!ut;#<+x>>&QGV8!;9UuR3>;~0i znq9pC%bPqo{Ol(EhYzjJe0@XXyBeM`CcplZyQklIUpMQxT6XRR#}9w}hbM=e(x`E^ zZKI$5eC&kAS2z0koY9Z}@YLQ%ta@gnDZliH#hDf_G`@Q7nsej$(L)cqyUEZWpK8^% z(Q27abC)!1H>PpE@z0MR^vQ&FA2zFQ)L?Er{Zqcfn?E11>Vc~@+v3Lt`D^dltSYL< z9A7==^(QlI;a!i+pZ8}P#h)VIvzdL1)4whnvEoJPimXw2sH#ls%w@%e|HritFINBS zD*o41H_BXEyaE-DBK>aa^gkU}I)d!dZU5_59eLE!h1HqEkLE!$RCwQRN8nk`#r_e>v&*r0Q^s^yl=wrZANePG+|R_~Cml~vUlsex_NRdoF{ z*|u4;dEOz9~res@tZ6H>+j^>F#Wc)DCRRq*t1*R5ne2c$;Rk9K6|j>EN5E z#m!lBvu4{SY|%MwS(`@Nw?Dtn>cy?uF8%#!S)FOnzO*eXr|D{?X{(;gOk1y=?bepn z?A>giX2a52+i>V^=_uQlt)6*1)&pdCLRmk%hJ|Z<`HiIF8R}nQ+3ycXCR_ORll}g{ z#73U8Hc~9#>R759R`U=*qdDmdqd`X=mB?)0s6i_pe#xw!R@Ir=Jq4I38DnE3 zu#;xXSy=z zrAtBKYxar^hfm9F!hoO;3)bKYN|KcJ9_;!$A|L&hF4BJ$&3@=(KV5 z2alRjx5+Mj_w3NEbC0yVPuH%Scg%F|+-2#%nWLsmpIq1Fpv}AXsO?(YtxMsN;og(S zPn$8Ze!`Ryg+IQT{#%ZiGI8p}+L>b~jhN}Rju?|3Odo-nR(RrN#OU;p>exd@j7kp% z*LjlRf%S=_CQm%HuD16MXG4(3l-hAa3lAGs~9!N^?Eqli52n4A-YFJ&QP{c4Ck2gJ+CQkFrl2SF6X5C3l@Q z1vRvAdS@0^0#2Mdeuo)#2hOUSI_41MK53}S4v>BPcy~mE4UO(}mI<2XelTbLG z%A+W(cA0fm9ADx2N}X~&ODXn4-adE6O`KdemB*9EOc*sIGclu$$sCZWV{2;b>!wW4 zXu~r9&p-TU(j~1bb5gp9WwXDwY>~beZXczKUH1R=$2?-`r76Mx`2v-0T5@xa8)3i% z-5RS-+myDdb+)>7)2a{oEt#!er>gK>U#r*l_tsTc9$8r2#-f3~H>%} zFI~0jh=Sg@xV)vi2L7IHRMnIs{ZHpa#vAfowy-7trwwVK<5~7_`D}HArd2Ebb%i~% z)$N;BHD^I}18>Xnx46BxxJz-1SFYIN_Km9e_5PRjv~E%>VVzxS4wF=+Ue|}#4(&hG3RVI6Qwnc-M z%-g5`<)hD>?1>HfG%x&3{{LfH@14`J6`udmuB;7PRnIu6NB4={r+2NL!k2M;8N-*^ z>DSHdDWkeA#nB}kldycV3taxkpkd~lKg)x3n#-r@N?o`XEp=7Nl#iRqeM@f~`}j)d zntE;qXlSncb{Nfjd1-N8x^G`P(vL4!?fIe8Y-)=Zbmh=d1N?U$J~Z#e7i3d`QK7kBYf&kRrAI(G|dFc4hDo(vU=T*$-Rm?B0n9r}6FQ}MbTQR?}Vt#AI z{LYH`-4*luE9MI;=8u)lmtumdWgaDE-n@KqnlHVzU+`6>do7-~uIQKEsqpf4h3iM@ z@}u7$rOU6bujSV-u21FLyX^IA)xs9`T6(Mv3-?>ff8TLkD8GEe<=3Z;(|lq2uhAs4 zX@c_ef7>*l>ZM#BcSu}*`P?3=BA%g>)D)4Y89 z|B>bk(|?U7nb#APUtix%^YZiS<23K5IDKuB`7(ViKfiuR^YZKC?`d9s{#B=2sV|X??4t`Eh0QwbT6QvU%ao-_m*OOwY7@i?Vs&G%t;InPF+peNT&$}0hnLOoOzd5x)1g{to=Edc%a*^ExO9DP zok>p_WX6;&XLrgG^>g*}Qd{|6Dd-FU^~j9ll$dH!Yj@PV?qv^WD<2TiNn;(|mE+@-AuKZt3!dna$F?{nB}( zOrJDAWa+$VW^kI9M&rzWY2Ik5Xq=gt=H5*^+18mu()_Wd%bR45Pji0e8m%+urujL= zY5IM8MVgn+pQag}+x2eEscM~hB+W}VOPgk%Pjl}AU0BX*0ybK@{-&8v)7-l`7nbu8 zlzWveZ`3f8`F!cTb!OExPfsU!G|jA^=07f-r|VCed$;Vu`idprtIB?pXkPkFq3vInUdqb8@8ToTqKlUx&$_a~`%y*LUB$?L4S!hfL=|efo5*O}ktc zzNeiW)At^p_oyw-yQMuY3k$lb>`}XgMX%z5w4Ym{pd2@A>X_Qmb>k;aP5bQ*s-H5Q zL#1zNM^3(xrf(dyR9dF@bSSqzVBu&v*?uZ@8QGu;CR>@uQu&-mmV-7E1OcMJ4to5X-DzNb*ULOqrM{HoYP)=+J~=V zG22(RLe8|ZY2oCR&pE>KIcqPUSFDaxS+=+vr@m}napEeL7JdR{b+?Km?^bc-g`Z7% zUwP~mC$8`_Eblqb%jf)T%H|b|mtJbp{`M7TYT>87bU#ZLE}d{1mQE^8KzEK|>B5S$ zvUtg1ZG{VKI@)Dc#;Gk`idl6rt2~;e*Nn7^%46Y2vUC#&mrg2vSUr|GSrz9^k7c&3 z;(YAE_AFg(#Sgs)8?*pIUJ=5=_zP>S+ zek*1AjZ9zC=#c*R9R+1F8>avLMi;Q~JbAw{;yv(V#go&wjqAkR4%*nwyu`)+T6mlq zZrk_uI=LON$#{8wO=c&E*`As*&YPR#C#r#qe%-{y!`9Hahl@=f?;A#N(erz}c-U=e zd|0^H^uhbEaMACXxOmuoXeOmEX~4y1zr@AE!bQ*7QS@-pb2K%ascFDPe?;OeH@4H5 zlm6F~ao&79-Z$>yqUUFkotD0&!F{=!=>;rs-hMuw=P=TkpZ*v9b%~1}F8Z7BzTpcO z{hehV{{Ptf67Z~wv+Z;8=1oEf5C~`tC?UZUM8v!yKu{|?f+A9aib@TEBoJkZAwhA) zDvJAt7VA>9qN3JXm%3D~8}79#>ZjIPx2m;jwVzmPt^W5t&ok%DJAhjI{oi+e|Mkz6 zyyw2}d1gH`bM_gl-$8vTe&C3$em}6)iLJhYdIx^sh^_u2ur13gz&0$gwRw$tCw|~w z!@t$v2evw~)jy)X3_ozhR?iKSw0I6$d89Eh=cCq!=bkoBVypAK-s;3w=QF>`qa+?; zs}BXX<*K2Lp0p8Ln-SEHmaxQD=O?U{ywHLpwmPp3DvuSN*y=pLwP_tn8#XRDVrw&( zy4DG?)t3R=ut(G8cnM2vZTN|%jg#2wJSPhIkPeRhH$1^WoEHJF5X>{K@I=97#6J{V zL41;6_TTVi!NZ7G3TB@TPZ2zY_*B6hufkP=Ipl?>31)WCo+&!7 zO~bPUUqyVj;9n4*Bluq8a|J&^e4b#_ZqFC|N9q>{{wwin!Cw(yD41<2yhw0F%*5f$ zJJD+dkD;#P)db+mi$y24O28~BaYOD<3@$vcp#3-#AY~k?pQeDNNskfzP;$gk=pP$Qn7>R#F5(UL%qM~#F5%? z3WJJ+MJJBbriuDM(TSrfj-$Sl=){q>t5c{C7M(a!n=`5JEIKjQd!W0J z`j7-iYI6zoT|_62)aIwuhl)-dsm%@4cNLvDQXAeMtEd*8I8vLtsb@qdj?`uY^%~KM zBei*o`Y_RnBemiEwTfENi6gc7J@w(D6Gv+EHuVvr6Gv+E7wRKLCyvzSZ`A8VCyvyH zj}9wFiB24;O&99BiB24;O;75(i%uM=O&Rq)L?@2ahToP{d{1=ZNNskezNhHKk=k%x zl#0=!6Gv*ZJM}T56Gv(@j`~>9i6gbyhx$0ti6ga{NqxNN#F5&}ranP*;z(_ps81A~ zI8vKM)F+8f9H~tw^}R$Vj@0IO>XSt$j@0H<>Qh7~j@0H{>U)b$9H|Yzg{jy_bmB;D zcpRyiDmrnbHrG+#S9Ib?ZEmJMO?2W&ZTO;A#eSj_M{4sR_35G$M{4s3_1U5mM`~k^ zFFz2SLrj<_xE!0xZ4+FjI-7N<_H2UTc4EWkQdyqhD%F{cwVz2`AvUwHsoXKaRjMzf zjmFb1WQ-etU)rUFZuTuK{ph%Rcq;Ktb{uZ~bakkLPm(SV2f6qkgMYgB z(OB7b+03Z(zX<>1@bAXA7@T(2*>W5N!L>UDT${KtwRWZrI(}yYKVU56$J!kZ>gF$Z zdwH(J{IMQv{!Rn7bp#kp13B9fEIe7mjG+ygcjJ3;U=YlK z#`t=uALDx%{|r-&f4bizK3-#3N67zYbZhNiLgl*c#oE2BcGwtK(#0a#+Nl2mYB7Ci z_v9ApH;u$MB4P`tdEk{a}Wf2N{b7p)A{(Z$IQq4PKDHvjTU^%vT*- z`u0H&ck%+7%{aGVphuX^z4C&CFUURQg1AQfcmI9=ExqHPyu+VzUWK=B+Vj1C?2qhs z?bF%s+M7qPl80PV)7YC^aAt?+^7B`5`d)Z`1e$AK2N$MqisyequkaAshlV73SwmMa zbeaZqVZ{gdbtoh7=w?yunH|Q^+|cZfa8JpB*#SbN-R2gU(#ZRrOnIyBJHJ@_?O%eO z-O_qgb5q+AybO(3VZZBJxBABPB*rzJaRmvSu%r`@&jOQ9gGs1iQRl*-N#tdX3xkfi ztsTMA1xwmHf)>K>{zCB|P?f3RRQ&$WyilA~nWj0*Ufz!H;%AKC|MZ>|-asT?eXuV8+ zlk}xNlQKwo6Mw%vy^~L5Og_@V0Bqg*a?ht&AG}52#y8H%KhLIkc{D24dIWP~OwcR9 z7!n*2YdwOKVocC2xB$P`#afTx$`}*mnmKus^mBu|q23hR^f34L-gG$6!QOHBpMd}B z@V^7Q^_9lh@GHl^H@Mywfm#p@Fk^=`C zm6YUpIv;5By$@^>@oOHkdv63V+`@nRMU5n7_bmV~DetWZ@8P@mxZS){Vc!#ACY^`t zSx^77p4n$T`u9R*y+Gi-UEsYXfT#P(G1!56IBsa@Xvh0IO)X1XYBoDIo3XM)?{je+ z(p!H<56dCIanz|SClXv$ZlLMcl>-uNb>5B*%kcwO$^UX9!PcgVT*DGuo!32KIey@n zEgP2D+Ki*FVTrANFmPCbAGkyDU+G|bFJ>-vW(tnj>UqE+FH+z*UWEe<_N>-WPZRb4uIzyyIN~bRrvuygXA<+m8EzK-D_N;<#8s;Q zOLMK72^F33%DDrXs5*4X{YrC0ajqx+U$`}Cj`1PtkmC+rt!(1o97O}LrCmz7Z%02m zjyvoV-(<(3#!uJg0bX+5itRYhZZ~jk(m;vb_kh_i$Kaptrb4+l$=mE{{L_zJ?I8TS z=}rdUQo0>#hmCR5@XPVcI$Pc)5ZrVhMYc7+G`@48F+L7KHonh*k)<|ljN`oI zQ!T;Pro}C)EOFX6OQCS=V|>N<=kS?T6%c-IBY~fV9Qs_lPmn)8OSjI#T{Cs%uKT8Y zi8aGUjF8)p-#m}ZRR>5OWK0+o?1-;aI2+80HQOR<^N~L?xtDl5%A2}69bB+79ju=C z;@A@>7QfW{_p@FaiB5P@loyob`>Ca=nnc#N#UT{iYFznRl zgH(QgP~VyV^vd)h6<5D@#wDBb4(plIQ(`X~aN-A38`G1DuPDjekh&%Bm%(}IGvDZX z`KIEcBc>nMd-<#*_GsL=X+v@Tpbf!Zo35UTDCi;QThvu>pO2N{ShL3X9e2A z-n7WyNiB4nKR6v!UA-RG>x!$cT^~Gta(!pv)8jjbpC{obZfC=vy6&+c|LQJb)phHG zjhk*mh}()cc3us=ox#Rsca~ON_1u>mmpxXn@zWQAji3IqwCcL&zO3)Ox}d&u z$FRQ7x^m`c)oY&@|F!pfrRl=+a=Z38J zT_-g)=sMQarmfV}j*kcVQDIm$_`1z&YRFxvDb&orP*W>eQx}?=!rg)VbzQ!5E#(|` zerrYR%}wK)241rI!Q)21m0B`7y;IZZch3IjuUC9@%;-C3e)#MDEe)f?FGKwKcizA4 z{6Lt2N3Rz)zq_9mho68O5O`;_T;sN27yH3(m#?wgYDU7~U>ht9=2^Ifl;RkW(x9!` zZDC5Jt=eW)K^Qb`EzYbQZq>@Gv#qB3Z{)Dq=5R}oTDI_fg-=&fwei$QIXG(h4_mTl zGRl*glJf0LNd=Lac&Up!@ls*(Os8uyky6oVKMaFR$%W&#<0IE@?nF-Aw~#Y=^0WE0 zO8t5yvn=(j4f=IUXfK%rs>ICu)K%tv>g`PQ)D@M(Pr7(W#;-Y&@)UA&7a!2&F;7k% zLSe|pf6m@%gUt`mopPo+!aWqGiI6K#k#g#mAT|u=;&P_sGicrg_{qNxKe+dbqf5}` zr}&`@hZb^^o6Fn=1^J0(ZjkpFBoitxD0m9E%S$wZ3kR7{d7+>4ZZ;d;n2n-H%$-vf zEnzR769zfGXqB9gt7ji(&PLRSCVFv)5XLVl-gYcrLdzI3p?$MyDd}dZHBn6xXu>2X zF3pajm9%)pinV8(y_z$h>;3e^KeE6ADv+v$uTN$vFP)QoQu#W^%~ zQaj5@?ab`d&NZp^>Of_6;k&eSsU1qVnVRauGfngQL26rb)+x9&G&&PWZI^5Cn+TdJ zD=_#k#C^*R{s(ct>O|ju5A&)+kQe4Lyta}AqxHnP-rrB>_9{u~K=B9F)b7^r$9n8%OT$|-7koUDV*D*Jio#twDPy064=0050reOis zD`{(7y0ihaKViXyhNk710;+XhV0;&1L6R+bifz!kGx9L%>{`jaBZ3;ZDZSJf9FU0|I&n7 zoa=4o^0sD~Olxbq5d8@Q)mD8Mm`n299Qz2on|TCorqbedco-&Ly)X$=q0H^%d)0;M zvcgm;WIIt*UMiO?ozlsvBApbfpPdY9+q~2X#-dDpQp$VkgiqV4u2XvXN%jfT#f36A zRT@)H@vcFb?rZ0sLb^uK$;8qn8oA|Z<%4xjt+6(S9vagjx=q^{M{9_T&T2JCXVN+- z4ryn`nq-wYY({f4+4|U2Fxl6!CZBVx4+2ZY#q)s0vBXuEv3bIzXHxFiW{%DxHc4|C z$1+DPQB@LuS?VaJES0QP-cLi7X<1WZ3%jg_@Fr@yYhkLugkVylZFDIp5;E4^UgXr{dC8+b}qFG8Hf~+frMB)~m$YD|MtXjnhkMm~HZOZn$FI1A}br z!_=a$ZfkTK>2^=uB1)5n*1=_;kRvTndJ;^t_Vj6(5AT2T zp2i>}rH*U<|LvrUAU zSBCcGs#$w|qzyGcn5TZsS%{|`w6}3s`@Pl1@@XEQ?(vx(pXKrR7MtdOw&#DS!(#}* zk(l{Q+?IJ#|Kgw2y71&ijPPWC3)e^KNJe;4zru0nN}cdBOVwTkOeuO9OM|jeHgdc39*Zd^=OZ=1lBYc5pztH1t9`Eq@ zQ6696@ua>by`;W{C-p1*Trd1;kFW9gr5<1F@vA(3t;cWh_)Q+a)#G<~{BDom=kbR; z{;0 z{F7(g;@{o#@8xm6?*%;R5pJn7#OUryYggeU!5c+$UxC;eM^ zu@^q+@8X~Ici~BY7alp`Tvi&^@Y zC7#BW(DfZugE+xozmcf~4L?sv;w&HHsp9dr%&twgzF&$c(n;hcLUNx!@Kb~8!8dr$@c zw_^M5!LHzm%QthhCgsUD>-v_*2KfQ!7;)=+2DrO_56z0NORx~UHV)q<=m1aJOBXZ8 zt-F6thJT%7&pAXEJA5^`+kV!9&vg8+1)uHko4}8D_#NP@9DW~o;);T&z?1!36ubcL zw$E3=lk2sj;B9bse|`u)2>;@W%p9o6^+QqcCH#{8Q559mxcjRJ3-;Ks++sWcPx8|} z7zpn6k0Ibme!2&olf&J=dw>s&^V2<;0G{NhdoUF|$xruyb8fipXEu1^%7VkeN5w)} zz%^nMx4oHDiSLt&D+@T6QsPR3pMfXy0+$8%fG5YVGV=}gAL0OI!SCSzro-O@=R7gu z%7V|q6IT-Ov1(zgl?8mu?}6B$EWqtq^ZutuWx;UpCmjC?;Ov9q%7U5T?^ufQa2|N# za)TqlllGh&90&e+Y)}@Q<@vA93ZG}@?RCe?8{waP$6prQ3qHvy?^ED|;`mE~-+>o9 z<^41G1jqj~@J5HHbMdaJW8Vk-G{?UJyszV51I~9t#FYf2!Py4Im6>^X-TrY1{O36N z<=U*jvF7;l?I`fb3BL+Fsqd2DLhuI1e;qjAGZt48+zdY7@qYlk&EZ_Dda1+T0N=|A z{}*t#|NH~|_}ITJ=!!Qamc+ay*bba?7uocy!0&PRaPVZFL2{^|T%PYZ0ID8oRD2I;+-`(N$;NNrjJn+#DUkX0X;U|Glbod3}lO6t3 zaLyNG^J5XWDd(#|;r(52_zwtfL3ld$S$@0sxN;uDIB)bj%DLgZ(qAd(F{c;q=WK^Z z*>r64y>MnQQaLq_(|dS)ta7$F^X2GPAN0<{Cvnx~c$~lWHx`Dr;H8LfFuQ0|jnr$}M#m3^&ti z8=%n+Hwha>qaCh+ldVKD+(eRmh)9+5SIdS8fbly&`%xhc5_9Gi1~nSYPNSV+2AZku_WC$Uugmv_@0V?(nO6UMqsSXSlvt+2)`TE@%ZzdNnGnP1)AuYNha3NS;2 zV_)m#&!1M@3<{3DKMTK^o!|BM$~VkQ-^}js*qd4YUC!Ecxz`$Ny>?VPd~2`VecfSZ ztMB7|*H`X38W*?VbwK{`)x52}d?(+_^_nXuKscm#( zHNVw~txq`5^TeoJgDyGf!7gbZy0lPO=0baKcmz*3b@yN$tSVZ zS$$=1;|Gq|>MUws)rqanx*hTke&C+N|Aco940u0&$e#q$rc7^G65Ft>=dwSGjbG<| zRcHNMd)9N=`(p3bc{QZIsuNrLJ%H`LAhtT|x$Fb{!1;CFSM|;6T=TzKoqs6tY*y#0 zf7?3mtMR*az5}8j@)wEU)a^%td2e*c$AWXQ3I8gXeY5gE6I`Ww5%o_*C$>7fV&x{$ ziLH*0M1smsMJKj8>pc9M=&a{T2UjVsrT&@N5LBMzz-a;)$a$kX>pEdn}1?!^B8pvOKkP$9i7hHc{7yNyJv?J!PvCTRkTSdIXJlhEMfmAQ* zeZ+nnVtp{h<66iE3vd<0`arshSjXX=f$g|TY{%6MZMKuJJZA{?;q?S!CI~kL|DoRG z+n=}(Rjdbx|FEBgZ6PkDDq~={z34o?hdT&9mRKjNyo|V9^s9&m2)>@ULhwdnc0Rb5 ziS%=>X&eMy^D8W^#^AH}ggTnFfWAno<9qI#sF2p;D4V!YM-Y6xmQk}ae+*xc` zH8vh5X~$0nv*RSO9Ve@4GXy_y-y_yKnM}Nk=u?S@3O6lB*#Nm!3?kV^qVnzmcILk6q@cwCFo|M6{D(!qr#CEO8Q(5l3os7j>Q7kJzr4@c?!15IADHUdH3pw-=q*u9xvF zbzWq^5!>}LUZ&n(bmB;D-k@GCIiMiuqJq7&P7H+H4Y11}u0U3Y_X;MjFHi0!%? zdZtz))U3Y`nuDdav`mPc`v0Zm#7WHb;iS4=@jnsMYhafaNc*sif=Nwj@0H$>f=Qxj?{+F(<>&3 zP8_KXKD&z7-5|E>Zt!_~#U!yOjwT8&r@mK$?YbL0j#Tgh8jjemyOE*J6GJ#+yY9v) z>b!vgM;ximXzKfjPHflRm`I%$;&8-v-Hm;z?<+d7U3X)D>bwyGM{L*K_yP6(L?^cE zZZuNo1t=V`U3Y`)_g3&^7LGX5vHgeC4-lO=QkyfVA1FF;q&7VERm>8dI8vKSsUIXd zailg^QRj&>9C4&JJXYHEeTXBqxsCd4u_ulW5zO}vDt?gQNNpaWeyHfgk=i^>y+L&1 zNNrxEK1X!oNNrxD-Y7b8q&DwTpDQ|Xq&6Q@pC>wTq&A;ZZxWq2QkzsR^k&hCBem&D zofi{u#F5(craoVE;z(`!QC}cBailf_ske$w9I4F^>W7I=9I4H4>W7O?9I4Ho)EA0Q z9I4G-)Oq6vjyO`A>C_jCP8_MtEb2={Cyvx+4)r$Ci6gaXrGA9y#F5&xQ*RfYI8qy~ z6;QEMbmB;Den`DTbmB;DPN&`}I&q{n=TToKI&q{nKcar5=){rQTt@vU(TO9q;d>z! z%S9)S)aFL&M~hAzsm(8`A0s+(q&B~%eyr%kk=i^${W#HyBei*&`thO@M{4sT^%F!V zj@0Hg>MKMij@0H|>L-d$9I4Gm)PE>Cailh%Q9ns^;z(`6H1v~2Cyvx6pZZGCi6gba zEHpvIDWVfcYEw%6RMCkewJE2*N_65#Z7`8nP;r{*#F5%$sGlx6ailh*sGlJ^ailh5 zsh=r2ailhTQ9ny`;z(`wq5iVy#F5&}qkg{V#F3sqFQk5f=){rQbW&d}I&q{n$5X#h zbmB;DPN9C0=){rQoK5{lq7z4Ia}o75q7z4I^AqY9i%uM=&9&5jEIM(dHou^LiRi?U z+T2C`QqhScwRwR0Wug;DYV$bt%S9)S)aF_0KM|ccQk&mVUn@Fsq&9C+ze054NNql# zex>Ndk=ksc{!`J3BenUG`c_+{1(TOn?n{nf)-;m%)ZT6=AGtr47wc&eE6*r1b z9I4H0>OU8qI8vJ?>Nkl_9I4Gh>c0@3I8vJq>Nkr{9I4GQ)Nc`;I8vJvsoyF(ailh< zQol`f;z(`Iq5ezJi6gaHL;ZHqi6gaHOZ^Vfi6gaHPyJ5Oi6gc71@*f`CyvzSF6zG$ zoj6jP2dLjII&q{ne4nf09?^*-wRx8My`mFGYV$JnUyDv0sm&YI?-QLkQky?hzh89X zNNql*{($Jjk=p#7`h%hqM{1Lk5B(w0i6gZsq`pCP;z(^us6Q+^ailhVsXrn*ailht z)E^a{I8vLPsXrzW_;~9I4H4>c116I8vKZNZ~7@_ajEx=*sb5*@Z}OmFl(N z*1nFoD=lPR(aP=#&YE9Yb9Q5m$;$2R4<{6I`YGrL_6I z=xd4V1#`HmJUhWvsVLarFH4NWkVY~I@(+3c6K1*Z|nNPFvP!h8RxqRi6KWLV)Lh6 zN;&(M>*z;Uh5rKlf0JDXHh#L=CEhDj$ZhR|7;M*4jWPIFzwj4d7F+Q7*n@}L8W1TI>Zfe&{J?@5Gu{FY$cI15Y z;KuhP?A-lJKe}aVCk*#tVb{}U0;07$0>CZDD=0y|rd6TSG}giWc9#EH*5 zhq8%c`wwL9L8NV+4RVf`ZteH*o(~dZ{cVGPo9;R<-Fpk&Zg@n4BBjhYtQDf_as+k>0Xc@Nz}d3$~7cy+n!zGD zj!!q2q*tyO)^&YwL1FONEnP3hEX`+(nzoXcn(wT@*tqVDwu58#aql;OGV`AZT^NiM z+b41o+p4Rt&&gl+#HhsnyxgiAudjRa5{9YI4L;h4|695+jmJiD-tLlgkbB}pn-=Ej z&e{0MRYCox+dQB1a_c*;3f{b6=0EE<<<6?#aoyUTHrQFiG23@3;>k(k*_h^h-C|c& zepk?E!{#%mQV2h}dhubNnRYSqMos`3qm zRYTVma6a|DHf@@|a8Z7=vat7}*_fq$1Hx@Uxc`uFop}dUA8~550pV5_R1N%NVO7Pt z!urk^B-|1CQM&7_Bl;b|+1*Vz#AwoExK5c^(f!?O}9@U-t;52%-A08UB7%~>Bi+3mfmvml*eS6mU` zh)K3>m8{H7TeT!FNG1BoL87n7wfcL-KP)c4nC)@xn*TfTR`$6qx9ipE@WhFOPdTh? zZm*NJS(m#q-81ja$DjYQvUfTcdk5tid|Il{%G{Istk10~Umwid|F$5VuI#-&wUC=`zOU%bRc{`*&3XC9eR^D<^U`l#miNyTQaGb3opbGZJE!l=J)+Ob^x#tt+414g z|LjxnddSyTr|ijp3}?Y9 z6V4xf7EB)v*Fjp5AQH~(%&xl z^$z<#jxc6z1B6_GEBEh?{i)frrbnO4oYDDKS(B~%o?Dm`eXvBsQ?z6fdk^ot6`NT9 z7U>Lf;)wCL2*+cQamZ7Q{cvu6eZQ}*5I5j=z+0^V#1;E}2ORGdzc5*CV4kfS-|B0N zyoELpXVs5r3$|O$ns56}aryqJrmeOM_yBPcV%Bu2%wiesh zR{4KP6o-7Pq{CpVc3HXD>iF?3tHQ6PtnxdHT|2NCvmx{-X=g{2s{NCehv z$k{eoYN31fst`S7Z3kX67yA*UtG1K19C{*(QWHgb3i8-1j?vJPI7UNz4-F+XhTda4 zW}#2oEH$xB98Fh7v#lB;nbF&ocg01ct}J1q*^X;lU?m7c%4B_rzV7-E{j%4G*nSJS zXWBb#A7)B=hQ0D;bv-D3AX4eiT(GKf9W|vy(g=b9C1KaJEIfht$x_{?l#tZnWT-Nx zY0`lv4{915)kCi5@M|uc-1`i+r6qSF@ao@lxX|K-PjEc`bDqG2)FkHTS}MPFm0PJi zrwT6{1HQM2OyDDYfFSR5{N!K3pP=9zY`W;nNmV~Wz(LdJ(~4O^6LO!Vx#M^b&%YY(M&dljJ{`hFazc^ zg`c7>>`feU`eOfz%b6cC=Luin`L`G@v)ZIm4BN;2{1G|p!yj3lA)Vvb)n(gg4lZL& zZB~^}Csp}$c2z!`U6s!pj>Oa*%U%DDR&G zuzt~#ApXkKWl;7HC|xk6vvIitc_%k`GItw388K6aWE4tM`%je2Gd z3z7tz=|v;{Ni+wTXudr^(8M2<@okXu2h3oCq2$bPK=0n^DW<}it@Ly=zm*83D2|j3Gf)5^K@V4j&=|hH8u;vY(eQC-N zli1Rt{DgEAJEXI>Lza~~ zb$o9A$R%G0;fR*LrJ&d}WkYT)bjWQ*LQJQ6Mf=6MmM(zHnGg7?dQIHDRv9hJ^)LtVo!tiQ2F@i}iNc z@US$C^>f&Wusn+m6lV6ysBlmg8zRh)Fy9qO~ z91`x~_#GPV>99HB7>6~6%iyU@Zh$YpMlhRj$E<@3M=<;?N z$jz9%JUM527sHFe`ce2jv+bmOQU~ zh(iWc3o&LDwGOGQbI8Cw@|^50c5u0au~q}?&zye)GfsmG9gKKln^%Io2(@Tza)K@y zV7l~P=2Bs5daOCyJB$@QUd}iTo*-w0W>-y|Y-|jkw6~K^m!OPs|ChV(yx!N)p;&WE z|CTl`YFpU6>#~v6!y2j^GP~Bd?N`$HU z4Ko?**g4kImb5QwT-bVaV@Kkiznt$A^frD(3q zggwEG*2VM3b+)uLw;wpRsj0nr=~73UvALwm_$8g#Aq$r*X$xBF=QS>D4(hQaVB^Ax zi<{f$FK?KT30ef!W92)ASp80o_ia2XXfZ$2mb5Ny)=(P74BbuvK$FahSi_Ii?Ks_z z*X@L$r7>uk8?+#yrl6%Qm^-6$@uY=~^MgeV^QO#b&?@m>)U(wFn{PH*xXA9@MGY-d z<|&KYIy?495-y*R@clYFU=Yj-4x~1&887iIYG@r+vtN4?)-GJqqS+F0TIV84^`>(! zHIWcvFHLH1KBBXE@x0{}4??8ePHb;q(jJT-+tk?B(YmZz3pjP(dWmg9eSJrB8x5y7 zx3_dIMZ;>Cvbd@FC`zahv@!s@g)mkHY-PW4R~lO>Ys1tfN17nnbjl3nlUrS1VUDN9 zmRPH>?-I6o(-<0NEov zC~fV{4ei{44IRykFsh)}HlV>Sp5L&vdES!6O%3xp+m|(qjyFMbi<~KC9w>K`&Qs=hLZJ>O3>{WhKRA zP{$k-CC^RGEsdQEJ0#QUqph0Dej?*$aLWP>rj-ZgW!24spaDqp#$up$91}tMPQ!%e zj^=snMGaHAnx;fALr(*1xj|Zt=~ybGaj7~5Gn2AwOTQbxWHD;E5$lX*>*$%9*o;L> z*-x`rO)!2*JKyy+nV7ktra=x8rUd|J`N@8Cc3^YEq9skuHpYD??px0UOm5l34Pedr zq@k&`r6t&>xw#EZ4TUg#uNp?Myf-O^@9n$+696v>OF&3cwt-#kx3yLIt(0XEy!Cg-MvSrOZM&f13yn&%zf zz$8si$}Y3a)z{e3(AX@HHM=FM&CtAP9@{i5OKPZX$r5d9L~7pF+F*3us%r892|aZ# z&KFFai+T8WI($ca=Ta(++ci#$;hC>^eI8h^aJ=arC~0V)ob~hz;h=dX51{HMBP2;D~;&2-@;k zQv~hkSW^Ve#3X?&v?`9-h|;KlRy{gVj}FY}(IA~4O9d-mV$K~JC^&g$-Kjw{PXMqE zG8>%Wi0H58B%1V+~<5nXy!H>|>HxWRArRt*8|qcXELt~J$-(Uj1fl#=JV?b*Y6`YP? z6v9gXwlblRS`E%m555pHN}Zf{-E)H<)VW4SGjBQ8CTo?fA#3CUMJ^ZSqEOiw($}c3r>UUS^8Fj7!x)CF~+&PfFL(s zYPx%vo}StfwT}nxdAdyPes;muSi$nXON~vAwV9Wf+SVvoJ(n+Ghw0wBg^w)vigjPb z2cef6lRmmsbdK`wso#i2e`^}Aq-z$xPWR9ib?u7L-8JeWSvMK}T};F&UE8-P)y;6b zO0#C5$ga;Tv0@ovNw%lIYH^Xq-&41tX1HIf!^GQH){q9yTA}x?9J3B~cVqK^VI6Et zc44B%djW)F4M3Y_h{Y5t0UVq z;&re8e=gEnuZ!7Q-|-$9Qxq(XDnJth7{saeKuo77Hbn@SyMwqfcKvtvQBYUUM; zOsT@uU6O8@rmxkQ-WuB}?6> z<8-BVyJ`CIvhOw>yfh>hnp4}M3bk>k^ED*aMVIQb3&!UwM}tW*ry5W9)X^s2@$ngl zWf|tX>H*Lmr)_*T2it4jZ5`z(*8^J`O;mEwMYmc8sTwpcesjgwK~q6^Y}hTQdo_6c zHZd^WBzK+g3-d23_)(W@3)jm!;eL2>emCd3aSX5Pgnyl%pYGmnx^{i?uZ!ojl=1z# zG`8sXEy9_{I8LEVnYecP|HAdponqi5Jsk{ig{^S&e9qX3{opu^aQOy~qVPJ;f1JlB zczl}25AgULk2iUIfydiD-r@11JbsGD&-VEF9$)M6t31y4V8uy&++eBJ&s`qB+vE3n z{2`A&>hTvm{<6p4_xML1|HR{;dHhR{>$K2NrF_M>)DtIs8;=k4INl|Q?JeRqg|~nQ zxWZO=Zfqm=$+yhHfgR_!}O7+vD$f{6mlb)#IOf{4os`FNEv#<8l70z3{ajuk*N0`5lKJuyj&Hi>Kf~h(c>G|GAL{YB9&hpZVIE)X@ivFsl5oq@?g6f_6`mZ=#6B+$!&CLd zrSN?~c6?jr$?-@02ggweAL{Yscq9I`o`0RkCwP3a$ESLHhQ|-~cyhdu^bhs?+dY1i z$B*^+3Xdn_yTqT2@4`>_?9cXiGG2@QTF*Zjuf;zZuZ7?0*(c+#_$TA9@MQcIo{X=B zaZCg$e6o|>9=6Pr_EZ!^8bd#9L#!{(@JXx^o_^wr0=qA(A%vJ^h4$s*iC?i#+DlPj z_Z8bjh%a$ypR^ybw{hC=)4cemdpv1BMX?V-3LhOY{={vWC;dzOllthM1O-Y3J-qm~ z%#-lqpVXi5r2d4L$EgTU>PvW1Kf;sx5uVhK@T7i(C-sy4Rv|wx&90v<^Q3;nzaY-9 z@M4em@_28LmwLR+<4OHU{NiO4rd=HOL@_4epCB9^T3!mxP&+>RO-irNf&p#P&#ec5n z-{kRy9&hvbGLIkc@smA%ipNj)_}Ly`?eQObe67cm@j3q5%vhu_{<$t?W|2yilzd4T z3n}mJRtoEjyKeLKjN=daj9JReo|J^(`o^wH;ZEIXO$^K3U zcY-J9x9Q-1aQA+}UtBtP7T|MBasT0E;2mO~AG`tF%i-?<=f*tOtX-arZ@Ix2 z@Jsq@q4^5hJ^u1sy*&7RUcJ@Wd4cAA%?QqcGs7-O2H}FyLAkNqfZC9r&yy>5qj$cW}4AZv);QCr}vd z06xRv5x5&)4ftfoe>d=l9X<{`Ie#k*_6C2*@t*;n)L&tM2gSi+$A2z((%%aMerTSw zpTeLWe63@DGq#ou}~D83!apxD7Y9rsgI)I%B=7`f}66!_XzIH3g07mAS-;2 z;EAm8J%g9PyT|GG4Bh}QaQL6Wlkur%@CkUi{K6oEIX%9UD zu1#={W1o-7Io@(OraW=R@BRU%atrQ?_fcsu4E!~Rb4`Fpobc1Z?{|0u_|pzw41RIk z-}?ug!#{DQ!5QF_(5J=q4=w?ZEXDa4=ia}-34aIpc*lPO_}lSB7X5=4z^`}wIVb4{ zj{hg%Z#w>*C;L;!zZZCI?4J&{15eslIw%L9qdu=JVt+-SQp4@dlf^(tvZEb8S9x zrNJohy&S$5csD11v%r@+{w?6W9seW2f8zMB1n0U=HvS91|KRW|z{{NQH-mF}1Z#gE zc)8>M3^>Dy%RPg?e|7`F&r~Vg#C&!%9;27}T9RD-HOXD%LH25+2m2vzf!PVdyC;nf8 zk8$iD0&j8nv*28JM_g&}8u(sLdLM&x-5l%x6?h)TB+I)MV*OReeh2UYj{gwweH{Pq zfxqUAU(@LCt{0N6156*K&as7j{!OwE|<>0Fwek1r*4!;-t=MH}g{4R&T z3jUD8KLmfw;a`IPhr_#L0<5IJ_78Rdf7kIJ3jTq^_XPjk;nTo#;`W8{6ui*ki@|$2 z{CMy(ho23;y~8gDFL(Hj;FS))7o6viw*H<1-^t;xg7cix`hN(1fWyB8U+(bkML2(r z+Xu=IUhVLq;Nu;>C-_u{PXnLn@I%3W;PA!ZJg2ewIUan8!_Njk!Qq#KpY8A)!ISpe zKe!kCddL4M@OvEoD)>_l{}B8&hkptFp2Io6*FPM-19)-V{`&_*!MAt#p5Q|rJ`H?N zhaU>gb%|_w7lY4o`0?P)4nG^b-QkympWyHt!OwK~z2Fx+{I}qkGB-|-ee+g_e+26@|EI%;gLjDs$o|13aIUjs<2w+%(%}ohs~x@^{Cf^R9h~dp z*zlKtAL#HKz?&R?5BL!de+v8rhyMZmEQfyteu=|F+`{HMGd8_m;P*Pb5}fBC*1s0~ zO@~he=lt>3{{ZmqaLl!QKKQN<=lpk*9DW-3Y={3Cyxrl~gP-j1yTLDY_;0{}>F`&< zH#qz+;7>W67el{ycu(*@IlKb=6Ne82|H9!Dz`NlXYRk7j_&|rZfbZ_`Bf-D#@KxZg z4!;=uXop`1zRKah0{@Z2p9KGz!+#I{pu;}|f7#(*f&aq9sUaVXAb`W zybq39Hosqj@8a+ty@Ft@!^^>^Iy?h@h{MN$w>i8Xe5J#iz|V1bC-_esehTrD13%s2{{Ua>@FF}yxy#|(gWu!uq2Tv9d^Grj4xbMG zu)`a{A9Hv+_!|yC3H&b(Uk%;`$4p!Pb>IUW{!8%P9R3LSWe$H4{3eJ03H)J)e-8eP z!@J^UW3hAo(HDHBbAGln_=OJN9eka`_W{4n;fH|V?(oCGdC$$3=NRz&9exJ*3l6^o z{5^+X4~`eQ+AAnDG_?O@_9o_?zYc@E%9GvG&Ha?5E zO$FsH1s~|~D99i@9iLJ3!u|O%%6ZSaSCAhxD5nh$9l>E9Z&S`gelNUVbAs|m4KEDN zQ9i@)qTqTj{LNY6y9d9`vhNXmtUNN|dj=_exP7JJ==@**)!w{d=+x@+Z=RgStfZx1 z-?kpz+_2@jNMM!uR&muJ+40k-RAW|(p;O0=!#qB^9j4pix*cWxt>H)&>dZES`6?Je z29sEr7%?Z11rp^jje1yvL^-UX)`S?TAxD~!C6K~k#IaCI84t|7yu7$CzG zS~?fcYnapHB_?Up)GSA#HC)_e;*w!#&ZY{@ZWri~+)LCY3 znL})csr@jGXPAZ?rs>sCPx7Z~t;SlbnX9$Brc$f14_AG-=61NoK3wgFtKA5-8=-b1 z)NTarY(>~Kv;@O7?crL2;aY;>nz!Lyj2X^ux) ze~qP1W2vLP&8fA~(v7k)|z+Sr<6@LVJg2!t`YU zK3Q)st{`+gR)!NBYr>(-gF~5otrT(`1}%uzfq!>liGU?aRcDWsSdon2$J9j5a1F(uDcD$28u=+fQd$c3fFI z#0>gLP`}npKTEv*9Gl*kc>5J;`efqm*JN#WPIRCc<(1AH*4%3I{TYknZ-ywBdzsF7 zximwTYwzvQ8n36A8guNEaSa{aZ{I9(TmdE~H1A9`t2vQbpk!dApKUSz?qJrepI3~{ zdWRVYlSKTSnb9%vc2o8ClR17TmRX&nCacYwGXl42%)vbgn$-?B&u~^;Ce^ICylmC@ z7G|VzLYT3|g3x{+gV`i9HBhG|;A>+dyGvx8iJFMp=;Tz@ZrwO;ubuD_Q*a~9)7VJ%Spe^8%OKB`l<8sSLfx=oX@%OdHFNvX0E@NzfoTP{DE(X{6TdlEbh%f5=DgJP_v&wymp?gKbOL0my%v_K_Oh6%_VSpi_9{`v#;i!a zY-XyxddyUN8O>DtIW@;mH&Xwgk})R_Sr&dy{c%6D*@1@3IcFV-Hapa8cC0aH$8NHl z9c^m-IyEO_SwZ}qniIV&3$JBn{8NvN8OO7N_;qT|%3TY8{Lc8}v7EMN1@Uw057BaB zo)yHeQ~&fUxvhZ_iE<3U;{5thVY`F$< zgP5z{EWyvIxgO54@N;Uel(Q`SoSJLsEDJxU=IYwD@CWaVx$e%g@N;Ue$g?c`oSJL( zEDJxU<|;nR!q4dlzweLqhS7|<9(Us~7v@=l-%dyRIrWc48UJ9E@sCCs|8SJ?k4G8* zfRyo%NE!c-l<|*A8ULV^@sCOw|FD!X_X^zN`v<0sxqIMR_=l#9e{9P52d9jGbjtXL zr;LAm%9xuSS;_h%zqx^tW#R4p8goO#v8eHnQ8oTCs>VM?)%eG#8gu@h6{*)wYy4wW zjem@)@sCk8{xPb?KStH~$EX@}=g!TCe~hZ}k5M)LF{;KtM%DPos2cwmRpTF{YW$-| z&1M$@{?VhxKYI9m&>v3BEjOpA{$OHm#kv08AwZ+#Z^A$&f-m)qfphZ!X6!CQSdN9Q+NRwuUhhdDa2)%o2`uV*BFVyoZm=)_ik z3b<@%c@dA;>dylARh`)CuL0ZmiLIW?=Q5fuvDNtvdaq|CKg3oax9_qH#j=6)$4%A>r1+P*L#S5K+pGr$Lq_R ze579XFn-{OZCJc66ZBP`*y?yJ8$lf2;FJTwm3Rt z^IY~Me&C3$&id@Dx?8sspxbzet^NP2<>D(V6Lym}(+_z3?t=N;(AER7t%qK;(TNgj zfG2!U>}LTF*;DXb;?aT^(0+{IHrkIBd^+(s!MVWUc)`q1rGu*!7g5(2f{CqO;^@Ry z=i|@Hi4rHV)dvIHw1(0~<0Q5=ELY_u2}^ACy?|}leQ2X$iLK3k)c2CG#8&4*y_J(i zC$@S6^(mqgTYWxtec_qd>W5R`N9>8MzLfe@(TS~oB=vnoC${c6F~c_y~{M(WyTh^_t(u+7__X`^`~wl;sEu6ZN2`ac|<*y>+V=SPun z#8%ITWb;OB^{&*lK8dZ)Z!E$C@B>##8wXb@uA+XR*brNtUEPLdcdeWyHpJG3-LLW> z(TS~2QyX?RZS>L*ig6rI@WXHuUlI_~+(CW5=)_jPk2)&}j@arCQEwHU*y>MG*NI<aS2= zBs#Ix-=e-)bYiQ&OMQvx#8&@^dYkCPR{w;$))leU3venB9wGKcz?BZJQd~^EU2KT0 zzAbfrI1EQ@^}f_QL?^cTP+*%@4Q)EbhS=JSpuS9WVyp981RHig+Gto}Yg12M!xCG) z!O@AWK9Bm5k`}Smj|8@99YY&Ui`d$nKwZ-!w)z>4PHgpas2?S15nKJIz&5RGXrpNn zTbt{tFPE^yR(}xKhJA!K8kX4FJV9N<5?lREU>o)w+8izM6I+`2JRXzCi4 z*y{DbHtd14;XnmPY;7gbxn)d>c;?wCyD(Dv~h5i;*+SK zEH=beKi$!ZtiwLs<+M3VY>2H5zmusvTXbTp@8amhR?kpBN9>8MJ^?s9SMZbtPu&2{zwZu}Kx_(J%`D}*NVPBvED;Cn0USD^NIDI zz(V5dMDHZNUNG;Igf|H0^-K6O!B-OBDENNj@q#x1+iMD9d*1#8ZGJ8`&l2Ax_yyu$ z2!5UTX2E|XzD4jy#J39mg!neWyp9NeDL92qc)Q^4#CHhpMSQ2=0mOF+9!&fz!NZ8} z7Q6@XJ%T3^>$U1M;(J9ukXWxV=Meu|be`tg^Io2k+VeePd%o938=lz0@z53CFZgug z2Ly8{3?CHCZWBHvn9bDI$#ujVMCWb@9~R8wg^vhkcEd*nKSBJM;J1k%7yJP+J>fpa zrjjSoimO!r8*P3gdcboJ-CsOkwa0XGj;iN5?m6l^E=w`_kyn_epT=-#D5TcJF&Lghl%w(=eNYKiOuuGuM2*a zSlh;X#9AkKIX?*B5F4J?S&W4ug78hz`x5hF1+I$tkAnGqd&r#+$8)pr9l`q$zblyM zW8t3!Hxa)l_#EOt3%-c>B*8xhu6#ei_S|MIZP>Wrt|k6Z@D0RTuDgl#9PB>e%D;#W zah2*%)8-@5e@Dzl3ik)v|24r?s{fHT|0((h#G2OU#Ak^9CBuG_V0-?Mi(^N)N%Zc- zp9(G`W+#B#f%r4QgNgqxcqp-Lx5Vd)J{q|4^90*t#6;TsL-g+xe<65(VokS^_@AOT z6YH381o4-mcM^Xk_(WoMP`H)EnxFHCL(wlJ)(`QoAWn(S^M_C;c=#1@T67-A!#u&y z5$6l$x4$7TUg6#+?jo4;l!S$Xb8$=zy9(yFzaa+zaF1VJshu|^997y1% z6899$Z+^pGg898~SR$C;`i8v)^E=r1m8zo zCipkReFeWv%t@x;-XZ2-2FH0w!W{&24wA6H;O@lbg8LG4z=In^Tp@Tkai!pK!~+HI zN4%rp*~F3HR^lqb%ZLXFK8biI!RHbW7JM1;&VsKa=0FQ~JMk`pA0puTu(eo@EqdZ z1TP}yK>+S(VouTpcPjDs1g|FEQ!wWQ33;G^yODT|;9n7s75pgiIKj^oj~Dy~@dUwt zA)Y9h-|&W$1b4yB`fxA7+YnC{TuD4da5eG&VeU=ftEkRD?wQ<$kgxF&~C@!_Fd#$zo zTWhTgt?%zS&zYI$9?>rE|MPy{`4Hy!ea>^%IdjgLnS1A+!}?6p=dwPB^kmi-k)Fc3 zk~B?X*sdgf9_z)Vi&6k}hFQ@BFaoMhmuwNl#<_OVSsxK0^9J)^C!&i1kOL zr?dVmX_`D~!*^uuOIWMl^}3XGFS651&ah>ZrU@3?DAM}H6yr%p**=x@OxBl@E@M5L zbUEv0(iN{`}cNY}CMN4lQ%5Ykt&9z(i;bs_0S)+MBySVu`Wv#udMm-PbD^H{GS zJ)iYj(hFF(l3vLAe$uos!S*<5dPy9%XGvehn!W>UFJ}EN>8n}O`#J0-tiL6F4eP{Y z=%uXFNH1d@A-$aS2+}RA&mz5o^%T z^@F5uWc?)RpRs;{^i8baB>i*NzbCzhHGRLJ} zq;F+CiS%u(FCx8xb&T}wtQ$$+!TK7~ce4H&>5Z)KBz+g_`$)I4evI_pte+*liS=uw zH?w}9^cL2CA>GFMJJMTOcf|KM?R!}FCcTaIAkz1;K9%%#)`g_+V_iym2kSD@_p`1e z{QztFeyRN+>+4DHWPKayhgjc3`eD|4Nbh3(4C&ph>3g{L9@f7j{RnG%f0wyw41cLCYIV0!`SCs?0P`bpN8k$#Hx6{LU3dOqoWtXoJw&3X;# z{jBdI{S0e*SB8Cn^<$(DvL4bI`Vi|}($BI!o%CVWMWml&T|)YK)|Ziffi<1O?)5U3 zOPFhT{f1%KyMDxB#~8?V`aZ3DjYgjtu=O=sI_WFfhn{8I`uZz_v|gWQk=E<;fu!|1 zc_?YUe$FAS?=y@dy_M6X&kwk3X8O#4t=G(Xr1ko?fV5uUHX)i#mB2=a(;mV4G+Hxk zWPJhY&8*eDe}MHvG|#@u`bE-jvK~xx(?_gtB26~{uq{DenHa}i?dW`0ksae5ZKU0I zP^=+4#tYg=JKBeCGi6d^V@0_5Gw4;6KGB~p<+etgxhb~7mQ`t`1(LQu3m`R-i8)--T&}CaD zz7tOyX-E6eA&ZTd?W7&;vzF|G*-qNgKDU#72-`_J+GjJ_ zX)wS>+R;Auk$o83NjutyriaW7bP#N$9qmIyVJ3Ze1RH5bpZhP9eI(mSJKE<>vX5dr zX-E6KOZHRPPTJ8ve;_;E?8HXe(LR46`>AXv?P#B`$xZ_pHqwsvu>-K{7ju$!v=4rJ z&&oWV{Yg98hu$%kc?R1_JKBfdHI_+(A~w>F_Q@psnQSNRXrIAkAIEmmj`pE;-Hm?P#AE*$dfD z+R;9>WG`YnX-E6aCHvWIC+%n-dhV7vk?o`%?L+Uq&78z`(vJ3__upoo!*(LPU;y_oH!9qscR z+0SP?X-E6KLiQ52lXkSvTVyX~J84JzyifLNY$xq#AA0X@<^^mg?Pwo*|8C}mY$xq# zpW|e|i0z~u?Gp;ZKAr8P9qmK+wK6YeJ84JzbSL{IY$xq#pOeUbDceaq+GhaSXRw{L zqkZT(UFJ{NPTJ8vqse|5+etgxXB^q1Y$xq#pR>t6lkKD(?QJ_6oL>cC=45*(=#j+R;9AZ!I&%cG8aaSxELOwv%?W54|HYa~9i4JKE=Zvd?Ba zX-E6qO!jKFlXkSv9b~_p?W7&;(?<3y*iPEfKJ>1>%o?_ncC^nfvd>{VX-E4!LH1g< zlXkSv0kYSzowTEUUL<=x+etgx=QXll$#&9?_W3Q@8`w_T(LVJ2F0+yCq#f-;&+jsu z*iPEfK7S{BGuuf!+Q$mPK9}vJ9qp4y_IYe4?P#AaWS`G=(vJ4&MfL@3C+%pTOtLRz zJ84Jz3?chZ*-qNgJ|oD!i0z~u?Q@X_`!th%IonA)+UF{=x3HbGqkUG8eFfV| zJKE<)vR}(~(vJ4Ih3qTYPTJ8vtz=)tcG8aaq4z^)UdMLQj`n$o?ANoMw4;6Yl6^JX zNjuu-mt?`&U+$ogEeXR<$ONBfkM zeGB`Lb~dxVoa}ABcC=3e*|)Ntw4;3%lKmdGlXkSvQnGJjJ84JzTu1hM*-qNgK5NLn zo$aI@?X!XG_pzO{qkUS*zJu+g9qqG??Dw;sw4;3@X_`%EHxg!?mTNBfkM z{UH03b`G$QXZPuh8v^)qB2!2YBi z?ejL--(nxq&YP@1Ap5Ur2|vK4ZxKd-f;oe8f7B>>vBu z(LNK&{s*>`cC=41**{@BX-E4^C;K1SPTJ8vWn}-9?W7&;L+^^s{1e+rJKBeyF=hUl z?W7&;L+_H!{9m?{cC^n@vVX>Q(vJ37LH2BJ2hxuA*+}-ku|H|&3)c6L{Yzgv+Gi)( z|IT*Oj`n$!>|e2+w4;6Yk^O77lXkSvVX}Y2cG8aa`5&@>%XZR^_MvBCna9~q+R;Am zk^LWRC+%pTPssjHwv%?W&tJ&?9otDe+UFax<7qr?q#f;(&>nW1?W7&;lT7vmwv%?W zPb%31Y$xq#pWb8-vYoV}edxXWnIX25cC^o6vWMAD+R;9_WN*iI(vJ2ygY1cHC+%pT z0REdzg%;iOn+Yx{JtJ(&Gxkj^0w%bJP5$nB(9XKQ;C z*!7=J`cCq|JCyMkX(h!vTib5}yXCo=^d|DK)bGSap7wRNwm$)roBlr1&#(_ody)U~ zb+)#@K|Z?tZ<9XCKJQ=`Ip*tZZKq+v_5X@AC4lWX{vz)ysdTos(_wS{sfq0m*(V)3 z@)uucYx_{)pF{eu>@$k|)9@cQ(%IT>4R2g92QS^jzNvxtvt88`o8M#&uPkdSvxb*9 zHo}E%8Srm^zoS<$lc@`l*lxKR3Xe4K&bwdlq`&#;D9)XkX_t3}VK zt!s)6KYQv0!|=MsiYwxx)!d_ZmgI)ysQcDfGlrriZycQ{5SsZ4Ik>g zSc6>`K`q8$PkwIs@}P6w%%I)! zjfAE+dHAC(4+B>d{HQ!3{81RCUxGiGUIU>11nEuDaq_UIZTD4pUpe-a9u2W>dh?)V zdhek?ZdnoJmG9?<-^cJfOb&W;>#-Uv>v076?uL!>P10dhj~)1v`O-aUs++sH>D>c^ zOmE3z%c3EW(xY_TdeE|7rk8+#6V-#3SJE#LekaP8hESRB^sD`RJBxhj(nzLv2_iWN zcQ>~l{oo|i%UR+dk1lYgFse_Uk=_ynY=Yh0-1N>c(wn%1e-Dn@B^7^edY9_-+;~~& zOnuzMv>zcoE5<+Xc;~@SPpuTJ(xW|nq*(gZ!*3!5=#BEF?Gx?CWLflkXJ_Ki-6##( zK7^n+c?8&YFR|3`08u@tzq<9HkEObCV7C5-&h%GdaAhJY>T2@)7>&A!4w&BDumJpI zzBk`!Ss5wZuV_qh^X+M*SBb_eb`!(iO|P4g-tLWlf9WgI%hu_+ZMz%kP3hz(Na@jE zuHk17;dgSlp03{+M)}TwpWNK?6`#P5eiO>wT)%VSC);K9UFa`8xLq>g?6ympk=_Rw zP$#;HXg^AuJ~AiM+xCcM?Svm4-z@D%{hmI8h9RIHQf)&=<8!YrVDBbPd$@YreE97g zhR>D4@++Me4kLYx&l|(Zd0-{_6Ll!Px#`il=gtWfH2qP_S|T!V{qn2prj%9J4zCzq zSAO})85tu^9W~}OyyWTB5g8dd8MN{Lcsbwb(W4QblQUw}7_!eyy1H<3k!`yvQC!05hA=eSGry}Pcv*9u*c8tVPGUCZyacC}R7ky}Igkq7X%Bvf!} z=%)P0rnZ7plb*_tY$+`4QW)9VRuI_|D#BlGWNRolHFWOTQ`bdygz{6vR{b@Fw;-$E zFF~mb*M`nr{L(sDPu;bm&FT_*uj~7L4*qj($V%A!;O?oR!p(PYDc-z!ck$-7EyZg? z`vQ@zk6R;G46--hA1vPdV6ZrX5BEhj;cpB6GQ*EXvhe5NFA;yswwS>J@9f;E-o8C&; z`{nN^L4Ow63VrC;q+27~pq;&>cSg3nl@QsUlyGlRWXD?xYs347L>_>p^{wFAa9$WG z1W~SFWNQ-mvjAcSBipwJ;Tw!R0DEf^`Gg}|wug~JII<1A9e+EL!XFkPr7%1a*M_aD z;FX9}5+mETCq}Nren(Q`x+3J0v^M;5J9s8;ZVPr;nzDIwFlF<7!4CK|avth~{o(x0 z57NFqfAih1cG`SRu-o3PPv);(vGumi_r40>-6?3rl)a(Wyv=v-?uxtqXQ8#bZeF&f z)85eT{LO8p*wsbnRuul<= zQ%Y*6{RkZ8JCf#aZV8UtydHnI;BO87*5dCb{QW#QuB^yE{-?HGd{%0x4Q1IfZg1NH zqzZlC?s0n$HbehyAaa1c9=iEV^oMbKV^z?xDwH*EK@pB;-l^ed@^K`we=;9OGjDTS zLF(pvDpQeSSESSx{p1|f@SN1pbGg)aoffz6or;;G9lnxgSTLD6Ev2F58Q=Fi8fx>b z_ZIr`TA=MB*Z;}F)bPyqYr{(tLTAUPv^KP)Ln`b}%Qc?&4TYg1rzN*?`RzS0WX!@j zyYE&jF;ulSRCMM3@ z+m42<&q~*=XpL+QHeCGlwQUEkEM50VYvr9s*KKY6;La&G4EsYngp{s3)H>i`plx}> z#c8Rhq*?UjXl+Z#8q(4h>{g~)IXh$>{aZ`=(Z7FWm9E>{dUWpViAUGH)_SygYkKK= z@cP$Ur`)hBcFdY`L(dln6-G8~Y3R8v&~~8V`Vpb!G`k-Bipt#9GRc}!1DT= z79DNgZDqHDzbb7$XstXRXq#j$Yin->wyv@g*UekE=fJ$QLkEsFhh8rITWEUefVS3( zq|nf7+k%TroA*%6#Q}J?Yg@ip`H*c3*(Skuz_)EB+bYGPiJr2y?AwAY4^~+aQME^V+pUUi>x{LTWYn{d66y1 zSB7jn_!YGsLbe(q8xD5s)IYKvlRXj^ey{e^uxhofSuM zR(x=0>H4j$l^g%(hW9syUZwNmD9(%bSB73)hBM>Mw6%NEtW$CEkQxqK_k|t_-dskd zX?G8w8KrZ#syidyI~) z+rQFw(U{P_3h6&KGV!1lC`z;{0^z{{d>H7OBKxCd&ctv_cv<$!a3K3|C@>%~9Lanm zyld<0RwVpJxZ|XP6NAZ}!U@TpyW16A!&&W|l~!rm*49OLmZFbT zZoKk_3qA}uEA7C5!*)fVtsO#z5j-Z03{AAY-qg;SXp?WH_C5cG3l0VbObpV1?HR!c>-ugis2nv@+0wls^1Ur8MDnozkG~?VQ6X{Xr_dO6kfQ+W*Nbec!EC zd$062Y>Q+js(L)Oi4^sN$k1)pHJbthR)$8N(rTT5Ltm8Qa61Kw6mj zW8YOgbI2OKB9d`9VOXp0-}6t=~F2Fo1yWG9A3 z4mfC4-Wkc<79833k%d?Z2uXlt=(b=aBQY2moEWTl?T{5g$bxNXcV}C|#oLgIC|zOz z>n>5ci6~v0o2M!rA1^U}8f5R^&8rTLQJxb$3%cT-QebZ^!==1JA4fKWXFH?BM||RTw)H zOXqgSd3!J&V|K>KcCT64S@#s(*uV74G_qoyf^!CA+1i$(@qwb(#}8jezU0$VXumYM z>}dBrtu2STc1iBq-7YQ+g^LfSwWgGncHi0>dOmT^(e-T@?^>*uLmf8t-`1fmIW274 zMGL!hn}j2hu&_&Rm(#X!tP#pDp(}+>n^aM7%v#u`!=A}cw%(ezA@c+0JuBt$Rijsx zVzxbs8Fl+|_bd#>oOPQMPnm#uA2aMxtRl`?v8FP!(%Rt8)%!MNzURDSrEFgnitTE- z*9ttJHX&Ed+cY{{0$5qUmFVk!_B9C?3{Ih0SEW?|L~Kn zm$DwtTAwwftt}(sY&kxp?NG*_GhWGfBx6HHBnv#?k&H+t?O)G`WNe{Sj-R8;J*dB% z9?iwe1|0ZDMarH8H*|T1vm#-^nx@RAM6c~!e;Vmpsz##>EfW@P%w2cYg*0-fh7NY5 zHAi9@_oyHANC>2btkzo#HZH-{0ct-WYz)l~9PO)e{|`!XRj-!d^&>w?7#X_QUYqpccd4P5J6625-D*j`{`Oy>4DIumWi9`9 zb>7Q)k*pn7R0YtefZ_W*<0_;_hW|&-J>3GmLIQJ zd(g_-==QAduvucWtxH_8tqNC~ULmW?7jId(sli(SKfUdN>HDLBBD?=Ko^6%8- zux=XchC$Qa4Yf&qf;isIANUOtab#L2)Mi??b*UTuM;bG1Z49a#657{Hg~F}Je?7@f z$_z&-aqEUR^8MNV<}+PBfv;D)6NLR=r8D%0^8bB;sLb%6H!ddi`LB76rAfi`{~m=^#I^T(TdXz)zOT>!YTh=u6)Zn(;%Wu&tlC zLE=2ItsjYSnIGW?&;Ph4_(3nD34X9@#-Z^}xgV*gsEq0L?~XSj2_enYj5>H_`)>{@ z;`~?}cqa|~a@~U<^$E)6ov>!uzt>$v{}uB4X?b(P_k(_!M{l13O|LVi$w~{ua@A4n91SD$`jwyC-9R4iKkECCwq{m z?Jo9!PN|_lr<5MOJ9V)y=z&}RSyrIaxa8zy+_fKW2Rfaed`2j{=UF{7U%9^$fR3%NO+To|V zadW8$8z{r>qvEhfUwcF<#haddaq>k-CLQkSBjDJR97*(AwbZuA39rFsxh}saQ6Jrm z$Y`v}s&7a&RzKf9DV0M`5{08QGpJA``ilT=UoLef6@v{_>WF{DI6>UM)wNQ`Y=BoQ zh4@Gm)d|mvMD;>cy@7BP=??PKos`ObVekn`L}8XSgc7@;2U4C1aZo|7yL+VsSW1WjQ$$k2;|4(-FV;%iq+ z5?d&2C(^!YSg1#PCEy(DsUDPD^fV~czgxE?3Q&-l&hRmw7ltBz1Z4GPpgckYG6XnT z0KR_6cAMQKp!$Oze)BGz*4u}lPG?ZnUNl3% zRWk)Ft`u$;DId+s@e~36R>lKfL%KU?A|S4&!Yk!c|yS6eF7dkAmH)C0)BBs zz!NVEc=A;NzkEZ$zPAND{f>bB9|(BnV*v+06>#V?0ndIR;P6)rs(GI~E<&ES`l#-r zn(9c9LAkw{C_-N9AmCRi0$%RMpgP5|bP0U~ypbUxOTs{gsuc9=_l631{{!5V!lpt# zxZ@-rKAhHH0WH5mpLB>QP$l?diiBaDe0|A4rD@DaxOAv$CZ%WG5%Ah9p|L|dADU7GG+Dxyb-I8X`Uto&L%`3n1l%-Gz|V&YSd$}Q?I-~^j}fqLtbp}-0&Xb~aO*?? zw@qeH)!tAn;P&%{+nv({Y@9COt{DREo++VH!fXjO0yfo4Xp%5r!Xg2imq=JHVWouC z0=C>FpzUS>_uMMs4hgLiwg}j^O~MWdJ04-2^Oh=BWFW>B5) zfma#SVSMlnhS3-#5_Z1LkWcW?$0Fq6&m=zf(#jsWLzJMa&>e(sXQixAWy6*CAaz}w7Y_1jt{)m8*p07?l}>xqRztml?)AJR z8%$p514AlALC0a;_iqPVp}X9yjzI?|C< zjScNJe3H;e$MbpH>bMvMSN;iB$|`8u63$kKV{*cH)r|XLPME-lL+JuutEx^^I8pg1 zU38Af2cMgIOQ#n;!|qDy79@o`+PE2mpZEfY@pUl;%LzK$>8jrhgDIS1uMR4jO4P;P z#`FwPSNjOl$TUz-J1?X>mvjg9ws$byP1M)k&6I+>ci~KXcYCjAh6mZ{Nj?p>`!Lb* z2@kO|1P!yZnD$UA!|j10UXDFfgpIIsL|CppO3+AqjPM*~j}>%^eWsw%_BcVO+GhzG zW9JDv-5#HWXNcI+!{?}@KnFa0E*~jXmC629OLz*OEXrr9f7KE`kNdguFYczkfnqfU z!_)i}FW?ka%nLcif6_6V&MBtRVYzs^@>ljtzVbSI_|l1dwy5N1OlIg$F)k|>A<_Dv z)iDWX)fWd^Db%58Ygg%a(j>i z`t&?spHblJu@jY6bvbjgZy#6e>$A8+sr2)>vnV}&hVPR<)7KL!eO)ly*M&8{E~@8) zToc}>jH&=nTfW{e8u=M+WaV=}H1a`lkPnH2{46)JD&%2tke|!&3-CNQvhsO>8(HZi z+{jA5$c?P@E25E)ibj4_H1cbCe)`8mBfrj#tkQWyH1eC=$f{m%aU(1JYi?wved2K+=c=AVN+I9S2(H_Br#jk4eJm)0<^g+Eu;&&m2%j;Hh& zT)BUe{crRAq2WusG|NA^J4>xbfzDi>$}q1ARKZYeW`nj4aj|Nq(OX#uZ_W%EB+gnjqC#G9BDr zd);$<3cl5+HnUIv4dwH$c>jGWI-d=NxG33vE^%(Lk zM7n)xI}Dyk3{TW)6cvsG+<;sNIF57q9C92)QS3`p#cXctOH{30odGXbt1~!EZNSkg zLUh9DXcZz_Md%_gT1AMXk?UamsZEb?YgCxu;A>PG0|P&Q;%aiU*M(?;^SkZ>aU#ZK~l;neI6*U2;TJp2Jl2aPrlpr^ypW{`X($9x| z`wP6nQ}!cCzWqgB?J4_9ovf6pdfZFutnMm;YaG6*XnGvohw!8XEC( zk&F?!!*hm@$QU@ex^{j>epzEIqqMH7Xo+56X6 zHmANOcJka)b4EsUq9aZ&tv@d}I=*IBT|;%#>^U>M?-5&tr_Y#!SAawtE3cT*s8gO% zQCAt8L6*Aaruycl8RdA-M&*JTWfgS|F%4EV-m%d*yRMq%5vG#wo3v#@T{H5isjI8Es!A)$YGPJt^{m>m zn!?&x!>k3-f)Q2~%hKjKt{h)cp`E9c&9|!5e^cwK8)G__PNKw$M#qzY!D8D=aD^mFuaItcoU0o)#^gHhx-RsWsup^FdkuRZ-?dYvwd^Dkypt zx5K1bbc72GF7Ww0)l;nL)Kd#G<15SRo2uu=bOk3*Ddp4(N=ut!_2gI_Yp80b z(CcR=Gg+nmN&UL$tUd27h%7O6a9SaX{}WiZgKWE9zoZ z(VDt>(HsPNKo#{MSHega=2TbuaR|IP1YR5hFV1X~!H=ZKi>1hmrikMCwLy9FajsX! z87Cq|wl??$&aniHkdP~3qzhaX9fzwTz>C9G(IKjUUPg+%oD_M{6j5F$sERaB^r}+d z5Q{d@0gN`q=3rRE5D`U(t(_HZj8)XtRz@qD8|KE?j<*@rAz*f0O=T2sLMm&T9mSiB znqtV$Po``xUX;|(P_`h>T3$UXI;*C-sbY4Vc~05<6F6h|KY_JE4Zd+%Q8qXfG$?bK zD`Qn<%{5J2XdR+^bp!ey3a&=dI1yF7+)^)G`d$=t0PfzC{PB_veC|XGVok9MI*X!{ zV{>CQoIDRbQEKHV_ZW3zX)`*Pw$cDgr#7E=6Y6Tw!g!g66>rCxsWU5?(@5uO9OYUQ z>Kf>MRjLrvX6HtEmQp5D?u%1LbS5Fs>(Vy z7OO{BLnV|WSJg18(omu&vU3Lc)n$#*3(IPnb%toCnre*ErE}`)(8nfV*kH$kSOvOW zV@#Nesv8=SJ$t%Ek299WDmb=miyw>dy+f@^u4)*Uu-ndY$8dJ6;)*C`sm`SMI$MqP zb-B^9rf6A=CAI8{Pym~f_+W5J@*tflpb zIN_Tbnj2}=gmb?v7FD54JThoQ@g%FN_(J+`QnbXXD#2`5MLh`WhZrpYqQXoAAQq$U ziOB6-SvRki4+EB<_4Tu&)x4tOCiX&97IV~G9IZyHs38RlEoG-S%;C**C=p^sxnNj= z&Xc)uN~(q@4w*K>nwD!#8);1&WlcMU3s+UwP!ZD!>cQS>RLj|DBWj|@d^Mw}PNV!Q zDZ&ZjbKms++;o*4Gp%|VAlj>@2`!;IgI<^y;EjJ;&Y>}&x{@qdj$!2GW!1E@dcvl% zS^P>tciq-#AQ!zp)=*tnSzS@xw7{*6Fh!eYTjHSkGK$m8nn33`@~xUy*IY51MsEx# zE@GHgRIUPHX5lWY)zT6Wt-xgD!K}KvO3KqSl$UA7g~D8w5)$Qd8OiB>CiBN%N=;CNVKlNNE55{N%gUY zSUr{>`b_bLQ&?)SYNrfTPTsN?i+e0;E2DEtV@=e(c;v?QVSTk4;cAs3)_}STqwh&2 z_MNE?0`==FbrQ(DytKK#9+#ox3$0QbPkD`$AElMiY`n(NVp&t?$=TJOO^+{_A>b85 zXQJ*ixxNaB|DzbhT!nQ)xw2KxtD9S;b#pywJ_vBsM+2jv03=aPA(La3Q8%tej;@X< zBJh#r$XctolS*V%CXPv$#yl9&L5U+i4aOIis(FZyz?^6ttFBk>n$VKCS`!UjM6bkj zo0(P}{@6k5)xz4@*2IzmtPN_Ls%x7u!STvOtx)6LqmwY(#G5DuN-s*M%J+jxxWn;z zR5b;Y7dh+REYQ8Mg2Qyf<6?s^aoI}_)2SPerHaB*d1D;KtT`uEre_s25zT*PwGazj zvCtLsqmAlpTcGy~)m}|1vl}qr;o8oMHbU~$W6f@u8*NIjmN`i|=u7ob)oaUrvsaRZM| zU^l^BiYdEnElvcl%jzcaxEZ&}Xe~tjrbg=O+AH`d`oUz<&8CdH*UKcesl0xUMddE5 zp>&al56Hv^njNYucqO8`OhZhcXI|&6z;!k*E!CM?8LQFfE2U|gkTTXu)GJgc@PuAm zHqNm)yXfo&wFnl3^+0TXtf7Lg3@B8xj$VaZVXFJ6Ar*PoP|u(=Vsw(mYWX10IY;Z@ z`Rb4msRI;M9Ya-$nU1o+**Fyyy19AjAd6;PRjEMaie+$fJ2R2(`2xaz>ctBO+hEwjpSXUS@` z##=PfdASscmdF09%nPVr;8u|ygs;Gb=A0;>3G&VgUBgyaTFvMwvub0N z8R}+qGy2XLjPFPRtFf5MnvQi;UyZn97jC#)vl_~9yMjDv`r z39HTXdEA{g8%L3DySUy6npna&AujSqVI+fqVvNNXRoCL;QFxbPR`J*Jeg;#pB2bSa zqUE?TA|e#gkaiwl$KpQr6(VS=8kRUrm{p7tHH};RO8C-ZTn`mh&yQ6W*Wn;xU0GJ? zKRU6z=Oi$X7@c3;B*N5N=T&^Y=8h_$x?!-!o${%%d6shWnv(PMP{*^z7t)HZ0XIC< z#e_fC>9nG549rouTZHK!HyOVdMlWH|rtYGu%MT@0P_9*v$0xI}M2I!uk(bq6J!14U++D@du8m&M z7#)vmx?2CN;D=ZjOrmv=$^V`YTcpo~ z@A(D@ASRLP_ol{?36Kj}((|x}BFFNAX93_U;)XbeT3{GVY3x=s5Gx)w4Qytw~ z9foz?usO|*H7d>F!)K_UAQ+iDELKxBqq?@DrWsFS%d49j|3$g5>iK~Owf|xLXZ(MX z5h^-^MyLY1i(gkiz8-Hu@t;YfOVJ21e6|IppZ4XS@UbboV0>fYCZQsFGYi7-{2!-j z(}Ma~BM4pC3yfAZ*QzH9u;T+ZRW$t8)9|ZP#4(zNXrPc~osGK)Wi=dvPt~bU6$HB2 zq2vJlD3FbFgLa|rdY>5%&?gn_P_F=eYsC)r2+*e+>_9+Kp8$Qn!49RfHIy01R2tqS94Bbb;Bx8o`tx2>hR!uvbGJY{l}4)O9)XbJ z?wWfC=+hN;sBd7F+NTHlseP{ieKNxi_4Lx=y1KRM(^bk1zWqZm-cn@)K)Yo zdv(?=mlo&UBaXW2dZou%^%2nNbkRQXF?GpwJawc(X6gIt6b9-P`Ul#p+GlBdKQEk1 zj30zj;r(<^$kyCj@7-fPh*_sPP=`9YzS-J7SljVaR4UaWdOtw#2Wx*fRhKigU6)#? zHpr_3_rv5sZ*wV` z-x;w(HrwMh-^cBoTQU>L;>T(16CZ5K!*9SZ1{PYPr!)_pb9IY1xI zw=oi2t@iG@c#=D^4Amn`P}e=w-wioghlIm{#VT$}fPTQt4z+VV289C)bx2pW@92hP zh4nbnQMY_@U<7%%;i=)k#VSUUYv~czo@s&8RY-cEM(xwMhPwPcbx%nPs2p{iLS3=} zZff|2a}~Kn@ALJ(T<^2=zMtMF>pgz)UB!#IrRnXa=z8}4f8o)~ZR38rMZMI$kdQu( z8M-ICJ$0b2f0|pK!EOn=yB4${_wJ!yOY$*y`$8l@pKPPagnM8>^B6Y;%r1Q1j(05q zUE9%mKO(G0r@pQSIug%4y#rUN)KAeIa6LxqxacjMdS|`wr{@%RVYP#y7)FceI<{6}k*=3yjiywp(9B;ZpVq>ti!oxBC@t$p2+r)Lg9yFn`pk zc6N_;H|{B%w|C^#c^PNx#>YjM^%S>^>ADt^^d9dBR>^nM`*gRTO>$%W=N{(Gfio_pStsXAIS=8~p!!2rpXNe&F482A$t$+C7B?6pJ4jfyllif8fKb&zpp z4RqsR(&2TSI|jJDx2G!l^UDImRT?#J8dvHxa7J;raa-6O7)+ zJx+TwvRgwKc+7QIZP`E2MqL9VRT;c_5sk$c0O)^QGaQNe%I75A?&&)1uKJ9@0bx&+ zo39o6=~dcEx_te#XM5cX`{)sgd)`k1H}N#&4U6@Dg4_@o+c*n!S03FGNEBUX$=ZlddcFy(aNauak5mx=o>*Ae0-RFX-B#Y`2EP-BScB z46gGDEnJ5m@v(I}NL`E@k6{6Nl3UYc-Ih6SPG{*H&(!<=dhedT?o?3fmT{aLbFB8n z5X3EVvYzbGC%6_ElekL`40KX8_7({3vl7HHtlorxH5a#W zCtWWu1g99E_`P+_Tu=8hvv**DO3NJ@y9drxY;#$lMa`Ba*`csI5GQzf8l^^Q*rGk+ z(|8MMbard%O(h}SThPB%Pm7Q9{(li?O|oiHuD!QxoTBp?qW3@1dpG}1n$hw+WsKFe z^u`SwNS>%rO+E*3cJL)%JADb*Iq)zKeM4OrH~9|Xz;ARU-A1r@sc@_Phy{n0-m7Vc zdIv60`_6i@DGZb-PH|JyOVDs2hwQEu(*XAquV15oEdAlK-pD0#mn1(@GPHqFdatY# z0`&cHT&lXI=n~drvA4X()yn$Ea}NYgPmG8I-GY7^EldzS{2I2pOVz81MD} zd=xVRO{xr;G7OjM96C&o*6uBtT%A&HFDI^>fAfP`=Y-o5JO;X>PIohKt?2(hlI_z6a6|-`VYHt|F7y)j6A&;KkJIA_Ls-*miD(M-Ilze!|fea z$;Y1yM|IoYvd2RPQ$h`MN9I=N*5^d$(0^6*Uj_X)pPm)WDI4L*a$iKy$Y^)Gh| zT7UV@)wD-{lL%J#qdi-I?sJPRz+WKsECJlnPWFhziCMj`NBMEM`=w&nKSPDle;n=~ zGvSA7g}%GdSPiB7@H{xWwRT22VG*#^45n=NdfU;DrV+HF%}Ls|~)%;9Cv8 z!{Anfw-~(5;2j3y`@Rnm^&EZ^hJN(INV<^FlV~KI)8tC z(9R1XL6;Em>yZ<)Up@}^^QR@bzXgz5e0nG56fX*g`|BI#;YN6#!IKRxHrQW(aC$S0 z@Rk1#Jb{FfTM+~D;FZ!y?kUvT>V`hxjU!~Y3`4;cKi!N&}K z%iwnm{>0!<4gSnvf4#xw_17EB-x&VK4ffX~>>u{VcjhF6{q+imrx@Yg3{E$=kHHxR z4>Wj`!D9^e*Ed|AJR{s+-*C9UzF{sl{HGc0uW#7jU*9nM>l;VINV>~Fu!H^e{8V7zG44A8{z(Xhr_=z!jBv5UzW0e2X8)PPBFNf!5IcS1`juQ zl)?V`hx5xb!u|CPhx_Xr=3>Kty1_FIt}^&?gX;}$FnF%P^9^2X@KS^Q^%a+Yr4hc` z;F}Eg*JB+2RwMilgIf*WWbjslw;SxQ=QzKIjqpbde$-%peaG>iGQ#&6yx-tM2K(zj zPVadm{AGjv^&tDdVT8YB@J9xJYVcpIDh{ACz`aFlf3mHGj5jajTxUE zh+{lhier41CXVrGoH)kQ);PvzFX9-VMu}s8J z4F1gEuM7?c{q}Sf?eT_JV?BOi_Sf?q?q5$ZclQ!y_Sfso^e!^qn6q5e`TO@HIee%Q zKFZ)R29Gs3&)|s$`}Zd~zo|y}B?ez+u)p5t__aoOgTZqRUS#kRgI5@Qox$r3-eB-X zgSQ&I(_sI8BiH9~Bm60Y_Z$3@!LJznTZ7*-*uVeC`TyAn_t*a%{!b%3=&f%!Jkj6| z2K(!I_U~ha4>WkF!8r!|>w8Y`bR&G6!7~i@*W(=DUyn1-HvIkdH;2zR!WS95++ctG z&GG&9H}lPgzrWt*@H>p~O$PhxZ}#7Agzq-^QG=f_c%Q-kdYseu*Wb)98UFtIo5TI} zH?zO~W`5g<|Bk^Q80@dtIsT_c_!kC$W3YcelH(_M>j~zt!6^oJHMqOMy$tSW@KA$u z4EERWT%IvT_*jGe^*s9*7~vBQE;0B*gD)}oGK0$vo^5cA!3_q_HF%-H{`#Klv(yM* zZ}0|#HyZ4(&pAE+ek!xSK436 z*PWQX<%RYSdx@}rqQM;uPBFNf!RZG3>kCdl!wAnb*fDst!T$Pz)5|l$iwySH6YTG= zCz$>91aq+wzr^4R4Zh6anFd!HTxIZVgX<0U*C$*)e|^F{-|+X>D;&Pq2w!6GQiE3* zywc#+2H$M3zrNx8?=ZqQ8r*8|7K67Myv^Y42JaB;NeKGQ?)dZL#N6GB#Nqu6_WLV` zJ4Se(U{68>@Dn}p`Jb4Ryht4Gr_Vgx2+uJ%*Wf&Z3k>$p4^DrE5kAvkzdy5ojS*gJ zu-|{#-|w%?3k`q2|8n>eBi!$w`sZPEc)&_C+V{llwg_jexH5U_e1`Jb5m^f|njmmc##gNGXIpAYQsA7AD?!+)~Dml!EpL6!^-D6?zy9O!F-CZv!373SGgD*F@!Qh1k z``3$HpCv~4N`tR6*uS3S`2O`IvwuCw>|akZZ!psHuP-^g)d=5W@HT^Y7`)Tq#|`$M z_i%pujqpPT``4T7?_XasziRluVX%LF$^P#c;r{g{hks;*``4Qs{)rLpKOf@oqy)Ev zGyBhT+#mbk@PMU%??Jl<{GZEEmVlL^LwFakG7a`eY6=MWKTxCm0#>#fuNQjvC;9Uh zek}fcLMJa({yc%ae@XL=yj~&R;ra9WFwbLNPp$Bn=YN0v;`!CD1!r{9vBCcN&f!mZ$7_)Kys_tw&x6to7xWB4)xwE_hd?)Y9I{42ckno9QCa-! zr=V2`P8Z=*q5BBF2s%UXOlZIUL8}@(-3w2)u7o}&cmcFO{w7;X!Jmlm>!IHfycQZ? zVA5N%bqAEZU)=_l_w#9P^6x(+TYJHiz5bkR?E@DJeh%zk?oK<{`aTV0^#^>r_>-<}=u>qwS$4$|PQqcs@p_s@>j zNbpN;Fz%0!1P;fw?VHE{1CK19(S~8EdE@CKLdTEcf2}UN5F#xzXr|{ z{9Eu;!M_LJEci39zrG7vUxP36>f70};p?xjI$Q0*{`$MK)fK!%`1b(dDMRuMiF zyjt)n;BA7(fj0_18=U8Hs&yWCrr?Xf^94u2iv-UC-{^6gRR{LhZ)w&%u)p5zVO<@^ zJuP|`?caawZLI;H?xok;x*fa_ZN^(~s}20Ni&%d@2)<4*^?kp*y{)Ig)W>-1ZM^`N z>zCKSet+t1{SGYGYkvSQ5%K>DzT8a?`O|0lI^fSuAK!ZsTgd7L?&MiQ7T!N#HF!QD zD+2A0haqb)*dOmg)(G+!@yCEm1mjDA)-=IIV1H|;#tJ|GcGe7p2R(;&7Cqba$M1Gl zOt#iO*y$GGHQgEi=8DRf-b+%$)e?0GO)q>^t zG7l`rmnC31eyjq^@n#J;Eb_Y@?4OUFtu0`G>ta0&?(P}7Sib;|5qtnVO7M$d|9E$? zj)D7$@ZW)R1%C|A6Z{3(-%_mvyo4#qGhlrM_UE%ys~gx)Kh^3BUM~C{us=SfS|@{- zitsUDzkaFKc(C8UQ>}Br{_#w;O2Ph?W|e^*&yZ$a4t_vzBlr=)i@;9_UJ2eV_~+mq zf;WKu{+niP29FcrJHTB9?*aQ;59=9lqG#w~9RYU|{92rUPwRs?|DM*L;{1DBU&i_O zwnFGke*V3!PGGs7?M>|E*W1bhUoLnU_zS_K!E!u53oPf4iQr1%e?C~wAD4g^dE-ZK zs{$&(w;Svq@7~sv z;87y{5ZK?ctk=M&d4??OgShZ)>nm`r2ycgvSo{4o)9L}fM}#}z`vji?en@ZunAX6& zWm%=*XI#WevmD&VyG@p5HG)$GF9*LM{MUm2> z68tfEgy65i`GS+s*-HfX2G0~c6nur?Gr>OL}e;@im!Cye{ z6#gMh22Tj?4t`c}Hu!bHW5AyZo&>f#`{lg^oGSPV@G!xPz^4no0bD3}Be+=bgWyXA z?*mr~{vYrh!S8|R3jQnj8o|M2%W4sv2L72~2Yj30Q^9S5CxRamd@=Y@!Iy&%3jQhh z6~U{)?+U&X{F&efz+VdfB{;!bP-a;#gF6X+7u-ki=itGD0~i~|2<`@+BzOS$V!@-q zR|q~EJWud+@Xdm&!P^Bd1V1DAdhjv9cYyyQ_bx)q-j4YZ814_-esL;Ohim1l}NcHh8n(1>hZmuLJK9d^`9_!8^bQ z1wRS?2l^;)S=LM77e)B*z`qtuV_7>fKiD`IKSmq4@w`W4S4&X$6dj51ZRTh3C;yy zD>xtQe?B(LDgn2N@N)1j!42Spf|r7i30?#KSnwwB=Yk&w2fS+%)E}HK_!Y2!4VY!U z2OcfLKL-~HPQbZA*L=KXSzW<11!sci2+jpB6r2yfR&WXUX2Ip)y9GCZ9}v70{Dj~& z;O7Nz0>2^nVem(S_k+I`{0g{>cTIr$gZl~o96UsD0xlNln#-#{xKMB=xI}O+I4U?F zTqC#?yg+az_*%iu;B|smfaw~_&HongLxQ(~4+(w@{I=ld!G9F|YjD6@lV@3bVBf{%kI2=0iBzl#O;179ilWbjhKdElD_pAWuEa5Z(b>P1U-U|Lk@Lq5`tf}4f4ug9NeiJ-g@F(CR!QX-}72F{W>k+|y!OH~? z2j3$2EbtD&#bCN7aLZE${*B-UFuiZb4POTCEBIzGz0}VQZv)eNeO!J7OfQsk`C0G{ zg5Ln&Blr*CCk1~4J|Z|7H&5Oc+z0%7!Nb6R6Fd$a7VC%ez)6BJM{}?z+@bAH+1b+oC z65Ku=^ON9S;Q4}wfY%5f3*IJp3V6TZ%fJT(*MScUUIKnW@Xx_73El+$AHlo8p9nqx z{=4AUz+J?8^CR#e!G8zm3r@sZwM}qO@S}nUgI^MS2KY_ElfnMyC9ZQ*a;f z{ep*rpA%oW@fd>nm(w=63H{*&NQ;NN3SRe+SMGoPv*_Y$6TJY_H zZw1pD(`~5}Xe{ zLvSg0qTovK#e$o`^@3M`mkGWFyjt)!@MEICKL);E@blo^!vELcX9Rx=eo62@z`qmR z=_IW81fK*>#2U?Q?;LP1!Q;V$1ebtE3$6f95ZnYV72E=@5WF6|Nbo)2^@1M-KO*=! z@FBr(fsYCPBltbR$H9LV+%W_9Ge!IL19umEGI)^SJn(6P&j%L?E(eziZUol~UJhO) zcpdm!!CS!_1n;HzV!S#GJ|e>31RoRp3HSrS--5po+@U|#Ggy=HmSyz?cNaVyoF(`y z@JPYM;PHaXz~>8Y0Mi=OO@A4gM+i z_z!}UGcn!??gLI1?KuqGU+_5aD8c7}Y0c@TKNDOb_)72=!Arr{3SJ9dCwL3^H-h(o z9~FEE{H);D!A}YP7`#vL*Wj*V{7;IYe~a+m;LijP1=AYUt zur2bt1{@H)1{@Z=8BA+nH^1HB4uTJYI}1Jrjtc%g_*rc!s{#$>0*fW5MqwxQ38b0RBSoWN=cz51$6k5Ih6y-`@*amEhAwcn#RUpBJ*4 z!1Dc5i@>rz%fbDyrsOTlS_d8>cq@3a;Jx6O;KSgBg5LzM5&Q}GKEdCD4+-ut0R2;N zUoc$s*3KFPu5%HeM;#5mPVfYsf9}CVF=}iHT5PTV!J_E#CvNen1i}aeo{e=GtaJJV!`&u`H`-|{4@B|UQ z3p`eY9{?|Rv%}|!j(`sceigh+HFOE)TvXUt4>#kTCwnhmF?am)pEDh?fPA=ytI|i&6OLiyn3$wij{B6jUR30 z=W^w3tz7%S+KPoetvo0e87tT3*SGMpl^@EDf6vOh$Lj6-ai3cGsoebkV`V<$q+!KEuQlxR zbzN)a<*ht6S6n;Ycg5ohzSep%CF|eZ*JvHbK`fja{q2|fmSR`v+~}# z@;obVp35I+<4_aRnZKUY54%3I{h z3#?q9Tc0;u`RCm6@*yj4mn$!{^1-?CdsaRrSN_Jzm*&d#1MT>eD=%y1$8zP>t^7)^ zJkrV^<;t5|dB0qFH!E{ZN5iUx=~g}{7H$2^weruoaup5g3ajOdR<|@(|r)2up zq&zbz=WcpBc*`LJ3WK*Cv+ZU>T82a@MQAn{J$gusi*k&VYletTU2Z8ys6-f=O|3Db zN0(bhc)7%k5GCpbM#iLOXp;<&CPwTo$v#oFnmAQ+%rwWzn`r|TH^(+K#|oR{ROM+3uKcuXZv*q)ivpjX^zcp zu0#{t)jTws?75ju-g!Q8{4igl=3#L?$Axbm7PrnYZ)@`~S{K(cHPjX-W{1aCj*Q!H zc$~w?IBK|W@8%J{+M0(~!?9h%sjyakY}`n%tUM&{GefG&Wn1239drai=d2_tut&$7W^w3$w`%t-!E2Rb2PwxIdS(BUYA)t1CO0WhT~~9p^H`ET+wz z+}<*$WA?O}Q&@+&B5Ts_deYX?(K=yzn`K&OcO(&JlHDb}Wp?Y#DQ$Bo=W1X}<%%>Q zS4`&4+Ru$;cgPhhS*tsVWM=FNx$(`}6S9+FwdF;&g*piqxsyod(VQLCIwg{YYR(Q@ zof64{HD?F3PKl)HNjtMWs#87*G-s#bd?GuBbQ0-;WP4SoM7ki^xwBIuU68DU(J7HE zNON|)%_p)QwUbC!dA7fHN+f$xb9Q#`lt}iZQr5G`B}&<0JSTJj?Ie=@t&|;5bBWT> zbm6j2N-oiy^(68l>o#-}>C$G;=}w7sX|sbyr$n-}I`nr+B+JtLo2F-{ulyv#(kJ$? zw57w+Jt#YobgCoWgR-+nr$o93WoMjDiF74r$GUtXJLYu~X-l)SO{YY#gPEVaCNn4s7%kzm5={g;ewsb_gPDi9I9g(in5ot?Dq%9qhZv7EyOS7|ZzNOiT zx|2v-nw>j4CDN8=r`b-4w521{mX1tYIx=l(b`sB3s`Gp&k+f9(gieX1rR5>XIxVGZ zOkILbbtFx%WIeH5qB-k4=S0?f$d{8%o%JR1)Yq2Pui2c9?OqU+LLu?^5c_pR(i@x&sgPTeWmBCth=16KkKmP%9W(OS&un4 zK0N}a2f+0BmmdDoqhHo#&efkD`?5}UetfdNvfg-pe6qgM!(P^b&gIjCUe?9Tk5Bfm ztb3UspX}l3@osqX)J%_d>A@~N)}@EK^hlQ;=+fg{dYDU}v*|%DJ;tSnxa`$RZu!## zT=u#nKR#K1Ba{6rJ-DUEw)D`J9@$FSE1292OW7-#P9k|ql(JVsof1hSOWA9iPKjhQ zmxd(!VQEORq4gp9%--yHJNW1e1$ z=jW1L#ONf_b((hYOX-2Ily>k->7lTccJNE-!LXFQB+R!XJsg(O<6$X1AnH0or#jND zpZ4HO=|QrT_TWp|rISvTCdZ*t+Ji5pr@~U&gD<5o-AZW>zLXxVOX=adl)bRcH!SUa zm(t#MDeZli($01%?OT_!%RBkG3{9UN>3O4+o;XVBnWL1RI!fueqm-UJO6l37l%76H zY0tToo3O7-_MA)UnWU7SN=oUuq?DdaO6l38 zl%7sX>G`CTo={5Z8Ksn-QcCGLq?DdSO6ggol%7UP>3O7-o=8e*N4b=qN=oUuq?Dda zO6l38l%7tS)6+?FdOB&&E~w@9_2%?+(wugbo72-tb9TurUq{-lZB7sL&Dr()PLm|3 zr1Th_9>vmwM|uoP4`Jywi1YxK9>3DVS9JxZn5F4BWm zddx~MT%?Dv=Jf2`oSwg%(@sHi+9_zxuB><3iph)J%5PS4x*f{tT*~RLQBF^!<@7XJ zPB)$|t>zk5NuLOnbg!Gl0F$Kzj-#KPsnn*ZOiGlEvGA}obE8?beGbl^4w-9r)#X7_V3DR|E`?&@5~}EvMVIoc1Dh{k~JBNf%j{-}8xdW0%v7T~0T4Io;UhbYqv( zja^PRcKJ6O`!~11zUKz;fCHET=uda@qqd zr#--O+5;@7JwUxrlwbU`2Ut$K4SM^j(sU zE2sUta@xNur~SKf+P^EO*9^*Ohp(J=_{wRAubg)H%4vtMoObxiX@{?zcKFI^hp(J= z_{wRAuab7wDrx_&lJ@T^>2bZ1cIPVTsi2bf?<(mzyOO?MuB7LNN_uXnq$E@8vQVEYfeR?LVq{rn-dR(rg$K}dz z`mX75xso22E9r5$k{*{USqC<*q)toD$+)^2xLQ$rGo6Ks(T1Z}HRI+1Xb!_r7zmlF7E9nd0O7_yYIz8L0T42Lf3u))6lAeMq=>fEo z9YAe)OW7_`t10QrRI=CJwb9AtpGtP5u8mF(WmSxwoCleitz24yF?+8oj?lARUev}tRz^I>gTwpXo`^v5dMA-FcW)Aq=oPStV0 zIR>N$>q>Ust>xJ_Yo$&*boPX-jZ2pxJL=a)v-Gu6r{zg67gnd7 zPR-3;JTmX>L>L#ibEMM_n)O;^E_=#VYtH(wwNkoMrZ1l>X_v5)b_pxlR;bnZn+@G* zF@JN+%}(XDsne~Pb;)X@I~`ckgYnSp#ceg59-4<{eS+F()>y6^HZ(GpOy!s)gAwBI_4tP&K|wsWY36V(~NZvz}h_W3t0y2IP-m%)*Se8FSh?3bSWVYuR*M%hJ-?wHljd+u7|CcbYbHQv1AIdi*}q zW{q#1F>89;)^lg%{8rY8@e^C^lVTHE=d|TUY}`J3V%s)zJ7&%8Xqi53=03SmTer`i z(K=n@aypx0+_YIXkHWY%TeQ)0Cr@shT^KXHeNJ0#u~i(u?KaH?YwXz8j@H7))8@BL z+O~b#%#OmGeP?$}E^N5bnD&_+v)iW^wr`(1ajMqMwDy?=maT2hoN8??^QLu7ZRsHN z+i?@yXUzC7(-d0xRNTaUS|(22r)A3A*4dLfnaQowrd#`4CylcY*ZCq)EDakytt02W zDdT6^f@B*uzep`v!6RF4HGb>1dD-tq_kBoT9@^7B-(L35!SnlXRc{>qYkbC?9}ukj)8{p`_H}3Bqj(!oo6Y;3(fura9 zt;=7fdf@1}?{$CoaP<8CNgw}_FF5*D@sF#1IQnM1e+dhYeoOpcl!v3=3;(1%96i4a z-{&cLIQj!@`Nv$X_Vd-4xGmtA;VVylp4GH)^bPpu<>BZ@@>^!#Sd z^8Q0LaP-}c`@4su???Uy`(pzfeS>j-_i*&1a~_UY0yKevyZi}_ru~9j0e&X8`iV`V;=SS8jpQUJPv+b z%=+*Bgm}8~K>u;2{fx&vDSwplAZ~!a}OK%zV?`x#oUi&(BH&-FEKL5gn_Tf_lAA_tYkdqRr%HJA+EP| za+yuZa00a91o(CFY4#A8%f7Z*SpE%pI6jXC8~1k)N58T0z&Dl8o@@T2SlPDzyZr8! z8T1cv_FQ{gJd0`H5qFSzSIl#8tn(4ZW8RZLfs8Z9_CfE`f^e++)1>Vcy_$vD;nM}Gr(Uv@b9JB<6jqI%%yvu*m3+JBb$F&~S0 zzK{7N$DfMrkWgJNIM&nMIJO6lo_(W_{}?G8{qy)Y)gCx{o@>#=(P!t@x0KJHTY2up zJ_a1~KN`pN4@b{^8Dcx(=zH1X#q|S6Pk*NOXIl1V<1wF$*?$JPpJ_by3;FqEz7!t; zeeRCd;o}Zv;{6%>xW5S2A8d95b)t{Reg6 z=-j92_>70k7Uk=X; zBOBo8SIK!e`ql9MV~lY0gYdmo4;+07zoa}I{YbnoI~@J*@O_krqux}%p8jMY2oP4HjdMtPsXQ(V}|?J#cAQ_ z?=+6n-b;oXi`f9j%%AZ~%frz>j$cL|j{Yh9vhr~B?;6K>aX-5_EgUl+<9%8<`d^LX zv~_k!YV;oyg=3~0emTt-j(!RJ^73%>eeu5C;po>gj`LcZ3^!M^0gjn6-lv75-^4gh zy9F7aFB~)5;C)&+`iaKH6*R9YWOCf(ybpdwW#H%!VcM1Ck06udCg)@DD=Py>e{OEt z3v<)LF>?uifTo3`=jBtJFE5AUeBqe+6Mhv<3rA14K2A%QI!+76%&YhYO$$d)m$cD; zFbIyGE@mSys%(Ixr|Z+Wnmimmr}@Sp4@b|bBDRgETw{|maLjNhXR0fWISkA-IuY;#D8{p`-GLG}wj*Qn2$IK3RpBEhc9yt$3--;h-e{6uG zpKBcFwLcl37aTJO<9%Lm^hf7B9R2b5LH5T6IQk2XPHVh_{<0j{3e6uoe^doZ~ zj{bM}vhr~B+ZxAtZBNGQhht`Ed_~j3(Q^-r=;7!m;fE>@M?c><&g&pDJ})?C4#V^0 zvjL9&xSWThKM_A%c{ut7#&KSkk@0!KF>@7ugrpM!_j|>|DE!1^uOTOmxrS-+RMU5 zZaQiM96k40jBV>j#@hqO%nEpK8yx+rIS)s_I)0Sq1xG&w?`?ylui(9HaP*rR$F^-r z#@hzR%(i%M8yx-4IS)s_JAOm84UT>i-rEL8KNat7gQGvlIJWIDGTt^gW{$#p+u-O= z%y~HaQ}CnJHaPlo@ZL5!`U~*hHaPm5jAPqwBjas@W9BaW7|jcg{%PYl?ek=OS~zB2 z!jILoaP%J<$7#8jN}Lvsna}aQPT=Ud|77%V^grT#KZm0))|>Zr0!QB!@9PAPzMpY% zBei)2GC6K?9)RCi894fKZd&g75~qb@W?lRynih_pd%_eql^;hY$4$;V;x|(Uj(%Eh z+8McN;h5PMzqzJ`qd&^HxP|<2WOCf(%>8E?w^Rm>{`8!Oqdyx@hsXvv`fH5iylx<~ zwK8zb+=Aam9*+LroQI?TGk#m;;pn-KX5)79aP&{&$H~LdziAxX_BNUE%D^%6KHl2~ zNB>#Q!_j|*_cp-M|B&-=^uOT!$9Cc9>+Sak8|g6G07u^g@5=&5zp`;$mPRt(W;kY= z@H?tbIQk(u4@Y0Y@1#5&{kl01N528yw+kHora2Esza@TW)elF%L(ap|b5EhhU6hBT zpJ^PIeKwh0m4RbsKm2a;aP)`ZcbA8w=l(>oZE*Bw8OM2@M`jOA3&+ewc%K&>{T28< zm4~Ch2JhMhZ-kE)-v=Kf{tJAp_+|Jwadutkcrn-iizkSGfqyUVVY@}~MDeolAH=J|Cy7h& z$>R0lQ^Z_*DV{3c89q(i2A?jT4WA)C6h2dYB7BzkT=;D974SLYTj6uXynS0dPt04M z#q-6yjaR%t{2_dyn70s$7m17ZP`p^YIJ`jIAHGDqI((^^mp8>fis_aWFB5avEnY6> zuu{B2%hh@ckokU?gw9dTD&v-jCeBqteE=|7M~Lz1N$-IH28V>i(o%K zTm!SwY`6n{QOrlRiVMYj^r!fe_%-;i;t$}L#b3dH6aNQ(Mcl&<=*3sX%fPRR8{yZ* zL*O^Wzk}ZtZw|8)*{~D*ckv|nA7c8G#ka-WKfU;l`1kO;;&b5l#FxYGi|OMPKM>P@ zD}E?`8vdu4-+M0pOZ)-+k@(**J2iuyzlxuT7lS_)FAskvrk_*%TudLP_=R{w_)GED z@K@s9;D3v!!e5K$!rzGL4-~%@pA3H|z5wP)X2aF+58^xEAH@&DKZ&1*e-^(9|04bf z{*U-O_*ZckdtTCm@|bOhW*ej}JCy$$1FevH?K7Py;uI^12n zKfI{;7`TV{bhxLO`#*L1ON2UK}i*06#=HBMT4a8&NQR4034aIxH zqs9BcW5nFEusBwHG`x|Rdl$z3%*8M#G#jpiy>D|jyovl{@TTI0FehpoxUYF}Gx^Wq zQ{{hwH<#~eo$2Bh;^p8i#ZB;5;-T=?;xX_x;_YBA(Av-fZzrAsj}spVa}u`Uc$f>f zHk=LbAm-kN#T~`B!aIo{gt?$=1NSg5?jn8@-c|fDyqow3cz1EP#fD@|VC<#5clI#oVvFI8FQ%ytnvO zcpveH@O1GvFdY^f>J~SiDP9t87q1M@5)Xp+6|W1=7HVmNdRd+#kMJyav2LJRH76yb*kRh+lwx-}^g!t^B9(bz<(tSiD}ms9hi^-XLBUzEQjy ze3Q5W-z;7azD3MEG>f;2w})>N?*-p3o(|t3o)6zCJ{rDD%)J+jcZ<)1?-5@C-z&Za zzE6BV{3kK@_AcHp{u}&fG51$2J|O-Qeo(xGeZZ^uka#fsuy`2k&#BSyBl6q8kBWDK z9}{yA@8aX)cK8YLf$(3%$HGsFPlulpUkpDj=DwoEXT*2H&x)UbpA$a^KQI0p{DSyh z_(k#O@IvuV@Jr%uOBw%F+!uaXyfXYZ@mlaJ;^FYCV(y_>d`-L!{JMBI_zm$C_)YN~ z_$~3F@ZZJ1hyNiy8-82-NBAA_jqtnTd*S!QkHhba7s4Ni{|n?_%`?l@dNOWV(!0K{7L)@{Ii(*E*5_ge*ynT{4@NkxVv5WD;DgtPS$#$obs{4DEKGQ;Kfg-3`Fghz@G zHEvv|#!c>zCbO>m$?)Eq*TwL9@|VM0tg_)QxSKNEBRqcQ5RRX7dx*^X%0CHjAbuA1 z`d@=b$-f0}DEgZw41&+B@4NBNs!pVvch4{a~*Cs$lT{1UvA@^8XibhP0Eco*>} z@UG%+c5kZq*~Om5jl0Ri@iU4`lG$B;Id~88im-3@wctJF*MWWeZU*~4z`f4nXY+P7 zZfsE=j-SEXi_Bi~Q{h(eblB&`J<*F3Q@jN1?d%V?%dZUk`d+^7p~ViXVeF)wE9zO$9`D5q#j6-MUR2{I_k+pos&&##=3-^wCifeV zaX*I49?HW_?x&Gyk)J_kf$D*q+#f*Z68S^OTw3EM_m`9Tqx>`QW#SjeUtZ%T_ivHm zO;H=(A#;T?aFhGb$+-VFnLU+Mmm4&N&N3BFC- zZ589&#eLyB#4E#hir0eg5)X&(7H@MfL0jdmmsDJVcqPu%9cZ!+x%u1^YRr1KvRS`LG{j4}$#| zdl>A;&!b>JejW$=vFk*5E7jB29*V4N8=m5Q%wxsbdzYt*v-c~{5--Jd>1~QxVN0&L zy&!&#>rs69#)ieYR?|~_8@!76dw4DJK(1-xcmko|%ES^}+xL&+vJS23s!-aPZ6_c)Je500++;i?{0q3~=zw z$#{DW%m4?^oQ>znWCI*Lb1~jtJ2Ak)GgsoRf6o91&)kT&J|zRpYbS;~@jOADgJ=GP zw{tTC96a+V-p)M?F#Q{br|@>1jm$ZlfsZ3J49GC!;F;I)c6?!g!+;D6y#3$MP~+g4 zkMWK2aPSOow>NMgu>lUA`3b+8JRCez*TsC0hl6K&;+y2*;F-So)#c&fnf~}S>;F*#%#c zhl6KY@y+sZ@XQo^Sso6aX~$RO;ozBh_@VM}@XVq3Ve)YB%(3|4@^J9X$@mfSaPSOo zy)=xJhl6K$%cNl)c{q6HkN9=v;ozBT@$1RM!85nwe=o>>DwQyvbUSsULj4+qZ-#m|z5gJ<~6 zUcBC&VmI@DkcWe3y5i4LJK^A&{`k|Bhr_92 zzLU~$w(@ZB%+Sm$1BbK3e3zu*oEnF-#T(+!t#R1M?;F)>&1@dt4%whOTw zlZMOW;ozA|@t4cP!86z5uaJj>XKuw`DGvwF+=stP9uA&)6o0im96a+3{u+5Wc;;pN zweoQA%-`|X$-}`jAL6f!8610cgn-TGaKOVl81w5`0Q@O z-STko%vSh&tEe{9Je1d;Q9uA)Q2LG%)96a+2 z{yBL#c&2_)^Uuq}!81$XUyz4`XO_jkC=UnEtc+hM4+qaQ;a`%6gJ<{*cEexg;ozAO z_?PA3;F%5af0KuUXEw*bA`b`8jK{w!4+qcehJQ^S4xZsN-VLwI!@)EA;NOskgJm4}08Zot1M z4+qcOiGN=n4xV`c|A9OlJo6X)hw^an%nSH`%EQ4kuj2nD4+qb@ga1e#4xaf4|FJwA zJo9h-C-QLc%uo1F<>BC&x*p~~lZS(6dg4Eqhl6MO;=hoGgJ)L2e<=?K&#Z?3N*)fL z8I1q8JRCeT9RIaE96ZD4@Eg97hl6J}#eXXg2hVJW|4tqbp5b%*4d2Vd!7~%_Kgh$u zGt==u%EQ4ke9ph&CwVw{=3xBK@^J9XG5BBP;ozB*@&A#BgJ;gc|0)j$&n&>(C&d`x z;2FM0&`^|zgJ*8SFCq^I&)ki#lZS(6_})Q77kM~%<|%wvc{q4xA)YU5+5iX7@I8fw zZt`&O%zOCm@^J9XCwP8z%?3Dl<{LaeI%oqNJo6uXPkA_ardv<*{HUr8aPZ6$cz(Ri z1~_=8AAWIpICy3NehGOvcxH8cZ+SR)ri5Qo9uA%viSHv12hVJX=Zmd2z`-+{;g^z! zgJ-tE^CNRMz`-*+;FpnygJ<@@FDnlR&rHPklZS(6rs0>9hl6MK#V;=p2hYsI_m_u* zXAZ-!AP)!69EV>~9uA&41;3I!96WOler0($cxC~9fIJ*Lb2WYyc{q6H7JP#|96WOm zzEK_yo_PqrsyrM#^AvtHc{q6HC47*FgJ<5rH_5}nGwV%KpqaBxfVZ49uA)2J4X#0%EQ4k_u)s&!@)C;;K#_r!86a`$I8ROGcV&el81w5 z-okGz4+qbDfZs$O4xafOzo|SNJo6oXGkG|8rm&d#&E?_XneO;45XZRjg!w&Lr@XQYQ9p&NR znLY74$-}`jQ}8>>!@)D{_+8}T;2FN#)v&8P96WOPd<>BC&d+`(G;ozA^@Dt_X;F+iKljPyxnZM%O z>JyQyvbUSp(lL4+qbb@U!IM;F*#5edXccnGNx?<>BC&&GB>O;ozBZ z_zrnEcxE^JTzNQnW)glsc{q4xI)0u!96U1@KVKdWo;eu5zdRf~b2R<{c{q6H5BLM+ z;ozAw@dwGn!83eMu;E~NIC$m?{2}si@XQVPL*?P%nLF`^$-}`j58w}%hl6LHz#kzG z2hY5KKT;kJo_Q62lsp_f^EUoyc{q6HBm6P)aPZ7m_+#ba;2FN#*l?UY96ZDK92<_8 zhl6K&;!lu=gJ=5Ue=iRQ&+xs-h7;xC;F(7JALQZSnSuC|^@Gh5+LlZS(6cEF!54+qcefj>hY4xVYlpD7Oq&&7PKpqaBxdwlsJRCf8EB+#RIC$n> z{KfKc@XW*b1@dt4%v1PFXMVz8DGvwF@V(cDtK{L}nZ@u|%frDl%iyn(hl6KU!e1*72hZ@is)p<2;ozCU z`0M52;F)3g8|2~Onf38E%EQ4ko8WJfhl6Lf!QU(o2hZ$`zeOGnp4kh3t2`V$GZlZE zJRCeT3xB&j96U20e}_CAJaahyPI)+ZhVK+N+$9eO&zz3GTOJOcxd4BUJRCf88U9{* zIC$nd{C)Cp@XT%aKgq+vGk?P0FAoRLJcj?XJRCgpEdBv`IC$n|{Dbmv@XTBIhvebl znGf&}%frDlpW`2qhl6Ln$3H3$2hS9jH2;`996Zwl|F}FHJkuBdgghKPvjYAv@^J9X zYWOGR;ozCU_^0II;2FM`-SD(L96U1$|BO5wJTn&04_4U#2hZ$^e^Gfjyda){Us&Vd znSJmt$-}`jbMSwahl6Jh#J?;L2hSXd|C>A0iO&$)O zxg7txJRCf8J^l@OIC$m`{G0M{@XY=Ax8&jAnaA;emxqIAp2z<~9uA&)1^>1@96a+j z{vCNZc;;XDcje*WnXmBg$-}`jKjPn)hl6Jp>0|x_c{q5c2mV8OIC!Qn{-5%2@JxUF zzvSWInN{&0$-}`jgYX~A!@)B{@t?@U!87aQKb41rXEw%vCJzVCY>oe19uA(_5&wle z96Ylp{!4i{cxE#GD|tA0rXBxpc{q56@B24=Ee{9J9D@Hw9uA&42LG)*96ZDC12lXm z4+qbjh5ue24xYIP|ARanJaYy9M|n7S=0^Na@^J9XUHG5n;ozD3@xRE!!84EH|053v z&peC&RUQtWc@ck}jx%uZ%s=s6>pijl67tgJ;I#mz0Nt zXSTxkk%xn4cEtCUhl6MK#4jZe2hU8wFD(xT&&NAP)!6T!mjz9uA(l4u63>96a+7zCj)itB9Y( zH`X|K=0*If@^J9X>-g2=;ozC~@If99p7{jdBo7DAe1X4E9uA(VU&{PIc{up@9hSfk zl81w5mcU4+qc8#IGk02mc<&JpAwE;oup5L!*HoJY^;F+iJo5;h#GcVz} zai0xv@XQBYr!1ICy3tew;iUJTnwOULFpfSs%Z>JRCf;F@6VmICy4j{EqT) z@XU_*o#f%*nHD@h@@fMdJTnEqi#!}WGZVk7JRCeT7r&c496WOfes_5|c;;CA9`bPT z%&GW2<>BC&^YAV5aPZ8f_`T%e;F;_2t@3d248OI~FhL#;p7|4gqC6Zt^B8`TJRCgp z9KKB+4xZt6S{f$H!@)Cer^>^@GhgAS$-}`jKjHV5hl6LjEMtBjc{q4x zG5mCSICy4R{0wIk+p)kPy zHy#Cvo7``2<>IBv?+hP9qEOh~{x_bKVa84FXPJum4)_#h=G#N#={0V0ek zGH2LB7m-vwSo z+}*gbdySjiubRuR4);)IAo-PQ+~j^QGMC9uf(MAFl3%^XP415)jvl%3Mc&M2(x=bD5@ixjdItitC8E{L%P_8aKHw44$+9jE>d`_Si97k5eOc zw9W4*44%~5(OMWhVa^8*fFiW(=4~0 z-9E8x&YWuPE%T;zOl|2PpReFIv5D<7X8fOP%1=J7t##74X)~w%cG(zH8a8@b$A2H~ z^Bq5Hn`WNQ(C6CPqcNMVe5nmv)lITGHKXcT_ zAvo4I)i__@f2=-xTd_LC`X-vm*Y|X;KKmGJwZ0>a^Y!(ziRziqhgjdiR?gS=p4G?C z^3y*17*(}C4$t}e`q;*~CstzPB65t+*LO}`vA{8i`s{80YJJxj=j(ggKC^h8xj4l7 zE;o^{Z+h2a;Q@2hXKzPU>wCmFU*CLd{3vsAi1q#1M83X(^~J&vbJS;-Rjc)VY@Dy} zF00Q^fi|YLydN0n>)YMxn{JN!?6N_%zQwJwe0}TpDirRw@o|XlThv1N`kt`*9RVv-onwynaZF)d*rF8<@cIn1VMp8e?|2^uVWYEQZc^U} zR;aBw>RZwN$NG*=>KkDz!@Ja3J+VI85}6S<*g{TNC5v>*oo=E0b{nx$vGAVdnC}4l zALo0uCa89*U8^Q6Jkm)_14Z$3Dz(mDRT=9X}tK7yo%% zjK`R(-`Vaf>KPtlj<=cMIE=Dfeu(4#@n3RFvqSk1bG-eMUychlEEc{Pspa4pAD4s6 z@^Kof*ty;QfMTPSQP%>KrC@tB)U z;WEp8v4`C!-u#1hz^A_6_Mc;`)mI(Pc&<=5XmGVyZ9B)1eD3Lki-q2~8N~UnJ!1HP z{7@QR88NanV(9SFfB{3Y5&ByiGGy4WVFLz~MhvNp$oyVC4&7+Wjf=%t6YK5Y)%nw+ ze~wlgbPitKp6B*Lqfi)S|Lp%wquw}wk9`|{4Zm#u)7C$X`|hwM`Ch@1O+5 zkN>vo^9#Ruv>#@ItpY=WYn_q|5+wYXDR$t(;ThQaN_Sm<3*J9tgqrN)5`%&Lb zJb95`hmYxd|4M~3$Byq-_+nz8#TV&Yf7Ey19<##ezQ;EGr`&XQ;fHRwUio$5;FG(4 z{>w5;*1!MlTJ>jkSz*G$WxiYR-bLe={bs?Wi(ftI)X%!D{@AYz>%U)c{FB{Q-?%W| zsQB3UW4{}4#gRvMdH2lsewuhfU47qUCl)8}d1sfk>gQSwrytc=SgU@1mz7S+rd{Uy z1xI%|_1R-rKgR0mcggWj9=m#d0XqD#h26TZ5>8sO{@thF`+4G94;ROLbLXt_b06(D ze%^Q8$Its)@3rd3ckTDi(LMU!(YJ8zF|TxOT(Do^=*5?QvFD9Fvh}v((YviSX2HQr zFZ|~6!ofduTjQv&#(&e}`SD+0-f!XDRTo{@rSQeW-`u`w&oeE(=o+hx@3F=zt6gQk zxbejf3;G`Yyf5DpCEn<8uW-mmuQn4^O+W1&3*t1qcu`nTG zd@L6Btl`9n@v+WM{TIhVvCtMVKGqlfSJYiBQaEMJIPQOO9G}!Zw0r)&Co()8sPM1^8dn=6#$lt}Z^_iQn+={=*l3;IXH1(pt!2)neRiMYweLQ$eNx-*nD)6Hv*vc}KEbZm zOxl0<)`{)2+q_ViJiWcOqd;ZbZdRDp*1Av2w3(CI<`<^f6`Yoq4abe!aF>?xo9(($ z%l5l$yHQI^fz+%ih3RcGr*up$j2%XLdVqEZF8o!PoI>lD;qI+ zdh3*ynQg7JTbM~<;?&mJg~{!6XHF_iE6iw}?{kIrYn?u~t+02&mM2;xS({50X0)}= zWVUlUCh=hL?4fl&9qs?;EwH>jUFr(Q*~Tmue_DJo`TDM3xW>J5v&dqD}x|fQ1n^1FG(I3~0bN9y{{y3uE*L;3i7tQ9iqA%It zSl3Fi_O+skk4t)Oi^W72-zqD|M0GtaQnz7Nd)K;0)WRh^+S@m1FQ08)wcItEVDY*` zvd5mW%H`_oy2(_hI4CRohL-hOtYw;A+@Y#Xt*&gVPrFucUnM<#$EmARy*+%#i7o8o z`4wW_-F+U*)@w8Q_{Dq)Z3b$CZTZeSbG3ELdBV1@63clVac$Il8+ymOW1Y6?wOiZX z+j&XtiID9)wr=cLkX;M<)rLCzmF?nUi&U>?@H}N0z4$+hTOM9KZjs~bPU~`d*E8zR z>~>c7s}{Yw$1Oc??RDE?qkGwzWy38jm|f|%pWZg?(!1;I{mRYLnr97ZnZcjQ{F%s~ z`F5dv{*2aA6(`hiq9L>FG-L-1H(d%}{+b_YZO#|%Fqa)zs;;inl>-ig)viO9sk1B4 zcG)X8{P%K0HKFmVCgo}m(Ce#qtGzrd$=9wEslN4-@uQRS*rdE^QrO(Y`#FCFQG<@-0dEj--4~Qs%u#4VvFWvFP)AHYvZDlwVHDuO;O- zlJY;2@_R}7lcfAvQvNC_f18wlOv?XB%IX#)wY*%*)}V5qq`XX0?w6F8Ps(dA|K0BxV2TyG6A9KTF2@N6V|@zfH#fn3Vma z2i1J9MKt$Vf4`)>LQ-BeDGyA_gOjpP)N-};}QjQ-Li0xTF89zEHZ=95OOv?UI zpltqeNqMZx-XX1-tY=Uw+V~#168X+A-RnBNgUa|Nvh!ztex1*!OWI4!{LrQPo{?;q z0+%v=eNCW z#E!ZBWsa5e$Gd~9oIgGvZRPy=@()(NG&lWOR?Z(kxJ1b3N;GsWaIVZhA8xkt=DF>6 zkCpS!--oU2AC)ueT6o(2=J%(+S~oZ&adwytejuJCs^4(dS^}QS~$(h`SZnjR?heLF0pcc z|76|d_b=8>7yBQVk8PXZpEwrx%Z=yQn?GMXZ{_^)pM594fBeJB`R)HtD}NAYXYK#O z%K7KR_g2n7f9NuQl*{vxEw+J%uGxESC+5n`i#Ema1FTG&VwsO*<&VdFS>+*ZCjIY}?~<_06|({(N{?HOmye z3MX6H-cI$QSK*>gc`dPVDEq5!dX61iX%e@Lit-MXO+^sO$%C+s?t1!;WwRb(b66 zOIEHuA9@wuvvS|+_UTpl+R8(#sfj2YPnZoODlJ;Zj)|>U9CJaH-2v`kI9t}uySpG>Q>-3$Q$Lxb6eq4bM@KHeL<6e07vTUG|Bjn&FMG{7`3~ z;PG2eW#@!GwlJq!eR1G(0e&l@Oi}h*=~TIT5n}@k5F%5}Q#bJa$#zgZ_7tL|vQjEk&%FK^Sn&X&q%$8%O5;Nu4mP#B| zu1+=F>#4+6RbseID<;pKIk9Cz+mvZD8Q(Eu)=+;O79W|3`C-i79?{uEZ8Il%BwJt` zRq;qR2P+R}20YRR9%+<4j_}+FT1$DP9!JtLE01(v@#(w;UR%khF8kcGHDyy}>&G64 zdTyxCZJ5_O!t>cWw_J0ai|3j>m#stU@wpH4)(!Xh4rePezxe3WSA4!@pKe5a^zkEo zF-CelLw)*Tw1ba~+BN#w_90c8nJY4tUEgYJvCsKVZ?jD6?2aTtg}EtMj$D!ItDjm; zrex8od0jAN=cZtmYXXpt2${iE_*&zN3!~I6P5^9 zN3!noBhxVBt6}Du4|iHC6mlb*S%cLnvvrgo+iA6AD=9xVS&7*mSF0->+iAn4t1UZ( z)TT{Va&|1LjZM~LbEl;*CF>?T;MAr~)?{<1m6IK|a!Z&!C-dcGpGszx)NQr-TWl@t z=M(p7nK*TymML>vXHT+s*=lBT>$K^GIs4A;m~2OIj_2$86|yrDhE47Nz{4}lUKjN~Ld14n;v&co6F8Go_;u>p>resbdi`(pzf{Zqzqe}ki6 zi1+;sj{a|W-{0WqKg4_c;pjic`}%>S|2pU4=)cEbVt;IaqyN>o@lvea6W;zuUuVz9 z#y@7d07u^|=i%sk<1bSlj-G2rjhD;A(f7w+ArD8-v8eG%c{uujze*mCp4W|W{lL-l z`mXV6<>Bag9ocw|JRJSj_-p0i=y$^VdWNIl4S${TaP%A-qlcrPioafYIQsUShohf^ zzd?C8`h#*Fj-KmBjqJ!az|kL%zeygB{tx(@<>Bbh%6T|?u7Sn<7LNXpc;9c~=&!`z zqWaRE!_ohMze9OAdahH%_QTP0PK@n`qvzUO^lj-Kmu@jMPkZy(bsG(M{N!qKmi^KkTB!;QyJIQl_&KYqf|bDQJ1e&Faw z;(fW`=zoXz_QTP09WfsN;pn%+`|%%+evh1oqi@A~zXgtd8s6IvM?V99iPjGs{oI^~ zqu(EYsq%32hvR*D;pmUXdw&3q{!F}|@8Iaq#e4hV=r6&0`{C#>$NTvUj{bW5V`?WH z{mpnkUcu2ni1+ru(Laj!_Q26UgZK8p(Z7KA_Q277N(h71tGw-xGI(slbLl@CV{$;19*C!2cBUTE56kY#0K6BwiQhMS~3+z@Lce4;Mcb z(+4hoCf)`9T)YSTg_wS9@k{Y^_$%=|_}}6KVHVDYW8iPZC&1r|&xF4dUk|eaY@i=l z{6YLQ{G<3xdnk4nbI52|w8p{xRrntAaPSPiTp-;oFA`b`8%*Hp!!@)D`&+%U9aPZ8L_*IpML!h4JRI+Zeg}Td|Bt;dfv>8%);}k?Hwh3zAb?D2$b}mO#1Lld zz!U^TjRX~y8bT5v8U{lGI9045Sh2MZE&6O5ttbw)t%!E;wK(9=+E;4CTC1(|RBQXJ zptV;2-?!IZ=j^)^KyCZ_d;kA`C+D7TeS7Wk>@%;uj_|~3tMe1`!-OYJTb)P94;P*| zZFP2%KU8?)wAJDJfBhCZaoXxUPyR5`C)RJFzd^oCcw+q)I_E6wx6p~xR_8tP<)TlV z9w|7;0zWFo`YrTMHPaoXw(BtK4gV*M8SA>_vkPn@C#OWghpF#ep7^khy zBJxKIPn@)Kg@>7H-PFtO?lAkI(aoXx! zN4`RMV*M8SjpU~ZPpscUzn%Os!V~Ma(6^GGErwLE2-$Fl*{OQ6I>$lKPB0o=fV*M8S z=gEIwcw+q)dOi6wgeTT-p)Vm{Ej+P)3w!MPFtNs0{q#+6YICo>1#*7g-)EdI=#rR5Pf3(7J6Uu=Lt`&-$L&R zDm-8KKE%0#d8v_Vj&Z5w|1sZP_Wh_h?TTK~s%NRa`l1ref1l$ibOSH9LM%DbCBbOB z))fv-CJe+c^{@#|@bwtSP>LlF%l`CuIpOD*4^9I%r3pN(QcvqQ5tz^0G$`b0pJ^uA zh{d?BqCFtTK@tn&m_JVqT35i}C(!w$R@RBD0Cw|x8VxJ%D*189Xns7zy7}FXirxfH zgT`_9RLr;&kV%_ED6B=CTkiYl=!a}OI@>t5qZtd+*vlq!FLaS+V&f=Y=;?hMnb=DY z#7G|0+h8#{hUZwA6Ey2@fK$w9>d`JwgT`$F;kM>sIAeF1JTF8^?CsiAB=@1|QqlQR=Ql^anmqldpW7K8J>utY{A6C)#-qno{N$)BTQ2^|_Dw-v z{v`US`RZf2Ln?yxL)Haz>jyMcHuPLFVavLT{QKK-f2bFEB3p_%}du~gTif3fBR#T&8wHa^#QXf{Bi60 z_YHIB*KT>wFwZ{!y$=m@5Ha!+q(}u zLiKg+=@vWuNC!uK34J}#V6Vw==@I4a=Gl?!ioN=)$cDcP$3aC0?kgOB6>wiMpj+&s zBG>g-kr#W%=p_CrIv0iXSV4ytF!SgN_Z2gWD2#`gFWxP>s&|Wm*tz-#Dg#rN?3yiZbgak?6Dw7zbf|?jfrXT>$faELq)+x5D7>#61$C zoJ{01W!Fxo3OFbuliYk(!cd)pZj6qJ90#MhpV@`MCwDh+*!0;a&szYe5Y@|T;Hq?C zLt}G&(};h-n?zF+Tu>}-s`m4=ZYGv3I5TKiF=J^%b3;vI!@2cv{s1=BaLzx_$M<6^W(Td%^AorBHPC%U_@S^>Q-Lp z$>(~qy`7HIukqs7dNS`RBuIH1RkY<@;mNmo@*ST1Jx{*dlYijJ_j&SmPkz9YAM)gf z9XWyk|BAV_9D8ng@mOTZ-2?log#tn%;Mj`CdmGK}=lVWNgoJ7jk}JPO$z|G$Lnj{m11FT^4tY3A*@X`%jrX_QfY%JP1=sjr z0UzVYF91KM(YP|DEnKA&{}J%Xj$DuhU$KsUf5?2_EFnJ_26;#%=LX{;*Fc*!;#lPe#McmhWx%GM-bqX%ys)V(lc;ObFN!Q7dZQ$ zz-H#QaVCxdoIPRyCyE%ri5doQiiVknX4g#9Zq68$Fe8dnW4x(hR7Z@N3Bxt#xNyz< zxwa|IJQBz{Rm#RPLuzR*tS4nwlWT8ojyJi9b59!ok(pB&Gm8AoGiUmsC}-MB<^(8j zUXN)_^yrpNb5nW~c`|1;`H|jq8q=Fm&fcUS)5TGwpVI3|zaX#iUTSatlsBtqLa^8S z9Uj;F;dvbcF`un69EGL7<%yM_4BT%#eh`S2p9b9D^2Ex|1ny@KhQ!JrPkqZ1D}N^S zSrG(c<(C5Yw>+`(Ja6>-9DWdpm0tc)rEB`g%{+1_J{yN}(JfR{G zEB{U4{+1_J{zl+_>@Wmk~$Q^?A>Uim(dQ&SCX?iZBj`9SrFm2Y(PiIwO1LG_81=Xp!>Csv;4hg1cA5Qvq3 z0a*2kmFM|E+eNJWyW}~b5Qvrk5IA)VSv*I^qC9UUQ_~HNJExe>BR@lUV%6t)B*lS= zK&(7%WRxdXz7KirPlxCED|M{oL#+D4$=**3bYl zZTg7Srtb;z+~5erYSZ^Lu-fzyt4$y4tTuhbYSZ^J`EK|@AXb~cH-Xirk63N`-XY%| zKM2HX)As?e+Vl~tO<#b1P@6ttwduT={tmcU*U<>rmu{AKjDehrf)p?{=yThP2W-E2MABRKbt-ti`1r% zSZ(^|kjMKr24c18-pvSoWvKP44Gc3{FGB zg7H{WkLO1Qp8g&-NPe__ydGtmi9!d9d%)in67tZ5J6sdT!>l<^SskwWLFWnP(*Opyp+b)k*r0LeLRQSEvyoT)j3SO}L7ZD|8IFlJAtB4< zX@zkt_Yy43&t5VFwp(ckgX!AgR#D^3`BoESO}!l& z>Ev-6u-lF&v4dW3`;Vt7ZO3*e4Pa1+!J}=WOg)AlV{!9aj-8x(>=&NKG{0W}qnPDb znJ^Lg%~Anttt!_#b{M@8dd1kVJY}7Yh4~d?>4XLOMd1!q{yrz6=Epj?dabD6@1s<4 zxl{SYKfGG2A5l93ugMPEuT8~BHNn`wO+_mz!#a#MG`xnPaN5=x5UUgivSNXic4I0PWV|QPp z-Y41D?t|VMEIdze+1tK$1Pbbkcnw;vzpu?e1drDmRBz$JX1kXao3OuqZRDs?Wo1Tl z|NB}#I?>(N`r_%tZ@bNyh?X5a_4<;x(r?au{rFec1S2jRdg*1Yy|TiJi>4Lj{q5sU z(`wJy6%5P$P0sDPx8|&!^7xdz+F7-U2WLIF;ibo4I&J+u>qi~)NY=Gqe(BlQK1wFH z=DZiY)F=7(OJ@|d{NdwHGrQy@vpQ9Dn)%GStvfbn743QD<7DT{4&0M94m&{ZA@E9y z^?Iz=&Ez+wwqAW}u=VGov#WM@+1b{7YoDrhS4ZDxs!D7wcIC^y+Y@!X>YC35MPC~o z(8g-!hN?>@46Hq+J~?^)ZR@w@+#5W(VAF!O_jVONvg*~(Kzn5SQyTif*Zg6>6eTC*0yq6Vb!V~g;Q2O zwD^&hyO$@E1M^-wxaF_wI={4O=I*;1CO14$x1es&_3@TGErtse>N*VU4JU`|LS=QG z49*M6`+qAIFL6bsvxD<4jC8VtOJX6`$oSfkQy~XdtG2E)KDLzc&8kS%VLk0AW6doA zTd~+8E6+$*49j2+yDD+Tp)r#aWXhV8^MR~n@P&?gB#CPar{A1T_Igya^gboEHtxdE zxJObwv(8ZN;1gWVH>5OO*C4|vPHFVQaJ13s1=D6nZm*$fLv!7xl3AmRhs52dQG4sg zy=RSluqiaXuG{PTl~v7->j4&xRh^Da*2L0`Usfvaf`e1i`8raV%TG9t9~h1-I_ZG9T~6(C3d$*9CL@br zU(4hKg;d~IqEw~3n8o$5_HFOus4g9lFvoXZ1h)_7$}G&8gP71M^MLFARX31QLx#V)`7)=giO zYW3Q)uf#oB=}(pQUX{J9j2QK3oN8ER?TsikHLz=1n|WmC0>W}E2Jp>-c^WmHbfM}| z2&Z(~mo6^n*-YMJ;R8@TxK;KWKJzv1r?lWR7ZjiU6HpZuK~sHAqqWg%SW>enz{TbA z)i79C5Y$HRxKK*48Xs9&YK-=lt}G9hE*S|Uh9%X@8}Lr48P8M~!jIe%d>blg!B0c5 zDrmqB&u8w1CD?1SgR9WZ|2`W#=~|5by_wZ@50hD9H>Xx__}r0vmZ__?bj#DP=ww*D zb#Xc1v+kAM%dDdh9rdtQb-nC5+ph7oA}LR8=aSLadHULK z=irk%#u6{t)vgQFzAhnk(s+EwD9e=E*`_=&`#2-_Rt|^g-->0Tq&_hF zP*anH)}&8P_G-gKeG1#e1IS?M*dA~qB8Fpe!%YACK40&&rSq*_?#kc#zyJF_=J*yh z7XIxcOdv9!KS&VSJ_ZLRa*0M;IX=ot{0J|eM`sBVZy%R}5_z&lTiG1D4JYw4z4+rj z*_=}y{rECg(${(Vi#@r~lh=Ck22bAT$ya#t)t_vE)c`OlvGt|!0m$sc&~N1mL8!>a_@9&#Z?Mr6LfksvbPeYtYJCl`7$-{-jc zJw3U%C-d2>s~_8hN%{1x=f~6mr$nO4dCS-SiSpnJIpU;OJhh*?22yw5#|2ky1KdyzGA0bzx*E9?T^2`xp16IZl29AiLXV5M=jw%6-Azo*es2o%DRR=5CLvkT*K!`wD_zKz7H^Zy)p87Ur@#a&O4-`Jf;e4EZ)E zp8f^5Ir0?99D@=H0{Q}eSVfe#0CF611NysoA|eWc3n9njJ2%(}nYIfO3WDn)$NO_` za4Y1vKMR5%LSCTiIJ!Ix`T0mL2%dr*Z~xrjCCG9A7X*KS{Hmjmi(seyxj`Z1KREHl zkn_-o5^{q>A^%ZDw3mJtW;^jSA^*vVKMgX+h=kl=5#;|?5$RV!-t5G$h5Q#M{%Xii zIPo_^<~}E(Ah-*%Owb{d8*GOhpDzo7osiE$n&Ocs)2E1p+@KlqV~)%R z2;62Ge+A@DY=a58=EL?+tBCsEiFo(=gWm&rD~eABKY{#bM~)x>zpv#6em}zv**H5r zjPwlL2Weycgq6whIR9%;4&(-KuV%+IAXYXfGH>~w@5$0uVwLm@7^V&2%~u1swwddW#+yImZSG@iWsRqP=BwqfbEs$6`mKxTTNIw{ zt!KB((m#Pkv}?od*d}|X%AVD)XF=?L8NsWVXJE``J0bJ)5$2) z)|#4bB#VhsdaX0VB#QK^Yc{K!6Z;}k_G{0ci6Xt0W`0h>>m)N;qLf~Lo6nd;kzVh6 zUzYH?%#6M$sTt@_W4v!icun`d4&n8;_f-n7Pt9m{ONx62-&|i*zk>CQ>y@#2GPj4> z0I_C9_nTP(QJm>ur%dw=5$r+c136r?4&1}aG9Ka8E?coMSb=orI;@|)dFD0QC>{h6 zR$}RId1B?y1@3n&eh`S2{{nD-%M&YqJ#deE@Pk0C{2jnOc;SmctUQmuQ)iKtYm6z! z37(48l;Z_+HRS}sr(rdre<*pI zKe6&hkY~pr5Gy|sSo0@Vo|{d1V&&Pznm@7f3&`92iIrbS-qxR3`DG4Ito#b{w*JJ* zuXXf^mES<#zE&kxp7&$Q6DxlW`FZ$3AXc8^FlFt2iIs09e+GUKTCph4Yjfp^mA{?5 zePv3l{Ex`nejrx|+cw*&gXRAE1@-^gb{}U_EdyUkYk`J-+tI3}wJhAc@J3O)SoU52>6n$dlzwGeD z%3n!-iRcq6&wCrK53%yMlDG9CR{k!BCszI*^0q$2%Ky~iiIsnlyuEQIR{ja{ww}bw zKSiDg7zASF`CS6#iIsneygmL9EB_Ap<&qDv@_WdiEj+REymw3SH^`3HUCoT zd_nk8#1{%aig=CS8N?R}K8g5?f;rs7iv{x#7V-p+z|9k`Gf;e~*)c{{tpl;v;Zo{f zBKlVluNQnZ@dm-)BBmn3x3Pp@GEjV>T_*T0@*4&JC-LQi?f9*$%Zb^k2=vn&-X!=!;?07;M0~U0Yl&|Wd;{?o!F(1P-YR%2@oj?dC${_Y4q)An zh)XTc=cM87qR-=bc!yvf!^7_g{xk8Ng88e*4PqTj3G(*%K&*To`S0QffmnI&Q>pKf zmFN1(7eY>b-_Yhck@7vsFA|zu6nfOSq5vCheQ zh&(HZK&*4J9tYMrS;RUg>q+tj_(34nIa$vD>zpiNos;zfZ zJLGxbK_J#SS==vlP8PAw$>MWHos&hZbF#XS?*&B!Vx5y!M4ksT1Y(_&)t~$U!V~M9 ztQ7e^!V~M9EMD*FoGfCUlV$v=_Y-~NPra{TUhnCgEMlFLHI4iL(IM73S@fZzu5`spBA22=VaYTzEpT(os-4=UFT#G>zu5+$R8s5#5yPI zN92bJPposY9wa|Zcw(KC^*H(A!V~M9tS8AIDm<~y$$FOj2;qr!PS(rh4-=kP{j9%5 zzD#&x^|QX4{7B)6)zA7zSo{L?Bi_>xJY;3s0<8qMx0wNjUxJ>ek`}MjbpiAz@ljYgUeB=Vgeg9 zj<*1AetmGPy#gHbV?K=IdLtI5v4^f{aD=m z-o?3qZD)Q(HjeqVVL|sV$I678kl!p7u-3A;cB&ox8G385@KS_rWLbq+I$?2!Td*7o z&uXO*r}?o>uHGP=lU@O*LG|#`s-yWr<3^7uE|z&g@;kDuZ0uM}%NsdzXdcX9{Awq;Y-FJG0@I~bPSmZ-u^oZk+vX#IQd zs+MiR-#;iy_72)wk~<;wY2CEfl)2jyoWpba;A4=oZTDuROy*Rzyx^FS|=+5pW6-*t8oh9cx z*}JJQlO%Kg31^Zx9+}O2k~o|8vr5c$_H)?fj`x+4sQ9+o)973LQfO!FJA@8pphz@~59$A68rn06Q z@Nvvo20I0%4Tjyn(8BsB{i!(jU^3Q98w3IwDQ^KobbLW+gPCe8|R#ujbRP| ze5HU3jATw{JI5o;?t*=nb54x+Ww=~V1ZF;DGbbJi z!qD2FWgif-D4CdoqoOUU)~r8sQCZf>bh5}+4s%FkY6vE8m-8lsTFbJz^T3srtG7tMZzUr^0MJX%D+*?bnC2 zeMH4AYl7=v`d<l`j@v7;eWZq5MYfN?B6+M=o_z!q#ZUI)r+M;pPoCw; z$9wW@PmV5~ZT%XZ_y_{<2$4CSI+o-9miU|~6OrTFUXk;?_;~wBe7t>lsEI>1F1j-7 z)3F@aN8;o1MUKlCxgaXST+~HUHZJEf%j;N<%ai!HJdxw_M2_2ME*G8hVoj3Su=jOC zd;8tY3#N|jc{9`ZHtliuFSf5SQj+l+*H5-bTnp*1INtA%KJm4m$y4UL#QI5d_goy6 zmkb62$NiTu-*t}la|7-xv3{=cZ|LqX+&9j^A|W@3$3B^)@f#KQY7*0RY1gbFX?(rn zF_{fX<3p&Yib%g2IIf@g94~g_F9CM@^U5fWAU9~mZ(M$^nOhN;pBsD+@p1ZG<4-&; zANKBukIT;u9);{4KXyW%jYR@HcmTNl^E_mC`@RLa7>k5l^PFzDim3005hmzl=C-)| zXAk#;hW)V^a@@Yojz4Xt?-KAGZJfSK!1qP5ewTpniQ-TcoCMiEiU(a3)Mdo?4)`8t zX_TPI_#BT!+(3LC@wY@oQE+oc`uu?JS<_K`ey|<#BuD0ZRo)XxC<^#qWV?!}&mSN^ z;>aIBe#(()%krWl_ksMfBM*W6gd>lG{DvbR19?d#=Ld5jU**U(kneQlrI4R-xi7-=I$nuy7hN80%jBdclKytf$+%mlW}G?buIn5Hod{uUyftUdi?u|a#wa~5$UTd9MPQ-s3Z@sN`L8G+Yr zqYRRBRDa9!e5E|k#ZyicCEf=NpDmba`&GqQ^_jN6<=uSh!1uUb^odp9s4X_J@~n@RHG(=e ze`3`sCvR^sh?TDZ*0eLI^LhLr5Ub8{z-miQto*4CPpmw%P+LM`<)~&w5ky z@q<8II-e-ux6LBEV`AmkkY9iwgf&={UkjY7#Sa3p@?QtmvS^l;nvWj@V%7N;aH@`M z5D+VW7qF(i2RK!a9|U66`4O<%aT6>5u)`B8|1%OY0(BZnteJ`3mVR09YEV&!`SYu)-$=S$FBG0w`Ep=Q z%WKWlS)xO%I){_D?IKqGIN-2R^iQOYgG(*u^{CoY6Dv>qqj0IDZKRHaOD(3IpxRaw zE5DX$mrGjO8KoRtYVk($9LNa7%C|acZ*tNStIihkO_G*a`5aK;RN;9X2v-R1LEJ33 zH!*hn(7{E-Ul6>J_(H*Ezgr{tM)FidxD$)o+ioMCj~|2|V$rcjtYhG(z-p7r{Y7nZ z|BKkx;kU%L4%{!)R`*R}Tc6#;m*5BCuUND`3G~0(=jIV_Fe=7gPwjILAiqZVH1Pt# zLxFY76PH?k9Cf}VIsXyd9d;hVDa4lxKArf>f)^8iMQ}5*9mBle zN?jp5v5sNdjHvzZrNmc?&gH~5&;KB{dEP>7$M)^OsjEbvSjXr0sdKgP_Yq$snD=O! z=g*11Cj2jnZT@6*943gXMTh4>9Rp^}+v86m`9{&MA@~K>lRE@Leiraif_eH^yH{ehd%cN#XVD>6yVpC&;}(N~ zSnXc#1}pSFU;s=3P?Ot=yZ)&eftoEwi$oDns0kPVvazD~< z2oUQx1P&(OU-XI9UbU3`0O5(%UX}OHYOhMH_Nv_P)LxZX?NyH^f3W03toEwY$rlSx ztoEvv=Ww zFDB1}Is&oUt6oNai15T}uX+{vLxd+*dsXi5YOhMH_Nw0^f2`;etG(*ohgG(*XQ={r{BtBAfuD~iaImV@y|5Wb4SJc%s z*I0wq=K9smBlLFBxw8~=){NNrCUZmvuQ!>QZ2a!sXVsZ0(5wbm9 z0>$-P3+(E>3%P&_HfXumLw5CeZ`DzLyzZr*hMo|9;1CM$hJxFU?P$kv5NrqQ&p56h z!lG#agU3-Jwnc-+{ThT~#@&ex&1)hJ3ZDSsmirbCV$UK^mfOw7vE0|OXd1xaE7(}} zbU`tSdkNUh?@^qib$fKTam;UzO{01I6#4P|u7S`j_~Bah_FzD`<4W~9TRlx*#*Oa; z>MDb?+NpL>$!k|E*nH;Og)Fxa3#t?C_O)348b_4t=(zZmqn?b5tS^wM8+>5S~NU&!4&L%jPBvR?jS zCtTHXO(E@oc@O*A8nk<+{~Z7$4^0N8H{S~F&4r~~ZVi66wyLG`&M7TpzAEV}`fB?1 zn;#2uZ|)S9-gaxywtE{=Y%7FKF!128^o}3G-~SK$l-~5@M{O$~%WK>7Q~=xIKBc!k z`B7EN&3RQVgTty`_@)5rv*Gy<3g7AZW}jr|uO_#siN>9ecw4S@%DzcRnAj=#_vGXMUGvwf(Gx+O>BD9+D9Wp#!Vkb~>JC{yNRWvyttAT{vs6 zCadtpo^?QMl$ywNnV!sanVti&Ypk3bTi)i0au$CU|?SBW*xwT z0zQj`C94k)CKmV2i*f(_7!N3n@qs;Kd{7^Q=b^-`;sG%pI3&g;qhp+!7~?^+Vmx@R zR5+P14bSH@5c?hGyxam-v%s|Kf6B;oal@j;)yr#Etf*et(AZqx^p9Aa>ea2EXLa2< zOKX-i)LLie_>@u5uwus2hUSKv#)fn2>x}&=-lfzptX{Bu35-Q+@D3(e5ljlIt0&E# zJ?Yfysu`zMRL?oJvZA^=s2ds7l?SWJf>k4fRpmj|^rq=(LnWGkPbHxRQv+UgSHmf~ zSubm84i>J!^^b9h-tZ5Yq4KqMwmG@|`^-@NuEplU0NRTm^aE&$nTLG>2Bd0G*t#F5E?xVC^yDqouv|S%%*Xr8c_Q4=q;#kcG^JcVYX<^sw3xu$y z!dcnpQx>Q8K*ljTuWwu%*D}cdNokhr7kx|at$BBK+S>Wjkn*cm(+}m;DQ*|0wSZ#z$3GUe}xSyF5{e#^sF#M zX8%YKxu1%-(_(sFD@qVKZiUEl9Yzh2$6IZcPxIt6Jb8g9FZSd{PhRfH&7REr2nkZ3 zH7eTrt@Y#$p1jeMukhrnJ$aKS^PW$Fl;5hNEuUvE2@=0WMH_#ICx6eA@Al*$c=COo zyxo%@^5jQ7`DdQ|xF`RYC-3xR-YZIw_C2YhZQnDV{JJNOL$}~12p^ z@A0hw6kw1j|H%I0>y1zT}0LbzFoF5E_%x7#8 z@&o#Yi1+XOU>4+ff6EW%L5^)2^Mgjn#ZLP3A*UR9BV@h@*8H!B{6`hhp4%bE$B%eV zpo+bJiL`ki>;~G1{}|~RI3{QV`K*=6ah$*4$w3EKy1s#*QoB=c|Gk|7b2GHuu z02-~)3X+6t6`5%$Xe}A-N_{A+$su#48KZUJ%B0rpk*sIa<{AGnk56DesMcy;>I}0s zFD}CzkHt9laG5T9y&4)bOIO)5kuzqOZafX~B9l2*$&K_p3Hy0@74vNRKAqj7vDS0S z_PgHLk-G6-WsGNEH{PrJNUu6(gFE`ZhhIPWn8+s3AHmUWaB~eD{Tgq-*e5ae)qgKB z-w!Yh!lM3riIpD$+;0|s5Qvo@4&2}J#LABc?r|}G5QvqZ4BXGYFC`dgkW{iIwLy z{_qp=gYYDlsVp3U*CxZO1oJmFC&r}~C&-^9JhAd!9G+Ntz8^@j5eUS}^Sq_`6Dwar z{uKNm5Gy|vSb1XQN06V39|U6Mj{??u5-UHMywxXGp4&xvV&&O2YNJW4`~vd!=7v~# zUO%XfCb9C%9G+PD73AmP2Z31m9N-L_u+LLN-XDc$2nz| zgeTVg`EE~jcpaxY#HurrI&2)m5m>@n1A~dgb%Kv2t`~d)F&mA*t_kf08><`I3#p~V z4fsJg7mND$`x5b4WX12X+5lY(Ib34sU^6i@K=?kEkR6F&-k&WOyaTK7Y{9=GZW8<) zF*_LH4J>L`XY9jT3~inls9hbez0|I*FEMvGgu%q;2p&nyMj-H=jM~g`UWVGtolJaz z=rj<2LGX95Qv0MI0IR(bvDzEmPrfsL5Qx>@=x4xcZ$zy2Ms4Kt@q<9D_C~yBRC^<0 zwKwARsM;G5tG&@5$aljJ0Zi!g!md+y2ofUyt?UwjNU+tEN z)o$qm^2J6yAXdAjOUMrto;YoFzCxZmJp!@XEq$GQN_b+mTlyCHLBbQO-O?8FgM}wn zyCvEMs@)Q?+AaN%JP$Ak#A>&6KY5;z5s1}p=`r$$2v4kbOFPLA6`ok_mYyO%On73o zTY8o}PwWW9>Sym|@`nmftbX=*zoCBih}F;DZt{nTKC#+AeMG)Ycw)7G;#BtDB+3K{^?-yqlG6{`=?U!V}vJGKYPaBXsqzY-pJ~3?wb19BUV3q z6UmPkePXqvnnr$t@Wg6Ibv*gQg(p@!s#C~+PIzLqqcVQ;c%ncse)Fu3@tb#~@WyYR z)mhGbjuM_&{p_tK&o{XU#A=VVhWtdbc+*SX>Rdv8lJLaoiGsgGenyPbR)>dxaHjCw zT{G;lCJSGTmD*$dbL^S+da3(qO^@Ubn zV;lny6?s_pr^j8}&(9vt5fi`l;jedl*2BkHmF|w>aunOUJM^*?P+C`KF#l>k_@7T^{qr z*V4D$g6`tOZbA1myEj=JGn(VL39{Sg zeAwNi*g>$?sCoUZmAK;qoi)Jf4)!QBrd~j=2W}&%xg!*TxXcR>?8Lu z_+(k^!=YV9QDN|Tt%hf1V?5DyU}bZ3U(|NrHa3}F;$UOrSlC?p#Sjkau9@7oJ4Wy) zF|vtGa`KHWPLf{jU~J>q;$ZU@h%HVxwZ$py4Wk?>7W;E-m=pXR%5n^lr@!3C+lOd} zv=%vdlWjwo{q2lh-74@CjS|8_ntkhGCJ4I^VrG7ZsbqK>^~2O_9Yqh(=plWXv7h=d zjXvy`9Ys&p=*e$%6n$b`*Au&;qUKZ>&hD_DYc#7hHR!l@75TD8e|de>uWZ#7Fq@=M}V=Nf&(pZ0!N=4%Q$eR>!R^Ja;_Z*XLtQR&1~FHZyo_kiy9D1L?nh4*8{ zkX%i4b#Z0)}cw)S5JTl+7At^Jq5*8b~3mTc|647T=P23z|tgRT9S!PfrEVAy}f zwayOmp43_=vT9A2n_A<+P9DD^YTA>R_5C>JE@$IyO$2#8F-nbAW7hU~6W{M>Js_Ld zwBkY8#0Ed)jI|xkSbNwRYmdlSGj)2@8EcOf$2I!dpcwyLtl^CQ4gE*VAMCv{==de121Dc+;+DoT2_(8ODZxZeE=Bck^TXd|ixR zSRCXn#LjH{{f#)+H=Q1R8~wf!T5{}7WW8h59s!f}7g00#U1<=`%|X`g)$wk#2j7E@ z$3Qn1n?0dhkoTsO`v)d>mY4N6?lk|R@IPg6=v?r9cHfq2Y1mZ1qP`hUESp+to2y|7 zSXp0l*3|mu`r77(WwHNCUu*X48PQ7`KW=i((z@7|aIb39J(I(|Rp_{iTWOs`i?A($r~qI&W+xVOl9JLPaVM7B;MC zu3nB#tzL0f!}8_z^aEP6$k=O=Etja;V97G-H7#3Ev!JoQdWBCIHPkRLpw4U{%_}pm zv0-6-bHkE)nsruYZp`|c#%e~vvJ+OGaAF!X)V1fhAr`dY_1fZP;@EWL*y`pE?MSIv zS8KW@D%Ga0rZd!FaZ~lenib73Ag!)nY8qx5zkK;3Q-WQKE~?8>)!-Sno>EplZN{uQ z)m3vQ&8etjqrCCe&gym2C$Mi_Vg^lhRBL3b<7~l-h4ks#+_C~LT$jM8x2gVY7Mn57 zsL)Vby|^i$msUrD7uWjL^-Z-6E9yGUoq(of2e4&V18ly};D59nIEQv&^OP5u*EXOFVudZF% z9M~q9IvHX?O&uCws@1Z>Fpw71H!fRcIMaAZ35s=ylX8=1GFrZt*4$KMc7+A!RNHE@ z4w}wV9PLW2!a%NH>ME1Le$~{ltgfN9q4^xGBARPpw8gN~FK?<}S#5SmjJTk=nzI1W z&DexE#6dCI`RBsOs4|!v4aiA#HOreDR@TeWrJBcpGlQna71c|ajJy43cgahaR@uSP zxX}H#*+N$wJ`cmUp?XE#S@TvbTiCn`4vFX0E~~4bN2Yn%vc?tj7BnmcwPbliV|~*+ zny{K5eCxZ+fI}M_S1vgeN;OUA9BLjtwx_Z6>uXljAG)ex>7h$nRy3MCM~s+f>}E%m zA6nnIa9+dG+Qt?Xyr7|Zg=>x7k#TlSV`K9<%j;K+SS&XbNpoe~GugFsb`~x>!el5W z+q?t`BOk!s!en1{H#|VBfZ=Xf5_GrL#G%NU2}{Cck$Tk)MKM#M)KO56zg?pojWu#+ zf)S`<=j=j|jCAUFKPq3SWp&$E7CWKYt+TifjvNs8vMG{wU0~O}rL3g#1EQRZ+SlP@ zUsWq*P7NRF^3+etO* z&R4VX4*R_oxP5nV^tpE$PomKiP|)=E>6?If4M$IC5q7N5^u!JtRKvpZLhf zeB1k1jgMRsZ;fFnAY^-%{n=*5y2MHRfw5rp4>I+Qw}%{Wh|^S(K*Phs$YMwxa0;8$2rh`9d2^ARRE$oQvjj=26o zwm#W6Twmiy%^fea+xm{9KO#fFXYe`5e~-BS!Lh(@f1U!l%}KuyGVKr~^b9z6VUmh? z!@CA@1#ZA3^bf9p9EZH%n~>e{dK=_FMGF0m-BKjteEJCD-SON8xi=OG{eu@HOr~@2 zXUOsR=xn~H7rp&J&AXUe8k-#FH~Juow||#lFyu3$Jo^XqKjDstiI6XL;!mKyW{383 zZbKXjf-@n<`4ZVrr`-&FH%aIpd=2ti6_MY!A>ZN1--FCoIuiN^+abrHhw(=p zkIx>#Gl+k|$^T8rZu~otW1E2fK^C^%$Bupv$X%l{`UfSDdpR;@l?Hs5BcZ?XM}4Ft z&qh3Lm^6L?3TQWR2240Nm=tKLMHFd6$6k z0{Ia~eh2b@J8~8d{_i_7-sA*H=xF*9$UPjn9P%NKJQ?yxN1hFNmy_QD$b5^X`87d) z&XKlHER3ynj@$$C zdPgpSe5oUsL*D4flOcb_k!M4`(vcTHzQ&Q8Aph8rzX9RJMxQ=_c-!9 zkn^1W%7VdEKS%BX8ID(?`j$YR=*Z=es~mYUzpdtj)p9a?<%`Hcn@} zm3z~*yeVgl{RETQ#FA6KxEwX9ercVT+rB2ZnW1k$m7%QfV-gGzibetn=qKe*JGj?{Y80C*%Aa*8|aSLc3-t0J5KWbZ4sRi|m z8kR=cBST^*L*LtfrjPrK&hx4=A!?5)BkDbrLF|@c2jwVl)A&;djkkR_o!3G$Cf#_i z9Dl~0KR(SoM<@OMrZ$>A!_oI={FyIBIPv9PeapSRF85{(j`GIUC~x?T@<6q*I)kjFyFXv^hbNU;An6Ajq&O?+N=L)Ki(TbqrLi%_Ub>{>#xyX z{l|Fq8{^l{>)$b6{l<9ZkMZg^#xKvS-x#lcNnP_-&n7HW4-*w#) zf2>!(v0nYgdhHqK)o+|vzj0pu#(DJ{=hbhVSHE#y{l<^&9Wi zZ@gE(@m~GLd*zMy>Nno2-vmEDuYMD}`c3faH^Hml1h2da@f2X+4kOc~fp6&R<4?5u z%KzU?#Wn3Q@2llLzsTA_@p^0&76xA1DNn5YAcrSbp3kpTpIG^FhbLB^m-GG3!Vdzm z^1M{+Z+T+nM*~l7#1FzzSf(y9&^$NkVIL^*`cw6pr_TRmKB=XmPptm$*{&2PSRfE9 ze=xB6iBAEimg9$OEb8aJl=9hRWloCnyk=IOSb4TR)r21eV&yAqg+z zIru>!E?sS4a0OPWb7QRhwGL0L{5Qy-C;G(7e-Bv8x|=%Ziw?2s{DAxg!V@chzrzzN zzk|Fji&%M%88N+fr&XH$n81mRRH`VETD6JJ7Be9`FlB^n{? zw-LCh^g9yl*3{+rK_D*W#zbI~^ji&=5!*aD!$ZH-@E^eXO$p-Cuiyva1}yqbiQ9;6 z+Ixtv#1F!cu%xas(BM+bZwD1#E&OA|HtjCrYlQy|Rw+KvMj$S={O^H7RuJKJESmOR zVh&`4_pzil8ECMM?TN~x<1CGmggL@kb@dw z6tT_6nD}rbAWUJ}^J1)Hat8IkDLj4ZXxh&ce@plpVs0D+e!C`YH85CCe1qWgiEk9l zXWXf8$GFt;oC6%*Bs}N+YFT{d9c~u>R^polbM9_7ei(!g3V$^5LxPVb=0OYL6yk>k*AhP>cp0%BWBlG> z_^9xF4jOW2Lb!_fXM(>){Byy4b{Re{_+H{)2;N2fUxJ?_{-xkQ5$_cI9`UaP^O47JMA>(}GVW=8ld~PyCGFvx$Ez_yXc*1z$@1 zoZxGSe<%0`Vjd(AzC--Hfx!=nUl6>5_(j3LB7RBmbHpzTeuMZG!MllH6&xmkUlZJw zm-+i1oIhk_-Dai zBmQr}Hxj=i_)g-#2>uZ<50D6dAl@zbUE)20`K#wOG&lOrQXa8APvsM@#}7gw7Cpc8 zB(~?5KE(DMF@X3A{2&x#(euI};;Zn3Fa(Pp^M@1LV}2R2J)Vyy-h>~7@mTbjd<60J zWbxb=i(X4iCAP=g>BKkU2VoYL@Y@Ck<~vKdg6U^LCgI5YFa5R#-+hH_1i~I-Rve*Q z7Vsg0ClIr;2v-pwDfmB$D+C|OedlDsd}mq0PDLP2+d5Q}?<732`unIQKVNua_4l!w ze1Y)9>ZgOpfA!NrtbRH+kmp82AXYyedNWmVi2oe zj5o;_i$1aX#o)JMN@|5CPFtO9Y%ld^L9G5P_g9RT*erSx<4+YO(>W6|@ z{ZJfAo&y|#Sp87&99L2=JhA$rIEFkgBoTJhA$H*hYSl@Wg4W^K_wgeOj09UcPIuah}1zYC=TWRuhsU_o^3PJo=Knk~ zI|kupEU8Hb8eD4m_d%)ths0AwC%`c%bWWkn|~kZgeQs40P3?-5r|7I|Ec_; zaArv6N0X#jx+k0$+GWk zXX_-k5qte?R=du^l$K9W0X{nXw2o-Zrgh(81|vlJf6zA#Pv6)@%(F}GFFdC8B(MR8 zeG`V`H-TlMk%Hh|93T1s^H4&bOFotbSls-kLmq)egXZ^n5N>|?P$~n*{CIfP{MG`y z`K^SUhedXkvsZSN6Ids$Cy?>sNRrx4dsxfff#Y*PyS=GZ)}X!0XA&rz_}HogqZZK6Tz z_a(1>ji?{>xIGH7X#MW->Ngy6fo6ua=Ev)6x4m~GKOHZ;WY_$jv-xQjheLi+1*{>O z@U)lT3 zwA_5Acgop~L26Gy8Rh0e&&{vrc==Wq+rdi!&99%$kNX6}ak%f|y|4zB#f8`JT&v!s zZXNqP8sXLNJm|SW>prCey*WC_kU;g0f}Y!s1g@i(qke1$Z-KNObG-a^V&iknXrLYg z?-ShonsJ@|JoK1fF&53Q270K@a!@9Gi0iCbDqyWya}CufOvfOpEEM0nAAn_k5RLhd z)4X8QAUwxLUu)3(x`S}_=1hd&Q>OscJ8a~b(Zx>K-#5g@m6eStH~RbcdGu^fXzDQ9 zRBlL65ll5ck7D0H+u>2j_XqUQwI#2nUk(ayTbryeO7^-beNFzrv6oh@-B#R|*j#++ z8|y0aZ-B3&Szkx4udRXgVntO>@aHxxRk^{R)9b3%U0vLkTw6Tz64eMRZmcV>yXji- zt%R?WwIp})3u8seWS}~a&i9!Obw2ax)Q(banBEclXou{E#&&tOV>T>rr_+wv(A-X^ z9kXF|JDqmShIt*$Zna{Vfh`hTPi!$?U3Cv zr$gNi*)4Nj-QZf@9WKHc=Qs|hT{KNcQ&`cuiGzOnWGoK^=6iX?li*cuDy)^U=J)fa zPcibEA6Enu2TThpA3P>_^t-qt-h14m*Ot7Uerx8N$G<-NReWb}ZEiYwI=At9d|R*T z(rv~3>RwyRJwesFyIV`Q+9b+#w@rNM(gNO2RH$QY*)ykXl+ExzjJ7xF7m2JDn zgw(4#_qrgxt_}N5IPGWAUbB94;&kTJu)Fl;wWoy@ zGoKF%@4R&5;Gvg(;};j>8+_S=XH?amy)Ch>{;G8qH~#FJD<&QCK=vgSK{99O4HrM$ zDJZB3wo{Uz3ri4>mE+zO=@dS?%dpZF*L%8s@;j5RV_Ca)^6OKNG98GjA(25 zVPRG8ZLJqPbun6&ee+`h(--CL{`j0;cdmc$fSZxa9^~>~uU8+sece5Yjg#71a(5ov z^217|9<^@s#Hy7^I5Rpzxg%!amX3M0_@y`Re&>QMC_AXy z-CJ6VR$eu>cTjuYJ&9c}uA6Gwhq_&L$-5t~x@Oly!;&|nUKgW8j@Oy%csyijmtB=K zFZy`gJfu~(0eh(Sr<=&hVv|*d>y8Ks{SM|ObX{vhP6QyLXxi=^A#mF6nZP(;%PYvHT%alZJ zH@W2Y)QD|3=IknL>jhlA?Rc$!mj{xGaN4BSaV%wUPLQ0owbwmJmE5Vh@*9&;y-`AG z$&TYo2kkh%4d1I&9WAXiy$w8chH$;Buyp9Ql%X9nTt-7H_UBUnf1s+FUg4 zL}~NpoM7Fwt=C9xGHa1zYPTNkd$48O{L+$bsL{6LA8gq*Uu$AYy#?RmM2*O^Mh~{U zGGA-Nw2=;KWOPuYDbzuY#@ZU0?OU>~(%rsAxtILCC~r;vsBy0cSFOL~?_0;cAAJ5R zeP0_@`c!Zg$^?FpTRt^tTV*P}qcSyQmr2hNaFtEFb^QBL+O4m>A6)*2p&LdGmh@X+ zza>akY#sMXz?h5vlp6E{(N?s6U0fUFF16Wu%Z^~w>#qgL zW44a_HS);~uYE8)W0PrAw{6_I@SdRd(VPHdq%u{!V|GSc(H?At zdml!ty1$khiqu1P%>okbK4AJ`I8u#}eAx%B zo9KmxUSS&Rmo92v9Gu;P<jo2OxcpELpa!d2#isdUyyD+b;OUsTI#P@F8LR&BP2{ zgjAEJH<_3wWBj*RZz9Orh{k=23ae@w&tjn_W`%WRqB1k48xxh6E^At1+}V(%ACwLw zj33{O7~_}4IB~HVmNO;20ac67q3WeAOM->VnrhuHiR6|APMnJymRe^nkt%G;&(dx) zWD`6N!JClnWtZYtBH5stMs5a_5etp3Abw#MHZ-A=jh7ibKr)V!L}H)UF0Nit-^dNO z1g=9G)kzET^eN>0*&JJXpO!s@7by&WZqOShF}y8_KSAs3xjrw=vy={V`(%DQ9WB2Y zx7vQ(KHPJV<$r>TSIh1MCo4m?#`m!X{H2i; z75jAV-9ZCq6tT(&WcsP@lXN^$_s#qgd_QS^cRXY4@8_2+H61V@$}P!`I56rzBOa9b zq4|Sduh+#L97^O0qltfKL`%_WBK^RmN>P8Nx;z22&t>V`_5_R9f=vc)i(AmIY zSd?uj^BbDqEc2UfeiPFGuXE zv-0NQp>OV;8jXkac&wX$A$~jkl(_Rl_`&9eQGe$|S9zgNGnzy}D6f;2Qs@@;=}Mi! zs7azQ+?X)ZY)ak3Eh0TasYm#@NaIkWMBi{?(rB*5Ep4KIc!x;1n+y^MhIfn9GZ#`x zcy}kGxf-P;4hj2oj-{dD0FhYh#IUf~kq!+9iL`^cj0lG~>B_?4PTa__%!w-xM?2D} zaJ-{AIy}OW#)L;Y(%A4QM;aF%?MUOpiH>x5IH|L|DC(1#Y2H1UrX33xCkUn~vl1~r z4(`_xjLz}-F+QO%)~W1ip5O<~iNu^(<0Q$^q&!)2e4X2DuH;Df(uq^&8hyi`_C6o& zOAX)wI~L#p+X(b>o`47JIEEgud+>!3KBG?Sz@9XYVMx}=_{-`=DKEDNYhjgQ{HXN9 zfP~YQ?o#V%X3!w_C}EB$4@#_zo4Cqp;%cYU&XFdX&OBE-&EWH;Ak!rm^o%?3!ai}H zYj|X~-EdKH(DMn@gduT^dArw~I3$iA>XbiB$~SorcgjE1DSw31(8HvBqhIEfKT^s! ze0gzPuTg_yJbFls#|)40*s>Up8*Q*@_xSNKo^V8r51$z0&rOZ-5z`GebvSZX%pX-5 z6GCY@|_elDGC@Z-|S2LD1j+2ALfPHuBL`AMgf zcTJ4*f6D3PUrQ&Oe4chX`8U$Zrd`iSCmZ}*>12bSb2|BV^W*%VcRKln#nPF1i8ta7 zeADSnc=+avKMd`}2S($^JpTSoUI&tW$FO_I{zcLm{H`=Ei$~VotK*{qU4F;=Yd060 zT^~-sSz2A9cU<8Eoci=}Hf~>MFWR`vx=D95!v)UjLj;#X0I_`7Ay=`T};%Q=`HT% z;GV?&+H5WR{Y~EjTkASpu*@~-uT^_%Vv z+x&mndk^?3s{P%2Hen|OkP>=g346oZAVqdUx6zyQAR?9+LMTd;rdUA;MQn(uSfdgI z#EOWhM^Qw@cGOspdOU)?V)u9~_j%^`TQe&Ip8vV`^WOV;@B98o!~QX z>{%y7YCEA?Z6{Q#%_^x))PBt`jTBf~t-#W11&Z3Qh#8S0W>hO;MztbD?N`KtND&LF z6|taN5u&`>B^ZbazC-6y^T=53*)%S|KfcjBmh@k19xHF$IZkW#is4;7$9-+SBd@&< z!Hw_M9I*zi@?%;4B@xGbtd?AsHO7f2mMxcMzF%7|%Y46%T$cGA zasGskrT^=5(9FYB7n5g{P0TNyQZm~cFtqo;;(ooy^e!IVzjwbA9X))+nEkw=BZ`V7 zWcY~UF(Z!eJIKk+6EjK5(C_8)B%wo(A<9_e! zPkLd$_YH)8Y3pnMdslpo%CDPgVAhEu6wC@R(F*4E_`hIAmkF4Wq@dH3bN**1cJZgR zk(q8dPluge=f9X(hq?YwPO39#bia`$vrDE28~eX+Y2Ymf|3A8=VQ$G}?3OYJ0?@lo z=1jLU>-_grL6~Id|NT=1`A1g!Gphf1-XP{GnTVOF{HcNdgIR=h_8{itgiRCi0H4`q zlZts)PKj4i;LXN-V*klJRyZ}3&YP_hZJkl(&6!>-rw?xuj!Br>Y395cbBi(4*Hlyy zI^H~-v$|teFXW%iNtswNZ|^DQ2^r@UdqY+!<_McSyJR9tmIP4Mc))1{2&B^&}C{|!ZztN5wgPZ6^%$qw@ z?xEv4A`7BM$=!5grl7JZGp9{-vJ4tsIqcDArJ19*XhX3m=Du8HGf7Pc8@I2nffx1}98$7uhC zHYYgJVQ3&{YQt@4!PfEz*KCaUNgS|pTy};RO^!WGJcpj(uqft$Q}%Bv#GQm3+?X}b zzl!sw*@^f3fz101vHwgeK1W{{=Q-UCE3YSW%VOGXsmsESb{``neI~SKznU zPnlIRrTZLApT->yk*vXQ=3KV;bZ;hR?}IhP)4MQn_aE+F^yc`Z!7pWU2?BYV$Bllt zvCqHv&~M&Z_LS!<9$8AK_y-rf;xhk#ea5s=_;xnKI|c9B{(Hu>=!|Kz&Yn8IWHx3* zL+^x#PUlS;e4K3}0U{&wsnx9E#rhxeKoj@$ZrqsyHsO^Wu-C5bf;?`!w;sv#JCbu>=7jA0sGo>=4 z<#pK4>0+IB(cC?4N~dVbpXWg#evib1HE8=EIPLd~+20B33`*|0U#_F}a|*44W=Nmd zzWMVMbfc_8>u8=oPdUQoLBp%pleQ^AyZ<~kSnK^-8}y=ymjCA|-E7UBqj?UuDHtHt zTN{j+R?(C{Z}p$1U<~3Y6%N+6;ckIx_?*e~!jL0k@eUdF{K4B+w?Ze~H`?k1d3L_S zMmkYmyNsHCd>`B5Il4|g^c8EHGFh;5Ont!|}lX`ySE6|_ypV4k+QrurEf)7c`eDPLa? z)2LiqBieG1zbZJiNL!lOHq^2XHnG%kv~^CivHIFoU-3i}zp%#oin$5>trxdFTHBU@ zXR-K^P4u<4zK*atg8d^`Q<8Qf#P-@69CozD`g)223baJrTIL6$WPd72OhxH$ zBaHE;Qj?w1F;dS|Dc_bi(5^*B#)VADIMh#XrTy~n>Xq|Jql|O?9C4kvveuu}d)B|N z7gL8eVFdoFjry1On`$!LZ(oyXF#R5i=6efinRY_Y*4mpfnYL5cJ(^`NvS0_34i9!3 zY+TuqTk48wA<^7lB6nSzJI8i!kURD7bN__gSvGflCwDgLiN)J%C*!Cho4t*`2B)K7 z_wS%7nCny4WWPLUQwB?ouECNT{v4>XS(|H@HL*3?0f#+BcEjLAg`G)i>Z-3Wq?N&` zF*t$j@1Wt5d!)Vw2gZ|a3RY6e`?Ho`kCxZ77dXxStmQ*&%Lm!=aDSuUy}=svi>?9k zNb7<%*xw1(;MC|EoNjafmuqkz)*u+J=06&)k01*s-j(Kcw5w!~59lfxI!1?1LLxQ( zPX_Tb|F%r@ft>ZKmu1hH?W&ipEsBn^*WD_TQlMr`S1%x%a}RO`dstg-im9IGPb&Qq zS!>z83MR^JY1hXd?f#@!es*)$wLOg^e&fI@DhpncuT(_QlX#Tm&fJL$8HCAL?S#v{tW9Gjr^FNpu zH(FmORMg6?3_R4W@4l=pweHXMYmLSYvT>{98!|U$-B;`1we7#t{2i9SEl8(DIbqR?^hL;s7@4z}NPtwEo z;l==G;Tf@d`wpzRkIN$I!7WyrKVg$qhx@g}w~3_l7$J+KkG4|t2S3Asb{Eb;T)n*q z)?u$ny1fmKzlLD`@OK=dgZqIrJzPIY?-(>fbl85;y&~y-B6>hXkB#VY5$)ebYAJH2k`oV~PD59T@=;tH)orwN>M1K|0`yx7c zFp{oc4Seh-i>!Z6MDy8-ZaSZ@=;}5R&1cNJ>ES%7QhqpxsA%4n(?msnPyeE;?_M>mMncVHcsFX`d&Uvzl< z7u`OnL3DUL6@64By;nr{i|9cSJv5?6Ms#?*mHNWtt?2OhDmpyAik=@S@9c;^FQPAY zbbtWPLC*70xExs54FV)R>~GOIk@T=kNzaX>n}`m#kHjAyNiT@#t`XfmqQmVcGwqR{Sp0OL_ZSIk4E$p z5&cd?|0AOJMD#}y{aHkZ=TBLmeUbF`@%vI;M2F{N z(c$@5G@olMi|G7_ZWYnt`C8(`XE2K9^GV(EI!AQ(h(0Q!!}GP27oLwrFOS4u646&g zba=j%{5M3>D^W_elJni2f*| zzl!K@Bl_ov{xzb*^SRVtJ2*dzt{2ha`CHQSBk8Ron$KQ!$4hvAm;B-RTr}s#vGJDp ziXWRrj^_u~;rUt8>ji~`XJ#p{X{5XZ>##gYuN9ORo(ZJ9W|8s^ti$poJuFXj*j~}$ z`A2lP7Qyc`{1#>4mul5pbYLCUC+Xq&Pjqc)peNHcongfDG@DNP7;f!}=xt;GhuEog%ttM2F{NiSH9h zA0E-8BYJE^kB{h6BYHwaPl@Q$9UUMb13wC@zI_g?!|^KVVII-p_7@#)577ldrJ}n= zbl88A9`>K;uzy5{{UbW;AJJj|hz|Ql^!!Nu=S1`c5q(iaFOBH%`culk%t;Rrkbz%9 zg?-1A1M9HAB|Xd|I_z)JhX$314zDjoca5Zn{VnNXe~S*stLU+j{9%7fdf4Bh!~PaM zDUv_zZ%GgPTXfjpqQm|c9rm~Au)jrL>C_h>AOlZ`4*QZR2i9T#OL};`6dfL)Mdt*S zhz^g>{%?$e)C{k6r2YfzuzpDok3XVY1tp3Ox3}o_k@WC*CFz|b>EU>g^rM{g009|Z zD$@P~>#+Tjo*xtzDLik@S8MJt(4wM)b&t4v#0PAcc_OwT-Obfpxfk zl3oy$B0AjPM2Gz=I^5qxhx=RGpd@KeyGVNuti$$5dU!q;9iCrBhx>r&+@My`;dpBo zq)2-@MA~y;9kxf(!~I2cxW9-F+avnWpjOcdM+XSV@Q#SI=fFB_kEDnDv*=bqp`yd{ zm*{Z+5*_YOqQmWfL{JhT!%IincVHd1Ptr4kQqsYX-ucN<%%6cbNJRMs9{YxAd=3%Q zxy86W`71(d?(6i}=hR2zm4Cc)q#l6RG5E9TBfyjJXX_gWo`*kvlEwHEyz=;L_37Zt z@y9X7^f`FF+0o~N@5Udm44J+Rug~C*ZKPg>*FE^lSA9KR`Tp0IR|(Dcw^p;P1T@Du z^KZv%M@R33=DZMiu$7%we*>=*ob>mh=Rw=@KZh=dw(Iu;^p%eO1NvrY zK8%3najw;e@W(Mu-3a^){_OTR1YCtb+nyAd@87IOwqVH!W`Pzf!|M{H5i-2+$RavC za*7U*G@`>JspzBq@fhxp^8H&l-sJnSFg?qUAJ5GGk}bN1)pdLwp6?Fwb$EW3&-2{( zbKKX%^5y+mxIfDKtFSzIzr(R2i@e`xW2IjIa}3HN*V~s_sn@qx23oEU!t&*O9rlu( z|3(M#a{lQPXgOZH$49PDB1o6xRY9QT_z?DQbpJor@2@FAyy!O_oyJ({6zFWP2Xwg9 z_xeDG$B+8nanNT60S&w&=w6OK33_;-b3D$$c(S88cVyU~Io=%Txla1I(C+*7B}~Vk zEIHn#;7-B#$nma*e$gi5D8qfn{k&)c^gB-az0mIGL)^FA&xdwG-|ECa5AA+l!a021 z&tsV8ejf8NwEOuHzuRy>&*1#N?&lf&ZetHTS#rEO&^%Vi(#&fN&10u5E$|Q$cg~^u zUJ5$jCS$y^Z^H9)eUJM_SYCaP-(7^`v%WVRIvh`jc$^Edc~D+`k8_-auTnVcvSAhx_+o-rdlho&4LO!=qAt zZzuFoPWlVby&U}pbU#PG4?W1ypFz8rRCTRZ=UI}!# zWP3BA!}ZDb=0k_=&-TuTc8|a1&|&%6-X+jug95X?tDwWFA-* zGaNkzI@~`Scqc=LOOAIsbl4v`-fU?1{C6&NxV>|{#n86~1>|@uq1QQjHMDzty#d-i zepN!>Oa`L5JTz=Xf)i?&O~jy~oiPLWfIJk8@jx`%_bo^IL~YGY`{f zIODOI$9b;9@zczo-61@`H1l>;%iqHLYqj_m-kZ>2d<*Y==h^v2JRtV61r26eu&o|Iy`110&^ih92(dqpQWY^@c+C3ewwp$5%^l=S_qT z&mZl)>CoZ$YUj;|4*Rd2cVV^s9lXn+^Mmp`c-K@*Kf+rN-6}{w!n+&VIQl{8aJ(Ji zJzgz;Pwyq@9zlFh@4ag2M|e(Bb&3>G2l}b%WaidwToR~>yh^f|#bL{IN#=vBcntfzN3^x$9{_w;r^hhwg% z_cHW0Cw&j}&yM~MS{@F^73}HNtPSb3zX>$Qge*Nh106h^67k)jyF2NFp!+%cMCg+p zeLD06N1qEl&(W7aFLv~e&{sJ6F6f&a{TTF}j(!RHQAfWI{fX1x-$3&{nO&b4w(YHs zZU`NIACB=4&G%q7J`Me}qkBWY;pkD&Yn<&@0{xSdekOGI{c=xl5%i%>{3_`1eyyI~ zEzl#J^n0OCcJ$-WQyu*>^g>6!553&c-#~}oKlk+b^e^M2H-zr&=$6n=I64ho>FD0j zTO2(Kda5&COQ82U>1RUoJ&o*uXLMI&kICO!dUxq%;(eFc-Iri&Uf^c&__7>R%l)`+WhxH4{`KP=#w1%D)cl*e+YfP zqkn|H+|gOM7{j!5LHW(0A9QqE=w}_>6Z&tCJ`Q@Hqxt;H45z>Ou;W7<%?A(`IQnwv zIgYM?9_#3Pp?S?EOHc0!=zAPp1-;DCA3$H{=pUdjb#x}a7`WWg&7fB~x()PdNB4mK z(9uJn!)vad-bv6qo%CtY&pG;h=ocJ)88ola?E2gc{feXSfqvD|k3+xi=vScMa`ay4 zcO3maba>6z(~INcdXJOd6q?s?w*FLj@eM1}>jE8YPEc>?!+4G0FFn1{&`07NVs&Y? z{8`?a(AdRv$@0#J?&{>fERwzk`X5ev)%>%STLh9JJs+YWuTQ~tBi;pcI6yjP$*2Jv;gzd`qM z^d9K3j{XdKnxnskzR1zPKwstP8u&11y`yVGKj`Qj=w}_B3mtxbP{&I^f90ef4($ck zOLe>gXny}COC7H#bQ?$afj-93L!iUY&+B-jp~KHN>UiU!7dr71p!xllE&p_AekO1A zZ0JWFeGc@ij=l)`Ge=(x?K#`;O6c(OqB`Dn(Bbu09q(3X_x}A&(C+rX5Be)-|JVr~ zE@|%-=x~2cd+$Lva>m0x=rGGc-mehnJLBmfd@=Y$P+*~#3;nL6Q_%l(bZ6+s!TJ_@ zy`jU;qYAy@&=&{s4ZQKttDXAJfaZ5JvJ`p?pwD#lGU&CAUIYEOqi=)ecNjMRz0lV> z>-z-sjgGE@t{-fVLhpU(+nn@op^tRZ`R4u}C%qx`c1L4opK70Hc7(pqS-)eUCp+a0 zgTBv$pq5C@R ze-)aaxyn-L?SUTQPGyj4f=jaT4aX!h>b)ZKF+at$o4E?(^URy(lOJlDP zIy^r#_Kt;q$?3n5k@ORxgW|Ap%AntM;^#x(4e>3k^=+B+}TcEc) z`5%Wq-pT(8bohBr3-3MX47`VwrKh(K`aLKA@6abW`Rn7up*A)g-+vtpeW;Va19UvN zUM%#EgdXqY9}0bXkpB?xL}j3?^lmAHQ z%-{f5=naN$>F5)n!|j{&CPFW8%9{s0%!ywNeYVq{tDuhx+SA&*1$vc}|32tBPW~Ox z=Q;UbhQ83zd!WPfdCL15`gW&04yLtEdG(+#a`GPreTkzxLH7yT*Va24`U$7J;n4gH zR+d8VWa!JB{L`Vs>w$LOInZx8`By@R*YkzmTIlPX{F|T?ws^0Dw+;GhC;v0h_}Q>7 zh2HDXH#zw~hUR;CS$cXuLl;VZ z2YS7ugRTK&ct^St`q+r>?Im^N@|c=~PwKmd8{7Y!y{~ExksMqpjIS1-<;{r1pQn1f zAD``AV>QlU3Eb6lcO?EX)hs`O`@LRK&3!TlcM*M}`eI)<@Ujj8VBvRyIry)&YI=C9 z<`t@z^=a(&Qq6M!e;qMgwUpn?o1_}U3h6DpMXGts&B5{ZI@PE9`VjAK)ja0q;CQ!F zHIGR-xF7i))lz=a`(E`?emcH?&@YR)kLTci(AKKCkLKY1$)i+rwR607-e}d_hjOt0 zOjON%AP3|Bz|Z;XIJ8r~*Kue^%w4T79n%&HEEHPkY@v&Vt`@pk=x(8hg>z{ehZmWXhZ!zpyRKk z4{WCoTt$MvhQ1>WfDgxFs~(tH%6<%aQHf^xeA<#q|m?GlvRrP!9+ z#orDrw~KBGfR-!qSU>FySK*rXon6xbdskRI#P2Ozl$q{I09%;E`U zlc&z0J$L#nt|DHzet7Z6GG4jaDA{DZa(qx~Fh@yPkjD7q0zsWwRG6w+I%|oYSyY&+ z)ppUwbhTPvyK3$(wv}2}7i~~iyAtdo)ZImE>B>C;x~uh>FRYdAXR2K-zsWQ-p@(Mg z!Qliy?H>w!(1xY`-I|WS2m7FHN&EY+@7P`}wB`6CoJszU=7ViRp$2!?8oJxeb{nKS z+m7xOfOboFEu@Dg^w2VT*uvAc0sb+A^>)_Q_OR7-Vo2CU*7mnsX#2-W=I^3Co3@)S z-KBaT2UXf_lC~Qq-L-mELFd}7owmau?QamLcH70>?D}-G&FH3Gk?v+YryGNvyw>j? zfNteUJ&Y6lCG{asqVo75IZE^!)=gHeZ3=SquCVmG4w9!9M}e_eZl+f^D0B z9QOlkWBg@;po!SIc=AhN#cE|LE5H?&ibe?{Tw&XJn^qm7g9AA%j-JzAkZ)SQ5Hw8nI_ z%5=2ObmwTlcaC83{-;GbdK^hm$>=LR=D(jNah%}Mu9X0DEm za{toNO^?)97}+QNv!ojz*$9P^^^FdN=-`Qt9sdO7l;1hh-sr&T9BFTK*!ZVLr@ZK( ziH@1*kco~M|5W0X*FDm{=pNlA(mwy9$jR@YcpdGZe_b6J)BeShn;toeb&ZTC|8(uf zM~*oD$=gkjZ11j-@zpJ|z5SEClixqryE@W7|IF{ENBXZ@q<#Kr-;Iy7uUn*j-6QSu zuNIvA{zZeUBkl8#+)jGhe@o>U{$-r2BMtB`F`RV&O2gHW9mKy{anmCkut%hW{3{eU zJ~F`k>lHUW(!O-3NDrm`i%KU)+P}1^W<)wE?O*Cti-@!`-6^si)BaUZwJeb>neG&A z>Ha7D$j%^_{BEKCB~vvc+A#mL?ndl)g!kVyREvmgl63T-pN<~&>`(D|;0r!U>(<8^nw0{P6#uwXRyD)lnmhSGRMmLXtZVft^ zse#~11cEIH1iL2?Tqj$1^nmHVzYZe(V_~S+nW17Ago;fL)qdMOa+EFb&j(?AWF-sy zvqP91X{Edkc6MKRJ8ah}+V}p|Mp#(2j`81#glTMMprQxd0{=s(fxlgX%p8W*GFKay`@M7V zk1#>z=vMJR847EzHXQt8N{|*k=@s|`ASgJpJ>|2fFmtswM$e7~{sAEjj+Etm?t)JR z{4rT={i_`k`~zHARJ9|7f3OQ$9N9!^|C%_=85u(b{*gGy9N9$jxmlPwGPDY!Z}$uQ z<9JY7q^`8T69lD2KN=|5e;c#DptMNkY5(FqEG;tl3jED%Ge-{rX@5TqGe-trfj=sO z%#otyL&Pw1WbhS4FPjSdff1AzsVnUt3c}JNqa+=DkC^s9m~=-<^i73)Bovw9(F{=*-Voy}AF7O{BCm_5Qy9efl@zlWqJEaL%{lldaFMx!b=bH-_={hFra=k8ET3 zeSe<%{&)Y-T>S6ezmqb_HlAhXUN2>mt-+*(p9J2L!|81^5B$I6Y&fq-t z$=2@&QqUk{fS^(4%zy% z!MS|E1QxRO=Y#XqCtLpM8TmNcs?k!Rd+4|Rk z^VBC>|0b|4hiv@~;9UKY7TNln!FlSFt$z>LmP5AwL*U%oq&;NoKMKxMpKSdnz_uK+ z^`8glu9I@e)_)0{r#{*GuYzqkWb6MOoLed7kgdN5oTon7`X7O9Ib`ea1Lv-na>&;I z9-OB>+4?_&Z8>D?*FX`uw@W!>>t}-V)F)fNHrSR!wmzS~o2xfbldXR+I8S}D_4C2D z9J2L0f^#?GA1q|+7l8BBCtIJtBems_t=|uvy9xhbAzObCI8S}D^@oCOIb`dP2j|{_ zf3T3Pe=0aneX{i@fNeQs>(2t`ZpJ@Y$kyj`4)W9|TmNjZEr)FVi@>>e;vXzz>n{c8 zsZX~4#b8?w+4|RlbML}GSjg7rp)gND?{|%hW2kKxUTmSFiJoU-e-vhSgkgdNDoXdt| zAzS}@aGv^P>;DY4<&dq!{_z`#PbK7S9Ir#{*GeD1IZ2hj_JoU-e_wU)$^C{W-{Jm-}Hy{?W^@oD<)F)e?&r`AO zAzQx|^5^W6^FG=7jlsFxfLO@ZZw}5=pKSfk;M}(*o^1W@j8~s*{YhY3FWLH?!0q3W za(Lcs|E_Q!#{VSkB-{9rj!(A!sg6&!{ty(G^MhVHfvrD*zV-vz`j0sAWa~fW#FMS> zj~^}H9Y1_ti7lUO;~SuD?YTo>$;Dsa_k`Pk+y6tD{nqz=;i2FT+)=QMcX*1!=Yjj~ zm6(O#1|JA-p#PyT&!HVY5`Kri@>k&Y`eTpoNbdKE#EiyEhfjrP;HB?p!n5gX`OE2l zF8(EWX|Mi+;C^3-&tpr6FNI&hOJ9xQChzc-`0Ngwm-}Wv{qa73)6;Vn&UCrm$=2NEn~8_#_qPkplWxsBTYAo1LGxj%+%W4OQM zsqgMPy#F*;f0$0T@m(3OKH2&M7|(+l7P9sIYhCr-Yu)yUY5z}&=Q`&860*(9Hs`5N zw*H}v|Chv*t)F1L`ef@L&iG#?o^1V&j8~s*{XUHUP2$Pc=X&L-A6>`X-zDB%M_$9{ zsZX}$OakZrA@OAEpU!yo$=092c>U2B+4{VO#}jGrZ}sbWj*WgX@oR%S@F8tj{C>^| z*_Pw?v-)m7Cy*z%ro@wNyaDH_PquzX#>=eY{%;Dc&+(I|zB`r%FrFtmEMyzcKFm{} zY<>1&ZkEK8tv{Oa>XWU{KFqBp@nq|>5A)O~TYom=vn8HveIDEM)F)ft?`M5jLv8pS z`0zU{^c&O__V>YqgxOc^d7#B|Fj;?i#{I~$zh5+vm`?CJG!*83-5^Jp+o*jbVV2*4 z581<#kH7X!gxQ9e{;-gFlMbhpIUbVDB%W;jM)dWeRb=bqr%PV4g~XGse>m9I)sZn; zKH0_;(9e~;Wb5~Ie6sbAp`R!5Wb2Ox+q%XwM(ZNmnDO*^;e&;2{Rv>}ldV6AJ|9eo zg>3zEz_zXnz_u>3jk$=vKA?ka{S}T+w*IB`wGYYGuK>pmlQyhljKeAA4fJ{8hJ|eX zyTR5cTYn4vmJ(04{!`#sLi}eL<8Vs(MfypJAzS}_C+~+&Ub2n(l)mOATmLt(tv80l zpRJc{WB6qR$gG7P9q6fMc!2 zFJg?tDdiLB8;K!X|5V2(Tc6i#$&|#Ctv?TJ>sr7VEuU;-&Zpl-@{+Az?)YTuub|&n z;>p&(5p3(?M=iE4vW=;vf4Jl&Tc2+otxvW--!diJNj%y5yTG=t-Hg%oBHNf3=<5%k z$<}|>@yXVIlYR%Oi)?*f(%HIrDVF2~7Z$RO;pLQVKiT@cbg(|z`aC7u^&(rJhhSS5 z52JPrkZlYPVaX%#4;HfZx%rd&AXu{X*?q}0{=q`F{;^tzY5zWb3b^uXT~FzYT2bdYCcVezJ{ujD9!#gN1DU=jeAApKSfV z((fTY+4^rdKH2(j)90IGEM)6{O#evn$=3gz{!!wSt^XbUqs1p%|0nv#h)=fuAM`nh zu#l~vfwz~*UgDFjU!Q(&@yXV2M8A*tWb5bA=U~J_w*F!C`-xAsej(Uyi*Ah3Z9%p% zN7C;vdCArvNPmF%Wa}SCU$+I>`bCaUw*Cq9xuakqTffxt$=07tpC4dgAzS}kuw9o6 z8Kdh$wlRz8caywi>t9ZPu=r%_uckjle6sbgr?2Zsw*JlZwQXeUZv)%5JgPqzMH^oNU2w!Wc1LVU9I52vqv zMYevLzV->(`d#Sj@qujpV;rAs{XX<{e{skCb+jtv{B&ZVR&Y$J5v2 z1KIkej!(A!Wcs?lldV6?@yXVoOMjHKhiv_2V7smP%-7Oe;+4?tvW9Nx~3u7EkDOb`zUt-AC-|YBg>)%8F0*NPE zewigqvG`=`e?xzX_+;zX z#B)Pp<>J=@Cml{H*QLKyV#wA%jCq%dpJa@~DdiOXD?N{PuKUn1O;e5r6Q`7+@I`Ep@AJ;IA!A>4(`H(OZv)R5Sf!oA6> zg$I(a5*|k8n=mXzxRi?AU-DqKK*O!ye` z4q?76i9IgNOQP5l!aRM(b_(;95PMRXhql-*VeXc(r-V5)V^0fnSj3(Y=4OcP7G@X3 zo)u=5vFC(eBtI|wHu(kNf0CKVh3^;sDx5`rN!XBI7Vb!XMYt!qN|^5xW3LLIM1D<} z@B3n}3(q0HA$%eEP2rW~w}h`D|4sNdG8>EKZt^?Ad|wuOSNM7I--WBl?+NpLQ|uqY ze6JLHU-&!n9%29e(O%&?xb};EAl!`np>UG?k?;}ZkA;sUe5 zkiQTHv(!h9xL>{sFLq+>OOuOi2VE6AC`yxxm(U}AZYTub;#a<=eGWPRW@pDP@zBmO7ky29U+ z4-)1Lnz4Gqb;kib$#P6?k$)`yFqPi`yz3i9E?Ysl?{ zZy~oAzLVTR_*pU!JXl^PA0hl2IN2%Wl=^QoCN2I4a13AgB{?w@ z7II4cEO4xg_zlQf&SB)P;R_n5^TQ;N&3j$@crQzcXgA_#csn2!BRCPWTt{P~nVh@GxP{6%iXQ+=M(r z_)zjlVa^#58ztO{JX*L1xk$JVd5rLJ8pN;caA{xQp{k#3qQpn_MdV3VEXN+vGCg56F{* zza&o<{*gRI_*e2&;ZFFXJ$AZqXK?b2kW=dSWXv@2`;m43Eh6i2fX|eSC1kr#1Sh9U zJlTHt$GIqCGsK@qo+-@dN7}Kyggi_9xwVln#+O`CFfy8hQ6uUpB$>)gQg?z3spTihCPk1ExeBm+V3xtcw7Ydh>7YffH zFA_eVoR)rAOfD2&22NfiF=YFB;H8XNEIywF99trM16ljzc5=D+caU|=JV0J5{zGJK z=PvRx@pqG#3%^QUA^av;+rO85vG^a8R|_!)&nPR5ua>7Uv12o zTg5+&e4B8RtnEyb*NJ~L`BZ6VZ*a0we6sxLwE&Q%e;!bS^R6s+7Gvp?-c)b@?FAP$Wx@=ZQ$hH;*;%X ziGN|tJ>u^s-z)qAS?hg^e4qI5lD7zdO1@wCOY&CXU&u40-rvE=2gE1a&-ZH9L(Deu z8;~CqZcNsC^U2%AZ$;L63&^^?jv+rJF@4C|h7shs(uN{%@?nV~+t2+@WXvPtmy!P> zJe90%IE(zK_)Exq(~M;~IQf|PWc&HvWsKP&{&nQXg>NEjnVZSF?H(dOAu-R8cM88o zK2Pd;3!HpXe6sy~?>)xs6904ZQ^H@9wXWaDT34O=V6CeKS?fxXpO(B`$vmc*Y${+sZH zH#e1P+oyF&G z2kiSG-nSX+E`B~)-#fG-4-&r(S+6bIlc$T{iLBRe{M|upuK2uX-d@8TMZQSG?A?5pebZMk4z)$d1Mw@ zkMncMdYnI-tjFQ=$a)-JNY-QH60#l}my`AQb_rRJZ@SacOxk44v#_4sfDS&t7D zWZjq7k#%3*K-PV5GgH4NBno`&`IIWB8Mm1iw_l zLN*%1dkYhIUON}E(HQ>pB5|^(%0vMla0oB7$=FxVQ>K(jcHClAvW2x6mCgB z8M4usw)9(xPc|CE&+QYf#U~q$Ig-8+pKLUSm-va4_++Co!|1mWpKLUShnPfL@ySMG zis>INKG|r@WcuyICmW5KMZdlHWTP<)=ywpGY&3?udZMHFWTP<`(?3FdveB5;^gD@9 zHX3t1{j~UGqcQ8~7l=n8zj1mPc|CEkN6Wk#3vh#;m7fbp5l{@#_*%_giaMeHX6f^xf4f8JlSYW z7EV8jqs1p1jcGuiH{)X=8;xl}U#A`*8;wcO@5N}m($|=F^m~g>Hob&-x=r*6*=Wqs z^!tiWHX75Pen0WaMq`H4?=L>tXv_)p2Z&EL8dFSvp!j5?F;nOd5}#}|=1ls7#U~q$ zSwMe?_++CoJe?>Oi%DjU@T;#F+8m%#)wZg8uJ$Yy!d3JF$d8;32m*H5*Mq_%=Kh3v2veB5{^h?Ai8;u!4e}edAqcQvr zE>S8z*=Wp3^e2i>HX1XLewp}WqcPLzPZFPOG-e+C$>NiZ##}&uiuh!sG0W&r6`yQ0 zhTr!kP8XkSH0E0RXNXTW8gmQ%Y2uTO#%!cNU3{|9m^?=r0kUY&2#N{c`ciMq@_OUn)M?XbkVcODq$gY&52X{&MljMq^H=ze0Sn(U{rv zFBYF{G-f`1{zw-K*=WpV^e>lqvbjw78v0j+Y&52V{wndwMq@V8zfyd%(U^PbuNI$d zH0B}tSBXzH8pC_`5^KaK8;yCM{?+1>jmEr6{~GbhMq~K>Z{k|<$wp&7pubjpveB3? z=wBy3*=P*EFHT%9KG|r@uk>#apKLUyW+wa_#U~q$;XQtdo5Uv@jp4m~iJQeI8;!}O zUm-r(XiSp+E#i}n##3vh#Sww%c_++Coyss~D zr}$)}F;~*ROMJ4?nCt1^Ek4<3%x(1V5ua={<_`MzicdBgvxWYB;**WW@H_g%7V*hO zWB7f2;(qbTMq^%}zg2v)(U{liKOjEYXbkTOOl%XMY&7O$`VWdvHX8Fa{q5qDjmG>$ z{~__oMq~b<|FHOEqcOZEF!6}^WTP<+>HkH1veB4a`j3iFHX754{$t{kjmEU6ze9Yo z(HP#7ka%2tveB5M=|3Sp*=WoF`a8uZ8;u!3|4H%5Mq|d&-z7fTXw0efpAw&JG-eY0 zr^P25jhR9J8S%+RW9HM}Ek4<3%mwtH6`yQ0W*PnG#3vh#;k?U<=fx)*jk$*Y3*wWF z##GRMQGBw|m<{y*Dn8k04CjSTyd*x^Xv~B3UlyNiG-e0=SHve9jd_ZGmH1?%F)z}8 zReZA1m^bLZCO+9{%s=SAEu8q=Nr z`{I+0#vDU`kN9MxF$3uD6`yQ0hWDH#J`kU5G-e$A55*@NjX90}N8*!>#!R9AvG`=8 zG1KVpiunm-qcKb9e%EE~Qj z<&cfWWYdp{Pc|CUkbVvE$wp&%pG<-`w_+h1jp;x?OMJ4?&q6tWc%qj0WTP?1($5y3 zY&2#d{o3M_jmC_iUq^hh(U>Co&x%hr8gmBy2I7;AejYoQenaueMq@ayaw123veB4w z`n=H?3)yJQW%L`1Pc|BJHT@>yla0pQOuwo4WTP<~=r;^o{srqcKVPDe=ihW7^SgBR<(^4DUxuv=yIhH0Egf zhl@`(8Z&@?JMqazV@A+#FFx65%sBcT#3vh#DWTs{e6rD)sq}fHIu^3gnA!9@iBC2f zb1wa~_++CoyvHd~AU@e>%%$`T#U~q$;rzIX=fx)*joC=QyZB_&P555=Jwi4b^AP=> z;**WWaDLmwk>Zn$#ym&=DDlZgV|Y(gf;Z`7AsdZ(hyF3*la0oFNdH*z$wp(oq~A+? zveB3y>Gu|&Y&7N%`hCPF8;#+;Rf)dhla0nSq~A|`veB4a`u)Wx8;wcQA0R&2XiPi$ z1H~sBjp~n87oTi2<}CUzi%&Khb2RrJe4HX6fw;^e-2mY&3@7At$a7 zpKLUy4gFQ(la0o7qJO3MWTP>i>AxyI*=WpA`qzk0HdhOer2ksTMq`>|+{9iN|6p<^ zN0R5|<1dM87cTkuOR3)(Y~#C=vEOnz3V+FZKKh(ee#djL~==7Gw1!hC?}dNXRMmKVgiV)o%B**WBt`Za5W z@wLcZC8jPoIW**y`uR?LEAnuOX~Xz2A*a;mZO67fy~txFrXSW_2cPbN>0 zn9~?PBjl9&yyeK2&)bY*vm}PM7A4OLIi>y;PW)Bm1rl>DUdK5Lreg|Oyw061 zuTw0|EjxRz*KuOW+!C+jggJA(j~id8~Oh%Yu{-z=al_o}5Oyk$$;Go!&Gi4WAgrdW&!4r&R*2~!N~X`6 z_8&BDWJ&26C6f;nD6>d}{enJ0*No^l`T)&D!kDSk%SOzbJG5-ZWDJPUooje6waKCj$Wn9k_rp}l+^Q;4>4=bBKr>L~# zfE|GBL2~hgk^^o(#1x$|byktziNog|Xv-jEz|7gDT<2Ny{-l{sK=HJxGtM}0V~5Y2 zJ-uYwe_4)BVsYU9_|vV3W)7M?Z05wWX*$I1*mLG3={S2PhZXmsbVp3H;`g{6o2A%? z$|lU4TwF3?!tAp7)lxa7OEp7gYPLC0p4YK-=Je@hGtfaZX3j0^IB@v!9WdE*sqG4_ z1v5ccD`yh+20Bycl+N#1G8Z#QPnb8iY>vPG|0n63M;x8@nFXJ*q z?iVLV92{?uUh6-IOCu&)uU^*pHQ0LFL)FAzFW<%MZJx(#sXq9l&p%u~dPDH%mdA9v zPC(C=H!Tu32>L+vPKNK+JI<*$OVd~{FHPKf$3l%|dy+mSa14`DfST zUa(uThA zv_X0Pbs98^@t1tSNM*jT3@*HEaqFFhxQqQ1`N!7FkDc9mzd*fLz~g!}&@}e5L1Aur zzo5LHwh*LS{c#XmGa-8z`@q$}kXAG7DjRSsc;g+}VuCQMkJLU1R!Y!{4 z%Hw`u7u!C*t#jjsAdcnO#m3D?kX!E~sF(e~^=O7arcvJ%DeqL2mkZx6w!F2G@}6r2=reGGA-=V4hx@uo>k|LB>ANhvCnbmqMId-nA(2O3lL; zB>PJO;Fi}IJE|?OB_eEj$3@CJ9E0FM+jl^uyz}l0w{OxZkGIUb?c;Y`>}R_m*~XR+B5eCEkCb-~${Vd^@WqzLdt}}9t#HaqIpuAQl*jLq`W&D9_Pyh@uY*%w6C8Kk z_6;e|19R=Qn#Py4HfkN zwRQ2;sm2?JxLLhCuP=PwkIV9SzQ(W&t_^_RGfQyaoqnD~ZOh}(K(=7{qDIWy=NL9_ z%Ix_aOFPb-aQYGX{({LuyZ68Zv7Ni*=XdfQ`4^L@ckS9WKOd8JcP;45gwtwY*njAN zSj?8hy1xtRXT_i3gAP{N*>6P~ua%eddR^x=IDEzGn*C2&y`tZMaq z|7#HS@j}n*KVW!ysFD>m2PJRC-#YwVU31WoavRquzI(i76S(oRM)CgF4_RYV;{Efl z>$TRawP{I7+bQ4)vLjy?)=lPb9lk9-sBbc{b$GHB`J8^pJ$zgF!~KzS__qEB z4@e%4wD#cRcMe3p;oDxjdmzeMh`b|{iTKE5tN2KiSs(dEHp*OBBiUxxNYprT+oVay zu3kE6QnLMPBaJU)7L{2z5tK3=`rD1WqFvv~iCYuWMV zU?dIdRIczAR}LOoI(DlUk0;k{^tM)1Wq+Jsbn)x?RkfeW zFIuuSKYm7|_;J@4uGr{h^j}e{^{$M{!Cvy#-Ck+KT{VkZROV+@u81wG+#Tx{_q;4T zN~maFxtCG7dr)fgMz83HvRLY_jb5XRcMlr1Yjk;0ylqR{FM~G>4@OI@f1fj6Ieo(E z-%hQu;L5p)xovJ*h6ik*l%Z8WlzXX)?Oux)wz2&6aj$BA{H3BFpK4GPf1o0^E8hRM znj33jJw~>E%|@U#)uKv1&FH_eR?8p!ves|+j(%))&0d++Tk~7v4}Y$zS()FceDFzC z<>OlxWe#aswX{djTC`^jzPI03v}Sun`EmHwU1j#z><`fwV@nT;&*f{K+<0tR>lL2g z4+j0PW>>{2k0^Y_-wrw)L}P&#d5@1u;z?s5s<>Xs*_~CD;9$Ytylf;#)T* zaa(0_-GUQVY>4+y#y8eVuFv+?`~~eee!<#0jp8*jT4#HQd>XG{%jz7ue_OI&__I>O zeHrU<9Jc3>c)Y4fms>u#v8d^qiitP9d}(si#v!XdM86KHif^r0^J!Jw+gG)wvH}rT zuk#~bmelgfirtSR?l`7azL4C!aR|2mkiS$cu3T|kolQ+RQjSaAx_xNI`t0Kl^2<$b z&K{DyD|<+thD~Fs^&5xS@l^C9w)6Z+4O8pZ4k?;{TnUKZn(HDco1<)fF{v0ap1nP1)6Qob(6UMtE(YyY+;&ey{78+w(#b5%yW zrE6<8%3Ru%-lnB*n*kN=mTj+@m0H%c>PM4ZbXF?6@ag`s^7tJeevtoL)4o4`blNw+ z`+LFs*P9p3t87p-e|_`C7ze4u?piB$$NF=ecB#NC>TA6rt1^2SxXCW;+1|cYyZy0; zwWylczeOCePhk(v9#&+Y%4f`?UCCRs$EP4 zJ|0_g5RQ*^OP}18iN4I-k>0X&yO&k@RMS=Q)VlRe_paUbd+OG;gVJB}cu}WLJcjbU zZQOd5s1@U4#jeGbyT`6v!qT&k|E)f`Icgr$R*9mp*Y~47yDSNEnS7`qa8}2CI zUNg0BO;gs37OdMosQ+tr9TDW@E*~o8P(& zBWB!+j~1^-y$hShs;(}(rP0$(z10JnddFWL`#j_J!LgMESv6M2n|VDpbi;LIR_iRU z=$cAD?=5@Kve?QkO|T7;o3`VKx%&jrUE9YdH)M}{zap!0@QLN|WtA&VMCw=`|5BSa zj`NRwn>UW@zoFr0*gs$mDl_J!YWlj;4|WcAi2UQyEr zD!#dN_iz4MV#F^qgEM``4;iqnYZd*tt3ls+ubo!(&x9QP;+4>cue7+rH>4#lj3di%Rd2iIJ`r&@|$vCEQoTXZA%q*I}rWVIF z`?I`%!>1PExS3t6sQjw@jP<)mZRxthYn1iFAC0;-^WM7jhfBFWrI*JW1T|G=$ExOM z`sbP|oNFHca&hb3nLLLK+i?D~IF5OCv=ueoT2XpXW=`7y+c^FzGrf%4vzr!9dcH=Z z%ttyV=J#7yXp=QqfNz zHLtqn!-}fLPgi_+dC^%PdhN=7>i%1kN3UMF?S~qr%QG8P{gC-m6^@E6Z)K}iz80^^ z)-=k@^zMj1Q1g=BNwYmOKH#?a?po~M)Q0U|olD{wb#C;TYiduxDp( zhrNepel+;8jLH>bv+x6#l})?&R~H=L82cE(uUC}$XI6~dv2SgtnwR+!M(@ZXwzJ9B zibdF`vPbd!QH67GQTf*VwT~CYpUPi`n(Wr~*JC}(%fjeuvaJGRsliT+pLQQ^?ViHe zku`e%VT|dfE6N%zjh|V^v~CmYzq-6_!_`Z(vl?aX$X~|Ewhfav?`}K_HI@6Lw!HtH4|n5e`%GG488=c&&K~H~O!-rwX;KUb-UIu6%usdX;Q1 zsAj5t>$q}_%CU$OU!%zL;8XTOMJ*_a@89$IyEWyRiAnRnUJs+xAW<(o@y ze1fHPlE#IB7I_r}Ljp|p_Zj`it?n!qT0UHSzjQ z>Db4-`<9=xwBzM1Hk2O!0J!7Qbj4juN_Rf!J+);0^1H4seZDGlapmBq<@Hux#eHh` zu+rCF^S0FZ!i)DkzuA`fSKdFHt$g^y*vbv{upL$mT8yiS(zh$U!rFiD&3(7%$9nkN z)%=!3f|QmXX~bgwZHI6M?L!u)^JE+d}!~r{rx`1d2mZ*C9Z_)<2vefj zN6X`TORyJJd{n-EVd>8MV_z+N^h$GW{Gg?m?%i4buNDiBnml#Y5Rv*Xgz zo&95@m$I&mCa7!KZN2Wu`uNd1wtf8Q>bgJv(QeseHI7-jX-R4EL*7YEKEBzk*}{mW zKOy4BM}KRwchA#O(J@iY%ilvt{ivRWp*LAhGEc%Xep%dl$uDc3$XHVo?Y^y7J8k#jOH2DU@iPAhd+#1!MRo4~&(0#b@%)>>=P zQjf<{Ypu6hYpu0t6~CX)TI-p4<^e=|{Qmy{YItu<@bT(Soxx+Q8q z@Ak89y!idWU+nSzkayl0n15UUr4QWPW8U_>C!SoheOS$TBcpk1^PhNd&7EtX{O6B~ z<_-Ssb*EqR~BxLeaEo(FJ5u+lNe)u z`0jV2171CD^2#^9{CH}F!4doH8O-(UBM0u)Gw+5=zxa4|@Lt%;8{(~8I{n+x@be~o ze&bgM{$pr#-jRd<@cxjR{B6uWF2M6? z`S#aY@^G?@3kUA=0X{*xuS{~6DibY{ln;$M;Uh$SXa-AnpTTE$my{P>IziGtinay7 zGQ1q@KG5TLrR_4AXrYAdQQBp(j&fNTx^7o`7t8Pxv-@Bfe>n>DarG|ptqj>RubMq+ zyL>@(Z4X(7-##%OGYS`N>UD9_2o9{Snq5*SU?|U3qL= zCTfx{q@<1N5q*ABulSIYCL6oETDEa^m;31Z0oD*7{cW!73pd@k5qDqw$FhyzeJN7o z!=4uVDC33A!**NCHvU74n$%t@EPdojN}2YPg+GaPrV3y)v>W+x8EwDY=(7(#^x{6+w|VZm46@|TXCQm(w^&!aUK@+F_^ivO*>d!V20UA+M&6G~ zsh)6(Y)2;gk3_1Tpxo9ZU{`LsJhrrUYd$W2SgqN0rF!JQ1DWW!WLsmI%IPD7*kXO$ zP2N+y%^wZ$ZZd*=bV_a4hb@+g;_i}KCKK@qWB1veuR?ZF?0>T#$Imopq6R5IO2(H= z(tR`4*W(!Fro(N4Q``6vL7j`IZre3Ec`>y9=>Y_y|KwZ^{ zr*@xADdJg>n(gdbeiG|L1t+t;6nql7XCigb-h;I3!`St)u6Wty?YQ`H+2)st;=6o% zly=!vH&$o8dx(oW*&gEJiO(M5;;Rid&en}hR~u}T&`i6%NNBVDu*1>rs_3KF)^2NI z7sdEEMUH!+-E>teyOwqVZ2vBA(`w%?ld6~04r)`9D?)q9BZ*AqVHdOYwkOtI!Nz{v zymeQxd0Do3r#9*%g3ZIOC?0Xux%VFBhvsQY8c!MQLbg^c>)J4S zmnUe5iBG6>{GQf}*!WWLM~ICNJ6JC6FaH~D*NMF1BaBV^knWs~)}I;gQ2Ehm>#Ik^ zxN|n~q+a!ulvDvq#Ow)=iaAwDE2Ga$2Xzk&JLenmq|`whq(Hxv(Ajg7MX4l67y z#Pf2MnQXr)g$EbzS8~+AG8jGbkw)XFfl-v-KjK%x5PUh8PazM)5{3B)0pKUgvi*)4 zNSK6$dnrU}Zx>p~-0&+6aatim`^4D*`l>W6*DsUdYWwel)gFZ8qIms)0W5rB;bD-) zmDsrAf~mv4HmxMticgi`0r>nVZ)ma|gGOem2Oc+cLE#C7pTTm2kvgmzYZyYGSxCyz zFP@W$XyLEPcbRzszT!QK z?!X%I`epnNQ|yJz^7?0n^CVC%z0NuOu@y-$jnZ zL+g2^nVUWFg$j8iGn+l#LK>af%%5{c72*H9{WHUQCo~~5!V@&;ZGf73(W)4wQmpN3?#LQue4$6E=(WJ~&MN=||_vSAN zV~@x?8oefL+A;2DSMa;lDDJEt&UgA){(5VOna#Ik2mR@yBxcSa_qX;@caJ>2=Q>0j z=W}!wcf8N>Y&OgSpW{aA6Bf95=byN}FPC*|{p`$40t;t(xSdNZnxj%0I(kI?E{5Iz zoA_sZRK%Y!<0sqXM1I}?QqR5mu@oUF(U16g7?G#8Wq>dB@3DMdF>;R=Ebzf&^HwLD zxJGT_T2*PM`b~73vd&kU)2I6tG0(g+1|=1E=CCBsvqmKT*=14DDQ<7U0!O+=>(1Lh zNuQwBe}G@V%e!2yze26QQf=sge*G@KO0B=zuiyE(vZP!!V-sCFKGAjMiJn-M=!5w4 zyP-KJ@dy$0jhsGwVG=WKaiXU; zCAxlDqK{}x^o$PQ$ZdJ|JJS{5r%|FGP?h|kuVfeVkgDXLsYZTSHS&M?N_K^OL^bly z%aQ^->MPmB{K8kV(~tQ|cKVmTlAYe7D)~uO$xo?D{>{`R|E;Q$f9osR<@2f2S&W+u|hu=Ts&CVVSSYo_Vh%75J*EOuTcd54%OwBkx@oF~0!a z{9kem>5<1D{*9t9)BU?&&gr-O#__c;dH-13moaW5-o}g4lKr*6)^6AD@5|GaHzX7brTn9uU(D*^C$qr)`)Nktknca4 zPcvwcJoKDt%Nv|oGL>mVI>MR>nN#SWPG`sk+Ha?S1)ZT4?hp;JLd01jE)T-}q7Uy)`>idWo}m2=~_9OzF3r#pAfQ zW@Jh?JBxD%ZylK_{V!*62H~wEGNsQri_?e^Va-zFQH3n>$k-iK=*oPZREqnlkj$}# z>=c>383y1QL^Gkx`JZ+{Ue9*f`oDI`tmP^~Wlzh|+^I zT+;i4ls{1E0ZR8*@%@x8R587k-%I&Dm0zIze5HFRomDzd>BwnccON7bwj+`6C-Ps3 ze3zT*7kej>+Y|YABL8t81_B@ZR+7V;iTqn4-$>+N6Zv`~|B}c*C-T+Z%cvjI+~}B% zeBWK4W#K~KU7uys`@ZWF%D{YkH<$DJY^6W1^qDTBkZXg^wIR#?;&W|qOYBbjHJt1g z_PRysCbhPuN;j&Q#ZKdwaq!9fp;y?hKlDnr>kqxSExrVQ=*5lSoi0Nf-p=mgz5bKZ zFS%vC|FY7rs+d13|23swSNg9?zoGQslz!gj8S3_~d~QJ4vb*w=ExXI@)P8HyI@#i% zmJ@MWmu-DIzH(KBJPI3 z>&*BsKAD6240Ty=gW<$0BHn_S@B#jDS@*`-mlH!oj22NTVu}d9>Ba@m6|qRfauKUV zoFn2A5gSBo6mh$Vdqq4dVylSfMew~XZtdGeWO0mfPCpSPB6z~#k`5FxMZ^&zctYS} zJ}aU{#OFkuF5(L!E)#K$h)p7X2oa6@1^>k-GqcZNSM^WBaN-3Cd_%;0B6{`-W#L;p z4%i3($R~42wrFssxf0gk%n4K6SJMplwR|qV%A-a2*KNmg5vxUY9B7fO77DDlfM+=6dG?9ZQxb>V$P3==U{M3sm` zM9dU1U&LY&Z6ek}L_?PhVkz_qLF}xRr0YfOH8=#17ICPEc|o`k5qU!~U|JLj5zqI{lFR{B+-Li`!fNp5^f2Je#!ztvL@?mj&kj2m2h8FR@ja${LZ zs}xd%FHS)ZR~#NtOL@R>|AZuWC@$S)lHUlosM{*{PeISvP#e5gfpb}4@7nW|!F|(5 zs=<9{p&$ol+)b2>PdzZt-@5=ZH{b#I!Yecc%hTw}BdHnp5OiipUvA2QnUh?o&>}_Q z=rPP?TILdly29;rw5~N}u61SR694b>|3wWfZEI{lxomZFXBXasfM1}jtg5Uo8$YYH zeQnt^{AzyLyp=88YZ^P7D~_FhTv>Hx4brDoRUNc{R9Sgo{GWdf!GWs}s;X(IYN$SN zUdN|%4Tra#yt1>kd)bNuXU;u-q5Cb&=!hu`SG2abHgq+eval=Uyl^Rgw|*g=mF`FO z7cRl?%Qv06uyN_i&gKA7D}GzPrEO(ncf_|kG&VJMbhoZu&CBz?%k|yQ8jU zoe@^k&~<88)Q$HPAiIX8Sgv_($I6DL>Zl99_21x&>iib|u)hR3=xpu4>lA!qYiCz? z!?MnXwv}s~F>hw)JY>ujpa@ZCb7NZr*V2HZHFvIVY>Qf(cJ^4>C97Icww0aT+=}Xn z4c$>g!{Kx19)3c@yrWJ$qGA3CbB<_eaNE_i)P1$Jwlp(q2Ur^0+r&+4Xld-~W`UdA z8<(J*Ep3e_M;#p}yETMwAB)1yoqJTYq@$%FSG85JPkEIr?IPRhO5u0qq*^vhNkB3=B0c)M#R?!umb&eE^28-)wmc| zX-9KYC<&Izd3$NJVkKibS1xfS?Xrdo!+RI>s&qaLaavp%DCQijp*}9w%(?Y^Z^w$b zvD^GxDL&_4K+%8~RG`kf+-oKp*7)~Kusu+!rM~Ibw6?oCP8`;718r7kV$)fHw@oyx z@b3#j)()4np3=N=~xl5+>LGQ zomfW#Z5r@Si0;;IaOMLImvRNgl{eaS;3XstZoI*c7-1Y= zxdQL+=|cCxc!Z_qN+6eNY-))*+pu#+3-H&gbD{x_2 z&=g_W=9UI_;l`*j7j;Hm(cuwCyIi!UDq2$=t;unXGqEcsLu5U>#L`urVOTz;IqF)` z;P-~ez19RJUe(^+fa5|dR>2pYcqdwgo^x`0b5q&UWsRNDD)gmEI3ggoPPQ_O!H&_u zARJ+2EW=xFqLVuto3I|ApeofZ+}zl7s_#;A=yUxm-kTj^EulC0&ZkB+XSlb;aBspG z+ttvt67OrlmP>@eF$O{ckLxOe&X#;@kaYYB@P;{3u91>Fk?V$ za!l=TNi=b&M6>dM=ntOpeBu~)j7^&j7|HxGvjzPt9C(?t>u6yZ2Z^?3znDvFYHh&;CuHt`Id`^y8Qs? zls7PMipNFTfs;CM^K)M!?t?o|1y|sJwW@=KZfb66T-ApD4o5bE=Lca-4_{nwIBRf) zk~0X*MN|@JKtNVBzSv*z)!mFEC0&^(xwhj-x6|Ok4PXKeR}FL2&P$IKj_Q>&AzEk$ zOizlL8ecFN+MMG+H%r#h%xbB7xt<#* z{lSu_YtafE30oT0hVN6uH%?^QF?3)l-(3Q+S~>A_{mM<;lNpCwxf_n+2&@tPF*T#$ zrZhG!U)9x(-bnBRwVaVO^5ET$ljM`tNtY`!dIJXqce>yV%qf}@;>?5va!J^t82o_& z0}xNGPW4~w{AmO`NEH3s=jHd|@>DkBTOc!;fA#B&e>2b#`QJVJUKpR~L+trne-CH* z-78nNbuC=d+KvIV-xSNhV&<2m=J*Q)PXIJ1-Stft4Y^nPmnBB{L z@14!K@1faF_uW5R;J*82`NUxczx?mN_s{ZX2)H22*OO!lLR?jrFBj7OI5Pf6gG&j9 zxdQkVNe1}`7KByDPNj9yxm+_OlfQTGuuy6E-Y0yI4&VD3mhBtq{g7IgqWyzAA$(Wu zGHOI>8N6QBZTG(6TR7yLpI+YqA!=0kmePl%f}7{tB%8N$4gLe$UeG%`+^ut9md}P} z@@qm{eYfnQ7h=xk3HDdiuXJ=1Zo?Acz7&VJw;JYOQJ zLeDA4zQgw{W%B!l;$*V-xsvCP$bQYI3=S(9k@dV^;Cd+*o{Du@Obg$8h3_G98`m#vZB{~1rC;_9J3y?#1z{IJ z?MhAf?_$X>E?w*tge@MK9h5FZyk#hi&qcO*AIVKR$M8_E<0P_gSOR(Yir#Y`gG1Mn z-D7C>dw$EMCyvNI>1=hWs((Y*ZKKn zA!Sh5q<#{CuIoF^uv5aq4+3w!iQ(UflNgils zzgHEB)4L$-Z-cUan}(S@_R0=%dGyVWcHjGEf8&iKC5w`R?4SLz6=I>RKlP=alzqyF z4-fgu9yT^`zwF;zUB>ZljEcX~w_o4v-b@OSJ+qtq4qux6aeA1QP8PObN})QNuek}5 zBAqNREQxjdBfyC4z3r|vlO=Tj5HhJC```dy(Cqy_WN2A0y7ELb3iMd^d*g;Zk>T?Z%@(yn|rC z^##gipYwxqeEb<9i=%t`vPf5!!((Cgp*60M@z8-a-Qy2Eqp}bBwBmS+{Maxi?D=vS zDGaSr7CP0KY+sk>?$XC*xB4~gADU-e_DwfHaJB!LcC(ebiU>&`_cQ;k$qMma%Bx z&^L>+e6%H#zke84`-RScb@>9K;(g)w4mnQ<5g4O<1iIc>mxqi$eI#W_h!_;UWmHA+ zeJMvuWNC=#7rwC_zK!BaP=`ogVYOikWac4l5bte;1)-$zzJVigl`H9fvfcwt$>Q$Y zQzBv~E=jMj3=BU}C=0z{R@kZzS@wt!IWT;qQvG)05aH|Yfbfks1G|Eu@FnRImiv?> z-RBT*!I2?FdVth18o`fA`-GO=EBh^9aq+QT3ehuUflc)rw0GE`UZJ?53rKvt+hX_k z#YSK7#TqRRn%M7*qs`9QI~*3IW5x$=9N-@Gxy5ylfyj@Kdxf?x4Vl$uFZ0_Hk2})E zPypXu2ZddAMD|UeEAsaOA)(!ZBS-Lfb0o4NEFm24nuXbS{PqsaUg$S-T=s46$V7fj zSc%M_WMmtf{qgC(srfb)?0I`<7r5{8?0EM*B)h|JK|F$D_T!!SXeccfZ>{8BmVLyR zC!Wa^g>8^ti;m+98t=b&zoA>PM50Cfj0XL|r^vEc#GmC2%KoX%Efbfqhm(p!*?U*$wu)jnaeRGVGy)>spkogBW)vN!p8-q`F{{f5QeM~+%M z)z*+OFvO+DX^tPirJo?2Eo&XieXUSjewNmKhO_zyrh9#|?l;K0les50R2XJo?Ic zL6L8|uygea4LKxR=$6jOa&Z^y6%PZ=E&?m^Wy8+y_rC$5)VPY^Q&1>Bx2+0mkqOfN z60u*1#Gdl4(7>Spy~2jY({>E#cl+GX8GQaS{l(PTFFZUPgL`C)Lmm9ocj+G4`}}U! zGaH-%+55dC^%1UXgnEdNeR4d>F9>-S`aM_5Am8OuhPZTPp_Ikp8(k%Iw`?C*y8Lhk zRG4*FZ1VHtp6td3$yvVt7i-96_jhZI&oR*B{rDq;YJ6U3OB?EAWOl7Dvy=w?!dI>A z8gVbifazzaVI(OJ8V@v2Z~4c{$byg^MrWM z$Sd%BX*##B4#&m1-hQ}9r~J^TxMPM-DMC5;BLLYbb9$z4UcWMM{Hz}|Khw_6T#)z0 z>}5SJ&!5%@PXyX!$irM@@=sXC#qToBrR<#7Vq|ehl8sYylJ#Fv@YTJp?D@4`SM|QS za6_N3_ubU*d;M=O`r&}h#s4|*jzJ+$TmE`kev>c%hn45U(hffc#c@}Bqs-xuJ&N)> zSJ&iPa~)L;EBH?f|5?g^*77p*ipJ_#E=lB4NVA3L3(Dyc{p|yVxWukgdCA>f^^HTa zaP%jOzth@F8@pjVvl>1=9#3(nn2*`|k57;P#4qHBzsOIej}{E+$yWO1r>b;3!R$U0 z@NZsJ;L3Y+@c4ITEdOl7@o(9M^cIu8%y5U{ZpE>L$cFVNo-dE(q`rJQc7^cq%>BTB zJcoymVR=sarRTB`E$OTa|4G(F&fFE-p}IB8FxU(%kQPdD-B8ot2r6^5@e{0+m`8NR{r zCc`%yzRmERhVM80km1J+KcP655Ly5C$FY^g-yWy?&#pP?uRcBLFP`0>t-4%2yT9X8 zob3NTJ?RggXT~M+ob2zOll|TEToZqyVfPfcTK{sB-fpB4WDB;=}*3V*O~OB zeSP|7lb*DZHAvW{F>o648LV~yW#f??=YMfAGZAV`X6p# zkmq8PUS@c-;qivc4No;Z)9`G=a}3Wne7xZk4KFgh#Bht@PQ$AWuQhy@;R_94X?TO- zZy4TW_-4bm8s^X7_>XU|2Mj-K_;JHq3_or7S;Nm8e%0{nhTk;2!*E_+y8QlUf#?&C}%CVqn9O2bu#4>5e0;c15J4bL<@%kW&oiwrL@++ujS;Won^hPw@~ zHoVU8S%%Lwe1YMM3}0&a3d0)=Uu*b!!~EqR|MC6zM#Hxn=I{RK_&W^WWtczZpyMAk z{J7yQhPN8tX82{puN!{T@Vkb07{=Lhs=R#+khYspWASFvU|0A7*%#;W>uq8(v^|q2a}bI}M*@_#(qs8NSi*t%mO~e3#*S z4L@S|QNxcLe!}omhMzY4tl{SjzhL-f!|xi#XpPhA%LDk>N`WUuO79!y63WV0e?^n+@M( z_+G;g7=Fy~R>RL2-e&ks!x4TW(tpBy)Np~}-iC)59%Xp6;co648LV~yWxWP0*>#Wy$u%`9$|R2VZ5|G)!!=(=L}CYJjF17^U8mG`KB4J zH$2nuEW>jQA8+_X!wU^BHr!-*nc+6WYYksu_%g#+7{1c*wT7=Ze1qXlhHo}}r{TK| zKVtYP!_OLi&hQI{-!S}^;q8XsGn^M+Wb*x^pW$M|WroKY&KaI)c#7e}3{Nv$Z+NER z*@ovBUTAo+;daC844-58Qp4XcywUKjhHp1~m*IyDKWz9B!;cw$!thgupE116@Y{y- zdZx#Z-iC_|4>DY4c)a0q!#Tqf4Ig57s^NOWa}3Wnyuk26!;1|!8D3_%-SAq&XBoc8 z@D+wP7{1o<^@eXX?0(bGHKE_X?>6a=7><8VFuJvfo^SYg!%Gae80Jry z>Hc=Q;q`_uGkm4tYYlHQyxH)>hWS%yx;$G9^B2-|`m=_gGyI0(w+!=V)pUORQ8mq@ z4UaQC!EmKv{s5cKuimi#eP%}Z{^oz9IpGsc{363k47VBXHoVp_f9lPD{QA!_e6HaO z3}0mUQo~mm-e7p6;TsL#X7~}qj~jl3{N#Y z&G2l)^9?UB++?`T@CAmiFnpEaZy3JL@C}AIm%qN} zKfZtVG~C-T{z5htKg@8M;VQ$E3?E{6uHpHH`E!5%kVIP z_(sFG8@|KvU4|bu{Fvca4Zm*qO~ZNp(%V~LIA?gG;Yo(47(UGKG{Z+5=1(5#`d?^x ziQyK*%MJ4f6Lo$UDwY&}XT$x^#PjzxL zbC`|#o99_}&GF^m5TBI4zhoTpD>C`*nv?u|dXisJR19YEpQoD;vw!~ViJ1NKQ@Vff z)Lqv=_4ql3YN z1W`Zr;8}|Ktjrw63&8Ug^I4a2#ckk8iur6y(tmnKe3qq3rSn;qD`GB;E(0h1voPYb zEVrrj>%sl-zyB0QH$jh8yct?Q?{p9NXbH#s^=IJ6R6L(mDOUVjX#G6Tb6|bFgU_O{ z%(DK!Lyu7R*WUvVQp_J_(9gT{12Yd-)=mZ<4;> zy$P)E2mb)9@9*+i3w?j~L9o96`WRT>Py7v7-+$$^6pzOPOkwmASl_RF1FY|Fz5~|x zAF|jMeLs!QN^Dm5Yw*WLcnww3o_rRfpGwEyokaS6T@|=orQ@%QqM3^E^9Yf?zjh2* z-yh?%3i|%eBJc!t{e2l&-(UM2SfB5o1};4KU{Y(ez>$S&%uaoA-_;MV0f?8h#_)2yCrWLHOS9O8) z^~E#5`g+qB!1LAeUjgguJzodw>lfbvzt>v|R2Y39{5<-!{}e`dg6F7o-fM4H%zN$E zE9SlSTNOVC*4H~;1?%e@Z-HM{@jJl!`bkgpb$$L{4A$2lMu2Cl^V@M?eLbQI>|bBR zEh>z7FI}H+*Ms%-klA2;KED90&!>4W{Cc&%Ht^PXnpqgF1`m%XxP{SK;B6|M``XMt zp?XoCE5HjCUkldfE1STNsr1{y-HPu9Z&v&;_)^8ZSFO))p8?;i(q91U^Y7Qe`h1u7 znkTCA=b>-&hvogJFzN#yrP7Ch-&5%vJM{S}#~%K~yewY}*5}W>SFF!hXM*+l<6N*l zzg!6JRQa`l_4#ZEm_I-->stq&q{_#Ab*^f!OTcp!Uj<&TnD=JSSIm2_`uy$=@bhYY z_k%~v>T$lqd#~dZKLJiYJ)&*k#Oe|K36RXkdPJ`!iCC;4dN&nc5b<7WvOc^MFdkdD zmY&ft@MG}`dq!oc^unkToXqbEBi=jJ^LySK9ThKM7#$5>q?j)W)AO?v!JISuPhqqK ztmkLT!Fqny3D)zibznUo;=Rx*k{$M+3&EEuz6`AAXB)uD`C?&oJvgW0Zv^Y-Cw~am z^P#)Jdj9h>u%6#N4%Ww)--7k{{Tx`2&#!ky ztXh6GSU<0MCU`N9$+CSHfFDrDpRa)R^RYa(>*r&?4c5o2o5A|{@t@#(Retw^_4BTL z_1SD$J^ItHzTQKLOmb*7g*2#cPt|zeBObqkH_Bx>+5@)z%)V<`uH~zT&a!^5=rJ--G|Q0dQr_5GGVg7y6F zHSkOo{|~U9AM609uE%0-r{@DjV0}M=?PHL#xlTnC=2 z*7rT|>56X$zpVHtV0}OGA+SEb_$651FWm}$8g1Y|h0*W9`uyN!@DnQiZ(w~s@h({3 z|I4B*SHY9~`hfL(elS?yKN|(s_s{kNKc|+j0_*!{lfn9Yf%n4L#~%ZsV*f&SbFY3Vh?=ubq>%ZqX60EN`%>nD{Q73@URrxIeKcx5+u>N}r z?#q{|biOR>EXC)8_1{N)8LXe*zY46MXa5#hU%$B#te=g!AY0`nYP*4G1Vr>|f21A1^`}|jNhpfor^BhsquK>?h@z;Re`-ojYVYCrkuFCg)u)f}OCs<$4`YE_g<^L#HU(b3H zT&41R7JR;1|DVA6`q}GX{k-Qt!TR}5+yaZ9R?GJS>+5C3VE*Qf{}e{0V10dREVx{y zSAg~NrxU^VtNcF&<~hFPHxoQgrT+(5KVNtv_&Sxo6#SwZuiC)+`qC<}em-VBSU(T& z1@LAyK3xjd*C(z94?`c9@?8(s*FSCoC!fC2kHK+s;K2U?cz7JpH~Iy5wBo10$^DPM z(eJ=$lJMypy$DY3*Yu743Qo?4`$pTr<0KsG%M`@`(Ld@Bj;j|uER|jqjZ38$MF*zR zOQOTTljAH)qGMC(BceudyGri>C+9aqqqD%@Rq0;_-=z3jFz=!HPf2tO_!ok>e|b0f zz_>z7qF;i`6mJ9nO2z*LTos=Wl|=7@f2X)FZm|xI&v#0qk>H;wt^jX|$J3JNQ1FFu z1(rm!!S^d}04LA8mqZ=l$#MTIiOvQeuJ|(WQHs9}o~L*-xLNVfz+X_j6@0nkm%ukE z-VXkO;$FCgob2x<(QxnP!gR4zFeiR0DnXA8Q`C*{pVuv zJ&LaZKcwPs0Y9nu9&mDf4*NU!uPXg_;7mN9!uErczcEWB~f2IBEfrTvOOcg zGZa^V=PBmvK9?#!7Tl%yByjTgx+T#H@J5w>2KZsc7lXGdz6SiF;#?h^UIQG8@N`bzYdL9*k_?CE%A7UkiRm@vY!O zRe$$_OBFv3u2#GaT(9_b@FK+@fV&hIVe+t9@jl?MDb9hvqj);_Z;I!GlfNG;iJHOx zqtaJ{A6NVZaB`2MB)ST`MWufaoc#S+Npu%DneUZEzX0c{CnP(}%wGd1*BfxW0MClki=*CnMD8%P zd?}dM$o;1zDhD?xJ`|k%{S4-Z;N>d40lZdm2Y8+0v%&n`W6A$A@aGkO8+?J{&ET&q z{uy|);;rC^6u$(1Qt@{1?-ln#Q{FF+c1^%7llfcROW=Yfz{<}&)6U=MQ(!Q61d&bwtN}_Lp2PwWC zytm>9!O7oeltfQ~lk1Ho(VxJ{^}~|rZE$jZuq4_GH*b@_w1wS1HafL;ENm0_HVe|0#*~11I+nN}@^NW^jBhG^C^$JE zEROaC^BSZ7ltdH3H|Gf#NA=))RQhq?@$vabakLctGnL*AzE-851OBy2zZ^Uz{&BcIQj>8hf2@xi}_hRUKK|Jz{&mV z;%IMha=)xNssN9U`(tr*FqqfyW&KBiE93Smjy?l^R&g_UW;`Lrcmn>t;?ag9g#$KY=({x5JDu7ODUZ@^88{|Mfs_;29X6n_A&!Zie0 zzVA4kk0>q$KcRSk@Kl_0OZ-9L8x$V_9*=WUNuLM4C+@(-Q6qSCd`?pwtpuN-_zdty z#a{yVz?@z3yBd6<;_rgrRs5ge1**S12wseBl;yX8pH%z@aDV(S>2E+^CCI<8*$?** zF~^ehe&CggM}Y5E{dEHP1;vxVeN_AmaINC`;4dj&0{)TW4)Cjr*Mo~O2a@t!1U^jh z2Jmf?jPljehNGga}LS>c`)Zl!f${#D&7IkD@)S*jK}ph#lyi@ zDjpBss(2!J2##_7gX0tUc*S$MyyC^+CnOx(*8#4@F+r9;6TDT$Ujp7P$%wxeT%y|l z7V!HRGi3R@!ObeaUx2@&_!;o86u$xT~m>v(Kry2f+;X4gKXZStCW6GJc|1kff0&|QhM#~-_m~~bh z6-F&4{!GJ{8{TO6PQ#BHe%A2&fmx-+=+DI!zO0^6V*ftj%2`!q?xoS`_hfhO>Q&g4 zv%1!_b}wC4+1?Lc6j$s+=`_&QUcDv8WQKRzyxjjfhDis^jSDiQ*k3qB>FW z0=YPk>R3&d1#-zM>tZindoIo{mt+^OwI<$x*viEj*Tlt)^R12(b8%uW&Z9a}aha-< zWm%?a(`p)6B7SpI_{}`|?JC0wmedJZgxS$>TjNqB6SsEf)W$&~YPfEu)rjNjz&R|w z6Hn2`PWI>#g34m#vN0RvQ;I z7w1wN=j=MaUp7vyiI=E}w+(NbZZR zn51$2NOMOUesi}-QkfrJwngGHhA!K{xy|iO!E<$iw3@&*TpPGHtlYIA*zE}Tc6|@u zuFv4x)i1u?j)m_!u7f_epWkd_eEU(riP#CNs&Tc8q#D-<6mDmun8>aK;Tja*6GOJH z8Nk&CaZ8;Dk=0VN8aE~&sYc3F<8~`LlcYx6Q0W#I#|`UrWYvBLbunSvs-<$OWfj$~ zY8m5tD1}sPwG_R^?Sw8yit4%~9M=u;?S^Saxcv~q?}ijokG_-Bky>*DG7LBHFd^h# zBYnYjN+h`M%)rpJZuA2CLkWfJHqMb+b-S`llH8=ht7Sda?qH3W8aLoU)YgWUt#kV@ zoI0tEI;o91$)`>>zD_c%b$bl+k%p^vBO@JYuUa=6Iwv$rt@O-VcR*y4)MA~Ku+Ht< zNUDpwwX|TJl)3hx&_8S4F^|F0Om))h>ZFzHq{iypc;w0xDynvJoR8E-RjBwnH}ElM zH`=+SLiekkEFD~0t2SP#8?d>Q8=EQIF_uC)WUX|9TIt5M(miV3ae?caB&(1PS?7js zm$U5s?(oE5*$Zmjfx|5xZ%)|2x~k9wb+Z4~#iNMyy;|vPwX*BgxZ?^llxnGwg4IY1 z*0`e@Vrtx>jKa-ZxRf+Xt&Ci?(zvzKxV7$p#b9@oazeIU>abRNc&%(jtvlQ>SjN~| zcX)D+G?TPot#p7|>FTvI6x7B;qKt*LZaT$$q(j!k9b5L++BjHtklMI$d z+z>JTNJk;9?B^ZMkwb+$g42(#m0 zHDhEHsdLkjB-hY6>fB(L*rDWgZZvCcZ&}&U)!o_Jelo{lh3v+7J!Nx)yDos3#?EdN z!a=>MdC97i8#)`?Pj2pF*Ht-iSWw7~RLIgPWT_PT-7#gD2=0M8-Q?#EJu2PpMT%WV zQ0%5miv5XP%CKv6dxVa#>#TPDMn||2DP^z@Q--OvYIn#>Mc8tQMgyIjEs&`fccjztrhB-tO{bgUxZzc$yD6Av zv$^gFq|?p%+&oRE+wC*k?+$h<-W{Seo8@iKvF+oI^Llx+KiF>MW+gh_)Q>w-s&w0h z+yqRgoAz>t0+sH@QpN7LtJ&12I~?nDQ$9B{Rq1X{rP=gwH*D&3)1TaEs?$yVxq(=x zo4wE-@pQUrZ+Cv7(%qn~+0>t#s_JypAKf{hPB-=Erl>mI)So*zsdP8z(roI_oh9mY zQ-A()mkux$2y;;?ohAN-LYG< zsUSCf(CMav+?kI~HyzBKSm|_Ae{NEv(@p(VySbzasCK7DDZ^BOzowarFomji)4x=N zsitZ-drL*wg1IvW9kJ6`?`C&8VyDsFO*(bNPUE{f!$?Kga=6oN9bv~{e>o-8|~yGl{qrx+_cZn!`fCZWvZT(kvSXnUo0(% zMZy=`5?|~VlDX;CekLDh&QvTQQ+Jt_@6=1|XzVW!>n*b5u|I)IMVKAB+D(e3oMtr0 zxr<|QIZbM{9lfhvou$@h`?bqZN7xbEpBAPf>}u^G?(Y+%7O~yO&dU82x6~rGq;@E; zwqtp+P4REe~~e@i0$Zh$gg%+qx2$n(D&CVQxUdK?YQqR?WY#8 zb?VL;QxUeL?xZvoVFwR8{8zhEIK7BH0QkEPsR&!A?u<1RVMl0pdYOu_t?$k|RfNB$ zkTUE(?Jo1ABFr%7FXN{oOr7T3)v;8BsneXhmXL}tb(*sWhMYYx_*)=44|}xnw@XqH zwxssZ;qRfO7BO||@2Kbqd+5m7Lx;cNl3K*psXcV~i`J<{OzY=%I;pV7MSsUf=V4Dd z{T1<4gxRC~1*TMl>8Ck&Ni`K=OKMLia`vP&XHO{nR)s_l>Npb)3-R6J%D zr|z^eVl4RQe?#PlP+v;$~nIt(?A3N=r?lNK$Y^%tfK_9yHPa!0u&J6lQaOeaaU7C z=`Xsm>~X3a9}-G+3^y_LX?{s=RuY@q1UHJrY3|xXLaF84b+sgo+m=wOz14Ku35xsZg@#3wH5AaN|Kh^3U{RZIYI1ZFfB)NlVpBdOUMiBH~DQojIXYS<-`B zddNx-QSRzPl1r*y(gRLAl@eTH}?t z8EZ`GUD3@%leF~OQw`-Npgz) zq$Rb8vqv}IOwv*f=VqEd&2L3&Nq@N^UesTX(9x-_tahi4Nwk~!CFo|T3RB(CU$#)G zsoJb|GgFnCUay;#s?=2dR=a~|k}7wm$?sc8DLRsIwOx{jEKnue&XoGVGe&S#>Ic%_`+&)#}9b@Zg{4(CPN< zEaz^pry^{YZs(BoaosxF)p$}7a*LS5Cu^M>!*Ay4u1f^N4;6IcJI8XvuU2mK*0~m9 zj66)>Pio-!hqWMTWQ8?yJGKTl3gj8t&gQP>?r25x3Vx+b-cnn&w7X&6%+9&ZU5zU` z+M0J8aCrTU-KNcKJ$c!j#;&dzt!>@So%Oqon>+WY-KI@zY;Q{P*lpOH=EhU%o4cEr zcDJrcTn^zg6v{Heu%7`in0)Z)LO;;F@dS;bR}&)_p%#B8bZPLZ#czQw4lnwk7Jn`Mk-k4r zi_hN(AO1C;KehP%pi6^KE&f@I5A{hc{<(|~KDGFdGyW={KehP$ZMM?jQ;W~v7#e=H zkEa&@RmKOOT73RS#Q5M-i~k(sul4cN;=jQ7;8TmggYkU14nEZ4=b>p!gHJ6!-=i@6 zIv-ChemCQTPc8mh=;BfM2OnzjZ-bWcfm-~{&@w(yi+?}kzZL31`42HZ_|y{r7~?~I zQj7ltzNN-sev({%ed6KDGG#TW~2qwfL3LQhsXj=c{;X@fWCgYVlhbAGV8H z{N;=fKDGG#Em7I;sKvjE@nOHC7XNw1pW(NcTKpFoAAD-@hv6VJ{M$aBT714|pfvc@ z;+H`e?~Mw>hg$rZ(8F)=`A~~L3%WG;)Z*XI`0x05YVjXpeDJBo@7W9S8+|;r`22nS z(%@5zU&Q$D`gm&b`TP5&!KW6Vzf(V)FQ3APTKo-+4?eZ{cQQVdlUn?{86SLV@$YAR z7{{o^=WqAO_(m;$S#QLD&zFZ<{ISrb!KW7g5XOgcQj0&8@xiAS|3t=zKP;pcpMTq5 z8hmQ;`8)D*e4!S>_uysxq!$16!leAv;=c(k<);>ZbRWcrAI_i_e;jma@TtY;I|_#1;51 zgHJ6!f1`i+tv;Sw{2h!BKDGFK=fUvr`*>>cM?secpIUtWhJlQe)Z&k0d>ALG#pj%} z{5GFI|0;7jU%ZCTc>G@x{F%_@;g3(}LQfC=IrM+%<1b_UX0Pw3|DRrORr-1AJG}oM z^^d&H!@NlRKF}2*hVQ#5zthLerv9tGujJey#UjSWkkJo&U zVEMgX->hODWlV_QN*&6u4Z8k5AJ5CYfoiRW4IuBnGGmZKI@6V!s(Cfw2 z4|%;@>29UhLsx{DbD`^l=AoR==$G!&EK&sf75LCC>lyzi@1GA{^rF|7Fg}#?D#i!RcZHRQvb{(Bl8^6) z!*lt|Uh~whBKVciQV-J@6Y6A+(kD{C;+I_vUG%Egm(l;T*H=)#=JoYTZ-TB5{@u_; zfAKN=eaG_Gy&eZ$^jEK^(SO71SULIl=GyYBQp95Y0cdz*y=JjuR{TO3{ z|1@;PKfJ$iaFhq*-kKfNxX-tIMjTfX8Qulc*`74Le@-;@`BA$0k_yx$33^q$vO zF(zpKW_i*3-oKrGDF5Bi^*g-(1a$caUO&T_pkJepzmDf;htd-m1<;p*uelPD|Pe1hMjnEZg*-g;(y?xBh^uxONJACDZ-sd|(D)@3u ze74dLn(q#&@9X^+8Pm^e{^om8$Y&gmHiOb_vVXG{4A?@xoCKGN$M&=sS+UI1MbG~bCdeQ)pc_vogV zd3^=-K3?BS9bWc&J9Nbu@83y(tk(}y@9XuWj2Y+kQ}p-q`Wfo+UgIZ2qUrm4&EJKa z&I1lUBcLk|@Om`;aHr{Jpp7RbKPmI@7DY=6mPMb6%fA zzsBp^=!bgXyN{%P_->5pwLWGG^nh^Ol5i8=qwt@#jEirh9)r^cbc03!2wm$MB*TKGfo$0-ZU+`zxWxD7|0MUG!)87;5p? zDW6*W_4JSQ@zmmf1zOhiRmOz;sU_xW`n(8-54HF=L(8(aLCdn#60@29QGQu!@$aU8 zwD+mSzn}gw-lrD-5&E;dPc8mq^pEvEwfIlbpY45W@t>yuY41~u{~EMx%NvXd^*}8# zZ_%IQm!%e;=K|tWiyvWLE!#*fKHnQ4+d?fq&mE+VsKqaXma_4kc~UlNi5XA-KYZD! z#XpdKsAp>NYv_l1rWSt+{ZP-;;vYtTuFs!Z{3GaxdZrftDEgtEsl{IiE!(n~F`=HR zC8mjf__2Fx@!OP7Eq(|6u#ME>ucaThg4$xRT714=LCSUoV?x=eCFUyn^L;%~ zi+`Q+sl~s6ekdEY_&3uJWuq4VHu}f;{Hevilm7AErxyQi`k(PWwfGOwU*LUe@gJdo zg7>M#e}evr-lrD-Df*xFKDGESLrYz~#+Xo7)DrUs{qRyNYVo%#pIZF)=!d$Z7QY9k zo>EuT;`gL~k}n&z_(k+XpQILl5dF|6sl^`;E!$Ggm@uwVOH390MSfk>;vYgkv?I0n zQ|UMOcxv%yDW6*WIrJC%cxv$%D4$yVh4dSJJhk{u^h3K-i@%J1Xm@JyyXi0S`B00$ zmi|)jQ;UBt{m@US#lL`llaHqs{|fre-lrD-D*9m`q!#}+XlaYhj0tT)Eire}4{bp$ z{zLRbTTqMt2>ljc25Rx2Qa-i#Pty-|OD#T6m8EW}#eac*s9S3B-=H7rmRkI`=!d$c z7C%A}rEaOk=c$g=Ew%VOJ&?Mk7N1jpsatCC%b}%iISrM%rIr{@E2VC!#phH^>Xur3 zPL;--jDPT<7N5JZ_|)Qax0HTPEk1`Z@u|h<&@(2q1-1CBR%r`r@!8DM7S!Ueq#xRX zT714UMcRT|{L|@&eoig^S@c6crxyQ<^g}a6h71vGmU;|J8JP~(+_P&E&g2kZ9X4r@fRtdTKpyS zL)%e{&+CoiQ;XkDKeQdS`0JEUE&h7?VZWmm|9twP?Wo1SkbY=8YVoh6AKH#u{0;QO z7)UMtM*3mDqZa>0`l0Qp#lM4oXgg~0@1h^tj#~UJ(9(8W857!$T4J7|AKH#u{6EqU zZAUHsOZ3AWj9UCRlus=_-zzj`g>P$W@&83Xv?;atAJ7kNM=gEauNztR@e z;t!-B+JajAq4YyrP>WwiKePq4_+#mZwxAZjf_`WVYVoV-hqj;=e+IO)#nFrjZ9y$D zv+1|{x}p}J*QLd$7Jm_a4)FL;i{GMrYVnuT4`rhk{~Ty3+xd(MWuumu3+ab`LM{H4 z^g}_awfL7RpIUt0XOTLg7XKRMQ;YvC`rST%YVmJWKDGF_(hqe=E&h*`Pc8mW=!d$c z7N5`Oh)*s4BlJU^Q;Yv=j!Z2+pB<924$zr zEk5s;N!h5ypFw}M-xg}|=PI9C{Nw4b@$uB+FQUKJ`_$qup?|9Psm14WN@Lb}pIZEO z`lorHTKv`YLw}a>MV*<7KTj=w|2p?+kw<(`m{O9TOgbyET z@n2OwwfL{o5B-o@{CAa4E&dMrp)XO3&wHlQcGTkcrXSjlTKr=Ap)IJzA3{I01-1AS zprvjr858Q3T4HkaL)}t~e;EBxx76ZKqko34D{Ap)E1z2Yx%5NbQj340@~OpNL_gFm zwfM`GPc42s{jlFri_iC+%YH{K{yO?$zoQoa9Qt9uqZa>s`eDDL7XK3ZVZWmm|1$ca z?Wo1yKtJqv)Z$-DKkRqZ;%}rM+L~JY8|jDrh+6!6p{1=KU`%LhYKeK6{(9eb)Z%ZU ze`eTUl)sh!(cY()_-*vVeGO{ypQkVTk@8=qAKH{!;$NrF3l;cKi~lzLaIQfu{=4+U zxdyfPdAR>BZ9y%50sYVx)Z+J}AKHRi{9^i{EvUsGPCv8-wfLjxhdCj&_~Yn@IU%+9 z6X=JwqZXg!KEa9sRjJPipbk(+}&S7XLD6Sr?!Glyy-{%m(^lUDV=#i+)%awfNtmAJ#=J zKA#trb@3Td8E>g2hR=w~ISaM;kJ1nGWNPsrryu6Y)Z)JYE$e!jF=1?{mYCP*hw~$9 z@!z5!)mm=$$ z!kDmK)Dm+T{d0XEpcemV`saC{TKw7cLp@N7zXV#=)xwytE^3M4Gcd9&wfL*)hwY*k ze;xg>UDV=V1}*Elk}+Xj)Dp9S{`tQA)Z%}e{ujJYEk56eDfK`t{%y*q7JoDS3w%D* z;{P04%JxgfgtAdf%&+N(x}_HX8Rb)pzm0yVb87Klq95vwTKqrL|DrD&wfJw*ztH>C z;`6y6sb^~O`{G#|*_Hv&vMtmSGnjrT8@2fR&<|y!7Jpy*p-rj9KNMQlbvR?b!KEaHvKUEQ;R>Bei;9$#s4h*Fu$S}zk&Wme!bM*wfGOv4{bp$KA+K&wxAaOSM)<$P>cU0{m>TF;y+72v<0>J zeC}(^SNyh9i~kD!%e+r5{$J>aZKoDLuTQe=1<4$xmTKtRXhq|H`|5Ey)uBgSontrG& zYVoh3ANE;l@i)@H!q*|S_&3u3s`shI|Dp1!#s3lgD}6k*`1jKPn)j*2e}Mi~-lrD- z=gOxR|CjWy_VLu>Z>7J%`_$q;L;vgErxyPY^uOVKYVrAA+cDR8pIUsr-&V#DYVqHo zAND(H@!z2z`WUtN@6*55=T9wu0iG=!^G)wli{G36b>62Ie<1yDd7oPRq4Yyvr53*& zTKX!VpOn5zEirtSQu->j_=nODeU)1L!|8{rzDh0rO660F-$g(4Rci6q(ZAl;Ew%XT>4&~bE&h4RrxyQ< z^g~~z7XMQEp|4Vl&v)ucU!@lR>-4|v%R?>xH|dAIN-h3I`r$Z8E&h%4Ltmv9|A)$_ z7XL@|Z}97-7XM!Qp>I=*{{a2ax2eVd1^w^%e5l3$75&gxsl|UDTKejXj0xi^wZyzi zKa8u?;{Tm~=&RJ?|C4^`tJLC0cvx2YDz*4M=!d>aEq-76p|4VlKY)JN7HaYN_fxVh z6BrY=g<4`N>4$Bh7Jmx;ur1W$A4WfH3$^%s_E@%sTKw7cWxrECpHG%;p_ceX^uvBf zE&g)lQ;XkDKg{c>#b2#_YVp_6-x&5U<)5Q`YKcFee(2BC;$NbCYVrAQZD|W?@o$8d zwz!osp)IH-=63p_EvUu6mwspqYVjYSAKHRi{Kx5sF_2pPE%ZZMP>a8fe&|=!;y+J6 zv<0>JuhajouS06_-=rVr%+%t)OFz^hwfH;eZ}Rz2i{BgXuN0qJ{C@PqzE3Uw5am;g zKb(HpFQ~=OK}%ckUE0zX)Dkm=erOA7@$2b_wxAY&CjHPB)Z)*jAKHRi{Nw3|wxAY& zG5ydM)Z#bM4{bp$emnheJfarAlYTfJQHy`7@~Oo?gZ}q?TTqLCF8wffq89%G`r&v) zE&i94Pc8oC^uzIpTKo<4!|{k({A=mo=*vSb{&(nyxf8Yc-=lw%kEa&@Hsw=`znT8c zKAu|qpD3SN{QKyK;~lm557Q5Qn_B!w>4&~YE&g-R()V6qOc)2KCFW)Nq3=Ex}p}pmVT%!YVl`5OI^)jOsFeriJ4D7)D^Y(C(#deMJ;|K{ZLob;xDHk>WW(Y zcKV^NsKsAHKhzbq_@~hibww@yx%9(+N-h2c^uvBiE&f-OPc8me>4$kEwfNtl|9xNQ z)Z$-9KkTQ};(u59)Z*VnKkTQ};%}xO_ET!{@1*~Azg}wb@1uX4_y13E?*S%NmA38f zqPxiwL3P%(=+J0{HG zUw1w4+r90X@BHUK=eo{W7e(Le-cRkl*4m+V?MiU?hw#21!Qr38`?djxe-`iC1|0tV z#IbFBOvbkjI5MB(ecOP;|A_Z(0}lTy-nR`ne6#k+`?djxZ-w`50}kI2@7o3(zBAsp z4LE!ky!RarzY*U14u>CN_jZ^$9UiN;PAgBj&1J`GQRD>k!iAW^1kiC;alT<+k?Zm!~3=ehhGEl z+a4T#ZM<)LaQLox-}d0}-SEC`z~TGi?^NI6@SEfBl83`@gTGrI4nG9%$5=T0F#J8r z!{LYH@0Ewc?}1+|4~O3ef1NxWek|U%Z8-b{yl>lZ_!&75ho6PNPxFVvADZ)U_#^T6 zD-VZ1F6ZI!C*ghHfy1AH_k9Nre-7TaJvjVziDTRQCmG-N;KqkH`C%!{JZMc{u!; zc;D~f@K+~}vAT|oj};u5f8u?t;P7|heXQW{i}5~IaQH{?K2~t}C-6R2aQGMTK2~t} zSMWYoaQJudk87;p@bBaOm=A~l4DZK$IQ&<5-|yh?EAUTf{&4u8@qWyQ!}DdDamkbaT3*Ofq9DXF;`vQlblsNh_g^c$Fj?4_a_XQ3=7w>(6!yk_KzQEy+!+T%g z@F(HDFL3y?@ZJ|V{CRlq3mpFX#L<_V$ar7i$lQkazQEz{!+T%g@c+VlU*Pah;=M0$ z_-FCn7dZSfy!QnT{|4Us0*C)ParEVTGTs+BGC$$HFL3z6s>yp_;P4fA?+YBh4c_|# zhhG`*eSyPw#(Q7j@ay2cFL3zYiK8$5$ar7i$n?j1U*PaV@ZJ|V{PuY73mkp~-unWF z-yQFLfy39}y)SV1ad__w9RA?M(U-%>cwgYi9EJD3z~N89dtc!23-I0-IQ&Aq_XQ5W z2=9G?!(Wg0zQEyc!au3wCmeop&corC;Ga?+4*yc(==-Z=yzg*i-o$&~;qaf}z3*`N zFYw-XIQ&m|?>ij+H@x>94&QvW7LLp?ypJs$eowrQEgXIn-p3XWKMC(+3x}VA_pyb; zAB^|0g~K0)_pyb;ACvQN_!IEYX{_Mz3-Hg&!{N`y`*sV5zb0{v)%9e2tl-Gpg!i$6 z!!O4BSi#|!;C-y%@K57?tl;p^<9)2)@NeRMAB4j%$G@OH!r{NbzbFrf{~Etk9uEH# z{uX&S{BQV|jI8UZ@jMy zIQ%fYuM0T*aJ;VzIQ%4hY_~Z-1@G^3h9iFr-q!^j{sjE1>I)oxQO?8RufV^iJRJVk zoQK2TiGN*rIQ&C74~KsY|Az8#_~-F&%ERGb!oMXChkrlk;qV{h-&P(D|6R_*;eW)x zqdXiw>(t=k@a6dB%ERG1G(61 zhr^$r^Kkfucz?bRhrcH0;qcev{agqR|F6Wc?>|Du_kB1rPvCvuhr_>!_kAA@{|ess zeK`C(c;ENo@bBaOI1GpX0`L1i9R6#(@B480pK~4#|2zIejV&C$eD&l%l83`L$NRPi zhi{AbZ37P90q!`f^yP*zR;?4qSizBL zhxf69!>^9_v4X>|h4-<7!yDem3J$*^-p2|K-wW?!1&7}h@5cu?{D7Q?!w<%Ps3fc{u!` zcwg6W_|p={x;~SP?-y`n&c*w>hQnWi_jL`2zZ~!D8V-Lw-q$r8{wBPyYdHMfcwg6W z`1|m_uHo>H<~$t!N&M$pr*QZe@IK~n_?PitC=Z8!6YpaVhhL8WQh7N1$M`el;qag1 zzmkW;|B*P>MU&1cJ)|s4sB%zIfkX;P9K{{hSRBKM3#JIUIgFyl=N~_)&>ttVWaZv4SHr9`9oXho6e~ zv4X=Ni1)FA!ykh8v4X=Nf%mb3!yk|Lv4X>&jQ8yp4u5ve!{N`zf2gsA!(W1bPaY0` zIo`(>4u37)w_7;;jrcP(A2|H&c;9Z}@OR_?tvnq5>BO-vo+sn$0*=f}cwZNA_&4#s zF5vLX@xCtL@Sos)UBKbL!27y@!+($WbpeO}3Gdq#9KQ9M4Si{sIQjxdW)-~m1rA?{ z_rAd4*TZ{X;PBn?-WNE0Z@l*f4nF|zeSyOd#(Q7j@S_sPdKpb7_K{p>JU;f3oIe2X zeSu@1)A8OHIQ$&E_XQ4r2;Tbwho6V{zQEy+#d}}i@aHFvzAPlOhqgmFGK=tE%fsRS zk@Il)8}Q#K4~JipIF|J=nQxVWBl9@^J9#+#3po#me;GeXc{uzhiDOw`knv@~k@*_$ z%YwuIobzz_-|@aIIDEUc8kV(6;#d|OnNIlc)lNA4x;YPrUmx$wg2VSq9R2D~#`^_F zW&qyr3y0q`aol$l8NV+anbCN^FC2bm;<)cYWcl^T{xrPz9S(mc-un)Rzcz97{YEn0cQ`V);Jxo~`1|qRcR2im_-1Mw z9RAsyhr_>!=LeTkfy2L^^KkgL@xI>S@Sowm?{N69@ZNVgeACK?zPC&qeTO5{2Jia| z9KIvo`woZijQ8~phhGox>m3f?6@RGq7dU(my!QnT-v{q~fy3{RIM(CNWPClskr{#a z^$3UG5AS_}!;i&#U*Pc5@ZJ|Vd>y`p)*~GL2)y?N4nH67eSyPYm^k`!F&Xa*9GT1T z-WNFhjd<@19R3!(Z!>WC`|;j3IQ)ZnZyOx`^~BM(x5;?h;K;m(_qM^|zruUl;PBt# zy=`##Kk(i*IDC_JllQj4;nzqUZCjg+w+)U=5$|n-!&l?IZE*OWcyAjVek;7U4GupL z?`?y_@0~c>wjUX98yuOjcyAjVej47}28XZ1d)wgfN8n?7%lY~E*xqvf!o<#Um5S`25|V*@O})0!>@z)v4X=_ z;eD*&@ck0USoJ64V+BWM0N&dMhu;qGZG*$_i1)U^;YZ-TZE*PA@!mE#{N%*Zwy9)R z(s;s=IS}7Q9u9vvzO6hQejdJ^JRJU<#IdXk$oR70$ow7e%YwsSg>SEU!r`yQ^QGyj zz~OJkcaVp}-;Q5J9uB`4zp6YOehJ?D2!~&qIQp`TjQ0hO%o}*`3mpDq{AyYj9R72B zM|n8>cR3G-{}JCwc{u!^c)$JwhcBy2e($o{xH1v9S(mKeqGH64u3qpC=Z7}8Sj0E!=H)w zzQf_q#e3i3@PEhqb^?dL6z|&!9R9Y%F;;hx@v(v1d$#~n~$b5tMw!z_l$9vo0@P+k~_qM^|SIT)fe0%)*<)v*5 z4!=6yij62fk~0X}NItKKKpf;qY7LJRE)-{D$SF`M}|~ z&v`ifPWX+=wNK^zn8dLzYRUMzfaAWC@xCtL@U!vV%1iTv!_UQUEDwi2HE}HK3^Kkf zI5OwptIJFCgu`E&^Kkep@!mE#{0%t|hrb!WNqK4haQM6NzQ4oa@58TGUdqGaAHn-$ z865rzyzlRD_!scLzr*2Q#&<6-%^wc`7Jjd?l83{;i}%+N;P9W~{rCWf{}S)V2RM9T z{f2c>kvP@`9GMn)A6q#5T8U#lu1m((BOICa@qS-8e80qT-~MELUxp(y0NBxv@VCmt;eX3{IDBR)f1C1f_zsDqFCEF8qYNCG&Uo(&9DY4~A8jXa_^$ZA z@^JV~@SDoR;d|k|?{N73_b`YnhGFf3qaTj=) zxEkI`+y~xSybZjIcz1ZXct7}W;z{rb@oadccs{(Vcmced_+of>@%8W?;(Opd#gD^# ziC=;D7JmTmBmNd1CC&Ed7E8RF(?^%o8lw}J&SDdJi1sbXFhEu1Dk1wLJTKD71CiqP8V)!iaRlPX*$ zW_1=W7c-QFE5vl8aHW`86s{6q4___53%*ADF#Hek3-Gn#*Wl~KAHvKam2co1#J|Hg zid$49{-=0V_$KkX@Xca=kF0Qucr*A`@euen@!#Ov#rwi{h$q8$if6-gB9(dY-QrW> zd&C#O_lmEC7mII(?-Sn#-!Fawen9*(?EC4vul|C7uI6EuIfQBj)#*3eSq~fPKGy z5PnYnS@?PJ>o6-nm5<;T#oxk9#ecvriCd=Mb}76pUJZUlT!fd2tKnD0o5O5SscZ|s zE*=NJA>JQ;Q+y!&miTaZ7x9Vk+v0O_{!)0$v{R;XW#X!Ll!4=S=dUBPT>cLDU2*Am zd3^p);NO#f3w~exZsMvB8n}!56=c{sQu&$8M-AM?{YvTgJ7PYo!9JgL;E$E>3j2Ml z;Q{JP&%{-qC;#sr(@LGx2t?_honZbNL$h3-KiQOYt=LEAc$|-{Q03ufmO{EHMDc%Hb zCEfyVE#3}ZNjws6Bd&qliVuL>i4TI?i;sp^7M~9D1C^;<1g|3IHy{ce;8VF3UQPS} z%nw(l@)X=jybShZ`1|nc@?XJgh<}DVi_6n@&KK4cw}saduK}+u=Jyc_>xjFV+-j zzl8gX`7ZRrmg0)^Jj&#cRO>#2didi2J|;#eCm*VUTzyc(8acm=lduYT<3g z2g1G{`R?w*cJe2~-mmju@5|+|_vN3kA1m&Khw8qM!P|?M!rtcP@DB2y!an~Mu#ZV0 zeb;VbM`idP>B2Da>hMnD_2HexJ>Xr$Tf)P|+rykprLr45LOcc@DV_@NDxM4bIPhJ{ zalPfF#PR-TIId$XAhVn9yAa-8ya@JwT@UXee-pf?crm<}cnR#s;iuuf<)4RrOx}d| zkzWpv5`O`6l9(d zc#?P+JXt&(-d{WlK0rJg_T&5%c#8ZCc&hj?c$)Yqc)Iu$c!qcZe4uzCTqj-x`{T>? z@J#ue;926u@NDrCc#imK_#pA~@WJA@;JM;Y;X}kf7`|5g2z;IRS@?SKGWZ7Za`;B^r|>_; z-@-SEe}!)rm!}JDgBFh4=8^RyhQvE{4ep-@Pp!);fKT@ zzz>VRgdY+A06!}J6Mjt0_Xidp7q^F>5c7S2g(t;T@KfS$@YCWx@H67A;Ah3#!Ow|@ z!_SNNf?p6%fL|0(hnI@^PQ1cP;&b7b#h1XZh_8W{iSK}46+ZyKCVm`#UHk(4hWK^( zO)=joS9nYO1^l*{?}#hBBmM(kE^d~-BdhSPcvbjsT6b&1JBqu&?y<@#XO5I={L)an+~ta2NMCkoiphZuoOC z-%%FNt)76tkbegD=UK18U&_A)`*W^OVLxvF3~#A6G)dp5RQO8y=J3D8Rq)s1t>ACO zyTad!_lLg|9|aH6Jda6S^}ReC*XK_nvqJt{_y_TYu%Cxq1Mew+C;X%MQTQkE%ka#s$mua`*YrOKp_Tczi)>EcZ)mFZTPr}?Z0?;!39 zj}Ui*j~4fXeOv7h7c`#%a1-%hc&740;WGJQ@QL!n;giI>!d%2nWpug~{4;>#;REF- z!TuWk6xd&vp8@Zq%q*CTzNs7x`)kvO!OP^2g3HyOV_+`SrE&u7ui>5oH%i%*bpATSvZ{#Pi&;JY9=l>JDlJ5H(+*0#T4NKP$#N}{nadUVbp1>?iLQ9RF4qnA>vG-U0h(uT*spPwUhDDeMg8%99cchO zMESw6e;#uv?8moZupjq^!+zW-y-wuEjXm+cKaPTZe>?_G*Y7Azd5wb?;!+s~uO}|O zPQeDA%3zKO`=^PioC(hs^Ids`L)@o%7MqtM*_nyW=g(_T#dO_=0-I+p!>8*Y6qw)B zrCf_o*9C&jGq>Pd%fsfGd+_P`Bn39lJcv)vizu*p=1F`yU#GzQE)nHLd^(p3HqX3) zPv;F3*gW$dK0QWKVDrpp_*LX#^UQbnG+q?gJo5`a9s4M-dFBuNaT;6LJkuemV*0!^ z1?D?DC~M-^Y+&=u`uOxYKniT0sm7%%=Etm#`^v-SnfLIU%ERWF&+z@^Ve`zl_|4>D^UN>!&E;Y9 zOp|mtD{dhVn`fHi`^&@TnRfUs7LO51VH=H7V{Q51VIri&b&BJZzr15dSxM*gSI?euO-1p1Br3QXV$X z+=Aa#9yZV1gWpXaHqShS-(4Oy&peIaLmoEI@cMOePkGop^Co^TdDuMjA%1Up*gW$k zejj<*Jo5v7lss&n;dH0CuRLs?X_ihSiu=jK=9#wm8hO|}(-A*f9yZTZ;>XCt=9#Ye zvGTBaraOL|JZzrnhaWEwn`gGc*UH1@neFite8O*gUfjev&+Fo*9pyEDxJ! zrr`INhs`sy@CV4l<{4i1FHVt%%`?a1r^>_T8QvaIoF)&OXU@Y;i+u#5P8@aM(P8GpDuY@X?iKSCZh z&#Z?(QXV$Xbi*Gd51VKD;OEK1=9w+=^W|al%n1LX^UQ|$OXOkm4DW#{E|Q1MGh5&;+^UT}$+vH*M%t!d!RVe`z7_&eoc^Gwz(`Mcy{ z^9=7zD&8#*n`b)U?~#YiGi%}Rm50qUJYO#^mWRzVysxQvpFC`y>5IQ#9yZTxg?~UE zHqUH_Um_2iXNKedB@dft_QpRb51VJk;vbTS%`=nm56i>m8Qxn}d_*2L&m4k(R30|Z z9F2cW9yZVLUaaEd^00a4O#Bn_uzBVJ{FCyqdFC?wQ}VER=34yI^00a4R{S&auzBWQ z{Il|~dFCPfbMmlx=4t%%^00a4W&8{BuzBWf{EPCidFCVhQhC@s^ELh@dDuL|`^1Vb z%fsfGLi6Nbk%!GQE%3|aVe`z&_*dm&^UNCf*W_XIOcnlhdDuL&5&jK%*gVq<|E4@_ zp4kHbmON~p8H9gZ9yZVHh<`^OHqVU2FPDeSGo$eD%ERWF@%Z=TVe`xs{QL5-d1f~L z19{jyb2$D(dDuL2EdC>T*gSJ8{$qLAJaZ2I6M5J?b20u?dDuL275+1M*gSJ1{&RWQ zJaZTR3whW)vjqR8JZzqM9RHO(Y@T@*|8IHNJhKe{wLEN|;k|stZ{%U~%qRG7~BoCWsxVBpSSspge zY>59w9yZVP#Q!P}n`gGb|0WNcX9nYcmxs+W!|;E|!{(V?@qfz0=9y7=F2JV(n`g%3 z3-YjeW-7jkJZzqsjW3gj%`->f%jIG7%<=dNdDuL&0N+#|HqV@oZzd0$XBOdkp&%95 zJaY}cg*$5+Y2<{93=iu>3|<051VJ!#E+DR%`@xaca?|DGu`mJ$;0NE-uT_+Ve?FX{2ubK zd1eTHPkGopvon4#dDuL&2YzpP*gP{DzmGg@o|%jvB@dft4#e*(51VJ^;`ft>%`@}y zHS(}|=4AY6dDuL2HhzpeY@Yc$eylufp1Be~P98ST+=w4951VK1z}L#d=9&BP6Xap@ z%wzb8^00a4Is7Df*gUfgKUp3&&n(C9FAtk%KE)p(51VJc!B3Hg%`?1DzBpALHqSI! zDfwyguz98xe!4ttp6P&}ArG5pR>vPG51VIrPeHLx9yZTxgr6x7n`e6AXUW6nnJw_M z(Ep4kTe0kVBa})k(dDuL2 zH~tuT*gW$f{#bd~Jo6O(ICCizq4Ve?Eo{Au#Ad8QNoba~i3Q;A<751VH;z@H%xn`e6B&yY@S()zfvAH&%A-ZN**@Pe1N}N9yZVL*^}Zm^00a4 zd;CA-Ve<^1Nhw|{51VHy+9rRUJZzq6gTG!LHqUg#-yjd0XDabG%ERWFuK0h-!{(VD z_?zTm^UP-Wo8@8i%s~7t^00YkNBphwuz6-A{x*5oJhKn}c6r!5Gai43JZzqsioa7H zHqXq)-z5*5XAZ~TEf1S#j>F$051VIB$KNXtn`h3$FP4YRGmG%|$;0NEf8g(zhs`s$ z;2)5O%`^Anm&n8BnTPQIl84PRd^V@}pge4zc^UtZJZzqM8~?C8Y@YcT|A;(np7|R8 zs61?*;d4F3$K+x2Op|uWKQ0fOXIkN(kcZ7P9q>=e!{(XJ_^0Gy^Gp@~X?fT@vl0Fo zdDuMD8~?04Y@XQ?|C~H*p4k@vygY24*%|+WJZzrX9si;{Y@VsXFO`SQGZXPI$;0NE z8TgmwVe`yf{44UXd1fAdnLKQsISK!&JZzrfGfl6NF51VJ!#D6Len`hR?e51VHu z0i3-Yje<{NwydDuMj3%*PqHqSI!Ir(yV*gVq$Um*{hXI92Hm50qUYv7y7!{!;@ z1776IjZ%TlGkk`w*g_sQ&veJPl!whT{qU{iVe`y3_}22Ud1eRvO7gIIW(2;CJZzrf zb9u$K^00Y^&*&A~$;0LuKCf5gi<(k_%`>y`E6c;?nZxnC@jMmSJj3VsimS-O=9$y* ztIEUXnRD^0$;0NEOYj}#Ve`z@_)hY$d4|sn7FU;t%`!X|51VKB>_XAxVe`y}_%8CWd8Q}6t2}I;>4)bFy;6bAGuz-d zl!whT+v7Kqhs`r1@ZIEL^UU7(jpbqU%ou#NJZzqsjNe2aHqX@IyUWAonM3hC)f~S%~LL&QgKRGgsjI%ERWF>+yW>A{E#?a~r;&JZzp> zjNeQiHqShS-&`Ix&pd_SLLN5HyoB#B51VJ+!fz=Ln`b`6ZzT_#XTHR5Ef1S#e!vfq zhs`s5&a}9VJZzq6x=Qi`GP_BZ%(M8t$IHX!neO;n zdDuMD4?jU3HqZ3OpC}KTXGY);kcVx5@jmz|4Q!qnkDn?Jn`frrr^&z1&@UEEJfD)Lj{DrIJ* zKUISpxQqMq$(*kFFNC*KW>NZ6HBlb!;{Mgd(f&8#$;vEGTvgY=UEK3Fqi7Fr2`bD| zCQGOORR=Y27x$|qANfx3TxHfIe^>)|ai3MsoI7>an6c^atUCRj6f~>$;8|Jq_%XA_ zWYuG5&djRoYNw2;##YzWO|F?asjjB3c4lqL{B^>lx;g)S0{56cqjp+anCAM|`!RV& z-Sly_|GBKX+0$w!O`bTZX2zJAGixSHo-(VpF8ga!rq)iK*>Ly2v~t{(=`(9nE2pzm zI@-Isw>Nrx?bz89Yo<&empWR)F=NNp)z10L)XCE(O#h3h8#8TUZ5j{VBh4?X9yfjJ z)Y@rjD5g!HRa?E?&bw_qbJmz~2mIx3QzlQN6%3;8IiYUMRLta=)q(SzJ+A#dalf;H_kB+N|$s?Z>!7xcex%Z(|EbFl8X|{?UqD& zx()CN4>vDl3lh^FJh$|6W41%O<>z-zs&ANXQDS~WlE}|**A|6rXmZStF^Kt%OPrtI zi>dy6xn1%S~@5s9)~i6X)l5W4kQtpInrfAIG8m{Kl`c^f3X7C`{wFU8CHeW3nuDrM^UNxaVTRW@Cf&mmH<`zvLdGqh2C6Izhf4*WXmgcHK<< zSTkj#A9EVb@3*why2VU9$E*)*G`}oem!!?>rfF+?j&V6Uxinle5|&EWx#@coqLTim z$)&>I*k%#4Qm%XIb1^ZWFQR>HkLj(I_4{tZ?27ch^U94Om6%`JEdP=lp01CkO`*O7 zjum??cHy)9{o1$-KVm$d&%hk9^Je5?c2AqvPX{|-Fuh(=$1zg z8MbYq5Obn0-_`er1wEej3yw27Mt4oyOKF4M?Drk!ZJlLDZTXFx?TkmS-#n|@ z@U}nBs;FqP>bA|Ue&mmZW13wvq|oJ>5C3@c-7eQx6b@hQn^jxw{X>&GE3&NF)fL&& z6(6>1{qE80KeF}G*&nqV_UY0UAGK?}qSfsc6&=#aT~+lXTcxi_`ugN^hm>=Va507^0Rmv@$ z^GdrjDpq;#>78jw`&_-G%ceFd}*hk7%dGGzRU;g9R=Ixucy7-gSCVJSb z>FwF@BUVZ6d1&@4dzO|pWa;eNn|G*qq^v{JV}8B0=^fb#V{c8V1!D)TxN`Iv6(_vc z>Y^3>%hHG+z5d`o$E|vMHuBipD{nggytJM^J}Uj^rI76%7=N2&3-XU-C7s+xF+Kh! z*DW~yCYRetWy`Ym<(EXDEIaJTeC3GxN+H{~A=Eyr_v!8pmH(P3WMjg|-~XX)|Iyy2 z*~RQ}_2qxK-+$|Sy(_dYtly?XMOmA69Xq#aUsyTq#Z9V{T)F9hPUj6=y{ygVt+r^@ zW%cblY@N>8%PO)a9i_O;Ro**m(y5_Zk*c|=O?zi+uGBEKS?{c&(tN#C*{W5mR_Rz# zC@`;<>t@?`*fiB!F{xFntrE6wn_QNy)S-|}1r5ovHY=sc+jpSSFIC&-s%a-`XQg{& zC#U^gLsMSb^Et@TEX&Q(XIwgcsVHwpBpWv+ zox@kosjZtidHS@<9zCnOSNEvwI&AW^gDVG)nOR#oa{7c>2aTz#-FT-#yH)n6?vXOV65Zrc9h(H+j~ishbQPvHPgf z<3u)O^HEbLPfJgk#vd?hrq6lQxas3-M`5PVo;73ktWjgr(~9wPM~xXby{^_PSv=25 zv#A;GPmLx_nLcJ#wqsUPv(1PR+w4^{a{Il9)a<&~@F6ud*^F(*kC`!R@|@b5x+ycW zJ+nQs;n|)wW5$oK%O~bEuj$<7~p<+L@EnO6YI==1c=F6_|7_aqZ0hW6TsAkW?Vc7er)J8Ssbj~F`F}CIAEiB@ zEITW$p+e!;v}dKqNmf_775<+N;;8!dmEeEB%Cb!BEG=?qUCq?#v(g4qJxLGH6{Y>N ztVN-sNy{=mPE@E^y^N0=6)Jl8-(LQ=V;LWhDO7CIX!`nPhnIYlrfC}`ux`_`iW00A zX4R%;Ce&6@h$s>3vGTGphL?c`J9zGY=)C138odE8^AxQB&l*R<@&QnsaM z%e~&h+fh|^NNIXm+#}7SRmrRprcL8{l=(c``aD`jvUM!KjVD_BQsW*i%UYD?T^aXi z8}n|~sD0gh~Yc{&)fAlD|s$FTR#h6!pk6JWpUwa?fG9URWpWgXD z?%BD~Jqu;cSw_00?ONxhf2LBFzTvj8Qj<2rlTS}M{!#|cE1b||VC&McYnvU@q|(KL z^cB?!%iC4d&FR&1a?csvYo_ww1pXVxe+Q>)4F^vh)1w~8HsH8~e^~~V)SUWKo_+IY zeI-F^U%r~^^$$}eU)Jyl<@LXu1Ei@He3Uv@{(GJCbQMi+c$%jA8Zp`D$MX*rO|Oiq zPhYQ5-5S*!&dPNE>PFKWo?mJDR*j|)XjC8Es6Mn&oogH_n%~Y*_4cyei^fVWT?NBJ%U&SK*W+9JMsp~yzlNlll$Wk`ln&}8QC_<4nm^uclKgmu)BhFOrs@Afa{U{S>iPYd zW6hj&Q>jR&eOZ>@-*`Ha-yg=LdVc%fKh^Ww=gd_9I^9$%GL9wr?d8~1&#zC89jD~l z$MfQbQjuMmD*NT8-;nD0``@1G`Qt15e!f2sr+T||Q>n6QczlxTKc$;Wx+IVwKORiWZ@)YQ9^q-$2m5+{{M)5^e*G|(`QuS#s^`bQYpUnR zmwh)szWq|Yp|mbt|J$ryw9Xp#HDudt|CFDWn?5(y^V{dKseW~Cdc!niv+U9|eOYe$ zO{t!q=z3|E-IwYO$FtTMZ-ea;lhgfQPxV#PO{F!L^|CFZnx^wMx`yLj>#SLmEZZeF zeU()2lDj|G&Hq(Dy>-UhJjT`6n`Hx1oiS5so$+#d&s=?Us^1xt)AD)wb8v3@;i=xx z-)0#vWp10BeqpMAp1c3mslI(~`kkrXaFWz4dpOk_j*qRgmr}i|KHn^RFV%OhueZ*= zP4!Ld>*?r`p5za&ueZ+lF2<3$dS$BLTi>46*(Ry}P_E9`IRB8V@0{u%=IZ;V`p3CC zUq}3Du6|gmH}to4c1o&$o10#b3CjF=c{r{p59krlGr_=t>6y0wO)uh=>OEsZUl)D+?`HnDN8F=F+@(iE zd-RG-gnLG~C*cXRr;V!_TRU;`G}<$3>Wn_joWIN={q;Yk`J}3+m`AG7u=IyzP-BKv z{XV@mRlSe<9zN?*<5I4#&#Wg+<9=T6<+Ds4#518Qs1>$+2F zQ)W!vtVR*qSL$KywDFB5(dPPBM;lF}-SyL0On#|!rhXy|$WNr@^%Ge{ej>wCKattw zC$h|3{Vy}3lAG3}U!ywXR6k>uk_-2wZ}k%!Ev2+A)K6?Q+tOxNKe5re==qoN>(OWc zOIt$yT}zv1zDbSx)3Z^N8x2jPsiiG3H@8NuZq&}kEoc*$bQ4MCon8{OgxpNDD&?!&*d@nx$aNg73JsiGg;x%?x2oB#jacB2%c+QX3 z*dzUy3LJh?;?C~j@SH=e!HG~RaQMd)cXkhl=kYw+35VxAr^7WVmTs8-DXRTCPxi*q@CqC6bF1Ku-m_>Oo6H5E8~m&B2W!*7J2oc>D%4$rwkcN_51K} z_<49g5re~@g!gvB;ZMU)PyeL?hd(EA6%9!R4u3)7sspiE28X{aaaA2Qeb0Nkg}*9s ztS>nHo%osQzf|DxoMTkc(Ny5@4=0ZHz~R|ns%EGEQh~!SOC0@z!@q%_lm1Hu4$rwq z)j?RDhlKxks#hIc(it3{bFXL*9KI}V^D#bf__jF@hwp%&tNFv>Id=;WhvytM#u*OJ zxm6Q1NOoPrOoDBi#yYXsN87ZUx^ri;1iJ zi3uF@XCI7AX&>}Vejn^X=E(G4D*e-~a1@kf1JbQ956aTZ42kELuynp&I9kl1t#FK( z!&c!~F}r%?T7ETr446~!8 za(lWJPA_4$1YRI!`z)LxehxlUyc9l5{5H(NIF)SQZ=3#01-3RNEIkJ)wrgPX%vVVj+snh|nIG}&1gXIBI}nU{{0;Jj1J##nt6u^URibcGgs2 z^UM%@XL&e&Phuzhn(}b`p2TkWwdCRWJqfO%#P3PK@p}>z@#`oL$L~qZz*ow{@p}?n zA1JOX51VJ^;fwOHdFDiXl{{>oIRn3*JZzr10KdLGY@WFcZ}PBt<~lqFtyEz1%x(Ct z^00Y^>k-8bTibwDp%ERUvu2;nGQo!-M6ffhuDG%F5;@sT?#mUmx8y|$L~_W@w*hf?LB^%0*>FM;O)=xyA*KzE(O2^7C74$}vAq z)na~+Cr(4lFqTTcG{0d{Nq=Km{LM8xJ0|58q}!^=UzKjmuU)#eNVhb<`m#z2EX|3S TA8p9#?2FXC*X!@qu-yLzc@R2P literal 0 HcmV?d00001 diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/pah8009_testpattern_SPO2.h b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/pah8009_testpattern_SPO2.h new file mode 100644 index 000000000..d8d9d4950 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/pah8009_testpattern_SPO2.h @@ -0,0 +1,257 @@ +#ifndef _PAH8009_TESTPATTERN_ +#define _PAH8009_TESTPATTERN_ + +#include +#define NF_PPG_CHANNEL 2 +#define NF_PPG_PER_CHANNEL 81 +static const int32_t PAH8009_rawdata_SPO2[][NF_PPG_PER_CHANNEL*NF_PPG_CHANNEL] = +{ +{1,44,1413227,1375343,1847643,1787527,1849059,1795619,1850643,1799035,1853773,1804053,1855985,1807487,1857211,1810045,1858155,1811489,1857549,1810013,1856203,1807653,1855885,1807985,1856225,1808433,1856443,1808915,1856873,1809501,1856415,1809469,1856153,1808027,1854979,1805393,1853881,1804191,1853475,1803313,1853703,1803495,1853817,1804027,1852163,1801415}, +{1,50,1849833,1797659,1848117,1794425,1846501,1792429,1846933,1794465,1848347,1797081,1847485,1795507,1845053,1791709,1845377,1792531,1845089,1792009,1844055,1790507,1844639,1792275,1845127,1792257,1844247,1791883,1845803,1795625,1848153,1799679,1848469,1799821,1847757,1799101,1847791,1798791,1847717,1799383,1847285,1799295,1846165,1798421,1846711,1799119,1846979,1800181,1847917,1802373,1850389,1806013}, +{1,54,1851247,1807949,1852643,1810447,1854655,1814097,1856243,1816695,1856223,1816223,1855313,1814589,1854833,1813203,1854871,1813909,1855589,1815461,1855909,1816625,1856441,1816653,1856433,1816745,1856403,1816085,1854765,1813617,1853649,1811729,1853635,1812979,1854253,1814335,1854801,1814861,1855735,1817119,1856677,1818893,1856001,1817823,1855067,1815591,1854373,1814907,1853907,1813719,1852421,1811229,1851319,1809519,1850537,1808687}, +{1,54,1850007,1808285,1850491,1808867,1851353,1810153,1850677,1808535,1849503,1806183,1847779,1803439,1845305,1798249,1842229,1794125,1841311,1792951,1840299,1790817,1839801,1790775,1839609,1791541,1840653,1792959,1840111,1792037,1838781,1789819,1838071,1788025,1837549,1786829,1837177,1786199,1834709,1782813,1835469,1783903,1837155,1788265,1838507,1791097,1839841,1792945,1841147,1795599,1842109,1797251,1842343,1798043,1843101,1799101}, +{1,52,1843105,1799891,1843259,1800647,1843283,1801331,1842971,1800695,1843171,1800911,1843061,1801429,1843091,1801291,1843385,1801803,1843243,1802025,1843955,1803115,1845053,1804645,1844847,1804419,1844275,1802959,1844563,1803241,1844051,1802191,1844389,1802653,1844789,1803795,1845123,1804267,1845465,1804429,1845769,1804835,1845421,1804775,1844911,1804409,1844629,1804201,1844617,1804613,1845049,1804889,1845049,1805099}, +{1,54,1845203,1805421,1844861,1805319,1845265,1805971,1845519,1806249,1845809,1806711,1845999,1807367,1846361,1807837,1846561,1808147,1847089,1809035,1847853,1810107,1848437,1811271,1848687,1811447,1848663,1811475,1848819,1811293,1848815,1811405,1847765,1810337,1847277,1809779,1847415,1809381,1846875,1808739,1846289,1808049,1846243,1807663,1846263,1807911,1845817,1807357,1845631,1807343,1845983,1807737,1846023,1807371,1845827,1807367}, +{1,52,1846061,1807943,1845723,1807769,1845883,1807671,1845831,1807777,1845765,1807449,1845733,1807487,1845631,1807823,1845133,1806927,1844505,1806271,1844083,1805967,1843839,1805569,1843705,1805473,1844097,1806027,1844243,1806141,1844395,1806617,1844113,1806423,1844341,1806709,1844363,1807205,1844527,1807439,1844603,1807187,1844567,1807015,1844563,1806931,1844247,1806691,1844457,1806229,1844533,1806451,1844537,1806307}, +{1,52,1844555,1806299,1843955,1806475,1843797,1805597,1843233,1805593,1843451,1805647,1843265,1805505,1843037,1805499,1843121,1805159,1843229,1805383,1843029,1804627,1843313,1805051,1843019,1805145,1843261,1804877,1842989,1804949,1842807,1804521,1843091,1805135,1843381,1805241,1843323,1805171,1843523,1805439,1843737,1805711,1843861,1806105,1843411,1806039,1842957,1805241,1842411,1804437,1842521,1804595,1842225,1804201}, +{1,54,1842265,1804225,1842225,1804141,1842091,1803731,1842001,1803837,1842331,1804307,1842349,1804483,1842811,1805057,1842709,1804691,1842997,1805397,1843061,1805025,1843003,1805237,1843179,1805291,1843309,1804907,1843287,1805309,1843237,1805263,1843353,1805513,1843121,1805413,1842015,1803891,1841531,1803513,1841903,1804169,1841713,1803343,1841855,1803643,1841597,1803495,1841721,1803983,1841979,1804191,1841961,1804663,1842237,1805463}, +{1,52,1842841,1805611,1843219,1805829,1843215,1806035,1843643,1806543,1843665,1807081,1844097,1807349,1844393,1807677,1844555,1808157,1844457,1808143,1845213,1809151,1844893,1808913,1844453,1808725,1844261,1808397,1844083,1808377,1844029,1807939,1843945,1807671,1843379,1807363,1843327,1806831,1843163,1806443,1842717,1806451,1842935,1806207,1842847,1806623,1843341,1806843,1843117,1806631,1842887,1806461,1843239,1806761}, +{1,52,1843491,1806813,1843455,1807039,1843207,1806913,1843179,1806881,1843535,1806961,1842847,1806401,1842167,1805047,1842027,1804743,1841633,1804475,1841295,1803827,1841263,1803435,1840961,1803563,1840957,1803337,1841055,1803563,1840755,1803551,1841335,1804649,1842085,1805085,1842247,1805269,1842033,1805263,1842063,1805325,1842263,1805527,1842563,1805681,1843101,1806203,1843291,1806545,1844207,1808087,1844433,1808143}, +{1,54,1844493,1808715,1843847,1808245,1844033,1809131,1844385,1809343,1844457,1808979,1844433,1808869,1844073,1808139,1843385,1807065,1843145,1806497,1843803,1807307,1843051,1806933,1844003,1809509,1845831,1812717,1847551,1816579,1851097,1823331,1860321,1839875,1866743,1849125,1865911,1843927,1860507,1835367,1859875,1834775,1858871,1833191,1857559,1830255,1854361,1824619,1852367,1821855,1851795,1820705,1850731,1818609,1850629,1818733}, +{1,52,1852007,1822665,1852347,1822961,1851195,1820025,1850279,1817891,1848753,1815595,1847853,1814407,1847935,1814333,1848401,1816057,1848725,1816107,1848753,1815591,1848549,1815471,1848717,1815887,1849229,1816815,1848961,1816479,1848807,1815707,1847681,1814379,1846801,1812689,1846111,1810819,1843763,1806849,1840543,1801615,1839751,1801757,1840755,1802973,1841277,1804533,1840179,1802529,1840005,1801457,1840333,1802113}, +{1,52,1839583,1800437,1838631,1799091,1838427,1799267,1839369,1800713,1839779,1801687,1840619,1804035,1841259,1804479,1841405,1804525,1841135,1804127,1841249,1804447,1840529,1804373,1840391,1804179,1839897,1803301,1839635,1802829,1839387,1802491,1839369,1802159,1839377,1802149,1839271,1801763,1839453,1802063,1839409,1802091,1839343,1802141,1839449,1802299,1839911,1802955,1840165,1803041,1840579,1803235,1840957,1803901}, +{1,54,1840957,1804053,1841015,1804355,1841415,1804557,1841627,1805273,1841847,1805861,1841179,1805361,1841343,1805159,1841357,1805579,1841353,1805249,1841153,1805343,1841231,1805547,1841491,1805587,1841633,1806263,1841685,1806429,1841651,1806705,1842211,1807541,1842779,1807939,1843069,1808897,1843483,1809417,1843837,1809717,1844225,1810343,1844371,1811299,1844701,1811483,1845013,1811833,1845563,1812531,1845239,1812135,1844749,1811935}, +{1,52,1844875,1812555,1844835,1812143,1844691,1811903,1844741,1811959,1844491,1811669,1844505,1811673,1844443,1811543,1844435,1811445,1844101,1811371,1844163,1811027,1844233,1811177,1843949,1811133,1844233,1811133,1844221,1811021,1844069,1810507,1844051,1810775,1844061,1810745,1844051,1810749,1843349,1810309,1842981,1809331,1842705,1809183,1842441,1808973,1842451,1808739,1842345,1808835,1842219,1808761,1842411,1808559}, +{1,54,1842157,1808645,1842139,1808919,1842389,1808895,1842463,1808749,1842335,1808767,1842407,1808839,1842527,1808295,1842543,1808405,1842563,1808735,1842229,1808049,1842567,1808585,1842535,1808383,1842411,1808495,1841747,1807763,1841427,1807067,1841277,1807089,1841295,1807213,1840813,1806619,1840951,1806783,1841151,1807095,1841019,1806927,1841053,1807181,1840885,1807043,1841227,1806959,1841073,1807035,1841063,1807181,1841215,1807417}, +{1,52,1841459,1807145,1841449,1807199,1841393,1807067,1841415,1806979,1841509,1807187,1841507,1807269,1841729,1807481,1840863,1806965,1840663,1806083,1840347,1805851,1840275,1805935,1840177,1805587,1839961,1805841,1840045,1805471,1839875,1805569,1840161,1805727,1840281,1805785,1840409,1805607,1840463,1806087,1840779,1806397,1840677,1806737,1841009,1806767,1841183,1807029,1841241,1807131,1841197,1807195,1841343,1807293}, +{1,52,1841673,1807403,1841477,1807223,1841063,1806543,1840397,1806369,1840027,1805805,1839885,1805675,1839769,1805283,1839823,1804973,1839867,1805033,1839169,1804963,1839217,1805009,1839599,1804875,1839439,1805443,1839685,1805367,1839583,1804599,1839377,1804201,1839027,1803559,1838803,1803089,1838555,1802459,1837971,1801073,1837439,1800159,1837599,1801079,1837897,1801331,1836701,1799857,1836455,1800321,1837069,1801853}, +{1,54,1837643,1802797,1837269,1801951,1836379,1801137,1836025,1799811,1835379,1799317,1835171,1798263,1834655,1798043,1834249,1797073,1833925,1796527,1833769,1796001,1833431,1795583,1833475,1795783,1833499,1795867,1832885,1794835,1832697,1794735,1832605,1794313,1832151,1793511,1832045,1793463,1831047,1792143,1830137,1791131,1829695,1790225,1829007,1789429,1829437,1789379,1828881,1789107,1828783,1789009,1829103,1789001,1828851,1789125}, +{1,52,1829207,1789139,1829051,1789453,1829331,1789623,1829469,1789449,1829407,1788433,1828309,1786533,1827885,1785401,1826885,1783253,1826359,1782583,1826343,1783151,1825813,1781565,1824831,1780531,1824051,1779917,1823559,1779967,1823461,1779837,1824221,1781705,1824447,1781357,1823893,1781117,1823901,1780941,1823883,1781123,1824131,1780957,1823839,1781045,1823811,1780333,1823719,1780059,1823785,1780587,1824243,1781293}, +{1,52,1824133,1781279,1824061,1781059,1823835,1780387,1823857,1779837,1823781,1780479,1823985,1780725,1823713,1780581,1822647,1779399,1822121,1779229,1822219,1779113,1821779,1778493,1822043,1779141,1822127,1779127,1822081,1779237,1822189,1779195,1822481,1779691,1822655,1779935,1823117,1780235,1823349,1780897,1823763,1780883,1823977,1781445,1823793,1780467,1823777,1780327,1823715,1780481,1823367,1779621,1823461,1779755}, +{1,52,1823465,1779557,1823283,1779347,1822891,1778737,1822153,1778157,1821487,1777481,1821353,1777227,1821121,1777199,1820645,1776801,1820579,1775975,1820005,1775847,1820139,1775845,1819555,1774539,1818991,1774099,1819245,1774247,1818719,1773383,1818675,1773563,1818791,1774507,1819827,1776039,1819635,1775619,1819863,1775813,1819399,1774935,1819159,1774599,1818537,1773767,1818973,1773683,1817563,1772195,1816719,1771193}, +{1,54,1816439,1770893,1816497,1770653,1816021,1770379,1815945,1769969,1816019,1769913,1815701,1769797,1815695,1769489,1815829,1769099,1814869,1769189,1815429,1769169,1815005,1768841,1815127,1768777,1814807,1768449,1815069,1768503,1814833,1768411,1814667,1768117,1814673,1767747,1814187,1767043,1814171,1766827,1813321,1765607,1812461,1764623,1811547,1763381,1811347,1762825,1811605,1763061,1811461,1763159,1811267,1763141,1811417,1763043}, +{1,52,1811207,1763505,1811399,1763381,1811279,1762695,1811127,1762769,1810949,1762285,1810439,1761947,1810625,1762151,1810679,1761753,1810119,1760941,1810021,1760303,1809585,1760031,1809807,1759923,1809531,1760353,1810315,1761195,1809123,1759887,1809127,1759245,1808331,1757739,1807961,1757407,1807691,1756865,1807641,1756431,1806881,1754813,1805857,1753145,1805035,1752749,1805217,1752675,1804987,1752327,1804667,1752295}, +{1,52,1804585,1751465,1803327,1749265,1803413,1749487,1803309,1749749,1803243,1749473,1803393,1750037,1803025,1749159,1802261,1747897,1801561,1747231,1800863,1746159,1799649,1745263,1799405,1744755,1798743,1743721,1798005,1742265,1798061,1742259,1797767,1741831,1796901,1740061,1796891,1740181,1796599,1739815,1798083,1743175,1799139,1743641,1798311,1742347,1797813,1740889,1797559,1740953,1799387,1743481,1798947,1742593}, +{1,54,1799303,1742917,1799445,1742663,1799517,1743083,1799889,1743079,1799733,1743379,1799933,1743517,1799961,1743591,1800597,1744391,1801647,1745711,1802941,1747685,1803389,1748443,1804265,1749357,1804725,1750605,1805401,1751169,1806089,1752397,1806809,1754191,1807241,1754333,1807415,1755207,1808975,1757327,1809331,1757363,1809041,1757489,1809379,1758127,1809705,1759277,1809865,1759227,1808869,1757333,1808459,1757331,1808091,1756473}, +{1,52,1807045,1755147,1807231,1755243,1806873,1755451,1806761,1754827,1806757,1754295,1806217,1753817,1806027,1753769,1806401,1754069,1806711,1754661,1806859,1755233,1806933,1755225,1807365,1755345,1807071,1755757,1807251,1755761,1807623,1756141,1807495,1756057,1807387,1755677,1807371,1755835,1807757,1756141,1807543,1755461,1806361,1754421,1805533,1753405,1805511,1753201,1805605,1753187,1805401,1752729,1805263,1752781}, +{1,52,1805613,1752315,1805137,1752665,1805399,1752813,1805449,1753159,1805729,1753197,1806223,1753723,1806507,1754129,1806973,1754699,1807193,1755253,1807833,1755965,1808139,1756455,1808989,1757391,1809501,1758191,1809683,1758837,1810497,1759453,1810839,1760163,1810781,1760455,1810839,1760599,1811329,1761517,1812057,1762755,1811983,1762155,1812405,1762877,1812733,1763441,1813155,1764143,1812799,1763593,1812693,1763099}, +{1,54,1812481,1762807,1812405,1762063,1812249,1761607,1812057,1761435,1812155,1761647,1811813,1761203,1811925,1761757,1811969,1761647,1811403,1761043,1811723,1761365,1810887,1760215,1810353,1759897,1809919,1759359,1809891,1759121,1809359,1758787,1809403,1758791,1808939,1757795,1808829,1757503,1808451,1756935,1808371,1756989,1808229,1756681,1807947,1755785,1807993,1756061,1807975,1755867,1807775,1755789,1807797,1755511,1807659,1754985}, +{1,52,1807571,1755303,1808317,1755933,1807913,1755669,1807827,1755669,1807589,1755723,1807089,1755683,1807089,1755355,1806965,1755235,1806689,1754925,1806067,1754607,1806019,1754393,1805933,1754103,1805657,1753807,1805565,1753949,1805707,1753847,1805747,1754023,1805729,1753903,1805827,1754413,1805801,1754563,1805921,1754255,1805897,1754011,1805921,1754429,1805871,1754121,1805919,1754323,1805671,1754277,1805263,1754413}, +{1,52,1805209,1754227,1805897,1755557,1806035,1755549,1806173,1755697,1806917,1756611,1806969,1757139,1806929,1757599,1807535,1758705,1807847,1759115,1807765,1758737,1807761,1759143,1808165,1759313,1807975,1758823,1807067,1757647,1807303,1758459,1807947,1759133,1807415,1758703,1807023,1758117,1805867,1757439,1805501,1756357,1805079,1756339,1804715,1755955,1804569,1756201,1804279,1755947,1804421,1756037,1804527,1756601}, +{1,52,1804421,1756603,1804003,1756661,1804229,1756589,1804137,1756763,1804239,1756745,1804127,1756897,1803851,1756615,1803973,1756601,1804061,1756971,1803985,1757065,1803905,1757175,1803039,1756335,1802317,1755469,1802149,1755613,1801841,1755233,1801673,1754699,1801405,1755127,1801317,1755405,1801865,1755553,1801775,1755783,1802007,1756199,1802047,1756413,1802665,1757401,1802757,1758035,1802861,1758265,1803333,1758617}, +{1,54,1803509,1759013,1803501,1758825,1803795,1759225,1803461,1759059,1802741,1758075,1801625,1757051,1801379,1756855,1801095,1756713,1801011,1756625,1800729,1756575,1800587,1757069,1800615,1757869,1800587,1757725,1801113,1758269,1801113,1758713,1800655,1757585,1799911,1756633,1799735,1756663,1800747,1757825,1800325,1756675,1799329,1755123,1799205,1755179,1799257,1755341,1798751,1755963,1798707,1756185,1798551,1755997,1797879,1755225}, +{1,52,1797367,1754219,1796909,1753631,1796335,1752809,1796371,1753193,1796439,1752919,1795339,1751653,1795025,1751049,1794957,1751515,1795433,1752569,1795659,1753511,1795905,1753413,1796083,1754171,1795839,1753729,1795621,1753535,1795993,1754393,1795527,1754129,1795243,1754023,1794505,1753095,1794037,1752227,1793841,1752365,1794041,1752597,1794273,1753441,1794505,1753691,1794229,1753579,1794331,1753715,1794029,1753835}, +{1,52,1794295,1753793,1793707,1753123,1793787,1753483,1793619,1753311,1793601,1753293,1793553,1753311,1794067,1753995,1794167,1754753,1794223,1754135,1794091,1754389,1793681,1753663,1792693,1752901,1792507,1753105,1792355,1753073,1792199,1753371,1792045,1752957,1792649,1753473,1792303,1753857,1792405,1753733,1792671,1753691,1792351,1753631,1793255,1754989,1794139,1756167,1794665,1757393,1795615,1759015,1797051,1760923}, +{1,54,1797991,1762359,1798559,1763421,1799031,1764405,1799703,1764909,1799057,1764355,1798547,1763805,1798737,1763389,1798591,1763057,1798417,1762189,1797965,1761883,1797911,1762243,1798551,1762849,1797751,1761471,1797311,1760659,1797417,1760673,1797075,1760535,1797289,1760857,1797417,1760483,1797421,1760539,1797065,1760297,1797083,1760017,1796897,1760843,1797111,1760641,1796375,1759817,1796065,1759407,1795299,1758599,1794891,1757997}, +{1,52,1795229,1758153,1794979,1758241,1794927,1758215,1794753,1758163,1794531,1757951,1794695,1758301,1794971,1758681,1794939,1758113,1794869,1757941,1794863,1758579,1794913,1758357,1795135,1758257,1795121,1758229,1795145,1758331,1795241,1758783,1795439,1758945,1795717,1758843,1795145,1758755,1794829,1758243,1794325,1757997,1794269,1757651,1793837,1757147,1793867,1756763,1793707,1756767,1793947,1756901,1793907,1757069}, +{1,52,1793863,1757511,1794237,1757447,1794113,1757077,1794527,1757489,1794525,1757479,1794553,1757143,1794273,1757065,1794167,1756233,1794219,1755963,1793971,1756111,1794189,1755799,1794015,1755489,1793939,1755603,1793237,1755003,1793173,1755039,1793027,1755271,1793255,1755335,1793263,1755113,1793111,1755211,1793295,1754985,1792939,1754713,1793013,1754815,1793161,1754861,1793095,1754365,1792969,1754167,1793191,1754639}, +{1,54,1793451,1754383,1793197,1754107,1793031,1753455,1793121,1753197,1792693,1752887,1792279,1751911,1792253,1752093,1792703,1752489,1792099,1752093,1791591,1751783,1791697,1752701,1792059,1752601,1792155,1752739,1792431,1752761,1792067,1752901,1792537,1753275,1792721,1753297,1792775,1753497,1793449,1753821,1793771,1754181,1794665,1754975,1795037,1755147,1795439,1756265,1796243,1757069,1796545,1757719,1797129,1757675,1797421,1757989}, +{1,52,1797827,1758691,1797973,1759365,1797889,1759835,1797707,1759929,1798089,1760553,1797719,1759745,1797963,1760145,1798387,1760733,1797475,1759877,1797719,1760201,1797945,1760113,1797449,1759531,1797545,1758953,1797247,1759083,1797243,1759055,1797479,1758935,1797465,1759611,1797809,1759615,1797825,1760007,1798013,1760127,1798061,1760455,1798125,1760327,1798311,1760599,1798243,1760345,1797265,1759101,1797247,1759037}, +{1,58,1797381,1759389,1797111,1758861,1797007,1758981,1796897,1758719,1796803,1758561,1796629,1758353,1796679,1758385,1796871,1758779,1796733,1758215,1796683,1758241,1796821,1758251,1796949,1758399,1797217,1757969,1797221,1758569,1797319,1758283,1797675,1758897,1797475,1758991,1797933,1759147,1797947,1759319,1797337,1758603,1797155,1758227,1797247,1758575,1797071,1758301,1796851,1758195,1797163,1758279,1796999,1758539,1797443,1758195,1797407,1758985,1797523,1759019}, +{1,54,1797665,1758957,1798177,1759151,1798279,1759715,1798257,1759849,1798347,1759957,1798085,1759513,1798725,1760179,1798381,1759415,1798631,1758657,1798133,1757821,1797741,1757073,1797115,1756099,1796243,1756261,1796673,1756537,1796193,1756149,1795713,1755589,1796811,1757377,1797029,1757761,1796433,1757651,1796611,1758049,1796941,1758911,1797003,1759107,1797399,1759213,1797483,1759619,1797973,1760635,1798445,1760547,1798707,1761071}, +{1,52,1799277,1761591,1799209,1762007,1799747,1762487,1800085,1763007,1800473,1763689,1800161,1763315,1799281,1762309,1799427,1762225,1799285,1762189,1798857,1761577,1798671,1760497,1798751,1760641,1798501,1760441,1798503,1759999,1798485,1759943,1798421,1760427,1798507,1759929,1798729,1760695,1798759,1760803,1799001,1760787,1798863,1760853,1799271,1761001,1799417,1761055,1799539,1761569,1799453,1761439,1799939,1761785}, +{1,52,1799521,1761459,1799089,1760973,1799063,1760833,1799165,1761269,1799197,1761375,1799115,1761385,1799119,1761357,1799431,1762063,1799201,1761749,1799539,1762119,1799779,1762307,1800183,1762571,1799943,1762585,1800245,1762687,1800507,1762937,1800815,1762705,1800153,1761703,1799965,1761459,1799775,1761463,1800245,1761255,1799463,1760381,1798795,1759877,1798223,1759481,1798399,1759619,1797981,1758723,1797529,1758127}, +{1,54,1797773,1758939,1797609,1759523,1797559,1758847,1797547,1759313,1797853,1759703,1797737,1759285,1797625,1759403,1797621,1759287,1797315,1758769,1797235,1758349,1797071,1758349,1797053,1757913,1797129,1758529,1797079,1758487,1796995,1757601,1796661,1758003,1795985,1757139,1795833,1756439,1795385,1756513,1795277,1756237,1794699,1755395,1794647,1754749,1794263,1754773,1794245,1754819,1794165,1754841,1794481,1755679,1794903,1755807}, +{1,52,1794625,1755947,1795273,1756347,1795101,1756915,1795403,1756917,1795127,1756865,1795403,1757271,1795659,1757553,1795611,1757319,1795523,1757197,1794793,1756527,1794047,1755617,1793775,1755553,1793823,1755307,1793357,1755129,1793289,1754855,1793255,1754727,1793405,1755159,1793295,1755351,1793335,1755091,1793449,1755155,1793713,1755899,1794673,1757867,1795135,1757937,1795539,1758279,1795975,1759213,1796069,1759687}, +{1,52,1796651,1759951,1796531,1759435,1796831,1759809,1796203,1759315,1796145,1759375,1795647,1758913,1796029,1759623,1796669,1760941,1796847,1761305,1796799,1761905,1797447,1762993,1797381,1763315,1797489,1763569,1798253,1764323,1798027,1764683,1798155,1764631,1798285,1765205,1798461,1764483,1798137,1764147,1798227,1764217,1798097,1763989,1799093,1766027,1799693,1766979,1799867,1767313,1799303,1765971,1798503,1765287}, +{1,54,1798307,1764545,1797951,1762859,1796985,1760899,1796723,1759923,1795953,1758823,1795443,1758565,1795571,1757899,1795531,1758375,1795553,1758657,1795931,1758991,1795749,1759015,1795917,1759203,1796105,1759485,1796149,1759805,1796439,1760077,1796647,1760847,1795843,1760169,1795723,1759507,1795759,1759849,1795887,1759327,1795799,1759411,1795665,1759475,1795647,1759827,1795957,1759475,1795777,1759623,1796025,1759873,1796037,1759975}, +{1,52,1796411,1760465,1796949,1761305,1797151,1761693,1797209,1761859,1797519,1762475,1798107,1763275,1798577,1764179,1798555,1763559,1797825,1762927,1797563,1762803,1797861,1763227,1797271,1762681,1797409,1762409,1797541,1762711,1797527,1762651,1797239,1762659,1797439,1762603,1797333,1762863,1797541,1762637,1797289,1762525,1797537,1762531,1797351,1762169,1797573,1761901,1797083,1761043,1797367,1761623,1797621,1761873}, +{1,52,1797069,1761279,1796973,1761463,1796817,1761251,1796341,1760013,1796203,1760165,1796109,1760417,1796381,1760849,1796693,1761665,1796749,1762427,1797123,1762151,1797207,1762723,1797189,1762507,1797507,1762963,1797247,1762963,1797439,1762715,1797345,1762151,1797163,1762137,1797283,1762127,1797269,1761891,1797275,1762087,1797221,1762317,1797551,1762243,1797199,1762437,1796967,1762469,1796577,1761907,1796891,1762031}, +{1,52,1796879,1762087,1796475,1761633,1796335,1761369,1796221,1761323,1796229,1760927,1796153,1761189,1796033,1761195,1796261,1761369,1796469,1761509,1796653,1761787,1796653,1762295,1796705,1762353,1797003,1762373,1797435,1762933,1796999,1762913,1797213,1762739,1797319,1762451,1797275,1762415,1797029,1762161,1796643,1761667,1796665,1761683,1796581,1761725,1796493,1761791,1796331,1761933,1796933,1762189,1796705,1761861}, +{1,54,1796393,1761875,1796577,1762031,1796785,1762059,1796927,1762581,1797395,1762817,1797349,1763037,1797311,1762709,1797705,1763311,1797773,1763181,1798243,1763395,1798337,1764331,1798319,1764243,1798777,1764225,1798547,1764299,1797991,1764139,1797627,1763685,1797763,1763559,1797817,1763385,1797261,1763007,1797181,1762803,1797279,1762903,1797123,1762785,1796995,1762405,1796875,1761985,1796715,1762127,1796755,1762299,1796795,1762247}, +{1,52,1796705,1761915,1796639,1761781,1796781,1762017,1796567,1761625,1796635,1761759,1796767,1761637,1796937,1761569,1796915,1761163,1796447,1761505,1795793,1760875,1795665,1760205,1795341,1759965,1795361,1759703,1795201,1759231,1795069,1759093,1794975,1758815,1794749,1758741,1794819,1758807,1794557,1758145,1794405,1758375,1794743,1758325,1794645,1757997,1794807,1758123,1794579,1758205,1794727,1758081,1794757,1757881}, +{1,52,1794385,1757605,1794561,1757691,1794659,1757157,1794645,1757035,1794735,1757133,1794549,1757525,1794019,1756869,1793285,1755965,1793183,1756265,1793175,1756043,1792965,1755397,1793139,1755405,1792573,1755299,1792889,1755007,1792437,1754819,1792645,1754827,1792471,1754855,1792623,1754449,1792529,1754653,1792695,1754523,1792885,1754707,1792867,1754815,1792827,1754847,1793089,1755175,1793173,1754949,1793333,1755165}, +{1,54,1793223,1754919,1793253,1755275,1793161,1754949,1793089,1754847,1792231,1754005,1792143,1753613,1791987,1753709,1791881,1753131,1791841,1753123,1791729,1753063,1791609,1753251,1791681,1752855,1791387,1752771,1791439,1752961,1791569,1752805,1791639,1752447,1791547,1752809,1792019,1752869,1791845,1753193,1792187,1753505,1792449,1753787,1792877,1754295,1792853,1754417,1793015,1754361,1793085,1754431,1793117,1754845,1793055,1754759}, +{1,52,1792707,1754499,1792507,1754283,1792915,1754739,1792681,1754707,1792783,1754495,1792445,1754611,1792783,1754883,1792657,1754647,1792635,1754231,1792965,1754795,1793209,1755035,1793481,1755817,1793771,1756199,1794081,1756745,1794263,1756981,1794367,1757439,1795033,1757721,1795113,1758629,1795901,1759047,1795817,1759439,1796159,1760469,1797013,1761309,1797127,1761781,1796853,1762017,1796891,1761851,1796785,1762085}, +{1,52,1796719,1761901,1797007,1762303,1797167,1762295,1796429,1761611,1796465,1761439,1796491,1761473,1796509,1761593,1796275,1761301,1796283,1761033,1796399,1761139,1795989,1760871,1796039,1760751,1796101,1761115,1796265,1761037,1796175,1761319,1796453,1761213,1796417,1761319,1796083,1761287,1795105,1759139,1794157,1757065,1793851,1756269,1793677,1756107,1793037,1754947,1792279,1754457,1792489,1755755,1792743,1756163}, +{1,54,1792657,1756201,1792783,1756523,1793001,1757021,1793215,1757845,1793271,1757961,1792601,1756879,1793499,1758159,1793027,1757799,1792929,1757563,1793259,1758237,1793343,1758329,1793467,1758671,1793659,1758523,1793223,1758423,1792769,1757645,1792245,1757271,1792151,1757807,1791901,1757467,1791333,1756099,1791435,1756375,1791097,1755941,1790999,1755859,1790493,1755525,1790839,1755977,1790609,1755849,1791075,1756593,1791239,1756499}, +}; +static const int16_t PAH8009_mems_SPO2[][3*NF_PPG_PER_CHANNEL] = +{ +{80, 155,370,2007,136,383,2012,170,393,2021,170,381,2016,150,376,2012,155,376,2010,163,383,2016,163,377,2015,156,367,2029,153,373,2014,161,402,1999,168,390,2012,151,385,2015,159,386,2015,167,390,2013,162,394,2014,161,391,2014,163,395,2014,166,394,2010,158,398,2010,159,396,2007,164,396,2007,162,397,2010,157,397,2008,160,403,2009,162,402,2008,162,400,2009,162,395,2009,161,396,2009,161,397,2013,161,394,2014,162,388,2011,159,386,2011,160,392,2012,159,391,2016,161,385,2015,162,386,2012,158,389,2016,161,392,2014,161,391,2011,159,394,2015,163,394,2011,161,393,2011,160,399,2010,162,402,2010,163,412,2014,159,428,1982,162,439,1993,173,352,2029,139,371,2020,162,419,2015,188,416,2011,164,412,2012,152,401,2004,165,402,1999,164,420,2002,157,443,1997,165,430,2007,166,388,2023,154,366,2016,156,396,2002,171,407,2010,162,408,2015,158,391,2010,161,386,2008,163,388,2012,163,363,2044,159,345,2022,151,404,2012,164,426,1988,169,409,2005,156,392,2018,158,382,2016,161,387,2013,157,408,2002,157,413,2008,162,400,2016,158,393,2012,158,392,2009,161,392,2010}, +{52, 162,411,2012,164,406,2008,164,407,2005,161,413,2006,165,412,2005,164,417,2005,169,407,2000,165,403,2010,160,409,2011,166,409,2008,161,412,2010,159,421,2016,165,417,2012,162,409,2008,166,391,2001,163,400,2005,164,411,2004,159,426,2013,160,420,2017,167,408,2004,170,402,2000,163,406,2003,161,410,2010,165,415,2010,161,415,2013,162,409,2010,165,395,2003,163,392,2003,168,398,2004,154,409,2017,157,409,2017,166,402,2016,161,400,2013,160,387,2006,157,391,2010,161,396,2012,164,395,2011,159,392,2012,159,392,2009,159,396,2013,160,399,2012,158,392,2009,159,391,2010,163,386,2007,161,384,2006,155,393,2014,165,387,2014,158,384,2015,162,342,2044,152,371,2009,164,419,1993,168,420,2003}, +{53, 158,390,2012,150,377,2025,160,377,2018,166,391,2011,164,403,2010,157,403,2009,157,398,2009,156,406,2013,161,402,2008,156,393,2012,152,393,2011,161,393,2012,164,393,2011,157,387,2010,160,397,2012,167,394,2010,151,396,2014,159,394,2013,161,395,2017,163,395,2011,159,390,2010,159,394,2013,164,393,2009,158,392,2013,159,393,2006,157,398,2012,163,404,2014,165,396,2013,165,388,2007,167,396,2004,161,400,2011,161,405,2015,167,399,2000,152,402,2041,180,407,2000,145,369,2002,159,417,2022,181,384,2001,143,413,2025,169,393,2004,159,412,2020,167,399,2006,160,399,2009,165,396,2003,161,410,2010,169,413,2006,168,412,2008,158,418,1996,163,441,1985,179,390,2022,155,380,2030,163,399,2005,175,415,2011}, +{52, 169,408,2005,161,400,2006,162,403,2009,171,408,2008,165,413,2009,166,417,2015,169,418,2012,172,406,2005,160,429,1989,167,441,1995,177,411,2006,158,409,2022,158,408,2010,173,400,2006,174,388,2003,161,392,2019,164,408,2011,166,419,2012,167,411,1997,161,417,2006,166,420,2009,163,395,2011,156,399,2000,165,410,2006,170,424,2015,166,420,2016,167,418,2011,167,417,2010,168,415,2006,163,423,1996,164,446,1991,175,396,2016,162,398,2019,161,429,2006,164,459,1984,170,422,2004,165,370,2017,157,368,2018,164,398,2000,167,404,2007,167,406,2008,159,402,2014,152,397,2013,159,388,2022,159,372,2026,151,408,2003,165,411,2000,159,399,2012,154,386,2010,153,393,2017,158,378,2014,157,383,2018}, +{52, 155,398,2007,160,397,2012,152,392,2014,159,379,2016,155,393,2018,153,407,2007,161,402,2010,153,391,2014,150,388,2011,154,391,2012,159,391,2010,154,394,2013,157,393,2011,154,390,2013,155,390,2013,155,391,2014,153,393,2015,156,381,2014,163,367,2031,147,382,2011,153,421,2002,169,415,2006,149,400,2016,154,399,2015,159,395,2008,152,392,2008,149,399,2009,161,404,2012,162,402,2012,158,395,2008,155,398,2008,157,403,2012,158,405,2011,156,401,2011,158,405,2009,158,401,2012,158,402,2011,159,399,2008,156,401,2011,158,402,2009,154,403,2009,155,402,2011,158,400,2010,158,402,2009,160,400,2010,154,399,2011,153,399,2009,156,400,2011,157,402,2013,153,399,2012,155,399,2011,158,399,2012}, +{53, 157,401,2011,157,398,2012,155,398,2011,154,396,2009,154,402,2011,159,400,2012,156,399,2012,159,398,2011,157,394,2008,155,399,2012,158,399,2011,155,398,2014,156,397,2011,156,398,2014,157,394,2009,155,395,2011,156,395,2012,156,393,2008,155,395,2014,157,398,2012,155,396,2013,154,397,2012,159,399,2014,158,392,2009,154,394,2011,157,395,2010,156,397,2015,158,400,2013,157,398,2012,156,397,2011,158,397,2009,160,395,2010,156,399,2011,158,402,2011,158,404,2012,157,401,2011,156,402,2012,157,404,2008,159,404,2010,158,403,2011,157,402,2012,157,404,2009,158,406,2010,160,405,2012,156,403,2011,156,401,2010,159,403,2008,159,404,2010,159,408,2010,158,408,2012,159,405,2010,157,397,2006,160,406,2012}, +{52, 160,407,2009,154,407,2013,160,403,2009,160,402,2008,159,405,2012,157,403,2010,156,404,2010,158,405,2010,157,407,2011,159,405,2009,158,402,2010,159,405,2010,160,406,2009,158,406,2012,156,408,2011,157,405,2008,159,405,2010,162,406,2007,156,404,2009,157,405,2008,159,405,2010,160,408,2010,157,405,2010,156,405,2008,161,402,2007,156,407,2014,159,405,2006,154,405,2013,158,410,2012,159,403,2009,156,405,2009,161,403,2006,157,405,2011,154,407,2012,157,404,2011,155,404,2013,158,402,2008,158,402,2013,157,403,2011,158,402,2009,157,402,2010,157,405,2011,157,406,2009,155,406,2011,156,406,2009,155,405,2011,159,404,2008,157,404,2007,157,407,2011,159,406,2008,156,407,2012,161,405,2007}, +{52, 157,406,2009,156,406,2011,159,408,2011,160,407,2007,158,408,2009,160,404,2011,158,405,2008,157,404,2008,158,407,2014,157,405,2011,156,408,2010,157,405,2007,158,407,2011,159,407,2009,156,405,2010,154,404,2007,158,407,2008,158,408,2009,158,405,2009,157,405,2007,158,405,2010,158,407,2007,159,407,2010,158,405,2009,155,406,2007,158,406,2008,157,409,2011,160,407,2006,156,406,2009,160,404,2005,154,405,2011,160,411,2012,157,407,2010,155,406,2011,158,402,2010,156,404,2006,161,408,2012,159,407,2006,154,406,2011,158,407,2011,159,405,2011,158,405,2010,156,404,2008,156,406,2010,157,408,2010,160,405,2009,153,403,2007,157,405,2008,157,408,2008,159,410,2011,159,405,2007,156,406,2007}, +{53, 157,405,2014,159,407,2006,156,411,2013,160,405,2004,159,407,2009,160,405,2006,153,406,2012,158,405,2005,156,409,2013,158,406,2007,157,404,2010,158,405,2009,159,408,2011,158,404,2010,156,402,2009,158,404,2010,158,406,2009,157,407,2012,157,405,2012,159,403,2008,159,404,2010,158,404,2010,157,407,2008,157,406,2012,157,405,2009,158,403,2009,157,407,2010,159,406,2011,159,406,2011,158,403,2008,157,406,2013,157,407,2011,155,409,2012,158,406,2008,156,406,2011,162,404,2006,159,403,2008,158,407,2010,158,408,2013,159,405,2011,155,408,2012,158,407,2010,157,407,2007,157,408,2010,158,405,2010,157,405,2008,159,407,2011,159,407,2012,156,405,2010,156,405,2008,157,406,2011,157,404,2009,156,405,2012}, +{52, 159,405,2010,159,400,2010,158,399,2009,155,404,2011,156,406,2013,155,405,2009,155,402,2012,160,401,2012,156,398,2009,158,402,2011,160,403,2009,157,403,2009,154,398,2013,154,405,2011,157,402,2009,155,402,2014,159,400,2010,155,397,2010,158,401,2011,158,404,2013,155,405,2012,156,400,2009,153,400,2011,158,399,2008,159,401,2012,155,400,2010,156,399,2008,159,404,2010,156,402,2012,153,399,2010,154,400,2010,158,402,2010,158,403,2011,160,401,2009,156,402,2014,157,404,2007,152,401,2012,157,403,2008,159,402,2011,158,405,2009,158,401,2010,158,403,2010,155,401,2008,156,404,2012,156,407,2012,156,405,2011,156,402,2010,158,402,2011,159,403,2009,155,400,2011,154,404,2012,159,405,2010}, +{52, 157,404,2012,157,404,2010,156,401,2009,155,402,2011,157,406,2012,161,403,2012,156,402,2012,156,402,2009,158,405,2013,157,404,2011,155,405,2012,157,403,2008,157,404,2011,159,404,2009,157,403,2008,157,405,2008,157,406,2012,156,405,2010,155,404,2009,156,403,2009,158,407,2008,157,406,2010,157,409,2010,158,403,2010,157,403,2008,157,403,2009,157,407,2012,160,402,2009,158,402,2010,158,400,2009,155,403,2008,156,405,2012,158,406,2011,159,403,2010,156,399,2012,157,400,2013,158,404,2007,156,403,2013,158,405,2011,155,399,2008,157,403,2013,160,403,2008,159,401,2014,160,403,2011,157,401,2011,161,405,2011,155,394,2007,151,401,2009,160,404,2010,158,404,2014,159,397,2008,158,400,2008}, +{53, 157,404,2011,157,401,2012,158,396,2010,156,397,2009,155,401,2010,158,404,2012,160,400,2012,158,397,2008,158,400,2010,156,404,2013,160,405,2009,156,401,2009,156,404,2011,158,401,2006,157,404,2007,161,405,2009,160,403,2008,159,408,2013,167,414,2010,168,405,2007,155,396,2006,154,394,2007,161,400,2008,163,399,2008,162,390,2008,155,392,2014,147,396,2024,159,365,2019,177,274,2086,159,354,2003,160,433,1978,145,472,1978,124,461,2001,145,446,2029,156,437,1987,152,444,1982,164,351,2016,134,333,2034,144,399,2014,177,420,2013,152,416,2013,143,414,2012,156,426,2011,159,453,1983,159,411,2010,146,366,2029,143,385,2013,162,417,2007,160,417,2005,151,410,1998,149,413,2024,171,416,2002,149,391,1996}, +{52, 147,423,2013,163,416,2007,143,434,2023,154,418,2010,152,423,2013,157,415,2004,157,415,1997,147,449,1979,160,416,2015,154,384,2029,144,410,2005,157,416,2006,157,414,2004,150,412,2007,157,416,2005,154,420,2007,152,421,2012,157,417,2010,156,413,2007,156,415,2007,156,413,2007,155,417,2010,156,409,2004,150,412,2010,154,417,2006,152,414,2012,154,417,2010,157,409,2006,156,411,2008,153,414,2011,154,418,2011,156,417,2009,156,420,2009,160,421,2007,148,433,2012,150,456,1968,156,466,1996,161,381,2024,147,358,2034,147,396,1999,165,401,2002,165,429,2017,167,409,2010,147,409,2014,158,413,2006,159,423,2016,160,415,2016,159,407,2010,161,402,2000,157,410,2007,162,420,2010,162,425,2008}, +{52, 162,427,2011,164,419,2006,153,423,1989,158,425,1990,170,379,2026,150,415,2006,165,422,2011,162,414,2010,156,409,2007,162,404,2006,162,412,2009,158,410,2011,155,409,2012,158,408,2011,162,405,2011,156,399,2007,155,401,2010,159,401,2009,160,402,2007,156,402,2012,157,402,2011,157,402,2011,159,405,2011,159,402,2011,158,404,2010,159,400,2010,157,404,2009,158,399,2009,159,403,2011,159,399,2007,154,404,2012,158,407,2011,160,405,2009,158,402,2010,157,404,2012,159,402,2008,162,406,2010,159,405,2010,158,405,2009,157,405,2011,157,404,2010,157,403,2012,160,404,2010,158,405,2011,157,407,2009,158,404,2012,158,404,2010,156,402,2009,156,406,2008,157,404,2010,160,403,2009,159,401,2009}, +{52, 158,403,2010,155,405,2012,159,400,2008,157,404,2012,157,402,2010,152,401,2012,158,403,2009,158,402,2011,156,403,2011,159,402,2011,157,402,2011,155,399,2009,156,401,2010,153,402,2012,155,403,2011,157,403,2009,155,401,2011,157,402,2010,156,398,2010,155,402,2011,156,403,2010,154,404,2014,155,400,2008,155,403,2011,157,401,2010,157,401,2012,156,398,2013,156,396,2009,155,400,2010,156,405,2011,151,401,2013,156,395,2010,158,393,2010,150,403,2021,161,399,2005,154,386,2008,153,410,2015,152,392,2012,153,395,2015,161,396,2011,156,394,2011,152,392,2011,154,399,2010,152,398,2011,152,396,2015,153,395,2015,153,395,2011,158,398,2012,158,396,2011,155,396,2016,155,395,2011,152,393,2010}, +{52, 151,397,2010,154,400,2013,155,398,2016,158,396,2012,157,393,2011,153,395,2014,155,399,2011,152,399,2009,151,396,2011,152,395,2013,156,395,2010,156,395,2011,156,396,2010,154,397,2013,155,396,2012,154,399,2012,153,398,2011,150,395,2013,155,396,2010,156,398,2012,157,398,2012,155,397,2014,154,397,2013,154,396,2013,152,397,2011,155,400,2013,154,401,2011,156,398,2014,157,395,2009,153,396,2011,154,399,2011,154,400,2009,154,397,2011,155,397,2010,153,396,2012,155,400,2013,157,400,2011,154,400,2013,156,395,2012,155,397,2011,155,397,2010,152,400,2013,154,402,2013,154,398,2012,155,398,2012,152,398,2012,153,401,2012,155,400,2011,154,398,2011,152,399,2012,154,399,2013,154,399,2012}, +{53, 154,399,2014,153,397,2011,155,398,2012,154,399,2013,156,399,2012,154,400,2012,154,399,2010,155,396,2012,155,398,2011,155,397,2009,155,399,2011,153,400,2012,154,401,2013,155,398,2010,153,398,2010,155,399,2011,155,400,2013,154,399,2012,155,399,2008,153,398,2010,156,401,2010,156,402,2010,154,398,2012,155,400,2011,157,400,2012,153,401,2014,156,400,2011,154,398,2012,157,399,2012,154,398,2011,153,398,2012,155,401,2011,153,402,2011,154,400,2015,155,396,2012,153,397,2009,155,399,2012,155,399,2011,154,398,2010,156,398,2010,154,397,2010,155,400,2014,157,401,2013,154,397,2010,153,398,2014,157,397,2012,153,397,2011,153,397,2012,155,400,2011,156,398,2012,155,395,2009,155,397,2012,155,401,2011}, +{52, 154,398,2011,154,398,2011,155,396,2011,154,397,2013,157,396,2011,156,400,2012,156,399,2012,154,397,2012,155,398,2012,155,398,2012,157,399,2011,154,398,2009,157,397,2010,156,399,2013,157,398,2011,152,400,2012,154,400,2011,157,398,2010,155,398,2011,155,399,2010,156,399,2012,158,401,2014,156,401,2011,152,398,2012,151,397,2013,156,398,2011,156,398,2011,153,398,2011,154,398,2012,154,399,2010,158,400,2015,156,397,2011,154,397,2012,153,399,2013,153,399,2015,157,398,2009,154,396,2013,154,397,2015,155,398,2013,154,397,2010,154,396,2012,156,398,2011,155,396,2010,155,395,2012,155,396,2012,157,395,2011,154,398,2014,153,395,2010,152,395,2012,154,398,2012,155,397,2012,155,396,2013}, +{52, 153,395,2012,155,395,2010,154,398,2014,159,399,2013,154,398,2012,154,397,2012,153,396,2010,156,396,2011,158,397,2013,157,398,2013,154,398,2012,153,399,2012,154,400,2013,154,397,2010,152,396,2015,154,399,2011,157,398,2013,158,400,2012,154,398,2013,152,397,2009,154,399,2013,153,400,2012,154,398,2014,153,397,2012,156,398,2013,156,398,2013,157,399,2012,154,400,2013,152,401,2016,156,403,2010,153,398,2012,154,397,2012,155,397,2009,155,402,2011,156,403,2011,154,398,2009,154,402,2009,157,406,2011,158,411,2014,157,404,2010,155,402,2007,157,400,2007,157,402,2010,158,403,2010,154,409,2015,159,407,2011,157,403,2012,156,397,2009,154,395,2008,158,395,2010,154,392,2005,152,399,2012}, +{53, 156,400,2012,153,398,2014,151,394,2011,149,391,2011,150,395,2013,156,396,2014,155,393,2012,154,389,2010,155,393,2014,157,395,2015,154,394,2011,151,395,2014,153,397,2012,154,394,2013,154,396,2014,152,395,2014,157,398,2013,157,397,2012,154,395,2012,152,400,2015,155,394,2011,155,392,2012,154,389,2010,152,396,2013,157,397,2013,153,395,2016,154,395,2013,157,390,2008,153,391,2014,155,393,2010,151,396,2016,157,397,2015,156,391,2015,152,391,2011,153,392,2014,157,393,2013,154,393,2014,155,393,2015,155,390,2010,156,392,2013,158,395,2014,156,392,2014,155,392,2012,154,393,2011,157,395,2012,156,395,2013,157,395,2012,155,390,2011,154,394,2012,159,393,2009,155,395,2015,155,393,2014,153,391,2014}, +{52, 155,394,2011,156,394,2011,155,393,2014,156,394,2010,151,395,2013,156,398,2013,156,393,2010,155,394,2012,156,397,2012,156,403,2015,157,397,2012,152,394,2011,156,395,2009,161,406,2010,165,409,2013,156,412,2012,155,402,2008,157,397,2004,156,407,2007,161,416,2012,155,414,2012,153,406,2007,156,402,2006,159,409,2008,163,406,2006,159,402,2010,158,407,2010,159,411,2015,158,404,2011,156,393,2011,153,396,2009,158,401,2011,162,409,2013,155,402,2013,151,398,2012,156,394,2009,157,395,2010,156,397,2013,157,397,2012,158,401,2012,159,398,2010,155,396,2013,157,396,2010,158,393,2012,157,402,2012,156,399,2010,154,401,2011,153,397,2009,157,396,2010,158,393,2009,155,399,2011,155,402,2015}, +{52, 158,404,2015,155,396,2014,154,395,2012,154,396,2013,158,403,2012,159,401,2011,156,398,2010,155,396,2011,155,393,2009,158,398,2010,156,400,2012,155,402,2013,156,397,2012,156,397,2015,156,396,2012,155,395,2010,158,396,2006,149,396,2017,166,397,2005,146,394,2013,166,403,2013,154,382,2013,156,396,2010,162,395,2011,156,402,2014,156,393,2014,154,391,2012,156,392,2012,160,396,2013,156,394,2014,158,390,2010,153,392,2013,155,394,2010,156,393,2013,155,392,2012,154,392,2011,156,396,2013,157,394,2011,157,392,2016,156,391,2010,152,393,2012,156,398,2012,159,401,2010,156,393,2012,157,394,2012,156,395,2011,157,401,2012,158,402,2012,156,402,2014,157,396,2008,156,396,2010,158,401,2010}, +{52, 159,404,2013,158,402,2011,158,399,2010,157,399,2010,159,401,2013,155,403,2014,155,401,2011,156,401,2009,160,401,2010,160,399,2010,156,397,2011,156,398,2009,157,401,2013,158,402,2014,155,399,2009,157,397,2010,160,401,2010,160,400,2012,156,400,2011,159,396,2011,156,399,2008,157,408,2013,158,406,2015,154,397,2011,156,390,2006,158,395,2007,160,403,2011,157,406,2015,157,401,2015,155,393,2008,155,392,2008,158,398,2011,158,396,2014,156,393,2012,154,395,2012,156,399,2015,154,396,2018,152,385,2019,150,382,2008,160,408,2004,165,408,2013,152,394,2013,150,395,2009,160,401,2011,156,404,2013,154,398,2013,157,395,2009,159,402,2012,156,402,2014,156,402,2011,159,398,2009,155,398,2012}, +{53, 155,400,2008,154,404,2014,158,404,2009,156,399,2012,157,400,2010,156,403,2009,155,402,2013,156,401,2014,158,397,2008,158,401,2012,156,404,2013,156,401,2007,157,399,2009,155,401,2010,157,401,2013,156,401,2012,155,399,2010,156,402,2009,159,403,2013,155,401,2012,157,398,2009,153,401,2010,155,400,2012,155,403,2016,156,397,2008,153,398,2008,157,399,2013,157,399,2013,157,403,2014,160,399,2010,156,399,2012,157,401,2013,155,400,2014,157,403,2013,158,399,2008,157,400,2009,156,402,2013,157,401,2013,156,404,2013,157,397,2007,157,402,2012,160,405,2011,159,405,2011,156,400,2011,158,399,2010,158,398,2007,156,401,2011,154,401,2012,157,402,2011,158,402,2013,159,392,2021,153,407,2010,161,394,2000}, +{52, 150,402,2014,161,398,2010,159,401,2013,158,402,2015,156,398,2015,158,396,2010,156,395,2011,157,400,2011,158,403,2014,156,400,2011,155,399,2011,155,396,2009,155,397,2010,156,399,2010,157,404,2014,157,404,2014,156,400,2011,155,402,2006,157,403,2011,157,402,2009,154,398,2005,155,399,2016,163,410,2011,155,397,2004,155,403,2013,158,394,2011,156,402,2013,164,405,2012,158,405,2016,149,396,2010,151,397,2010,160,400,2009,158,402,2009,151,398,2007,151,400,2009,158,403,2008,159,405,2012,158,402,2009,158,404,2008,160,409,2009,155,409,2011,152,408,2012,161,404,2005,166,401,2005,161,411,2009,163,408,2007,165,411,2008,160,407,2010,158,410,2011,157,404,2008,156,404,2011,160,405,2007}, +{52, 160,408,2012,160,414,2012,159,408,2010,158,403,2008,161,399,2001,159,402,2006,162,409,2009,156,410,2015,154,406,2011,166,399,2007,156,402,2011,159,404,2010,161,410,2011,156,404,2014,155,399,2009,161,397,2005,155,400,2009,157,404,2013,160,407,2011,160,403,2008,162,402,2010,154,400,2010,154,403,2011,161,403,2007,161,405,2010,157,407,2013,156,399,2006,160,401,2009,165,396,2005,154,409,2013,162,413,2013,160,408,2013,153,398,2008,158,396,2004,163,407,2010,167,412,2015,161,395,2009,152,390,2006,158,398,2009,165,416,2019,159,411,2018,149,397,2011,156,392,2006,163,401,2011,160,404,2013,157,392,2007,157,390,2004,158,393,2007,159,409,2015,167,420,2020,161,398,2010,151,392,2010}, +{53, 164,398,2005,161,405,2015,159,403,2012,157,397,2008,157,403,2009,161,405,2012,161,406,2015,159,401,2008,156,402,2008,161,406,2010,160,407,2009,158,408,2012,160,402,2008,159,407,2007,158,404,2007,161,407,2010,156,403,2009,156,409,2012,171,404,2009,154,411,2016,154,402,2007,160,405,2009,163,405,2009,159,403,2011,159,401,2009,160,408,2012,160,403,2008,155,403,2010,161,398,2008,159,400,2010,158,412,2013,164,412,2015,161,404,2011,161,394,2006,160,390,2004,157,399,2010,163,410,2016,161,409,2020,159,400,2012,159,393,2009,157,392,2009,162,394,2010,162,398,2011,160,394,2012,156,399,2018,161,403,2015,161,399,2014,154,397,2015,156,390,2012,165,386,2004,161,398,2013,157,404,2016,161,402,2013}, +{52, 157,394,2012,157,394,2008,165,393,2008,165,396,2010,160,403,2013,158,403,2014,158,403,2015,160,398,2011,158,394,2008,160,401,2013,164,400,2009,162,399,2011,157,397,2010,161,399,2009,160,405,2013,158,398,2009,156,401,2012,164,401,2009,164,401,2014,159,397,2011,158,397,2011,160,393,2010,159,396,2011,160,397,2012,158,395,2015,161,394,2011,161,393,2011,159,392,2012,158,391,2011,157,395,2015,161,398,2013,156,394,2013,158,396,2013,158,390,2010,159,394,2013,161,392,2010,155,395,2012,161,397,2012,160,398,2014,154,396,2013,153,392,2010,162,399,2012,166,396,2009,157,395,2014,159,394,2009,161,395,2010,159,404,2015,159,401,2014,157,394,2013,160,395,2010,162,397,2012,163,399,2012}, +{52, 158,396,2012,155,397,2012,159,395,2011,161,395,2013,161,396,2013,158,397,2014,157,398,2014,160,394,2013,160,393,2010,159,397,2013,157,394,2013,156,394,2014,159,393,2010,160,394,2011,158,393,2012,156,392,2011,155,394,2015,158,394,2011,156,393,2014,158,395,2013,159,392,2012,157,390,2011,157,394,2012,157,394,2013,157,393,2013,155,393,2012,156,395,2012,156,390,2012,159,390,2011,161,392,2012,161,393,2013,156,392,2010,155,391,2014,156,388,2013,154,388,2012,159,390,2012,158,394,2014,157,390,2013,157,393,2015,160,391,2013,157,392,2010,157,391,2012,157,393,2014,153,388,2012,157,390,2012,164,391,2013,161,397,2013,158,394,2014,155,394,2013,157,390,2012,161,392,2014,157,395,2013}, +{53, 157,397,2013,162,396,2010,163,396,2013,161,390,2006,159,394,2012,158,397,2011,155,400,2012,156,397,2011,164,398,2013,163,392,2009,157,390,2013,158,388,2009,160,400,2012,160,404,2015,153,398,2017,149,388,2010,158,391,2010,173,395,2009,168,395,2014,152,391,2015,148,392,2012,160,393,2011,159,397,2012,154,393,2013,155,394,2011,165,393,2009,165,393,2011,156,392,2013,156,393,2009,155,397,2015,162,399,2012,159,395,2014,159,391,2010,160,394,2010,162,398,2010,160,401,2013,157,392,2009,154,395,2013,160,399,2012,162,399,2012,160,399,2011,158,398,2013,160,394,2012,159,394,2010,156,399,2012,156,400,2012,160,396,2011,156,396,2009,157,398,2010,162,401,2017,165,398,2008,156,396,2013,159,398,2010}, +{52, 155,394,2014,156,398,2012,159,397,2012,159,402,2013,161,397,2014,160,394,2011,161,394,2010,157,394,2013,156,398,2014,156,397,2013,159,394,2010,159,394,2013,159,392,2012,158,393,2013,160,391,2015,157,393,2012,159,396,2011,158,393,2013,157,392,2013,159,390,2011,160,392,2010,157,395,2011,156,395,2012,158,393,2014,157,393,2014,161,388,2012,160,392,2012,157,393,2010,152,394,2013,155,391,2013,158,390,2014,158,392,2016,157,390,2014,158,387,2010,159,392,2012,161,393,2013,155,389,2013,155,390,2013,157,390,2012,158,391,2016,160,388,2013,153,387,2014,155,390,2013,157,388,2014,157,394,2015,159,391,2012,156,387,2013,161,389,2014,162,392,2015,159,391,2011,153,394,2011,153,392,2016}, +{52, 155,388,2014,160,384,2011,159,391,2013,162,389,2012,157,394,2018,157,388,2014,152,385,2009,159,384,2011,156,389,2016,155,388,2014,158,391,2015,163,385,2015,163,385,2010,159,382,2011,158,391,2015,156,391,2017,156,393,2018,161,390,2015,159,386,2014,157,384,2013,162,383,2011,162,388,2013,161,391,2013,158,391,2014,155,397,2015,158,395,2013,159,388,2011,159,383,2008,162,386,2011,161,387,2011,156,394,2015,155,395,2011,155,396,2016,159,391,2013,158,389,2012,160,387,2013,161,393,2014,161,390,2013,158,393,2014,159,388,2011,156,387,2012,156,393,2014,158,390,2014,159,388,2013,160,387,2011,160,390,2014,160,388,2014,158,388,2012,156,390,2014,158,392,2016,157,389,2014,158,386,2013}, +{53, 160,388,2012,161,388,2013,155,389,2015,155,387,2012,156,387,2011,156,389,2012,157,390,2016,157,385,2013,157,385,2013,163,387,2011,159,390,2016,158,389,2014,156,387,2013,158,387,2010,156,388,2016,158,387,2012,158,385,2015,161,386,2010,157,390,2015,158,387,2009,155,386,2014,159,391,2014,158,389,2013,157,387,2015,157,384,2014,157,385,2013,158,387,2014,157,388,2014,156,389,2014,159,386,2011,159,387,2012,159,389,2012,155,384,2013,154,390,2015,162,385,2008,152,386,2021,163,390,2011,154,385,2015,158,385,2013,157,387,2013,159,388,2017,158,383,2012,154,384,2015,158,384,2012,156,385,2014,159,386,2014,158,385,2017,158,386,2011,156,388,2013,159,392,2014,156,386,2014,158,387,2012,159,386,2009}, +{52, 158,390,2015,157,390,2015,155,387,2012,158,390,2013,161,388,2014,158,390,2016,161,391,2014,163,391,2011,161,389,2010,154,388,2011,153,389,2012,161,392,2015,163,389,2010,158,393,2016,160,389,2009,155,391,2013,160,389,2010,159,390,2013,156,383,2011,156,388,2015,160,385,2012,160,389,2017,163,380,2017,155,367,2027,151,390,2009,168,407,2001,161,395,2012,151,393,2016,160,395,2015,162,394,2014,157,391,2011,159,392,2009,163,390,2008,159,387,2011,158,392,2012,164,398,2012,161,406,2016,161,404,2019,160,396,2012,158,395,2007,157,387,2005,157,398,2010,165,402,2013,163,408,2013,156,395,2009,156,397,2009,159,397,2011,158,399,2013,161,401,2014,165,400,2010,159,398,2014,157,396,2010}, +{52, 154,398,2013,165,403,2010,166,402,2009,155,401,2014,159,403,2009,163,397,2008,163,399,2006,160,404,2011,156,409,2013,161,413,2015,165,401,2004,154,401,2011,165,409,2009,165,408,2012,155,400,2008,163,397,2003,162,406,2012,159,402,2009,154,399,2011,160,402,2008,162,403,2016,164,399,2013,161,395,2008,162,397,2011,162,407,2015,164,397,2011,156,390,2011,160,389,2008,160,396,2010,163,401,2013,163,400,2015,161,393,2010,161,390,2011,157,395,2013,158,399,2016,163,400,2016,162,393,2010,160,393,2011,163,392,2009,159,395,2012,160,396,2009,159,397,2011,160,395,2013,161,398,2013,159,393,2011,154,394,2012,160,397,2011,162,397,2011,157,394,2015,158,393,2011,159,394,2012,160,402,2011}, +{53, 159,397,2010,159,397,2013,161,396,2009,155,390,2010,162,397,2012,163,396,2011,157,393,2014,162,395,2011,158,395,2014,162,394,2013,158,394,2013,160,392,2008,160,390,2008,157,393,2012,159,393,2012,160,397,2014,161,398,2014,157,391,2011,157,388,2011,158,390,2012,159,396,2014,161,397,2015,161,391,2014,159,384,2010,157,391,2007,157,397,2015,162,395,2014,158,393,2013,154,390,2010,157,390,2013,161,388,2010,159,385,2013,159,390,2012,158,388,2012,158,388,2015,159,379,2022,154,382,2017,156,407,2000,170,400,2012,156,396,2018,159,390,2012,160,390,2011,156,390,2010,158,392,2011,161,390,2013,156,393,2016,157,387,2012,156,385,2011,158,388,2015,162,375,2024,153,378,2013,157,403,2002,163,402,2007}, +{52, 152,389,2014,153,386,2011,159,389,2015,162,384,2011,156,385,2019,158,386,2019,160,399,2014,162,391,2014,152,385,2012,156,390,2012,161,393,2014,160,393,2013,162,391,2010,160,396,2012,165,396,2010,158,401,2014,159,397,2009,160,388,2007,161,399,2012,165,393,2006,160,399,2014,159,403,2016,159,408,2014,168,405,2012,163,402,2013,157,395,2008,160,396,2005,161,404,2007,158,404,2008,158,408,2013,162,401,2008,155,404,2013,169,403,2005,165,406,2013,157,403,2013,158,399,2009,162,408,2013,164,406,2011,159,399,2009,157,399,2011,163,400,2006,159,405,2011,159,407,2012,157,404,2010,161,404,2011,163,402,2014,163,398,2008,160,399,2008,163,407,2010,159,409,2012,155,406,2010,152,396,2008}, +{52, 162,404,2010,171,404,2010,163,403,2011,157,402,2007,155,406,2010,156,406,2016,161,401,2007,161,402,2010,162,403,2012,162,403,2009,162,402,2005,158,401,2009,157,404,2009,159,404,2009,159,404,2014,168,404,2012,163,399,2008,159,398,2009,158,399,2009,160,404,2011,159,403,2011,158,408,2012,162,407,2012,162,403,2012,159,397,2008,160,401,2010,164,403,2010,161,401,2010,159,400,2011,158,403,2008,157,403,2011,161,404,2012,160,401,2011,161,400,2010,163,401,2011,162,403,2013,158,398,2007,157,402,2011,163,400,2010,160,398,2011,159,399,2011,165,403,2012,161,402,2010,155,400,2012,159,396,2009,160,400,2011,162,400,2012,159,401,2013,162,400,2009,160,399,2010,161,397,2013,162,399,2012}, +{53, 159,399,2010,160,402,2016,158,399,2010,161,396,2010,164,399,2010,159,398,2011,157,393,2012,162,397,2012,164,399,2010,158,402,2014,158,399,2012,161,397,2012,159,401,2012,167,399,2007,158,402,2015,157,401,2011,157,398,2009,162,401,2007,160,405,2012,162,402,2010,159,403,2013,161,402,2011,162,403,2010,161,398,2009,158,405,2011,160,406,2014,164,405,2007,158,396,2012,160,399,2009,161,400,2013,162,404,2011,160,401,2013,160,401,2009,154,400,2019,162,401,2012,160,393,2008,160,401,2009,161,399,2010,156,399,2010,160,401,2015,161,397,2010,158,398,2010,160,398,2010,162,398,2011,161,399,2010,159,400,2011,160,400,2012,158,400,2010,158,398,2013,158,397,2009,163,397,2010,163,401,2011,162,400,2010}, +{52, 157,400,2013,165,405,2014,162,402,2008,156,401,2012,164,400,2009,160,397,2009,158,401,2010,160,405,2011,158,406,2014,162,407,2013,164,399,2006,161,394,2006,160,396,2006,163,408,2013,159,406,2013,156,404,2012,161,401,2009,165,400,2012,161,393,2009,158,396,2010,162,400,2015,161,397,2012,155,398,2013,161,401,2012,160,396,2010,157,392,2012,160,395,2009,159,399,2012,159,399,2015,164,396,2013,160,397,2012,157,398,2011,159,400,2013,165,398,2008,159,393,2007,156,400,2012,160,402,2011,161,400,2012,163,397,2011,163,402,2008,161,403,2012,162,402,2013,159,400,2010,159,397,2007,161,398,2010,163,403,2014,163,403,2008,165,404,2012,168,406,2012,163,402,2010,157,401,2011,160,404,2011}, +{52, 161,403,2005,161,404,2012,167,403,2010,166,402,2009,161,402,2009,159,404,2010,163,398,2009,158,396,2010,156,408,2016,172,407,2012,169,406,2014,157,394,2011,160,392,2005,158,391,2008,157,401,2013,164,404,2014,165,402,2013,161,395,2009,160,394,2007,163,396,2009,160,402,2016,161,401,2011,160,402,2013,162,400,2012,161,397,2011,161,398,2009,165,400,2009,162,401,2012,164,403,2008,160,402,2010,160,401,2011,161,396,2008,163,398,2007,161,403,2015,166,400,2013,162,398,2011,160,398,2014,159,398,2012,161,394,2012,165,397,2011,162,398,2013,161,397,2013,160,396,2011,160,394,2009,163,395,2012,164,396,2014,162,398,2013,159,397,2012,161,398,2013,163,392,2010,160,392,2009,160,396,2011}, +{58, 165,399,2011,162,398,2012,162,398,2014,157,393,2012,158,396,2009,161,397,2011,162,395,2012,166,396,2011,161,395,2008,161,399,2014,164,396,2007,158,395,2012,158,397,2014,160,392,2010,161,396,2009,163,397,2014,162,398,2014,163,393,2010,161,394,2013,160,396,2010,160,395,2012,161,396,2011,164,394,2010,162,394,2017,161,398,2010,163,388,2009,163,405,2013,161,391,2011,157,396,2017,163,387,2006,161,399,2017,166,394,2009,158,394,2014,160,394,2011,159,393,2012,159,392,2012,161,396,2012,161,400,2013,164,395,2013,162,392,2012,160,388,2009,159,394,2012,161,397,2014,160,396,2013,159,395,2015,160,393,2012,160,392,2013,163,392,2011,161,393,2014,159,394,2013,159,397,2013,161,394,2014,162,393,2012,160,391,2010,160,395,2012,164,393,2010,160,391,2012,157,400,2018}, +{52, 164,389,2004,153,390,2017,165,391,2009,159,392,2012,164,396,2012,159,395,2017,165,392,2007,162,393,2009,160,398,2017,165,394,2010,160,390,2009,162,398,2012,161,399,2014,159,399,2011,161,400,2014,166,402,2010,163,401,2009,158,405,2011,162,403,2013,163,402,2007,161,410,2010,161,412,2010,162,406,2010,163,393,1999,162,407,2010,166,417,2011,159,406,2010,157,406,2010,167,410,2011,160,397,2009,158,390,2006,164,397,2005,164,407,2017,167,408,2016,162,395,2011,159,396,2006,160,395,2013,163,396,2014,161,391,2012,162,392,2009,163,393,2013,164,392,2011,162,393,2014,163,392,2011,157,389,2013,159,389,2013,161,387,2010,163,390,2011,162,394,2015,163,391,2014,163,387,2009,159,387,2013}, +{52, 158,392,2014,161,391,2013,159,390,2013,160,390,2010,161,387,2010,162,390,2010,158,391,2012,159,390,2010,156,388,2012,160,387,2012,160,393,2016,161,397,2016,161,387,2015,163,382,2006,160,386,2010,161,391,2014,162,394,2017,165,391,2014,162,392,2013,162,391,2011,160,394,2013,163,388,2009,161,389,2011,160,393,2011,160,397,2014,162,396,2010,159,396,2013,161,393,2010,163,395,2014,166,395,2007,157,393,2014,163,399,2014,163,395,2011,158,393,2010,162,396,2014,161,393,2012,162,395,2013,163,393,2010,161,396,2011,163,394,2011,159,395,2014,161,393,2013,161,392,2010,164,395,2012,163,397,2016,163,393,2012,159,395,2012,165,397,2012,165,396,2010,161,394,2010,160,396,2012,164,399,2015}, +{53, 164,395,2013,162,398,2011,161,396,2011,164,394,2012,165,396,2010,161,392,2008,162,396,2014,167,394,2012,163,397,2012,161,394,2013,163,398,2015,166,391,2010,161,391,2012,161,394,2010,162,398,2013,164,394,2011,163,394,2014,162,394,2014,160,392,2011,161,392,2012,165,393,2012,163,395,2013,164,397,2014,164,393,2011,161,392,2013,164,394,2012,162,397,2014,163,397,2013,163,395,2014,167,395,2010,165,400,2010,163,401,2013,162,401,2015,164,397,2009,161,400,2010,162,400,2013,169,400,2009,164,397,2009,161,402,2008,168,404,2010,166,406,2014,161,401,2011,161,401,2008,166,401,2008,168,404,2015,165,399,2009,159,403,2010,163,409,2008,165,408,2013,159,400,2010,161,394,2005,164,399,2007,164,406,2014}, +{52, 170,404,2011,162,405,2010,160,403,2013,160,404,2013,166,397,2011,165,396,2008,162,397,2008,160,404,2012,165,404,2014,164,398,2011,160,396,2009,162,398,2011,164,400,2013,165,402,2010,167,402,2011,158,403,2010,160,398,2007,165,400,2009,165,397,2009,163,403,2012,163,405,2015,161,400,2010,165,396,2008,166,401,2010,162,404,2015,168,408,2013,162,406,2014,162,394,2007,160,393,2009,164,399,2007,161,405,2014,162,408,2013,164,400,2009,161,398,2010,167,399,2009,163,402,2012,162,402,2014,165,403,2009,164,404,2011,162,404,2010,162,399,2010,164,400,2009,163,400,2007,163,404,2011,166,404,2011,163,405,2010,163,401,2008,163,400,2011,164,400,2010,162,400,2009,160,403,2012,161,404,2011}, +{52, 164,398,2008,161,397,2007,162,396,2009,165,399,2010,165,399,2012,159,396,2013,161,396,2009,162,399,2012,161,398,2011,161,395,2012,161,394,2013,164,395,2012,163,394,2011,161,399,2017,161,396,2012,159,396,2013,160,393,2012,164,396,2013,163,394,2010,162,397,2014,162,396,2012,166,395,2013,164,391,2011,158,394,2012,164,393,2014,163,393,2013,159,392,2010,163,396,2010,162,395,2017,164,392,2010,161,391,2012,160,390,2014,161,393,2010,162,394,2015,162,395,2014,164,392,2009,162,393,2015,162,394,2016,162,395,2010,162,396,2017,163,391,2013,161,385,2011,162,385,2007,159,391,2011,164,404,2018,165,398,2018,158,386,2012,156,385,2004,157,391,2013,161,394,2018,171,395,2010,159,386,2011}, +{53, 161,394,2011,164,394,2013,163,394,2015,164,389,2008,157,397,2011,166,392,2008,164,395,2015,166,391,2006,161,393,2012,166,400,2015,162,398,2012,165,394,2011,164,392,2011,166,392,2007,165,393,2012,167,397,2016,166,392,2014,163,391,2009,164,389,2013,163,391,2013,160,385,2012,164,389,2015,168,387,2012,163,386,2015,163,389,2016,164,385,2013,163,383,2014,163,381,2012,160,388,2017,164,386,2014,164,383,2018,164,379,2011,164,379,2012,161,388,2019,161,384,2014,160,384,2016,167,382,2012,164,380,2014,165,383,2016,162,382,2011,161,385,2018,169,379,2012,162,371,2008,158,378,2015,164,376,2017,166,360,2057,156,354,2005,162,425,1995,183,403,2007,150,390,2018,159,384,2015,172,392,2015,163,389,2012}, +{52, 160,390,2015,168,398,2016,172,398,2013,164,396,2011,162,395,2011,163,401,2009,166,406,2012,167,417,1996,169,412,2005,171,375,2020,158,393,2016,172,404,2010,165,403,2009,157,399,2010,163,400,2008,165,401,2011,165,401,2013,172,396,2011,169,402,2010,166,401,2013,164,400,2010,162,397,2010,163,399,2012,165,398,2012,167,400,2013,167,395,2010,167,397,2011,167,394,2010,163,393,2012,165,395,2014,167,398,2014,165,396,2014,163,395,2015,169,393,2012,167,392,2011,165,391,2012,164,394,2011,164,396,2013,166,398,2011,166,393,2011,163,395,2012,166,394,2011,166,396,2011,168,399,2015,167,398,2011,165,395,2010,164,395,2010,164,396,2010,165,396,2013,166,396,2013,167,394,2010,164,397,2014}, +{52, 166,392,2010,165,393,2010,165,395,2009,165,392,2010,163,393,2013,167,395,2012,167,391,2014,165,394,2013,167,387,2007,164,394,2017,169,389,2009,163,388,2015,164,389,2011,163,392,2016,166,393,2014,165,392,2014,166,392,2012,164,388,2013,165,389,2010,166,389,2013,166,391,2015,164,389,2010,165,392,2012,166,393,2013,165,392,2010,164,392,2013,166,391,2009,167,390,2010,163,392,2010,164,393,2015,165,395,2012,167,392,2010,166,393,2014,164,396,2014,166,391,2009,166,391,2011,164,391,2011,164,394,2013,165,394,2015,168,392,2008,165,389,2010,166,393,2010,167,395,2012,165,395,2015,167,394,2009,164,395,2012,164,397,2014,166,397,2011,166,391,2006,163,392,2007,165,398,2007,165,403,2014}, +{52, 165,401,2012,166,400,2009,164,396,2012,165,396,2009,166,394,2010,165,403,2013,168,402,2012,168,401,2013,165,394,2009,161,394,2008,162,399,2009,167,403,2013,168,400,2010,165,394,2009,162,396,2013,167,398,2012,165,391,2012,164,397,2010,163,397,2012,165,401,2011,161,391,2012,162,398,2013,167,396,2013,165,392,2011,163,388,2004,160,394,2013,163,398,2014,164,394,2013,164,391,2014,169,394,2008,164,395,2012,165,398,2015,166,395,2012,164,393,2009,164,390,2010,165,398,2012,166,400,2014,167,394,2011,165,391,2012,167,392,2008,163,395,2016,165,394,2011,165,397,2014,164,393,2011,162,393,2014,166,391,2010,163,395,2013,166,396,2011,166,393,2013,164,390,2012,160,390,2012,164,392,2011}, +{53, 166,393,2012,161,393,2014,163,395,2013,165,391,2011,162,390,2011,162,392,2011,162,393,2010,164,393,2014,163,396,2012,163,392,2011,163,392,2011,163,395,2011,165,393,2012,165,395,2012,160,394,2014,163,393,2010,164,390,2011,164,391,2011,163,393,2015,161,393,2012,164,389,2012,163,391,2012,163,390,2013,162,391,2013,162,388,2013,164,391,2012,164,390,2011,161,393,2013,163,390,2013,163,387,2014,165,390,2013,165,390,2013,163,391,2012,161,393,2015,161,390,2013,165,388,2012,164,391,2016,165,390,2009,159,393,2014,167,392,2012,164,390,2010,160,389,2012,163,392,2013,164,393,2013,166,390,2015,166,389,2011,162,389,2011,161,389,2013,164,390,2011,162,389,2013,162,390,2014,162,387,2013,164,388,2013}, +{52, 164,387,2016,161,389,2013,162,390,2012,165,391,2014,162,388,2011,161,388,2013,165,391,2014,165,385,2013,162,389,2012,164,392,2013,161,395,2014,167,392,2013,162,388,2012,159,387,2010,165,392,2013,167,395,2014,165,393,2016,165,389,2011,162,388,2011,164,390,2014,164,393,2011,167,394,2015,167,393,2014,164,388,2010,163,390,2012,165,392,2013,165,390,2014,160,390,2015,164,392,2013,167,394,2010,167,390,2011,163,388,2015,163,391,2012,164,392,2014,164,392,2014,166,393,2015,164,391,2015,163,390,2012,167,390,2014,162,392,2013,162,393,2014,164,392,2013,167,393,2012,163,390,2013,164,390,2010,164,392,2012,166,391,2014,164,391,2014,163,390,2013,165,389,2013,162,390,2014,164,391,2011}, +{52, 163,391,2014,165,392,2013,168,389,2012,164,390,2012,163,389,2014,164,391,2012,162,391,2013,164,391,2014,164,388,2013,166,388,2013,163,388,2014,161,389,2012,161,388,2012,163,391,2014,165,392,2015,163,389,2014,166,386,2012,166,389,2010,163,393,2013,164,393,2014,164,390,2012,163,389,2012,162,389,2011,164,391,2012,165,390,2014,166,391,2014,164,392,2011,163,392,2014,164,391,2010,161,390,2013,165,391,2011,167,391,2013,165,388,2011,163,389,2012,165,390,2010,164,391,2014,163,395,2014,163,390,2012,166,388,2013,165,391,2010,163,391,2014,165,391,2013,163,391,2012,164,392,2013,164,392,2013,163,391,2013,164,390,2013,163,390,2013,164,388,2016,162,388,2011,163,391,2015,162,392,2014}, +{53, 162,390,2013,165,389,2011,164,391,2012,163,392,2013,162,392,2012,162,391,2013,163,393,2013,165,390,2013,164,390,2012,162,391,2012,163,389,2011,164,390,2012,162,393,2015,163,394,2015,163,392,2015,166,386,2011,166,388,2013,161,389,2012,161,390,2013,164,394,2015,164,393,2015,163,387,2013,163,387,2011,163,390,2012,166,390,2012,164,388,2014,161,389,2013,162,391,2012,165,392,2016,165,392,2014,160,388,2014,163,388,2013,167,391,2014,163,390,2012,163,391,2012,162,392,2011,160,392,2014,164,390,2014,164,389,2014,163,389,2011,163,390,2014,165,391,2014,162,390,2011,160,390,2014,161,391,2014,163,386,2014,164,386,2014,164,389,2013,165,390,2014,163,390,2013,162,390,2015,162,390,2011,163,390,2017}, +{52, 164,389,2012,165,388,2012,165,391,2012,162,390,2013,164,390,2015,161,388,2012,160,392,2014,163,393,2013,166,388,2011,161,388,2011,163,387,2013,165,391,2015,163,392,2011,162,391,2014,160,390,2010,162,390,2011,164,393,2013,163,389,2014,163,389,2012,164,390,2012,166,392,2013,162,388,2014,160,389,2015,161,391,2015,164,390,2013,165,387,2011,162,389,2012,164,391,2013,167,389,2014,162,389,2011,162,390,2012,161,390,2013,163,391,2013,165,388,2013,165,390,2012,165,389,2012,162,390,2012,161,387,2012,162,392,2012,164,390,2013,160,388,2013,163,389,2011,168,390,2013,164,391,2014,162,389,2015,163,390,2012,161,389,2013,161,390,2014,164,388,2014,163,385,2012,165,391,2016,165,389,2013}, +{52, 162,391,2014,162,391,2013,162,388,2014,162,387,2013,164,388,2010,165,389,2012,165,391,2012,162,389,2012,161,389,2014,162,391,2013,162,390,2014,166,388,2014,163,387,2013,162,389,2013,164,391,2015,162,389,2013,162,389,2011,162,386,2011,160,389,2011,162,389,2013,167,396,2012,162,392,2016,163,392,2015,162,389,2014,164,391,2013,165,388,2013,161,390,2013,161,390,2012,163,395,2014,166,390,2013,165,389,2012,161,390,2010,162,392,2014,164,387,2013,161,390,2013,165,390,2013,163,392,2013,164,392,2013,166,392,2010,163,386,2012,161,388,2012,161,385,2011,160,392,2011,165,389,2011,162,388,2015,163,384,2013,164,385,2015,165,386,2012,165,386,2011,159,387,2015,161,387,2013,160,387,2013}, +{53, 165,384,2013,164,386,2014,163,381,2013,163,384,2012,165,387,2014,161,393,2017,163,391,2016,162,389,2013,165,386,2011,166,386,2010,162,387,2011,164,390,2012,164,392,2016,161,389,2013,164,391,2014,166,392,2011,163,388,2012,162,388,2013,164,390,2011,163,389,2013,164,392,2012,162,392,2014,162,392,2013,164,387,2010,162,389,2013,165,391,2014,166,391,2012,163,392,2012,160,388,2013,160,388,2009,165,389,2013,166,389,2015,165,390,2012,163,388,2016,162,390,2013,162,392,2015,162,399,2017,162,398,2014,164,395,2012,164,393,2007,165,399,2012,167,398,2008,163,398,2007,158,399,2010,164,412,2010,167,409,2010,158,398,2009,161,395,2004,167,396,2006,166,403,2008,164,404,2014,162,406,2017,166,397,2007}, +{53, 167,395,2010,167,393,2010,161,389,2012,162,393,2013,166,393,2016,165,388,2013,162,386,2014,165,395,2014,166,394,2017,164,387,2014,165,379,2012,163,381,2007,160,388,2013,164,394,2018,164,388,2016,163,383,2013,165,380,2013,164,383,2010,164,388,2012,160,390,2014,161,386,2012,160,384,2012,159,386,2013,164,382,2014,164,384,2015,164,383,2015,162,385,2015,163,386,2015,161,382,2012,160,382,2016,160,381,2009,160,381,2013,163,384,2017,167,386,2017,167,386,2016,160,385,2019,159,376,2012,159,378,2011,162,384,2013,164,387,2014,162,382,2016,163,381,2015,165,383,2013,164,383,2016,162,379,2013,158,385,2014,159,385,2014,163,384,2016,165,379,2014,162,378,2013,164,383,2014,163,384,2015,158,383,2017}, +}; +static const uint32_t duration_SPO2[] = +{ +1013, +1048, +1062, +1059, +1037, +1062, +1065, +1038, +1058, +1060, +1040, +1058, +1060, +1039, +1060, +1060, +1036, +1061, +1061, +1040, +1059, +1062, +1035, +1060, +1062, +1034, +1062, +1059, +1060, +1038, +1060, +1061, +1036, +1060, +1061, +1037, +1062, +1063, +1037, +1059, +1060, +1145, +1059, +1063, +1036, +1062, +1062, +1037, +1059, +1061, +1035, +1060, +1061, +1048, +1047, +1064, +1048, +1049, +1063, +}; + +static const uint8_t frame_SPO2[] = +{ +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, +36, +37, +38, +39, +40, +41, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +58, +59, +}; + +#endif diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/pxialg_spo2.h b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/pxialg_spo2.h new file mode 100644 index 000000000..fdda92655 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/pxialg_spo2.h @@ -0,0 +1,152 @@ +#ifndef __PXIALG_SPO2_H__ +#define __PXIALG_SPO2_H__ + + +#include + + +#if defined(WIN32) && !defined(PXIALG_STATIC_LIB) +# ifdef PXIALG_EXPORTS +# define PXIALG_API __declspec(dllexport) +# else +# define PXIALG_API __declspec(dllimport) +# endif +#else +# define PXIALG_API +#endif // WIN32 + +#pragma pack(1) +typedef struct SpO2_mems { + int16_t data[3]; +} SpO2_mems_t; + +typedef struct SpO2_info { + float IR_DC; + float R_DC; + float G_DC; + float IR_AC; + float R_AC; + float G_AC; + float R_IR_Ratio; + float R_G_Ratio; + float G_IR_Ratio; + float Noise; + float SpO2_ref; + float PI; + float PVI; + float RMS; + float MEMS; + float Output[5]; + float xyz_mean[3]; +} SpO2_info_t; +#pragma pack() + +typedef enum { + SPO2_MSG_SUCCESS = 0, + SPO2_MSG_ALG_NOT_OPEN, + SPO2_MSG_ALG_REOPEN, + SPO2_MSG_ALG_NOT_SUPPORT, + SPO2_MSG_INVALID_ARGUMENT, + SPO2_MSG_MOVING_SPO2_READY = 0x100, + SPO2_MSG_MOVING_SPO2_NOT_READY, + SPO2_MSG_MOVING_SPO2_STOP, +}spo2_msg_code_t; + + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + + +PXIALG_API uint32_t SpO2_OpenSize(void); +PXIALG_API int SpO2_Open(void *mem); +PXIALG_API int SpO2_Close(void); +PXIALG_API int SpO2_GetSpO2(float *spo2); +PXIALG_API int SpO2_GetReadyFlag(uint8_t *ready_flag); +PXIALG_API int SpO2_GetPeriodicity(float *periodicity); +PXIALG_API int SpO2_Version(void); +PXIALG_API int SpO2_Process(int touch_flag, int total_channel, int *input, int samples_per_ch, float time_in); +PXIALG_API int SpO2_ProcessD(int touch_flag, int total_channel, int *input, int samples_per_ch, float time_in); +PXIALG_API int SpO2_GetFilteredData(int touch_flag, int total_channel, int expo_R, int expo_IR, int DAC_R, int DAC_IR, float **filter_R, float **filter_IR, int *FilteredDataLength); + +//parameters +PXIALG_API int SpO2_SetIIRFilterRatio(float IIRFilterRatio); //0 ~ 0.5. bigger value more smooth. +PXIALG_API int SpO2_SetMotionDetectionLevel(float level); +PXIALG_API int SpO2_SetInputModelScale(float scale); +PXIALG_API int SpO2_SetInputCorrelationTh(float th); +PXIALG_API int SpO2_SetInputRatioLow(float ratio); +PXIALG_API int SpO2_SetInputCoefLow0(float coef); +PXIALG_API int SpO2_SetInputCoefLow1(float coef); +PXIALG_API int SpO2_SetInputCoefLow2(float coef); +PXIALG_API int SpO2_SetInputCoefLow3(float coef); +PXIALG_API int SpO2_SetInputCoefMid0(float coef); +PXIALG_API int SpO2_SetInputCoefMid1(float coef); +PXIALG_API int SpO2_SetInputCoefMid2(float coef); +PXIALG_API int SpO2_SetInputCoefMid3(float coef); +PXIALG_API int SpO2_SetInputCoefHigh0(float coef); +PXIALG_API int SpO2_SetInputCoefHigh1(float coef); +PXIALG_API int SpO2_SetInputCoefHigh2(float coef); +PXIALG_API int SpO2_SetInputCoefHigh3(float coef); +PXIALG_API int SpO2_SetInputRatioHighBound(float bound); +PXIALG_API int SpO2_SetInputRatioLowBound(float bound); +PXIALG_API int SpO2_SetInputFlagCheckHr(int value); +PXIALG_API int SpO2_SetOutputHighBound(float value); +PXIALG_API int SpO2_SetOutputLowBound(float value); +PXIALG_API int SpO2_Set_Init_Low_SpO2_Constrain(int value); +PXIALG_API int SpO2_Set_Init_Low_SpO2_Th(float value); + +PXIALG_API int SpO2_Set_Init_Low_SpO2_Check_Sec(int value); + +PXIALG_API int SpO2_Set_Motion_Rms_Th(float value); +PXIALG_API int SpO2_Set_Motion_Rms_Th2(float value); + +PXIALG_API int SpO2_Set_Correlation_Th2_Count(int value); +PXIALG_API int SpO2_Set_Input_Correlation_Th2(float value); + +PXIALG_API int SpO2_Set_Flag_Hold_Breathe_Mode(char value); + +PXIALG_API int SpO2_Set_Keep_Init_SpO2_Bound(float value); +PXIALG_API int SpO2_Set_Keep_Init_SpO2_Count_Th(int value); +PXIALG_API int SpO2_Set_SpO2_Bias_Value(float value); +PXIALG_API int SpO2_Set_SpO2_Outlier_Smooth_Coef(float value); +PXIALG_API int SpO2_Set_SpO2_Decrease_Coef(float value); + +PXIALG_API int SpO2_Set_Motion_MEMS_Th(float value); + +PXIALG_API int SpO2_Set_T1(float value); +PXIALG_API int SpO2_Set_T2(float value); +PXIALG_API int SpO2_Set_T3(float value); +PXIALG_API int SpO2_Set_T4(float value); +PXIALG_API int SpO2_Set_T5(float value); +PXIALG_API int SpO2_Set_Spo2_Force_Output_Second(int value); + +PXIALG_API int Spo2_Set_SpO2_First_Smooth_Th(float value); +PXIALG_API int Spo2_Set_SpO2_First_Smooth_Sec(int value); +PXIALG_API int Spo2_Set_SpO2_Correlation_Smooth_Th(float value); + +//set HR +PXIALG_API int SpO2_SetHrValue(int value); + +//get SPO2_Info +PXIALG_API int SpO2_GetInfo(SpO2_info_t *info); + +PXIALG_API int SpO2_SetMems(SpO2_mems_t *mems, int samples); + +PXIALG_API int SpO2_Set_Update_Sec(int spo2_update_sec); + +PXIALG_API int SpO2_SetMemsRmsThr(float mems_rms_thr); +PXIALG_API int SpO2_CalAvgSpO2(float mySpO2, float trust_flag, float mems_rms, float *result); //called every one second +PXIALG_API int SpO2_SetSkipDataLen(int len); +PXIALG_API int SpO2_SetChMapping(int8_t *alg_ch, int8_t ch_nr); + +PXIALG_API int Spo2_Set_Force_Output_Value(float value); +PXIALG_API int Spo2_Set_Force_Output_Value2(float value); + +PXIALG_API int SpO2_Set_Signal_Periodicity_Th(float value); + +#ifdef __cplusplus +} +#endif // __cplusplus + + +#endif diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/test_library_SPO2.c b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/test_library_SPO2.c new file mode 100644 index 000000000..2f76e5259 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_spo2/V703/test_library_SPO2.c @@ -0,0 +1,432 @@ +// algorithm +#include "pxialg_spo2.h" +// HR algorithm +#include "pxialg.h" +// testpattern +#include "pah8009_testpattern_SPO2.h" +// platform +#include + +#include "pah800x_main.h" +//#include "system_clock.h" +//#include "i2c.h" +//#include "gpio_ctrl.h" +//#include "pah_comm.h" +#include +#include "nrf_delay.h" +#define array_szie(arr) (sizeof(arr) / sizeof(arr[0])) + +#define SAMPLES_PER_CHANNEL 25 +#define TOTAL_CHANNEL 3 + +//#define Open_Rest_Flow + +static SpO2_mems_t mems_data_raw[150]; //add item + +typedef struct +{ + void *pBuffer; + void *hr_pBuffer; +} pxialg_spo2_state; + +//#define parameter_printf(...) NRF_LOG_RAW_INFO(__VA_ARGS__) + +extern void spo2_log_printf(char s, float f); +//static void spo2_log_printf(char s, float f) +//{ +// parameter_printf("%s= "LOG_FLOAT_MARKER" \n",s, LOG_FLOAT(f)); + +//} + + + + +static void bubblesort(float *input,int count) +{ + int i,j; + float sort_temp; + for(i=0;i=25) ) + { + alg_count = alg_count -25; + if (ReadyFlag > 0) + { + LOG_PRINT("myHR = "LOG_FLOAT_MARKER" ",LOG_FLOAT(myHR)); + //nrf_delay_ms(10); + LOG_PRINT(",grade = "LOG_FLOAT_MARKER" ",LOG_FLOAT(hr_grader)); + //nrf_delay_ms(10); + LOG_PRINT(",spo2 = "LOG_FLOAT_MARKER" ",LOG_FLOAT(mySpO2)); + //nrf_delay_ms(10); + LOG_PRINT(",correlation = "LOG_FLOAT_MARKER" ",LOG_FLOAT(correlation)); + //nrf_delay_ms(10); + LOG_PRINT(",trust_flag = "LOG_FLOAT_MARKER" ",LOG_FLOAT(trust_flag)); + //nrf_delay_ms(10); + LOG_PRINT(", SignalPeriodicity = "LOG_FLOAT_MARKER" ",LOG_FLOAT(SignalPeriodicity)); + //nrf_delay_ms(10); + LOG_PRINT(",MEMS_RMS = "LOG_FLOAT_MARKER" ",LOG_FLOAT(MEMS_RMS)); + //nrf_delay_ms(10); + LOG_PRINT(",reason = %d \n",no_value_reason); + } + else + { + LOG_PRINT("myHR = "LOG_FLOAT_MARKER" ",LOG_FLOAT(myHR)); + //nrf_delay_ms(10); + LOG_PRINT(",grade = "LOG_FLOAT_MARKER" ",LOG_FLOAT(hr_grader)); + //nrf_delay_ms(10); + LOG_PRINT(",spo2 = "LOG_FLOAT_MARKER" ",LOG_FLOAT(mySpO2)); + //nrf_delay_ms(10); + LOG_PRINT(",correlation = "LOG_FLOAT_MARKER" ",LOG_FLOAT(correlation)); + //nrf_delay_ms(10); + LOG_PRINT(",trust_flag = "LOG_FLOAT_MARKER" ",LOG_FLOAT(trust_flag)); + //nrf_delay_ms(10); + LOG_PRINT(", SignalPeriodicity = "LOG_FLOAT_MARKER" ",LOG_FLOAT(SignalPeriodicity)); + //nrf_delay_ms(10); + LOG_PRINT(",MEMS_RMS = "LOG_FLOAT_MARKER" ",LOG_FLOAT(MEMS_RMS)); + //nrf_delay_ms(10); + LOG_PRINT(",reason = %d \n",no_value_reason); + + } + +// float new_spo2=mySpO2; + + + #if defined(Optimize_SPO2_flow) + //time_accu=time_accu+time; + LOG_PRINT("time_accu = %d\n",time_accu); + if(time_accu>=31000) + { + spo2_array[count]=mySpO2; + count=count+1; + + LOG_PRINT("Over_30_sec_Stop_measurement\n"); + LOG_PRINT("This_meausrement_suggest_spo2_value is"); + + bubblesort(spo2_array,count); + + if(count % 2 == 0) + { + //LOG_PRINT(" "LOG_FLOAT_MARKER" \n", LOG_FLOAT(spo2_array[count/2])); + LOG_PRINT(" "LOG_FLOAT_MARKER" \n",LOG_FLOAT((spo2_array[(int)(count/2)] + spo2_array[(int)(count/2) - 1]) / 2.0f)); + } + else + { + LOG_PRINT(" "LOG_FLOAT_MARKER"\n", LOG_FLOAT(spo2_array[(int)(count/2)]*1.0f)); + } + count=0; + nrf_delay_ms(50); + //add sensor stop here + SpO2_Close(); + PxiAlg_Close(); + free(pBuffer); + free(_spo2_state.hr_pBuffer); + //NRF_LOG_FLUSH(); + return; + + } + else + { + if(mySpO2>0) + { + spo2_array[count]=mySpO2; + count=count+1; + } + + } + #endif + } + else + { + + switch (ret_value) + { + case SPO2_MSG_ALG_NOT_OPEN: + LOG_PRINT("Algorithm is not initialized. \n"); + break; + + case SPO2_MSG_ALG_REOPEN: + LOG_PRINT("Algorithm is re initialized. \n"); + break; + + case SPO2_MSG_ALG_NOT_SUPPORT: + LOG_PRINT("Algorithm is not support. \n"); + break; + case SPO2_MSG_SUCCESS: + //LOG_PRINT("Algorithm is SUCCESS. \n"); + break; + default: + LOG_PRINT("Algorithm unhandle error = %d \n", ret_value); + break; + } + } + + + + nrf_delay_ms(40); + } + + LOG_PRINT("Out of memory. \n"); + nrf_delay_ms(10); + SpO2_Close(); + PxiAlg_Close(); + free(pBuffer); + free(_spo2_state.hr_pBuffer); + return; +} diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_stress/V6033/pxialg_hrv.h b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_stress/V6033/pxialg_hrv.h new file mode 100644 index 000000000..0e2a0079a --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/algorithm/pah_stress/V6033/pxialg_hrv.h @@ -0,0 +1,72 @@ +#ifndef _PXIALG_HRV_ +#define _PXIALG_HRV_ +#include "stdint.h" + +typedef struct +{ + void *pBuffer; + float collect_duration; + uint8_t has_got_sdnn; +} hrv_state_s; + + + +#if defined(WIN32) && !defined(PXIALG_STATIC_LIB) +# ifdef PXIALG_EXPORTS +# define PXIALG_API __declspec(dllexport) +# else +# define PXIALG_API __declspec(dllimport) +# endif +#else +# define PXIALG_API +#endif // WIN32 + + +#ifdef __cplusplus +extern "C" +{ +#endif + PXIALG_API int HRVReset(void); + PXIALG_API int HRVGetMemorySize(int enable_lhr, int test_seconds, int sampling_rate); + PXIALG_API int HRVOpen(void *p_buffer); + PXIALG_API int HRVProcess(int data_ready, float data); + PXIALG_API int HRVProcessD(int data_ready, uint32_t data); + PXIALG_API int HRVClose(void); + + PXIALG_API int HRVGetVersion(void); + PXIALG_API float HRVGetSDNN(void); + PXIALG_API int HRVGetSDNNLevel(int m_iAge, float dSDNN); + PXIALG_API float HRVGetLHRatio(float *nlf, float *nhf); + PXIALG_API float HRVGetRMSSD(void); + PXIALG_API int HRVGetSleepQuality(int age); + PXIALG_API int HRVGetOnlineRRIReportFlag(void); + PXIALG_API float HRVGetOnlineRRI(void); + PXIALG_API int HRVGetRawRRINum(void); + PXIALG_API float * HRVGetRawRRIBuf(void); + PXIALG_API float HRVGetNoiseRate(void); + PXIALG_API float HRVGetRRIStability(void); + PXIALG_API float HRVGetRRIQuality(void); + PXIALG_API int HRVGetReadyFlag(void); + PXIALG_API int HRVGetMotionFlag(void); + PXIALG_API int HRVGetAnomalyFlag(void); + PXIALG_API int HRVGetHRAvg(void); + + PXIALG_API void HRVSetSkipCounterTh(int SkipCounterTh); + PXIALG_API void HRVSetFreqOffset(float FreqOffset); + PXIALG_API void HRVSetDiffTime(float DiffTime, int SampleNum); + PXIALG_API void HRVSetPeakProcessReadyCounterTh(int PeakProcessReady3Counter_Th0, + int PeakProcessReady3Counter_Th1, + int PeakProcessReady3Counter_Th2, + int PeakProcessReady3Counter_Th3, + int m_PeakProcessReady3Counter_HeartRate_Th1, + int m_PeakProcessReady3Counter_HeartRate_Th2, + int m_PeakProcessReady3Counter_HeartRate_Th3); + + PXIALG_API float HRVGetStress(int grade); + +#ifdef __cplusplus +} +#endif + +#endif /* _PXIALG_HRV_ */ + diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/factory/pah8009_factory_reg.h b/code/sdk/zhihui/drivers/ppg/pah8009/factory/pah8009_factory_reg.h new file mode 100644 index 000000000..af20cbf7a --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/factory/pah8009_factory_reg.h @@ -0,0 +1,94 @@ +#ifndef __pah8009_factory_reg_h__ +#define __pah8009_factory_reg_h__ + +// pah +#include "pah800x_factory_test.h" + + +static const uint8_t PAH_800x_REG_DEVICE_INIT_FACTORY[][2] = { +// { 0xEE,0x07 }, //SW RESET + { 0xE8,0x00 },//Close suspend + { 0xD1,0xD0 },//{R_GPIO_0_IEB, R_GPIO_1_IEB, R_GPIO_0_OEB, R_GPIO_1_OEB, R_GPIO_0_PULLL_EnH, R_GPIO_1_PULLL_EnH, R_GPIO_0_PULLH_EnH, R_GPIO_1_PULLH_EnH}; + { 0xD2,0x00 },//R_GPIO_0_Open_Drain_EnH(0xD2[5]), 1(0x20):GPIO default open-drain mode, 0(0x00):GPIO debug mode + { 0xD3,0x20 },//GPIO debug select +// { 0xD6,0x30 },//{Dummy, R_I2C_SLEW, R_I2C_DRV[1:0], Dummy[3:0]} +// { 0xD5,0x44 },//IO-level(I2C), 44:3.3V, 00:1.8V +// { 0xB2,0x25 }, + { 0x55,0x24 },//Soft Reset:04 Hard Reset:24 + { 0x52,0x12 },//VDDAY=1.63V +// { 0xA6,0xF7 },//Cmd_vdday_pwrsv_sel_EnH=0 + { 0xAE,0x3F },//R_LPO_Cali_mode=1 +}; + +static const uint8_t PAH_800x_REG_BRIGHTNESS_TEST_FACTORY[][2] = { + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x08,0x00 },//A period + { 0x09,0x08 },//A period + { 0x0A,0x00 },//B period + { 0x0B,0x08 },//B period + { 0x0C,0x00 },//C period + { 0x0D,0x08 },//C period + { 0x0E,0x01 },//RDB_FrameNum_A[6:0] + { 0x0F,0x01 },//RDB_FrameNum_B[6:0] + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x77 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x14,0x52 },//{RDB_ChA_congain_sel[1:0], Dummy[0], R_LEDDAC_code0[4:0]} + { 0x15,0x44 },//{RDB_ChB_congain_sel[1:0], Dummy[0], R_LEDDAC_code1[4:0]} + { 0x16,0x44 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x17,0x00 },//RDB_expo_A[7:0] + { 0x18,0x01 },//RDB_expo_A[15:8] + { 0x19,0x00 },//RDB_expo_B[7:0] + { 0x1A,0x01 },//RDB_expo_B[15:8] + { 0x1B,0x00 },//RDB_expo_C[7:0] + { 0x1C,0x01 },//RDB_expo_C[15:8] + { 0x1D,0x2F },//{R_ChA_LED_EnH[2:0], R_ChA_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1E,0x4F },//{R_ChB_LED_EnH[2:0], R_ChB_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0xF7 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x2A },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0xEB,0x80 },//update_flag +// { 0x20,0xF7 },//Clear INT +}; + +static const uint8_t PAH_800x_REG_LEAK_LIGHT_TEST_FACTORY[][2] = { + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x08,0x00 },//A period + { 0x09,0x08 },//A period + { 0x0A,0x00 },//B period + { 0x0B,0x08 },//B period + { 0x0C,0x00 },//C period + { 0x0D,0x08 },//C period + { 0x0E,0x01 },//RDB_FrameNum_A[6:0] + { 0x0F,0x01 },//RDB_FrameNum_B[6:0] + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x77 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x14,0x12 },//{RDB_ChA_congain_sel[1:0], Dummy[0], R_LEDDAC_code0[4:0]} + { 0x15,0x0A },//{RDB_ChB_congain_sel[1:0], Dummy[0], R_LEDDAC_code1[4:0]} + { 0x16,0x8A },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x17,0x00 },//RDB_expo_A[7:0] + { 0x18,0x02 },//RDB_expo_A[15:8] + { 0x19,0x00 },//RDB_expo_B[7:0] + { 0x1A,0x02 },//RDB_expo_B[15:8] + { 0x1B,0x20 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1D,0x2F },//{R_ChA_LED_EnH[2:0], R_ChA_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1E,0x4F },//{R_ChB_LED_EnH[2:0], R_ChB_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0xF7 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x2A },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0xEB,0x80 },//update_flag +// { 0x20,0xF7 },//Clear INT +}; + + +//============================================================================ +// Public function +//============================================================================ +void factory_test_mode(factory_test_type test_type, bool expo_adjust_en, uint16_t expo_a, uint16_t expo_b, uint16_t expo_c); + + +#endif // header guard diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/factory/pah800x_factory_test.c b/code/sdk/zhihui/drivers/ppg/pah8009/factory/pah800x_factory_test.c new file mode 100644 index 000000000..d4cd39c3c --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/factory/pah800x_factory_test.c @@ -0,0 +1,556 @@ +// pah +#include "pah800x_factory_test.h" +#include "pah8009_factory_reg.h" + +static uint16_t factory_test_ch[3] = {0}; + +//============================================================================ +// Static Global Variable +//============================================================================ +static pah_800x_test_t _factory_state; +static pah_verify_config_t g_config_table[test_type_num] = +{ + //factory_tesst_num=0 + { + .ch_spec[0] = + { + .verify_enabled = BRIGHTNESS_GLODEN_CHA_ENABLE, + .min_enabled = BRIGHTNESS_GLODEN_CHA_MIN_ENABLE, .max_enabled = BRIGHTNESS_GLODEN_CHA_MAX_ENABLE, + .min = BRIGHTNESS_GLODEN_CHA_MIN, .max = BRIGHTNESS_GLODEN_CHA_MAX + }, + .ch_spec[1] = + { + .verify_enabled = BRIGHTNESS_GLODEN_CHB_ENABLE, + .min_enabled = BRIGHTNESS_GLODEN_CHB_MIN_ENABLE, .max_enabled = BRIGHTNESS_GLODEN_CHB_MAX_ENABLE, + .min = BRIGHTNESS_GLODEN_CHB_MIN, .max = BRIGHTNESS_GLODEN_CHB_MAX + }, + .ch_spec[2] = + { + .verify_enabled = BRIGHTNESS_GLODEN_CHC_ENABLE, + .min_enabled = BRIGHTNESS_GLODEN_CHC_MIN_ENABLE, .max_enabled = BRIGHTNESS_GLODEN_CHC_MAX_ENABLE, + .min = BRIGHTNESS_GLODEN_CHC_MIN, .max = BRIGHTNESS_GLODEN_CHC_MAX + }, + .test_regs = + { + .init_reg_arr = + { + .reg_arr = (pah_reg*)PAH_800x_REG_DEVICE_INIT_FACTORY, + .reg_arr_len = PAH_ARRAY_SIZE(PAH_800x_REG_DEVICE_INIT_FACTORY) + }, + .test_reg_arr = + { + .reg_arr = (pah_reg*)PAH_800x_REG_BRIGHTNESS_TEST_FACTORY, + .reg_arr_len = PAH_ARRAY_SIZE(PAH_800x_REG_BRIGHTNESS_TEST_FACTORY) + } + } + }, + + //factory_tesst_num=1 + { + .ch_spec[0] = + { + .verify_enabled = BRIGHTNESS_TARGET_CHA_ENABLE, + .min_enabled = BRIGHTNESS_TARGET_CHA_MIN_ENABLE, .max_enabled = BRIGHTNESS_TARGET_CHA_MAX_ENABLE, + .min = BRIGHTNESS_TARGET_CHA_MIN, .max = BRIGHTNESS_TARGET_CHA_MAX + }, + .ch_spec[1] = + { + .verify_enabled = BRIGHTNESS_TARGET_CHB_ENABLE, + .min_enabled = BRIGHTNESS_TARGET_CHB_MIN_ENABLE, .max_enabled = BRIGHTNESS_TARGET_CHB_MAX_ENABLE, + .min = BRIGHTNESS_TARGET_CHB_MIN, .max = BRIGHTNESS_TARGET_CHB_MAX + }, + .ch_spec[2] = + { + .verify_enabled = BRIGHTNESS_TARGET_CHC_ENABLE, + .min_enabled = BRIGHTNESS_TARGET_CHC_MIN_ENABLE, .max_enabled = BRIGHTNESS_TARGET_CHC_MAX_ENABLE, + .min = BRIGHTNESS_TARGET_CHC_MIN, .max = BRIGHTNESS_TARGET_CHC_MAX + }, + .test_regs = + { + .init_reg_arr = + { + .reg_arr = (pah_reg*)PAH_800x_REG_DEVICE_INIT_FACTORY, + .reg_arr_len = PAH_ARRAY_SIZE(PAH_800x_REG_DEVICE_INIT_FACTORY) + }, + .test_reg_arr = + { + .reg_arr = (pah_reg*)PAH_800x_REG_BRIGHTNESS_TEST_FACTORY, + .reg_arr_len = PAH_ARRAY_SIZE(PAH_800x_REG_BRIGHTNESS_TEST_FACTORY) + } + } + }, + + //factory_tesst_num=2 + { + .ch_spec[0] = + { + .verify_enabled = LEAK_LIGHT_TARGET_CHA_ENABLE, + .min_enabled = LEAK_LIGHT_TARGET_CHA_MIN_ENABLE, .max_enabled = LEAK_LIGHT_TARGET_CHA_MAX_ENABLE, + .min = LEAK_LIGHT_TARGET_CHA_MIN, .max = LEAK_LIGHT_TARGET_CHA_MAX + }, + .ch_spec[1] = + { + .verify_enabled = LEAK_LIGHT_TARGET_CHB_ENABLE, + .min_enabled = LEAK_LIGHT_TARGET_CHB_MIN_ENABLE, .max_enabled = LEAK_LIGHT_TARGET_CHB_MAX_ENABLE, + .min = LEAK_LIGHT_TARGET_CHB_MIN, .max = LEAK_LIGHT_TARGET_CHB_MAX + }, + .ch_spec[2] = + { + .verify_enabled = LEAK_LIGHT_TARGET_CHC_ENABLE, + .min_enabled = LEAK_LIGHT_TARGET_CHC_MIN_ENABLE, .max_enabled = LEAK_LIGHT_TARGET_CHC_MAX_ENABLE, + .min = LEAK_LIGHT_TARGET_CHC_MIN, .max = LEAK_LIGHT_TARGET_CHC_MAX + }, + .test_regs = + { + .init_reg_arr = + { + .reg_arr = (pah_reg*)PAH_800x_REG_DEVICE_INIT_FACTORY, + .reg_arr_len = PAH_ARRAY_SIZE(PAH_800x_REG_DEVICE_INIT_FACTORY) + }, + .test_reg_arr = + { + .reg_arr = (pah_reg*)PAH_800x_REG_LEAK_LIGHT_TEST_FACTORY, + .reg_arr_len = PAH_ARRAY_SIZE(PAH_800x_REG_LEAK_LIGHT_TEST_FACTORY) + } + } + }, + + //factory_tesst_num=3 + { + .test_regs = + { + .init_reg_arr = + { + .reg_arr = (pah_reg*)PAH_800x_REG_DEVICE_INIT_FACTORY, + .reg_arr_len = PAH_ARRAY_SIZE(PAH_800x_REG_DEVICE_INIT_FACTORY) + }, + .test_reg_arr = + { + .reg_arr = (pah_reg*)PAH_800x_REG_LEAK_LIGHT_TEST_FACTORY, + .reg_arr_len = PAH_ARRAY_SIZE(PAH_800x_REG_LEAK_LIGHT_TEST_FACTORY) + } + } + } + +}; + +//============================================================================ +// Private function +//============================================================================ +static void pah_sensor_factory_mode_init(factory_test_type test_type, bool expo_adjust_en, uint16_t expo_a, uint16_t expo_b, uint16_t expo_c); +static void pah_sensor_factory_mode_start(void); +static void pah_sensor_factory_mode_stop(void); +static void pah_sensor_factory_mode_task(void); +static void pah_sensor_factory_mode_verify_result(void); + +static pah_ret _pah_800x_hal_comm_write(uint8_t addr, const uint8_t *data, size_t write_size); +static pah_ret _pah_800x_hal_comm_read(uint8_t addr, uint8_t *data, size_t read_size); +static pah_ret _comm_write(uint8_t addr, uint8_t data); + +static pah_ret _pah_800x_hal_write_reg_arr(const pah_reg_arr *reg_arr); +static pah_ret _pah_800x_hal_write_reg_array(const uint8_t reg_array[][2], size_t length); +static pah_ret _pah_800x_hal_write_suspend_state(bool suspend); +static pah_ret _pah_800x_hal_write_interrupt_clear(void); +static pah_ret _pah_800x_hal_write_ch_exposure(uint16_t expo_a, uint16_t expo_b, uint16_t expo_c, uint8_t ch_num); +static pah_ret _pah_800x_hal_tg_toggle(bool enable); +static pah_ret _pah_800x_hal_update_flag(void); + +static pah_ret _pah_800x_hal_read_product_id(uint16_t *product_id); +static pah_ret _pah_800x_hal_read_ppg_interrupt(uint8_t *ppg_interrupt); +static pah_ret _pah_800x_hal_read_ppg_overflow(uint8_t *ppg_overflow, uint8_t *overflow_num); +static pah_ret _pah_800x_hal_read_ppg_adc(uint16_t *ppg_adc, uint8_t ch_num); +static pah_ret _pah_800x_hal_check_enable_channel(pah_800x_test_t *factory_state, const pah_reg_arr *reg_arr); + + +//============================================================================ +// Public function +//============================================================================ +void factory_test_mode(factory_test_type test_type, bool expo_adjust_en, uint16_t expo_a, uint16_t expo_b, uint16_t expo_c) +{ + LOG_PRINT("test_type=%d\n{\n factory_test_brightness_golden_sample=0\n " \ + "factory_test_brightness_target_sample=1\n factory_test_leak_light_target_sample=2\n " \ + "factory_test_power_noise=3\n factory_test_INT_high=4\n factory_test_INT_low=5\n}\n", test_type); + + pah_sensor_factory_mode_init(test_type, expo_adjust_en, expo_a, expo_b, expo_c); + + pah_sensor_factory_mode_start(); + + pah_delay_ms(25); + + if (test_type < factory_test_power_noise) + { + pah_sensor_factory_mode_task(); + pah_sensor_factory_mode_verify_result(); + pah_sensor_factory_mode_stop(); + } + else + { + return; + } + + pah_delay_ms(500); + + return; + +} + + +//============================================================================ +// Private function +//============================================================================ +static void pah_sensor_factory_mode_init(factory_test_type test_type, bool expo_adjust_en, uint16_t expo_a, uint16_t expo_b, uint16_t expo_c) +{ + DEBUG_PRINT("%s(%d)\n", __func__, test_type); + + memset(&_factory_state, 0, sizeof(_factory_state)); + + uint16_t product_id = 0; + _pah_800x_hal_read_product_id(&product_id); + DEBUG_PRINT("product_id = 0x%04X\n", product_id); + if (product_id != PAH_800x_PRODUCT_ID) + { + DEBUG_PRINT("Failed to verify product_id\n"); + } +/**/ + for (int ch_index=0; ch_index<3; ch_index++) + { + _factory_state.verify_config.ch_spec[ch_index] = g_config_table[test_type].ch_spec[ch_index]; + } + + _factory_state.verify_config.test_regs = g_config_table[test_type].test_regs; + _pah_800x_hal_write_reg_arr(&_factory_state.verify_config.test_regs.init_reg_arr); + _pah_800x_hal_write_reg_arr(&_factory_state.verify_config.test_regs.test_reg_arr); + _pah_800x_hal_check_enable_channel(&_factory_state, &_factory_state.verify_config.test_regs.test_reg_arr); +/**/ + if (expo_adjust_en) + { + for(uint8_t ch_num=0; ch_num 0); + if (has_ppg_interrupt > 0) + { + for (uint8_t ch_num=0; ch_num < PAH_800x_MAX_CH_NUM; ch_num++) + { + if (_factory_state.test_ch_enabled[ch_num]) + { + _pah_800x_hal_read_ppg_adc(&_factory_state.test_result.adc[ch_num], ch_num); + } + } + } + + //clear_interrupt(state, has_ppg_interrupt, state->ppg_result.has_overflow); + +} + +static void pah_sensor_factory_mode_verify_result(void) +{ + DEBUG_PRINT("%s\n", __func__); + LOG_PRINT("=============== Verify_Result ===============\n" \ + "{\n result=1 : pass\n result=0 : fail\n}\n"); + + for (int i=0; i _factory_state.verify_config.ch_spec[i].max) + { + _factory_state.verify_result.ch_result[i].is_passed = false; + } + else + { + _factory_state.verify_result.ch_result[i].is_passed = true; + } + printf("ch[%d] : (min, value, max)=(%d, %d, %d), result=%d \n",\ + i, _factory_state.verify_config.ch_spec[i].min, \ + _factory_state.test_result.adc[i], \ + _factory_state.verify_config.ch_spec[i].max, \ + _factory_state.verify_result.ch_result[i].is_passed); + } + else if (_factory_state.verify_config.ch_spec[i].verify_enabled + && _factory_state.verify_config.ch_spec[i].min_enabled) + { + if (_factory_state.test_result.adc[i] < _factory_state.verify_config.ch_spec[i].min) + { + _factory_state.verify_result.ch_result[i].is_passed = false; + } + else + { + _factory_state.verify_result.ch_result[i].is_passed = true; + } + printf("ch[%d] : (min, value)=(%d, %d), result=%d \n",\ + i, _factory_state.verify_config.ch_spec[i].min, \ + _factory_state.test_result.adc[i], \ + _factory_state.verify_result.ch_result[i].is_passed); + } + else if (_factory_state.verify_config.ch_spec[i].verify_enabled + && _factory_state.verify_config.ch_spec[i].max_enabled) + { + if (_factory_state.test_result.adc[i] > _factory_state.verify_config.ch_spec[i].max) + { + _factory_state.verify_result.ch_result[i].is_passed = false; + } + else + { + _factory_state.verify_result.ch_result[i].is_passed = true; + } + + factory_test_ch[i] = _factory_state.test_result.adc[i]; + + printf("ch[%d] : (value, max)=(%d, %d), result=%d \n",\ + i, _factory_state.test_result.adc[i], \ + _factory_state.verify_config.ch_spec[i].max, \ + _factory_state.verify_result.ch_result[i].is_passed); + } + } +} + + +//============================================================================ +// Private function (HAL) +//============================================================================ +static pah_ret _pah_800x_hal_comm_write(uint8_t addr, const uint8_t *data, size_t write_size) +{ + //return plat->comm.write(&plat->comm, addr, data, write_size); + //return plat->comm.write(addr, data, write_size); + return pah_comm_i2c_write(addr, data, write_size); +} + +static pah_ret _pah_800x_hal_comm_read(uint8_t addr, uint8_t *data, size_t read_size) +{ + + //return plat->comm.read(&plat->comm, addr, data, read_size); + return pah_comm_i2c_read(addr, data, read_size); +} + +static pah_ret _comm_write(uint8_t addr, uint8_t data) +{ + //return pah_800x_hal_comm_write( addr, &data, 1); + return _pah_800x_hal_comm_write(addr, &data, 1); +} +#define _comm_read(addr, data) _pah_800x_hal_comm_read(addr, data, 1) +#define _comm_burst_read(addr, data, read_size) _pah_800x_hal_comm_read(addr, data, read_size) + + +static pah_ret _pah_800x_hal_write_reg_arr(const pah_reg_arr *reg_arr) +{ + return _pah_800x_hal_write_reg_array(reg_arr->reg_arr, reg_arr->reg_arr_len); +} + +static pah_ret _pah_800x_hal_write_reg_array(const uint8_t reg_array[][2], size_t length) +{ + size_t i = 0; + uint8_t reg_value = 0; + for (i = 0; i < length; ++i) + { + //for trim bit + if(reg_array[i][0] == 0x14) + { + _comm_read(0x14, ®_value); + reg_value = (reg_value & 0x1F) | (reg_array[i][1] & 0xE0); + _comm_write(reg_array[i][0], reg_value); + } + else + _comm_write(reg_array[i][0], reg_array[i][1]); + } + return PAH_RET_SUCCESS; +} + +static pah_ret _pah_800x_hal_write_suspend_state(bool suspend) +{ + uint8_t data = 0; + DEBUG_PRINT("%s(%d)\n", __func__, suspend); + if (suspend) + { + _comm_read(PAH_800x_ADDR_E8, &data); + PAH_SET_BIT(data, PAH_800x_ADDR_E8_CMD_SUSPEND_MODE_BIT); + _comm_write(PAH_800x_ADDR_E8, data); + } + else + { + _comm_read(PAH_800x_ADDR_E8, &data); + PAH_CLEAR_BIT(data, PAH_800x_ADDR_E8_CMD_SUSPEND_MODE_BIT); + _comm_write(PAH_800x_ADDR_E8, data); + + } + DEBUG_PRINT("%s(%d) end\n", __func__, suspend); + + return PAH_RET_SUCCESS; +} + +static pah_ret _pah_800x_hal_write_interrupt_clear(void) +{ + uint8_t data = 0; + // DR interrupt + _comm_read(PAH_800x_ADDR_20, &data); + //PAH_CLEAR_BIT(data, PAH_800x_ADDR_20_BIT_DR_FLAG); + _comm_write(PAH_800x_ADDR_20, (data|0x04)); //SD-revise-20191205 + return PAH_RET_SUCCESS; +} + +static pah_ret _pah_800x_hal_write_ch_exposure(uint16_t expo_a, uint16_t expo_b, uint16_t expo_c, uint8_t ch_num) +{ + //uint8_t data = 0; + DEBUG_PRINT("%s(%d, %d, %d, %d)\n", __func__, expo_a, expo_b, expo_c, ch_num); + + uint8_t a_exposure_low = PAH_UINT16_LOW(expo_a); + uint8_t a_exposure_high = PAH_UINT16_HIGH(expo_a); + uint8_t b_exposure_low = PAH_UINT16_LOW(expo_b); + uint8_t b_exposure_high = PAH_UINT16_HIGH(expo_b); + uint8_t c_exposure_low = PAH_UINT16_LOW(expo_c); + uint8_t c_exposure_high = PAH_UINT16_HIGH(expo_c); + + if(ch_num == PAH_800x_CH_NUM_A) + { + _comm_write(PAH_800x_ADDR_17, a_exposure_low); + _comm_write(PAH_800x_ADDR_18, a_exposure_high); + } + else if(ch_num == PAH_800x_CH_NUM_B) + { + _comm_write(PAH_800x_ADDR_19, b_exposure_low); + _comm_write(PAH_800x_ADDR_1A, b_exposure_high); + } + else if(ch_num == PAH_800x_CH_NUM_C) + { + _comm_write(PAH_800x_ADDR_1B, c_exposure_low); + _comm_write(PAH_800x_ADDR_1C, c_exposure_high); + } + + return PAH_RET_SUCCESS; +} + +static pah_ret _pah_800x_hal_tg_toggle(bool enable) +{ + uint8_t data = 0; + DEBUG_PRINT("%s(%d)\n", __func__, enable); + _comm_read( PAH_800x_ADDR_07_TG, &data); + if(enable) + PAH_SET_BIT(data, PAH_800x_ADDR_07_TG_BIT_EN); + else + PAH_CLEAR_BIT(data, PAH_800x_ADDR_07_TG_BIT_EN); + _comm_write(PAH_800x_ADDR_07_TG, data); + + return PAH_RET_SUCCESS; +} + +static pah_ret _pah_800x_hal_update_flag(void) +{ + _comm_write(PAH_800x_ADDR_EB, PAH_800x_ADDR_E8_UPDATE_FLAG); + + return PAH_RET_SUCCESS; +} + +static pah_ret _pah_800x_hal_read_product_id(uint16_t *product_id) +{ + return _comm_burst_read(PAH_800x_ADDR_00_PRODUCT_ID, (uint8_t *)product_id,2); +} + +static pah_ret _pah_800x_hal_read_ppg_interrupt(uint8_t *ppg_interrupt) +{ + uint8_t data = 0; + _comm_read(PAH_800x_ADDR_20, &data); + if (ppg_interrupt) + *ppg_interrupt = PAH_CHECK_BIT(data, PAH_800x_ADDR_20_BIT_DR_FLAG); + + return PAH_RET_SUCCESS; +} + +static pah_ret _pah_800x_hal_read_ppg_overflow(uint8_t *ppg_overflow, uint8_t *overflow_num) +{ + uint8_t data = 0; + _comm_read( PAH_800x_ADDR_20, &data); + if (ppg_overflow) + { + *ppg_overflow = PAH_CHECK_BIT(data, PAH_800x_ADDR_20_BIT_OVERFLOW_FLAG); + *overflow_num = (data&0x70)>>4; + } + return PAH_RET_SUCCESS; +} + +static pah_ret _pah_800x_hal_read_ppg_adc(uint16_t *ppg_adc, uint8_t ch_num) +{ + uint16_t data = 0; + + if(ch_num == PAH_800x_CH_NUM_A) + _comm_burst_read(PAH_800x_ADDR_2E, (uint8_t*)&data, 2); + else if(ch_num == PAH_800x_CH_NUM_B) + _comm_burst_read(PAH_800x_ADDR_39, (uint8_t*)&data, 2); + else if(ch_num == PAH_800x_CH_NUM_C) + _comm_burst_read(PAH_800x_ADDR_44, (uint8_t*)&data, 2); + + //*ppg_adc = data >> 2; + *ppg_adc = data >> 2; + + return PAH_RET_SUCCESS; +} + +static pah_ret _pah_800x_hal_check_enable_channel(pah_800x_test_t *factory_state, const pah_reg_arr *reg_arr) +{ + for(int i=0;ireg_arr_len;i++) + { + if(reg_arr->reg_arr[i][0] == PAH_800x_ADDR_11_EnCh) + { + uint8_t data = reg_arr->reg_arr[i][1]; + factory_state->test_ch_enabled[0] = PAH_CHECK_BIT(data, 0); // CH A + factory_state->test_ch_enabled[1] = PAH_CHECK_BIT(data, 1); // CH B + factory_state->test_ch_enabled[2] = PAH_CHECK_BIT(data, 2); // CH C + } + } + + return PAH_RET_SUCCESS; +} + + +void pah8009_get_leaklight_data(uint16_t *ch0,uint16_t *ch1,uint16_t *ch2) +{ + *ch0 = factory_test_ch[0]; + *ch1 = factory_test_ch[1]; + *ch2 = factory_test_ch[2]; + + factory_test_ch[0] = 0; + factory_test_ch[1] = 0; + factory_test_ch[2] = 0; +} diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/factory/pah800x_factory_test.h b/code/sdk/zhihui/drivers/ppg/pah8009/factory/pah800x_factory_test.h new file mode 100644 index 000000000..7519958b8 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/factory/pah800x_factory_test.h @@ -0,0 +1,160 @@ +#ifndef __pah800x_factory_test_h__ +#define __pah800x_factory_test_h__ + +// pah +//#include "pah_800x.h" +#include "pah_unit.h" +#include "pah_800x_config.h" + + +//============================================================================ +// Definition +//============================================================================ + +/*---------Brightness Test Golden Option---------*/ +#define BRIGHTNESS_GLODEN_CHA_ENABLE true +#define BRIGHTNESS_GLODEN_CHA_MIN_ENABLE true +#define BRIGHTNESS_GLODEN_CHA_MAX_ENABLE true +#define BRIGHTNESS_GLODEN_CHA_MIN 7600 +#define BRIGHTNESS_GLODEN_CHA_MAX 8400 +#define BRIGHTNESS_GLODEN_CHB_ENABLE true +#define BRIGHTNESS_GLODEN_CHB_MIN_ENABLE true +#define BRIGHTNESS_GLODEN_CHB_MAX_ENABLE true +#define BRIGHTNESS_GLODEN_CHB_MIN 7600 +#define BRIGHTNESS_GLODEN_CHB_MAX 8400 +#define BRIGHTNESS_GLODEN_CHC_ENABLE true +#define BRIGHTNESS_GLODEN_CHC_MIN_ENABLE true +#define BRIGHTNESS_GLODEN_CHC_MAX_ENABLE true +#define BRIGHTNESS_GLODEN_CHC_MIN 7600 +#define BRIGHTNESS_GLODEN_CHC_MAX 8400 + +/*---------Brightness Test Target Option---------*/ +#define BRIGHTNESS_TARGET_CHA_ENABLE true +#define BRIGHTNESS_TARGET_CHA_MIN_ENABLE true +#define BRIGHTNESS_TARGET_CHA_MAX_ENABLE true +#define BRIGHTNESS_TARGET_CHA_MIN 2400 +#define BRIGHTNESS_TARGET_CHA_MAX 15200 +#define BRIGHTNESS_TARGET_CHB_ENABLE true +#define BRIGHTNESS_TARGET_CHB_MIN_ENABLE true +#define BRIGHTNESS_TARGET_CHB_MAX_ENABLE true +#define BRIGHTNESS_TARGET_CHB_MIN 2400 +#define BRIGHTNESS_TARGET_CHB_MAX 15200 +#define BRIGHTNESS_TARGET_CHC_ENABLE true +#define BRIGHTNESS_TARGET_CHC_MIN_ENABLE true +#define BRIGHTNESS_TARGET_CHC_MAX_ENABLE true +#define BRIGHTNESS_TARGET_CHC_MIN 4000 +#define BRIGHTNESS_TARGET_CHC_MAX 12000 + +/*---------Brightness Test Target Option---------*/ +#define LEAK_LIGHT_TARGET_CHA_ENABLE true +#define LEAK_LIGHT_TARGET_CHA_MIN_ENABLE false +#define LEAK_LIGHT_TARGET_CHA_MAX_ENABLE true +#define LEAK_LIGHT_TARGET_CHA_MIN 0 +#define LEAK_LIGHT_TARGET_CHA_MAX 160 +#define LEAK_LIGHT_TARGET_CHB_ENABLE true +#define LEAK_LIGHT_TARGET_CHB_MIN_ENABLE false +#define LEAK_LIGHT_TARGET_CHB_MAX_ENABLE true +#define LEAK_LIGHT_TARGET_CHB_MIN 0 +#define LEAK_LIGHT_TARGET_CHB_MAX 160 +#define LEAK_LIGHT_TARGET_CHC_ENABLE true +#define LEAK_LIGHT_TARGET_CHC_MIN_ENABLE false +#define LEAK_LIGHT_TARGET_CHC_MAX_ENABLE true +#define LEAK_LIGHT_TARGET_CHC_MIN 0 +#define LEAK_LIGHT_TARGET_CHC_MAX 160 + + +//============================================================================ +// Type Definition +//============================================================================ +typedef enum +{ + factory_test_brightness_golden_sample, + factory_test_brightness_target_sample, + factory_test_leak_light_target_sample, + factory_test_power_noise, + factory_test_INT_high, + factory_test_INT_low, + test_type_num, + +} factory_test_type; + +typedef struct +{ + bool verify_enabled; + + bool min_enabled; + bool max_enabled; + + uint16_t min; + uint16_t max; + +} pah_ch_verify_spec_t; + +typedef struct +{ + pah_reg_arr init_reg_arr; + pah_reg_arr test_reg_arr; + +} pah_verify_reg_t; + +typedef struct +{ + pah_ch_verify_spec_t ch_spec[PAH_800x_MAX_CH_NUM]; + + pah_verify_reg_t test_regs; + +} pah_verify_config_t; + +typedef struct +{ + bool has_data; + + // Avaiable only if has_data is true + bool has_overflow; + + uint8_t overflow_num; + + // Avaiable only if has_data is true + uint16_t exposure_time[PAH_800x_MAX_CH_NUM]; + uint16_t adc[PAH_800x_MAX_CH_NUM]; + +} pah_test_result_t; + +typedef struct +{ + uint16_t adc; + + bool is_passed; + +} pah_ch_verify_result_t; + +typedef struct +{ + pah_ch_verify_result_t ch_result[PAH_800x_MAX_CH_NUM]; + +} pah_verify_result_t; + +typedef struct +{ + // Config + //pah_plat plat; + pah_verify_config_t verify_config; + + bool test_ch_enabled[PAH_800x_MAX_CH_NUM]; + + // PPG state + pah_test_result_t test_result; + + // verify + pah_verify_result_t verify_result; + +} pah_800x_test_t; + + +//============================================================================ +// Public function +//============================================================================ +void factory_test_mode(factory_test_type test_type, bool expo_adjust_en, uint16_t expo_a, uint16_t expo_b, uint16_t expo_c); +void pah8009_get_leaklight_data(uint16_t *ch0,uint16_t *ch1,uint16_t *ch2); + +#endif // header guard diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.c b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.c new file mode 100644 index 000000000..a208d8120 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.c @@ -0,0 +1,85 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2025-05-27 11:09:04 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2025-06-04 15:38:48 + * @FilePath: /sdk615/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.c + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +// pah +#include "pah800x_bsp.h" +#include "custom_utils.h" +#include "systick.h" + +//============================================================================ +// Definition +//============================================================================ +#define PAH800xx_I2C_SLAVE_ID 0x40 +#define I2C_PPG_PORT_ID 1 +#define PAH800xx_I2C_BUS I2C_BUS_2 + +//============================================================================ +// Public function +//============================================================================ +void pah_delay_ms(uint32_t ms) +{ + // pxi_nrf_delay_ms(ms); + LOS_Mdelay(ms); +} + +uint64_t pah_get_tick_count(void) +{ + // return pxi_nrf_get_tick_count(); + uint64_t cnt = uapi_systick_get_ms(); + // printf("cnt : %llu\n",cnt); + return cnt; +} + +pah_ret pah_comm_i2c_write(uint8_t addr, const uint8_t *data, size_t write_size) +{ + //DEBUG_PRINT("W A:0x%02x,D:0x%02x\n",addr,*data); + // pxi_nrf_i2c_write(addr, data, write_size); + custom_i2c_write_reg(PAH800xx_I2C_SLAVE_ID, addr, 1, data, write_size, PAH800xx_I2C_BUS); + + return PAH_RET_SUCCESS; +} + +pah_ret pah_comm_i2c_read(uint8_t addr, uint8_t *data, size_t read_size) +{ + // pxi_nrf_i2c_read(addr, data, read_size); + custom_i2c_read_regs(PAH800xx_I2C_SLAVE_ID, addr, 1 , data, read_size, PAH800xx_I2C_BUS); + //DEBUG_PRINT("R A:0x%02x,D:0x%02x\n",addr,*data); + return PAH_RET_SUCCESS; +} + +void pah_print( + int32_t fileline, + const char *funcname, + const char *filename, + const char *format, ...) +{ + UNUSED_VAR(fileline); + UNUSED_VAR(funcname); + UNUSED_VAR(filename); + + char dest[256]; + va_list argptr; + int char_num = 0; + + if (!format) + return; + + va_start(argptr, format); + char_num = vsprintf(dest, format, argptr); + va_end(argptr); + + //uart_printf("%s", dest); + + //dest[char_num] = '\n'; + // pxi_nrf_uart_transmit((uint8_t*)dest, (uint16_t)(char_num + 1)); +} + +void ReadGSensor(float *x, float *y, float *z) +{ + +} diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.h b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.h new file mode 100644 index 000000000..cae483f3b --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.h @@ -0,0 +1,46 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2025-05-27 11:09:04 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2025-05-27 11:32:50 + * @FilePath: /sdk615/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_bsp.h + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +#ifndef __pah_800x_bsp_h__ +#define __pah_800x_bsp_h__ + +// c +#include +#include +#include +#include + +// pah +#include "pah_unit.h" +#include "pah_800x_config.h" + + +//============================================================================ +// Public function +//============================================================================ +#ifdef __cplusplus +extern "C" { +#endif + +void pah_delay_ms(uint32_t ms); +uint64_t pah_get_tick_count(void); +pah_ret pah_comm_i2c_write(uint8_t addr, const uint8_t *data, size_t write_size); +pah_ret pah_comm_i2c_read(uint8_t addr, uint8_t *data, size_t read_size); +void pah_print( + int32_t fileline, + const char *funcname, + const char *filename, + const char *format, ...); + +void ReadGSensor(float *x, float *y, float *z); + +#ifdef __cplusplus +} +#endif + +#endif // header guard diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_main.c b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_main.c new file mode 100644 index 000000000..59697f05c --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_main.c @@ -0,0 +1,1628 @@ +// pah +#include "pah800x_main.h" +//#include "pah_8009_reg_arr_default.h" +#include "pxialg_spo2.h" +#include "pxialg_hrv.h" +#include "pxivar.h" +#include "pah_8009_reg_arr_default_20220623.h" +#include "pah800x_factory_test.h" +#include "cmsis_os2.h" + +#ifdef SUPPORT_PPG_SERVICE +#include "ppg_service.h" +#endif +//============================================================================ +// Static Global Variable +//============================================================================ +static main_state _main; +static ppg_mems_data_t ppg_mems_data_buf[FIFO_SIZE] ; +static int _read_index = 0 ; +static int _write_index = 0 ; + +// hr algotirhm +static float hr = 0.0f; +static float hr_grader =0.0f; +static ppg_mems_data_t ppg_mems_data_alg; + +// spo2 algorithm +void *pBuffer = NULL; +void *hr_pBuffer = NULL; +static float myHR = 0.0f; +static float mySpO2 = 0.0f; +static float correlation = 0.0f; +static float trust_flag = 0.0f; +static float MEMS_RMS = 0.0f; +uint8_t mySPO2_ReadyFlag = 0 ; +static uint8_t no_value_reason = 0 ; +static float SignalPeriodicity=0.0f ; + +static int time_accu = 0 ; +static int count =0; +static float spo2_array[31]={0.0f}; + +static uint32_t data_buf_count_spo2_alg=0; + +static SpO2_info_t _spo2_detect_item; +pah8series_data_t pxialg_data_spo2; +static SpO2_mems_t mems_data_raw[150]; +#ifdef PPG_MEMS_Synchronize +//int16_t mems_int_data_in[90] ={0}; +int16_t mems_int_data_out[90]={0}; +int time_temp=0; +static uint8_t ppg_data_num=0; +uint8_t mems_data_polling_ready = 0 ; +#endif + + + + + +// Stress Algorithm +static hrv_state_s _hrv_state; +void *stress_pBuffer = NULL; +#define HRV_ENABLE_LHR 1 +#define HRV_SAMPLING_RATE 20 +#define HRV_COLLECTION_SECONDS 180 +static uint32_t duration_total = 0; +uint8_t SDNN_ReadyFlag = 0; +uint8_t Get_Stress = 0; +static float Stress = 0.0f; +static uint8_t HRAvg = 0; +static float SQ_Stress = 0.0f; +static uint8_t AnomalyFlag = 0; +uint8_t Stress_ReadyFlag = 0; +uint8_t Weak_Flag = 0; + +static uint32_t factory_data = 0; +static uint8_t work_mode = 0; + + +static osTimerId_t g_pah8009_timer = NULL; + +//============================================================================ +// Private function +//============================================================================ +static bool sensor_basic_verification(void); +static void process(uint64_t timestamp); +static void ppg_sensor_enable(void); +static void ppg_sensor_disable(void); +static void touch_sensor_enable(void); +static void touch_sensor_disable(void); + +static void report_touch_data(uint64_t timestamp, const int8_t *touch_flag); +static void report_ppg_data(const ppg_mems_data_t *ppg_mems_data_alg); +static void report_hr_data(const ppg_mems_data_t *ppg_mems_data_alg, int32_t ret, float hr, float hr_grader); +static void report_spo2_data(const ppg_mems_data_t *ppg_mems_data_alg, int32_t ret, float myHR, float mySpO2, float correlation, float trust_flag, float MEMS_RMS, int data_buf_count_spo2_alg, uint8_t no_value_reason, float SignalPeriodicity, int time_accu ); +static void report_stress_data(const ppg_mems_data_t *ppg_mems_data_alg, uint8_t Stress_ReadyFlag, uint32_t measuretime, float collect_time); + +static void error_handle(void); + + +static void bubblesort(float *input,int count) +{ + int i,j; + float sort_temp; + for(i=0;i= FIFO_SIZE) + tmp = 0 ; + if(tmp == _read_index) + return false; + ppg_mems_data_buf[tmp] = *data ; + _write_index = tmp ; + return true; +} + +bool pah_pop(ppg_mems_data_t *data) +{ + int tmp ; + if(isFIFOEmpty()) + return false; + tmp = _read_index + 1; + if(tmp >= FIFO_SIZE) + tmp = 0 ; + _read_index = tmp ; + *data = ppg_mems_data_buf[_read_index] ; + + return true; +} + + +//============================================================================ +// Public function +//============================================================================ +void pah_sensor_init(reg_config_type type) +{ + memset(&_main, 0, sizeof(_main)); + + pah_800x_reg_setting reg_setting; + memset(®_setting, 0, sizeof(reg_setting)); + + if (!sensor_basic_verification()) + { + // error_handle(); + LOG_PRINT("sensor_basic_verification failed\n"); + return; + } + + + // pah_800x + pah_800x_config pah_800x_config; + pah_800x_get_default_config(&pah_800x_config); + LOG_PRINT("PPG_SETTING_VESION = %d \n" ,PPG_SETTING_VERSION); + +#if (ENABLE_AE==0) + pah_800x_config.enable_ppg_convergence[0] = false; + pah_800x_config.enable_ppg_convergence[1] = false; + pah_800x_config.enable_ppg_convergence[2] = false; +#endif + +#if (ENABLE_AE_RECONVERGENCE==0) + pah_800x_config.enable_ppg_reconvergence_if_out_of_bounds[0] = false; + pah_800x_config.enable_ppg_reconvergence_if_out_of_bounds[1] = false; + pah_800x_config.enable_ppg_reconvergence_if_out_of_bounds[2] = false; +#endif + + if (type == pc_4mm_2g_ir_hrd) + { +#if (PC_4MM_2G_IR_HRD==1) + PAH_REG_ARR_SETUP(reg_setting.startup_init, PAH8009_REG_DEVICE_INIT); + PAH_REG_ARR_SETUP(reg_setting.ppg_enable, PAH8009_REG_PC_4MM_2G_IR_PPG); + PAH_REG_ARR_SETUP(reg_setting.touch_enable, PAH8009_REG_PC_4MM_2G_IR_TOUCH); +#endif + } + else if (type == diw_4mm_g_ir_hrd) + { +#if (DIW_4MM_G_IR_HRD==1) + PAH_REG_ARR_SETUP(reg_setting.startup_init, PAH8009_REG_DEVICE_INIT); + PAH_REG_ARR_SETUP(reg_setting.ppg_enable, PAH8009_REG_DIW_4MM_G_IR_PPG); + PAH_REG_ARR_SETUP(reg_setting.touch_enable, PAH8009_REG_DIW_4MM_G_IR_TOUCH); +#endif + } + else if (type == diw_4mm_ir_r_ir_spo2) + { +#if (DIW_4MM_IR_R_IR_SPO2==1) + for(int ch=0;ch 0 ? 0x80 : 0x00); + hr_data.rsv2 = 0; + + + int32_t ret = PxiAlg_Process_Expo((uint8_t*)&hr_data, ppg_mems_data_alg.MEMS_Data, ppg_mems_data_alg.ppg_data.exposure_time[1]); + + + if(PxiAlg_GetHrUpdateFlag()) + { + PxiAlg_HrGet(&hr); + PxiAlg_GetSigGrade(&hr_grader); + } + if(ppg_mems_data_alg.touch_flag==0) + { + hr = 0 ; + hr_grader = 0; + } + + // if(hr > 0) + printf("hr:%f\n",hr); + + report_hr_data(&ppg_mems_data_alg, ret, hr, hr_grader); + + + } + else + { + report_ppg_data(&ppg_mems_data_alg); + } + } + } +} + +// HRD- ALG- Task2 +void hr_alg_task2(uint8_t ppg_num) +{ +#ifdef PPG_MEMS_Synchronize + if(Check_alg_enable()) + { + if(Check_alg_enable()==MSG_ALG_ENABLE) + { + hr_algorithm_enable(); + }else if(Check_alg_enable()==MSG_ALG_DISABLE) + { + hr_algorithm_disable(); + } + Clear_alg_enable(); + } + + if(!isFIFOEmpty()) + { + for (int i=0; i 0 ? 0x80 : 0x00); + hr_data.rsv2 = 0; + + int32_t ret = PxiAlg_Process_Expo((uint8_t*)&hr_data, ppg_mems_data_alg.MEMS_Data, ppg_mems_data_alg.ppg_data.exposure_time[1]); + + + if(PxiAlg_GetHrUpdateFlag()) + { + PxiAlg_HrGet(&hr); + PxiAlg_GetSigGrade(&hr_grader); + } + + report_hr_data(&ppg_mems_data_alg, ret, hr, hr_grader); + + } + else + { + report_ppg_data(&ppg_mems_data_alg); + } + } + } + } +#endif +} + + + +// SPO2 +void spo2_algorithm_enable(void) +{ + if (_main.spo2_is_enabled) + { + return; + } + + + int version = SpO2_Version(); + DEBUG_PRINT("PxiAlg_Version() = %d\n", version); + + uint32_t buffer_size = SpO2_OpenSize(); + DEBUG_PRINT("SpO2_Open buffer_size = %d \n", buffer_size); + + pBuffer = malloc(buffer_size); + + if (SpO2_Open(pBuffer) != SPO2_MSG_SUCCESS) + { + DEBUG_PRINT("SpO2_Open() failed. \n"); + free(pBuffer); + return; + } + int8_t alg_ch[2] = {0, 1}; + + SpO2_SetChMapping(alg_ch, 2); + SpO2_SetInputRatioHighBound(94.0f); + SpO2_SetInputRatioLowBound(87.0f); + SpO2_SetInputModelScale(0.50f); + + SpO2_SetInputCoefHigh0(-36877.85546875f); + SpO2_SetInputCoefHigh1(1135.91394042969f); + SpO2_SetInputCoefHigh2(-11.6429319381714f); + SpO2_SetInputCoefHigh3(0.0398150011897087f); + + SpO2_SetInputCoefMid0(-1430.70520019531f); + SpO2_SetInputCoefMid1(50.1599006652832f); + SpO2_SetInputCoefMid2(-0.567422986030579f); + SpO2_SetInputCoefMid3(0.00219199992716312f); + + SpO2_SetInputCoefLow0(-8.19796657562256f); + SpO2_SetInputCoefLow1(1.74200701713562f); + SpO2_SetInputCoefLow2(-0.0173850003629923f); + SpO2_SetInputCoefLow3(0.000105999999505002f); + + SpO2_SetIIRFilterRatio(0.5f); + SpO2_SetInputCorrelationTh(0.850000078678131f); + SpO2_SetInputRatioLow(0.05f); + + SpO2_SetInputFlagCheckHr(1); + SpO2_SetMotionDetectionLevel(2.0f); + SpO2_Set_Update_Sec(1); + + SpO2_Set_Init_Low_SpO2_Constrain(0.0); + SpO2_SetOutputHighBound(100.0f); + SpO2_SetOutputLowBound(60.0f); + SpO2_Set_Keep_Init_SpO2_Bound(95.0f); + SpO2_Set_Keep_Init_SpO2_Count_Th(18.0f); + SpO2_Set_SpO2_Bias_Value(0.5f); + SpO2_Set_SpO2_Outlier_Smooth_Coef(5.5f); + SpO2_Set_SpO2_Decrease_Coef(0.5f); + SpO2_SetSkipDataLen(25); + + SpO2_Set_Flag_Hold_Breathe_Mode(0); + SpO2_Set_Input_Correlation_Th2(0.85000f); + SpO2_Set_Correlation_Th2_Count(30.0f); + SpO2_Set_Init_Low_SpO2_Th(94.5f); + SpO2_Set_Motion_Rms_Th(3000.0f); + SpO2_Set_Motion_Rms_Th2(1500.0f); + SpO2_Set_Motion_MEMS_Th(0.0f); + SpO2_Set_T1(0.85f); + SpO2_Set_Spo2_Force_Output_Second(15.0f); + + Spo2_Set_Force_Output_Value(97.50f); // Good Signal Force SpO2 + Spo2_Set_Force_Output_Value2(95.00f); // Bad Signal Force SpO2 + + SpO2_Set_Init_Low_SpO2_Check_Sec(20); + Spo2_Set_SpO2_First_Smooth_Th(95.0f); + Spo2_Set_SpO2_First_Smooth_Sec(15); + Spo2_Set_SpO2_Correlation_Smooth_Th(0.85f); + SpO2_Set_Signal_Periodicity_Th(0.50f); + + // static Hr-V301009 + PxiAlg_Close(); + version = PxiAlg_Version(); + DEBUG_PRINT("HR_Version = %d \r\n", version); + + + uint32_t Query_Mem_Size = PxiAlg_Query_Mem_Size(); + DEBUG_PRINT("HR_Mem_Size = %d \r\n", Query_Mem_Size); + + hr_pBuffer = malloc(Query_Mem_Size); + + + if(!PxiAlg_Open_Mem(hr_pBuffer)) + DEBUG_PRINT("PxiAlg_Open_Mem fail \n"); + + + PxiAlg_SetQualityThreshold(0.35f); + PxiAlg_SetHRSmoothWeight(0.9f); + PxiAlg_SetProcWindow(5.0f, 5.0f); + PxiAlg_SetTimeoutLength(30.0f); + PxiAlg_SetMemsScale(1); //MEMS 2/4/8/16G : 0/1/2/3 + PxiAlg_SetSkipSampleNum(10); + PxiAlg_SetMemsScaleBase(1, 0); //MEMS 2/4/8/16G : 0/1/2/3 + PxiAlg_SetForceOutputLink(15, 90, 60, 1, 0.9f); + PxiAlg_SetNormalOutput(200, 40, 1); + PxiAlg_SetForceRipple(3, 1); + PxiAlg_SetPackage(0, 1); + + myHR = 0.0f; + mySpO2 = 0.0f; + correlation = 0.0f; + trust_flag = 0.0f; + MEMS_RMS = 0.0f; + mySPO2_ReadyFlag = 0; + hr_grader = 0.0f; + data_buf_count_spo2_alg=0; + no_value_reason = 0 ; + SignalPeriodicity=0.0f ; + time_accu = 0 ; + count = 0 ; + memset(spo2_array, 0, sizeof(*spo2_array)); + _main.spo2_is_enabled = true; +} + +void spo2_algorithm_disable(void) +{ + if (!_main.spo2_is_enabled) + return; + PxiAlg_Close(); + SpO2_Close(); + free(pBuffer); + free(hr_pBuffer); + myHR = 0.0f; + mySpO2 = 0.0f; + correlation = 0.0f; + trust_flag = 0.0f; + MEMS_RMS = 0.0f; + mySPO2_ReadyFlag = 0; + hr_grader = 0.0f; + data_buf_count_spo2_alg=0; + + no_value_reason = 0 ; + SignalPeriodicity=0.0f ; + time_accu = 0 ; + + + _main.spo2_is_enabled = false; +} + +void spo2_alg_task(void) +{ + if(Check_alg_enable()) + { + if(Check_alg_enable()==MSG_ALG_ENABLE) + { + spo2_algorithm_enable(); + }else if(Check_alg_enable()==MSG_ALG_DISABLE) + { + spo2_algorithm_disable(); + } + Clear_alg_enable(); + } + + if(!isFIFOEmpty()) + { + if(pah_pop(&ppg_mems_data_alg)) //Get data from FIFO + { + if(_main.spo2_is_enabled) + { + // 13Bytes format to hr lib; + + int32_t RAW_DATA[2] ; + sRaw_Data_13Bytes hr_data; + + memset(&hr_data, 0, sizeof(hr_data)); + hr_data.loss = (uint8_t)ppg_mems_data_alg.ppg_data.overflow_num + 1; + hr_data.rawData = ppg_mems_data_alg.ppg_data.data[0]; + hr_data.non_zero1 = 1; + hr_data.non_zero2 = 2; + hr_data.non_zero3 = 3; + hr_data.frame_count = ppg_mems_data_alg.ppg_frame_count; + hr_data.time = ppg_mems_data_alg.duration; + hr_data.rsv = 0; + hr_data.touch = (ppg_mems_data_alg.touch_flag > 0 ? 0x80 : 0x00); + hr_data.rsv2 = 0; + + + int32_t ret = PxiAlg_Process_Expo((uint8_t*)&hr_data, ppg_mems_data_alg.MEMS_Data, ppg_mems_data_alg.ppg_data.exposure_time[0]); + + + + + if(PxiAlg_GetHrUpdateFlag()) + { + PxiAlg_HrGet(&myHR); + PxiAlg_GetSigGrade(&hr_grader); + } + + + int32_t spo2_raw_1=ppg_mems_data_alg.ppg_data.data[0]; + int32_t spo2_raw_2=ppg_mems_data_alg.ppg_data.data[1]; + + RAW_DATA[0]=spo2_raw_1; + RAW_DATA[1]=spo2_raw_2; + + mems_data_raw[0].data[0]=ppg_mems_data_alg.MEMS_Data[0]; + mems_data_raw[0].data[1]=ppg_mems_data_alg.MEMS_Data[1] ; + mems_data_raw[0].data[2]=ppg_mems_data_alg.MEMS_Data[2]; + + // SPO2 fill data on pah8series structure + pxialg_data_spo2.touch_flag = ppg_mems_data_alg.touch_flag ; + pxialg_data_spo2.time = ppg_mems_data_alg.duration ;; + pxialg_data_spo2.ppg_data = (int32_t*)RAW_DATA; + pxialg_data_spo2.nf_ppg_channel = 2; + pxialg_data_spo2.nf_ppg_per_channel = 1; + pxialg_data_spo2.frame_count = ppg_mems_data_alg.ppg_frame_count ; + pxialg_data_spo2.nf_mems = 1; + pxialg_data_spo2.mems_data = (int16_t*)mems_data_raw; + + + + // DEBUG_PRINT("data_buf_count_spo2_alg = %d \r\n", data_buf_count_spo2_alg); + + + SpO2_SetHrValue(myHR); + SpO2_SetMems(mems_data_raw, 1); + //int ret_value = SpO2_Process(ppg_mems_data_alg.touch_flag , 2, pxialg_data_spo2.ppg_data, 1); + int ret_value = SpO2_Process(ppg_mems_data_alg.touch_flag , 2, pxialg_data_spo2.ppg_data, 1,pxialg_data_spo2.time ); + + SpO2_GetSpO2(&mySpO2); + + // if(mySpO2 > 0) + printf("SpO2 : %f\n",mySpO2); + + SpO2_GetReadyFlag(&mySPO2_ReadyFlag); + SpO2_GetInfo(&_spo2_detect_item); + correlation =_spo2_detect_item.Noise; + trust_flag =_spo2_detect_item.Output[3]; + no_value_reason=_spo2_detect_item.Output[4]; + SpO2_GetPeriodicity(&SignalPeriodicity); + MEMS_RMS =_spo2_detect_item.RMS; + + + data_buf_count_spo2_alg++; + + #if defined(Optimize_SPO2_flow) + time_accu=time_accu+pxialg_data_spo2.time; + #endif + + if( (ret_value == 0 ) && (data_buf_count_spo2_alg>=25) ) + { + + #if defined(Optimize_SPO2_flow) + //time_accu=time_accu+pxialg_data->time; + DEBUG_PRINT("SPO2 Test Time = %d ,count =%d\n",time_accu,count); + if(time_accu>=60000) + { + spo2_array[count]=mySpO2; + count=count+1; + + LOG_PRINT("Over_30_sec_Stop_measurement\n"); + LOG_PRINT("This_meausrement_suggest_spo2_value is"); + + bubblesort(spo2_array,count); + + if(count % 2 == 0) + { + //log_printf(" "LOG_FLOAT_MARKER" \n", LOG_FLOAT(spo2_array[count/2])); + LOG_PRINT(" "LOG_FLOAT_MARKER" \n",LOG_FLOAT((spo2_array[(int)(count/2)] + spo2_array[(int)(count/2) - 1]) / 2.0f)); + } + else + { + LOG_PRINT(" "LOG_FLOAT_MARKER" \n", LOG_FLOAT(spo2_array[(int)(count/2)]*1.0f)); + } + + //log_pah8series_no_touch(); + spo2_algorithm_disable(); + pah_sensor_stop(); + count=0; + //add sensor stop here + } + else + { + if(mySpO2>0) + { + spo2_array[count]=mySpO2; + count=count+1; + } + } + #endif + //report_spo2_data(&ppg_mems_data_alg, ret, mySpO2, myHR, correlation, trust_flag, MEMS_RMS,data_buf_count_spo2_alg, Opt_SpO2, drop_flag, ascend_flag, mems_fla); + report_spo2_data(&ppg_mems_data_alg, ret, mySpO2, myHR, correlation, trust_flag, MEMS_RMS,data_buf_count_spo2_alg, no_value_reason, SignalPeriodicity, time_accu); + data_buf_count_spo2_alg = data_buf_count_spo2_alg -25; + } + else + { + //report_spo2_data(&ppg_mems_data_alg, ret, mySpO2, myHR, correlation, trust_flag, MEMS_RMS,data_buf_count_spo2_alg, Opt_SpO2, drop_flag, ascend_flag, mems_flag); + report_spo2_data(&ppg_mems_data_alg, ret, mySpO2, myHR, correlation, trust_flag, MEMS_RMS,data_buf_count_spo2_alg, no_value_reason, SignalPeriodicity, time_accu); + + switch (ret_value) + { + case SPO2_MSG_ALG_NOT_OPEN: + DEBUG_PRINT("Algorithm is not initialized. \n"); + break; + + case SPO2_MSG_ALG_REOPEN: + DEBUG_PRINT("Algorithm is re initialized. \n"); + break; + + case SPO2_MSG_ALG_NOT_SUPPORT: + DEBUG_PRINT("Algorithm is not support. \n"); + break; + + default: + // DEBUG_PRINT("Algorithm unhandle error = %d \n", ret_value); + break; + } + //return 1 ; + } + } + else + { + report_ppg_data(&ppg_mems_data_alg); + } + } + } +} + + + +// SPO2- ALG- Task2 +void spo2_alg_task2(uint8_t ppg_num) +{ +#ifdef PPG_MEMS_Synchronize + if(Check_alg_enable()) + { + if(Check_alg_enable()==MSG_ALG_ENABLE) + { + spo2_algorithm_enable(); + }else if(Check_alg_enable()==MSG_ALG_DISABLE) + { + spo2_algorithm_disable(); + } + Clear_alg_enable(); + } + + if(!isFIFOEmpty()) + { + for (int k=0; k 0 ? 0x80 : 0x00); + hr_data.rsv2 = 0; + + + int32_t ret = PxiAlg_Process_Expo((uint8_t*)&hr_data, ppg_mems_data_alg.MEMS_Data, ppg_mems_data_alg.ppg_data.exposure_time[0]); + + + + + if(PxiAlg_GetHrUpdateFlag()) + { + PxiAlg_HrGet(&myHR); + PxiAlg_GetSigGrade(&hr_grader); + } + + + int32_t spo2_raw_1=ppg_mems_data_alg.ppg_data.data[0]; + int32_t spo2_raw_2=ppg_mems_data_alg.ppg_data.data[1]; + + RAW_DATA[0]=spo2_raw_1; + RAW_DATA[1]=spo2_raw_2; + + mems_data_raw[0].data[0]=ppg_mems_data_alg.MEMS_Data[0]; + mems_data_raw[0].data[1]=ppg_mems_data_alg.MEMS_Data[1] ; + mems_data_raw[0].data[2]=ppg_mems_data_alg.MEMS_Data[2]; + + // SPO2 fill data on pah8series structure + pxialg_data_spo2.touch_flag = ppg_mems_data_alg.touch_flag ; + pxialg_data_spo2.time = ppg_mems_data_alg.duration ;; + pxialg_data_spo2.ppg_data = (int32_t*)RAW_DATA; + pxialg_data_spo2.nf_ppg_channel = 2; + pxialg_data_spo2.nf_ppg_per_channel = 1; + pxialg_data_spo2.frame_count = ppg_mems_data_alg.ppg_frame_count ; + pxialg_data_spo2.nf_mems = 1; + pxialg_data_spo2.mems_data = (int16_t*)mems_data_raw; + + + + //DEBUG_PRINT("data_buf_count_spo2_alg = %d \r\n", data_buf_count_spo2_alg); + + + SpO2_SetHrValue(myHR); + SpO2_SetMems(mems_data_raw, 1); + //int ret_value = SpO2_Process(ppg_mems_data_alg.touch_flag , 2, pxialg_data_spo2.ppg_data, 1); + int ret_value = SpO2_Process(ppg_mems_data_alg.touch_flag , 2, pxialg_data_spo2.ppg_data, 1,pxialg_data_spo2.time ); + + SpO2_GetSpO2(&mySpO2); + SpO2_GetReadyFlag(&mySPO2_ReadyFlag); + SpO2_GetInfo(&_spo2_detect_item); + correlation =_spo2_detect_item.Noise; + trust_flag =_spo2_detect_item.Output[3]; + no_value_reason=_spo2_detect_item.Output[4]; + SpO2_GetPeriodicity(&SignalPeriodicity); + MEMS_RMS =_spo2_detect_item.RMS; + + + data_buf_count_spo2_alg++; + + #if defined(Optimize_SPO2_flow) + time_accu=time_accu+pxialg_data_spo2.time; + #endif + + if( (ret_value == 0 ) && (data_buf_count_spo2_alg>=25) ) + { + + #if defined(Optimize_SPO2_flow) + //time_accu=time_accu+pxialg_data->time; + DEBUG_PRINT("SPO2 Test Time = %d ,count =%d\n",time_accu,count); + if(time_accu>=31000) + { + spo2_array[count]=mySpO2; + count=count+1; + + LOG_PRINT("Over_30_sec_Stop_measurement\n"); + LOG_PRINT("This_meausrement_suggest_spo2_value is"); + + bubblesort(spo2_array,count); + + if(count % 2 == 0) + { + //log_printf(" "LOG_FLOAT_MARKER" \n", LOG_FLOAT(spo2_array[count/2])); + LOG_PRINT(" "LOG_FLOAT_MARKER" \n",LOG_FLOAT((spo2_array[(int)(count/2)] + spo2_array[(int)(count/2) - 1]) / 2.0f)); + } + else + { + LOG_PRINT(" "LOG_FLOAT_MARKER" \n", LOG_FLOAT(spo2_array[(int)(count/2)]*1.0f)); + } + + //log_pah8series_no_touch(); + spo2_algorithm_disable(); + pah_sensor_stop(); + count=0; + //add sensor stop here + } + else + { + if(mySpO2>0) + { + spo2_array[count]=mySpO2; + count=count+1; + } + } + #endif + //report_spo2_data(&ppg_mems_data_alg, ret, mySpO2, myHR, correlation, trust_flag, MEMS_RMS,data_buf_count_spo2_alg, Opt_SpO2, drop_flag, ascend_flag, mems_fla); + report_spo2_data(&ppg_mems_data_alg, ret, mySpO2, myHR, correlation, trust_flag, MEMS_RMS,data_buf_count_spo2_alg, no_value_reason, SignalPeriodicity, time_accu); + data_buf_count_spo2_alg = data_buf_count_spo2_alg -25; + } + else + { + //report_spo2_data(&ppg_mems_data_alg, ret, mySpO2, myHR, correlation, trust_flag, MEMS_RMS,data_buf_count_spo2_alg, Opt_SpO2, drop_flag, ascend_flag, mems_flag); + report_spo2_data(&ppg_mems_data_alg, ret, mySpO2, myHR, correlation, trust_flag, MEMS_RMS,data_buf_count_spo2_alg, no_value_reason, SignalPeriodicity, time_accu); + + switch (ret_value) + { + case SPO2_MSG_ALG_NOT_OPEN: + DEBUG_PRINT("Algorithm is not initialized. \n"); + break; + + case SPO2_MSG_ALG_REOPEN: + DEBUG_PRINT("Algorithm is re initialized. \n"); + break; + + case SPO2_MSG_ALG_NOT_SUPPORT: + DEBUG_PRINT("Algorithm is not support. \n"); + break; + + default: + DEBUG_PRINT("Algorithm unhandle error = %d \n", ret_value); + break; + } + //return 1 ; + } + } + else + { + report_ppg_data(&ppg_mems_data_alg); + } + } + } + } +#endif +} + + + +// Stress +void stress_algorithm_enable(void) +{ + int buffer_size = 0; + if (_main.stress_is_enable) + { + return; + } + + LOG_PRINT("HRVGetVersion() = %d \n", HRVGetVersion()); + buffer_size = HRVGetMemorySize(HRV_ENABLE_LHR, HRV_COLLECTION_SECONDS, HRV_SAMPLING_RATE); + LOG_PRINT("HRVGetMemorySize(), open_size = %d \n", buffer_size); + + if (!buffer_size) + { + LOG_PRINT("HRVGetMemorySize(), failed to get memory size \n"); + return ; + } + + stress_pBuffer = (uint8_t*)malloc(buffer_size); + if (!stress_pBuffer) + { + LOG_PRINT("Out of memory \n"); + return ; + } + + if (!HRVOpen(stress_pBuffer)) + { + LOG_PRINT("HRVOpen() failed. \n"); + return ; + } + duration_total=0; + _hrv_state.collect_duration = 0; + + _main.stress_is_enable = true; +} + +void stress_algorithm_disable(void) +{ + if (!_main.stress_is_enable) + return; + HRVClose(); + free(stress_pBuffer); + + duration_total = 0; + SDNN_ReadyFlag = 0; + Get_Stress = 0; + Stress = 0.0f; + HRAvg = 0; + SQ_Stress = 0.0f; + AnomalyFlag = 0; + Stress_ReadyFlag = 0; + Weak_Flag = 0; + _main.stress_is_enable = false; +} + +void stress_alg_task(int grade) +{ + if(Check_alg_enable()) + { + if(Check_alg_enable()==MSG_ALG_ENABLE) + { + stress_algorithm_enable(); + }else if(Check_alg_enable()==MSG_ALG_DISABLE) + { + stress_algorithm_disable(); + } + Clear_alg_enable(); + } + + if(!isFIFOEmpty()) + { + if(pah_pop(&ppg_mems_data_alg)) //Get data from FIFO + { + if(_main.stress_is_enable) + { + uint32_t raw_data = ppg_mems_data_alg.ppg_data.data[1]; + uint8_t frame_count = ppg_mems_data_alg.ppg_frame_count; + uint8_t timeInterval = ppg_mems_data_alg.duration; + uint8_t touch_flag = ppg_mems_data_alg.touch_flag; + + // If using Interrupt mode call this API + HRVSetDiffTime(timeInterval,1); + + HRVProcess(touch_flag, raw_data); + + duration_total+=timeInterval; + + + if(Stress_ReadyFlag==0) + { + Stress_ReadyFlag=HRVGetReadyFlag(); + } + + if((duration_total>25000)&& Stress_ReadyFlag==0) + { + LOG_PRINT("PPG Raw data is too Weak\r\n"); + LOG_PRINT("TEST Stop\r\n"); + stress_algorithm_disable(); + Weak_Flag=1; + return ; + } + + if(Stress_ReadyFlag == 1 || HRVGetReadyFlag()) + { + Stress_ReadyFlag=1; + _hrv_state.collect_duration += timeInterval; + + if(_hrv_state.collect_duration > (HRV_COLLECTION_SECONDS * 1000)) + { + //int grade=100; + HRAvg = HRVGetHRAvg(); + Stress= HRVGetStress(grade); + SQ_Stress=HRVGetRRIQuality(); + AnomalyFlag= HRVGetAnomalyFlag(); + LOG_PRINT("HRAvg = %d Stress = %f HRV_Quality = %f AnomalyFlag= %d \n", HRAvg ,Stress,SQ_Stress,AnomalyFlag); + + if(SQ_Stress>0.4f) + { + LOG_PRINT("HRV_Quality Good\n"); + } + else + { + LOG_PRINT("HRV_Quality Weak\n"); + } + + + if(Stress >=80 && Stress<=100) + { + LOG_PRINT("Stress_Level High\n"); + } + else if(Stress >=60 && Stress<80) + { + LOG_PRINT("Stress_Level Medium\n"); + } + else if(Stress >=30 && Stress<60) + { + LOG_PRINT("Stress_Level Normal\n"); + } + else + { + LOG_PRINT("Stress_Level Relaxed\n"); + } + + stress_algorithm_disable(); + _hrv_state.has_got_sdnn = 1; + Get_Stress=1; + return ; + } + } + report_stress_data(&ppg_mems_data_alg,Stress_ReadyFlag, duration_total, _hrv_state.collect_duration ); + } + else + { + report_ppg_data(&ppg_mems_data_alg); + LOG_PRINT("Stress_Level Normal\n"); + } + } + } +} + + + + +//============================================================================ +// Private function +//============================================================================ +static bool sensor_basic_verification(void) +{ + uint16_t product_id = 0; + pah_800x_get_product_id(&product_id); + if (product_id != PAH_800x_PRODUCT_ID) + { + pah_800x_power_toggle(&_main.pah_800x, true); + pah_800x_get_product_id( &product_id); + } + + DEBUG_PRINT("product_id = 0x%04X\n", product_id); + if (product_id != PAH_800x_PRODUCT_ID) + { + DEBUG_PRINT("Failed to verify product_id\n"); + return false; + } + + return true; +} + +static void process(uint64_t timestamp) +{ + float mems_data[3] = { 0.0f, 0.0f, 0.0f }; + + // Task + pah_ret ret = pah_800x_task(&_main.pah_800x); + if (PAH_FAILED(ret)) + { + DEBUG_PRINT("pah_800x_task() failed, ret = %d\n", ret); + return; + } + + int8_t touch_flag = -1; + pah_800x_get_touch_flag(&_main.pah_800x, &touch_flag); + + // PRINT("touch_flag : %d\n",touch_flag); + + if (_main.ppg_is_enabled) + { + pah_800x_ppg_data ppg_data; + pah_800x_ppg_get_data(&_main.pah_800x, &ppg_data); + + if (ppg_data.has_data) + { + // LOG_PRINT("ppg data %d %d %d %d %d %d %d %d\n",ppg_data.has_data,ppg_data.overflow_num,ppg_data.data[0],ppg_data.data[1],ppg_data.data[2], + // ppg_data.exposure_time[0],ppg_data.exposure_time[1],ppg_data.exposure_time[2]); + // LOG_PRINT("ppg data %d %d %d %d %d %d\n",ppg_data.frame_period[0],ppg_data.frame_period[1],ppg_data.frame_period[2] + // ,ppg_data.adc[0],ppg_data.adc[1],ppg_data.adc[2]); + + // PRINT("ppg data : %d %d %d\n",ppg_data.data[0],ppg_data.data[1],ppg_data.data[2]); + + factory_data = ppg_data.data[0]; + + uint64_t duration = timestamp - _main.ppg_prev_report_timestamp; + + if (!_main.ppg_has_prev_report_timestamp) + { + _main.ppg_has_prev_report_timestamp = true; + duration = 50; + } + _main.ppg_prev_report_timestamp = timestamp; + + if (duration > UINT8_MAX) + { + // DEBUG_PRINT("duration > UINT8_MAX !!!:%llu\n",duration); + PRINT("duration > UINT8_MAX !!!:%llu\n",duration); + return; + } + + ppg_mems_data_t ppg_mems_data; + + /***********************G sensor explanation start***********************************/ + //If no G sensor, please set ppg_mems_data.MEMS_Data[3] = {0}; + //Please set G sensor default range = ±2G. + //If G sensor output data format is not 16bit, please change to 16bit format. + //For example: G sensor is 12bit + //ReadGSensor(&mems_data[0],&mems_data[1],&mems_data[2]) + //MEMS_SensorX() absolute data must be largest when let hand down at static state. + //MEMS_SensorZ() absolute data must be largest when let hand horizontal on the table at static state. + /***********************G sensor explanation end***********************************/ + + ppg_mems_data.MEMS_Data[0] = mems_data[0];//ReadGSensorX(); + ppg_mems_data.MEMS_Data[1] = mems_data[1];//ReadGSensorY(); + ppg_mems_data.MEMS_Data[2] = mems_data[2];//ReadGSensorZ(); + ppg_mems_data.duration = duration; + + ppg_mems_data.ppg_data = ppg_data ; + ppg_mems_data.touch_flag = touch_flag ; + ppg_mems_data.ppg_frame_count = _main.ppg_frame_count; //SD-revise-20200320 + + pah_push(&ppg_mems_data); + +#ifdef PPG_MEMS_Synchronize + time_temp+=duration; + mems_data_polling_ready=0; + if(time_temp>=Time_Interval) + { + mems_data_polling_ready=1; + time_temp =0; + } + ppg_data_num++; +#endif + ++_main.ppg_frame_count; + + //report_ppg_data(&ppg_mems_data); + + } + } + + if (_main.is_Auto_mode || _main.touch_is_enabled)//SD-reivse-20191205 + { + if ( _main.touch_last_is_touched != touch_flag) + { + _main.touch_last_is_touched = touch_flag; + + report_touch_data(timestamp, &touch_flag); + + bool is_touched = (touch_flag >= 1); + + if (_main.is_Auto_mode && is_touched)//SD-revise-20191205 + { + //touch_sensor_disable(); + ppg_sensor_enable(); + _main.alg_is_enabled = MSG_ALG_ENABLE; + } + else if (_main.is_Auto_mode && !is_touched) + { + ppg_sensor_disable(); + pah_800x_update_touch_setting(&_main.pah_800x); + //touch_sensor_enable(); + _main.alg_is_enabled = MSG_ALG_DISABLE; + } + } + } +} + +static void ppg_sensor_enable(void) +{ + if (_main.ppg_is_enabled) + return; + + pah_800x_ppg_toggle(&_main.pah_800x, true); + + _main.debug_print_header = true; + _main.ppg_has_prev_report_timestamp = false; + _main.ppg_prev_report_timestamp = pah_get_tick_count(); + _main.ppg_frame_count = 0; + + _main.ppg_is_enabled = true; + + _read_index = 0 ; + _write_index = 0 ; +#ifdef PPG_MEMS_Synchronize + ppg_data_num = 0 ; +#endif + //LOG_PRINT("ppg_sensor_enable\n"); +} + +static void ppg_sensor_disable(void) +{ + if (!_main.ppg_is_enabled) + return; + + pah_800x_ppg_toggle(&_main.pah_800x, false); + + _main.ppg_is_enabled = false; +} + +static void touch_sensor_enable(void) +{ + if (_main.touch_is_enabled) + return; + + pah_800x_touch_toggle(&_main.pah_800x, true); + + _main.touch_last_is_touched = 0;//default no touch => touch mode + + _main.touch_is_enabled = true; +} + +static void touch_sensor_disable(void) +{ + if (!_main.touch_is_enabled) + return; + + pah_800x_touch_toggle(&_main.pah_800x, false); + + _main.touch_is_enabled = false; +} + +static void report_touch_data(uint64_t timestamp, const int8_t *touch_flag) +{ + LOG_PRINT("TOUCH: time = { %llu }, touch_flag = { %d } \n", timestamp, *touch_flag ); +} + +static void report_ppg_data(const ppg_mems_data_t *ppg_mems_data_alg) +{ + if (_main.debug_print_header == true) + { + LOG_PRINT("Frame, Time, Touch_Flag, Data_Ready, Overflow_Flag, Overflow_Num, ppg0, ppg1, ppg2, Expo_A, Expo_B, Expo_C, MEMS_X, MEMS_Y, MEMS_Z\n"); + _main.debug_print_header = false; + } + + LOG_PRINT("%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", + ppg_mems_data_alg->ppg_frame_count, ppg_mems_data_alg->duration, ppg_mems_data_alg->touch_flag, + ppg_mems_data_alg->ppg_data.has_data, ppg_mems_data_alg->ppg_data.has_overflow, ppg_mems_data_alg->ppg_data.overflow_num, + ppg_mems_data_alg->ppg_data.data[0], ppg_mems_data_alg->ppg_data.data[1], ppg_mems_data_alg->ppg_data.data[2], + ppg_mems_data_alg->ppg_data.exposure_time[0], ppg_mems_data_alg->ppg_data.exposure_time[1], ppg_mems_data_alg->ppg_data.exposure_time[2], + (int)(ppg_mems_data_alg->MEMS_Data[0]), (int)(ppg_mems_data_alg->MEMS_Data[1]), (int)(ppg_mems_data_alg->MEMS_Data[2])); +} + +static void report_hr_data(const ppg_mems_data_t *ppg_mems_data_alg, int32_t ret, float hr, float hr_grader) +{ + if (_main.debug_print_header == true) + { + LOG_PRINT("Frame, Time, Touch_Flag, Data_Ready, Overflow_Flag, Overflow_Num, PPG0, PPG1, PPG2, Expo_A, Expo_B, Expo_C, MEMS_X, MEMS_Y, MEMS_Z, ret, hr, hr_grade\n"); + + _main.debug_print_header = false; + } + + LOG_PRINT("%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f\n", + ppg_mems_data_alg->ppg_frame_count, ppg_mems_data_alg->duration, ppg_mems_data_alg->touch_flag, + ppg_mems_data_alg->ppg_data.has_data, ppg_mems_data_alg->ppg_data.has_overflow, ppg_mems_data_alg->ppg_data.overflow_num, + ppg_mems_data_alg->ppg_data.data[0], ppg_mems_data_alg->ppg_data.data[1], ppg_mems_data_alg->ppg_data.data[2], + ppg_mems_data_alg->ppg_data.exposure_time[0], ppg_mems_data_alg->ppg_data.exposure_time[1], ppg_mems_data_alg->ppg_data.exposure_time[2], + (int)(ppg_mems_data_alg->MEMS_Data[0]), (int)(ppg_mems_data_alg->MEMS_Data[1]), (int)(ppg_mems_data_alg->MEMS_Data[2]), ret, hr, hr_grader); + +} + +//static void report_spo2_data(const ppg_mems_data_t *ppg_mems_data_alg, int32_t ret, float mySpO2, float myHR, float correlation, float trust_flag, float MEMS_RMS, int data_buf_count_spo2_alg, , float Opt_SpO2, int drop_flag, int ascend_flag, int mems_flag) +static void report_spo2_data(const ppg_mems_data_t *ppg_mems_data_alg, int32_t ret, float myHR, float mySpO2, float correlation, float trust_flag, float MEMS_RMS, int data_buf_count_spo2_alg, uint8_t no_value_reason, float SignalPeriodicity, int time_accu ) +{ + if (_main.debug_print_header == true) + { + + LOG_PRINT("Frame, Time, Touch_Flag, Data_Ready, Overflow_Flag, Overflow_Num, PPG0, PPG1, PPG2, Expo_A, Expo_B, Expo_C, MEMS_X, MEMS_Y, MEMS_Z, ret, spo2, myHR, hr_grader, correlation, MEMS_RMS, trust, no_value_reason, SignalPeriodicity, time_accu \n"); + _main.debug_print_header = false; + } + + if(data_buf_count_spo2_alg>=25) + { + LOG_PRINT("%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %f, %f, %f, %f, %d, %f, %d\n", + ppg_mems_data_alg->ppg_frame_count, ppg_mems_data_alg->duration, ppg_mems_data_alg->touch_flag, + ppg_mems_data_alg->ppg_data.has_data, ppg_mems_data_alg->ppg_data.has_overflow, ppg_mems_data_alg->ppg_data.overflow_num, + ppg_mems_data_alg->ppg_data.data[0], ppg_mems_data_alg->ppg_data.data[1], ppg_mems_data_alg->ppg_data.data[2], + ppg_mems_data_alg->ppg_data.exposure_time[0], ppg_mems_data_alg->ppg_data.exposure_time[1], ppg_mems_data_alg->ppg_data.exposure_time[2], + (int)(ppg_mems_data_alg->MEMS_Data[0]), (int)(ppg_mems_data_alg->MEMS_Data[1]), (int)(ppg_mems_data_alg->MEMS_Data[2]), ret, mySpO2,myHR,hr_grader,correlation, MEMS_RMS,trust_flag,no_value_reason,SignalPeriodicity, time_accu); + } + else + { + LOG_PRINT("%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", + ppg_mems_data_alg->ppg_frame_count, ppg_mems_data_alg->duration, ppg_mems_data_alg->touch_flag, + ppg_mems_data_alg->ppg_data.has_data, ppg_mems_data_alg->ppg_data.has_overflow, ppg_mems_data_alg->ppg_data.overflow_num, + ppg_mems_data_alg->ppg_data.data[0], ppg_mems_data_alg->ppg_data.data[1], ppg_mems_data_alg->ppg_data.data[2], + ppg_mems_data_alg->ppg_data.exposure_time[0], ppg_mems_data_alg->ppg_data.exposure_time[1], ppg_mems_data_alg->ppg_data.exposure_time[2], + (int)(ppg_mems_data_alg->MEMS_Data[0]), (int)(ppg_mems_data_alg->MEMS_Data[1]), (int)(ppg_mems_data_alg->MEMS_Data[2]), ret); + + + } +} + + +static void report_stress_data(const ppg_mems_data_t *ppg_mems_data_alg, uint8_t Stress_ReadyFlag, uint32_t measuretime, float collect_time) +{ + if (_main.debug_print_header == true) + { + LOG_PRINT("Frame, Time, Touch_Flag, Data_Ready, Overflow_Flag, Overflow_Num, PPG0, PPG1, PPG2, Expo_A, Expo_B, Expo_C, MEMS_X, MEMS_Y, MEMS_Z, Stress_Ready, measure_time, collect_time\n"); + + _main.debug_print_header = false; + } + + LOG_PRINT("%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %f\n", + ppg_mems_data_alg->ppg_frame_count, ppg_mems_data_alg->duration, ppg_mems_data_alg->touch_flag, + ppg_mems_data_alg->ppg_data.has_data, ppg_mems_data_alg->ppg_data.has_overflow, ppg_mems_data_alg->ppg_data.overflow_num, + ppg_mems_data_alg->ppg_data.data[0], ppg_mems_data_alg->ppg_data.data[1], ppg_mems_data_alg->ppg_data.data[2], + ppg_mems_data_alg->ppg_data.exposure_time[0], ppg_mems_data_alg->ppg_data.exposure_time[1], ppg_mems_data_alg->ppg_data.exposure_time[2], + (int)(ppg_mems_data_alg->MEMS_Data[0]), (int)(ppg_mems_data_alg->MEMS_Data[1]), (int)(ppg_mems_data_alg->MEMS_Data[2]), Stress_ReadyFlag,duration_total, _hrv_state.collect_duration ); + +} +#ifdef PPG_MEMS_Synchronize +uint8_t get_ppg_data_num(void) +{ + return ppg_data_num; +} +void clear_ppg_data_num(void) +{ + ppg_data_num = 0; +} + +void mems_interpolation(int16_t *mems_int_data_in,uint8_t mems_num,uint8_t ppg_num) +{ + + // Customer Define MEMS-input X, Y, Z + // Put data in mems_int_data_in ,and mems_count + // Then call the PXI_MEMS_interp to do interpolation + + PXI_MEMS_interp(mems_int_data_in, mems_num, mems_int_data_out, ppg_num); + +} +#endif + +static void error_handle(void) +{ + while (true) + { + } +} + +uint16_t pah8009_get_chip_id(void) +{ + uint16_t product_id = 0; + pah_800x_get_product_id(&product_id); + return product_id; +} + +uint32_t pah8009_get_factory_data(void) +{ + uint32_t data = factory_data; + factory_data = 0; + return data; +} + +void pah8009_int_handler(void) +{ + ppg_interrupt_handle(); + ppg_sensor_task_interrupt(); + + if(work_mode == 1) + { + // PRINT("hr_alg_task \n"); + hr_alg_task(); + } + else if(work_mode == 2) + { + // PRINT("spo2_alg_task \n"); + spo2_alg_task(); + } + +} + +void pah8009_timer_handler(void) +{ + ppg_sensor_task_polling(); + + if(work_mode == 1) + { + // PRINT("hr_alg_task \n"); + hr_alg_task(); + } + else if(work_mode == 2) + { + // PRINT("spo2_alg_task \n"); + spo2_alg_task(); + } + +} + +static void pah8009_timer_callback(void) +{ +#ifdef SUPPORT_PPG_SERVICE + send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_PPG_HRS_TIMER_CALLBACK); +#endif +} + +static void pah8009_timer_init(void) +{ + if(g_pah8009_timer == NULL) + g_pah8009_timer = osTimerNew((osTimerFunc_t)pah8009_timer_callback, osTimerPeriodic, NULL, NULL); +} + + +void pah8009_control(char *mode,uint8_t enable) +{ + // printf("mode : %s ,enable : %d\n",mode,enable); + if(!enable) + { +#ifdef POLLING_MODE + if(g_pah8009_timer != NULL) + osTimerStop(g_pah8009_timer); +#endif + pah_sensor_stop(); + } + else + { +#ifdef POLLING_MODE + pah8009_timer_init(); +#endif + if (strcmp(mode, "hrs") == 0) { + pah_sensor_init(diw_4mm_g_ir_hrd); + auto_mode_sensor_start(); + work_mode = 1; + // touch_only_sensor_start(); + // ppg_only_sensor_start(); + } else if (strcmp(mode, "hrv") == 0) { + // md = HRV_MODE; + } else if (strcmp(mode, "spo2") == 0) { + // md = SPO2_MODE; + pah_sensor_init(diw_4mm_ir_r_ir_spo2); + auto_mode_sensor_start(); + work_mode = 2; + } else if (strcmp(mode, "leaklight") == 0) { + // md = FT_LEAK_LIGHT_MODE; + factory_test_mode(factory_test_leak_light_target_sample, 0, 0, 0, 0); + } else if (strcmp(mode, "wear") == 0) { + pah_sensor_init(diw_4mm_g_ir_hrd); + touch_only_sensor_start(); + } +#ifdef POLLING_MODE + if(g_pah8009_timer != NULL) + osTimerStart(g_pah8009_timer,40); +#endif + } +} \ No newline at end of file diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_main.h b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_main.h new file mode 100644 index 000000000..2e51b953c --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah800x_main.h @@ -0,0 +1,192 @@ +#ifndef __pah_800x_main_h__ +#define __pah_800x_main_h__ + +// pah +#include "pah_800x.h" +#include "pah_unit.h" +#include "pah_800x_config.h" + + + +//static hr algotirhm +// #include "pxialg.h" + +// spo2 algorithm +// #include "pxialg_spo2.h" + +// Stress algorithm +// #include "pxialg_hrv.h" +#ifdef PPG_MEMS_Synchronize +//MEMS-INT +#include "pxi_interp.h" +#endif +//============================================================================ +// Functions +//============================================================================ +#ifdef __cplusplus +extern "C" { +#endif + + +//============================================================================ +// Definition +//============================================================================ +#ifdef PPG_MEMS_Synchronize +#define FIFO_SIZE 50 //FIFO Size is dependent on the CPU performance +#else +#define FIFO_SIZE 8 //FIFO Size is dependent on the CPU performance +#endif + +//============================================================================ +// Type Definition +//============================================================================ +#pragma pack(1) +typedef struct raw_data_13bytes_t +{ + uint8_t loss; + uint32_t rawData; + uint8_t non_zero1; + uint8_t non_zero2; + uint8_t non_zero3; + uint8_t frame_count; + uint8_t time; + uint8_t rsv; + uint8_t touch; + uint8_t rsv2; +} sRaw_Data_13Bytes; + +typedef enum { + MSG_ALG_NOCHANGE = 0, + MSG_ALG_ENABLE, + MSG_ALG_DISABLE, +} alg_msg_code_t; +#pragma pack() + +typedef enum +{ + pc_4mm_2g_ir_hrd, // PC 4.25mm for HRD wear + diw_4mm_g_ir_hrd, // DI+WALL 4.25mm for HRD hrs + diw_4mm_ir_r_ir_spo2, // DI+WALL 4.25mm for SPO2 spo2 + pc_22mm_2g_ir_hrd, // PC 2.2mm for HRD + di_18mm_g_g_hrd, // DI 1.8mm for HRD + +} reg_config_type; + +typedef struct { + + volatile bool has_interrupt; + volatile uint64_t interrupt_timestamp; + + // pah + pah_800x pah_800x; + + bool is_Auto_mode; + // ppg + bool ppg_is_enabled; + //bool ppg_only_is_enabled; + bool ppg_has_prev_report_timestamp; + uint64_t ppg_prev_report_timestamp; + uint8_t ppg_frame_count; + + // touch + bool touch_is_enabled; + //bool touch_only_is_enabled; + int touch_last_is_touched; + + // alg + uint8_t alg_is_enabled; + bool hr_is_enabled; + bool spo2_is_enabled; + bool stress_is_enable; + // debug + bool debug_print_header; + uint8_t debug_frame_count; + +} main_state; + +typedef struct { + float MEMS_Data[3] ; + pah_800x_ppg_data ppg_data; + uint8_t touch_flag; + uint8_t duration; + uint8_t ppg_frame_count; + //pah_800x_touch_data touch_data; +} ppg_mems_data_t; + + + + + +//============================================================================ +// Public function +//============================================================================ +void pah_sensor_init(reg_config_type type); +void touch_only_sensor_start(void); +void ppg_only_sensor_start(void); +void auto_mode_sensor_start(void); +void pah_sensor_stop(void); +void ppg_interrupt_handle(void); +void ppg_sensor_task_interrupt(void); +void ppg_sensor_task_polling(void); + + +bool isFIFOEmpty(void); +bool pah_push(ppg_mems_data_t *data); +bool pah_pop(ppg_mems_data_t *data); + + +uint8_t Check_alg_enable(void); +void Clear_alg_enable(void); + +//HRD +void hr_algorithm_enable(void); +void hr_algorithm_disable(void); +void hr_alg_task(void); +void hr_alg_task2(uint8_t ppg_num); + +//SPO2 +void spo2_algorithm_enable(void); +void spo2_algorithm_disable(void); +void spo2_alg_task(void); +void spo2_alg_task2(uint8_t ppg_num); + +//Stress +void stress_algorithm_enable(void); +void stress_algorithm_disable(void); +//void stress_alg_task(void); +void stress_alg_task(int grade); + +uint16_t pah8009_get_chip_id(void); +void pah8009_control(char *mode,uint8_t enable); +uint32_t pah8009_get_factory_data(void); +void pah8009_int_handler(void); + +/** + * @brief Macro to be used in a formatted string to a pass float number to the log. + * + * Macro should be used in formatted string instead of the %f specifier together with + * @ref LOG_FLOAT macro. + * Example: LOG_INFO("My float number" LOG_FLOAT_MARKER "\r\n", LOG_FLOAT(f))) + */ +#define LOG_FLOAT_MARKER "%c%d.%05d" + +/** + * @brief Macro for dissecting a float number into two numbers (integer and residuum). + */ +#define LOG_FLOAT(val) ((val >= 0.0f)?32:45),(int32_t)((val >= 0.0f)?val:val*-1) , (int32_t)(((val > 0) ? (val) - (int32_t)(val): (int32_t)(val) - (val))*100000) + + + +#ifdef PPG_MEMS_Synchronize +//MEMS Interpolation +//void mems_interpolation(uint8_t ppg_num); +void mems_interpolation(int16_t *mems_int_data_in,uint8_t mems_count,uint8_t ppg_num); +uint8_t get_ppg_data_num(void); +void clear_ppg_data_num(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif // header guard diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_8009_reg_arr_default_20220623.h b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_8009_reg_arr_default_20220623.h new file mode 100644 index 000000000..abf28f21c --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_8009_reg_arr_default_20220623.h @@ -0,0 +1,484 @@ +#ifndef __pah_8009_reg_arr_default_h__ +#define __pah_8009_reg_arr_default_h__ + +// c +#include + +//pah +#include "pah_800x_config.h" + + +static const uint8_t PAH8009_REG_DEVICE_INIT[][2] = { +// { 0xEE,0x07 }, //SW RESET + { 0xD1,0xD0 },//{R_GPIO_0_IEB, R_GPIO_1_IEB, R_GPIO_0_OEB, R_GPIO_1_OEB, R_GPIO_0_PULLL_EnH, R_GPIO_1_PULLL_EnH, R_GPIO_0_PULLH_EnH, R_GPIO_1_PULLH_EnH}; + { 0xD2,0x00+R_GPIO_SLEW+R_GPIO_0_OD_EnH },//R_GPIO_0_Open_Drain_EnH(0xD2[5]), 1(0x20):GPIO default open-drain mode, 0(0x00):GPIO debug mode + { 0xD3,0x20 },//GPIO debug select + { 0xD6,0x00+R_I2C_SLEW },//{Dummy, R_I2C_SLEW, Dummy[5:0]} +#if (INT_OD_EXTERNAL_PULLH) + { 0xD1,0xD0 },//{R_GPIO_0_IEB, R_GPIO_1_IEB, R_GPIO_0_OEB, R_GPIO_1_OEB, R_GPIO_0_PULLL_EnH, R_GPIO_1_PULLL_EnH, R_GPIO_0_PULLH_EnH, R_GPIO_1_PULLH_EnH}; + { 0xD2,0x20+R_GPIO_SLEW },//R_GPIO_0_Open_Drain_EnH(0xD2[5]), 1(0x20):GPIO default open-drain mode, 0(0x00):GPIO debug mode + { 0xD3,0x00 },//GPIO debug select + { 0xD6,0x00+R_I2C_SLEW },//{Dummy, R_I2C_SLEW, Dummy[5:0]} +#endif +#if (INT_OD_INTERNAL_PULLH) + { 0xD1,0xD2 },//{R_GPIO_0_IEB, R_GPIO_1_IEB, R_GPIO_0_OEB, R_GPIO_1_OEB, R_GPIO_0_PULLL_EnH, R_GPIO_1_PULLL_EnH, R_GPIO_0_PULLH_EnH, R_GPIO_1_PULLH_EnH}; + { 0xD2,0x20+R_GPIO_SLEW },//R_GPIO_0_Open_Drain_EnH(0xD2[5]), 1(0x20):GPIO default open-drain mode, 0(0x00):GPIO debug mode + { 0xD3,0x00 },//GPIO debug select + { 0xD6,0x00+R_I2C_SLEW },//{Dummy, R_I2C_SLEW, Dummy[5:0]} +#endif +#if (INT_PUP_WITHOUT_PULLH) + { 0xD1,0xD0 },//{R_GPIO_0_IEB, R_GPIO_1_IEB, R_GPIO_0_OEB, R_GPIO_1_OEB, R_GPIO_0_PULLL_EnH, R_GPIO_1_PULLL_EnH, R_GPIO_0_PULLH_EnH, R_GPIO_1_PULLH_EnH}; + { 0xD2,0x00+R_GPIO_SLEW },//R_GPIO_0_Open_Drain_EnH(0xD2[5]), 1(0x20):GPIO default open-drain mode, 0(0x00):GPIO debug mode + { 0xD3,0x00 },//GPIO debug select + { 0xD6,0x00+R_I2C_SLEW },//{Dummy, R_I2C_SLEW, Dummy[5:0]} +#endif +// { 0xD6,0x30 },//{Dummy, R_I2C_SLEW, R_I2C_DRV[1:0], Dummy[3:0]} +// { 0xD5,0x44 },//IO-level(I2C), 44:3.3V, 00:1.8V +// { 0xB2,0x25 }, + { 0x55,0x24 },//Soft Reset:04 Hard Reset:24 + { 0x52,0x12 },//VDDAY=1.63V +// { 0xA6,0xF7 },//Cmd_vdday_pwrsv_sel_EnH=0 + { 0xAE,0x3F },//R_LPO_Cali_mode=1 + { 0x20,0x05 },//Clear INT +}; +#ifndef LED_SUPPLIER_NEW +#ifdef DI_WALL_4mm +#define PPG_SETTING_VERSION 0x01 +#endif +#if (DIW_4MM_G_IR_HRD==1) +static const uint8_t PAH8009_REG_DIW_4MM_G_IR_PPG[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x08,0xE8 },//A period + { 0x09,0x03 },//A period + { 0x0A,0x00 },//B period + { 0x0B,0x08 },//B period + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x0E,0x04 },//RDB_FrameNum_A[6:0] + { 0x0F,0x08 },//RDB_FrameNum_B[6:0] + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x76 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x14,0x12 },//{RDB_ChA_congain_sel[1:0], Dummy[0], R_LEDDAC_code0[4:0]} + { 0x15,0x04 },//{RDB_ChB_congain_sel[1:0], Dummy[0], R_LEDDAC_code1[4:0]} + { 0x16,0x92 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x17,0x58 },//RDB_expo_A[7:0] + { 0x18,0x02 },//RDB_expo_A[15:8] + { 0x19,0x00 },//RDB_expo_B[7:0] + { 0x1A,0x01 },//RDB_expo_B[15:8] + { 0x1B,0x20 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1D,0x1F },//{R_ChA_LED_EnH[2:0], R_ChA_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1E,0x2F },//{R_ChB_LED_EnH[2:0], R_ChB_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0xF7 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; + +static const uint8_t PAH8009_REG_DIW_4MM_G_IR_TOUCH[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x44 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x16,0x92 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x1B,0x20 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0x04 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; +#endif +#if (DIW_4MM_IR_R_IR_SPO2==1) +static const uint8_t PAH8009_REG_DIW_4MM_IR_R_IR_PPG[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x00 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x05 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x08,0x00 },//A period + { 0x09,0x01 },//A period + { 0x0A,0x00 },//B period + { 0x0B,0x01 },//B period + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x0E,0x40 },//RDB_FrameNum_A[6:0] + { 0x0F,0x40 },//RDB_FrameNum_B[6:0] + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x77 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x14,0x52 },//{RDB_ChA_congain_sel[1:0], Dummy[0], R_LEDDAC_code0[4:0]} + { 0x15,0x44 },//{RDB_ChB_congain_sel[1:0], Dummy[0], R_LEDDAC_code1[4:0]} + { 0x16,0x84 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x17,0x40 },//RDB_expo_A[7:0] + { 0x18,0x00 },//RDB_expo_A[15:8] + { 0x19,0x40 },//RDB_expo_B[7:0] + { 0x1A,0x00 },//RDB_expo_B[15:8] + { 0x1B,0x20 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1D,0x1F },//{R_ChA_LED_EnH[2:0], R_ChA_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1E,0x4F },//{R_ChB_LED_EnH[2:0], R_ChB_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0xF7 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; + + +static const uint8_t PAH8009_REG_DIW_4MM_IR_R_IR_TOUCH[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x00 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x05 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x44 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x16,0x92 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x1B,0x20 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0x04 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; + +#endif + +#if (PC_4MM_2G_IR_HRD==1) +#ifdef PC_4mm +#define PPG_SETTING_VERSION 0x11 +#endif +static const uint8_t PAH8009_REG_PC_4MM_2G_IR_PPG[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x08,0xE8 },//A period + { 0x09,0x03 },//A period + { 0x0A,0x00 },//B period + { 0x0B,0x08 },//B period + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x0E,0x04 },//RDB_FrameNum_A[6:0] + { 0x0F,0x08 },//RDB_FrameNum_B[6:0] + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x76 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x14,0x12 },//{RDB_ChA_congain_sel[1:0], Dummy[0], R_LEDDAC_code0[4:0]} + { 0x15,0x44 },//{RDB_ChB_congain_sel[1:0], Dummy[0], R_LEDDAC_code1[4:0]} + { 0x16,0xC4 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x17,0x58 },//RDB_expo_A[7:0] + { 0x18,0x02 },//RDB_expo_A[15:8] + { 0x19,0x00 },//RDB_expo_B[7:0] + { 0x1A,0x01 },//RDB_expo_B[15:8] + { 0x1B,0x28 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1D,0x1F },//{R_ChA_LED_EnH[2:0], R_ChA_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1E,0x6F },//{R_ChB_LED_EnH[2:0], R_ChB_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0xF7 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; + +static const uint8_t PAH8009_REG_PC_4MM_2G_IR_TOUCH[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x44 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x16,0xD2 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x1B,0x28 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0x04 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; +#endif + + +#else +#ifdef DI_WALL_4mm +#define PPG_SETTING_VERSION 0x21 +#endif +#if (DIW_4MM_G_IR_HRD==1) +static const uint8_t PAH8009_REG_DIW_4MM_G_IR_PPG[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x08,0xE8 },//A period + { 0x09,0x03 },//A period + { 0x0A,0x00 },//B period + { 0x0B,0x08 },//B period + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x0E,0x04 },//RDB_FrameNum_A[6:0] + { 0x0F,0x08 },//RDB_FrameNum_B[6:0] + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x76 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x14,0x12 },//{RDB_ChA_congain_sel[1:0], Dummy[0], R_LEDDAC_code0[4:0]} + { 0x15,0x04 },//{RDB_ChB_congain_sel[1:0], Dummy[0], R_LEDDAC_code1[4:0]} + { 0x16,0x12 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x17,0x58 },//RDB_expo_A[7:0] + { 0x18,0x02 },//RDB_expo_A[15:8] + { 0x19,0x00 },//RDB_expo_B[7:0] + { 0x1A,0x01 },//RDB_expo_B[15:8] + { 0x1B,0x20 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1D,0x1F },//{R_ChA_LED_EnH[2:0], R_ChA_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1E,0x2F },//{R_ChB_LED_EnH[2:0], R_ChB_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0xF7 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; + +static const uint8_t PAH8009_REG_DIW_4MM_G_IR_TOUCH[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x44 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x16,0x12 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x1B,0x20 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0x04 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; +#endif + +#if (DIW_4MM_IR_R_IR_SPO2==1) +static const uint8_t PAH8009_REG_DIW_4MM_IR_R_IR_PPG[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x00 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x05 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x08,0x00 },//A period + { 0x09,0x01 },//A period + { 0x0A,0x00 },//B period + { 0x0B,0x01 },//B period + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x0E,0x40 },//RDB_FrameNum_A[6:0] + { 0x0F,0x40 },//RDB_FrameNum_B[6:0] + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x77 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x14,0x12 },//{RDB_ChA_congain_sel[1:0], Dummy[0], R_LEDDAC_code0[4:0]} + { 0x15,0x04 },//{RDB_ChB_congain_sel[1:0], Dummy[0], R_LEDDAC_code1[4:0]} + { 0x16,0x04 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x17,0x40 },//RDB_expo_A[7:0] + { 0x18,0x00 },//RDB_expo_A[15:8] + { 0x19,0x40 },//RDB_expo_B[7:0] + { 0x1A,0x00 },//RDB_expo_B[15:8] + { 0x1B,0x20 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1D,0x1F },//{R_ChA_LED_EnH[2:0], R_ChA_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1E,0x4F },//{R_ChB_LED_EnH[2:0], R_ChB_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0xF7 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; + +static const uint8_t PAH8009_REG_DIW_4MM_IR_R_IR_TOUCH[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x00 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x05 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x44 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x16,0x12 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x1B,0x20 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0x04 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; +#endif + +//China LED + +#if (PC_4MM_2G_IR_HRD==1) +#ifdef PC_4mm +#define PPG_SETTING_VERSION 0x31 +#endif +static const uint8_t PAH8009_REG_PC_4MM_2G_IR_PPG[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x08,0xE8 },//A period + { 0x09,0x03 },//A period + { 0x0A,0x00 },//B period + { 0x0B,0x08 },//B period + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x0E,0x04 },//RDB_FrameNum_A[6:0] + { 0x0F,0x08 },//RDB_FrameNum_B[6:0] + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x76 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x14,0x12 },//{RDB_ChA_congain_sel[1:0], Dummy[0], R_LEDDAC_code0[4:0]} + { 0x15,0x44 },//{RDB_ChB_congain_sel[1:0], Dummy[0], R_LEDDAC_code1[4:0]} + { 0x16,0x04 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x17,0x58 },//RDB_expo_A[7:0] + { 0x18,0x02 },//RDB_expo_A[15:8] + { 0x19,0x00 },//RDB_expo_B[7:0] + { 0x1A,0x01 },//RDB_expo_B[15:8] + { 0x1B,0x28 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1D,0x1F },//{R_ChA_LED_EnH[2:0], R_ChA_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1E,0x6F },//{R_ChB_LED_EnH[2:0], R_ChB_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0xF7 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; + +static const uint8_t PAH8009_REG_PC_4MM_2G_IR_TOUCH[][2] = { + //{ 0xEE,0x07 }, + { 0x03,0x40 },//Golden report period[7:0] (1T=31.25us) + { 0x04,0x06 },//Golden report period[15:8] + { 0x05,0x00 },//Golden report period[19:16] + { 0x12,0x01 },//ChC_report_divider[7:0] + { 0x13,0x00 },//ChC_report_divider[9:8] + { 0x0C,0x00 },//C period + { 0x0D,0x01 },//C period + { 0x10,0x01 },//RDB_FrameNum_C[6:0] + { 0x11,0x44 },//{R_OnOff_mode_C_EnH, R_OnOff_mode_B_EnH, R_OnOff_mode_A_EnH, R_ChC_EnH, R_ChB_EnH, R_ChA_EnH} + { 0x16,0x12 },//{RDB_ChC_congain_sel[1:0], Dummy[0], R_LEDDAC_code2[4:0]} + { 0x1B,0x28 },//RDB_expo_C[7:0] + { 0x1C,0x00 },//RDB_expo_C[15:8] + { 0x1F,0x1F },//{R_ChC_LED_EnH[2:0], R_ChC_Pixel_EnH[3:0]}, [3]:pixel3, [2]:pixel2, [1]:pixel1, [0]:pixel0, enable high + { 0x22,0x04 },//RDB_Int_En[7:0], [2]:touch flag [1]:overflow [0]:data ready + { 0x26,0x20 },//{R_ADCdata_C_Sel[1:0], R_ADCdata_B_Sel[1:0], R_ADCdata_A_Sel[1:0]}, 0:on, 1:off(需開On-Off), 2:on-off(需開On-Off) + { 0x49,0x11 },//RDB_Touch_EnH + { 0x4A,0x00 },//R_TouchDetection_Th_Hi[7:0] + { 0x4B,0x07 },//R_TouchDetection_Th_Hi[13:8] + { 0x4C,0x00 },//R_TouchDetection_Th_Low[7:0] + { 0x4D,0x05 },//R_TouchDetection_Th_Low[13:8] + { 0x4E,0x00 },//R_TouchDetection_Count_Th[4:0] + { 0x4F,0x00 },//R_NoTouchDetection_Count_Th[4:0] + { 0xEB,0x80 },//update_flag +}; +#endif + +#endif + +#endif // header guard diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x.c b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x.c new file mode 100644 index 000000000..da77ddbdc --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x.c @@ -0,0 +1,833 @@ +// pah +#include "pah_800x.h" + + +//============================================================================ +// Private function +//============================================================================ +static bool sensor_has_enabled(pah_800x *state); + +static pah_ret ppg_convergence_toggle(pah_800x *state, bool enable, uint8_t ch_num); + +static pah_ret ppg_reset_exposure(pah_800x *state, uint8_t ch_num); + +//static pah_ret touch_process(pah_800x *state, uint8_t *touch_flag); +static pah_ret ppg_process(pah_800x *state, pah_800x_ppg_data *ppg_result); +static pah_ret clear_interrupt(pah_800x *state, bool has_ppg_interrupt, bool has_overflow); + +static pah_ret ppg_converging(pah_800x *state, uint32_t ppg_value, uint8_t ch_num); +static uint16_t select_new_ppg_exposure(pah_800x *state, uint16_t old_ppg_exposure, uint16_t ppg_value, uint8_t ch_num); + +static bool is_touched(pah_800x *state); +static bool is_not_touched(pah_800x *state); + +static bool ppg_value_is_out_of_outer_bounds(pah_800x *state, uint32_t ppg_data, uint8_t ch_num); +static bool ppg_value_is_out_of_inner_bounds(pah_800x *state, uint16_t ppg_data, uint8_t ch_num); + +static pah_ret pah_800x_sw_reset(pah_800x *state); +///////////////////////////////////////////////////////////////////////////////////////////// + +//// comm + +static pah_ret pah_800x_hal_comm_write(uint8_t addr, const uint8_t *data, size_t write_size); +static pah_ret pah_800x_hal_comm_read(uint8_t addr, uint8_t *data, size_t read_size); + + +//// write +static pah_ret pah_800x_hal_write_reg_arr(const pah_reg_arr *reg_arr); +static pah_ret pah_800x_hal_write_reg_array(const uint8_t reg_array[][2], size_t length); +static pah_ret pah_800x_hal_write_suspend_state(bool suspend); +static pah_ret pah_800x_hal_write_interrupt_clear(void); +static pah_ret pah_800x_hal_write_interrupt_clear_v2(bool int_status_DR_FLAG_b); +static pah_ret pah_800x_hal_write_ppg_overflow_clear(void); +static pah_ret pah_800x_hal_write_exposure(uint16_t exposure, uint8_t ch_num); +static pah_ret pah_800x_hal_tg_toggle(bool enable); +static pah_ret pah_800x_hal_update_flag(void); +static pah_ret pah_800x_hal_write_sw_reset(void); +static pah_ret pah_800x_hal_reset_gpio_state(void); +//// read +static pah_ret pah_800x_hal_read_product_id(uint16_t *product_id); +static pah_ret pah_800x_hal_read_ppg_interrupt(uint8_t *ppg_interrupt); +static pah_ret pah_800x_hal_read_ppg_sync(uint32_t *ppg_data, uint8_t ch_num); +static pah_ret pah_800x_hal_read_ppg_overflow(uint8_t *ppg_overflow, uint8_t *overflow_num); +static pah_ret pah_800x_hal_read_ppg_exposure(uint16_t *als_exposure, uint8_t ch_num); +static pah_ret pah_800x_hal_touch_get_touch_flag(int8_t *touch_flag); +static pah_ret pah_800x_hal_touch_get_touch_info(int8_t *touch_flag,uint16_t *touch_value); + + +static pah_ret pah_800x_hal_check_enable_channel(pah_800x *state, const pah_reg_arr *reg_arr); +static pah_ret comm_write(uint8_t addr, uint8_t data); +static pah_ret pah_800x_hal_read_ppg_adc(uint16_t *ppg_adc, uint8_t ch_num); +static pah_ret pah_800x_hal_read_ppg_frame_period(uint16_t *ppg_frame_period, uint8_t ch_num); + + +//============================================================================ +// Public function +//============================================================================ +uint16_t pah_800x_get_i2c_default_slave_addr(void) +{ + return PAH_800x_DEFAULT_I2C_SLAVE_ID_1; +} + +void pah_800x_get_default_config(pah_800x_config *config) +{ + memset(config, 0, sizeof(*config)); + + config->enable_ppg_convergence[0] = PAH_800x_DEFAULT_ENABLE_PPG_CONVERGENCE; + config->enable_ppg_convergence[1] = PAH_800x_DEFAULT_ENABLE_PPG_CONVERGENCE; + config->enable_ppg_convergence[2] = false; + + config->enable_ppg_reconvergence_if_out_of_bounds[0] = PAH_800x_DEFAULT_ENABLE_PPG_RECONVERGENCE_IF_OUT_OF_BOUNDS; + config->enable_ppg_reconvergence_if_out_of_bounds[1] = PAH_800x_DEFAULT_ENABLE_PPG_RECONVERGENCE_IF_OUT_OF_BOUNDS; + config->enable_ppg_reconvergence_if_out_of_bounds[2] = false; + + for(int ch=0;chppg_convergence[ch].t_weight_normal_mode = PAH_800x_DEFAULT_PPG_CONVERGENCE_T_WEIGHT_NORMAL_MODE; + config->ppg_convergence[ch].t_weight_fast_mode = PAH_800x_DEFAULT_PPG_CONVERGENCE_T_WEIGHT_FAST_MODE; + config->ppg_convergence[ch].t_min = PAH_800x_DEFAULT_PPG_CONVERGENCE_T_MIN; + config->ppg_convergence[ch].t_max = PAH_800x_DEFAULT_PPG_CONVERGENCE_T_MAX; + config->ppg_convergence[ch].raw_outer_high_bound = PAH_800x_DEFAULT_PPG_CONVERGENCE_RAW_OUTER_HIGH_BOUND; + config->ppg_convergence[ch].raw_inner_high_target = PAH_800x_DEFAULT_PPG_CONVERGENCE_RAW_INNER_HIGH_TARGET; + config->ppg_convergence[ch].raw_inner_low_target = PAH_800x_DEFAULT_PPG_CONVERGENCE_RAW_INNER_LOW_TARGET; + config->ppg_convergence[ch].raw_outer_low_bound = PAH_800x_DEFAULT_PPG_CONVERGENCE_RAW_OUTER_LOW_BOUND; + config->ppg_convergence[ch].convergence_count = PAH_800x_DEFAULT_PPG_CONVERGENCE_COUNT; + config->ppg_initial_exposure[ch] = PAH_800x_DEFAULT_PPG_INITIAL_EXPOSURE; + } + +} + +pah_ret pah_800x_get_product_id(uint16_t *product_id) +{ + return pah_800x_hal_read_product_id(product_id); +} + +pah_ret pah_800x_init(pah_800x *state, const pah_800x_config *config) +{ + memset(state, 0, sizeof(*state)); + + // state->plat = *plat; + state->config = *config; + for(int ch=0;chenable_ppg_convergence[ch]); + if (config->enable_ppg_convergence[ch]) + { + DEBUG_PRINT("(t_weight_normal_mode, t_weight_fast_mode) = (%d, %d)\n", + config->ppg_convergence[ch].t_weight_normal_mode, + config->ppg_convergence[ch].t_weight_fast_mode); + DEBUG_PRINT("(t_min, t_max) = (%d, %d)\n", + config->ppg_convergence[ch].t_min, + config->ppg_convergence[ch].t_max); + DEBUG_PRINT("(raw_outer_high_bound, raw_inner_high_target) = (%d, %d)\n", + config->ppg_convergence[ch].raw_outer_high_bound, + config->ppg_convergence[ch].raw_inner_high_target); + DEBUG_PRINT("(raw_inner_low_target, raw_outer_low_bound) = (%d, %d)\n", + config->ppg_convergence[ch].raw_inner_low_target, + config->ppg_convergence[ch].raw_outer_low_bound); + } + } + + return PAH_RET_SUCCESS; +} + +pah_ret pah_800x_deinit(pah_800x *state) +{ + pah_800x_ppg_toggle(state, false); + pah_800x_touch_toggle(state, false); + pah_800x_power_toggle(state, false); + return PAH_RET_SUCCESS; +} + +pah_ret pah_800x_device_init(pah_800x *state, const pah_800x_reg_setting *reg_setting) +{ + DEBUG_PRINT("%s\n", __func__); + + //uint16_t *product_id; + uint16_t product_id; + state->reg_setting = *reg_setting; + + pah_800x_hal_write_suspend_state(false); + pah_800x_hal_write_sw_reset(); + pah_delay_ms(2); + pah_800x_power_toggle(state, true); + + // read id, delay for reg bank reset + //pah_800x_hal_read_product_id(product_id); + pah_800x_hal_read_product_id(&product_id); + pah_800x_hal_write_reg_arr(&state->reg_setting.startup_init); + + return PAH_RET_SUCCESS; +} + +pah_ret pah_800x_power_toggle(pah_800x *state, bool enable) +{ + DEBUG_PRINT("%s(%d, %d)\n", __func__, state->is_powered, enable); + + + if (enable) + { + if (state->is_powered == enable) + { + return PAH_RET_SUCCESS; + } + pah_800x_hal_write_suspend_state(false); + } + else + { + state->ppg_state.is_enabled = false; + state->touch_state.is_enabled = false; + + pah_800x_hal_write_suspend_state(false); + //pah_800x_hal_write_sw_reset(); + pah_delay_ms(2); + pah_800x_hal_write_suspend_state(true); + pah_800x_hal_reset_gpio_state(); + } + + state->is_powered = enable; + state->touch_state.touch_flag = TOUCH_TRALSE_VALUE; + + return PAH_RET_SUCCESS; +} + +pah_ret pah_800x_verify_product_id(pah_800x *state, uint16_t *product_id) +{ + return pah_800x_hal_read_product_id(product_id); +} + +pah_ret pah_800x_ppg_toggle(pah_800x *state, bool enable) +{ + DEBUG_PRINT("%s(%d, %d)\n", __func__, state->ppg_state.is_enabled, enable); + if (state->ppg_state.is_enabled == enable) + return PAH_RET_SUCCESS; + //pah_800x_hal_write_als_toggle( enable); + if (enable) + { + //load ppg setting + //comm_write(0xEB,0x80); +// for(uint8_t ch_num=0;ch_num < PAH_800x_MAX_CH_NUM;ch_num++) +// { +// ppg_reset_exposure(state,ch_num); +// pah_800x_hal_update_flag(); +// } + + pah_800x_hal_write_reg_arr(&state->reg_setting.ppg_enable); + + pah_800x_hal_check_enable_channel(state, &state->reg_setting.ppg_enable); + //DEBUG_PRINT("ch enable %d %d %d \n",state->ppg_state.ppg_ch_enabled[0],state->ppg_state.ppg_ch_enabled[1],state->ppg_state.ppg_ch_enabled[2]); + pah_800x_hal_update_flag(); + + pah_800x_hal_write_interrupt_clear(); + if(!state->touch_state.is_enabled) + pah_800x_hal_tg_toggle(true); + } + else + { + if(!state->touch_state.is_enabled) + pah_800x_hal_tg_toggle(false); + } + + + for(uint8_t ch_num=0;ch_num < PAH_800x_MAX_CH_NUM;ch_num++) + { + state->ppg_state.is_converging[ch_num] = enable; + state->ppg_state.cur_converging_count[ch_num] = 0; + } + + state->ppg_state.is_enabled = enable; + return PAH_RET_SUCCESS; +} + +pah_ret pah_800x_ppg_get_data(pah_800x *state, pah_800x_ppg_data *ppg_data) +{ + *ppg_data = state->ppg_result; + return PAH_RET_SUCCESS; +} + +pah_ret pah_800x_update_touch_setting(pah_800x *state) +{ + pah_800x_hal_write_reg_arr(&state->reg_setting.touch_enable); + pah_800x_hal_update_flag(); + + return PAH_RET_SUCCESS; +} + +pah_ret pah_800x_touch_toggle(pah_800x *state, bool enable) +{ + DEBUG_PRINT("%s(%d, %d)\n", __func__, state->touch_state.is_enabled, enable); + if (state->touch_state.is_enabled == enable) + return PAH_RET_SUCCESS; + + if (enable) + { + //load touch setting + pah_800x_hal_write_reg_arr(&state->reg_setting.touch_enable); + pah_800x_hal_update_flag(); + pah_800x_hal_tg_toggle(true); + } + else + pah_800x_hal_tg_toggle(false); + state->touch_state.is_enabled = enable; + + return PAH_RET_SUCCESS; +} + +pah_ret pah_800x_get_touch_flag(pah_800x *state, int8_t *touch_flag) +{ + *touch_flag = state->touch_flag; + return PAH_RET_SUCCESS; +} +pah_ret pah_800x_get_touch_value(pah_800x *state, uint16_t *touch_value) +{ + *touch_value = state->touch_value; + return PAH_RET_SUCCESS; +} + + +pah_ret pah_800x_task(pah_800x *state) +{ + uint8_t ppg_interrupt = 0; + bool has_ppg_interrupt = false; + memset(&state->ppg_result, 0, sizeof(state->ppg_result)); + state->touch_flag = -1; + //memset(&state->touch_result, 0, sizeof(state->touch_result)); + + //touch_process(state, &state->touch_flag); + pah_800x_hal_touch_get_touch_flag( &state->touch_flag); + //pah_800x_hal_touch_get_touch_info( &state->touch_flag,&state->touch_value); + + pah_800x_hal_read_ppg_interrupt(&ppg_interrupt); + + has_ppg_interrupt = (ppg_interrupt > 0); + //DEBUG_PRINT("%s(%d)(%d)\n", __func__, ppg_interrupt,state->touch_flag); + if (has_ppg_interrupt > 0) + { + ppg_process(state, &state->ppg_result); + } + + clear_interrupt(state, has_ppg_interrupt, state->ppg_result.has_overflow); + + return PAH_RET_SUCCESS; +} + + +//============================================================================ +// Private function +//============================================================================ +static bool sensor_has_enabled(pah_800x *state) +{ + return state->ppg_state.is_enabled + || state->touch_state.is_enabled; +} + +static pah_ret ppg_convergence_toggle(pah_800x *state, bool enable, uint8_t ch_num) +{ + //DEBUG_PRINT("%s(%d, %d, %d)\n", __func__, state->config.enable_ppg_convergence[ch_num], enable, ch_num); + + if (ch_num >= PAH_800x_MAX_CH_NUM) + return PAH_RET_INVALID_ARGUMENT; + + if (!state->config.enable_ppg_convergence[ch_num]) + return PAH_RET_SUCCESS; + + if (enable && state->ppg_state.cur_converging_count[ch_num] < state->config.ppg_convergence[ch_num].convergence_count) + { + state->ppg_state.cur_converging_count[ch_num]++; + return PAH_RET_SUCCESS; + } + else + { + state->ppg_state.cur_converging_count[ch_num] = 0; + } + state->ppg_state.is_converging[ch_num] = enable; + + return PAH_RET_SUCCESS; +} + +static pah_ret ppg_reset_exposure(pah_800x *state, uint8_t ch_num) +{ + //DEBUG_PRINT("%s(%d)\n", __func__, state->config.ppg_initial_exposure[ch_num]); + if (!state->config.enable_ppg_convergence[ch_num]) + return PAH_RET_SUCCESS; + + return pah_800x_hal_write_exposure( state->config.ppg_initial_exposure[ch_num],ch_num); +} +/*static pah_ret touch_process(pah_800x *state, uint8_t *touch_flag) +{ + + pah_800x_touch_get_touch_flag( touch_flag); + + return PAH_RET_SUCCESS; +}*/ + + +static pah_ret ppg_process(pah_800x *state, pah_800x_ppg_data *ppg_result) +{ + uint32_t ppg_value[PAH_800x_MAX_CH_NUM] = {0}; + uint8_t ppg_overflow = 0; + uint8_t overflow_num = 0; + uint16_t ppg_exposure = 0; + uint16_t ppg_adc = 0; + uint16_t ppg_frame_period = 0; + if (!state->ppg_state.is_enabled) + return PAH_RET_SUCCESS; + + for(uint8_t ch_num=0; ch_num < PAH_800x_MAX_CH_NUM; ch_num++) + { + if(state->ppg_state.ppg_ch_enabled[ch_num]) + { + pah_800x_hal_read_ppg_sync(&ppg_value[ch_num], ch_num); + pah_800x_hal_read_ppg_exposure(&ppg_exposure, ch_num); + pah_800x_hal_read_ppg_frame_period(&ppg_frame_period,ch_num); + pah_800x_hal_read_ppg_adc(&ppg_adc,ch_num); + ppg_converging(state, ppg_adc, ch_num);//SD-revise-20191205 + + ppg_result->data[ch_num] = ppg_value[ch_num]; + ppg_result->exposure_time[ch_num] = ppg_exposure; + ppg_result->frame_period[ch_num] = ppg_frame_period; + ppg_result->adc[ch_num] = ppg_adc; + } + } + pah_800x_hal_read_ppg_overflow(&ppg_overflow,&overflow_num); + ppg_result->has_data = true; + ppg_result->has_overflow = (ppg_overflow > 0); + ppg_result->overflow_num = overflow_num; + + return PAH_RET_SUCCESS; +} + +static pah_ret clear_interrupt(pah_800x *state, bool has_ppg_interrupt, bool has_overflow) +{ + + //pah_800x_hal_write_interrupt_clear(); + pah_800x_hal_write_interrupt_clear_v2(has_ppg_interrupt); + return PAH_RET_SUCCESS; +} + +static pah_ret ppg_converging(pah_800x *state, uint32_t ppg_adc, uint8_t ch_num) +{ + if (ch_num >= PAH_800x_MAX_CH_NUM) + return PAH_RET_INVALID_ARGUMENT; + + if (!state->config.enable_ppg_convergence[ch_num]) + return PAH_RET_SUCCESS; + + if (state->config.enable_ppg_reconvergence_if_out_of_bounds[ch_num] + && !state->ppg_state.is_converging[ch_num] + && is_touched(state) + && ppg_value_is_out_of_outer_bounds(state, ppg_adc, ch_num)) + { + ppg_convergence_toggle(state, true, ch_num); + } + else + { + state->ppg_state.cur_converging_count[ch_num] = 0; + } + + if (!state->ppg_state.is_converging[ch_num]) + return PAH_RET_SUCCESS; + + if (ppg_value_is_out_of_inner_bounds(state, ppg_adc, ch_num)) + { + uint16_t ppg_exposure = 0; + uint16_t new_ppg_exposure = 0; + + pah_800x_hal_read_ppg_exposure(&ppg_exposure, ch_num); + //DEBUG_PRINT("ppg converging[%d] exposure time %d ppg_value %d \n",ch_num, ppg_exposure,ppg_value); + new_ppg_exposure = select_new_ppg_exposure(state, ppg_exposure, ppg_adc, ch_num); + if(new_ppg_exposure==ppg_exposure) + { + return PAH_RET_SUCCESS; + } + + if (new_ppg_exposure > state->config.ppg_convergence[ch_num].t_max) + { + new_ppg_exposure = state->config.ppg_convergence[ch_num].t_max; + ppg_convergence_toggle(state, false, ch_num); + + DEBUG_PRINT("ppg converging complete: (exposure, t_max) = (%d)\n", new_ppg_exposure, state->config.ppg_convergence[ch_num].t_max); + } + else if (new_ppg_exposure < state->config.ppg_convergence[ch_num].t_min) + { + new_ppg_exposure = state->config.ppg_convergence[ch_num].t_min; + ppg_convergence_toggle(state, false, ch_num); + + DEBUG_PRINT("ppg converging complete: (exposure, t_min) = (%d)\n", new_ppg_exposure, state->config.ppg_convergence[ch_num].t_min); + } + + pah_800x_hal_write_exposure(new_ppg_exposure, ch_num); + pah_800x_hal_update_flag(); + + } + else + { + ppg_convergence_toggle(state, false, ch_num); + + DEBUG_PRINT("ppg converging complete: (low_target, als_lux_sync, high_target) = (%d, %d, %d)\n", + state->config.ppg_convergence[ch_num].raw_inner_low_target, ppg_adc, + state->config.ppg_convergence[ch_num].raw_inner_high_target); + } + + return PAH_RET_SUCCESS; +} + +static uint16_t select_new_ppg_exposure(pah_800x *state, uint16_t old_ppg_exposure, uint16_t ppg_value, uint8_t ch_num) +{ + int32_t new_ppg_exposure = (int32_t)old_ppg_exposure; + + if (ppg_value < state->config.ppg_convergence[ch_num].raw_outer_low_bound) + new_ppg_exposure += state->config.ppg_convergence[ch_num].t_weight_fast_mode; + else if (ppg_value < state->config.ppg_convergence[ch_num].raw_inner_low_target) + new_ppg_exposure += state->config.ppg_convergence[ch_num].t_weight_normal_mode; + else if (ppg_value > state->config.ppg_convergence[ch_num].raw_outer_high_bound) + { + if(new_ppg_exposure==state->config.ppg_convergence[ch_num].t_min) + { + return new_ppg_exposure; + } + new_ppg_exposure -= state->config.ppg_convergence[ch_num].t_weight_fast_mode; + + }else if (ppg_value > state->config.ppg_convergence[ch_num].raw_inner_high_target) + new_ppg_exposure -= state->config.ppg_convergence[ch_num].t_weight_normal_mode; + + return new_ppg_exposure; +} + +static bool is_touched(pah_800x *state) +{ + return state->touch_flag == 1; +} + +static bool is_not_touched(pah_800x *state) +{ + return state->touch_flag == 0; +} + +static bool ppg_value_is_out_of_outer_bounds(pah_800x *state, uint32_t ppg_data, uint8_t ch_num) +{ + return (ppg_data < state->config.ppg_convergence[ch_num].raw_outer_low_bound) + || (ppg_data > state->config.ppg_convergence[ch_num].raw_outer_high_bound); +} + +static bool ppg_value_is_out_of_inner_bounds(pah_800x *state, uint16_t ppg_data, uint8_t ch_num) +{ + return (ppg_data < state->config.ppg_convergence[ch_num].raw_inner_low_target) + || (ppg_data > state->config.ppg_convergence[ch_num].raw_inner_high_target); +} + +static pah_ret pah_800x_sw_reset(pah_800x *state) +{ + //set sw reset should not in suspend mode + if (state->is_powered == false) + return PAH_RET_FAILED; + + return pah_800x_hal_write_sw_reset(); +} +//////////////////////////////////////////////////////////////////////////////////////////// + + + +//=========================================================================== +// Private function +//=========================================================================== +static pah_ret pah_800x_hal_comm_write(uint8_t addr, const uint8_t *data, size_t write_size) +{ + //return plat->comm.write(&plat->comm, addr, data, write_size); + //return plat->comm.write(addr, data, write_size); + return pah_comm_i2c_write(addr, data, write_size); +} + +static pah_ret pah_800x_hal_comm_read(uint8_t addr, uint8_t *data, size_t read_size) +{ + + //return plat->comm.read(&plat->comm, addr, data, read_size); + return pah_comm_i2c_read(addr, data, read_size); +} + +static pah_ret comm_write(uint8_t addr, uint8_t data) +{ + //return pah_800x_hal_comm_write( addr, &data, 1); + return pah_800x_hal_comm_write(addr, &data, 1); +} +#define comm_read(addr, data) pah_800x_hal_comm_read(addr, data, 1) +#define comm_burst_read(addr, data, read_size) pah_800x_hal_comm_read(addr, data, read_size) + + +//=========================================================================== +// Private function (HAL) +//=========================================================================== +static pah_ret pah_800x_hal_write_reg_arr(const pah_reg_arr *reg_arr) +{ + return pah_800x_hal_write_reg_array(reg_arr->reg_arr, reg_arr->reg_arr_len); +} + +static pah_ret pah_800x_hal_write_reg_array(const uint8_t reg_array[][2], size_t length) +{ + size_t i = 0; + uint8_t reg_value = 0; + for (i = 0; i < length; ++i) + { + //for trim bit + if (reg_array[i][0] == 0x14) + { + comm_read(0x14, ®_value); + reg_value = (reg_value & 0x1F) | (reg_array[i][1] & 0xE0); + comm_write(reg_array[i][0], reg_value); + } + else + comm_write(reg_array[i][0], reg_array[i][1]); + } + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_write_suspend_state(bool suspend) +{ + uint8_t data = 0; + DEBUG_PRINT("%s(%d)\n", __func__, suspend); + if (suspend) + { + pah_800x_hal_write_interrupt_clear(); + comm_read(PAH_800x_ADDR_E8, &data); + PAH_SET_BIT(data, PAH_800x_ADDR_E8_CMD_SUSPEND_MODE_BIT); + comm_write(PAH_800x_ADDR_E8, data); + } + else + { + comm_read(PAH_800x_ADDR_E8, &data); + PAH_CLEAR_BIT(data, PAH_800x_ADDR_E8_CMD_SUSPEND_MODE_BIT); + comm_write(PAH_800x_ADDR_E8, data); + + } + DEBUG_PRINT("%s(%d) end\n", __func__, suspend); + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_write_interrupt_clear(void) +{ + uint8_t data = 0; + // DR interrupt + comm_read(PAH_800x_ADDR_20, &data); + //PAH_CLEAR_BIT(data, PAH_800x_ADDR_20_BIT_DR_FLAG); + comm_write(PAH_800x_ADDR_20, (data|0x04)); //SD-revise-20191205 + return PAH_RET_SUCCESS; +} +static pah_ret pah_800x_hal_write_interrupt_clear_v2(bool int_status_DR_FLAG_b) +{ + uint8_t data = 0; + bool int_status_DR_FLAG = 0; + // DR interrupt + comm_read(PAH_800x_ADDR_20, &data); + int_status_DR_FLAG = PAH_CHECK_BIT(data, PAH_800x_ADDR_20_BIT_DR_FLAG) ; + + if(int_status_DR_FLAG_b==int_status_DR_FLAG) + { + comm_write(PAH_800x_ADDR_20, (data|0x04)); //SD-revise-20191205 + }else if((int_status_DR_FLAG_b)==0 &&(int_status_DR_FLAG==1)) + { + comm_write(PAH_800x_ADDR_20, ((data|0x04)&0xFE)); //SD-revise-20191205 + } + return PAH_RET_SUCCESS; +} + + +static pah_ret pah_800x_hal_write_ppg_overflow_clear(void) +{ + uint8_t data = 0; + // Clear ppg_overflow flag + comm_read(PAH_800x_ADDR_20, &data); + PAH_SET_BIT(data, PAH_800x_ADDR_20_BIT_OVERFLOW_FLAG); + comm_write( PAH_800x_ADDR_20, data); + // Recover + PAH_CLEAR_BIT(data, PAH_800x_ADDR_20_BIT_OVERFLOW_FLAG); + comm_write(PAH_800x_ADDR_20, data); + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_write_exposure(uint16_t exposure, uint8_t ch_num) +{ + //uint8_t data = 0; + uint8_t exposure_low = PAH_UINT16_LOW(exposure); + uint8_t exposure_high = PAH_UINT16_HIGH(exposure); + + if(ch_num == PAH_800x_CH_NUM_A) + { + comm_write(PAH_800x_ADDR_17, exposure_low); + comm_write(PAH_800x_ADDR_18, exposure_high); + } + else if(ch_num == PAH_800x_CH_NUM_B) + { + comm_write(PAH_800x_ADDR_19, exposure_low); + comm_write(PAH_800x_ADDR_1A, exposure_high); + } + else if(ch_num == PAH_800x_CH_NUM_C) + { + comm_write(PAH_800x_ADDR_1B, exposure_low); + comm_write(PAH_800x_ADDR_1C, exposure_high); + } + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_read_product_id(uint16_t *product_id) +{ + return comm_burst_read(PAH_800x_ADDR_00_PRODUCT_ID, (uint8_t *)product_id,2); +} + +static pah_ret pah_800x_hal_read_ppg_interrupt(uint8_t *ppg_interrupt) +{ + uint8_t data = 0; + comm_read(PAH_800x_ADDR_20, &data); + if (ppg_interrupt) + *ppg_interrupt = PAH_CHECK_BIT(data, PAH_800x_ADDR_20_BIT_DR_FLAG); + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_read_ppg_sync(uint32_t *ppg_data, uint8_t ch_num) +{ + if(ch_num == PAH_800x_CH_NUM_A) + comm_burst_read(PAH_800x_ADDR_27_RAWDATA_A_SYNC, (uint8_t*)ppg_data, 3); + else if(ch_num == PAH_800x_CH_NUM_B) + comm_burst_read(PAH_800x_ADDR_32_RAWDATA_B_SYNC, (uint8_t*)ppg_data, 3); + else if(ch_num == PAH_800x_CH_NUM_C) + comm_burst_read(PAH_800x_ADDR_3D_RAWDATA_C_SYNC, (uint8_t*)ppg_data, 3); + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_read_ppg_overflow(uint8_t *ppg_overflow, uint8_t *overflow_num) +{ + uint8_t data = 0; + comm_read( PAH_800x_ADDR_20, &data); + if (ppg_overflow) + { + *ppg_overflow = PAH_CHECK_BIT(data, PAH_800x_ADDR_20_BIT_OVERFLOW_FLAG); + *overflow_num = (data&0x70)>>4; + } + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_read_ppg_exposure(uint16_t *ppg_exposure, uint8_t ch_num) +{ + if(ch_num == PAH_800x_CH_NUM_A) + comm_burst_read(PAH_800x_ADDR_2A, (uint8_t*)ppg_exposure, 2); + else if(ch_num == PAH_800x_CH_NUM_B) + comm_burst_read(PAH_800x_ADDR_35, (uint8_t*)ppg_exposure, 2); + else if(ch_num == PAH_800x_CH_NUM_C) + comm_burst_read(PAH_800x_ADDR_40, (uint8_t*)ppg_exposure, 2); + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_read_ppg_frame_period( uint16_t *ppg_frame_period, uint8_t ch_num) +{ + if(ch_num == PAH_800x_CH_NUM_A) + comm_burst_read(PAH_800x_ADDR_2C, (uint8_t*)ppg_frame_period, 2); + else if(ch_num == PAH_800x_CH_NUM_B) + comm_burst_read(PAH_800x_ADDR_37, (uint8_t*)ppg_frame_period, 2); + else if(ch_num == PAH_800x_CH_NUM_C) + comm_burst_read(PAH_800x_ADDR_42, (uint8_t*)ppg_frame_period, 2); + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_read_ppg_adc(uint16_t *ppg_adc, uint8_t ch_num) +{ + uint16_t data = 0; + + if(ch_num == PAH_800x_CH_NUM_A) + comm_burst_read(PAH_800x_ADDR_2E, (uint8_t*)&data, 2); + else if(ch_num == PAH_800x_CH_NUM_B) + comm_burst_read(PAH_800x_ADDR_39, (uint8_t*)&data, 2); + else if(ch_num == PAH_800x_CH_NUM_C) + comm_burst_read(PAH_800x_ADDR_44, (uint8_t*)&data, 2); + + //*ppg_adc = data >> 2; + *ppg_adc = data >> 2; + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_touch_get_touch_flag(int8_t *touch_flag) +{ + uint8_t data = 0; + uint16_t data1 = 0; +// comm_read(PAH_800x_ADDR_20, &data); + comm_burst_read(PAH_800x_ADDR_44, (uint8_t*)&data1, 2); + comm_read(PAH_800x_ADDR_20, &data); + // printf("data : %d, data1 : %d\n",data,data1); + if (touch_flag) + *touch_flag = PAH_CHECK_BIT(data, PAH_800x_ADDR_20_BIT_TOUCH_FLAG); + + return PAH_RET_SUCCESS; +} +static pah_ret pah_800x_hal_touch_get_touch_info(int8_t *touch_flag,uint16_t *touch_value) +{ + uint8_t data = 0; + uint16_t data1 = 0; +// comm_read(PAH_800x_ADDR_20, &data); + comm_burst_read(PAH_800x_ADDR_44, (uint8_t*)&data1, 2); + *touch_value =data1>>2; + comm_read(PAH_800x_ADDR_20, &data); + if (touch_flag) + *touch_flag = PAH_CHECK_BIT(data, PAH_800x_ADDR_20_BIT_TOUCH_FLAG); + + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_tg_toggle(bool enable) +{ + uint8_t data = 0; + comm_read( PAH_800x_ADDR_07_TG, &data); + if(enable) + PAH_SET_BIT(data, PAH_800x_ADDR_07_TG_BIT_EN); + else + PAH_CLEAR_BIT(data, PAH_800x_ADDR_07_TG_BIT_EN); + comm_write(PAH_800x_ADDR_07_TG, data); + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_update_flag(void) +{ + comm_write(PAH_800x_ADDR_EB, PAH_800x_ADDR_E8_UPDATE_FLAG); + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_write_sw_reset(void) +{ + comm_write(PAH_800x_ADDR_EE, PAH_800x_ADDR_EE_SW_RESET); + + return PAH_RET_SUCCESS; +} + +static pah_ret pah_800x_hal_check_enable_channel(pah_800x *state, const pah_reg_arr *reg_arr) +{ + for(int i=0;ireg_arr_len;i++) + { + if(reg_arr->reg_arr[i][0] == PAH_800x_ADDR_11_EnCh) + { + uint8_t data = reg_arr->reg_arr[i][1]; + state->ppg_state.ppg_ch_enabled[0] = PAH_CHECK_BIT(data, 0); // CH A + state->ppg_state.ppg_ch_enabled[1] = PAH_CHECK_BIT(data, 1); // CH B + state->ppg_state.ppg_ch_enabled[2] = PAH_CHECK_BIT(data, 2); // CH C + } + } + + return PAH_RET_SUCCESS; +} + + +static pah_ret pah_800x_hal_reset_gpio_state(void) +{ + uint8_t data = 0; + + comm_read(PAH_800x_ADDR_D2, &data); + PAH_SET_BIT(data, PAH_800x_ADDR_D2_OD_EnH); + comm_write(PAH_800x_ADDR_D2, data); + + return PAH_RET_SUCCESS; +} diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x.h b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x.h new file mode 100644 index 000000000..2500dc690 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x.h @@ -0,0 +1,158 @@ +#ifndef __pah_800x_h__ +#define __pah_800x_h__ + +// pah +#include "pah_unit.h" +#include "pah_800x_config.h" + + +//============================================================================ +// Definition +//============================================================================ +#define TOUCH_TRALSE_VALUE (-1) + + +//============================================================================ +// Type Definition +//============================================================================ +typedef struct +{ + uint16_t t_weight_normal_mode; + uint16_t t_weight_fast_mode; + uint16_t t_min; + uint16_t t_max; + + uint16_t raw_outer_high_bound; + uint16_t raw_inner_high_target; + uint16_t raw_inner_low_target; + uint16_t raw_outer_low_bound; + + uint16_t convergence_count; +} pah_800x_ppg_convergence; + +typedef struct +{ + uint16_t ppg_initial_exposure[PAH_800x_MAX_CH_NUM]; + + bool enable_ppg_convergence[PAH_800x_MAX_CH_NUM]; + pah_800x_ppg_convergence ppg_convergence[PAH_800x_MAX_CH_NUM]; + bool enable_ppg_reconvergence_if_out_of_bounds[PAH_800x_MAX_CH_NUM]; + +} pah_800x_config; + +typedef struct +{ + bool is_enabled; + + bool is_converging[PAH_800x_MAX_CH_NUM]; + + bool ppg_ch_enabled[PAH_800x_MAX_CH_NUM]; + uint16_t cur_converging_count[PAH_800x_MAX_CH_NUM]; +} pah_800x_ppg_state; + +typedef struct +{ + bool has_data; + uint32_t data[PAH_800x_MAX_CH_NUM]; + + + // Avaiable only if has_data is true + bool has_overflow; + + uint8_t overflow_num; + + // Avaiable only if has_data is true + uint16_t exposure_time[PAH_800x_MAX_CH_NUM]; + uint16_t adc[PAH_800x_MAX_CH_NUM]; + uint16_t frame_period[PAH_800x_MAX_CH_NUM]; + +} pah_800x_ppg_data; + +typedef struct +{ + bool is_enabled; + + int8_t touch_flag; + +} pah_800x_touch_state; + +typedef struct +{ + pah_reg_arr startup_init; + pah_reg_arr ppg_enable; + pah_reg_arr touch_enable; + +} pah_800x_reg_setting; + +typedef struct +{ + // Config + //pah_plat plat; + pah_800x_config config; + + // Power state + bool is_powered; + + // PPG state + pah_800x_ppg_state ppg_state; + pah_800x_ppg_data ppg_result; + + // TOUCH state + pah_800x_touch_state touch_state; + int8_t touch_flag; + uint16_t touch_value; + // Other + pah_800x_reg_setting reg_setting; + +} pah_800x; + + +//============================================================================ +// Public function +//============================================================================ +#ifdef __cplusplus +extern "C" { +#endif + + +// Info +uint16_t pah_800x_get_i2c_default_slave_addr(void); +void pah_800x_get_default_config(pah_800x_config *config); +pah_ret pah_800x_get_product_id( uint16_t *product_id); + +// Init +pah_ret pah_800x_init(pah_800x *state, const pah_800x_config *config); +pah_ret pah_800x_deinit(pah_800x *state); + +// Device init +pah_ret pah_800x_device_init(pah_800x *state, const pah_800x_reg_setting *reg_setting); + +// Config +//pah_ret pah_800x_set_ppg_convergence(pah_800x *state,uint8_t ch_num, const pah_800x_ppg_convergence *ppg_convergence); + +// Power +pah_ret pah_800x_power_toggle(pah_800x *state, bool enable); + +// Basic verification +pah_ret pah_800x_verify_product_id(pah_800x *state, uint16_t *product_id); + +// PPG +pah_ret pah_800x_ppg_toggle(pah_800x *state, bool enable); +pah_ret pah_800x_ppg_get_data(pah_800x *state, pah_800x_ppg_data *ppg_data); + +// TOUCH +pah_ret pah_800x_touch_toggle(pah_800x *state, bool enable); +pah_ret pah_800x_get_touch_flag(pah_800x *state, int8_t *touch_flag); +pah_ret pah_800x_get_touch_value(pah_800x *state, uint16_t *touch_value); +pah_ret pah_800x_update_touch_setting(pah_800x *state); + +// Task +pah_ret pah_800x_task(pah_800x *state); + + + +#ifdef __cplusplus +} +#endif + +#endif // header guard diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x_config.h b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x_config.h new file mode 100644 index 000000000..0e3d8530f --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_800x_config.h @@ -0,0 +1,163 @@ +#ifndef __pah_800x_config_h__ +#define __pah_800x_config_h__ + +// pah +#include "pah800x_bsp.h" +#include "debug_print.h" + +/* + * Select LED Supplier + * If Use new Supplier LED , Need to define LED_SUPPLIER_NEW +*/ +//#define LED_SUPPLIER_NEW + + +/* + * Select Cover Type +*/ +#define DI_WALL_4mm +//#define PC_4mm + +/* + * Select HW and ALG configuration + * PC_4MM_2G_IR_HRD : Printing Cover with 4mm 2 Green and 1 IR LED for HRD algorithm use (PAH8009ES) + * DIW_4MM_G_IR_HRD : DI+Wall Cover with 4mm 1 Green and 1 IR LED for HRD algorithm use (PAH8009ES) + * DIW_4MM_IR_R_IR_SPO2 : DI+Wall Cover with 4mm 1 IR LED and 1 RED for SpO2 algorithm use (PAH8009ES) + * This definition will enable the PPG register setting corresponding to different HW and ALG configuration + */ + +#define PC_4MM_2G_IR_HRD 1 +#define DIW_4MM_G_IR_HRD 1 +#define DIW_4MM_IR_R_IR_SPO2 1 + +//#endif + +//============================================================================ +// Debug Option +//============================================================================ +#define ENABLE_AE 1 +#define ENABLE_AE_RECONVERGENCE 1 + + +// #define PAH_800x_ENABLE_DEBUG_PRINT +// #define PAH_800x_ENABLE_LOG_PRINT + +#ifdef PAH_800x_ENABLE_LOG_PRINT +#define LOG_PRINT(fmt, ...) \ + do { \ + PRINT(fmt" ", ##__VA_ARGS__); \ + } while (0) +#else +#define LOG_PRINT(...) do {} while (0) +#endif +#ifdef PAH_800x_ENABLE_DEBUG_PRINT +#define DEBUG_PRINT(fmt, ...) \ + do { \ + PRINT(fmt" ", ##__VA_ARGS__); \ + } while (0) +#else +#define DEBUG_PRINT(...) do {} while (0) +#endif + +/* + * Select Interrupt or Polling Mode + * This definition will enable the corresponding demo functionin main.c + * If select INT mode, then slect following INT configuration type + */ +#define INTERRUPT_MODE 1 +#define POLLING_MODE 0 +#define Test_pattern_mode 0 + +/* + * Select INT HW configuration type + * INT_OD_EXTERNAL_PULLH : INT open-drain type with external pull-high resistor + * INT_OD_INTERNAL_PULLH : INT open-drain type with internal pull-high resistor + * INT_PUP_WITHOUT_PULLH : INT push-pull type without any pull-high resistor + * If user select POLLING_MODE, all define need to set 0 + * This definition will enable the GPIO register setting corresponding to different INT HW configuration + */ +#define INT_OD_EXTERNAL_PULLH 1 +#define INT_OD_INTERNAL_PULLH 0 +#define INT_PUP_WITHOUT_PULLH 0 + + +/* +* Configure VBUS Type + * Define VBUS_18V=1, compatible with VBUS=1.8V or 3.3V (default) + * Define VBUS_18V=0, only support VBUS=3.3V + * If user want to define VBUS_18V=0, or VBUS not 1.8V/3.3V, please contact with PixArt for evaluation + */ +#define VBUS_18V 1 +#if (VBUS_18V) + #define R_GPIO_0_OD_EnH (0x20) + #define R_GPIO_SLEW (0x01) + #define R_I2C_SLEW (0x40) + #define R_SCL_Sel (0x00) + #define R_SDA_Sel (0x00) +#else + #define R_GPIO_0_OD_EnH (0x20) + #define R_GPIO_SLEW 0 + #define R_I2C_SLEW 0 + #define R_SCL_Sel (0x40) + #define R_SDA_Sel (0x04) +#endif + +#define Time_Interval 400 +/* +If Customer platform use G-Sensor with FIFO,they can refer this flow to run pxi alg to get alg output +*/ +//#define PPG_MEMS_Synchronize +#define Optimize_SPO2_flow + +//****** Demo 800X mode Select ******// +//============HRD-INT================// +//#define touch_only_hrd_en +//#define ppg_only_hrd_en +#define auto_hrd_en + +//============HRD-Polling================// +//#define touch_only_polling_hrd_en +//#define ppg_only_polling_hrd_en +//#define auto_polling_hrd_en + + +//============SPO2-INT================// +//#define touch_only_spo2_en +//#define ppg_only_spo2_en +//#define auto_spo2_en + +//============SPO2-Polling================// +//#define touch_only_polling_spo2_en +//#define ppg_only_polling_spo2_en +//#define auto_polling_spo2_en + + +//============Stress-INT================// +//#define touch_only_stress_en +//#define ppg_only_stress_en +//#define auto_stress_en + +//============Stress-Polling================// +//#define touch_only_polling_stress_en +//#define ppg_only_polling_stress_en +//#define auto_polling_stress_en + +//=========== Test_pattern======== // +//#define hrd_testpattern_en +//#define spo2_testpattern_en + +//=========== Factory _Test=========// +//#define factory_test_en + + +//============HRD-INT====PC Cover============// +//#define touch_only_hrd_en_pc +//#define ppg_only_hrd_en_pc +//#define auto_hrd_en_pc + +//============HRD-Polling======PC Cover==========// +//#define touch_only_polling_hrd_en_pc +//#define ppg_only_polling_hrd_en_pc +//#define auto_polling_hrd_en_pc + +#endif // header guard diff --git a/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_unit.h b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_unit.h new file mode 100644 index 000000000..64a1a7e67 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/pah8009/sensor/pah_unit.h @@ -0,0 +1,340 @@ +#ifndef __pah_unit_h__ +#define __pah_unit_h__ + +// c +#include +#include +#include +#include +#include +#include + + +//============================================================================ +// Default +//============================================================================ +#define PAH_800x_DEFAULT_PPG_INITIAL_EXPOSURE (400) + +#define PAH_800x_DEFAULT_ENABLE_PPG_CONVERGENCE true + + +#define PAH_800x_DEFAULT_PPG_CONVERGENCE_COUNT (0) +#define PAH_800x_DEFAULT_PPG_CONVERGENCE_T_WEIGHT_NORMAL_MODE (8) +#define PAH_800x_DEFAULT_PPG_CONVERGENCE_T_WEIGHT_FAST_MODE (16) +#define PAH_800x_DEFAULT_PPG_CONVERGENCE_T_MIN (10) +#define PAH_800x_DEFAULT_PPG_CONVERGENCE_T_MAX (1792) +#define PAH_800x_DEFAULT_PPG_CONVERGENCE_RAW_OUTER_HIGH_BOUND (12288) +#define PAH_800x_DEFAULT_PPG_CONVERGENCE_RAW_INNER_HIGH_TARGET (10240) +#define PAH_800x_DEFAULT_PPG_CONVERGENCE_RAW_INNER_LOW_TARGET (8192) +#define PAH_800x_DEFAULT_PPG_CONVERGENCE_RAW_OUTER_LOW_BOUND (6144) + +#define PAH_800x_DEFAULT_ENABLE_PPG_RECONVERGENCE_IF_OUT_OF_BOUNDS true + + +//============================================================================ +// Definition +//============================================================================ + +// I2C 7-bit ID +#define PAH_800x_DEFAULT_I2C_SLAVE_ID_1 (0x40) +#define PAH_800x_DEFAULT_I2C_SLAVE_ID_2 (0x10) + +#define PAH_800x_PRODUCT_ID (0x8008) + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pah_ret.h + * + * Copyright (c) 2016-2018 PixArt Imaging Inc. + * All Rights Reserved. + * Confidential and Proprietary - PixArt Imaging Inc. + **/ + +typedef enum { + + PAH_RET_SUCCESS = 0, // Success + + PAH_RET_PENDING, + + PAH_RET_FAILED, // Unknown error, generally there exists bug in this driver + + PAH_RET_PLAT_FAILED, // Platform API failed + PAH_RET_VERIFY_FAILED, // Verify device failed + + PAH_RET_NOT_IMPLEMENTED, // This API is not supported or is not implemented + + PAH_RET_INVALID_ARGUMENT, // Invalid argument to API + PAH_RET_INVALID_OPERATION, // This operation is not available at this time + + PAH_RET_FIFO_CKS_FAILED, // Failed to compare check sum with fifo data + PAH_RET_FIFO_OVERFLOW, // Fifo in device is overflow + + PAH_RET_ASYNC_PENDING, + +} pah_ret; + +typedef enum { + PAH_800x_CH_NUM_A = 0, + PAH_800x_CH_NUM_B, + PAH_800x_CH_NUM_C, + PAH_800x_MAX_CH_NUM, +} pah_800x_ch_num; + +#define PAH_SUCCEEDED(ret) (ret == PAH_RET_SUCCESS) +#define PAH_FAILED(ret) (!PAH_SUCCEEDED(ret)) + + +#define PAH_CHECK_RET(ret) \ + if (PAH_FAILED(ret)) { \ + return ret; \ + } + +#define PAH_CHECK_NULL(p) \ + if (!p) { \ + return PAH_RET_INVALID_ARGUMENT; \ + } + + + +/** + * @file pah_plat.h + * + * Copyright (c) 2016-2018 PixArt Imaging Inc. + * All Rights Reserved. + * Confidential and Proprietary - PixArt Imaging Inc. + **/ + + + + +//============================================================================ +// Definition +//============================================================================ + +//============================================================================ +// Macro +//============================================================================ +#ifndef __FILENAME__ +# define __FILENAME__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +/** + * @file pah_util.h + * + * Copyright (c) 2016-2018 PixArt Imaging Inc. + * All Rights Reserved. + * Confidential and Proprietary - PixArt Imaging Inc. + **/ + + + +#define PAH_ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) + +#define PAH_SET_BIT(var,pos) do { ((var) |= (1 << (pos))); } while(0) +#define PAH_CLEAR_BIT(var,pos) do { ((var) &= ~(1 << (pos))); } while(0) +#define PAH_CHECK_BIT(var,pos) (((var) >> (pos)) & 1) + +// +// PAH_SET_BITSLICE +// +// ex1: +// // var = 0x00 : 00000000 +// // pos = 2 : ^ +// // mask = 0x3C : 00111100 +// // value = 0x0D : 1101 +// // ret = 0x34 : 00110100 +// uint8_t data = 0x00; +// uint8_t ret = PAH_SET_BITSLICE(data, 2, 0x3C, 0x0D); +// +// ex2: +// // var = 0x6D : 01101101 +// // pos = 6 : ^ +// // mask = 0xC0 : 11000000 +// // value = 0x02 : 10 +// // ret = 0xAD : 10101101 +// uint8_t data = 0x6D; +// uint8_t ret = PAH_SET_BITSLICE(data, 6, 0xC0, 0x02); +// +#define PAH_SET_BITSLICE(var, pos, mask, value) \ + ((var & ~mask) | ((value << pos) & mask)) + +// +// PAH_GET_BITSLICE +// +// ex1: +// // var = 0x5D : 01011101 +// // pos = 2 : ^ +// // mask = 0x3C : 00111100 +// // ret = 0x07 : 0111 +// uint8_t ret = PAH_GET_BITSLICE(0x5D, 2, 0x3C); +// +// ex2: +// // var = 0xA6 : 10100110 +// // pos = 5 : ^ +// // mask = 0xE0 : 11100000 +// // ret = 0x05 : 101 +// uint8_t ret = PAH_GET_BITSLICE(0xA6, 5, 0xE0); +// +#define PAH_GET_BITSLICE(var, pos, mask) \ + ((var & mask) >> pos) + +#define PAH_UINT64_HIGH(var) ((uint32_t)(var >> 32)) +#define PAH_UINT64_LOW(var) ((uint32_t)(var & UINT32_MAX)) + +#define PAH_UINT16_HIGH(var) ((uint8_t)(var >> 8)) +#define PAH_UINT16_LOW(var) ((uint8_t)(var & UINT8_MAX)) + +#define PAH_UNUSED_VAR(var) (void)(var) +#define UNUSED_VAR(var) (void)(var) + +#ifndef __FILENAME__ +# define __FILENAME__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/** + * @file pah_reg.h + * + * Copyright (c) 2016-2018 PixArt Imaging Inc. + * All Rights Reserved. + * Confidential and Proprietary - PixArt Imaging Inc. + **/ + + + + +//============================================================================ +// Definition +//============================================================================ +typedef const uint8_t (pah_reg)[2]; + + +typedef struct { + + pah_reg *reg_arr; + uint32_t reg_arr_len; + +} pah_reg_arr; + + +#define PAH_REG_ARR_SETUP(pah_reg_arr, reg_array) \ + do { \ + pah_reg_arr.reg_arr = (pah_reg*)reg_array; \ + pah_reg_arr.reg_arr_len = PAH_ARRAY_SIZE(reg_array); \ + } while(0) + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//============================================================================ +// Register address +//============================================================================ + +/*#define PAH_800x_ADDR_00_PRODUCT_ID (0x00) +#define PAH_800x_ADDR_03 (0x03) +#define PAH_800x_ADDR_03_BIT_R_PS_EN (0) +#define PAH_800x_ADDR_03_BIT_R_ALS_EN (1) +#define PAH_800x_ADDR_03_BIT_SW_SUSPEND (5) + +#define PAH_800x_ADDR_04 (0x04) +#define PAH_800x_ADDR_04_BIT_ALS_OVERFLOW_ECO (7) + +#define PAH_800x_ADDR_09 (0x09) +#define PAH_800x_ADDR_09_BIT_ALS_INTERRUPT (2) +#define PAH_800x_ADDR_09_BIT_PS_INTERRUPT (5) +#define PAH_800x_ADDR_09_BIT_PS_APPROACH (6) + +#define PAH_800x_ADDR_10_PS_ONOFF_SYNC (0x10) + +#define PAH_800x_ADDR_11 (0x11) +#define PAH_800x_ADDR_11_BIT_R_LED_CONTROL_OUT_EN (4) +#define PAH_800x_ADDR_11_BIT_R_PS_INTERRUPT_EN (7) + +#define PAH_800x_ADDR_0E_ALS_LUX_SYNC (0x0E) + +#define PAH_800x_ADDR_34 (0x34) +#define PAH_800x_ADDR_34_BIT_R_EXPOSURE_ALS_F0 (0) + +#define PAH_800x_ADDR_35 (0x35) +#define PAH_800x_ADDR_35_BIT_R_EXPOSURE_ALS_F0 (0) + +#define PAH_800x_ADDR_38 (0x38) +#define PAH_800x_ADDR_38_BIT_0_LOCK_EXPOTIME (0) +#define PAH_800x_ADDR_38_BIT_1_CLEAR_ALS_OVERFLOW_ECO (1) + +#define PAH_800x_ADDR_EC (0xEC) +#define PAH_800x_ADDR_EC_BIT_7_R_CLK_MANUAL (7)*/ + +#define PAH_800x_ADDR_00_PRODUCT_ID (0x00) + +#define PAH_800x_ADDR_07_TG (0X07) +#define PAH_800x_ADDR_07_TG_BIT_EN (0) + +#define PAH_800x_ADDR_20 (0x20) +#define PAH_800x_ADDR_20_BIT_DR_FLAG (0) +#define PAH_800x_ADDR_20_BIT_OVERFLOW_FLAG (1) +#define PAH_800x_ADDR_20_BIT_TOUCH_FLAG (2) + +//expo A Sync +#define PAH_800x_ADDR_2A (0x2A) +#define PAH_800x_ADDR_2B (0x2B) + +#define PAH_800x_ADDR_35 (0x35) +#define PAH_800x_ADDR_36 (0x36) + +#define PAH_800x_ADDR_40 (0x40) +#define PAH_800x_ADDR_41 (0x41) + +#define PAH_800x_ADDR_11_EnCh (0x11) + +//expo A write +#define PAH_800x_ADDR_17 (0x17) +#define PAH_800x_ADDR_18 (0x18) + +#define PAH_800x_ADDR_19 (0x19) +#define PAH_800x_ADDR_1A (0x1A) + +#define PAH_800x_ADDR_1B (0x1B) +#define PAH_800x_ADDR_1C (0x1C) + +//frame period + +#define PAH_800x_ADDR_2C (0x2C) +#define PAH_800x_ADDR_2D (0x2D) + +#define PAH_800x_ADDR_37 (0x37) +#define PAH_800x_ADDR_38 (0x38) + +#define PAH_800x_ADDR_42 (0x42) +#define PAH_800x_ADDR_43 (0x43) + +//adc + +#define PAH_800x_ADDR_2E (0x2E) +#define PAH_800x_ADDR_2F (0x2F) + +#define PAH_800x_ADDR_39 (0x39) +#define PAH_800x_ADDR_3A (0x3A) + +#define PAH_800x_ADDR_44 (0x44) +#define PAH_800x_ADDR_45 (0x45) + +#define PAH_800x_ADDR_27_RAWDATA_A_SYNC (0x27) +#define PAH_800x_ADDR_32_RAWDATA_B_SYNC (0x32) +#define PAH_800x_ADDR_3D_RAWDATA_C_SYNC (0x3D) + +#define PAH_800x_ADDR_E8 (0xE8) +#define PAH_800x_ADDR_E8_CMD_SUSPEND_MODE_BIT (0) + +#define PAH_800x_ADDR_EB (0xEB) +#define PAH_800x_ADDR_E8_UPDATE_FLAG (0x80) + +#define PAH_800x_ADDR_EE (0xEE) +#define PAH_800x_ADDR_EE_SW_RESET (0x1F)//(0x07) +#define PAH_800x_ADDR_D2 (0xD2) +#define PAH_800x_ADDR_D2_OD_EnH (5) + +#endif // header guard diff --git a/code/sdk/zhihui/drivers/ppg/ppgBleService/CMakeLists.txt b/code/sdk/zhihui/drivers/ppg/ppgBleService/CMakeLists.txt index a1f51df1b..7bb540ac6 100644 --- a/code/sdk/zhihui/drivers/ppg/ppgBleService/CMakeLists.txt +++ b/code/sdk/zhihui/drivers/ppg/ppgBleService/CMakeLists.txt @@ -37,7 +37,7 @@ set(MAIN_COMPONENT ) set(PUBLIC_DEFINES - +SUPPORT_PPG_BLE_SERVICE ) set(PRIVATE_DEFINES diff --git a/code/sdk/zhihui/drivers/ppg/service/CMakeLists.txt b/code/sdk/zhihui/drivers/ppg/service/CMakeLists.txt index 8315e769d..3fa48fd43 100644 --- a/code/sdk/zhihui/drivers/ppg/service/CMakeLists.txt +++ b/code/sdk/zhihui/drivers/ppg/service/CMakeLists.txt @@ -9,14 +9,12 @@ set(PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR} ) set(PRIVATE_HEADER - ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits - ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits - ${ROOT_DIR}/application/wearable/nativeapp/nativeui/heartrate/include ) set(SOURCES -${CMAKE_CURRENT_SOURCE_DIR}/ppg_at_cmd.cpp -${CMAKE_CURRENT_SOURCE_DIR}/ppg_service.cpp +${CMAKE_CURRENT_SOURCE_DIR}/ppg_at_cmd.c +${CMAKE_CURRENT_SOURCE_DIR}/ppg_service.c +${CMAKE_CURRENT_SOURCE_DIR}/ppg_hal.c ) @@ -24,20 +22,8 @@ set(COMPONENT_PUBLIC_CCFLAGS ) set(COMPONENT_CCFLAGS - -std=c++11 - -Wno-error - -Wno-unused-parameter - -fno-exceptions - -fno-unwind-tables - -fno-asynchronous-unwind-tables - -Wno-undef - -Wno-bitwise-op-parentheses - -Wno-shift-op-parentheses - -nostdlibinc - -nostdinc - -nostdlib - -Wno-c++11-narrowing - -Wno-error=unused-function +-Wno-incompatible-function-pointer-types +-Wno-unused-function ) set(WHOLE_LINK diff --git a/code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.cpp b/code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.c similarity index 97% rename from code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.cpp rename to code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.c index de8421c1e..3ba0f2dee 100644 --- a/code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.cpp +++ b/code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.c @@ -86,8 +86,11 @@ static uint32_t ppg_do_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd) md = PPG_SERVICE_CMD_TYPE_FPC_TEST; } else if (strcmp(mode, "factory") == 0) { md = PPG_SERVICE_CMD_TYPE_FACTORY_TEST; + } else if (strcmp(mode, "wear") == 0) { + md = PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_TEST; } + if(enabled == 0 ) { if (md == PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST) diff --git a/code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.h b/code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.h index a2906e2dc..876828dea 100644 --- a/code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.h +++ b/code/sdk/zhihui/drivers/ppg/service/ppg_at_cmd.h @@ -6,8 +6,8 @@ * History: \n * 2022-07-20, Create file. \n */ -#ifndef HX3695_AT_PROCESS_H -#define HX3695_AT_PROCESS_H +#ifndef PPG_AT_PROCESS_H +#define PPG_AT_PROCESS_H #include #include diff --git a/code/sdk/zhihui/drivers/ppg/service/ppg_hal.c b/code/sdk/zhihui/drivers/ppg/service/ppg_hal.c new file mode 100644 index 000000000..0d767607c --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/service/ppg_hal.c @@ -0,0 +1,168 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-03-13 15:08:38 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2025-06-04 09:50:09 + * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + */ + +#include +#include +#include +#include +#include +#include "ppg_hal.h" +#include "pinctrl_porting.h" +#include "hal_gpio.h" +#include "pm_control.h" + + +#include "custom_utils.h" + + +#ifdef PPG_HX3695 +#include "tyhx_hrs_custom.h" +#include "hx3695.h" +#endif + +#ifdef PPG_PAH8009 +#include "pah800x_main.h" +#endif + +#ifdef SUPPORT_CYWEE_SERVICE +#include "cywee_service.h" +#endif + + +// S_AGPIO_L26 心率复位 PPG reset +#define GPIO_PIN_PRG_RESET S_AGPIO_L26 +// S_AGPIO_R0 PRG_LED_POWER ON 心率等电源控制脚 +#define GPIO_PIN_PRG_LED_ON S_AGPIO_R0 + +void ppg_power_on(void) +{ + // printf("ppg_power_on\n"); + uapi_pin_set_mode(GPIO_PIN_PRG_RESET, (pin_mode_t)HAL_PIO_FUNC_GPIO); + uapi_gpio_set_dir(GPIO_PIN_PRG_RESET, GPIO_DIRECTION_OUTPUT); + uapi_gpio_set_val(GPIO_PIN_PRG_RESET, GPIO_LEVEL_HIGH); + + uapi_pin_set_mode(GPIO_PIN_PRG_LED_ON, (pin_mode_t)HAL_PIO_FUNC_GPIO); + uapi_gpio_set_dir(GPIO_PIN_PRG_LED_ON, GPIO_DIRECTION_OUTPUT); + uapi_gpio_set_val(GPIO_PIN_PRG_LED_ON, GPIO_LEVEL_HIGH); + LOS_Mdelay(50); +} + +void ppg_power_off(void) +{ + // printf("ppg_power_off\n"); + uapi_pin_set_mode(GPIO_PIN_PRG_RESET, (pin_mode_t)HAL_PIO_FUNC_GPIO); + uapi_gpio_set_dir(GPIO_PIN_PRG_RESET, GPIO_DIRECTION_OUTPUT); + uapi_gpio_set_val(GPIO_PIN_PRG_RESET, GPIO_LEVEL_LOW); + + uapi_pin_set_mode(GPIO_PIN_PRG_LED_ON, (pin_mode_t)HAL_PIO_FUNC_GPIO); + uapi_gpio_set_dir(GPIO_PIN_PRG_LED_ON, GPIO_DIRECTION_OUTPUT); + uapi_gpio_set_val(GPIO_PIN_PRG_LED_ON, GPIO_LEVEL_LOW); + LOS_Mdelay(50); +} + +uint8_t ppg_get_hrs(void) +{ + uint8_t hrs = 0; +#ifdef PPG_HX3695 + hrs = hx3695_get_hrs(); + // printf("ppg_get_hrs : %d\n",hrs); +#endif + return hrs; +} + +uint8_t ppg_get_spo2(void) +{ + uint8_t spo2 = 0; +#ifdef PPG_HX3695 + spo2 = hx3695_get_spo2(); +#endif + return spo2; +} + +uint8_t ppg_get_wear_status(void) +{ + uint8_t wear_status = 0; +#ifdef PPG_HX3695 + wear_status = hx3695_get_wear_status(); +#endif + return wear_status; +} + +uint16_t ppg_get_chip_id(void) +{ + uint16_t chip_id = 0; +#ifdef PPG_HX3695 + chip_id = hx3695_chip_check(); +#elif defined PPG_PAH8009 + chip_id = pah8009_get_chip_id(); +#endif + return chip_id; +} + +void ppg_timer_handler(uint8_t mode) +{ + // printf("ppg_agc_timer_handler\n"); +#ifdef PPG_HX3695 + if(mode == AGC_TIMER_MODE) + agc_timeout_handler(NULL); + else if(mode == HRS_TIMER_MODE) + heart_rate_meas_timeout_handler(NULL); + else if(mode == WEAR_TIMER_MODE) + wear_mode_timeout_handler(NULL); +#elif defined PPG_PAH8009 + pah8009_timer_handler(); +#endif +} + + +void ppg_int_handler(void) +{ +#ifdef PPG_PAH8009 + pah8009_int_handler(); +#endif +} + +void ppg_send_cmd_to_driver(char* mode, uint8_t enable) +{ + // printf("ppg_send_cmd_to_driver \n"); + if(enable) + ppg_power_on(); +#ifdef PPG_HX3695 + hx3695_control(mode,enable); +#elif defined PPG_PAH8009 + pah8009_control(mode,enable); +#endif + if(!enable) + ppg_power_off(); +} + +void ppg_get_leaklight_data(uint32_t *ch0,uint32_t *ch1,uint32_t *ch2) +{ +#ifdef PPG_HX3695 + FT_RESULTS_t ft_result = hx3695_factroy_test(LEAK_LIGHT_TEST); + *ch0 = ft_result.gr_data_final; + *ch1 = ft_result.red_data_final; + *ch2 = ft_result.ir_data_final; +#elif defined PPG_VC9202 + vc9202_get_leaklight_data(ch0,ch1,ch2); +#elif defined PPG_PAH8009 + pah8009_get_leaklight_data(ch0,ch1,ch2); +#endif +} + +uint32_t ppg_get_factory_data(void) +{ + uint32_t data = 0; +#ifdef PPG_PAH8009 + data = pah8009_get_factory_data(); +#endif + return data; +} \ No newline at end of file diff --git a/code/sdk/zhihui/drivers/ppg/service/ppg_hal.h b/code/sdk/zhihui/drivers/ppg/service/ppg_hal.h new file mode 100644 index 000000000..35f5431e4 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/service/ppg_hal.h @@ -0,0 +1,55 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-06-07 11:18:26 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2025-05-30 15:49:50 + * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.h + * @Description: + * + * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. + */ +#ifndef PPG_HAL_H__ +#define PPG_HAL_H__ +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif /* __cplusplus */ +#endif /* __cplusplus */ + +#include "stdint.h" +#include "tyhx_hrs_custom.h" + +#define AGC_TIMER_MODE 0 +#define HRS_TIMER_MODE 1 +#define WEAR_TIMER_MODE 2 + +#ifdef PPG_HX3695 +#define PPG_CHIP_ID 0x65 +#elif defined PPG_PAH8009 +#define PPG_CHIP_ID 0x8008 +#else +#define PPG_CHIP_ID 0 +#endif + +typedef uint32_t PPG_CMD_TYPE_T ; + +void ppg_send_cmd_to_driver(char* mode, uint8_t enable); +void ppg_timer_handler(uint8_t mode); +uint16_t ppg_get_chip_id(void); +uint8_t ppg_get_hrs(void); +uint8_t ppg_get_spo2(void); +uint8_t ppg_get_wear_status(void); +void ppg_wear_status_update(uint8_t status); +void ppg_power_on(void); +void ppg_power_off(void); +void ppg_int_handler(void); +void ppg_get_leaklight_data(uint32_t *ch0,uint32_t *ch1,uint32_t *ch2); +uint32_t ppg_get_factory_data(void); + +#ifdef __cplusplus +#if __cplusplus +} +#endif /* __cplusplus */ +#endif /* __cplusplus */ + +#endif \ No newline at end of file diff --git a/code/sdk/zhihui/drivers/ppg/service/ppg_service.c b/code/sdk/zhihui/drivers/ppg/service/ppg_service.c new file mode 100644 index 000000000..3fa8f5b16 --- /dev/null +++ b/code/sdk/zhihui/drivers/ppg/service/ppg_service.c @@ -0,0 +1,343 @@ + +#include "pinctrl.h" +#include "debug_print.h" +#include "soc_osal.h" +#include "tcxo.h" +#include "irmalloc.h" +#include "errcode.h" +#include "common_def.h" +#include "chip_core_irq.h" +#include "chip_io.h" +#include "gpio.h" +#include "pm_veto.h" +#include "rtc.h" +#include "timer.h" +#include "systick.h" +#include "cmsis_os2.h" +#include "ppg_service.h" +#include "los_printf.h" +#include "thread_init.h" +#include "custom_utils.h" +#include "custom_save_runtime.h" +#include "ppg_hal.h" + +#ifdef PPG_HX3695 +#include "hx3695.h" +#endif + +#if defined(PPG_VC9202) +#include "vc9202_hal.h" +#include "vc9202_user.h" +#elif defined(PPG_VC921X) +#include "vc921x_hal.h" +#include "vc921x_user_app.h" +#elif defined(PPG_GH3X2X) +#include "gh3x2x_hal.h" +#include "gh3x2x_afe_drv.h" +#else +#endif + +static bool g_ppg_service_initialled = false; + +uint8_t card_databuf[64] = {0}; +uint8_t light_databuf[64] = {0}; + +osTimerId_t g_ppg_service_timer = NULL; + + +/*** + * 其他cmd在Header里定义,对外开放 +*/ + + +#define PPG_SERVICE_MSG_COUNT 16 +#define PPG_SERVICE_TASK_SIZE 0x1000 +#define PPG_SERVICE_TASK_PRIO 5 + +#define MAG_CHECK_MS 20 +static unsigned long g_app_queue= 0xFFFFFFFF; + +static bool ppg_service_running_stat = false; +static bool ppg_sensor_exist = false; + +static uint8_t wear_mode_state = 0; +static uint8_t keep_in_wear_det_mod = 1; //持续坚持 佩戴检测模式 + + +void set_keep_in_wear_det_mode(uint8_t mod) +{ + keep_in_wear_det_mod = mod; +} + + +void uapi_ppg_service_deinit(void) +{ + ppg_service_running_stat = false; +} + +uint32_t ppg_suspend(void) +{ + return custom_i2c_suspend(); +} +uint32_t ppg_resume(void) +{ + return custom_i2c_resume(); +} + + +errcode_t send_ppg_cmd_msg(int cmd) +{ + errcode_t ret; + if (ppg_sensor_exist == false) + return OSAL_FAILURE; + + // printf("send_ppg_cmd_msg cmd : 0x%x\n",cmd); + + PPG_CMD_TYPE_T mail = 0; + mail = cmd; + ret = osal_msg_queue_write_copy(g_app_queue, (void *)&mail, + sizeof(PPG_CMD_TYPE_T), 0); + if (ret != OSAL_SUCCESS) { + PRINT("Error ppg Check MSG 0x%02X send failed! err=0x%x! \r\n",cmd, ret); + } + return ret; +} + +static void ppg_service_check_task(void *arg) +{ + unused(arg); + int32_t ret; + uint32_t mail; + uint32_t msgsize = (uint32_t)sizeof(PPG_CMD_TYPE_T); + + while (1) { + ret = osal_msg_queue_read_copy(g_app_queue, (void *)&mail, &msgsize, + OSAL_MSGQ_WAIT_FOREVER); + if (ret != OSAL_SUCCESS) { + continue; + } + if((wear_mode_state == 1) && (mail > 0x10) && mail != PPG_SERVICE_CMD_TYPE_STOP_WEAR_MODE_TEST) + { +#ifdef PPG_HX3695 + // uapi_save_runtime_log(RUNTIME_LOG_WEAR_MIN_STOP); + wear_mode_state = 0; + + ppg_send_cmd_to_driver("wear",0); + ppg_service_running_stat = false; +#endif + } + char* cmd = "hrs"; + int enable = 1; + if (mail == PPG_SERVICE_CMD_TYPE_DO_PPG_HRS_TIMER_CALLBACK){ +// #ifdef PPG_HX3695 +// heart_rate_meas_timeout_handler(NULL); +// #endif + // ppg_hrs_timer_handler(); + ppg_timer_handler(HRS_TIMER_MODE); + continue; + }else if (mail == PPG_SERVICE_CMD_TYPE_DO_PPG_AGC_TIMER_CALLBACK){ +// #ifdef PPG_HX3695 +// agc_timeout_handler(NULL); +// #endif + ppg_timer_handler(AGC_TIMER_MODE); + continue; + }else if(mail == PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_TIMER_CALLBACK){ +// #ifdef PPG_HX3695 +// wear_mode_timeout_handler(NULL); +// #endif + // ppg_wear_timer_handler(); + ppg_timer_handler(WEAR_TIMER_MODE); + continue; + }else if (mail == PPG_SERVICE_CMD_TYPE_DO_PPG_TEST){ + //do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OPEN_GET_ACC,NULL); + // uapi_save_runtime_log(RUNTIME_LOG_HEART_DRIVER_MEASURE); + cmd = "hrs"; + enable = 1; + // uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART); + // if (cnt == 0) + // { + // uapi_pm_add_sleep_veto(PM_ID_HEART); + // } + + }else if (mail == PPG_SERVICE_CMD_TYPE_DO_HRV_TEST){ + cmd = "hrv"; + enable = 1; + }else if (mail == PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST){ + cmd = "spo2"; + enable = 1; + }else if (mail == PPG_SERVICE_CMD_TYPE_DO_LEAKLIGHT_TEST){ + cmd = "leaklight"; + enable = 1; + }else if (mail == PPG_SERVICE_CMD_TYPE_DO_GRAYCARD_TEST){ + cmd = "graycard"; + enable = 1; + }else if (mail == PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_TEST){ + if (keep_in_wear_det_mod == 0) continue;; + // uapi_save_runtime_log(RUNTIME_LOG_WEAR_MIN_START); + cmd = "wear"; + enable = 1; + wear_mode_state = 1; + }else if (mail == PPG_SERVICE_CMD_TYPE_DO_LED_OFF_MODE_TEST){ + cmd = "ledoff"; + enable = 0; + }else if (mail == PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST){ + cmd = "single"; + enable = 1; + }else if (mail == PPG_SERVICE_CMD_TYPE_STOP_WEAR_MODE_TEST){ + if (keep_in_wear_det_mod == 0) continue; + cmd = "wear"; + enable = 0; + wear_mode_state = 0; + }else if (mail == PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST){ + // uapi_save_runtime_log(RUNTIME_LOG_HEART_DRIVER_MEASURE_END); + cmd = "hrs"; + enable = 0; + // uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART); + // if (cnt == 1) + // { + // uapi_pm_remove_sleep_veto(PM_ID_HEART); + // } + }else if (mail == PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST){ + + cmd = "spo2"; + enable = 0; + } + else if (mail == PPG_SERVICE_CMD_TYPE_OPEN_HRS_BLE) + { +#ifdef PPG_HX3695 + // hx3695_set_hrs_ble_swtich(1); +#endif + continue ; + } + else if (mail == PPG_SERVICE_CMD_TYPE_CLOSE_HRS_BLE) + { +#ifdef PPG_HX3695 + // hx3695_set_hrs_ble_swtich(0); +#endif + continue ; + }else if (mail == PPG_SERVICE_CMD_TYPE_INT_HANDLER){ +// #ifdef PPG_VC9202 +// vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,0); +// #elif defined PPG_VC921X +// cmd = "int"; +// enable = 1; +// ppg_send_cmd_to_vc921x_driver(cmd,enable); +// #elif defined PPG_GH3X2X +// hal_gh3x2x_afe_int_handler_call_back(); +// GH3X2X_AFE_ChipPro(); +// #elif defined PPG_PAH8009 +// hal_gh3x2x_afe_int_handler_call_back(); +// GH3X2X_AFE_ChipPro(); +// #endif + ppg_int_handler(); + continue; + } + else if (mail == PPG_SERVICE_CMD_TYPE_FPC_TEST){ +#ifdef PPG_VC9202 + cmd = "fpc"; + enable = 1; +#endif + } + else if (mail == PPG_SERVICE_CMD_TYPE_FACTORY_TEST){ +#ifdef PPG_VC9202 + cmd = "factory"; + enable = 1; +#endif + } + if (ppg_service_running_stat == true && enable ==1 ) + { + PRINT_ERR("ppg service already started! \r\n"); + continue ; + }else if ( ppg_service_running_stat == false && enable == 0 ) + { + PRINT_ERR("ppg service already stopped! \r\n"); + continue ; + } + + ppg_send_cmd_to_driver(cmd,enable); + + if(enable == 1) + ppg_service_running_stat = true; + else + ppg_service_running_stat = false; + +#ifdef PPG_HX3695 + if((strcmp(cmd, "wear") != 0) && (enable == 0)) + { + if (keep_in_wear_det_mod == 1) + { + uapi_save_runtime_log(RUNTIME_LOG_WEAR_MIN_START); + ppg_send_cmd_to_driver("wear",1); + wear_mode_state = 1; + ppg_service_running_stat = true; + } + } +#endif + + } + +} +void create_ppg_queue(void) +{ + if (osal_msg_queue_create("ppg_service_queue", PPG_SERVICE_MSG_COUNT, &g_app_queue, + 0, sizeof(PPG_CMD_TYPE_T)) != ERRCODE_SUCC) { + PRINT_ERR("[ppg][service] app create mail fail\n"); + } +} +errcode_t uapi_ppg_service_init(void) +{ + PRINT("uapi_ppg_service_init !\r\n"); + + ppg_power_on(); + + if (ppg_get_chip_id() != PPG_CHIP_ID) + { + //TODO 没找到3695,退出线程 + PRINT("ppg not exist!\r\n"); + ppg_power_off(); + return ERRCODE_FAIL; + } + + ppg_power_off(); + + ppg_sensor_exist = true; + + app_task_definition_t taskcfg={0}; + taskcfg.create_queue_handle = create_ppg_queue; + taskcfg.attr.name="ppg_service"; + taskcfg.attr.priority = osPriorityBelowNormal4; + taskcfg.attr.stack_size = PPG_SERVICE_TASK_SIZE; + taskcfg.func = ppg_service_check_task; + taskcfg.use_mem = USE_EXTEND_MEM; + + errcode_t ret=uapi_create_osThread_custom(&taskcfg); + if(ret != ERRCODE_SUCC) + { + PRINT("create ppg_service failed %d!\r\n",ret); + return ERRCODE_FAIL; + } + + + // g_ppg_service_timer = osTimerNew((osTimerFunc_t)ppg_int_callback, osTimerPeriodic, NULL, NULL); + + return ERRCODE_SUCC; +} + +void ppg_int_callback(pin_t pin, uintptr_t param) +{ + uapi_gpio_clear_interrupt(pin); + // uint32_t tm; + // uapi_get_timestampe_ms(&tm); + // PRINT("ppg_int_callback %d 0x%X tm : %d \n",pin,param,tm); + send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_INT_HANDLER); +} +// void ppg_service_service_resume(void) +// { +// DEBUG_PRINTF("ppg_service_service resume!\r\n"); +// ppg_service_check_timer_callback(0); +// } +// void ppg_service_service_suspend(void) +// { +// DEBUG_PRINTF("ppg_service_service suspend!\r\n"); +// } + diff --git a/code/sdk/zhihui/drivers/ppg/service/ppg_service.cpp b/code/sdk/zhihui/drivers/ppg/service/ppg_service.cpp deleted file mode 100644 index 72492c79b..000000000 --- a/code/sdk/zhihui/drivers/ppg/service/ppg_service.cpp +++ /dev/null @@ -1,533 +0,0 @@ -/** - * Copyright (c) @CompanyNameMagicTag 2022-2022. All rights reserved. \n - * - * Description: Test source \n - * Author: @CompanyNameTag \n - * History: \n - * 2022-08-16, Create file. \n - */ - -#include "wearable_log.h" -#include "securec.h" -#include "broadcast_service.h" -#include "broadcast_feature.h" -#include "service_id_define.h" -#include "samgr_lite.h" -#include "thread_adapter.h" -#include "graphic_service.h" - -#ifdef __cplusplus -#if __cplusplus -extern "C" { -#endif /* __cplusplus */ -#endif /* __cplusplus */ - -#include "pinctrl.h" -#include "debug_print.h" -#include "soc_osal.h" -#include "tcxo.h" -#include "irmalloc.h" -#include "errcode.h" -#include "common_def.h" - -#include "chip_core_irq.h" -#include "chip_io.h" -#include "gpio.h" -#include "pm_veto.h" - -#include "rtc.h" -#include "timer.h" -#include "systick.h" -#include "cmsis_os2.h" -#include "ppg_service.h" -#include "los_printf.h" - -#include "thread_init.h" -#include "custom_utils.h" -#include "custom_save_runtime.h" - -#if defined(PPG_VC9202) -#include "vc9202_hal.h" -#include "vc9202_user.h" -#elif defined(PPG_VC921X) -#include "vc921x_hal.h" -#include "vc921x_user_app.h" -#elif defined(PPG_GH3X2X) -#include "gh3x2x_hal.h" -#include "gh3x2x_afe_drv.h" -#else -#include "hx3695_hal.h" -#include "hx3695.h" -#endif - -static bool g_ppg_service_initialled = false; - -uint8_t card_databuf[64] = {0}; -uint8_t light_databuf[64] = {0}; - -osTimerId_t g_ppg_service_timer = NULL; - - -/*** - * 其他cmd在Header里定义,对外开放 -*/ - - -#define PPG_SERVICE_MSG_COUNT 16 -#define PPG_SERVICE_TASK_SIZE 0x1000 -#define PPG_SERVICE_TASK_PRIO 5 - -#define MAG_CHECK_MS 20 -static unsigned long g_app_queue= 0xFFFFFFFF; - -static bool ppg_service_running_stat = false; -static bool ppg_sensor_exist = false; - -static uint8_t wear_mode_state = 0; -static uint8_t keep_in_wear_det_mod = 1; //持续坚持 佩戴检测模式 - - -void set_keep_in_wear_det_mode(uint8_t mod) -{ - keep_in_wear_det_mod = mod; -} - -#ifdef PPG_HX3695 -//漏光测试 -errcode_t update_leaklight_event_notify(uint8_t *data) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "send lightdata to ui %s",data); - CustomEventPublish(TOPIC_EVENT_LEAKLIGHT_UPDATA,(uint8_t*)data,strlen((char*)data)); - return 0; -} -errcode_t update_leaklight_event_sendmsg_toUI(uint8_t *data) -{ - /**通过UI事件发送Notify*/ - GraphicService::GetInstance()->PostGraphicEvent(std::bind(update_leaklight_event_notify, data)); - return ERRCODE_SUCC; -} - - -//灰卡测试 -errcode_t update_graycard_event_notify(uint8_t *data) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "send carddata to ui %s",data); - CustomEventPublish(TOPIC_EVENT_GRAYCARD_UPDATA,(uint8_t*)data,strlen((char*)data)); - return 0; -} -errcode_t update_graycard_event_sendmsg_toUI(uint8_t *data) -{ - /**通过UI事件发送Notify*/ - GraphicService::GetInstance()->PostGraphicEvent(std::bind(update_graycard_event_notify, data)); - return ERRCODE_SUCC; -} - - -//血氧 -errcode_t update_spo2_event_notify(uint8_t spo2) -{ - CustomEventPublish(TOPIC_EVENT_SPO2_UPDATE,(uint8_t*)&spo2,sizeof(spo2)); - return 0; -} -errcode_t update_spo2_event_sendmsg_toUI(uint8_t spo2) -{ - /**通过UI事件发送Notify*/ - GraphicService::GetInstance()->PostGraphicEvent(std::bind(update_spo2_event_notify, spo2)); - return ERRCODE_SUCC; -} - -//心率 -errcode_t update_hrs_event_notify(uint8_t hrs) -{ - CustomEventPublish(TOPIC_EVENT_HEARTRATE_UPDATA,(uint8_t*)&hrs,sizeof(hrs)); - return 0; -} -errcode_t update_hrs_event_sendmsg_toUI(uint8_t hrs) -{ - /**通过UI事件发送Notify*/ - GraphicService::GetInstance()->PostGraphicEvent(std::bind(update_hrs_event_notify, hrs)); - return ERRCODE_SUCC; -} - - -//穿戴状态 -errcode_t update_wearstatus_event_notify(int32_t wearstatus) -{ - CustomEventPublish(TOPIC_EVENT_WEARSTATE_UPDATE,(uint8_t*)&wearstatus,sizeof(wearstatus)); - return 0; -} -errcode_t update_wearstatus_event_sendmsg_toUI(int32_t wearstatus) -{ - /**通过UI事件发送Notify*/ - GraphicService::GetInstance()->PostGraphicEvent(std::bind(update_wearstatus_event_notify, wearstatus)); - return ERRCODE_SUCC; -} - -//静息心率 -errcode_t update_static_hrs_event_notify(int32_t hrs) -{ - CustomEventPublish(TOPIC_EVENT_STATIC_HEARTRATE_UPDATA,(uint8_t*)&hrs,sizeof(hrs)); - return 0; -} -errcode_t update_static_hrs_event_sendmsg_toUI(int32_t hrs) -{ - /**通过UI事件发送Notify*/ - GraphicService::GetInstance()->PostGraphicEvent(std::bind(update_static_hrs_event_notify, hrs)); - return ERRCODE_SUCC; -} - -#include "hx3695_hal.h" -#include "hx3695.h" -void hx3695_msg_callback(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen) -{ - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "hx3695_msg_callback"); - FT_CUSTOM_RESULTS_t sensor_data; // 使用更通用的名称 sensor_data -#if 1 - if (msg_datalen < sizeof(FT_CUSTOM_RESULTS_t)) { - // 数据长度不足以填充整个结构体 - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Invalid data length for SPO2 update"); - //return; - } -#endif - memcpy(&sensor_data, msg_data, sizeof(FT_CUSTOM_RESULTS_t)); - switch(msg_type) - { - case HX3695_MSG_TYPE_HRS_UPDATE: - //每秒心率 - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_HRS_UPDATE = %d", sensor_data.lastesthrs); - update_hrs_event_sendmsg_toUI(sensor_data.lastesthrs); - break; - case HX3695_MSG_TYPE_HRV_UPDATE: - break; - case HX3695_MSG_TYPE_SPO2_UPDATE: - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_SPO2_UPDATE = %d", sensor_data.lastestspo2); - update_spo2_event_sendmsg_toUI(sensor_data.lastestspo2); - break; - case HX3695_MSG_TYPE_LEAKLIGHT_UPDATE: - memset_s(light_databuf,64,0,64); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LEAKLIGHT_UPDATE"); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_leak_green_UPDATE = %d", sensor_data.leak_green); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_leak_red_UPDATE = %d", sensor_data.leak_red); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_leak_ir_UPDATE = %d", sensor_data.leak_ir); - sprintf((char *)light_databuf,"%d,%d,%d",sensor_data.leak_green,sensor_data.leak_red,sensor_data.leak_ir); - update_leaklight_event_sendmsg_toUI(light_databuf); - break; - case HX3695_MSG_TYPE_GRAYCARD_UPDATE: - memset_s(card_databuf,64,0,64); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GRAYCARD_UPDATE"); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_card_green_UPDATE = %d", sensor_data.card_green); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_card_red_UPDATE = %d", sensor_data.card_red); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_card_ir_UPDATE = %d", sensor_data.card_ir); - sprintf((char *)card_databuf,"%d,%d,%d",sensor_data.card_green,sensor_data.card_red,sensor_data.card_ir); - update_graycard_event_sendmsg_toUI(card_databuf); - break; - case HX3695_MSG_TYPE_WEARSTAT_UPDATE: - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_WEARSTATUS_UPDATE = %d", sensor_data.wearstatus); - update_wearstatus_event_sendmsg_toUI(sensor_data.wearstatus); - break; - case HX3695_MSG_TYPE_STATIC_HRS_UPDATE: - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_STATIC_HRS_UPDATE = %d", sensor_data.lastesthrs); - update_static_hrs_event_sendmsg_toUI(sensor_data.lastesthrs); - break; - default: - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Unknown sensor message type"); - break; - } -} - -#endif - -void uapi_ppg_service_deinit(void) -{ - ppg_service_running_stat = false; -} - -uint32_t ppg_suspend(void) -{ - return custom_i2c_suspend(); -} -uint32_t ppg_resume(void) -{ - return custom_i2c_resume(); -} - - -errcode_t send_ppg_cmd_msg(int cmd) -{ - errcode_t ret; - if (ppg_sensor_exist == false) - return OSAL_FAILURE; - - PPG_CMD_TYPE_T mail = 0; - mail = cmd; - ret = osal_msg_queue_write_copy(g_app_queue, (void *)&mail, - sizeof(PPG_CMD_TYPE_T), 0); - if (ret != OSAL_SUCCESS) { - PRINT_ERR("Error ppg Check MSG 0x%02X send failed! err=0x%x! \r\n",cmd, ret); - } - return ret; -} - -static void ppg_service_check_task(void *arg) -{ - unused(arg); - int32_t ret; - uint32_t mail; - uint32_t msgsize = (uint32_t)sizeof(PPG_CMD_TYPE_T); - - while (1) { - ret = osal_msg_queue_read_copy(g_app_queue, (void *)&mail, &msgsize, - OSAL_MSGQ_WAIT_FOREVER); - if (ret != OSAL_SUCCESS) { - continue; - } - if((wear_mode_state == 1) && (mail > 0x10) && mail != PPG_SERVICE_CMD_TYPE_STOP_WEAR_MODE_TEST) - { - uapi_save_runtime_log(RUNTIME_LOG_WEAR_MIN_STOP); - wear_mode_state = 0; -#ifdef PPG_HX3695 - ppg_send_cmd_to_driver("wear",0); -#endif - ppg_service_running_stat = false; - } - char* cmd = "hrs"; - int enable = 1; - if (mail == PPG_SERVICE_CMD_TYPE_DO_PPG_320TIMER_CALLBACK){ -#ifdef PPG_HX3695 - heart_rate_meas_timeout_handler(NULL); -#endif - continue; - }else if (mail == PPG_SERVICE_CMD_TYPE_DO_PPG_40TIMER_CALLBACK){ -#ifdef PPG_HX3695 - agc_timeout_handler(NULL); -#endif - continue; - }else if(mail == PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_5000TIMER_CALLBACK){ -#ifdef PPG_HX3695 - wear_mode_timeout_handler(NULL); -#endif - continue; - }else if (mail == PPG_SERVICE_CMD_TYPE_DO_PPG_TEST){ - //do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OPEN_GET_ACC,NULL); - uapi_save_runtime_log(RUNTIME_LOG_HEART_DRIVER_MEASURE); - cmd = "hrs"; - enable = 1; - // uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART); - // if (cnt == 0) - // { - // uapi_pm_add_sleep_veto(PM_ID_HEART); - // } - - }else if (mail == PPG_SERVICE_CMD_TYPE_DO_HRV_TEST){ - cmd = "hrv"; - enable = 1; - }else if (mail == PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST){ - cmd = "spo2"; - enable = 1; - }else if (mail == PPG_SERVICE_CMD_TYPE_DO_LEAKLIGHT_TEST){ - cmd = "leaklight"; - enable = 1; - }else if (mail == PPG_SERVICE_CMD_TYPE_DO_GRAYCARD_TEST){ - cmd = "graycard"; - enable = 1; - }else if (mail == PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_TEST){ - if (keep_in_wear_det_mod == 0) continue;; - uapi_save_runtime_log(RUNTIME_LOG_WEAR_MIN_START); - cmd = "wear"; - enable = 1; - wear_mode_state = 1; - }else if (mail == PPG_SERVICE_CMD_TYPE_DO_LED_OFF_MODE_TEST){ - cmd = "ledoff"; - enable = 0; - }else if (mail == PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST){ - cmd = "single"; - enable = 1; - }else if (mail == PPG_SERVICE_CMD_TYPE_STOP_WEAR_MODE_TEST){ - if (keep_in_wear_det_mod == 0) continue; - cmd = "wear"; - enable = 0; - wear_mode_state = 0; - }else if (mail == PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST){ - uapi_save_runtime_log(RUNTIME_LOG_HEART_DRIVER_MEASURE_END); - cmd = "hrs"; - enable = 0; - // uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART); - // if (cnt == 1) - // { - // uapi_pm_remove_sleep_veto(PM_ID_HEART); - // } - }else if (mail == PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST){ - - cmd = "spo2"; - enable = 0; - } - else if (mail == PPG_SERVICE_CMD_TYPE_OPEN_HRS_BLE) - { -#ifdef PPG_HX3695 - hx3695_set_hrs_ble_swtich(1); -#endif - continue ; - } - else if (mail == PPG_SERVICE_CMD_TYPE_CLOSE_HRS_BLE) - { -#ifdef PPG_HX3695 - hx3695_set_hrs_ble_swtich(0); -#endif - continue ; - }else if (mail == PPG_SERVICE_CMD_TYPE_INT_HANDLER){ -#ifdef PPG_VC9202 - vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,0); -#elif defined PPG_VC921X - cmd = "int"; - enable = 1; - ppg_send_cmd_to_vc921x_driver(cmd,enable); -#elif defined PPG_GH3X2X - hal_gh3x2x_afe_int_handler_call_back(); - GH3X2X_AFE_ChipPro(); -#endif - continue; - } - else if (mail == PPG_SERVICE_CMD_TYPE_FPC_TEST){ -#ifdef PPG_VC9202 - cmd = "fpc"; - enable = 1; -#endif - } - else if (mail == PPG_SERVICE_CMD_TYPE_FACTORY_TEST){ -#ifdef PPG_VC9202 - cmd = "factory"; - enable = 1; -#endif - } - if (ppg_service_running_stat == true && enable ==1 ) - { - PRINT_ERR("ppg service already started! \r\n"); - continue ; - }else if ( ppg_service_running_stat == false && enable == 0 ) - { - PRINT_ERR("ppg service already stopped! \r\n"); - continue ; - } - -#ifdef PPG_VC9202 - ppg_send_cmd_to_vc9202_driver(cmd,enable); -#elif defined(PPG_VC921X) - ppg_send_cmd_to_vc921x_driver(cmd,enable); -#elif defined(PPG_GH3X2X) - ppg_send_cmd_to_gh3x2x_driver(cmd,enable); -#endif - - if(enable == 1) - ppg_service_running_stat = true; - else - ppg_service_running_stat = false; - - if((strcmp(cmd, "wear") != 0) && (enable == 0)) - { - if (keep_in_wear_det_mod == 1) - { - uapi_save_runtime_log(RUNTIME_LOG_WEAR_MIN_START); -#ifdef PPG_HX3695 - ppg_send_cmd_to_driver("wear",1); -#endif - wear_mode_state = 1; - ppg_service_running_stat = true; - } - } - - } - -} -void create_ppg_queue(void) -{ - if (osal_msg_queue_create("ppg_service_queue", PPG_SERVICE_MSG_COUNT, &g_app_queue, - 0, sizeof(PPG_CMD_TYPE_T)) != ERRCODE_SUCC) { - PRINT_ERR("[ppg][service] app create mail fail\n"); - } -} -errcode_t uapi_ppg_service_init(void) -{ - - - PRINT("uapi_ppg_service_init !\r\n"); - - tyhx_poweron(); - -#ifdef PPG_HX3695 - - if ( hx3695_chip_check() == false) - { - //TODO 没找到3695,退出线程 - PRINT("3695 not exist!\r\n"); - tyhx_poweroff(); - return ERRCODE_FAIL; - } - hx3695_register_msg_callback(hx3695_msg_callback);//注册驱动回调 - // //ppg_send_cmd_to_driver("wear",0); -#elif defined(PPG_VC9202) - if ( vc9202_drv_get_chip_id() != 0x21) - { - //TODO 没找到3695,退出线程 - PRINT("PPG_VC9202 not exist!\r\n"); - tyhx_poweroff(); - return ERRCODE_FAIL; - } -#elif defined(PPG_GH3X2X) - if (GH3X2X_AFE_CheckChipId() != 0) - { - //TODO 没找到3695,退出线程 - PRINT("PPG_GH3X2X not exist!\r\n"); - tyhx_poweroff(); - return ERRCODE_FAIL; - } -#endif - - tyhx_poweroff(); - - ppg_sensor_exist = true; - - app_task_definition_t taskcfg={0}; - taskcfg.create_queue_handle = create_ppg_queue; - taskcfg.attr.name="ppg_service"; - taskcfg.attr.priority = osPriorityBelowNormal4; - taskcfg.attr.stack_size = PPG_SERVICE_TASK_SIZE; - taskcfg.func = ppg_service_check_task; - taskcfg.use_mem = USE_EXTEND_MEM; - - errcode_t ret=uapi_create_osThread_custom(&taskcfg); - if(ret != ERRCODE_SUCC) - { - PRINT("create ppg_service failed %d!\r\n",ret); - return ERRCODE_FAIL; - } - - - // g_ppg_service_timer = osTimerNew((osTimerFunc_t)ppg_int_callback, osTimerPeriodic, NULL, NULL); - - return ERRCODE_SUCC; -} - -void ppg_int_callback(pin_t pin, uintptr_t param) -{ - uapi_gpio_clear_interrupt(pin); - uint32_t tm; - uapi_get_timestampe_ms(&tm); - // PRINT("ppg_int_callback %d 0x%X tm : %d \n",pin,param,tm); - send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_INT_HANDLER); -} -// void ppg_service_service_resume(void) -// { -// DEBUG_PRINTF("ppg_service_service resume!\r\n"); -// ppg_service_check_timer_callback(0); -// } -// void ppg_service_service_suspend(void) -// { -// DEBUG_PRINTF("ppg_service_service suspend!\r\n"); -// } - - -#ifdef __cplusplus -#if __cplusplus -} -#endif /* __cplusplus */ -#endif /* __cplusplus */ diff --git a/code/sdk/zhihui/drivers/ppg/service/ppg_service.h b/code/sdk/zhihui/drivers/ppg/service/ppg_service.h index 012a1d8df..a7aa9ab32 100644 --- a/code/sdk/zhihui/drivers/ppg/service/ppg_service.h +++ b/code/sdk/zhihui/drivers/ppg/service/ppg_service.h @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-03-27 09:07:00 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-01-06 16:57:23 + * @LastEditTime: 2025-05-30 14:44:51 * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/service/ppg_service.h * @Description: * @@ -30,9 +30,10 @@ extern "C" { #include "errcode.h" #include "platform_core.h" -#define PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_5000TIMER_CALLBACK 0x09 -#define PPG_SERVICE_CMD_TYPE_DO_PPG_40TIMER_CALLBACK 0x0A -#define PPG_SERVICE_CMD_TYPE_DO_PPG_320TIMER_CALLBACK 0x10 +#define PPG_SERVICE_CMD_TYPE_INT_HANDLER 0x08 +#define PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_TIMER_CALLBACK 0x09 +#define PPG_SERVICE_CMD_TYPE_DO_PPG_AGC_TIMER_CALLBACK 0x0A +#define PPG_SERVICE_CMD_TYPE_DO_PPG_HRS_TIMER_CALLBACK 0x10 #define PPG_SERVICE_CMD_TYPE_DO_PPG_TEST 0x11 #define PPG_SERVICE_CMD_TYPE_DO_HRV_TEST 0x12 #define PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST 0x13 @@ -46,7 +47,6 @@ extern "C" { #define PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST 0x23 #define PPG_SERVICE_CMD_TYPE_OPEN_HRS_BLE 0x24 #define PPG_SERVICE_CMD_TYPE_CLOSE_HRS_BLE 0x25 -#define PPG_SERVICE_CMD_TYPE_INT_HANDLER 0x26 #define PPG_SERVICE_CMD_TYPE_FPC_TEST 0x27 #define PPG_SERVICE_CMD_TYPE_FACTORY_TEST 0x28 diff --git a/code/sdk/zhihui/drivers/ppg/vc9202/src/vc9202_hal.c b/code/sdk/zhihui/drivers/ppg/vc9202/src/vc9202_hal.c index 5e2d2341f..815e80656 100644 --- a/code/sdk/zhihui/drivers/ppg/vc9202/src/vc9202_hal.c +++ b/code/sdk/zhihui/drivers/ppg/vc9202/src/vc9202_hal.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-03-13 15:08:38 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2024-12-24 10:25:14 + * @LastEditTime: 2025-05-15 17:15:13 * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c * @Description: * @@ -26,10 +26,6 @@ #endif #ifdef PPG_HX3695 -#include "tyhx_hrs_custom.h" -#include "hx3695.h" -#include "hx3695_hal.h" -#include "hx3695.h" hx3695_msg_callback_t g_send_msg_toUI = NULL; @@ -156,7 +152,7 @@ void ppg_send_cmd_to_vc9202_driver(char* mode, uint8_t enable) #endif { // ppg_service_running_stat = true; - uapi_pm_control(PM_APP_WAKE_NEEDED); + // uapi_pm_control(PM_APP_WAKE_NEEDED); tyhx_poweron(); #ifdef PPG_HX3695 hx3695_init(md); @@ -205,7 +201,7 @@ void ppg_send_cmd_to_vc9202_driver(char* mode, uint8_t enable) #endif - uapi_pm_control(PM_APP_WAKE_NONEED); + // uapi_pm_control(PM_APP_WAKE_NONEED); tyhx_poweroff(); } } \ No newline at end of file diff --git a/code/sdk/zhihui/drivers/ppg/vc921x/src/vc921x_hal.c b/code/sdk/zhihui/drivers/ppg/vc921x/src/vc921x_hal.c index 477d9eee4..648fb7eef 100644 --- a/code/sdk/zhihui/drivers/ppg/vc921x/src/vc921x_hal.c +++ b/code/sdk/zhihui/drivers/ppg/vc921x/src/vc921x_hal.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-03-13 15:08:38 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2024-12-16 16:40:25 + * @LastEditTime: 2025-05-15 11:56:40 * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c * @Description: * @@ -51,7 +51,7 @@ void ppg_send_cmd_to_vc921x_driver(char* mode, uint8_t enable) if (enable == 1) { // ppg_service_running_stat = true; - uapi_pm_control(PM_APP_WAKE_NEEDED); + // uapi_pm_control(PM_APP_WAKE_NEEDED); tyhx_poweron(); vc921x_device = get_vc921x_device(); @@ -68,7 +68,7 @@ void ppg_send_cmd_to_vc921x_driver(char* mode, uint8_t enable) } else { - uapi_pm_control(PM_APP_WAKE_NONEED); + // uapi_pm_control(PM_APP_WAKE_NONEED); vc921x_device->ops->stop_work(); tyhx_poweroff(); } diff --git a/code/sdk/zhihui/drivers/rotary_encoder/mixo/mixo_ots_driver.c b/code/sdk/zhihui/drivers/rotary_encoder/mixo/mixo_ots_driver.c index 16fc440ea..be7f6998f 100644 --- a/code/sdk/zhihui/drivers/rotary_encoder/mixo/mixo_ots_driver.c +++ b/code/sdk/zhihui/drivers/rotary_encoder/mixo/mixo_ots_driver.c @@ -32,9 +32,9 @@ static void put_crown_result(int16_t x) { return; } - if(abs(x)>=8 ) + if(abs(x)>=16 ) { - ots_result += x/8; //大于4的值除以4, 代表角度, 单位0.5° + ots_result += x/16; //大于4的值除以4, 代表角度, 单位0.5° } else { diff --git a/code/sdk/zhihui/services/factorytest_service/factorytest_protocol.c b/code/sdk/zhihui/services/factorytest_service/factorytest_protocol.c index 6f714c6a5..b88bff8bd 100644 --- a/code/sdk/zhihui/services/factorytest_service/factorytest_protocol.c +++ b/code/sdk/zhihui/services/factorytest_service/factorytest_protocol.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-06-17 14:31:08 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-05-12 18:56:38 + * @LastEditTime: 2025-06-06 16:19:51 * @FilePath: /FD230/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c * @Description: * @@ -21,7 +21,10 @@ #include "app_at_process.h" #include "cywee_hal.h" +#ifdef SUPPORT_PPG_SERVICE #include "ppg_service.h" +#endif + #include "button_porting.h" #ifdef SUPPORT_CAT1_SERVICE #include "cat1_ctl.h" @@ -407,20 +410,23 @@ void aging_task(void) return; } uapi_get_timestampe_ss(¤t_time); - send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST); + + uint32_t green = 0; + uint32_t red = 0; + uint32_t ir = 0; + +#ifdef SUPPORT_PPG_SERVICE + send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_LEAKLIGHT_TEST); LOS_Msleep(1000); - #ifdef PPG_HX3695 - FT_RESULTS_t ft_result = hx3695_factroy_test(SINGLE_CHECK_TEST); - #endif + ppg_get_leaklight_data(&green,&red,&ir); send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST); - #ifdef PPG_HX3695 - PRINT("ft_result.gr_data_final : %d , ft_result.red_data_final : %d , ft_result.ir_data_final : %d\r\n",ft_result.gr_data_final,ft_result.red_data_final,ft_result.ir_data_final); - if(!(ft_result.gr_data_final && ft_result.red_data_final && ft_result.ir_data_final)) +#endif + PRINT("green : %d , red : %d , ft_result.ir_data_final : %d\r\n",green,red,ir); + if(!green && !red && !ir) { aging_t.ppg_error++; aging_t.fail_num++; } - #endif PRINT("current_time - enter_time[%d]\n",current_time - enter_time); }while(current_time - enter_time <= 2 * 60); @@ -1459,7 +1465,9 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint { //获取 ppg_id uint8_t ppg_id; - uapi_ppg_get_id(&ppg_id); +#ifdef SUPPORT_PPG_SERVICE + ppg_get_chip_id(&ppg_id); +#endif PRINT("0x%x\n",ppg_id); factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST, BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS, @@ -1467,48 +1475,22 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint &ppg_id, 1); - } else if(testitem == 0x02) - { - //关闭所有LED - uint8_t send_data = 0x00; - send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_LED_OFF_MODE_TEST); - factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST, - BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS, - 0x02, - &send_data, - 1); - } else if(testitem == 0x03) + }else if(testitem == 0x03) { //打开心率检测 -#ifdef PPG_HX3695 - send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST); -#elif defined PPG_VC9202 + uint8_t databuf[4] = {0}; +#ifdef SUPPORT_PPG_SERVICE send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_PPG_TEST); -#endif LOS_Msleep(1000); - uint8_t databuf[4] = {0}; -#ifdef PPG_HX3695 - FT_RESULTS_t ft_result = hx3695_factroy_test(SINGLE_CHECK_TEST); - databuf[0] = (uint8_t)((ft_result.gr_data_final & 0xFF000000) >> 24); - databuf[1] = (uint8_t)((ft_result.gr_data_final & 0x00FF0000) >> 16); - databuf[2] = (uint8_t)((ft_result.gr_data_final & 0x0000FF00) >> 8); - databuf[3] = (uint8_t)((ft_result.gr_data_final & 0x000000FF) >> 0); -#elif defined PPG_VC9202 - uint32_t ppg_data = vc9202_get_hr_ppg_data(); - if(!ppg_data) - { - LOS_Msleep(1000); - ppg_data = vc9202_get_hr_ppg_data(); - } - PRINT("ppg_data : %d \n",ppg_data); - databuf[0] = (uint8_t)((ppg_data & 0xFF000000) >> 24); - databuf[1] = (uint8_t)((ppg_data & 0x00FF0000) >> 16); - databuf[2] = (uint8_t)((ppg_data & 0x0000FF00) >> 8); - databuf[3] = (uint8_t)((ppg_data & 0x000000FF) >> 0); -#endif + uint32_t data = ppg_get_factory_data(); + send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST); - send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST); + databuf[0] = (uint8_t)((data & 0xFF000000) >> 24); + databuf[1] = (uint8_t)((data & 0x00FF0000) >> 16); + databuf[2] = (uint8_t)((data & 0x0000FF00) >> 8); + databuf[3] = (uint8_t)((data & 0x000000FF) >> 0); +#endif PRINT("%2X %2X %2X %2X \r\n",databuf[0],databuf[1],databuf[2],databuf[3]); @@ -1521,44 +1503,21 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint } else if(testitem == 0x04) { //打开血氧检测 -#ifdef PPG_HX3695 - send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST); -#elif defined PPG_VC9202 + uint8_t databuf[4] = {0}; +#ifdef SUPPORT_PPG_SERVICE send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST); -#endif LOS_Msleep(1000); - uint8_t databuf[8] = {0}; -#ifdef PPG_HX3695 - FT_RESULTS_t ft_result = hx3695_factroy_test(SINGLE_CHECK_TEST); - databuf[0] = (uint8_t)((ft_result.red_data_final & 0xFF000000) >> 24); - databuf[1] = (uint8_t)((ft_result.red_data_final & 0x00FF0000) >> 16); - databuf[2] = (uint8_t)((ft_result.red_data_final & 0x0000FF00) >> 8); - databuf[3] = (uint8_t)((ft_result.red_data_final & 0x000000FF) >> 0); -#elif defined PPG_VC9202 - uint32_t red_data = 0; - uint32_t ir_data = 0; - vc9202_get_spo2_ppg_data(&ir_data,&red_data); - PRINT("ir_data : %d ,red_data : %d \n",ir_data,red_data); - if(!ir_data && !red_data) - { - LOS_Msleep(1000); - vc9202_get_spo2_ppg_data(&ir_data,&red_data); - } - - databuf[0] = (uint8_t)((ir_data & 0xFF000000) >> 24); - databuf[1] = (uint8_t)((ir_data & 0x00FF0000) >> 16); - databuf[2] = (uint8_t)((ir_data & 0x0000FF00) >> 8); - databuf[3] = (uint8_t)((ir_data & 0x000000FF) >> 0); - - databuf[4] = (uint8_t)((red_data & 0xFF000000) >> 24); - databuf[5] = (uint8_t)((red_data & 0x00FF0000) >> 16); - databuf[6] = (uint8_t)((red_data & 0x0000FF00) >> 8); - databuf[7] = (uint8_t)((red_data & 0x000000FF) >> 0); + uint32_t data = ppg_get_factory_data(); + send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST); + + databuf[0] = (uint8_t)((data & 0xFF000000) >> 24); + databuf[1] = (uint8_t)((data & 0x00FF0000) >> 16); + databuf[2] = (uint8_t)((data & 0x0000FF00) >> 8); + databuf[3] = (uint8_t)((data & 0x000000FF) >> 0); #endif - send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST); - PRINT("%2X %2X %2X %2X \r\n",databuf[0],databuf[1],databuf[2],databuf[3]); - PRINT("%2X %2X %2X %2X \r\n",databuf[4],databuf[5],databuf[6],databuf[7]); + + PRINT("%2X %2X %2X %2X \r\n",databuf[0],databuf[1],databuf[2],databuf[3]); factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST, BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS, @@ -1568,6 +1527,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint } else if(testitem == 0x05) { +#ifdef SUPPORT_PPG_SERVICE //灰卡测试 send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_GRAYCARD_TEST); LOS_Msleep(1000); @@ -1617,6 +1577,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint 8); #endif send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST); +#endif // PRINT("%2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X\r\n", // databuf[0],databuf[1],databuf[2],databuf[3], // databuf[4],databuf[5],databuf[6],databuf[7], @@ -1627,55 +1588,33 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint } else if(testitem == 0x06) { //漏光测试 - send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_LEAKLIGHT_TEST); - LOS_Msleep(1000); uint8_t databuf[12] = {0}; -#ifdef PPG_HX3695 - FT_RESULTS_t ft_result = hx3695_factroy_test(LEAK_LIGHT_TEST); - - databuf[0] = (uint8_t)((ft_result.gr_data_final & 0xFF000000) >> 24); - databuf[1] = (uint8_t)((ft_result.gr_data_final & 0x00FF0000) >> 16); - databuf[2] = (uint8_t)((ft_result.gr_data_final & 0x0000FF00) >> 8); - databuf[3] = (uint8_t)((ft_result.gr_data_final & 0x000000FF) >> 0); - - databuf[4] = (uint8_t)((ft_result.red_data_final & 0xFF000000) >> 24); - databuf[5] = (uint8_t)((ft_result.red_data_final & 0x00FF0000) >> 16); - databuf[6] = (uint8_t)((ft_result.red_data_final & 0x0000FF00) >> 8); - databuf[7] = (uint8_t)((ft_result.red_data_final & 0x000000FF) >> 0); - databuf[8] = (uint8_t)((ft_result.ir_data_final & 0xFF000000) >> 24); - databuf[9] = (uint8_t)((ft_result.ir_data_final & 0x00FF0000) >> 16); - databuf[10] = (uint8_t)((ft_result.ir_data_final & 0x0000FF00) >> 8); - databuf[11] = (uint8_t)((ft_result.ir_data_final & 0x000000FF) >> 0); -#elif defined PPG_VC9202 - uint32_t led_cur = 0; - uint32_t apre_val = 0; - uint32_t aps_val = 9; - vc9202_get_leaklight_data(&led_cur,&apre_val,&aps_val); - PRINT("led_cur : %d ,apre_val : %d ,aps_val : %d \n",led_cur,apre_val,aps_val); + uint32_t green = 0; + uint32_t red = 0; + uint32_t ir = 0; - if(!led_cur && !apre_val && !aps_val) - { - LOS_Msleep(1000); - vc9202_get_leaklight_data(&led_cur,&apre_val,&aps_val); - } +#ifdef SUPPORT_PPG_SERVICE + send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_LEAKLIGHT_TEST); + LOS_Msleep(1000); + ppg_get_leaklight_data(&green,&red,&ir); + send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST); +#endif + databuf[0] = (uint8_t)((green & 0xFF000000) >> 24); + databuf[1] = (uint8_t)((green & 0x00FF0000) >> 16); + databuf[2] = (uint8_t)((green & 0x0000FF00) >> 8); + databuf[3] = (uint8_t)((green & 0x000000FF) >> 0); - databuf[0] = (uint8_t)((led_cur & 0xFF000000) >> 24); - databuf[1] = (uint8_t)((led_cur & 0x00FF0000) >> 16); - databuf[2] = (uint8_t)((led_cur & 0x0000FF00) >> 8); - databuf[3] = (uint8_t)((led_cur & 0x000000FF) >> 0); + databuf[4] = (uint8_t)((red & 0xFF000000) >> 24); + databuf[5] = (uint8_t)((red & 0x00FF0000) >> 16); + databuf[6] = (uint8_t)((red & 0x0000FF00) >> 8); + databuf[7] = (uint8_t)((red & 0x000000FF) >> 0); - databuf[4] = (uint8_t)((apre_val & 0xFF000000) >> 24); - databuf[5] = (uint8_t)((apre_val & 0x00FF0000) >> 16); - databuf[6] = (uint8_t)((apre_val & 0x0000FF00) >> 8); - databuf[7] = (uint8_t)((apre_val & 0x000000FF) >> 0); + databuf[8] = (uint8_t)((ir & 0xFF000000) >> 24); + databuf[9] = (uint8_t)((ir & 0x00FF0000) >> 16); + databuf[10] = (uint8_t)((ir & 0x0000FF00) >> 8); + databuf[11] = (uint8_t)((ir & 0x000000FF) >> 0); - databuf[8] = (uint8_t)((aps_val & 0xFF000000) >> 24); - databuf[9] = (uint8_t)((aps_val & 0x00FF0000) >> 16); - databuf[10] = (uint8_t)((aps_val & 0x0000FF00) >> 8); - databuf[11] = (uint8_t)((aps_val & 0x000000FF) >> 0); -#endif - send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST); // PRINT("%2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X\r\n", // databuf[0],databuf[1],databuf[2],databuf[3], diff --git a/code/sdk/zhihui/utils/custom_utils.c b/code/sdk/zhihui/utils/custom_utils.c index 12d076e26..2fe7483c2 100644 --- a/code/sdk/zhihui/utils/custom_utils.c +++ b/code/sdk/zhihui/utils/custom_utils.c @@ -1490,7 +1490,7 @@ void power_on_cat1(void) void power_off_cat1(void) { - #ifdef FD230 + #if defined(FD230) && !defined(BOARD_W9) uapi_cat1_reset(1); uapi_cat1_power_on(0); #else diff --git a/code/sdk/zhihui/utils/custom_utils_at_cmd.c b/code/sdk/zhihui/utils/custom_utils_at_cmd.c index 97b4f1f72..74809c62c 100644 --- a/code/sdk/zhihui/utils/custom_utils_at_cmd.c +++ b/code/sdk/zhihui/utils/custom_utils_at_cmd.c @@ -559,6 +559,7 @@ static uint32_t custom_get_cywee_id(uint8_t *para, uint32_t paraLen, char *strCo UNUSED(strCommonCmd); uint8_t id; uapi_cywee_get_id(&id); + wstp_print("cywee_id[%x]\n",id); return ERRCODE_SUCC; } -- 2.17.1