diff --git a/components/esp_driver_jpeg/test_apps/jpeg_test_apps/main/test_jpeg_encode.c b/components/esp_driver_jpeg/test_apps/jpeg_test_apps/main/test_jpeg_encode.c index f1612fe7c54..fc02c785e1f 100644 --- a/components/esp_driver_jpeg/test_apps/jpeg_test_apps/main/test_jpeg_encode.c +++ b/components/esp_driver_jpeg/test_apps/jpeg_test_apps/main/test_jpeg_encode.c @@ -57,11 +57,11 @@ TEST_CASE("JPEG encode performance test for 480*640 RGB->YUV picture", "[jpeg]") }; jpeg_encode_memory_alloc_cfg_t rx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_OUTPUT_BUFFER, + .buffer_direction = JPEG_ENC_ALLOC_OUTPUT_BUFFER, }; jpeg_encode_memory_alloc_cfg_t tx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_INPUT_BUFFER, + .buffer_direction = JPEG_ENC_ALLOC_INPUT_BUFFER, }; size_t rx_buffer_size = 0; diff --git a/docs/en/api-reference/peripherals/jpeg.rst b/docs/en/api-reference/peripherals/jpeg.rst index 0ba1ffdbd45..b999d838148 100644 --- a/docs/en/api-reference/peripherals/jpeg.rst +++ b/docs/en/api-reference/peripherals/jpeg.rst @@ -186,40 +186,44 @@ The format conversions supported by this driver are listed in the table below: - GRAY -Below is the example of code that encodes a 1080*1920 picture: +Below is the example of code that encodes a 1280x720 picture from an embedded raw buffer: .. code:: c - int raw_size_1080p = 0;/* Your raw image size */ + size_t raw_size_720p = EXAMPLE_WIDTH * EXAMPLE_HEIGHT * 3; /* 1280x720 bgr24 frame */ jpeg_encode_cfg_t enc_config = { .src_type = JPEG_ENCODE_IN_FORMAT_RGB888, .sub_sample = JPEG_DOWN_SAMPLING_YUV422, .image_quality = 80, - .width = 1920, - .height = 1080, + .width = 1280, + .height = 720, .pixel_reverse = false, // Whether to reverse the pixel order of the input image, or pixel order detail please refer to technical reference manual }; - uint8_t *raw_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p); - if (raw_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc 1080p tx buffer error"); - return; - } - uint8_t *jpg_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p / 10); // Assume that compression ratio of 10 to 1 - if (jpg_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc jpg_buf_1080p error"); + jpeg_encode_memory_alloc_cfg_t rx_mem_cfg = { + .buffer_direction = JPEG_ENC_ALLOC_OUTPUT_BUFFER, + }; + size_t jpg_buffer_size = 0; + uint8_t *jpg_buf_720p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_720p / 10, &rx_mem_cfg, &jpg_buffer_size); + if (jpg_buf_720p == NULL) { + ESP_LOGE(TAG, "alloc jpg_buf_720p error"); return; } - ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, raw_buf_1080p, raw_size_1080p, jpg_buf_1080p, &jpg_size_1080p);); + /* The current JPEG encoder input path expects BGR24-style raw bytes for + * JPEG_ENCODE_IN_FORMAT_RGB888. The embedded asset can be read directly + * from flash as long as it remains valid until this call returns. */ + ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, embedded_bgr24_start, raw_size_720p, jpg_buf_720p, jpg_buffer_size, &jpg_size_720p)); There are some tips that can help you use this driver more accurately: -1. In above code, you should make sure the `raw_buf_1080p` and `jpg_buf_1080p` should aligned by calling :cpp:func:`jpeg_alloc_encoder_mem`. +1. In the above code, the output buffer `jpg_buf_720p` should be allocated by calling :cpp:func:`jpeg_alloc_encoder_mem`, because the JPEG bitstream buffer must satisfy the driver's alignment requirements. -2. The content of `raw_buf_1080p` buffer should not be changed until :cpp:func:`jpeg_encoder_process` returns. +2. The content pointed to by `embedded_bgr24_start` should not be changed until :cpp:func:`jpeg_encoder_process` returns. This input buffer can come from flash-mapped embedded data or another memory region that stays readable for the full call. -3. The compression ratio depends on the chosen `image_quality` and the content of the image itself. Generally, a higher `image_quality` value obviously results in better image quality but a smaller compression ratio. As for the image content, it is hard to give any specific guidelines, so this question is out of the scope of this document. Generally, the baseline JPEG compression ratio can vary from 40:1 to 10:1. Please take the actual situation into account. +3. For :cpp:enumerator:`JPEG_ENCODE_IN_FORMAT_RGB888`, the current driver expects the raw input bytes in a BGR24-style layout. Supplying RGB24 raw data would swap the red and blue channels in the encoded JPEG. + +4. The compression ratio depends on the chosen `image_quality` and the content of the image itself. Generally, a higher `image_quality` value obviously results in better image quality but a smaller compression ratio. As for the image content, it is hard to give any specific guidelines, so this question is out of the scope of this document. Generally, the baseline JPEG compression ratio can vary from 40:1 to 10:1. Please take the actual situation into account. .. _jpeg-performance-overview: @@ -592,7 +596,7 @@ Application Examples - :example:`peripherals/jpeg/jpeg_decode` demonstrates how to use the JPEG hardware decoder to decode JPEG pictures of different sizes (1080p and 720p) into RGB format, showcasing the flexibility and speed of hardware decoding. -- :example:`peripherals/jpeg/jpeg_encode` demonstrates how to use the JPEG hardware encoder to encode a 1080p picture, specifically converting `*.rgb` files to `*.jpg` files. +- :example:`peripherals/jpeg/jpeg_encode` demonstrates how to use the JPEG hardware encoder to encode an embedded 720p raw picture, stream the JPEG as base64 over UART, and validate the result with pytest. API Reference diff --git a/docs/zh_CN/api-reference/peripherals/jpeg.rst b/docs/zh_CN/api-reference/peripherals/jpeg.rst index fdeaf2914a0..40beeec7192 100644 --- a/docs/zh_CN/api-reference/peripherals/jpeg.rst +++ b/docs/zh_CN/api-reference/peripherals/jpeg.rst @@ -186,40 +186,44 @@ JPEG 编码器引擎 - GRAY -可参考以下代码,为 1080*1920 大小的图片编码: +可参考以下代码,将一张嵌入到固件中的 1280x720 原始图片编码为 JPEG: .. code:: c - int raw_size_1080p = 0;/* Your raw image size */ + size_t raw_size_720p = EXAMPLE_WIDTH * EXAMPLE_HEIGHT * 3; /* 1280x720 bgr24 帧 */ jpeg_encode_cfg_t enc_config = { .src_type = JPEG_ENCODE_IN_FORMAT_RGB888, .sub_sample = JPEG_DOWN_SAMPLING_YUV422, .image_quality = 80, - .width = 1920, - .height = 1080, + .width = 1280, + .height = 720, .pixel_reverse = false, // 是否反转输入图像的像素顺序,或像素顺序细节请参考技术参考手册 }; - uint8_t *raw_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p); - if (raw_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc 1080p tx buffer error"); - return; - } - uint8_t *jpg_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p / 10); // Assume that compression ratio of 10 to 1 - if (jpg_buf_1080p == NULL) { - ESP_LOGE(TAG, "alloc jpg_buf_1080p error"); + jpeg_encode_memory_alloc_cfg_t rx_mem_cfg = { + .buffer_direction = JPEG_ENC_ALLOC_OUTPUT_BUFFER, + }; + size_t jpg_buffer_size = 0; + uint8_t *jpg_buf_720p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_720p / 10, &rx_mem_cfg, &jpg_buffer_size); + if (jpg_buf_720p == NULL) { + ESP_LOGE(TAG, "alloc jpg_buf_720p error"); return; } - ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, raw_buf_1080p, raw_size_1080p, jpg_buf_1080p, &jpg_size_1080p);); + /* 当前 JPEG 编码输入路径下,JPEG_ENCODE_IN_FORMAT_RGB888 实际要求 + * 原始字节按 BGR24 风格排列。只要数据在本次调用返回前保持可读, + * 就可以直接从 flash 中映射出来的嵌入资源读取。 */ + ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, embedded_bgr24_start, raw_size_720p, jpg_buf_720p, jpg_buffer_size, &jpg_size_720p)); 参考以下提示,可以更准确地使用该驱动程序: -1. 在上述代码中,应调用 :cpp:func:`jpeg_alloc_encoder_mem` 函数,确保 `raw_buf_1080p` 和 `jpg_buf_1080p` 对齐。 +1. 在上述代码中,应调用 :cpp:func:`jpeg_alloc_encoder_mem` 函数来分配 `jpg_buf_720p`,因为 JPEG 输出码流缓冲区需要满足驱动的对齐要求。 -2. 在 :cpp:func:`jpeg_encoder_process` 返回前, `raw_buf_1080p` 缓冲区的内容不应有更改。 +2. 在 :cpp:func:`jpeg_encoder_process` 返回前, `embedded_bgr24_start` 所指向的输入内容不应有更改。该输入缓冲区既可以来自嵌入到 flash 中的映射资源,也可以来自其他在整个调用期间保持可读的内存区域。 -3. 压缩比取决于所选择的 `image_quality` 和图像本身的内容。一般来说, `image_quality` 值越高,图像质量越好,相应的压缩比就越小。至于图像内容,则很难给出具体的指导方针,因此本文也就不再讨论。基准 JPEG 压缩比通常从 40:1 到 10:1 不等,请依实际情况而定。 +3. 对于 :cpp:enumerator:`JPEG_ENCODE_IN_FORMAT_RGB888`,当前驱动实际要求原始输入字节按 BGR24 风格排列。如果直接提供 RGB24 原始数据,则编码后的 JPEG 会出现红蓝通道互换。 + +4. 压缩比取决于所选择的 `image_quality` 和图像本身的内容。一般来说, `image_quality` 值越高,图像质量越好,相应的压缩比就越小。至于图像内容,则很难给出具体的指导方针,因此本文也就不再讨论。基准 JPEG 压缩比通常从 40:1 到 10:1 不等,请依实际情况而定。 .. _jpeg-performance-overview: @@ -592,7 +596,7 @@ Kconfig 选项 - :example:`peripherals/jpeg/jpeg_decode` 演示了如何使用 JPEG 硬件解码器将不同大小的 JPEG 图片(1080p 和 720p)解码为 RGB 格式,展示了硬件解码的速度和灵活性。 -- :example:`peripherals/jpeg/jpeg_encode` 演示了如何使用 JPEG 硬件编码器编码一张 1080p 的图像,即将 `*.rgb` 文件转换为 `*.jpg` 文件。 +- :example:`peripherals/jpeg/jpeg_encode` 演示了如何使用 JPEG 硬件编码器对一张嵌入式 720p 原始图像进行编码,并通过 UART 输出 base64 JPEG,再用 pytest 做结果校验。 API 参考 diff --git a/examples/peripherals/.build-test-rules.yml b/examples/peripherals/.build-test-rules.yml index 54f6381824e..0b7eb3bc45f 100644 --- a/examples/peripherals/.build-test-rules.yml +++ b/examples/peripherals/.build-test-rules.yml @@ -301,7 +301,7 @@ examples/peripherals/jpeg/jpeg_decode: examples/peripherals/jpeg/jpeg_encode: disable: - - if: SOC_JPEG_ENCODE_SUPPORTED != 1 or SOC_SDMMC_HOST_SUPPORTED != 1 + - if: SOC_JPEG_ENCODE_SUPPORTED != 1 depends_components: - esp_driver_dma - esp_hal_jpeg diff --git a/examples/peripherals/jpeg/jpeg_encode/CMakeLists.txt b/examples/peripherals/jpeg/jpeg_encode/CMakeLists.txt index b452de017de..d6edee83d66 100644 --- a/examples/peripherals/jpeg/jpeg_encode/CMakeLists.txt +++ b/examples/peripherals/jpeg/jpeg_encode/CMakeLists.txt @@ -5,4 +5,4 @@ cmake_minimum_required(VERSION 3.22) include($ENV{IDF_PATH}/tools/cmake/project.cmake) # "Trim" the build. Include the minimal set of components, main, and anything it depends on. idf_build_set_property(MINIMAL_BUILD ON) -project(jpeg_encode) +project(jpeg_encode_example) diff --git a/examples/peripherals/jpeg/jpeg_encode/README.md b/examples/peripherals/jpeg/jpeg_encode/README.md index d8a22456b33..ea6c2a8cac0 100644 --- a/examples/peripherals/jpeg/jpeg_encode/README.md +++ b/examples/peripherals/jpeg/jpeg_encode/README.md @@ -5,25 +5,23 @@ ## Overview -This example demonstrates how to use the JPEG hardware [encoder](https://docs.espressif.com/projects/esp-idf/en/latest/esp32p4/api-reference/peripherals/jpeg.html) to encode a 1080p picture: +This example demonstrates how to use the JPEG hardware [encoder](https://docs.espressif.com/projects/esp-idf/en/latest/esp32p4/api-reference/peripherals/jpeg.html) to encode a 720p raw image. -This example makes use of the hardware-based JPEG encoder. If you have multiple pictures that need to be decoded, such as *.rgb -> *.jpg, you can use this example to accelerate encoding. +The example performs: -## How to use example +- Embedding `main/assets/esp720p.rgb` into the final firmware image +- Letting the JPEG encoder read one 1280x720 `bgr24` frame directly from flash +- Encoding the frame into JPEG with the hardware encoder +- Base64-encoding the resulting JPEG bitstream and printing it with machine-parseable markers +- Letting pytest rebuild `jpeg_encode_result.jpeg` and compare it against `golden_output.jpeg` -### Hardware Required +## Hardware Required -* An Espressif development board based on a chip listed in supported targets -* A USB cable for power supply and serial communication -* Computer with ESP-IDF installed and configured -* The raw picture is the only source that you need to prepare (We have an [esp1080p.rgb](https://github.com/espressif/esp-idf/tree/master/examples/peripherals/jpeg/jpeg_encode/resources/esp1080.rgb) in resources folder, you can also get it from [jpeg_decode](https://github.com/espressif/esp-idf/tree/master/examples/peripherals/jpeg/jpeg_decode) example). -* ffmpeg can also be used to produce rgb picture. For example `ffmpeg -i input.jpg -pix_fmt rgb24 output.rgb` +Any board based on a supported target can be used, provided it has enough flash to hold the embedded 720p raw asset and the application image. The example defaults are configured for a 4 MB flash layout and PSRAM-enabled builds. ### Build and Flash -Before you start build and flash this example, please put the image `esp1080.rgb` in your sdcard. - -Enter `idf.py -p PORT flash monitor` to build, flash and monitor the project. +Run `idf.py -p PORT flash monitor` to build, flash and monitor the project. (To exit the serial monitor, type ``Ctrl-]``.) @@ -31,27 +29,37 @@ See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/l ## Example Output -```bash -I (1114) jpeg.example: Initializing SD card -I (1114) gpio: GPIO[43]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1124) gpio: GPIO[44]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1134) gpio: GPIO[39]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1144) gpio: GPIO[40]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1154) gpio: GPIO[41]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1164) gpio: GPIO[42]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (1414) gpio: GPIO[42]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -Name: SD64G -Type: SDHC/SDXC -Speed: 40.00 MHz (limit: 40.00 MHz) -Size: 60906MB -CSD: ver=2, sector_size=512, capacity=124735488 read_bl_len=9 -SSR: bus_width=4 -I (1434) jpeg.example: infile_1080p:/sdcard/esp1080.rgb -I (5174) jpeg.example: outfile:/sdcard/outjpg.jpg -I (5284) jpeg.example: Card unmounted -I (5284) main_task: Returned from app_main() +```text +Loading embedded BGR24 image from flash... +Embedded raw image size: 2764800 bytes +Encoding BGR24(raw) -> JPEG... +Encoded JPEG size: 30795 bytes +JPEG_META width=1280 height=720 format=JPEG encoding=base64 size=30795 +JPEG_BASE64_BEGIN +JPEG_BASE64 ... +JPEG_BASE64 ... +JPEG_BASE64_END +JPEG encode demo done. ``` +## Pytest Visual Check + +The accompanying `pytest_jpeg_encode.py` script captures the `JPEG_META` and `JPEG_BASE64` output, reconstructs the encoded JPEG, and saves it as: + +- `dut.logdir/jpeg_encode_result.jpeg` + +It also compares the generated JPEG with `golden_output.jpeg`. This turns the example into both a functional regression test and a host-side artifact generator that makes the encoded result easy to inspect. + +## Replacing The Embedded RGB Asset + +If you want to regenerate a compatible raw frame from another input image, one simple workflow is: + +```bash +ffmpeg -y -i input.jpg -vf scale=1280:720 -pix_fmt bgr24 -f rawvideo main/assets/esp720p.rgb +``` + +After replacing the raw asset, rebuild and flash the example. The firmware will emit the encoded JPEG as base64, and pytest will save the reconstructed JPEG artifact automatically. If the new image is intended to become the expected output, update `golden_output.jpeg` as well. + ## Troubleshooting (For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you as soon as possible.) diff --git a/examples/peripherals/jpeg/jpeg_encode/golden_output.jpeg b/examples/peripherals/jpeg/jpeg_encode/golden_output.jpeg new file mode 100644 index 00000000000..c051b55a5e1 Binary files /dev/null and b/examples/peripherals/jpeg/jpeg_encode/golden_output.jpeg differ diff --git a/examples/peripherals/jpeg/jpeg_encode/main/CMakeLists.txt b/examples/peripherals/jpeg/jpeg_encode/main/CMakeLists.txt index 491dcb7a84f..468dc1f84ae 100644 --- a/examples/peripherals/jpeg/jpeg_encode/main/CMakeLists.txt +++ b/examples/peripherals/jpeg/jpeg_encode/main/CMakeLists.txt @@ -1,3 +1,5 @@ -idf_component_register(SRCS "jpeg_encode_main.c" - PRIV_REQUIRES fatfs esp_driver_jpeg - INCLUDE_DIRS ".") +idf_component_register(SRCS "jpeg_encode_example_main.c" + PRIV_REQUIRES esp_driver_jpeg mbedtls + INCLUDE_DIRS ".") + +target_add_binary_data(${COMPONENT_LIB} "${CMAKE_CURRENT_LIST_DIR}/assets/esp720p.rgb" BINARY RENAME_TO "esp720p_rgb") diff --git a/examples/peripherals/jpeg/jpeg_encode/main/Kconfig.projbuild b/examples/peripherals/jpeg/jpeg_encode/main/Kconfig.projbuild deleted file mode 100644 index 7677cd73bd4..00000000000 --- a/examples/peripherals/jpeg/jpeg_encode/main/Kconfig.projbuild +++ /dev/null @@ -1,18 +0,0 @@ -menu "JPEG Encode Example menu" - - config EXAMPLE_FORMAT_IF_MOUNT_FAILED - bool "Format the card if mount failed" - default n - help - If this config item is set, format_if_mount_failed will be set to true and the card will be formatted if - the mount has failed. - - config EXAMPLE_SDMMC_IO_POWER_INTERNAL_LDO - depends on SOC_SDMMC_IO_POWER_EXTERNAL - bool "SDMMC IO power supply comes from internal LDO (READ HELP!)" - default y - help - Please read the schematic first and check if the SDMMC VDD is connected to any internal LDO output. - If the SDMMC is powered by an external supplier, unselect me - -endmenu diff --git a/examples/peripherals/jpeg/jpeg_encode/main/assets/esp720p.rgb b/examples/peripherals/jpeg/jpeg_encode/main/assets/esp720p.rgb new file mode 100644 index 00000000000..1b1dd554ee4 --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/main/assets/esp720p.rgb @@ -0,0 +1,393 @@ +孳監錓犑叕܏܈児⇑ߎ朤褬oqQODB87/.0+.)2-2-&-%,)//5?B>AKIVTc^idrpӄ大?B66440*/)0'/&0+1,%,%,)-)-/0-.31422/.+/0237;6:EIVZǂ֢hm9>-5'/(&)'/-/-*2*2".".(0(0/1/1/1/1)/)/'1'1)0)0//..8697JH][vzQK<6+/,0),$',2,2'8%6$1%2,3,323232222////+0+0+0+01/1/623/4231:6FBaZyr姧>4>4(,)-'.'.,4+3"4 2'4(5/4/4434351513/3/-/-/,.,./,/,2-2-53648192?+;'F<]S݁Чa\4<19/5/5/001).+0)2)2.2.221214/4/2/2/....-----,-,0,0,/0.//+1-3#4$9-5)85>;gmq}OR@C8.8.2&6**.)-+.+.,-+,,--.-/-/.0.0././,,,,****)+(*),+.)*,-3/1-7250:785OQqsﳽhVO=>+=*)**+*,)+&*'+&-&-'1$.)/,2.1.1,/,/*-*-).).(2'1)6)6+.+./+/+5.2+0,0,OUou紸㵱|oTG,*0.,.+-%+&,$-#, -"/+2+2.2.2,1,1+/+/*.*.(2(2'5'5).).++++.,.,//..5230KLwxrvFGBCJDUOdZj`ᅌ˛ᵽ{zUT5689-2-2*3*3%0&1-3*0.0.0-1-1-1-1,0,0+0+0)0)0*.*.+.+.,0,0-2-281:36677XY|}칺HI:;,0,0*,+-./-.4:=CHMSXvyՓ_a6969.2-1*/*/*-,/..../////////0/00.0.-----0-0-2-2-3-3-3-34,3+2334-3)/YZ͒YI@04/:5$,$, 0 0$8$8--((+),*9472LC^UzpٔWZ33--1/42-+.,-,-,0-0-1.1.2/2/2.2.0/0//2/2.4.4.1.1//..3+6.)*%&'-)/87<;}v~y˷hg<;/*4/....(-',%.&/)3)3((((--...--,21/.1/31KK[[~ΧTO=0@3-&-&&,&,&0'1*,*,1,1,4/4/10101.1.0-0-....,0,00/.-+,,-*+&'02+-/3GK֕UZ3)WM굾@K#',0*.*.,0,0-0-0.0.0,.,.-/-/,/,/+/+/*/*/).(-23./7441HFqo⢢{TK..44+3(0",%/'.'./-/-2-3.10102+2+0*0*.-.-+1+1,0,0-----,,++/+/&1&1>?`aOJ<7:/7,c_zyAB:;-0/2+.,/,0,0,0,0,0,0,0,0-/-/-0-0-0,/+/,0,1,1.,,*3.3.51<8MIYUppϐqJX),.11,-(*0*0,1,1.*/+.0.0/./././..0.0,2,2,1,1,.,.,-+,-0/2,5(1=9@<[Ufd.%=41.-*?1YK㴺_Y?94/72+--/,/,/,0,0,0,0,0,0,0+/+-+-+.+.+.+.,0,0-1,0*+&'"!)(1..+211003993/62+0+0).(-)**+)1)1*3*3-3-3/0/0-3-3,0,0,.,.)+(*-1.2,(-)6,-#B?da۹y1/64%,-4'4"/@29+iu9:78,/-0+,./0..,,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0-0-0)1(0$/$/(2&0'2&1(6*8+2(/2)0'74OLԇ׭EA<8.//0'+(,++++&.'/(4'3,1,10-0--3-3,1,1,/,/*,+-.1,/'))+*+./9854`_yoC9..//'2'2'.%,71a[rjA9,&3-&1%0*2*2/,/,,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0,0,0-3-3,3,3+1+1)0)0)1(0*0*0.+.+5/3->9GBstgk22334040-),()/*0(1'0,.,.1+1+-3-3,1,1,0,0,.,.-/-/&.&.(4(43333;0B7՘<693-/&(+1.42.)%jlȶno3+;3*!-$&3&3*5*5.-.-,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0,0,0/0/00/0//,/,-,-,,+,++0*/(2)3-+-+4+3*?9E?qq̠QU7+:.5061-1+/'.(/,,,,1+1+-2-2,1,1,0,0,/,/-.-.'2'2'9'9-0.1=-6&KLPZ0156),&)12347/QI乿VX570-63*#0)*2)1+5+5,/,/,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0,0,0././/-/-.,.,-+-+-+-+,1,1)7)7)-)-.-/.1,3.:54/nxmbH=94;6/1.0(-).,-,-1-1--1-1,1,1,1,1,0,0,/,/+2+2*6*6+.+.1'2(>>;;ɀTW7:,4(0'+'+97/-YW&*7;*.&*1/0.////-1-1*1*1-/-/-0-0-0-0-0-0-0-0,.,.,.,.,/,/,0,0,0,0,1,1+1+1+/+/+/+/,0,0,2,2+3+3&1&1"-!,.3)./,30=7ICrsϟMJ85789:&+*/,/,/1111-0-0-1-1,1,1,0,0,0,00000././*+*+,,,,4387BEwz.*1-*3&/)+)+84EAҤ{(,+/%1)515152-2--.-.*1*1,0,0,0,0,0,0,0,0,0,0,.,.,/,/,/,/,0,0-0-0*3*3)4)4)3)3*4*4+6+6,2+1)*)*#0#0"4#5(3(3,.*,:'8%<3KB}ıgd4635-2+0+1+1/203-0-0,/,/-1-1,1,1,0,01.1./)/)+**)(/+2..00:583υx9@(/)0/.)(9,@vx:B)1,7(31..+@5>3؃~~-*52.2.2.1.1.1.1/1/1.1.1*1*1*1*1*0*0*0*0*/*/,0,0,0,0,0,0,0,0,0,0-/-/-/-/-/-/-/-/-/-/-/-/-0-0-0-0-0-0-/-/-0-00/0/+,*+,.)+7:ORӓ=@7:+0+0/7'/)0*1+.+.-0-0-2-2,/,/,/,/,0,0-0-0-0-0,/,/-/+-6734ʂss*2+3+3'/5410>=VU{.(600/0/101010102020////*/*/*0*0*/*/*0*0*0*0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0+1+1'0'0'0)249,179_aٯ_d.)72-,-,),),*4*4,4,4,.,.,2,2,2,2,/,/,0,0,0,0,/,/+1-336.1D9y~{EB(0-5)1'/64.,^dy-$5,1)1)1*1*1+1+2+2+/,/,*.*.+/+/+/+/+0+0+0+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)2)2$0%1%0$/)/-38721H@rjohB;/'6.*'*')7)7*5*5,,,,,4,4,3,3,/,/,0,0,0,0-/-/*2)1,004>)L7HC72)/(.(,-151;7֛x*%2-,*,*-,-,---------.-.,-,-,.,.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+0+0(2(2'2(3)-*..),'9.5*]_˜B6>2-)-)*4*4)4)4*-*--2-2-2-2,/,/,0,0,0,0-/-/)3'1%+'-=(:%[Uhq0*4.+.-0()23;7miw(*/1(3'2'2&1(3)4)6(5(/*1.--,..0001./.0.0.0.0+/+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/2-2-././+0+0)+*,.(-'5*4)78CDzȷb\2.2.-.,-)/*0*0*0-.-.-/-/,0,0,0,0,0,0-0-0(1(1"+$-4)3(C<]V?G*&1-,,((10*)\[Ʋx*-03&2&2(4(4(4&2$0%1+2+2//00./-.--........--+/+/+/,0-1,0+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/6*6*4-4-10100/0/1-1-/*,'12/0:=QTѡST:;0*71-/+-*3*3,+,+-,-,,0,0,0,0,0,0-0-0*.*.%-%-././<772usAI19(*-/0-,)::44ϟ-+31),'**++,**++,++***//04,0+-.001-.......--+/+/+/,0-1,0+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/6*6*5,5,4/4/21212121+.),*.-1//..JG|yin:4=7-,.-)2)2++++,,,,,0,0,0,0,0,0-0-0,-,-)/)/+5*4520-B<|v%)/3)/(.3052;=fh+%710-1.3.4/6/4-3)5+8260/304/1/1//000.0.0./-,/,/+/,0-1,0+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,00.0.1-1-0.0.0/0/0101*0+1)1'/),,/9674hmƢhhCC1122)-)-*.*.,/,/,0,0,0,0,0,0,0,0-.-..0.0)4)4+*/.<6A;ה\S&'+,&/$-622.S\ĩcdkldo_jW^PWHLAE9:783636(-).*-*-**,,/,/,/+/++/+/+/,0-1,0,/-0-/-/-/-/-/-/-0-0-0-0,0,0,/,/,/,/,0,0,0,0,0,0,0,0(2(2*/*/,,,,,-,-+0+0%1%1&3&3(/(/202098JI˦r~2648''((*3*3-4-4,/,/,/,/,0,0,0,00/0/3131(2(2((&&612-X]nfH@)*"#%/$.:572ғoy]gOVGNAE:>//--/-1/.+/,.,.,-.-.+0).&1(3,5+4+1*0(,*.*.*..0.0.0.0,0,0-/-/-.-.-/-/.1.1(3(3)/)/+-+-+-+-*/*/)3)3%0%0)1'/----5342OMxv|~EG/)0*&1%0(3(3,0,0/1/1////,/,/-0-02121*/*/)+(*,,))=@VYA@32'+$(+3*2B=543)9/6*6*0*,&&-+2&7&7(3(3*.*.+1+1+2+2+2+2+2+2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/+-97-+VU6677*-*-(/(/-/-//-/-+/+/*0*0,/,/,0,0+/+/,1-2,1+0<=ghUX;>),/2+2(/57EGְg_ME4-6/3-600-1.)2)2&4&4'1'1+/+/*2*2*4*4*2*2)0)0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0),-0+*.-95?;͗}EB+,01)/)/+,+,,-,-,0,0,0,0,/,/,0,0+/+/,1-2,0,0;:43ɤ4657(,(,&.-5:;uvmtCB875)6*-*/,(2'1'2'2*++,+2*1)4)4(1(1'.'.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0'-*0#)$*74/,JHsq;=68+1*0,,***-*-,0,0-0-0,0,0,0,0+/+/,0-1,/+.100/`d}*,57%+'-08*2SSRJA91*2+13-/(**,-,-,)-(,'.)0(.(.',',,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0(0(0"1!0.1.1:.;/}vFK2604//**(-).,0,0.0.0,0,0,0,0,0,0,0,0,/,/.-/.<@{QY$'.1$)#(2;'0†ghEF1.:73-0*.,.,..00,/*-),),'+'+,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/*0*0%6%6*1*13#/C5hZ;>:=+*21)0(/,0,0....,1,1,1,1,0,0,0,0,/,/,.+-7;FJyz89),+.(,&*4=9BƻihGF3,3,447720/--+.,+-+-).).,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/-1-1+6+6)2)2+#,$9.3(munp@B8800'1(2+0+0/-/-,2,2,1,1,0,0,0,0,/,/-/*,,1',yVO=612./+-+-2:aijmJM362585850,1-,/,/+3+3-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0////3131)0)0).&+3254=<]\⵼uv..22(3(3+/+//+/+,2,2,1,1,0,0,/,/-0,/,/*-$'*-MXA3C51212+,*+6@ُ|yc_[WUORLRKTMRKRKTOYT_]igzӈᖟܩck8@.-542.2..1.1,7,7-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02/2/8,8,*/*/%8#6.7/88,8,efTR42'4'4*/*//+/+,2,2,1,1,0,0,/,/-0,/,0.2(*)+=Gr|vy3096"').(0$,om|vSI?57,<14231.0.0/001/0/0.0-/-/+-*/*/1589-<0,+0/$3&5$2#1+.,/1+1+1,1,----,/,/,0,0,0,0,0,0,0,0././1-1-,/,/)2*3/5+11-3/@7SJ׽[g,/-0,++*+0,1(5(5,1,1-,-,,+,++/+/'/(0.-,+88MMݾPZ-2/4#%+'4,9ܮgd@7<31&1&0'0'+-,.(/(/)/)/)/)/)/)/(.'-&)&),--.320/68=?ORZ]zΘf\F<2-50&-'.!/-'++/4.3-2-2-----,/,/,0,0,0,0,0,0,0,0,0,0+0+0-0-0-/-/+.,/,/+.:07-efDA?<0)0)+4)2'5'5+2+2-,-,,+,+*/*/%.%./.0/5/3-}>G01/0$('+(5CPgh=>>?3322,/.1/2-0*/+0*/*/*0*0*0*0*0*0+0*/).(-..//638587437575?8A:QNmj➡黾KH740(1)+,()'+)-(/*1,3,3,1,1-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/7542>9faJG.)50+.,/)3)3*3*3,0,0,/,/*1*1&.&.0101611,Wd\c290.0.++((1>ivrx89231414&-*1&0%/#/$0(/)0+/+/*0*0*0*0*/*/*0,2,2,2./010..,3.4/40407(4%3(4)C@OLnr•|{I=>22(2(,1-2"3"3&6&6.4.4.1.1,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/-2,1801)ql736221.-*0+1+2+2+3+3+2+2,1,1'.'.0404402.@E?E06.+-*-,)(?LAI5=11--*.)-)5'3"0"0#1%3+2(/+0+0+0+0+0+0*/*/+0-2/3-1,/-0..---+-+-*,)/)/)2-1,737375;9SOws\X=2=2-2.3 2 2"3"3-4-4-/.0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/&0%//*3.@9rkjh=;2,2,-.-.+0+0*3*3,3,3,/,/).).16162//,<8[W,2,2,)+(1/+)Zew{AE,4(0%%''+/(,'0(1'1(2(0(0).*/+0+0+0+0+0+0*/*/,0,0.0-/*.+/*-+.),(+(+(+'/*2.3,1..113/3/5+1'=8VQ⚚upTO/247!-".!+!+,0,013.0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/+. ,++/*.511-}yff0(=5.).),,**)1)1+2+2,,,,*-*-17171.0-;37/۲gq'-(.*)*)742/ׅ8271(-',*,*,-/-//2/2/0/0/,/,+.+.*0*0*0*0*0*0*0*0,0,0....-0-0+1+1)1)1'2'2&4&4'2(3+0+0/./.1-1-*+*+BGLQԊʺWX>?&'-.%'$&22//,/.1,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/#,#,'5'52402JBɂzJ@=31*1*-)-))/)/*1*1.*.*,.,.1515/..-81-&㇌CM).+0,-'(95B>ׯutCB+#2*())*,0,0020232323/3/2+2+,.,.*0*0*0*0*0*0*0*0,/,/.-.-,1,1,3,3*4*4*3*3'1'1(0(0*0*0,2,2.4.4%0'2-6$-?9RLҏܽyy934.3.+&-,21*-.1,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/)+)+'9'9+2/68/=4ڜE=5/4.)$.)%+'-*0*0.).)....1212,0*.4/*%]a4>+0(-+2&-97XV|5847.*.**).-,2,2020240403/3//-/-+/+/*0*0+0+0+0+0*0*0,/,/.....1.1.3.3-3-3-2-2*.*.*-*-+/+/,3,3,7,7'3&2&-&-2.0,C7RFوѺQL61>943/.,/-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/1,1,)7)7'1$.813,RW~78561--)&-&-*2*2/,/,/./.2-2-+1,2((00IJgr4?-2(-(4'3;;uuqr?@'/,4*.'+2,60)1)1.1.12/2//./.(1(1)0)0+0+0*0*0*0*0*0*0+0+0-0-0/1/1/1/10.0.1,1,////.-.-....-/-/-3,2.01302-/(++.31,*86MKюVX:<./23.1+.-/-/,/,/,0,0-0-0-0-0,0,0,0,0,0,0,0,0././9-9--2-2$-$--,/.74TQPY2;.-+*(0&.)5)5/0/00/0/2)2)(109%**/:9vuLT2:,0,0)3+5?>5162%/&0*3+4834/'0(1+.+..-.-,/,/%2%2(1(1+/+/+0+0+0+0+/+/+0+0,1,1.1.100001+1+2)2)02020000/,/,.*.*.,-+4+5,100/&2'3*2'/4310DBXVڠox0224.0,.+/,0-0-0-/-/,/,/,0,0,0,0,0,0,0,0,0,0.0.0;/;//-/-$+(/)-,0824.׀vDO)(21%/&0)5)5020200001(1()3(2+2*142XVA>63/,1.15*.OQĥUU*)-,+-)+/2/2,/,/,/,/,/,/-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0-0-0-/-/-/-/-0-0-0-0-/-/-/-/-/-/-/-/-0,/,0-1,0+/-0-0,0)-5?Xb~tG=0*4.'2)4,206.(.(++++*2*2-/-/,0,0,0,0,0,0,0,0././-/-/,/,/,/,/-/+-=8vq:0B8$/(3(.(.0101-0-0-,-,,.(*-2+0-8-8ڦ3/40/*6134./_d˽ab23,.+-(+*-0202*.*.,/,/-0-0,0,0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0,0,0,0,0,0,0,0,0,0,0,/,/,0,0,0,0,0,0,0,0,0,0,0,0-0-0-0-0,/,/*/).-6#,FK;8300505)-.2,+,++.+.+2+2,/,/,0,0,0,0,0,0,0,0,0,0,0,0-0-0-0-0+.+.40;7䖤ha5.*/+0(.(.././-0-0,.,.----.2+/(5!.،t*)32.)505432x78;<(0'/(/)00303+.+.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,1+006/588==jhƨRV1/7531-+(/)0+2+2.0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/+.53.,[_OQ--..(2(2+/+/-1-1,/,/+--/,1+0-6'0uwdm++11/+1-8484יe`-126"-(3%/(20404,.,.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,1,1-3.42020;8HE܍NG<51,-(%2&3+4+41.1.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,//102<7a\0,62*2*2(/(/,2,2,0,0+-.0,0+/)0%,ZYXa-/+-2/-*:3:3պ~A<,2%+"2 0(4(40404,.,.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/-1+/+/-1()'(,.(*CGhl۶mg+,23&1%0-0-02-2-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,2-39090\Y:7-1-1&/&/,2,2,1,1,/-0,/,/'-*0FEGM+.*-/-.,;4D=QL61(.'- 1.)5(41313+/+/,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0,.,.%,$+&-&-68/1XVġJS09)--1.'0)1+1+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/+5(21*/(LMGI0-30%/(2+2,3,1,1,/,/+.,/*-,/CAtr<@(.(.,,..B;_X8350',',0 1*2*21111*/*/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/,-,-"-"-%/!+01454+:1ٌ[i.,200%2'4/2-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/(3&1,)1.9:TU5.70&0)3,2,2,1,1,/,/,/,/+.*-<;SRxx::'0&/*,+-G@zsci/+3/).).#2#2,1,11/1/)0)0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/+-+-'1'1'1)3*,)+1*.'GDkhUR;82(7-/-/-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/)4,7'*+.56./MH:5)1'/,0,0,0,0,/,/,/,/+.+.74=:gf98&1$/).).GBAC/-20+/,0%2%2/-/-2-2-'2'2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0+/+/*/*/.1.1-./0/1+-(,%):662gjce1.85//--+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0(..4*0)/741.HGEG*./3-/+-,/,/,0,0,0,0+/+/5353۾WU75&3$1)/(.ID}970/.-0202(2(22+2+3+3+%3%3+0+0,0,0,0,0,0,0,0,0.0.0-0-0,0,0,0,0-0-0-/-/-/-/-0-0,0,0,0,0,/,/-0-0-0-0-0-0-0-0-/-/-/-/,0,0,0,0,0,0-0-0*0*0*/*/4-3,9/8.'++/#5!33,:3E>[TշGN07(+*-,0,0-/-/-0-0-0-0,0,0,0,0,0,0,0,0,0,0,0,0')*,-4-41*.'@7_Vep%$.-++++-.-.-0-0,0,0+/+/302/ߤDA85&4#1).',SQd_50.1+.0101+1+10,0,0,0,(2(2,0,0-0-0.0.0,/-0,0,0%-%-&,&,..,,+,+,(+(++1+1)0*1+.+.+,*+./-.-/-/,0,0+.+.+.+.*/*/*2*2,1,1,/,/,0,0,0,0-0-0+0+0+0+03-3-4+3*/3.20%6/2,/813,YVPY/'5-,,..)/(.)0)0,/,/././-0-0,0,0,0,0,0,0,0,0*.+/+3-5.'0)?53)Ն<53,.-,+*/).,0,00/0/././20/-ڐ1/97)2#,,-'(deQI3+*1(/,/,/-/-/,0,0,0,0-/-/-/-/////00//,0,0-2+0+.(.!'0)2+*'-*-0,/+4+4'5'5*+*++',(0-.+.1/2+1+1)-)-(,(,'0'0%6%6*2*2-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/,0-0,/&5&5(+(+/1;=ᘢN9D//*,'%0'2#2#2*.*.1/1/-0-0,0,0,0,0,0,0-/-/*2*2/3/32-2-1,*%UWrgC81/-+$0%1+1+15-6.1.1.45/0Ո1/86'1",./'(moE=91&-&--/-/,0,0,0,0,0,0,/,/...../././-.,/,/.2,0&1%01357DAKHAC7911553377-3,2+.,/-.,-+0*/*4*4.2.2,2,2,1,1,/,/*,*,,.,.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)/)/).).3401OOG>/.32).+0&0$.*/*/////-0-0,0,0,0,0,0,0-0-0*0*0/1/10,/+/*.)>?YZQJ-,21$/(3*/(-3.3.....24.0~}1/86$.!+0.)'vx>49/&.'/-0-0,0,0,0,0,0,0-0-0.0.0-0-0-0,/,0,0/2.11414a`ō鯯Ꝣ㒗؈|xe]ME3827/4/4/326-3/5-3)/.+/,/0/0/3/3.0.0-*-*----,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/*)*)*0*00033:2LD١578:2/*'*.'+*0*0////-/-/,0,0,0,0,0,0,0,0+-+-0.0./+/+-*/,5689ʜ-,87)3&0'-'-2.2.,.,.02-/pn1166",!+1/*(~8-9.(/+2,/-0,0,0,0,0,0,0-0-0.0.0,0,0,0+/+0+003.1=>depwU\?D6;*+.//,/,/&0'0,0,/1/1-2-2-.-.-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/+)+)*0*0.-+*:/3(JJej6;7.6-)&+(*1*1////-/-/,0,0,0,0,0,0,0,0,,,,1-1-/,/,()()4624XRFF66'/&.',(-.-/.*.*..1,/ba1256+ ,51-)0&:0'/)1,/-0,0,0,0,0,0,0-0-0.0.0+/+/*0*0+0+012,-Y]c^LG:.4(.'0)/+.*,,--*1*1(4(4,2,2,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,-,-*.*.,+,+2-7244BB՞^e5(=0+%/)+1+1,/-0-/-/,0,0,0,0,0,0,0,0+-+-1.1.0.0.&-%,26(,A;~x|}AB)/-3$*'-,.-/(/(/,0+/YY/214!-".93.(ۉ.%7.&/&/-0-0,0,0,0,0,0,0-0-0.0.0*/*/(0)1-2(-....{ph=E3;-/13-+,*(-(-"2#3)1*2-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0.3.3+*+*)*+,/5/505*/NIB7;02,2,-2+0'+-1,/,/,0,0,0,0,0,0,0,0+/+/10100101$1$1(0'/96C@ڵ``)-7;%*).,.-/(.(.*-.1PQ)-04$0#/6//(ؑ/'7/&0%/,/-0,0,0,0,0,0,0-0-0-0-0)0)0&0$.*/+0/-75捙o?J4?/.43*)('%-'/*0(.-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-1-1.6.6,),))++--:+8*1)0<2LB߸xJC502-+.-0,2(.+/,0,0,0,0,0,0,0-/-/+1+112121313%3%3&1&13142v~1357)+*,-1-1*.*.(*+-EG*.-1"-%080?7㦧.(5/#/$0-0-0,0,0,0,0,0,0-0-0-1-1'0'0$.(2)/(.0-74ፗQS:<0-52,,))(++.-0-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-1-1-6-6,+,+*-+.,7+6'0'07-0&WU|}--::-.'(*1*1,0,0,0,0,0,0,0,0-/-/*2*222223131'4'4(1(10./-ELTS87,,,,/1/1+/+/)*+,=>,2,2,"/7.@7⭭,'2-."1-/-/,0,0,0,0,0,0-0-0-1-1&0&0$/$/*0.4>:0,pt]^891,83++..,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0,0,0-/-/-0-0+0+0'1'12.0,?:`[KN58-,.-&1'2,0,0,/,/,0,0,0,0-/-/)3)31/1/4-4-*1*1,0,0.,,*17]c|z;9/-1/1223-/-/)),,:ִPN/-203333////''**9?56%0(3+/,0,0,0,0,0,0,0,0,0,0,0-0-0-0-0+.,/*.*.21/.SRvunq/157////+//344///113'2(3/,/,0+0+*.*.#4#4,0,0,/,/,0,0,0,0-/,.,5*3,+-,32>=⣰YNB71.,)-/-/././/,/,,+,+(2(2+1+1,0,0,0,0,0,0-/-/)2(1*..2IG@76---+0+0-*/,AJHZX`^mi~z砙HM41413131-+1/02,.(0(0-.-./-/-,/,/'1'1,0,0,0,0,0,0,0,0,/+.,4)1&(,.311/ZaE@.*3/,.,.-/-/.-.-----+0+0,0,0,0,0,0,0,0,0-/-/)2'0',-2>:hda^85(4'3+0*/,0,0:>uz+0.3',).2288৮NK30.0+-+0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,--.,,*--,,,*205-4,E8G:jYЄsꠔa]?;2-721-0,)*)*(.(.-/-/////-/-/+.+.,0,0,0,0,0,0,0,0-/-/)0'.(.*01256AAppst4.?9,-,-,/,/-/-/...././.-/-/,0,0,0,0,0,0-/-/(2(2(/$+A:JCسDG'0.7(-',+5)37@z-1.2',).1098⧭d_83,(.*+0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0+.*-(.(.*/+0.2-1,+*)2*1)A1:*>0RDzrӟ}y;:321/.,*'-*',(-,0,0.1.1././----,/,/,0,0,0,0,0,0-/-/(.(.,6+5-0-08473̎WO@8----,.,.,1,1/0/02-2-.-.-,0,0,0,0,0,0-/-/'1*4&."*<36-}`h'++/'*),(1(18B|/203(+),2165ᠦ~>;/'0(,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2+2*1)2(1(0'/&)'*30528260=7@:XXrrգSY,,99.+)&(,)-+0+0,1-2..../+/+,/,/,0,0,0,0,0,0-0-0*/*/%1$0*.)-5/60TYKC.-.-,.,.+1*0.2.24+4+/-/-,0,0,0,0,0,0-/-/)2)2$+'.4-0)W^1111*)-,%*(-<@|/124*++,32/.ܐGH1)2*,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,00/0/0000.2.2+3+3)2)2&2&2$0#/)-)-..--3412GKbf豪RW7<.*2./1.0-1-1+1,2....0,0,-/-/,0,0,0,0,0,0,0,0,/,/(3(3'/'/-(.)6:`dľmg/023././+1(.-3-34+4+/,/,,0,0,0,0,0,0-0-0*0*0&.&..--,=Cx~@=30+&0++*.-EB0044,.,.12()هhn-&5.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02,2,4*4*2-2-////-1-1'3'333"/"/&+%*-/-/,-)*JCibؤks94<7121203/2+0+0-/-/.-.--/-/,0,0,0,0,0,0,0,0-.-.)1)1'/'/,*+)7:36Ȉ>>77-,-,)-(,+3+32-2-/,/,,0,0,0,0,0,0,0,0,/,/*/*/*.*.48FJkh74604.1.-*SM2143--..34)*܂5173+0+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01+1+3)3)1+1+/,/,....)0)0"3"3$/#.'.'.&)'*,-,-8620A@edٱnlEC449934-.)-*.*.*.,0,0,0,0,0,0,0,0,0,0,0,0/./.,0,0(1'0'+)-88//QReg686150(+*-)3)3////.-.-,0,0,0,0,0,0,0,0.-.-.0.0(2(204*.զ?@2-4/=;42]Z/.32,*-+44--|MJ52+/+/,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0....0.0..-.--.-.,.,.+/+/*0*0+1+1*0)/*.+/+.),(+(+7452OGwoĿ{{852/2244,/(+(/(/)2)2,0,0,0,0,0,0,0,0,0,01.1././.(2(2*4'1+*21B;rkEH5.5.%$*)'4'4,1,1././,0,0,0,0,0,0,0,00+0+2222%6$5.0#%ry]c843/47GJƊ2/74**((01*+s|ww;;+/+/.1-0-0-0-0-0,0,0,0,0,0,0,0,0,0,0,/,/,2,2,3,3,1,1+0+0*0*0-/-/1-1-0101.2/305.3,1.3&-&.*/+C7@4d[ig643074()*+'-&,(2)3,0,0,0,0,0,0,0,0,0,02.2.0-0-(3(3'4+80/.->2;/ؤnr2+4-+)*('2'2,1,1-/-/,0,0,0,0,0,0,0,00+0+2222&8&8*+!"NREChf蒚ﱹ/(;4#-",)3(2jlcb(,)-2.-)2,2,0,0,-.-.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/-0-0-0-0-0,/,/-0-----.,-1201698;w|ܹy5,7.----+(*'*--0,0-1,/,/,0,0,0,0,0,0-0-0-/-/,0,0+/,0,/+.0.*(]eB=72.4)/.-.-1-1--1-1,0,0,0,0,0,0,0,0,0,0.0.0,2,2(.*045rs4,=5%0$/*4)3dd(-/4*$1+1/.,.2.2-,-,-/-/,0,0,0,0,0,0,0,0,0,0,/,/,0,0-0-0-0-0,0,0,0,0,0,0,/,/,/,/-0-0....,-,--/.025478:[]⽸jg:731.,+**)02-/,/-0,0,0,0,0,0,0-0-0,0,0,0,0-0-0-/-/,/,/..,,=A}c_84/3*./,/,0-0-,1,1,/,/,0,0,0,0-0-0+1+1-/-/.0.0)1*232RQ@:;5'1%/(1'0XXX`8@1)4,&,)/*7*7.*.*-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0.1.1,.,.--..,*4284/+]VÕhq0-74/5%+,0-1,.-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0--2287FEGE-,/.,.,.,/,/,0,0,0,0,0,0,0,0,/,/,0,0-/-//0./)/*06554գTN:4&.&.'0%.JKPW0)3,%0&1(9(9/*/*-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2.2-/-/,++*,(+'1,3.5/<6֎UU661818-/*,+.,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-+,720+ېqq,&5/*.*.*1*1,/,/,0,0,0,0,0,0,/,/+1+1-/-///..)/*043,+}fa>9'.'.)1(0CC4275&3#0&4&4/+/+-/-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1.1-/-/++((+*.---++/.*)=AptRU),5801,-+.,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+.),4./)ZY8.:0(0(0(2(2,.,.,0,0,0,0,0,0-/-/+1+1,/,//./.).(-.-,+XZzu>9+.,/+2)0@=}zjn<@+2*1(-',1/.,,/-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0././....*,-/)-(,'/'/'.)06813{z<8730/-,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0*/)..*-)A>{xYO8.)4$/&1'2-.-.,0,0,0,0,0,0-/-/+1+1-/-/0.0.)1'//-.,IJA<+-,.+1)/<9`]{./341,0+.//0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-.-..-.--0,/*1*1'4'4$/"--,*)EAmi{u?9510,+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0-0-0*1*1,-./85JG~C;(4%1(1(1--..,0,0,0,0,0,0-/-/+1+1-/-/1-1-(2%/**))<=^_JF+,-.+1*0:5E@da@=.&91.103,0,0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/+,+,././0101.4.4)5(4)3'1,,005522ub_6150-0-0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0-/-/+2*1-1-1;650Й^[!-(4,0*./.0/,0,0,0,0,0,0-/-/+1+1-.-.1-1-)3+5).(-99==XT+)/-+0+0;683zx<7?:15,0,0,0,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/)-)-././21211111+1+1,0+/+--/+1(.=HxHB:4.0-/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/,2)/14(+<37.ce,$1.+0-1/20,/,/,0,0,0,0-/-/+1+1-.-.1-1-&3'4(/$+5645ֶc`(%.++0,1;391֦quCG%,07,/+.-0-0-0,/-0-0,/,/,/,/-0-0,0,0,0,0,/,/,/,/,0,0,0,0,0,0,0,0,/,/(/(//0/050504-4-.*.*4-5..2,0#2%41919͏wr;6+,,-,0,0,.-/-0-0,0,0,/,/,0,0,0,0,0,0,/,/-2-2/2-03&7*DB*7"/0(4,2/41,/,/,0,0,0,0-/-/+1+1----2-2-'6'6#,%.3513זtq**//,1*/420.؃SP30()-.)+')*-+.+0).+0-2,2+1+/+/+/,0.0.0/0/0.0.0-/-/-/-/-/-/,0,0,0,0*/*/.0.020202-2-.*.*2,2,-5-5'4%201()OOee,+10./+,-4+2+.+.-/-/-1-1,/,/,0,0,0,0,0,0,0.2).160%6+=8\WIU)5/)0*0011,/,/,0,0,0,0-/-/+1+1-.-.0./-+5)3#+)1/1*,qn4905-3'-)1#+fex65.-&',-$(!%%+(..5-4*4*4)/(.),*-....11110101-/-/........,0,0*1*1-0-0,0,0,/,/,0,0,0,0-1-1,6,6.2.25,6-55EEϰ<:755/,&+7(4(-(--.-.-3-3,/,/,0,0,0,0-0-0*-*-)1(02/2/6194ᮼ}7B,/'*-0+.,0,0,0,0,0,0,0,0,/,/,0,0,0,0-/-/-0-0,-,-HI?B14+./2*0)/WVei9=9=/304(,&*&&&&'**-(+'*&(')*+*+*.*.*1*1+2+2-1-1-1-1,0,0+/+/,0,0,0,0,0,0,0,0,0,0....-3-3,1,11*2+<:/-jpil:=5.4-)2*3)/)/-.-.-2-2,/,/,0,0,0,0-0-0*.*.*1*12.2.2-0+܁BN,-/0-.-.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.+-66NM32)+/1(,,0EBim@D:>+-,.*****+*+*,*,*++,'+'+%,%,&/&/)2)2*3*3+2+2,/,/,-,-,/,/,0,0,0,0,0,0,0,0.,.,-0-0,0+/-'-'8563:=y|QY/':2-2,1'0(1-.-.-0-0,0,0,0,0,0,0-0-0*/*/*3*32-2-5/3-^g[f+*21+,-.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.88rrkg:6+,-.)+-/<7wr||OS;?+1.4/203/./.,--.+,,-(,(,&-&-)0)0(3(3)3)3+0+0-,-,,/,/,0,0,0,0,0,0,0,0.+.+././,0+/+)20('('66BB٫5,90----)4)4-/-/-/-/,0,0,0,0,0,0-/-/*0*0+4+41,1,2,0*CJ/,2/-,.-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.66NNC=-,-,-.,-93YSu]`SVMLHG==::20421032//..+,+,(1(1(2(2+0+0....-0-0,0,0,0,0,0,0,0,0.,.,././+2+2,.*,(+'*44''fk̴QH=4/+.*)4)4.0.0.-.-,0,0,0,0,0,0-/-/*1*1*4*40,0,-(1,9=tx9540/.-,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.6699ԼQK/-0.+,,-40@<٫wtc^QL<6<690;2/).(,.,.&0&0+2+2.1,/,/-0,0,0,0,0,0,0,0,0..../0/0-4-4*0)/'-'-,.(*?AqsGA+'0,*4*4.0.0....,0,0,0,0,0,0-/-/*1*1*3*3.-.-+*-,::KKRO:7-,.-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/+.1223ךpi-.01*+-.4253ۈqgE:B74,3+1010(/(/*0)/.3.3-0-0,0,0,0,0,0,0,/,/,1,1-3-3/3/3,2,2(0(0(.$*9;68ӯ__.,20*2*2/0/0.-.-,0,0,0,0,0,0-/-/*1*1*1*1././(*)+5364ԢxvB@,+.-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+/*.04,0|.215,/),22,,_cȼ{JH:83445(-+0(-(--205-0-0,0,0,0,0,0,0,/,/*2*2,2,201010202+1+1(/(/44//u{.-54+/+/0101....,0,0,0,0,0,0-0-0*0*0*/*/-1-1'/(061,'{zGG.-/.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0+0*/,3&-e`:A07.2(,/1+-JMĘu};tqps&.(0#/*64/+&mwPO-+1/1.1.$1$1'/'/1+1+././+1+1-0-0,0,0,0,0,/,/,1,1,,,,620,JS5,;2'-)/*0(.-0-0,0,0,0,0,0,0,0,0*1*1+.+.,-/0.2,0/4DIIK46(.(.(-(-3.3.0000)/)/-0-0,0,0,0,0,0,0,0,0-.12=8b]*6.:(6%301/0HFJE@;0,0,"0"0$/$/0-0-././+0+0,0,0,0,0,0,0,/,/,1+002,./+0,:?}E?82'-(.)/)/-0-0,0,0,0,0,0,0,0,0*1*1+.+.,,11.0,.2312۴WY68)/)/'-'-3.3.0000(/(/-0-0,0,0,0,0,0,0,0,0*/*/;3VNAM/;+5$.,1.37-kaHA1+3-#0#0#.$/////////,0,0,0,0,0,0,0,0,/,/,1*/*-,//,2/?@VW]Y:6+1)/(0)1-0-0,0,0,0,0,/,/,1,1*1*1+.+.-,0/,,..21-,ޘkk99+/+/(.(.2/2/1010*/*/-0-0,0,0,0,0,0,0,0,0'.*1:0D:qy5=+.,/,3+2=1G;7171'1%/%0#./0/0.0.0,/,/,0,0,0,0,0,0,/,/,0/3*.+/-,)(97;9Ҥ|zB@+2+2'/)1-/-/,0,0,0,0,0,0,0,0*1*1+/+/.-/..,0.1..+@=,0,0(.(.1/1/1/1/+/+/-0-0,0,0,0,0,0,0,0,0(/+2;18.ֱIL,)0-'.)03+3+脋暕䖑誥b]?:,4+3(2#-/1/1-1-1,/,/,0,0,0,0,0,0,0,0-0,/+/+/),),741.׀LK(-+0'0(1-0-0,0,0,0,0,0,0,0,0*1*1+/+/.....,.,0,.*jhKE.0,.'/&.0.0.1/1/+/+/,0,0,0,0,0,0,0,0,0,0+0).:1H?ټst5/82(/(/-.)*T\rzSOIEG8D5H9K9(.&,,6%/=_^԰:954--....//,1,1+/+/-0-0,0,0,0,0,0,0-/,.*0*0%1%1-.+,JCuw*-*-'1(2-/-/,0,0,0,0,0,0,0,0*0*0+0+0.0.0/./.0--*JHǾ`W-.12)2'0--..0/0/,/,/,0,0,0,0,0,0,0,0,/+.9630^\[ZA@$)"'"3$574DAݸGB500+,',,++)..3.2(,-+20<3:1QGie<81+/)0-0-*0*0*/*/-0-0,0,0,0,0,0,0-.,-)/)/"4"4+-+-E;})++-'0(1-/-/,0,0,0,0,0,0,/,/*/*/+0+0.1.1/0/00./-IFre--11)2'0....1/1/,/,/,0,0,/,/,/,/,0,0,/+.:2<4ٖMK)-'+!6"750/*~UT1&7,*$)#$*%+$5"3&6&6,2-34(2&>-G6ҜPK0(0(.,.,+0+0+/+/-0-0,0,0,0,0,0,0-.-.+0+0$5$5*.)-A7h^()./*3'0-0-0,0,0,0,0,0,0,/,/*/*/+0+0.2.2.0.0/..-A?~|{2121'0%.././1/1/-/-/-0-0,0,0,0+/+/,0-/-/<4ZRsj-../#3$4*.*.LJ?H+444--.*-)+.,/,2,2,2,2,/,//,*'50.)GM~|.'81$/$/,2+1/-0.,0,0,0,0,0,0,0,0././0000+-+-%3$265HGBG49,.*,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0+.,/<=ef6,8.%-'/,/,/0000....////-3,2-4,3(+,//+-)QP3322'2&1+4%.;9eceh#-,603),-+.,-0-0-1-1-1-1,/,/-..///11-3\b<64. +!,,1-20.0.,0,0,0,0,0,0,0,0-/-/0000-,,+$2%345;<۪W^3:-/*,,0,0,0,0,0,0,0,0-0-0-0-0-0-0,0,0,0,0,/,/98^]5+9/)2)2,/,/0000....././*4*4)0,300,,511-ڇ^`8:&,%+,6(298<;ՙGG*4*4'++//.-,,/,/,1,1,1,1,/,/--11)+/15;6<ΓVR3/$-$--1-1/./.,0,0,0,0,0,0,0,0-/-/0101,-,-%1%15410֍kq39/0+,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/75TR4+8/+4(1,/,/0000.,.,.0.0&4%3&-")0,51A=PLDI*+,-(2)346(*X]\Y=:-7'1&.)1+,-.,/,/,0,0,0,0,/,/-/+-.2+/05.3im{y@>*1)0,0+/-../,0,0,0,0,0,0,0,0-/-/0101----%0&130.+z|x~6<-/,.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/65KJ7/7/)2'0,.,.0000/,/,-/-/ 4 4#+ (81/(ROv~-*85)..3)/*09@ovC?73$.%/'0'0,--.,0,0,0,0,0,0,/,/,0+/*2'/-0-0VWQR(-*/+.,/././,0,0,0,0,0,0,0,0,/,//1/1.,.,'0*30+.)nn=A()-.,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/85HE?9;5)3)3,.,.0000/+/+,/,/55!)%->5;2דDC43-+.,*3*3399?ܵ;582"-"-'0'0....,0,0,/,/,/,/,0,0,1,1&/'0.1),EF^a$%./.0,.03-0,0,0,0,0,0,0,0,0,/,//1/1.--,'0(1/*-(aaEI()./,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/64CA㳶EA73*4'1,.,.0000-*0-*-*-!6!6+1&,=4jaDF5.5.'/&.-2$)fh0+61!-!-*0*0....,0,0,/,/,/,/,/,/,2,2'/'/(+),FGuy+(30,.)+.3-2,/,/,0,0,0,0,0,0,/,/.0.0/-/-(1'0.*-)VWMP-,/.,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/,/2053ۣKI42*4)3,.,.0000.--,+--/)7'537/3e^ôim1,61&+.3'(01==,'72 .!/,0,00.0.,0,0,.,.,.,.,/,/-2-2'/&.',).EG6161*+)*,2,2,/,/,0,0,0,0,0,0+.+.-1-10.0.'1'1-*,)MPQS--..,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.2132ܜVU54%0'2,.,.0000-..///))/22556JK̴DC7610-,,*,*<;@?͠/,52"1"1/0/00.0.,0,0,.,.,.,.,0,0.2.2*/,1*0&,>C:471)*./.5+2,/,/,0,0,0,0-0-0+.+.-1-11/1/(2(2++**DKQS++00,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.028:䙡]^67%0'2,.,.0000,/+..,.,>6<4OKsy9?/$-"83*%5599[b531/"3"320202.2.,1,1,.,.,.,.,0,0/2/2,/-0(0%-BH<29/()-.+3,4,/,/,0,0,0,0-0-0+.+.-0-01/1/)2+4*+*+AIUU++00,/,/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/+..147Ꮩ[]46&3&3,,,,0/0/*0*0,+10?,B/ً^g5*3(,(1-1.3097[Y?E39&5%42.2.0+1,,/,/-.-.----,.,.-1,0)-)-,.,.QY>792(*(*(.+1,0,0,0,0,0,0-0-0+.+.-0-00/0/)3+5,++*@FZ[--00+/+/,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.,.23,-م``99/3*.----1/1/0//.908/I5kGA;5//$$3-3->/6'ᏓL[5D/7.61)2*/*/*----/-/-/-/-.+.+)-*.&.)192-&aj@>86*1#*+-*,-0-0,0,0,0,0-0-0+.+.,/,///..(3)4/+/+BA]^*+01*/*/*0*0*0*0*0*0+0+0,0,0,0,0,0,0,0,0,.+-31)'~jh<:3-0*,.-/11118.4*C2D3{oɽ|C?-*2/+&2-3.2-KK|AE1065.*-)//--0/0/00000/0/0.0.*-.1#'(,;751тCA86(/%,+-)+-0-0,0,0,0,0-0-0+.+.,/,/////(3'2.+2/CC\]**00*/*/*0*0*0*0*0*0+0+0,0,0,0,0,0,0,0,0,.,.42)'줧ۊ愇yyۂ݅Ӌus.(@:*')&,206;7EAϴaZ5';-,,**-2-21111111111111111,.+--/,.96a^BA76(.(.-/*,-0-0,0,0,0,0-0-0+.+.,0,0//..)4)4,*.,CD\\**00*/*/+0+0+0+0*0*0+0+0,0,0,0,0,0,0,0,0,.,.42*(؃ZR:2./+,#1!/73,(aa³O;>*,/,/,2+1////.0.0.0.0/0/0,.(*01+,RQ??55(/(/,.*,-0-0,0,0,0,0-0-0+.+.,0,0/..-)4*5-,*)BD[[)*/0*/*/+0+0+0+0*0*0+0+0,0,0,0,0,0,0,0,0,.,.43-,يTM/315) /(*.0:7]ZvN=1627+1+1+,,-),),)-)-,/,/,-013456ϒ9933'1(2,/*--0-0,0,0,0,0-0-0+.+.,0,0/./.'1(21/+)CFYY*+/0*/*/*0*0*0*0*0*0+0+0,0,0,0,0,0,0,0,0,.,.3300ې3;5=)!+%-$,502-ro9<1403/2)*,-&*)-)-&*'+)-11..HJxz5555&/)2+-,.,0,0,0,0,0,0-0-0+.+.,0,0/./.'1'10/,+FJVV+,/0*/*/*0*0*0*0*0*0+0+0,0,0,0,0,0,0,0,0,.+-2367ߚhneWB@75,)-*!+&00+,'A@rqDD3+3++-)++0+0+0+0+0+0+0+0+0+0,0,00.0.....&/#,2/-*qyy{;=/*0+.,.,,.,.,0,0)1)1+0+0-/-/+1+1*1*1-.-..*.*16JO~{;8>5:1Q\PP4&5'$+$+*.+/6846nrUV:;2+2+,.,.+1+1*/*/+0+0+0+0*0*0-1-12,2,....&.$,8271㈎hk7:.)0+/+/+-.-.,0,0*1*1,0,0....*1*1(3(3,/,//)0*3:MTx34./*(.,.>>NѯGB=8)0(/,4+3,*,*=6XQ඿4;5<+-+-,0,0+1+1*/*/*0*0*0*0*0*0,0,02-2-/./.'.)073=9࣪SY39,/-0-1-1,1,1-0-0-0-0.-.-.-.-*1*1'3'3*1*1-../69TWqzEN&+/40/,+4062icMM<>68*2&.(*-/3-.(ejqy"-,7#.$/-1-1-1-1*/*/*0*0*0*0*0*0,0,01-1-....'/+310GF9B/8.5)0,4,4,1,1.0.0/./.0-0-/-/-*0*0'2'2)1)1,/,/:8hfmt3636-3/510-,;+9)OCID<74646*!,*3/862A=̎IN#0!.///0/0////*0*0+0+0+0+0*0*0,0,00.0././.)/+167`a,2/5*1'.,2,2-0-0/./.1.1.2.2././.*/*/(/(/).).,-*+?9}IQ1900--.1-00/10:.8,ݔbX+(41!1,"6!56,5+A?pnde67$/ +/.1/0..-/.*0*0+0+0+0+0*0*0,/,/////////,1).@D}**00(())+,,--*+(/,/,1.2/3221/0/0*.)-),(+**++,&-'JBOR)2(1*).--),(;931GG||WU97&2'3&4"0.'3,9180hfȨ=:B?$*%+#/!--)-),+.-*0*0*0*0*0*0*0*0+/+/.0.0//../3+/IRnn+%1+-(,'.)/*0)/(/+.*/.1024351403,.,.+**)1+/)5*8-SNwwA>96&/'0,+*)/%0&<;LKΓlo1010+&*%*-.130.+5/E?Ж|WT-126(.(.403/,--.*0*0*0*0*0*0*0*0*.*.-1-1/////1,.VaWV1-510*1+4.0*-&3,.*0,/1/1/3.2.0/1..--/,415-2*B64(][``;;/+73+0-220-+6+4)ZZjaA82&6*.6,4,/+.2.2.GFvuZ[DE9999.-.-,/,/*0*0+0+0+0+0+0+0*.*.-2-20//.35)+z`_:>6:678951626060.,/-.2-1+0)...3343103041A<;6IEd`֞UX0189-.,-)(,+944/@;WRիʿuB;:3+3.6)1*2/.*)732.VTFA4/1436%,*1*/*/+0+0+0+0+0+0*-*-,2,20/0//1/1ޠvLW5@02352121-/-/(.(.&,'-,,++-,,+7621GIsuߩkb9.>3*/%*$.(20)2+5-2*dhWZ+,./+1%+*/.3+(-*:3?8||kg28/5-3,2*.*.+/+/*0*0+0+0*/*/)2)20/0///NNhqHN=C/2-0%*&+)+.0.+%"//==X[wzQAC37'3#%+)/'4'49/6,?6pgYSA;0+,'$0(4&3$1+#';3IAߎVV:1;20)1*)-(,)4(3(3&1&9(;4$:0.0.?=}zwgdJA?6>.=-H/-31,-'(.*1-824.=8JEєwv3434(-).'.(/-0+.:70-=6aZݤhcE@8372././,-./2,1+,.')*4(22*3+TSހֆܥriJA82>8,4*2#.%04231:36/_bäR]0.312/*'-:)62615;*7&D8cW馧x|UWFH>:733$5&6):-4.1+D5=.vusqLJ4/83-/-/*#.&3&3.3.3ACsuig@>1(90,61;39.4/%,"4/2-BBhh䧮qkf`ZQTKF9;.?2M@ów|KP1.52+,+,&-%,($.)4)47AR\ҞIC=71+0*&((*&1$/$3%40/-,F>jb藍栞ۍ̘tsPO10.--1.2#,#,"*"*$&(*477:s}ñqv8/6-1-1-&8(:!63%%))6'/ E;_UݙdfIK1+5/+'+'*1(/'.(/+.036510^]Ĝ[]2,5/,2.4"/#0+,)*.&2*>58/?9IC~|ڤOP=>0/76200.--,,$*'-3/2.<750UX넁TQ5)9-0..,&()+04-1/0/083:52J>d`с}ipKG<83)5+0+6114*-*5+6*0)/))))33//CEegޣ}PT,/14)--1*/(-(2+5,3(/1+.(5*5*3/2.85B?ga|v蛓譥{ieKH>;43654)3(0$0$(%+((0%-(2&0+/-100++HHiiߥ~_e<:532+3,',).+,*+,-,--/.01605//1112)*25ADPS\_nr|ٕߩᄉot[\WXEF45')02//,,,*/-/-.,,--.+0,1)2&/+%,&1144TZtzҬffFD;9(3)4*2+3,/,/*,(**-+.),*-,.)+,-,-1/1/3.61C?HDGLJOPVW]ckjrjplrxz儆zwqsmspli_]ZXVRQMKAH>>29-4+6-/*4/00--*/,1,2+1-0/2.0,.+/*.*/).9887UWǂGU:H.:-9,206+.*-))((!)"* +#.)2'0,1.3/3,0)-)-)0*1(1(1*2(0).(-+/04=1:.6,7-7/914,3+4*7-6+6+4)3(1*2+2301)0(/)3&0%,(/,2,2/3,0,2*05;@Ftwğr}Xc@F8>,/,/*+,-&.&. . .#1#1.!0#3#3#. +')*,*-),*,*,./-.++++/,0-0/0/,.-/--++*),+**((()()*-*-'.%,(5+8)2*3-/+-/2-0388=PYjsٗ`cKN6:26*.-1+1,2*2,4&3&3$5&7+5*451401/314/2-5/3-3,5.)3)3'2'2%1'3)5)5'2'2%1$0&1'2&/$-)0(/(1(104,00,2.EDXWvzҖtyWUGE=8;6:6953/3//+/+203175755151507261504.5/(3)4)5(4&2'3*3*3*4*4'1'1*/*/.1-012346666?@PQol~{坝_YICD9@5<,=-2(4*+/,0-../....,-01/1+-0011210/0.1/3/2.1/1/0000./-.5689:>NRoxڌž|ldaYMSHNBF=A9=59(.)/)1$,5.2+3)8.B6D8H;OBWL]Rc`khxyً쥩숎艑爐擐鎋䎈䖐줚㷵Ҳޢӟ䶷װխ欪ήa_b203  + + + + + + +  a_b򟝠HFI-+.  +  + + + + + + + + + + +  !! +   +    + + + + + + + + + +  /-0^\_  +      + + + + +  + + +  536ywzfch749  + + +  + + + + + + + +  TRUZW]/,2  +  + + + + + + + + + + + +  + 𢠣NLO(&)         + + + + + +  + '%(    TRTPNQ)'* + + + + + + + + + + + + + + + + + +vtv\Z]ecf   !0.1%#&MKNqnthfiKIK`^akik  +  + ZX[[X]       + +  + + + +-*/  + +     OLQtqv  [X] +    MKMRPS + nln   +       + \Z]  + +                 +   <9?    IFL0.0 +  +       NKQ    + +  +       +    + + + + + +  MKM{y{  + + +           nln`]c  [Y\A>D +    +   +       LIOKHM  + +  HEK  MKM424 + jhj,(0 +   +   _]`    &$&    ##'!%!%!%!%!%!%!% $ $ $   +   OKS + + + !"!"!"!"!" ! ! ! ! ! #      +oktFDF  TPY          +  MKM  qoq" + _]`  !   +LHPPNQ + +"$ gelձ326    +0/31/2 MMQǾ¿þ  +zy}ſ +   NLNzw| + + +    +A@Atst   +uvw    \Y_202   }}    #$%%#&&'(YZ[|z}jkl + NLO{w  + + llp jhjllm + +    [X^PNQ +  !" yx%&(   $%' OPQ~| + + NLO{x~ +  nlnoop +   + ZW]OMP + !" wv}+,.$%' \]^~|  + NLO{x~   +mkmpop + +      [X^MKM +  !! ww|$%& $%&Z[\~| + NLO{x~   mkmono  + +    ZW]PNP  !! ww|&'( "#$\]^~| + NLO{x~ mkmmmn +    ZW]OMP   !" vu|%&( +"#% Z[\~|  + NLO{x~  +  mkmmmn  +    ZW]OMP   !" wv}%&( +"#% \]^~|  + NLO{x~    +mkmnmn +    ZW]OMO   !! ww|%&' +"#$]^_~| + NLO{x~   mkmnmn +  +  ZW]OMO   !" vv{%&' +"#%_`a~| + NLO{x~  +pnpmlm  yz|   + ZW]OMP  !" wv}&') +"#% abdTUW~{ +uvw + NLO{x~ VVZtru  !{  +\Y_MJP +" "   + xw&&+ "#$GFN +   +lhq~   |}½ NLO{x~   + +   +  +  +!!;:B YV[MJP  +    +  yw +!"#    + ! +   + +  #449 + +  #>;@ NLO{x~    C@F       BBG   ZW]*'-  jhq^^c/01    + + +   +,,1     + 203 NLO{x~    +/,1 JGM +       >>B  ?@,*,#!#(&(+)+$%'$%'$%'$%'#$&&')"#%$%'GHJ         +       +  +     + +  + +   + +|} ABD}zDAF'%('%((&)(&)(&)&$'%#&&$'&$'&$'$#'$#'!    224zw|89;)*,%&('(*%&($%'%&(%&(%&(%&('')((*(&) + <8@ NLO{x~  + +  ssxᬭBCE679   + +  *',  +    + abd緷DDI **,ީB?D + -)1 NLO{x~ +  oot=>@  +B?E|y~    .,6_]g_]g^\f][e][eXV`_]gNLVpqs _`b##'  ))+   +.*2 NLO{x~ + onr.-2??A  +A>D  rrw徼mkr   }~aacRRW + +,,.*',  .*2  NLO{x~    mkm(%+ ?=@  + + ^[a +   wyw + +   a_aYX`  +*.647+(- + NLO{x~ + nln(%+ ?=@   + \Y_ +   wyxYY[  QRT a_aXW_  +*.536,)/ + NLO{x~ + +nln)&, ?=@   + \Y_ +   wyx +  + !"$a_aXW_  +*.647,)/ + NLO{x~ + +nln)&, ?=@   + \Y_ +   wyx'(*  a_aXW_  +*.647,)/ + NLO{x~ + mkm)&, ?=@   + [X^ +   wyxYZ\ z{} b`bYX`  +*.536,)/ + NLO{x~ + +kik*'-> <:<('/  +.-1.+1 LJM{x~ feeHFI   + [X^ + +  vxwTUWMMO-+.usuijk   +.-1igj :7= LJM{x~ " 639KHNJGMIFLIFLIFLIFLIFLIFLIFLIFLIFLIGJHFIJHJIGICACFDGIGJHFIJHKIGJIGJIGJIGJIGJIGJHGLHGLHGLHGLHGLFEJLKPGFK'&+   +`]b  YU] yxy{z|0.1;8>  +  +.-2FEJGFKHGLIHMIHMIHMIHMJGMIFLIFLIFLIFLIFLIFLHEKB?E{x~DBEHFIIGJIGJIGJIGJIFLIFLIFLIFLIFLIFLIFLIFLIFLIFLJIMJIM)).    <;?B@BJHKJHKIFKIFKIFLIFLIFLIFLIFLIFLIFLIFLIFLIFLGDJJGMGDJ# &  ROULJL{y|EAI  TRTjhj       XT\ + ywy gck      LHP + + ppr} + +  KIK{y{ [Y[kik   + +'/  XUZ + ywy647|z}   MJP  ~    +(-KIK{y{[X^  ZXZmkm  +   +XU[ + ywyMKN XVYspv     +MJP  +ppu~ +KIK{y{XUZZXZnln  +  XUZ + zxzrps 314b^f +LINjjn~  zw|LJL{y{툆758  +SQScacKHNQOR{y{qoq  +73; GEHCDFzxzLJM A?Axvxڟ~|}{~{y||z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}ywy{y{vtv}{}sqs|z}{y|}zx{}|z}|z}|z}|z}|z}z{}z{}z{}z{}z{}z{}z{}z{}z{}yz|xvy|z}xvyywzywzxvy{y{}}{}}{}{y{~|~ׄywz|z}|z}|z}|z|zxzݤz{}yz|z{}z{}z{}z{}z{}z{}z{}z{}{{}{{}|z}|z}|z}|z}xvy|z}xvyzx{|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}{{}yy{|}|}wuw|z}|z}|y~|y~|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}|z}}{~}zx{}{~Ӂywy|z|xvx{y{zxzÍ \ No newline at end of file diff --git a/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_example_main.c b/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_example_main.c new file mode 100644 index 00000000000..3dbadaae07d --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_example_main.c @@ -0,0 +1,106 @@ +/* + * SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ +#include +#include +#include +#include +#include +#include "mbedtls/base64.h" +#include "esp_check.h" +#include "driver/jpeg_encode.h" + +#define EXAMPLE_WIDTH 1280 +#define EXAMPLE_HEIGHT 720 +#define EXAMPLE_RGB_FRAME_SIZE (EXAMPLE_WIDTH * EXAMPLE_HEIGHT * 3) +#define EXAMPLE_JPEG_BUFFER_SIZE (EXAMPLE_RGB_FRAME_SIZE / 10) /* Estimate output size with an approximately 10:1 JPEG compression ratio for this demo image. */ +#define EXAMPLE_BASE64_CHUNK_LEN 96 +#define EXAMPLE_JPEG_QUALITY 80 + +extern const uint8_t esp720p_rgb_start[] asm("_binary_esp720p_rgb_start"); +extern const uint8_t esp720p_rgb_end[] asm("_binary_esp720p_rgb_end"); + +static void print_base64_payload(const unsigned char *encoded, size_t encoded_len) +{ + /* Split the printable payload into short lines so it is easy to read in + * the serial monitor and robust for pytest to parse back into a JPEG. */ + printf("JPEG_BASE64_BEGIN\n"); + for (size_t offset = 0; offset < encoded_len; offset += EXAMPLE_BASE64_CHUNK_LEN) { + size_t chunk_len = encoded_len - offset; + if (chunk_len > EXAMPLE_BASE64_CHUNK_LEN) { + chunk_len = EXAMPLE_BASE64_CHUNK_LEN; + } + printf("JPEG_BASE64 %.*s\n", (int)chunk_len, (const char *)&encoded[offset]); + } + printf("JPEG_BASE64_END\n"); +} + +void app_main(void) +{ + /* EMBED_FILES turns the raw asset into linker symbols, so the example can + * read the picture directly from flash without mounting a filesystem. */ + const size_t embedded_size = esp720p_rgb_end - esp720p_rgb_start; + uint32_t jpeg_size = 0; + jpeg_encoder_handle_t jpeg_handle = NULL; + + printf("Loading embedded BGR24 image from flash...\n"); + printf("Embedded raw image size: %zu bytes\n", embedded_size); + assert(embedded_size == EXAMPLE_RGB_FRAME_SIZE); + + /* Despite the enum name, the current driver maps + * JPEG_ENCODE_IN_FORMAT_RGB888 to a BGR24-style byte layout. + * Keep the embedded raw asset in bgr24 order or red/blue will swap. */ + jpeg_encode_cfg_t enc_config = { + .src_type = JPEG_ENCODE_IN_FORMAT_RGB888, + .sub_sample = JPEG_DOWN_SAMPLING_YUV422, + .image_quality = EXAMPLE_JPEG_QUALITY, + .width = EXAMPLE_WIDTH, + .height = EXAMPLE_HEIGHT, + }; + + size_t result_buffer_size = 0; + /* The output JPEG is compressed, so the example does not need to reserve + * a full raw-frame worth of space for the bitstream. This 10:1 estimate + * is intentionally conservative for the bundled demo image and quality + * setting; real applications should size this buffer for their own worst + * case and handle "buffer too small" errors if needed. */ + jpeg_encode_memory_alloc_cfg_t mem_cfg = { + .buffer_direction = JPEG_ENC_ALLOC_OUTPUT_BUFFER, + }; + uint8_t *jpeg_buf = (uint8_t *)jpeg_alloc_encoder_mem(EXAMPLE_JPEG_BUFFER_SIZE, &mem_cfg, &result_buffer_size); + assert(jpeg_buf != NULL); + + /* Create the encoder instance once, then feed it one full-frame request. */ + jpeg_encode_engine_cfg_t encode_eng_cfg = { + .timeout_ms = 200, + }; + ESP_ERROR_CHECK(jpeg_new_encoder_engine(&encode_eng_cfg, &jpeg_handle)); + + printf("JPEG encoder will read the embedded raw buffer directly from flash.\n"); + printf("Encoding BGR24(raw) -> JPEG...\n"); + ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, esp720p_rgb_start, EXAMPLE_RGB_FRAME_SIZE, + jpeg_buf, result_buffer_size, &jpeg_size)); + printf("Encoded JPEG size: %" PRIu32 " bytes\n", jpeg_size); + + size_t encoded_len = 0; + /* First call asks mbedTLS how big the base64 buffer must be, then the + * second call performs the actual binary-to-text conversion. */ + int ret = mbedtls_base64_encode(NULL, 0, &encoded_len, jpeg_buf, jpeg_size); + ESP_ERROR_CHECK((ret == MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) ? ESP_OK : ESP_FAIL); + unsigned char *encoded = calloc(encoded_len + 1, 1); + assert(encoded != NULL); + ESP_ERROR_CHECK(mbedtls_base64_encode(encoded, encoded_len + 1, &encoded_len, jpeg_buf, jpeg_size) == 0 ? ESP_OK : ESP_FAIL); + + /* JPEG_META plus the chunked JPEG_BASE64 lines form a tiny text protocol + * that pytest understands and can reconstruct into a host-side .jpeg. */ + printf("JPEG_META width=%u height=%u format=JPEG encoding=base64 size=%" PRIu32 "\n", + EXAMPLE_WIDTH, EXAMPLE_HEIGHT, jpeg_size); + print_base64_payload(encoded, encoded_len); + printf("JPEG encode demo done.\n"); + + ESP_ERROR_CHECK(jpeg_del_encoder_engine(jpeg_handle)); + free(encoded); + free(jpeg_buf); +} diff --git a/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_main.c b/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_main.c deleted file mode 100644 index cc38e62b8bf..00000000000 --- a/examples/peripherals/jpeg/jpeg_encode/main/jpeg_encode_main.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -#include -#include -#include "esp_heap_caps.h" -#include "esp_vfs_fat.h" -#include "sdmmc_cmd.h" -#include "driver/sdmmc_host.h" -#include "driver/jpeg_encode.h" -#include "sd_pwr_ctrl_by_on_chip_ldo.h" - -static const char *TAG = "jpeg.example"; -static sdmmc_card_t *s_card; -#define MOUNT_POINT "/sdcard" - -const static char s_infile_1080p[] = "/sdcard/esp1080.rgb"; -const static char s_outfile_1080p[] = "/sdcard/outjpg.jpg"; - -static esp_err_t sdcard_init(void) -{ - esp_err_t ret = ESP_OK; - esp_vfs_fat_sdmmc_mount_config_t mount_config = { -#ifdef CONFIG_EXAMPLE_FORMAT_IF_MOUNT_FAILED - .format_if_mount_failed = true, -#else - .format_if_mount_failed = false, -#endif // EXAMPLE_FORMAT_IF_MOUNT_FAILED - .max_files = 5, - .allocation_unit_size = 16 * 1024 - }; - const char mount_point[] = MOUNT_POINT; - ESP_LOGI(TAG, "Initializing SD card"); - - sdmmc_host_t host = SDMMC_HOST_DEFAULT(); - host.max_freq_khz = SDMMC_FREQ_HIGHSPEED; - -#if CONFIG_EXAMPLE_SDMMC_IO_POWER_INTERNAL_LDO - sd_pwr_ctrl_ldo_config_t ldo_config = { - .ldo_chan_id = 4, // `LDO_VO4` is used as the SDMMC IO power - }; - sd_pwr_ctrl_handle_t pwr_ctrl_handle = NULL; - - ret = sd_pwr_ctrl_new_on_chip_ldo(&ldo_config, &pwr_ctrl_handle); - if (ret != ESP_OK) { - ESP_LOGE(TAG, "Failed to new an on-chip ldo power control driver"); - return ret; - } - host.pwr_ctrl_handle = pwr_ctrl_handle; -#endif - - // This initializes the slot without card detect (CD) and write protect (WP) signals. - // Modify slot_config.gpio_cd and slot_config.gpio_wp if your board has these signals. - sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); - slot_config.width = 4; - slot_config.flags |= SDMMC_SLOT_FLAG_INTERNAL_PULLUP; - - ret = esp_vfs_fat_sdmmc_mount(mount_point, &host, &slot_config, &mount_config, &s_card); - - if (ret != ESP_OK) { - if (ret == ESP_FAIL) { - ESP_LOGE(TAG, "Failed to mount filesystem. " - "If you want the card to be formatted, set the EXAMPLE_FORMAT_IF_MOUNT_FAILED menuconfig option."); - } else { - ESP_LOGE(TAG, "Failed to initialize the card (%s). " - "Make sure SD card lines have pull-up resistors in place.", esp_err_to_name(ret)); - } - return ret; - } - // Card has been initialized, print its properties - sdmmc_card_print_info(stdout, s_card); - return ret; -} - -static void sdcard_deinit(void) -{ - const char mount_point[] = MOUNT_POINT; - esp_vfs_fat_sdcard_unmount(mount_point, s_card); -#if SOC_SDMMC_IO_POWER_EXTERNAL - esp_err_t ret = sd_pwr_ctrl_del_on_chip_ldo(s_card->host.pwr_ctrl_handle); - if (ret != ESP_OK) { - ESP_LOGE(TAG, "Failed to delete on-chip ldo power control driver"); - return; - } -#endif -} - -void app_main(void) -{ - ESP_ERROR_CHECK(sdcard_init()); - uint32_t raw_size_1080p; - uint32_t jpg_size_1080p; - jpeg_encoder_handle_t jpeg_handle; - - FILE *file_raw_1080p = fopen(s_infile_1080p, "rb"); - ESP_LOGI(TAG, "s_infile_1080p:%s", s_infile_1080p); - if (file_raw_1080p == NULL) { - ESP_LOGE(TAG, "fopen file_raw_1080p error"); - return; - } - - jpeg_encode_engine_cfg_t encode_eng_cfg = { - .timeout_ms = 70, - }; - - jpeg_encode_memory_alloc_cfg_t rx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_OUTPUT_BUFFER, - }; - - jpeg_encode_memory_alloc_cfg_t tx_mem_cfg = { - .buffer_direction = JPEG_DEC_ALLOC_INPUT_BUFFER, - }; - - ESP_ERROR_CHECK(jpeg_new_encoder_engine(&encode_eng_cfg, &jpeg_handle)); - // Read 1080p raw picture - fseek(file_raw_1080p, 0, SEEK_END); - raw_size_1080p = ftell(file_raw_1080p); - fseek(file_raw_1080p, 0, SEEK_SET); - size_t tx_buffer_size = 0; - uint8_t *raw_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p, &tx_mem_cfg, &tx_buffer_size); - assert(raw_buf_1080p != NULL); - fread(raw_buf_1080p, 1, raw_size_1080p, file_raw_1080p); - fclose(file_raw_1080p); - - size_t rx_buffer_size = 0; - uint8_t *jpg_buf_1080p = (uint8_t*)jpeg_alloc_encoder_mem(raw_size_1080p / 10, &rx_mem_cfg, &rx_buffer_size); // Assume that compression ratio of 10 to 1 - assert(jpg_buf_1080p != NULL); - - jpeg_encode_cfg_t enc_config = { - .src_type = JPEG_ENCODE_IN_FORMAT_RGB888, - .sub_sample = JPEG_DOWN_SAMPLING_YUV422, - .image_quality = 80, - .width = 1920, - .height = 1080, - }; - - ESP_ERROR_CHECK(jpeg_encoder_process(jpeg_handle, &enc_config, raw_buf_1080p, raw_size_1080p, jpg_buf_1080p, rx_buffer_size, &jpg_size_1080p)); - - FILE *file_jpg_1080p = fopen(s_outfile_1080p, "wb"); - ESP_LOGI(TAG, "outfile:%s", s_outfile_1080p); - if (file_jpg_1080p == NULL) { - ESP_LOGE(TAG, "fopen file_jpg_1080p error"); - return; - } - - fwrite(jpg_buf_1080p, 1, jpg_size_1080p, file_jpg_1080p); - fclose(file_jpg_1080p); - - sdcard_deinit(); - ESP_LOGI(TAG, "Card unmounted"); -} diff --git a/examples/peripherals/jpeg/jpeg_encode/partitions.csv b/examples/peripherals/jpeg/jpeg_encode/partitions.csv new file mode 100644 index 00000000000..1bd604e2b12 --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/partitions.csv @@ -0,0 +1,4 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, , 0x6000, +phy_init, data, phy, , 0x1000, +factory, app, factory, , 0x380000, diff --git a/examples/peripherals/jpeg/jpeg_encode/pytest_jpeg_encode.py b/examples/peripherals/jpeg/jpeg_encode/pytest_jpeg_encode.py new file mode 100644 index 00000000000..5278b90ca2e --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/pytest_jpeg_encode.py @@ -0,0 +1,125 @@ +# SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: CC0-1.0 + +import base64 +import hashlib +import logging +import re +from dataclasses import dataclass +from pathlib import Path + +import pytest +from pytest_embedded import Dut +from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets + +JPEG_META_PATTERN = r'JPEG_META width=(\d+) height=(\d+) format=(\w+) encoding=(\w+) size=(\d+)' +JPEG_META_RE = re.compile(rf'^{JPEG_META_PATTERN}$') +JPEG_CHUNK_RE = re.compile(r'^JPEG_BASE64 ([A-Za-z0-9+/=]+)$') +JPEG_OUTPUT_NAME = 'jpeg_encode_result.jpeg' +GOLDEN_IMAGE_NAME = 'golden_output.jpeg' +GOLDEN_IMAGE_PATH = Path(__file__).with_name(GOLDEN_IMAGE_NAME) +EXPECTED_FORMAT = 'JPEG' +EXPECTED_ENCODING = 'base64' +EXPECTED_WIDTH = 1280 +EXPECTED_HEIGHT = 720 + + +@dataclass(frozen=True, slots=True) +class JpegMetadata: + width: int + height: int + image_format: str + encoding: str + size: int + + +def parse_jpeg_metadata(meta_line: str) -> JpegMetadata: + match = JPEG_META_RE.match(meta_line) + if not match: + raise ValueError(f'Invalid JPEG metadata line: {meta_line}') + + return JpegMetadata( + width=int(match.group(1)), + height=int(match.group(2)), + image_format=match.group(3), + encoding=match.group(4), + size=int(match.group(5)), + ) + + +def collect_base64_payload(dut: Dut) -> list[str]: + payload_chunks: list[str] = [] + while True: + match = dut.expect(r'(JPEG_BASE64_END|JPEG_BASE64 [A-Za-z0-9+/=]+\r?\n)') + line = match.group(1).decode('utf-8').strip() + if line == 'JPEG_BASE64_END': + return payload_chunks + + chunk_match = JPEG_CHUNK_RE.match(line) + assert chunk_match is not None + payload_chunks.append(chunk_match.group(1)) + + +def decode_jpeg_base64_payload(metadata: JpegMetadata, payload_lines: list[str]) -> bytes: + if metadata.image_format != EXPECTED_FORMAT: + raise ValueError(f'Unsupported image format: {metadata.image_format}') + if metadata.encoding != EXPECTED_ENCODING: + raise ValueError(f'Unsupported payload encoding: {metadata.encoding}') + + jpeg_bytes = base64.b64decode(''.join(payload_lines), validate=True) + if len(jpeg_bytes) != metadata.size: + raise ValueError(f'Expected {metadata.size} JPEG bytes, got {len(jpeg_bytes)}') + + return jpeg_bytes + + +def save_jpeg_artifact(jpeg_bytes: bytes, output_path: Path) -> None: + output_path.parent.mkdir(parents=True, exist_ok=True) + try: + output_path.write_bytes(jpeg_bytes) + except OSError: + logging.exception('Failed to save JPEG artifact to %s', output_path) + return + + logging.info('Saved JPEG artifact to %s', output_path) + + +def _sha256_digest(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def assert_jpeg_matches_golden(result_bytes: bytes, golden_path: Path) -> None: + assert golden_path.is_file(), f'Golden JPEG not found: {golden_path}' + golden_bytes = golden_path.read_bytes() + result_digest = _sha256_digest(result_bytes) + golden_digest = _sha256_digest(golden_bytes) + + assert result_digest == golden_digest, ( + f'Generated JPEG does not match golden file: {golden_path.name} ' + f'(result sha256={result_digest}, golden sha256={golden_digest})' + ) + + +@pytest.mark.generic +@idf_parametrize('target', soc_filtered_targets('SOC_JPEG_ENCODE_SUPPORTED == 1'), indirect=['target']) +def test_jpeg_encode_example(dut: Dut) -> None: + dut.expect_exact('Loading embedded BGR24 image from flash...') + dut.expect(r'Embedded raw image size: \d+ bytes') + dut.expect_exact('JPEG encoder will read the embedded raw buffer directly from flash.') + dut.expect_exact('Encoding BGR24(raw) -> JPEG...') + dut.expect(r'Encoded JPEG size: \d+ bytes') + + metadata = parse_jpeg_metadata(dut.expect(JPEG_META_PATTERN).group(0).decode('utf-8')) + assert metadata.width == EXPECTED_WIDTH + assert metadata.height == EXPECTED_HEIGHT + + dut.expect_exact('JPEG_BASE64_BEGIN') + payload_lines = collect_base64_payload(dut) + + jpeg_bytes = decode_jpeg_base64_payload(metadata, payload_lines) + output_path = Path(dut.logdir) / JPEG_OUTPUT_NAME + save_jpeg_artifact(jpeg_bytes, output_path) + assert_jpeg_matches_golden(jpeg_bytes, GOLDEN_IMAGE_PATH) + + dut.expect_exact('JPEG encode demo done.') diff --git a/examples/peripherals/jpeg/jpeg_encode/resources/esp1080.rgb b/examples/peripherals/jpeg/jpeg_encode/resources/esp1080.rgb deleted file mode 100644 index 2e5ba5e6a5e..00000000000 --- a/examples/peripherals/jpeg/jpeg_encode/resources/esp1080.rgb +++ /dev/null @@ -1,97 +0,0 @@ -Ɇv~ajmw7A6@7?5=8?6=:@:@5C3@2A3BF@JCKDZZoogh67<;A@'$30'!'!((,!-"/&0' ( (")")&+%**+(*.,1/7362702,2+2+55789<475;>EXajrϵ8B/9!-6B).%"%"($'#%($' *)%%&&((%*%*'*'*%)%)!(!('',,!+!+%*%*++++FFLL^]pp8B1;".)5 - &"'#&)&)",",%%&&((%*%*'*'*%)%)!(!('',,!+!+%*%*+++++,**0043?@HITWZ]䐣ʵŹh\8520)-*/%*)/ "(#) 1 132++,,%,%,),),+++++)+)'('(%&%&!)!)!(!(%&%&)&)&/+-)++('+*+*..//PDbU}vNC631.$)!""$*$*0-.-++,,%,%,),),+++++)+)'('(%&%&!)!)!(!(%&%&)&)&.*.*0/115577;;;;J>A4=6E>feϊC5<7:4+2"(%0 *#+#+&,&,,*'&--#-#-'-'-++++-*-*-(-(+'+')&)&#'#'#%#%%#%#%#%## # &#($()()&)&)146#/.2#IBZT{m[VC>%,$+$/*5 )"*$*%+, -----#-#-'-'-++++-*-*-(-(+'+')&)&#'#'#%#%%#%#%#%#*'*',),)+,*+)+(*115"6#8)1"4.6046KMxäXhO_,8-97:694,4,-"/$)+ ((!'!'#'#'#&#&%&%&%&%&%&%&%'%'%(%(%&%&#%#%#### "" #!$!%!%!&!&-, 1-3/1,-'.+*&.+86W[悆my_k=@;=7/4,, -"')((!'!'#'#'#&#&%&%&%&%&%&%&%'%'%(%(%&%&#%#%######"" # #""$$$#""&%+**&#*%3-.+73?=64,0.2CIV\ٮ|yQ?:(2@*=(=("! #"&#'#   #%**(%%+%+%*%*#(#(#'#'!&!&&&&&&&22..!(!(#$#$%"%")#)#+&+&+(+(NThnƴu_V@9#/"$&)&*$' !'&'%&%&%%+%+%*%*#(#(#'#'!&!&&&&&&&22..!(!(#$#$%"%")#)#+&+&+(+(06/5AH_fӜútoVQ)),++,./',', '&$%%$$&+-%+%+%*%*#*#*#)#)#(#(!(!(!(!(!(!(--**''!%!%!$!$#%#%#(#(%*%*.(,'....GIor{Y^GHLLTP^Znexox}הּڷ^]IH./%'$)+0%- '$&)'((- 1%+%+%*%*#*#*#)#)#(#(!(!(!(!(!(!(--**''!%!%!$!$#%#%#(#(%*%*1,94>>4324;>dg̀黻vyLO-2+0%*%*%'%'''''))))7AFP\fku~_cCG=A.5,3/506*2)1$,!) ( (#'#'%&%&%'%'%(%(%(%(%(%(%(%('('(#%#%#%#%#'#'#(#(#)#)#+#+#,#,#,#,/&*!&#*',0+/&-&il٘xdB40#-&:3(+!(')(-,//)*&'#" ,)1.0)<5XPnfjm*@-;-=0/)/)!$"%  %'/177#"0//-/,'$5.70?6;3@7G>XMbXФƵadQT88/.-,1/-**'#"#"####%$%$'%'%'&'&)&)&)&)&+&+&'''''('('*'*%,%,%,%,%*%*%(%(%'%'3*/&&"&" %!&$"'+>=11>:[WWYqfQV##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("%"%"%"%"&"&"&"&#(#(#(#(#(#(#(#(9:89MOuxxsQL67583669=@fhÉsTG;)7&!#&$- )&$)0%%""""($($.'.')*)*)')')#)#)!)!)!)!%#%##'#'!*!*#(#(#&#&#$#$#$#$"$#%$*"( ,"-'5+9SPTR*#0)7,9-}x罸xz8=# %7<#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($'$'$'$'$($($($(#(#(#(#(#(#(#(#("$"*''%";9WUWUrojpNT,A,A*2+3)%($ ' ' - -$($(& & %(%(%'%''&'&'%'%%&%&%'%'#)#)#+#+#)#)#(#(#%#%#$#$"$$&&,&,$."+".".8.RHᅀFD6581=64(2&NIupߺKL?A7<9>(-&+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($'$'$'$'$($($($(#(#(#(#(#(#(#(#()&&$,*42;7406363GDFCKKNNehVk>R )##.*%%!(!(!.!.%)%)'!'!%(%(%'%''&'&'%'%%&%&%'%'#)#)#+#+#)#)#(#(#%#%#$#$"$$&%+&,%/#, -+UKB8?;XTǛYU* 2/*'! %7?'tsṹolKH',$.++(#####(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("%"%"%"%"&"&"&"&#(#(#(#(#(#(#(#("$ !" ,-)*$)"$)8=V_nvdj?F-%4,3(7,))))#,#,!)!)""!%!%!&!&!)!)!*!*#,#,#,#,%*%*%*%*#+#+#)#)#'#'#%#%#%"$"&"&#*#*#,#,.!.!2%4&NFyqVSLH5,7-.+*'&+)-<$<$NNrrt{GEC@91<4/,&#((11#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("%"%"%"%"&"&"&"&#(#(#(#(#(#(#(#("#%&..33%&388=8=05)1%.[aqwۗ鳺UM:2&%****$.$."*"* # #!%!%!&!&!)!)!*!*#,#,#,#,%*%*%*%*#+#+#)#)#'#'#%#%$& ##$")$+%.%.'5(D6=/:2H@څشjj+)%&!#$(0/7::?PPޤuv/042,*&(%1%12-9;;=BDLQ-5<64EInqȳZ\68%&,-./68(!$ '")+)))!'!''$'$)")"#,#,#+#+#)#)#(#(#'#'#&#&#'#'#'#'%%**%/%//-/-5,+"<5ke>91- /-##-",(*),,$&JLhn.)*&*&%**33!-!-%#%##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#('('('''''$'$%#%#%"%"#########$#$ 0 0 + +"$"$&!&!(1(A:D0BHY`ȠOW;D!(18&)&'0162*&HAkdd`))#&(*$ " -*#(#(#,#,#+#+!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#(%'%'%&%&#%#%#$#$#$#$#$#$#%#%#&#&"2"2 / /**&&/2%)"#'(:685.)OVip뙡lc<6<65252,--/"( '&&!&!&%&%&)')'#(#(#)#)#)#)#)#)#(#(#(#(#(#(#'#'%+%+#,#,!*!*!$!$% &"/,24/2\h␜}4=9A%-,4$"%",-+,*&/+tmd`;7*5+6')!&!'%&$#(#(#,#,#+#+!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#(%'%'%&%&#%#%#$#$#$#$#$#$#%#%#&#&"2"2 / /**&& -.++'#".)946=AH[bx㥮a\JD+(*'.08:'.!&&!&!&%&%&)')'#(#(#)#)#)#)#)#)#(#(#(#(#(#(#'#'%+%+#,#,!*!*!$!$(#% (%,(:==@FRHTλncK@! 54"-&2 $0!!$0.*(CEilٻFD53*),,'3*5+.$')&)&'#'##'#',,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#(....,,,,,,!.!.!/!/!0!0#"#"$$((,,0.+* ( ($&"%8#36'8)UO{uXX@A377:)/"(!(!(!(!(%*%*)-)-#(#(#(#(#(#(#)#)#)#)#(#(#(#(#(#(+&+&'"'"##!"!"!"+'/'$#*)*!pxǜLB9/22 +%1&"!$)'%#]_̠B@IG" '-%0"-)+02)&)&'#'##'#',,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#&#&#&#&#'#'#'#'#(#(#(#(#(#(#(#(....,,,,,,!.!.!/!/!0!0"!"!##''++)-01#+ (!$ #.39*3$93D>ij~]^03&*#)-2!(!(!(!(%*%*)-)-#(#(#(#(#(#(#)#)#)#)#(#(#(#(#(#(+&+&'"'"##!"!" ( ($,%--,//3*2)6=lt÷QW*,%'')"#$-$1#@2H=UJѪD8=1#)#)#)#)#(#(#(#(#(#(#'#'#'#'#&#&!*!*!*!*!*!*!*!*!)!)!(!(!(!(!'!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-&-&+$*"("&!(&(&SSxywF=&!93(."'$5!2$%'5!0!0!'!'##%"%"%*%*%.%.#'#'!!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(1-&!PW؝lr4:!/&4#-!*')$&'/&>0=.UJтxD8=1#)#)#)#)#(#(#(#(#(#(#'#'#'#'#&#&!*!*!*!*!*!*!*!*!)!)!(!(!(!(!'!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-&-&+$*"("&!(&(&44;;dgЖOI)$(.)/.* 1(9$2%!0!0!'!'##%"%"%*%*%.%.#'#'!!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*&,'>D[b㧷;A"*$5#,''(&'*'0-<8>;}~B7;0'+'+'+'+'+'+'+'+'+'+'+'+'*'*'*'*!)!)!)!)!)!)!)!)!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)#(#(&& ' '$+&-5@GnsWb055:-,'&"%),%-%%%!(!(!*!*#+#+#(#(#(#(#(#(#*#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#*)0*-#&YVӤip,1%+)"2 (%)*)*,)-*40RO賳B7;0'+'+'+'+'+'+'+'+'+'+'+'+'*'*'*'*!)!)!)!)!)!)!)!)!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)#(#(''!(!(/5066>+215IN\`;?'&(+"%%$,%%!(!(!*!*#+#+#(#(#(#(#(#(#*#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()0(.02*-<9_\ؽnnDD&-(/. 0 ' '10--1277[e>67/)")")")")")")")")")")#)#)#)#)#)#!&!&!&!&!'!'!'!'!'!'!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++**))(()&")$**,-/=:JGƽE?:46.5-(#*$((33!1!1!'!'#####)#)%2%2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(41-+1011|i¯DD44$,#+ 0." '+*! //EE螧>67/)")")")")")")")")")")#)#)#)#)#)#!&!&!&!&!'!'!'!'!'!'!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++****))*%")+179340.,)H@sk㳶YS)"'(#.)((33!1!1!'!'#####)#)%2%2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/2*)+*6"7#[Ho\`_'")$#)"*%!%(.+ GIy{>67/#########$#$#$#$#$#$#%#%#%#%#&#&#%#%#%#%#&#&#&#&#'#'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!(")*+++%/"-$($($!( 0(%0$RS߄b^B=8)@2%%#'#'!.!.--((!%!%#(#(%,%,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+..4 B/;(甒JI(#3/+1 '+)&)1452(%acު>67/#########$#$#$#$#$#$#%#%#%#%#&#&#%#%#%#%#&#&#&#&#'#'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!(")*+++'!"%"" %&E9:/:;IJzͭuqA37(%%#'#'!.!.--((!%!%#(#(%,%,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(., !$%1->,D2`^00))*%$!,/$(663/;8ت3+>7.....+*),.010-+*()&'%&$%%&')+,-/%&%&%'%'%'%'%'%'"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-"-"+$+$''''%(%(%(%(%&%&'#'#)!)!%#((,,6=KRዓhg5712*),*&$"!""$**!*!*#&#&% % #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''##%"%"1*1*/*[V嫪q++**+&'! $),$(""&'@6A:"("( $#""!!"! "(-(-).).+/).)-)-%(%(%'%'%&%&%&%&"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/!/!-"-"-%-%+'+'+(+()))))()()()($ $'+).$&',,a_핓薞bk7597811*" (&!*!*,,!&!&###(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(""))!.!.',',82#91tm:E3>%"'$%%&('$$""11,,99♞F>?7#)"(!& $# $ $!% $!%#&$'#%"$ "!).&+"'$"!%%('*%(%(%'%'%&%&%&%&"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/!/!-"-"-%-%+'+'+(+()))))()()()( % #%)*/&+./11/-ECz{ׯ]\?=1*1*&#&#!*!*,,!&!&###(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(""))!.!.',',3.0*7/E=Պvq!$&*'' (!),*(&54,,;CltND8.+*+*,+.,0-2/5061/)/)/(/(/&0'1(2)-3*1(.$*#(#(#'$('('('''''&'&'%'%"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&'&'&'%'%'%'%'&'&'('(%*%*%*%* +)))&#!$%'54/.CCggjr8:@B57)+#&#&%%!&!&!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()#)#%+%+!/!/))"-*4,*"NQюJE#&),)'''+(+(33)(]eۡXN=3535332210-,)*%)$823-,%(!(.%5+90$!('-+1.3-2+/),'('('''''&'&'%'%"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&'&'&'%'%'%'%'&'&'('(%*%*%*%*&( , ,'$!$$&**'&1033MTx߼mo79!#68#&#&%%!&!&!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()#)#%+%+!/!/))$ %"4,4,>AY\ܧnb?4%!%!$%+).(1,.0@B朮|~yrj{cr_mGTCO=G6@1:/8/708$.#-#,#,#*#*"'"'')')'''''%'%'$'$"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,**''!$!$!#!#!%!%(())(+./-.)(%&)+52.+21HGm~4=@I%#%#((!6!6#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/(/()+)+!*!*## $!*'/157oxNCNC'#!#+).(2-')WYcmXaFO5>)0$+&+(-')')'''''%'%'$'$"&"&"&#(#($)$)$)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,**''!$!$!#!#!%!%(())1/*((,'$%&!#,*/-8698LN\^x4=%#%#((!6!6#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/(/()+)+!*!*## # (*57W_mums)&&(&-$ )/'$op쉔}jsW`=C27.1266666.&/'-&,%)")"'$)&"("(,)-.6;#5$7!0 /%%#&$$!'!''('(+'+'#,#,#)#)#&#&%"%"%"%"%%%%'('('*'*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(AB~TNIB.'1* '!$)$$((%,%,+,+,+(+('%'%!&!&((#&#&#'#'#'#'#(#("'#(#)$*$+#*#+"*{W\*(*( ".!1&/)24+.%ps`cNN@A###$$( &#'$ #-/4010%8$7. /'&$$!'!''('(+'+'#,#,#)#)#&#&%"%"%"%"%%%%'('('*'*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(DFJLފ篻}TN%2+*2&#/$$((%,%,+,+,+(+('%'%!&!&((#&#&#'#'#'#'#(#("'#(#)$*$+#*#+"*twGL8=.0!##!-!-,4*286IH婩{k}TdDS8D5@06/5/3-1%&"# ! !#$.)*%##$$#*&,"0 .00//!)!)%"%"!+!+!*!*!)!)#(#(#(#(#(#(#*#*%*%*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(66CjhPGF<;.7)$* -&1)-)+(%-&...//++''!(!(!)!)!*!*!,!,!,!,!+!+!*!*!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)!$,*/-1-95WZDG&,%''''!&!&#%#%%%%%#&#&!(!(!)!)#'#'#(#(#(#(#(#("'#(#)$*$*#)#)"(99,,CG=A/3%$"" *",'),-#%>@sucaDA@K7C-/+-)".&)'%"%"!'!'++..!#!#!&!&!)!),,,,**((&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*(-+)+)'%QN헙RK>8%/%/#+#+!%!%!#!#!%!%!'!'#(#(#(#(#(#(#(#(#(#(#(#("'#(#($*$*#(#("'++$$.1\`,0;?%$ &0!,34%&FHÛr}KN8:2*703'/$%"%"!'!'++..!#!#!&!&!)!),,,,**((&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($' $%#:8,)<9?@wxQJ%/%/#+#+!%!%!#!#!%!%!'!'#(#(#(#(#(#(#(#(#(#(#(#("'#(#($*$*#(#("'##((=@9=ϓe~&++0** "$/%3$27:!`_ED4,3+/(2+.-20$'$*$!$!"##$&)&)") '((&&$$""#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((++!+!++&+&5%>.viEzQ]6B!"'"$ "'4"//7nvkt@D482-945(2&*+&'%%((++//-.++#$#$!$!$$$$$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,11..!"!"'&,2!efݢCI>D0/+*%'+-((++#(#('$'$#)#)#)#)#)#)#(#(#(#(#(#(#(#(#'#'&+#$&*++2=E.:*7!&#(  #"'4$29A^b94,').!"##$%%((((((%&"##$#$!$!$$$$$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,11..!"!"%,5#*=?gimsA:>,+##!&$'$'$#&#&!)!)!+!+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+)+)'+'+!*!*&& !!"-+,*--55ilv{><@>,0!$,,,,#'#'' ' #*#*#*#*#)#)#(#(#(#(#(#(#'#'#'#'$+)1#*#HXƀĺqg*(0.-0+.!&"'$($(!*1;ސkk=D/6#''*32;:20)&'$'$#&#&!)!)!+!+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+)+)'+'+!*!*&&%'$"0-78-->AVYߢfd42,0,,,,#'#'' ' #*#*#*#*#)#)#(#(#(#(#(#(#'#'#'#'!)+2%,$+;KRaUH2%2%*-+.%,#*#$$&*2?Gzt_\\ZYUURSMSMSKTMRJRJSMUOZVa]gdjgvSb+5)*-7:1.&")&)&'('(#-#-#1#1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(3$3$-"-"#%#%,,6/.%5..().0!cb̛`^#&03----!&!&''#+#+#*#*#)#)#(#(#(#(#'#'#'#'#&#&#,*3"&!%3A6DŮ~I<5)0#&**-%, ( !6>LTdfMNFDKHJDGA;89773627193<4=5;3;39393847374744:8>FNR[`jgq⍤ΣyeV2%3&-'3-$,%+2*)%&#%%(-%,$-"-")")"%#%#!%!%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(7&3#B>TO޵258;0(*"# %#$.$.--..!+!+#&#&#!#!# # !%!%!)!)%%!*!*)%)%-%-%8Beoku&,$**,+-!'(:=OḼhj@B13&&,,#$$%"$$%%'%'$($(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(&&%&"&%(****3200/0+,../04455E@RMge}{uuZZ52/,*&.)# $"  %!'$*#)#+#+#*#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,)3020%"li嫨egST3.0*(&(&#'#',,,,!,!,!*!*#&#&#%#%!(!(!*!*$$!*!*))))-&-&.349IS&,$*+-,.#$ /AQb{~EG6879AC8721)**+')(*(+'*%)$(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!( ' '&&$'%(****4332231233224444;6725364HHdd׋ࣨ[X96'",''"$ !%### & &&%#+#+#*#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/-1/52-*IFdaݳpq-(*$+*)(##',,,,!,!,!*!*#&#&#%#%!(!(!*!*$$!*!*))))-&-&6;+0˕0:!'%-*-*"!%%(DVvsz35+-$((-(.$*%$+**)('((!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($,#+#*#*%(&)')')"!"!&"($)%)%*')&-,*%*/$>:FBWYqr\XD?=1D8."."($)&!, ++(//..#,#,'+'+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( +!,$%)*.#-"f^鯨ff?>+)20-)+'#(#(#(#(!*!*!,!,!,!,!+!+#*#*#)#)###,#,).).+'+'/-/-T\Ʒdn0: &%.+.+"!%%%TfԙPWEL)++-,0.2&+$%",('&&'(,-!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%-$,$+#*%(&)')')(&(&+',(-)-),),)./2%0"2'/$3/3/BD:G.7!*%(#$!'%&.$+sjw5B&(312%&  '!)"/(5***+*, +!-!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(&,&,%*$("'#(#&$'#$#$ " "  #%"$#% #$%&&,+..,*,*/,,(.'>8ia_bI>F;5342$-&/**''((#*#*)-)-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($ 2&).*2-傀KI86.%/&'$'$%$%$#%#%!)!),,!,!,#(#(#%#%""%-%-)1)1)()($80-)ea+43="(#%!!&$%,'/ހ_i(66D/:'!#%(!)"$'((*+))'&!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%*%*$("' & &"%"%#$#$!#!#!"!"!"!"!"$'*)+++((((&%52,*.*40932,0(0(IFqmװWLOD861/( )&'''((#*#*)-)-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( +$,#!)'% 51.,omDB%6-'$'$%$%$#%#%!)!),,!,!,#(#(#%#%""%-%-)1)1)()(*"2+3/3/ҹbo'*2%" )'.*'#14Y]UP>9),')!!"!"!%!%#(#(%*%*%*%*%)%)%&%&#$#$!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%'%'%'%'#(#(#(#(!)!)))))))----++!)!)%'%''&'&)%)%+$+$/416JOkp_bAD24;>%*!!&!"%%)25#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(""))..'-'-1+E?oo1'D:6/)"!(!'""!#))++#%#%% % !$!$%*%*)/)/')') '#4,,$쏒Q^!)+4%$!%"-('#8;koig510+&((*'(!"!"!%!%#(#(%*%*%*%*%)%)%&%&#$#$!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%'%'%'%'#(#(#(#(!)!)))))))----++!)!)%'%''&'&)%)%+$+$#(9>38?DUZy|=@+- #("!!*-,/*-##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(""))..'-'-5/4-VPϋ_U6,(!-&+%)"% '"$'#%))++#%#%% % !$!$%*%*)/)/')')"/+0(' fiZe3?"(%,&")"&0.*(OPGE75%$!$!" %#(#(%*%*)+)++++++)+)+'+')$)$'"'"!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%%%%%&%&#(#(#+#+#,#,!-!-!-!-!,!,))((((((!*!*#+#+#-#-#.#.'.&3)"#(LEc\\[5/0+/'4,)%! -,+/!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!!,,55../+%!+"D:WM$"313.)%& "#&&**#%#%''#'#''''')*)*#+#+ +.("%:;>I+7&-"( '!($(/-)'bcΪcn=;86,#/''$  $#(#(%*%*)+)++++++)+)+'+')$)$'"'"!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%%%%%&%&#(#(#+#+#,#,!-!-!-!-!,!,))((((((!*!*#+#+#-#-#.#..() .596:=64-[Lrd⤙^Y=7&1*/+'# ##'*'*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!!,,55..*&-)6,5+hmê3164/**&"%&&**#%#%''#'#''''')*)*#+#+ !.(.(45,6(2(-""+#,!.!33--׃MU)1!'"(!##%$"! )&/+++#*#*')')+(+(+'+'''''#'#'!&!&!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#'#'%'%'%)%)%*%*%*%*%*%*%(%(''''#&#&#%#%#%#%#&#&#(#(#+#+#.#.#0#0&'%"#"(&+#+#>9XSA@=<66@@67-.!$$&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/"/"'*'*//**"&5/,&77YY鮶^jDO,/25/,*' "$((,,#*#*'$'$%*%*)")")#)##+#+$1,-)*74WU'11:%+#)"+!.%44..ؠ[a.7+3%*%*!# " ! *'/+++#*#*')')+(+(+'+'''''#'#'!&!&!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#'#'%'%'%)%)%*%*%*%*%*%*%(%(''''#&#&#%#%#%#%#&#&#(#(#+#+#.#.#0#0"-&0)0$+#"(&/-3+-%2,0+FHhjѡ|{VU**,+,-,-%'(+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/"/"'*'*//**" /*/*2177wմYd+.-0-)'$$&((,,#*#*'$'$%*%*)")")#)##+#+.;)*"#74:8Ԫ}(/9 $#(#.&0.,7957ÿYS60"&&+ /. 0-)+)+3(0%**((#&#&%&%&%&%&!(!(++,,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#)#)#)#)%*%*')')'('()$)$)!)!++'-'-'*'*'''''$'$'#'#%"%"%#%#%$%$1$/")&,)&/$-&!".!-(,%))(,,IFb^\f8B!'(.&)+.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(7'7'/'/'#%#%##"+""&)-3.-(LCkbDN.8#&#& #**00#.#.)()(%-%-))))!,!,%9+"&"&*(0.؇fw$.8).$/&0,/79792+3-)-$((,,,/-04).#**((#&#&%&%&%&%&!(!(++,,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#)#)#)#)%*%*')')'('()$)$)!)!++'-'-'*'*'''''$'$'#'#%"%"%#%#%$%$0#2&,))&&'-$3 +$!%(,762295;8NUku4:,1$'"%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(7'7'/'/'#%#%##)"!%(,51/+<2E:*".&"!**//#,#,)%)%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&)/2512.qoqq00)&)&!+!+,,###+#+#)#)#'#'#&#&'+$("'"' ) )*)陕.72;!# &%'&*'(&;30'ֻ^V&&..&'.+(!-!-'-'-%*%*!%!%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#"("'"' $#8=UZOM64 &(.**))%&%&-"-"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( -&30(*#G5LCOI3-%$%$&&((++!-!-)+)+%)%)''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&!%!%$$##'&+0-2)(+)g_t.=$3"(*0)%"%+!-###(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("5.%"0&+!fnҪgmEF#((-+' '#*,&("^Wԗu|QX)'1/%#%#&&****%)%))')'%(%())#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#$#$!&!&((*** ,"(""(%1'2(A>FBlsŨddHH(*!.%-$(#(##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( 3"5"+)+)-2-2`n]W=8#!0."0#(#(#(#(#(#(#(#(#'#'#'#'#'#'#'#'714/BA %$).*+!/,%' b`PN76 $,0)&)&!)!)++(()$)$+$+$#(#(,,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''!'!'%(%('('(*+,/&)#$# 50,'55WWDE45.-11&($&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((2!*!%)+//+.*0.nk_c'+59 ).#'#'#'#'#(#(#(#(#(#(#(#(#(#(#(#(3-+$srA? %%*.*+ .+$' fc?>0/&*+/)&)&!)!)++(()$)$+$+$#(#(,,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''!'!'%(%('('(()'("%"%!'$*#,'4/>=<%$))$&&(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( &/%/('+(,,(.*/,OL㟥|,1)-").#'#'#'#'#(#(#(#(#(#(#(#(#(#(#(#(4..(䪽`^:7 $#(1-. 0+$&rs5.+$#+'-)-)%+%+,,#'#'+!+!+!+!#'#'..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(**#'#'+$+$1"1"7,." !,/57#-';33+:2SJ圖l~1=%0 "$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($&$0!-'/$+#&7)5'fiͨR_(5!$#$#$#%#%#'#'#(#(#(#(#(#(#(#(#(#(.(/)VS74 $#(1-. 0+$&||3,+$&."-)-)%+%+,,#'#'+!+!+!+!#'#'..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(**#'#'+$+$1"1"+ ,!),.1.$ +5/(& .'4,:28/e_MY.:!#%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#% ,+&.#*#*B3)?B}}4@%#$#$#%#%#'#'#(#(#(#(#(#(#(#(#(#(*%0*n%;5 ,)5(!"#!"*006㛛uq%("0"0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'%'%'%(%('('(%)$("'#(#*#*(&!$!! )(+$#$!$!!!"#*&../+, & &! !  %#%#&'$&$*&+!*!*(($$##%%))//22#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(22((!"!")+)+uhgA(H/- *%$('*$'-**''%&%&)')'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%-%-)+)+)#)#/'$/.<;騬uu3"5%2/*'&!*,'("/)')'/&/&+'+'#(#(11-.fe%:4 ,(4'!#$!"*017䪪¾kh',!!/)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'%'%'%(%('('(%)$("'#(#*#*(& '*&  *#/'" %%*'.$,#*'33,,%$ %"&#'%&$'(&''-'-!*!*(($$##%%))//22#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(22((!"!")+)+@Jr|eLB).!,! (!,.,**''%&%&)')'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%-%-)+)+)#)#( &+)97y}ѺK;2!-*'$$&)*+,)')'/&/&+'+'#(#(11./dd%81 ,&3&!%$#",16:弿`['0&+"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'%'%'%'%'%(%(%($'"'#(%+%+!)&,+*0)/6341;:DB>A9=-3,21266;6;6)2(1(/(/&,'-'+),"% $ &%** -!/%*%*%*%*#+#+#*#*#(#(#&#&!$!$!"!"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&&&&!'!''+'+.-<;xy䷸[S)(.-,,() $%) )'''((%'%')&)&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((%)%))')''"'" '"&%00@Astsk4,,)-+")'(-*&''''+'+'''''!'!'/0,.^_' 70!-$0$!%$"!,19>XR(1')$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'%'%'%'%'%(%(%($'"'#(%+%+!)&"0$%+6<[Xdbihji]aPTAji˒귽zyj2929183:3;5>5=6>18.6*1*1+/).$( $' ' '$'$'('(',',%,%,%(%(%#%#% % #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!!!%!%!*!*%(%(0)(!3(J?grEP).5:3-'"'###))#)#)'&'&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!"!"'$'$)&)&%"%"#" +,!#/269mk(&20-2*0&&$$#%#%)&)&%&%&''-.,-QSɜ*%5/,, #(&" 23CDh`NG)0#&%2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%'%'#(#(#(#(#(#(#("'"(#)',',%*"'58fiﱰyX`6420#)&+%$$)#%#%)&)&%&%&''-.,-MNŋ,(40.,#+($!64IHRJE>*/#%$2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(%(#(#(!(!(!(!(!) (")#*),),)+&)qy\bPW<;540(2*.#.#' ' ' ' %"%"%%%%#(#(!*!*!-!-!.!.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#"#"!&!&!&!&!$!$&!)$/*& ##77w}_c<@4(<0, $#!#!!*!*#*#*%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!"!"'%'%+'+'%&%&& &!+/2&*2/LHijJJ&,(. )%!'!%!%%'%'!'!'&&)+(*GH{}.*51.+#+($!64KIE>A9+3'#"0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(%(#(#(!(!(!(!(!) (")#*),),)+&)tsXWC:80-!)' ' ' ' %"%"%%%%#(#(!*!*!-!-!.!.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#"#"!&!&!&!&!$!$)$"/*<6;:,+BIfmRV-!5), ##!#!!*!*#*#*%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!"!"'%'%+'+'%&%&&&#,5%)#GD%!ϸ`a(.(.$-(%!%!%%'%'!'!'&&)+)+EFtvsr/./.+''$1+2,63KH?6?6*&**#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(%(#(#((((("-#.'#&)$'//DDkbSK*:,;+5*4%)$'""$#!"#$ (&'%,.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%/%/#'#'! ! !!!!#+#+&0%/'/&.&*&*|sA93+1&-".+*'&,'-' $+0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!'!''('(+*+*%*%*****!*!*+)+)QPǰ9>)-27-3")!%!%%(%(!'!'$$#$/0GJWZji**/./**#+%+%2.KHB9B9+!(++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(%(#(#(((((&)")#**,$'55TUǾetL\/:&1+.25+*%$"# "-/30#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%/%/#'#'! ! !!!!#+#+&0%/'/&.&*&*]Uf^:2.#9.# # #(&,#, ( %"&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!'!''('(+*+*%*%*****!*!*+)+)KJOT*.%*(. '!%!%%(%(!'!'$$#$--BFPTaa%%---+ -$*$*$;5]WA9A9*#' --#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)!(!(((((%&!'%**+$&A>mjxMf.<+8+/492/-+  "&'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%3%3#(#(##!"!"#/#/"4!3!- ,"":*E4痔ih<9;8&%((#&"%")#*!*%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,'+'+-*-*'+'+--,,)))&)&27CGDG&(-/"##$#&#&%*%*#(#(##"'*9dg(*.0&$*&.&1)SK؆~@8?7&"!++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)!)!)(((("/)$%+12()93YSntHNAG01241/30(##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#*#*#(#(#&#&#'#'$*$*!*!*))''5*.#'$PL9C+-13('$"!#. /#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--'('(-%-%+&+&!*!*++#(#(+$+$(#KS˙88,+('(''('(),),%)%)## "&)1558fh*+/1*$(#*"+#OFӄ|?7=6&" +*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)!)!)((((&("),2<=/0.(71~?@&'" /-,'%!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#*#*#(#(#&#&#'#'#)#)!*!*))((0%.#>:95^coy)+)+$")(%* $+-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--'('(-%-%+&+&!*!*++#(#(+$+$#$5=ltFF((&%-,'('(),),%)%)## "&)2658]_#'/3.%(%+$*#NDτz?:>9&$!--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*!)!)((((%-&,&,9832.(.(ܕjuGJ>B7575#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(###'#'%.%.%+%+####!!&&..! &%>;.+31trFK16'$(. %-1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%&%&/ / -!-!#&#&))%&%&-"-"-2INⰪji75(%/,))))+-+-')')#"#"$(0528UW"/30&)&/(.'QG҇}@;?:(&" ..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*!)!)(((((#1%+!+*0/5/61ffSW531/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(###'#'%.%.%+%+####!!&&..&%-,,)-*HEHEχkpAF!&+$.$7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%&%&/ / -!-!#&#&))%&%&-"-"$49=BքGF*'*'))))+-+-')')#"#"#'0528?G"+0,%!(%,(,(DLxllBB25"(3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(@?^]gc"'0536,/!!"%&)(0# '+.+.-*/,--!*!*%&%&'#'#%#%#!&!&**--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($3-! "!%NPpr.$B7/$0% &,%'%'%(%(%(%(%%%%%"%"!#!#((..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*.((-.FAҐzx,;--. .,('"%%(?48-@H").,%!(%,(,(DLxzzHH14#&,2#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--<<[\{}rw?D'+/3%(!'+!)#++1+1)+$')&/,--!*!*%&%&'#'#%#%#!&!&**--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#2-"#&(*$%;=LNTJ@6.#7,%+%'%'%(%(%(%(%%%%%"%"!#!#((..#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,((00>9idA33%')- .+*#&$'>38-BJ$(-,%#( $,(,(DLxQR/0*+**#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(% % )&0-BATTlmvwU_5@029:.-&%"!)(+,&(##$%('****((#&#&'$'$%%%%#&#&((**#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($1*"$*+)$"*,,.nxמOJ)"91 &(#%#%#'#'%'%'%&%&%$%$#$#$#(#(!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,!#.050<7ݧc^0+&)"&'),!.(#'"!/ .7621HP"'',,%#( $,(,(DLxXY'(+,!-+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(601,,)'%**-,9:<=??@@FFJIWTkhЈ뛖jt9:23+)&%.--,%&!$%---,&%**((#&#&'$'$%%%%#&#&((**#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%2)"'$$"-/02@Imwws$,$%')+#%#%#'#'%'%'%&%&%$%$#$#$#(#(!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+, "+,:51+х83'*(,//!.,'"'""0,5510QW),),-&#( $*'*'BKvfg$!,)%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#$#$$%#$"$!#"$!# %&.).)/&2*:0C8O?)*ef¦lgE@724.#$#$#%#%#'#'#(#(%'%'%'%''&'&'%'%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(21 #6-:0JLnp#%,++'$%&)*0/29.5Y`/1(*!-&#( $*'*'@Jt~4/2.#* #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("(!'''(() *$.", (&#$"&#'2(2(/%'(1'J@[R|uMQ;>%(.1))## +%##%%!(!(#*#*%*%*%(%(%%%%%#%##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%(!0!0!- ,"& $/*75_\||A6>3%&%&#%#%#&#&!)!)#+#+')'))%)%+!+!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(3+ &+"2)42IGܾ4;3: # # #$'$'(*48.3Y`/1&(!-&#( $*'*'@Jt~=850!)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( &!' *!+!,!, *) * * ("*"($-#2(:0;1=29/=4=4@:KDabwxϘԼcg'**-//--  ##%%!(!(#*#*%*%*%(%(%%%%%#%##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( *()%' ,$(#'.)4/@=C@ؖFE"$!#"&$'"'+5:.3_d12,-%-"*#%/+($9DZd<;;:1#*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#('('('('(%*%*#+#+!,!,,,++++))''!&!&%'%'+,,-01.0=BZ_jx6C$(9<6/'  #$(#'"("(") (#*#*%'%''$'$'#'##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&++,,%%!%!830+MWÞA6"&15&',/ %,$!+!+%+%++%+%--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++%%#"#"////R]4962-(!!+,"$!"93@:`e./)*%-#+!#%.*&!4?Q\VTA?)*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#('('('('(%*%*#+#+!,!,,,++++))''!&!&%'%'%&'(.0,-/46;FNRYߪt:>%)!(!)+)+'+%)$*$*#*")#*#*%'%''$'$'#'##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&++,,%%" ,('#9Cjtf[%)-2&'(*#&"%(.$!+!+%+%++%+%--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++%%#"#"////FRU[$$(* "((%&=7F@hn.-,,'-&, #$&,)",8EQV\'3'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(- - +!+!+"+")$)$'&'&%(%(#)#)#)#)..++((%%!"%#&"% =7ZT狈MS4/:500.-(*)+),),%,%,!(!(#'#'#&#&%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%%!*!*++&&"# $#('-34:x9>)/13-/(&#'**#,#,'('(+ + #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#%#%!)!)((%(%(/7QY+'3/5.6/4310&$&$G=cYu{,,0/%*&, #$&/+$!+7@Lkq(5)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(- - +!+!+"+")$)$'&'&%(%(#)#)#)#)..++((%%$$"%#&'+),),(+>871>;SPƇҼVQ62,+))(*+.*.'*"("(!(!(#'#'#&#&%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%%!*!*++&& "#*)109?'-N]ƙW\!'.002+*"!**#,#,'('(+ + #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#%#%!)!)((%(%(.6-56340(!!''(&$"G=qg+)42#''+""&%0,)%-9=I:27/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()")")")"'#'#'#'#%$%$%%%%#&#&#&#&++**))(("*'  #!$ #./+,,-#$44UT떖^`88543388/1(*" $%%%%((!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()%)%%'%'!)!)**")!'%*44&&10ZY6?//=<,&1*%&((--#*#*'$'$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+ + %.%.11&&*-ܒLM78,'0,33@@>D6::NNZZȮEE54'(,,+.+.%))-%%%%((!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()%)%%'%'!)!)**)!,%!,,//44;;W_**66.((""#((--#*#*'$'$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+ + %.%.11&&/2dnҰqsEF94<800**.49?hdѝ%!51!%&* ! -)+',:8F}{=;#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#,#,#,#,#+#+#)#)!(!(!(!(!(!(!(!('$'$'&'&')')'+'+!)$,'.)1)0)0(-(-!+*$,&;-;-UH̓wXW,+'&,+32)+)+##%%**--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-%-%)%)%!(!(,,!40$. +$"-+8*.wqγ;;33,$#&&--!+!+%&%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(//'1'177&&('@EċYb3423..+,_p}ݴ&"95"&&**&)%(63AJH#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#,#,#,#,#+#+#)#)!(!(!(!(!(!(!(!('$'$'&'&')')'+'+&.'/'.%,!( '"'%*% #"'.)*$T[EB20&(#&#'#'%$%$%%%%#)#)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*%&%&''''!,!, *(-,%#HLQK83&&&&(',,&*&*QW4:-&6/ --44#+#+''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%+%+%)%)#%#%####+*# ,'*%)%,';4keu{;A65330:+5( *$%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-) :7%"զ}~KL(#3/%"%"!(!(!*!*!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!+!+%%%%'&'&#+#+!)'++""46prd_;5%%$$'',+%)%)npy@F%3+##--44#+#+''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%+%+%)%)#%#%#####"'$# '#-(0,-(.'=6qsӭy11'&#--6'1'1%&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($ &";8(%lncc .)%"%"!(!(!*!*!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!+!+%%%%'&'&#+#+!)'))$%35XZytC?(%(%'( , ,&)&)\[2164"()/**,,!(!()!)!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*%(%(#&#&!#!# &(()$'"$"# ")*+1PV`d;? $,1*/+0&'""#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("#&2+*"IC׎3'5)'"'",,..!$!$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%%%%'%'%#*#* (' " "00=<ፔ~GB(%)&()".!-)+(*UT?>32)/&-**,,!(!()!)!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*%(%(#&#&!#!#*,"# !""$!"#&("#()-3%+U]ae)-)-(-',#$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( #1) GANHE:;/'"'",,..!$!$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%%%%'%'%#*#*'& "43//t{EA-(-( ( (",!+&*&*LJƔS\'16@"'%+"#""'&**%%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&%&%&%&%&#&#&!'!'((****(+.2+/63HE뗖JG2//'7/!#),#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(' *("("5.=6猘s;0/.0$+0%$&%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%$%$)#)##+#+ ,(#%*,/-/-fi蛞JF,'-(' (",!+'+&*EC}zMW%/%$*(()*))%$&'&'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&%&%&%&%&#&#&!'!'((****$!"'"'/,74lkΒFC)!7/&(#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()!,& *%6/+$lyQF--0(,0%$%$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%$%$)#)##+#+("!")')'QTruYW.).)!&"'"+!*'*&):3YRFO953/( .&)&#!#+-4#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!$!$#%#%%&%&'('(%*%*#,#,--..*$!$($$!67CD䍚oo1):3,+'%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(."2!!))70FJ}x'.-3,+)),%*$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%#%#)")"%+%+,*"#$&$&9=BFli,(.)!&"'"+"+'*'*92?8IE3/*#/,)&#+)0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!$!$#%#%%&%&'('(%*%*#,#,--.. ,(!$(+1.*'1201S`NF:3(&/-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()&5!!%%>7&=A}18(/&-)(-&*$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%#%#)")"%+%+.!0!)&)+*,5:050)2+#$$&"*"*&+%*7./&cb75<::=58!)&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%!&!&'('())))+)+)')')#(#(!'!'&($'"%&)")& * *$1ZfTW*!=4#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((,8$& 6.1*90PHH[*<)!" 5,0'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%"%")")"%,%,)0)$ $$(-1(,޽/(0)"##$"*"*&+&+:00'ҺSQ75&)(,$,'/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%!&!&'('())))+)+)')')#(#(!'!'&(')#&#&$$#,%/)55AeoŠqt.%3+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+)5&',$4,:12)~j|3F '7.0'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%"%")")"%,%,).'$ $#'.2.2䛗/)0*""#$")#*',&+7+4(ᒘgo3<+3$*,3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''!(!('('(+(+(-&-&+$+$'!'!%%2(3)*.(+,.,-",(35Y[SF4'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((2!+'+&*#-!9'(\^ҠE]'  ?15(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%"%"+!+!%-%-30%)$)#(*1*1{t/)0*""#$")#*',',4(9-ziqBK#)##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(''!(!('('(+(+(-&-&+$+$'!'!%%.$0%'*'*.0,*",$/-/46Ǝr>1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,6!'+15"&=+0GIz|Qj(  ?13&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,%"%"+!+!%-%-#8,&&+!&#*#*g`HK="8D#(# &)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(QFg\fiDG'0'('1 $(,)!.;?44)*"%$('!,'1%/%0$/ - -!* ( ' '"&#'%&%&'('()*)*)+)+#(#(%&%&%&%&%&%&%&%&#(#(!*!*!*!*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)%)#/#/#0#0%*%*/'-%900().DIʒ>C*/,$5-!#1 -..!!#!#!%/%/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(###,#,)*)*-!-!--44敨-81=$)!& $%(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(<1PESX'*&)"&+'/'/!$,=>Àt{HO6=/78@.5*0'-&, $# &%#"  ##$$''((!*!*!*!*#*#*#*#*#)#)#(#(#'#'!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%$%$#*#*#,#,#(#(("("0)0),-%&WdԠgs=I+&72-&& )!*--$$####%,%,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&&#,#,))))+ + #"/-fvTa-;(,&)'&%$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*#7/\a #(+!#'-5$,"&/=>[\bi;B08*0/6%+"' & &$#""####$$''((!*!*!*!*#*#*#*#*#)#)#(#(#'#'!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%$%$#*#*#,#,#(#("#' 1*CD12;=::872424././----)*)*%'%'#&#&!#!#!%!%((**++!)!)#&#&%$%$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%!%!%&%&#+#+!*!* $#'() !#,3)/82qkPS-!5)'"&!!*!*..#)#)'#'##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--#,#,'&'&' ' $)$8>,1./23$*"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*)%$NSI=5*-$#"51)# 50)%qr~kxOQMOJJGF@B>?9999----)*)*%'%'#&#&!#!#!%!%((**++!)!)#&#&%$%$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%!%!%&%&#+#+!*!*+/!"&(!"')/)#GB猘eh1%6*(#'"!*!*..#)#)'#'##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(--#,#,'&'&' ' $1,9?#)0234",$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,+*)AFSFJ=/&) 41#+#'#,)LP͎退`_POFBD?;6>9>7B;@7?6-$/&+'*&$&#$ (!)&( *!,%,$*$("'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&%)%)%,%,#,#,!*!*''&&&&,'.)NW؏<5GA-(!'!'!/!/#+#+'"'"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(..#*#*%&%&#$#$""+,'':;UYPRAC%+##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( ' '<;zypcRE,"-#0/#)!'#,)DH|oiLG4-/(.&0'.%'!%'*+"*#()) *$*#)%)$(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&%)%)%,%,#,#,!*!*''&&&&#3.7@Waf_<5&!+%!'!'!/!/#+#+'"'"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(..#*#*%&%&#$#$%&$%23HLnpEG*"( #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($*%+<;fei^+&3/*,*$,&((**48\`ļy[OA6;3:23/3/--..&+%* ('('")#*%,&-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!+!+#+#+%+%+'+'+%+%+#*#*((((24'*'*ןEJ/-0/#%#%!+!+%+%+)$)$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++#'#'%'%'!*!*"")$"+):7vsRV1*,%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(-#24.C=xm+&2-*.*$)"**++.3EJ禮KD@8-))&%%()$"!) ('& (")&-'.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!+!+#+#+%+%+'+'+%+%+#*#*(((("$-003(+vخin(&10#%#%!+!+%+%+)$)$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++#'#'%'%'!*!*$"))&,*85PNX\0)/(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+#21,,&9;01*/%%""$'$'!(,4逄V_BK9@=E+4"*#*"(&$' (&-'.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,!)!)'%'%)&)&+(+('*'*#*#*!)!)#+/,2.GCso#'48%#%#!'!'%+%+)')'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((#$#$#)#)11%(%!&"4+3*nt*)21#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.40'#巴RS)*..**$$(,&)(/,4hlܵzCK-5!)(0"(!''& (!*%,&-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,,!)!)'%'%)&)&+(+('*'*#*#*!)!))1 --)510+GC4837%#%#!'!'%+%+)')'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(((#$#$#)#)11))'#($<40(Щ%$32#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(243*,#qz"+-$12(**/$*+2+2NPӒtGW'2*4 (!)% &"(!'#+"*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(++!&!&' ' + + -$-$+(+(')')%)%)%2#*#,%6)1$ԧfr.41.+&$+(+(!+!+,,''%"%"+ + %&%&,,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#+""!.,/**$LRqw9350-!/#"#'"#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!(!(!&!&#&#&&) %,$+-7 *+8䎛QU:=%*%*''$$$$)&)&-(-(%(%(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+.$'.*62@@nr1(0'!.2% !2$:,vh2"-&#&#)(3+(+(!+!+,,''%"%"+ + %&%&,,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%-$&$(# 4:GM<761, 1%#$(%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!(!(!&!&#&#&%( #%,"*+6!,)6{knEI%*%*''$$$$)&)&-(-(%(%(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((*&(3.62==>:2.'#(/&)$'+#)!bmonJH,,'' "$'+&+&))++((%#%#+"+"'&'&++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%,'$"*&&".2.2џIE=8-#3) &%*)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!&!&#&#&"%%''- &)0#+&0[fW\'+'+!'!'%%%%)&)&-(-(%(%(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#)#)502.52LH4/*&-1),&),%( OZ~<<,,#&"%+&+&))++((%#%#+"+"'&'&++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#*$+%#%#,(0,48,/o~\XB>) 0' &%))#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!&!&#&#&!$),'- &'.&-$/8d^x|NR>8E?+$+$''))((!&!&)&)&''''!)!)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#+)1)*"##&"+,$%HP~TU,%1*"&$)*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!&!&#%#%!",-&)!%&)&)',&+qx+-+-#)#)&&%%)&)&-(-('('(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#( -%,)($;2h_BF-4!2,'(+,-.3-:4պqu821++$+$''))((!&!&)&)&''''!)!)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&$,%'"##&"1223;Cgh-&.'#( %((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!&!&#%#%"#,-"&%(&)$(*/!堘+-+-#)#)&&%%)&)&-(-('('(&&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!.$-*%">6YPku-&6'+"&(+%.%.-(}le@81(1(#(#(((((!(!('('('('(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((( $$'%&%&20658:Y[븿723/'+&*+)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!'!'#%#%$$++ ()''""01x1/1/'+'+''%%''''+(+('('(''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,$0,#:.C7鰲.&6'+#'!.$1'0"+:+3$c\װtm1(1(#(#(((((!(!('('('('(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*3"+"%(%&$"'&<>@BҜ:650).(,,)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!'!'#%#%%%))++'' 44pi1/1/'+'+''%%''''+(+('('(''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*&62$ 6*5)ۦDI6;!%%, (&$0%3*=6unG@1*.169!($3!!(!('*'*'('(!'!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($($( ' ' $ $$%$%75-+tuUS97)+!#1)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!'!'#&#&%%%%%%%%'%'%'%'%_VѱVP/)*,-0! *&&%&%&+(+(''''!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(..#'"@8>6הei5:$1*%$#.)%&D=MF᚞䌐|wtzxҍ䭯}uLD(+/2*,-$!(!('*'*'('(!'!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*%*!(!(!%!%%&%&64-+dfϷdb86'("$.+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!*!*!)!)!'!'#&#&%%%%%%%%'%'%'%'%QHà]W2,+-.1#!+&%%&%&+(+(''''!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(+),&'"5,XOPQ0(C; "!&1"#!33%%զz\[LKG48.:9CB\_orֵYX54$+'-##*#&#&')')%)%)!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&(&("+"+** ( (-**';6toHH(%*((.#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!)!)!(!(!(!(#'#'%&%&%&%&'%'%'%'%3,sluk>5,-11(#/&%#'#')')'''''!&!&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#((,*.610+d`ڼA@/-42/,)3/$+#*BA҄uxBD)+'%*'+)+)'$$!   '#3.6261.)&#"c^ۏUT(&-+%#,*%#%#'('(#)#)((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$$$**,,((&&((4+\T]_*$-(',#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!'!'!(!(!(!(#(#(%(%(%(%('('(''''4,d[zF:*)0/'%/('#'#')')'''''#&#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(1+7140GCݣ_^/-31-+&2 29!EELLܻ]a8<-/79%#)&+)(%(%,)0-0,)%% #*%1,7395JEJExx~|0.,*)(('%#%#'('(#)#)((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$$$**,,((&&))5,PG鹷rt(#,&),#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!'!'!(!(!(!(#(#(%(%(%(%('('(''''<4[ROC+*--'%/'(#'#')')'''''#&#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.)2-95heSZ0+0+ 6',7!>2-!牐gc0'&'5( !#!&&-//,),'+)-(&$!@$/C6znPK82/(& '!'!'&'&#(#(((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%"%",,00++%%&&6+C8虔%("--#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&!'!'!)!)#)#)%*%*%*%*'('('('(81G@]P0/0/'$/&'#'#')')'''''#&#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(7,2'YVۣu|*%/*#-56 *%00$/#ahǞda@=0'90,#!,-0-22!/"0&*&*&$$!;<9->2fa>8-'!'!'!'&'&#(#(((#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&$&$ - -11,,%%%%6+;0~!%//#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&!'!'!)!)#)#)%*%*%*%*'('('('(6.=5g[5420(#.%&#'#')')'''''#&#&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(;0.#tqC77,/8%(3&#).%)5;V[W_(.*2#+$-%#%#%#'#'#(#(#*#*#*#*#(#(#'#'#%#%*&*)"!6=kscb) 5,"#"#+* .-,#,##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#('&'&'+'+%$%$&&0.,1!&b^߼NY-8#$%'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(98-,؈0!:,!!(.!&!&'&'&'+'+#$#$'&'&%)%)#,#,#,#,)1& "&((''&"&"ABhjfZ7,'(.1*)&*!%.4?E^f;C($3-5$,#)!#%#%#'#'#(#(#*#*#*#*#(#(#'#'#%#%%!+'0/('%-CJ뢮~~7.7.))---$-$#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#('&'&'+'+%$%$&&0/,1"'[Wآ_j0;"#%'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(66,+׃0!:," %"+/!&!&'&'&'+'+#$#$'&'&%)%)#,#,#,#,$,%-'*"&!!""'#'#YZJK -2!+% .$1",)(+(+|½*1%,($2&0 )#&"#%#%#'#'#(#(#)#)#)#)#(#(#'#'#%#%++&&(,+.'!)qzID1+  && *!+,&,&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&'+'+%$%$%%0/*/!&OIysw2> #&)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(1/'&{0"9+%#('./!&!&'%'%'+'+#$#$'$'$#)#)--++%")))%%,).,31.,܋no(,-2 **%3*",/2"%c]vy%,,3"0 -'(($*&#%#%#'#'#(#(#)#)#)#)#(#(#'#'#%#%//!! #,/.6%,OYvd_*$!!((!+!++%,&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&'+'+%$%$%%//).#(HBWQ2>")+#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.-'&sz0"7)$")(..!&!&'%'%'+'+#$#$'$'$#)#)--++ '! ((420.64;9齿NP'*('*#0*#1-0!9;UW箶JG*-14"2'#)('&%#&#&#'#'#(#(#(#(#(#(#(#(#'#'#&#&'+"'%$++2(0:B>F86),),))!)!))&(%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&',',%$%$$$,.'('(?8@94?&&++#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(,)'$in̹1%5*"")).-!&!&'%'%'+'+#%#%)")"!*!*//))!#-(:35.^\Ȉsv$&'&$# -,+#1), $029;ˁig:7),/2/*)-&% #&#&#'#'#(#(#(#(#(#(#(#(#'#'#&#& $).(.%&%,:B7?ijNL*-*-**"*!)(%(%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&%&',',%$%$$$,2"#)*<4=57B))''#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.+)&bhů5*8,""'&--!&!&'%'%'+'+#%#%)")"!*!*//)),'+&-&6/ӆU\+)53)*#$"*$,&(!)!)LVܐKF4/ #$*)+,$$!!#'#'#(#(#(#(#(#(#(#(#(#(#(#(#'#')%1",$!!&3715ٌvy.2.2&&!&!&'('(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'',','$'$!$!$+$2''7,@5AJ//""#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(.(*%[aɣ<4>5%&'(.0!&!&'%'%'+'+#%#%) ) **00**%7-.%H@ng53() !&/%-$"+.6(06@blB=<7 "#$)(('$$((#'#'#(#(#(#(#(#(#(#(#(#(#(#(#'#'#.*"%(-)/15)-x{).).$% %!&(*(*#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#'#'',','$'$!$!$,'6&&5*C8诸GP22#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(/*-'Y`ȟA8A8&'()/ 1!&!&'%'%'+'+#%#%) ) **00** &2(+!aZУ\c18"2+$!*8+#$-#+3;蟣;46.  ''**'$'$#(#(#(#(#(#(#'#'#'#'#(#(#(#(#(#(!."/((%#*-(+Z]/3'*$#$##%&) '+1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&',','%'%!%!%,* ://$᢬gp,)'%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*%$UZ̏TN.($&),**!&!&'$'$'+'+#%#%/)& $ (0.,1+. "0(IAQX(!6/+(&$"0,!&'0 )]b­1)7/  ''**'$'$#(#(#(#(#(#(#'#'#'#'#(#(#(#(#(#(!.!.&$##.1.1Z]=A-0&%%$!#$'%(/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!&!&',','%'%!%!%++ ://$ᚤnw.,,)#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*%IOWQ1+$&),.0!&!&'$'$'+'+#%#%& # (#,21./.0"%B:tl82712+*#%!,!%*."&'+fjus$71!!))+++#+##(#(#(#(#'#'#&#&#&#&#'#'#(#(#(#(#-",#" #.215W[»X\:=+%*$ $!)$0#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!%!%%+%+)&)&#&#&,- ""5-+#䇕|1/1/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#()%@Ioy_\52"''+. 2!&!&'$'$'+'+#&#&$$&&&)"&!)"+).&+46?A|{׾OJ2-+$("&&2'+&*5926<@˙us$:4!!))+++#+##(#(#(#(#'#'#&#&#&#&#'#'#(#(#(#(#-#-$#"#-1.2RWnr@C*$+%$! -%1#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!%!%%+%+)&)&#&#&+- ##4,,$v,*1/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(*&!EOktkg:6!%"'*.!&!&'$'$'+'+#&#&''(($' '&..3',*,^`LR++11)(/.#",*87''PRҕ)%51%%,,#,#,/ / #)#)#(#(#'#'#%#%#%#%#'#'#(#(#)#)',', &!'%$&/%.PVGI(-$%!#3$4#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%+%+)&)&%'%',0 !$.**&dw($2-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##""KVepqp>< %!&*.!&!&'$'$'+'+#&#&"'"'%#%#5-;2G>@7[\qx./,,)(&$//%#3333?B_b2-/+%%,,#,#,/ / #)#)#(#(#'#'#%#%#%#%#'#'#(#(#)#)',(-!'")&$%.#+V\GI%.%%!%6#3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%+%+)&)&%'%',1 !$,),)Yk$2-#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##MX\gqp>',@HDA/,((..%,%,33#*#*#(#(#'#'#%#%#%#%#'#'#(#(#*#*)+(*##"%-5/8ltLN&4'""4,#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&%(%(/#4 $*'1.La&":6#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%% ?JDOrq<A;&$"% +*%$&3#7(>/數L_2F);(:#,"+'#)%, *#$#$#$#$%%%%'%'%'$'$%$%$#####"#",- %"'+$)"679;ۚJE*+*+&1) #(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##%*%*)&)&#(#( 10#% !3*)W`+&72!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($#&%44BAFF60A;0,*&*,*,,/,/0.0.2+2+5#F5M<;)H8yi_Y5/&$*("%'&004$0 :,2$qtZm.A&8'9$-#,'#($-!, #$#$#$#$%%%%'%'%'$'$%$%$#####"#" 4-!#(0)*#01/0жKF,-*+%0)!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##%*%*)&)&#(#(/.#%"#7-+!U^+&72!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%$&%32A@CD,&2+# ()()*,*,.+.+0)0)5#7&=,H6|l躪NI-.-.*'&#+&.,!/-*(9:nnJP0032,(,(&$$!%%((%(%('('('('('('('('('('(''''%&%& -"%(51.*?=GFNH./)*$0* ##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##%*%*)&)&#(#(.,"##%:1,#T^+%71!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%&&33BB죩v{filobidlS_S_ScScYcYc[a[a\fXa^eu|ÿ'( ,)74 &$!+)75789:ov2121+'/+'%" ""&&%(%('('('('('('('('('('(''''%&%&*#"$'-)-)YX~OJ01)*#.* ##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(##%*%*)&)&#(#(/,!"!"90,#T^+%71!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&&&&44CC^a9<0'D;(#(,*&330!B>͎K9D205"&%$#)+'*'*')')')')'('('('(')')')')'*'* #03),01?@ǒJH/2&)". ,!"%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&#(#(!2. " 4,+#Wc+$70!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&'&'56HI[^'/&)%&!'("/&1/1/2.SNݮmZSA..%$&%+,'*'*')')')')'('('('(')')')')'*'*",0#&23UVݴHE/2&)!- ,!"%#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&#(#(!2/!#1))!\h+$70!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&'&'9:MOPI6/+-/1$$$# #'0/*)]]瞝|H7;*,,..11%&%&#&#&!%!%$$$$!&!&#(#(%(%(,/.2afB?,0$'!.!.$!'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&#'#'//$'!0))"^l)#5/!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&(&(=,+11cc츸\JB1/0222/%&%&#&#&!%!%$$$$!&!&#(#(%(%(**##+.;?ފ@<,0$'!."/$ %#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)&)&#'#'*/&)!#1+)"_m)#5/!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%&')>AWZ2<7A*4'!% $")/'.&`[֯nf5611(4-:11((" %!& &!'%"$%$*%+'*&)=;64OS|C@!03,'$("#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)%)%#&#&)/"-1)$-)_o% 51!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(!%(,CGknKU)3 '&!',+1%++#,%NJvr`a99!-&3##&)+-!& & &###%(+*.DBwuA>!$/2+)%)!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($$%*%*)%)%#&#&,.),'#0+jz'#51!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#("&(,EInrU^0/65&)!)#2&3,$#3131hnݱ^_CE0.1/0246-2(-'.-4 ('/3;5>8?3:6857ooКYV85"%),'*(-!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%*%*)%)%#&#&--#''%2/z("4.!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%)'+HLswKJ,+$&#%,,*+" $#65-,?Ekqa_HF+-&(&++0&-$,/7)1%- ).5HOqt>;52&('*' .(-!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%*%*)%)%#&#&.-#'+(41뉛v})#2+!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&*%)KPz~~A=52@>39)/'!,( '0%.(+/2ssdcRQFJEI>F=D@I@IHPQXnr,&1,&(#$&!-)*!#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%+%+)$)$#%#%-. %)0.43蘬gl,(1,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%* &OTӃ}x0.75)/&, +(3+ ("+,0*.GGrr(#4.&("#* ,$&"##(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%+%+)$)$#%#%,/!%&+0.21妺[a3/40!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#($)#TZَoqllLM"!(&$,$,11'(')&(. 7)u)$4/%$"!!,* "$&#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%+%+)$)$#%#%)/"&$(-,1/LT4/2-!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%*"[bߘK:G7yɽss(&+*&-! &3,-(*$%,. RHh^in.)61%$#"#/)%'#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(%%%+%+)$)$#%#%'."&!%+*.-BJ1+.)!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(&,#`f㟥}RJG7ZIG;i\VY:=-$0(9&$%''&&%%1402r}ޭBG3-3-))####!+!+!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(')'))")"'$'$,,))#("EA>:=B+*,+' ' %"%"%#%##&#&#(#(!)!)****%&%&#(#(!*!*++**#'#'%#%#) ) +1#fxƻ+)&$*#1**4,6Zy䒱`c.&.&0 -+)# ""%%2525EPitձsx9=3-3-))####!+!+!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(')'))")"'$'$,,' -'("HEMI=B*)((' ' %"%"%#%##&#&#(#(!)!)****%&%&#(#(!*!*++**#'#'%#%#) ) -3#izp|HT/,$""*#,6(16UMkֺVUA@0(90#"'"-'0&/$' "&/(`\䘔DL/7',',!$!$#&#&#,#,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(')'))")"'$'$!*!*$&0-&#PNhgs}7@$)#'%'%'%(%(#(#(#(#(#(#(#(#(#(#(#(#('$'$#&#&!)!)++++!*!*#(#(%&%&24 #n}{7C*(+#'!!%%**%%&(&(ጇᴯ^]+">6'&)"-%."+!# "4-0)=9VR٢098A',',!$!$#&#&#,#,!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(')'))")"'$'$!*!*$ *,)VTՄ`i2;$)(,%'%'%(%(#(#(#(#(#(#(#(#(#(#(#(#('$'$#&#&!)!)++++!*!*#(#(%&%&/2#%uq~R_2>(3 #(+++&&%%((1346_ZfaMPADCE:;,2(.$" "*%$!$!'$]b֛Yd#'5))((!*!*)*)*!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%(%('$'$'%'%!*!*'$.*+bcΤCQ'5&&/!-!-#,#,#+#+#)#)%(%(%&%&'&'&'%'%'$'$%&%&!(!(******!)!)#(#(3-2+臏ip25*-&+(-''0+/$() /&9&9&F9TGX[57-.'-.4%0 *"'#!/,2/>BHMźGQ*%3))((!*!*)*)*!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%(%('$'$'%'%!*!*'#-&( "rs3A)7('0!-!-#,#,#+#+#)#)%(%(%&%&'&'&'%'%'$'$%&%&!(!(******!)!)#(#(.(=7V]@G03*- %).*2&."'!&-#/&-$YLXOF>1,;624,.%"-+#5(:)(<*`NNS16!.&%%))#(#(-%-%!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%'%'''''''''#(#(")&.,127ٌ&.+2 !)!)#(#(#'#'%&%&'%'%'&'&)&)&)')')')'%'%'!'!'&&%%%%#$#$%$%$3)RHky@N%"+)+%( %%)*$&()**302/:2>6㡘ph94/)"%$&$&(,/.1165=+3 Yk'-%*)6 %%))#(#(-%-%!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(%'%'''''''''#(#( ($+-2')'"0.2/)! '%0-3333IHml㼺@@.-54$!#)&'*!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(#&#&%)%)'('(%&%&'/&.2>epOR'$%"! $!%"&#&#'#'#+&-'&"&"&%&%))))*,+-+0+0(-',$($(!$!$#")&&#( +$7,<15-}vSSC;JB&( (!)"$!# (*2/85cmКNT..66%)"#!#&'3'3&$% ($[Z֕򄁻][FE1425(1$-'")-,0//)*$!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!&!&%+%+')')%$%$&,+18IwFF5342(&(&'#+&,&("#$!&"%&&(&+&+%+%+(,'+%*%*$&$&&$&$+)/,.'$/&918-&=<@@&%$2,&+(-)/*1,-'),%)#3)2(FEfdޭFG((!$"""%#&%1%1.%*!3.4/</=.1'3**/(-20'(''.-++IJghZ^>@DE><86%'!"!&(-!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($$%-%-'*'*'#'#28$fzUZCN7B,<0?6:25,/+.**,,'&&%&&''$(%)#*")('"$%&(*+,..++,++*))-.=<;::9<<]_~⨭rp[Y45'(%%* )$('! "*'5/2-9595QTqtٹL=@1* +!',(- 6!7 $%&& )(11;<45XXĄ[]HI+*)',.46,1"'!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($$%-%-'*'*'#'#+1#(܃tVf?N;?59,/,//.11,**(''''$($(")!(('%&%&&(&(''&&''&%@@11<;SRxx풒ts86=;4511" "(-,'&)&/+1,)$2.95ք뻾zzGM9?%+)/ #"&)(5+2")&"#%B<}y?:.**.37 0!!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($$#.#.'+'+'"'"%)BFBR?O8E5A0909+1+1)-(,!'!'$$$$%$"!!"$%/1342615KSx¹U@5!14)#*$+).-&%$")((*OOoppuLQ*0%+ "/"(/,, $0+;5-'84NKmi48#'!1/?!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($$#.#.'+'+'"'"'+fjmwPY:A3:*.)-!' &##$%+*&% &&01BDJL|h`KC=)D06!2!"&)0..-/.6+5*;.UHQK1,2+HA "-%/53('"*+;8UQ郈W\=8;7:.5)*$("##&&")#*+,!. - - -#0$1A 1'0%&$$611-CE^_VVE?<65+:0C4J;>-?.C;F>X_zԮwlUJ6420$'%(,2 '*&/+4*.$2.95?<>;oormG@6/!/4+(*/"731-FP[eȿpkIE0%0%,%.(((&&!"/ -,'((,"/ -07"6!5"#"#50-(ce̲dZMC<-5&?.YHy}lhWG<@6/-0.!%!% &()*,(($1'4*,'(#HEρ~ouDJ.9/:,0*-#"#"!&#(*7$1*7.:22(',1#bSpFEAA77661379679:(&,*/'2)5&3$/,#(/.," '/#?67.җ林确ml:14+,)41-3,2/-/-#-$.242450/*?F]dѝ=H3=$'"% $#!(5 - ,".,,,,6(<.@1D5\Tʆ~ppKM57 !(&'%&',-..#*#* /#1%<2<2ֽswLK87;28.0-2/%+ '%)/*%"%'&(-()${ﴻxEI475)B63.&!*+$6*<+/%)$&&'0)5/SS||엠튓kp\aFD863+7.>2B7A9=4:+B3P@D4ULxoel<<..'#,("' $##!) .4B-;/=7E_i{X[."'("3.$0'4,>,>+/&*()%-$820)32@?jrȇ~urjeZ^SMDF=7(0!5%+_U˳{JQ5<,+320,.*!&!& '$+'#',-+#2"1@Mjwbd=?+(62,$*#* ,)-. 0&+"'+%)"h_ߒyyiimiea=;20!"%+*0)"! $ 03%'.7GOņɼ[W95/'/'&#&#$)%*+%3/('!&%*3-5/2)90WT}y겶_f88))5353*+)* %!&)!+-)$%"!&',-(+=@t|v:775/'5---&&%0,756.*"'((2$4'MHtoyRY9:77/+/+'"!$+'.(,,!!"",,;<577812`cfc.& $#,,'2"..-&+!& %"/ 2#?1;.:583CAHGܯS^FQ4;/6//774040)$+'%%##"")".""))22,,&'*+VW{{ꃋZb;62,0"5',+)(%%$$#&%)),),"'&*....0//-3.4/B1TDupc\MF3+2*.+.+*,()%!&"*%,#) #"$%(*C.;&9-9-SUwyͶsmKF6(3& %$''""!'+).%)%%##*)0/:5=96&7'=8FBaiƃ诽떜y][NL?8814,5.1.0-)+&( ' ' )%#$*-0,/!#;&6"D9eYv^R5+9/7283/3-0$-#,%0#. * * (%)('&%#*13:GOS[瀃glW\<>-/%%++0.42! # #$"&&.+3/7*2,1.47:6933,,H?lcҤdZMB/*(#*.58-6&/#."-!+$/&/(0*.'+&* /..-.4)0/719.8(5*.#1145:6PMxrϖǻzv]XMG.62:23562)2).0".* !!##% )&"74+*$ &%#$"+*+*=IBIDLS]du}ņֵ둞؃juS^=D548'*(+(+-0*,()!" "!##&#&#%#%#)*')$*#)!+ **)!*'$!')/1QWek謵UW8787>=GF$4$4$2$2$.#,"( '#& $!!""&"&"&& '"($! !!#()()+))'.*62F@QK?GAIENHROYV``kfqxxyz~~sqmkdb`]\VXROIIDM>I:?08)1%4(5,9/ %&%)'$("' '"(%0%0$-$-$+%-)-)-"&#'$)$)%,%,%-%->>34-//1OT{봹KJ(',,+-#,&0&-&-#& $!!" $ $" #%(&)*,)+**--52524/.*,%*$/6/6/8,6,6,6/:3>9D8B8@7?8@=DGKNRXNSIMDG>BCNKVى~_pET7F*4%0!( '!"!!#! +)%%%&''#$%&&&(("%&%&&(!*%,%,#)"("'#(0&0&/(0)0*0*-),(,&+%(#%!%& ( )" "&"))++#!$'!0"1 1-#+#+$+#*$,"*#+")'$,0:>HWavs{emFMAH39/5(.*0*/+0&&()* +. /(*.241,')(+*,,+*)(('(')(&"(%+&,'*$*$*$+%*++++*)(******, -*, .#1 .("((+ ,$0#/!.+*''$&%%$,,..9>;@V^emЃўszY_GM4:.4(-', (#+$/$/". +,..+**-2 6!7*)*))(('%%&&*),,*&,(-(,'*$*$,&.) , , ,++++,. / .-*((*&&&&'()*(()'( ,%2*7(%(%,+11CCUUjotyv|bhPXHO8340/+/+0,516172/*0+.(.(+$+$+&-(/////./..,.,.*.*,'-(,)+(*&*&+'-)*++,*)''#.#.#/#/#/"."/"/!+!+$+%-&,#($'"%,/,/02-/+.),*.+0KLOOZYed֢qlkf`\VSLHC?722,/*.)*%)$'!'!% % ....-,-,,),),(*'3.3.1-1-/,-),(+'+ .!/#1#0#0"/!.**++ , , - -%%& '#(&,-/.0#%)+68?AKMSV\`bf⍑mqOL?SHZOjaofxo܃z珆옏ƽƽ˦uuxLKN336--00/2336336336336336336336336336447447447447447447447447214103?>A--0447214447ihkHHK558103214447447447447447447447447447447447447447447447447447.//778223566;<<::;zz{dcgJJM::=76910333655855855855855855855855844744744744744744744744744744744744744744744744798;87:OOR^^a,,/214558558558558558558558558447447447447447447447447336336336336336336336336+*.214)(+>=@zz}۷_`cJKN358+-0)+.+-02479;>24724724724724724724724744744744744744744744744787:447@?B87:87:ØMLOEDG::=4473362140/2+*.447447447447447447447447447447447447447447447447..198;336769yx{윛zz}QQT::=769::=87:214558558558558558558558558447447447447447447447447769336..1#"%214"!$cbe<<ssv - #CAIWU]ZW_WU]US[US[US[US[US[US[US[US[VVYVVYVVYVVYVVYVVYVVYVVYVVYTSVIILTSVWWZBBE;9AEBJPNVWU]XV^VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\VT\WXXQRRVVW]]^"NPSz|('*{{~BCBzz{!!//7QSS?>Aqtt7::!%ywDFH=?A('*889zz{!!//7#&&447y||/12!% )+.kmpign -%%&<=@~('*iijzz{!!..5add&&)NQQ!%=?Ahem AAB=?A('*rrszz{!!..5"$''cff!%KMOljr - ;<<>@B('*rrszz{!!,-4퍐! #+..z}}!%UWZmks 334<=@('*ooozz{!!,-4%%( wzz!%NPSmks -CDD=?A('*mnnzz{!!,-4~('*+..x{{!%VX[olt <==@BE('*tuuzz{!!+,3򌏏||)(+033z}}!%]_bolt -<==9;>('*rrszz{!!+,3󈋋#"%),,ruu!%UWZolt -<==9;>('*rrszz{!!+,3󈋋#"%*--wzz!%VX[olt -<==9;>('*rrszz{!!+,3󈋋#"%+..vxy!%VX[olt -<==9;>('*rrszz{!!+,3󈋋#"%,//svv!%VX[olt -<==9;>('*rrszz{!!+,3󈋋#"%.01!%XY\olt -<==9;>('*rrszz{!!+,3󈋋#"%/12!%XY\olt -<==9;>wy{('*rrszz{!!+,3󈋋#"%033Z]]!%Y[]olt -<==9;>RTV('*rrszz{!!+,3󈋋#"%144!%Y[]not -EFK86>olt(&,kjo|}} #('1&&)11:FCM"!%VW^not - GHMfglZ[`RSX[\a_]e_]e_]e_]e_]e_]e_]e_]e^\d^\d^\d^\d^\d^\d^\d^\dccdZZZ_``aaaFDK -$"*NLTolt\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f\\f(&,igmyyz #%%/vw|&&)=?D -!%A@Enot -<;Aghm(&,{z} -uvv #%OOY127MPP&&)@?D -GHMfej - +*.!%A@Enot -{z lnq(&,CBH}a^f$ #!!!!!!!!"!!  !!" ' -&&)RSXFDJ "!%98=not -AADwy{(&, -            &'' #!$$&&)LJP[\aCBH!%;;>not - 136(&,VVW #144&&)#!',+0 !%::=lns VVYnpr(&,wwx ##"%!NOTBAF !%EDGlns ! #Z\^(&,99: #JLM#"%@?D  -238jin!%<@B569)+.$&)')+(*,%'*#%(#%(#%(#%(#%(#%(#%(#%(#%(,,/)(+)(+)(+ HHI!%hhplns 89>宰UWZ !qsv(&,ffi #lnq#"%569\]b pqvttw--0;<<!% -NNVlns KLQvxz "$vxz(&,HHK # #"%*,/ -  jkp,+0<==!%\\dlns =>C "$(&,0.4qou #AAKyyddn(68:#"%68:56; -hinXW]@@A!%YY`lns @AF=?A (&,BAF #++5㾽ǁ/.8358#"%136not -ijosrwAAB!%MMUolt -<==++,$#'~})(+ %+/-^^_[]`&&)223 - jkp -889!%XX[olt -<==++,$#'~})(+ %+/-?AD #kmp&&)223 - jkp -889!%XX[olt -<==++,$#'~})(+ %+/- -&&)223 - jkp -889!%XX[olt -<==,,-$#'~})(+ %+/-xz}&&)223 - jkp889!%XX[olt -<==,,-$#'~})(+ %+/-oqs&&)223 - jkp889!%XX[olt -<==,,-$#'~})(+ %+/-9;>&&)223 - jkp889!%XX[olt -<==-..$#'~})(+ %+/-TVY #&&)223 - jkp889!%XX[olt -<==-..$#'~})(+ %+/- -&&)223 - jkp889!%XX[kiq 778))*")(+ %+/-<=@{{~&&)778 lns566!%XX[ljrEEF889 )(+ %+/-!{{~)(+""# jkp334!%XX[pnu EEF++,")(+ %+/-024zz}('*??@ -klq 778!%XX[qow -778((("!$)(+ %+/-dfizz}! #pqv pqv|| <==!%XX[jhp -99:223 )(+ %+/- `af -rsxxwz ;<<!%XX[olt )(+ %+/-TVY#"% qrwBBE;<<!%XX[eefrrs('*)(+ %+/- 447WXX~ -rsx%%(MMN!%XX[(%-778ssthhh-..::=)(+ %+/-CCF[[\ћill255vw|{||FFGbbc!%XX[" ',*2*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0(((&''**+%%&))***+por%%(+*.*),+*.&&)0/2('**),*),*),*),*),*),*),*),((0((0((0((0((0((0((0((0%&-))1**2""* 216&$,~,,-QQT FDJ - -""*((0%&-$%,))1))1))1))1))1))1))1))1*(0*(0*(0*(0*(0*(0*(0*(0)'.(%-,*2*(0)(+)(+)(+)(+)(+)(+)(+)(+*(0*(0*(0*(0*(0*(0*(0*(0+)1+)1+)1+)1+)1+)1+)1+)1//7$%, -**+**++*.+*.+*.*),)'-)'-*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0*(0)'.*(0&$, - ZZZIGOzz{103ZX^(%-~,,-{{~!cbe{zolt 77?  - - ZZZ::= -)'-,,-558*),pnt dejBAF ZZZ#447IGO)'-,,-IILljr mlq ZZZ <=@  -xv|('*,,-!455  ihkHJM ZZZJJM - 336hem&&),,-214caissvDFH214ffi ZZZSRU$#'rrs$#' a_essv,,-SRU𯭳_^c(&,dcg!UWZ JJM!!!##$ uvvƿ­ŹŻǿĹʷ¿ݳ޽ſ뱰Žÿÿû载ɹ diff --git a/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults new file mode 100644 index 00000000000..87d024ce27f --- /dev/null +++ b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults @@ -0,0 +1,6 @@ +CONFIG_SPIRAM=y +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_ESPTOOLPY_FLASHSIZE="4MB" diff --git a/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults.esp32p4 b/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults.esp32p4 deleted file mode 100644 index 38db6f4e61e..00000000000 --- a/examples/peripherals/jpeg/jpeg_encode/sdkconfig.defaults.esp32p4 +++ /dev/null @@ -1,6 +0,0 @@ -# SPIRAM configurations - -CONFIG_IDF_EXPERIMENTAL_FEATURES=y -CONFIG_SPIRAM=y -CONFIG_SPIRAM_MODE_HEX=y -CONFIG_SPIRAM_SPEED_200M=y