From fb1037a2417e516d4be02d962b113e5d55cd5855 Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 1 Sep 2022 20:46:06 +0200 Subject: [PATCH] ADDED: Complete support for M3D animations! #2648 --- examples/README.md | 255 +++++++++--------- examples/models/models_loading_m3d.c | 139 ++++++---- examples/models/models_loading_m3d.png | Bin 16992 -> 23682 bytes .../models/resources/models/m3d/CesiumMan.m3d | Bin 0 -> 73844 bytes .../models/resources/models/m3d/seagull.m3d | Bin 0 -> 10263 bytes .../models/resources/models/m3d/suzanne.m3d | Bin 0 -> 11645 bytes src/rmodels.c | 63 ++++- 7 files changed, 263 insertions(+), 194 deletions(-) create mode 100644 examples/models/resources/models/m3d/CesiumMan.m3d create mode 100644 examples/models/resources/models/m3d/seagull.m3d create mode 100644 examples/models/resources/models/m3d/suzanne.m3d diff --git a/examples/README.md b/examples/README.md index 158f81df4..7a3e72f87 100644 --- a/examples/README.md +++ b/examples/README.md @@ -24,36 +24,36 @@ Examples using raylib core platform functionality like window creation, inputs, | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 01 | [core_basic_window](core/core_basic_window.c) | core_basic_window | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 02 | [core_input_keys](core/core_input_keys.c) | core_input_keys | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 03 | [core_input_mouse](core/core_input_mouse.c) | core_input_mouse | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) | -| 04 | [core_input_mouse_wheel](core/core_input_mouse_wheel.c) | core_input_mouse_wheel | ⭐️☆☆☆ | 1.1 | 1.3 | [Ray](https://github.com/raysan5) | -| 05 | [core_input_gamepad](core/core_input_gamepad.c) | core_input_gamepad | ⭐️☆☆☆ | 1.1 | **4.2** | [Ray](https://github.com/raysan5) | -| 06 | [core_input_multitouch](core/core_input_multitouch.c) | core_input_multitouch | ⭐️☆☆☆ | 2.1 | 2.5 | [Berni](https://github.com/Berni8k) | -| 07 | [core_input_gestures](core/core_input_gestures.c) | core_input_gestures | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) | -| 08 | [core_2d_camera](core/core_2d_camera.c) | core_2d_camera | ⭐️⭐️☆☆ | 1.5 | 3.0 | [Ray](https://github.com/raysan5) | -| 09 | [core_2d_camera_mouse_zoom](core/core_2d_camera_mouse_zoom.c) | core_2d_camera_mouse_zoom | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) | -| 10 | [core_2d_camera_platformer](core/core_2d_camera_platformer.c) | core_2d_camera_platformer | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [avyy](https://github.com/avyy) | -| 11 | [core_3d_camera_mode](core/core_3d_camera_mode.c) | core_3d_camera_mode | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 12 | [core_3d_camera_free](core/core_3d_camera_free.c) | core_3d_camera_free | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 13 | [core_3d_camera_first_person](core/core_3d_camera_first_person.c) | core_3d_camera_first_person | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 14 | [core_3d_picking](core/core_3d_picking.c) | core_3d_picking | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 15 | [core_world_screen](core/core_world_screen.c) | core_world_screen | ⭐️⭐️☆☆ | 1.3 | 1.4 | [Ray](https://github.com/raysan5) | -| 16 | [core_custom_logging](core/core_custom_logging.c) | core_custom_logging | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Pablo Marcos Oltra](https://github.com/pamarcos) | -| 17 | [core_window_flags](core/core_window_flags.c) | core_window_flags | ⭐️⭐️⭐️☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 18 | [core_window_letterbox](core/core_window_letterbox.c) | core_window_letterbox | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Anata](https://github.com/anatagawa) | -| 19 | [core_window_should_close](core/core_window_should_close.c) | core_window_should_close | ⭐️☆☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | -| 20 | [core_drop_files](core/core_drop_files.c) | core_drop_files | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | -| 21 | [core_random_values](core/core_random_values.c) | core_random_values | ⭐️☆☆☆ | 1.1 | 1.1 | [Ray](https://github.com/raysan5) | -| 22 | [core_storage_values](core/core_storage_values.c) | core_storage_values | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) | -| 23 | [core_vr_simulator](core/core_vr_simulator.c) | core_vr_simulator | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | -| 24 | [core_loading_thread](core/core_loading_thread.c) | core_loading_thread | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [Ray](https://github.com/raysan5) | -| 25 | [core_scissor_test](core/core_scissor_test.c) | core_scissor_test | ⭐️☆☆☆ | 2.5 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) | -| 26 | [core_basic_screen_manager](core/core_basic_screen_manager.c) | core_basic_screen_manager | ⭐️☆☆☆ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) | -| 27 | [core_custom_frame_control](core/core_custom_frame_control.c) | core_custom_frame_control | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) | -| 28 | [core_smooth_pixelperfect](core/core_smooth_pixelperfect.c) | core_smooth_pixelperfect | ⭐️⭐️⭐️☆ | 3.7 | **4.0** | [Giancamillo Alessandroni](https://github.com/NotManyIdeasDev) | -| 29 | [core_split_screen](core/core_split_screen.c) | core_split_screen | ⭐️⭐️⭐️⭐️ | 3.7 | **4.0** | [Jeffery Myers](https://github.com/JeffM2501) | -| 30 | [core_window_should_close](core/core_window_should_close.c) | core_window_should_close | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | +| 01 | [core_basic_window](core/core_basic_window.c) | core_basic_window | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 02 | [core_input_keys](core/core_input_keys.c) | core_input_keys | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 03 | [core_input_mouse](core/core_input_mouse.c) | core_input_mouse | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) | +| 04 | [core_input_mouse_wheel](core/core_input_mouse_wheel.c) | core_input_mouse_wheel | ⭐️☆☆☆ | 1.1 | 1.3 | [Ray](https://github.com/raysan5) | +| 05 | [core_input_gamepad](core/core_input_gamepad.c) | core_input_gamepad | ⭐️☆☆☆ | 1.1 | **4.2** | [Ray](https://github.com/raysan5) | +| 06 | [core_input_multitouch](core/core_input_multitouch.c) | core_input_multitouch | ⭐️☆☆☆ | 2.1 | 2.5 | [Berni](https://github.com/Berni8k) | +| 07 | [core_input_gestures](core/core_input_gestures.c) | core_input_gestures | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) | +| 08 | [core_2d_camera](core/core_2d_camera.c) | core_2d_camera | ⭐️⭐️☆☆ | 1.5 | 3.0 | [Ray](https://github.com/raysan5) | +| 09 | [core_2d_camera_mouse_zoom](core/core_2d_camera_mouse_zoom.c) | core_2d_camera_mouse_zoom | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) | +| 10 | [core_2d_camera_platformer](core/core_2d_camera_platformer.c) | core_2d_camera_platformer | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [avyy](https://github.com/avyy) | +| 11 | [core_3d_camera_mode](core/core_3d_camera_mode.c) | core_3d_camera_mode | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 12 | [core_3d_camera_free](core/core_3d_camera_free.c) | core_3d_camera_free | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 13 | [core_3d_camera_first_person](core/core_3d_camera_first_person.c) | core_3d_camera_first_person | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 14 | [core_3d_picking](core/core_3d_picking.c) | core_3d_picking | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 15 | [core_world_screen](core/core_world_screen.c) | core_world_screen | ⭐️⭐️☆☆ | 1.3 | 1.4 | [Ray](https://github.com/raysan5) | +| 16 | [core_custom_logging](core/core_custom_logging.c) | core_custom_logging | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Pablo Marcos Oltra](https://github.com/pamarcos) | +| 17 | [core_window_flags](core/core_window_flags.c) | core_window_flags | ⭐️⭐️⭐️☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 18 | [core_window_letterbox](core/core_window_letterbox.c) | core_window_letterbox | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Anata](https://github.com/anatagawa) | +| 19 | [core_window_should_close](core/core_window_should_close.c) | core_window_should_close | ⭐️☆☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | +| 20 | [core_drop_files](core/core_drop_files.c) | core_drop_files | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | +| 21 | [core_random_values](core/core_random_values.c) | core_random_values | ⭐️☆☆☆ | 1.1 | 1.1 | [Ray](https://github.com/raysan5) | +| 22 | [core_storage_values](core/core_storage_values.c) | core_storage_values | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) | +| 23 | [core_vr_simulator](core/core_vr_simulator.c) | core_vr_simulator | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | +| 24 | [core_loading_thread](core/core_loading_thread.c) | core_loading_thread | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [Ray](https://github.com/raysan5) | +| 25 | [core_scissor_test](core/core_scissor_test.c) | core_scissor_test | ⭐️☆☆☆ | 2.5 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) | +| 26 | [core_basic_screen_manager](core/core_basic_screen_manager.c) | core_basic_screen_manager | ⭐️☆☆☆ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) | +| 27 | [core_custom_frame_control](core/core_custom_frame_control.c) | core_custom_frame_control | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) | +| 28 | [core_smooth_pixelperfect](core/core_smooth_pixelperfect.c) | core_smooth_pixelperfect | ⭐️⭐️⭐️☆ | 3.7 | **4.0** | [Giancamillo Alessandroni](https://github.com/NotManyIdeasDev) | +| 29 | [core_split_screen](core/core_split_screen.c) | core_split_screen | ⭐️⭐️⭐️⭐️ | 3.7 | **4.0** | [Jeffery Myers](https://github.com/JeffM2501) | +| 30 | [core_window_should_close](core/core_window_should_close.c) | core_window_should_close | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | ### category: shapes @@ -61,22 +61,22 @@ Examples using raylib shapes drawing functionality, provided by raylib [shapes]( | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 31 | [shapes_basic_shapes](shapes/shapes_basic_shapes.c) | shapes_basic_shapes | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) | -| 32 | [shapes_bouncing_ball](shapes/shapes_bouncing_ball.c) | shapes_bouncing_ball | ⭐️☆☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 33 | [shapes_colors_palette](shapes/shapes_colors_palette.c) | shapes_colors_palette | ⭐️⭐️☆☆ | 1.0 | 2.5 | [Ray](https://github.com/raysan5) | -| 34 | [shapes_logo_raylib](shapes/shapes_logo_raylib.c) | shapes_logo_raylib | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 35 | [shapes_logo_raylib_anim](shapes/shapes_logo_raylib_anim.c) | shapes_logo_raylib_anim | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | -| 36 | [shapes_rectangle_scaling](shapes/shapes_rectangle_scaling.c) | shapes_rectangle_scaling | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | -| 37 | [shapes_lines_bezier](shapes/shapes_lines_bezier.c) | shapes_lines_bezier | ⭐️☆☆☆ | 1.7 | 1.7 | [Ray](https://github.com/raysan5) | -| 38 | [shapes_collision_area](shapes/shapes_collision_area.c) | shapes_collision_area | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 39 | [shapes_following_eyes](shapes/shapes_following_eyes.c) | shapes_following_eyes | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 40 | [shapes_easings_ball_anim](shapes/shapes_easings_ball_anim.c) | shapes_easings_ball_anim | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 41 | [shapes_easings_box_anim](shapes/shapes_easings_box_anim.c) | shapes_easings_box_anim | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 42 | [shapes_easings_rectangle_array](shapes/shapes_easings_rectangle_array.c) | shapes_easings_rectangle_array | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 43 | [shapes_draw_ring](shapes/shapes_draw_ring.c) | shapes_draw_ring | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | -| 44 | [shapes_draw_circle_sector](shapes/shapes_draw_circle_sector.c) | shapes_draw_circle_sector | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | -| 45 | [shapes_draw_rectangle_rounded](shapes/shapes_draw_rectangle_rounded.c) | shapes_draw_rectangle_rounded | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | -| 46 | [shapes_top_down_lights](shapes/shapes_top_down_lights.c) | shapes_top_down_lights | ⭐️⭐️⭐️⭐️ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) | +| 31 | [shapes_basic_shapes](shapes/shapes_basic_shapes.c) | shapes_basic_shapes | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) | +| 32 | [shapes_bouncing_ball](shapes/shapes_bouncing_ball.c) | shapes_bouncing_ball | ⭐️☆☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 33 | [shapes_colors_palette](shapes/shapes_colors_palette.c) | shapes_colors_palette | ⭐️⭐️☆☆ | 1.0 | 2.5 | [Ray](https://github.com/raysan5) | +| 34 | [shapes_logo_raylib](shapes/shapes_logo_raylib.c) | shapes_logo_raylib | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 35 | [shapes_logo_raylib_anim](shapes/shapes_logo_raylib_anim.c) | shapes_logo_raylib_anim | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | +| 36 | [shapes_rectangle_scaling](shapes/shapes_rectangle_scaling.c) | shapes_rectangle_scaling | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | +| 37 | [shapes_lines_bezier](shapes/shapes_lines_bezier.c) | shapes_lines_bezier | ⭐️☆☆☆ | 1.7 | 1.7 | [Ray](https://github.com/raysan5) | +| 38 | [shapes_collision_area](shapes/shapes_collision_area.c) | shapes_collision_area | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 39 | [shapes_following_eyes](shapes/shapes_following_eyes.c) | shapes_following_eyes | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 40 | [shapes_easings_ball_anim](shapes/shapes_easings_ball_anim.c) | shapes_easings_ball_anim | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 41 | [shapes_easings_box_anim](shapes/shapes_easings_box_anim.c) | shapes_easings_box_anim | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 42 | [shapes_easings_rectangle_array](shapes/shapes_easings_rectangle_array.c) | shapes_easings_rectangle_array | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 43 | [shapes_draw_ring](shapes/shapes_draw_ring.c) | shapes_draw_ring | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | +| 44 | [shapes_draw_circle_sector](shapes/shapes_draw_circle_sector.c) | shapes_draw_circle_sector | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | +| 45 | [shapes_draw_rectangle_rounded](shapes/shapes_draw_rectangle_rounded.c) | shapes_draw_rectangle_rounded | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | +| 46 | [shapes_top_down_lights](shapes/shapes_top_down_lights.c) | shapes_top_down_lights | ⭐️⭐️⭐️⭐️ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) | ### category: textures @@ -84,28 +84,28 @@ Examples using raylib textures functionality, including image/textures loading/g | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 47 | [textures_logo_raylib](textures/textures_logo_raylib.c) | textures_logo_raylib | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 48 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | textures_srcrec_dstrec | ⭐️⭐️⭐️☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 49 | [textures_image_drawing](textures/textures_image_drawing.c) | textures_image_drawing | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) | -| 50 | [textures_image_generation](textures/textures_image_generation.c) | textures_image_generation | ⭐️⭐️☆☆ | 1.8 | 1.8 | [Ray](https://github.com/raysan5) | -| 51 | [textures_image_loading](textures/textures_image_loading.c) | textures_image_loading | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 52 | [textures_image_processing](textures/textures_image_processing.c) | textures_image_processing | ⭐️⭐️⭐️☆ | 1.4 | 3.5 | [Ray](https://github.com/raysan5) | -| 53 | [textures_image_text](textures/textures_image_text.c) | textures_image_text | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | -| 54 | [textures_to_image](textures/textures_to_image.c) | textures_to_image | ⭐️☆☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 55 | [textures_raw_data](textures/textures_raw_data.c) | textures_raw_data | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | -| 56 | [textures_particles_blending](textures/textures_particles_blending.c) | textures_particles_blending | ⭐️☆☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) | -| 57 | [textures_npatch_drawing](textures/textures_npatch_drawing.c) | textures_npatch_drawing | ⭐️⭐️⭐️☆ | 2.0 | 2.5 | [Jorge A. Gomes](https://github.com/overdev) | -| 58 | [textures_background_scrolling](textures/textures_background_scrolling.c) | textures_background_scrolling | ⭐️☆☆☆ | 2.0 | 2.5 | [Ray](https://github.com/raysan5) | -| 59 | [textures_sprite_anim](textures/textures_sprite_anim.c) | textures_sprite_anim | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | -| 60 | [textures_sprite_button](textures/textures_sprite_button.c) | textures_sprite_button | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | -| 61 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | textures_sprite_explosion | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 62 | [textures_bunnymark](textures/textures_bunnymark.c) | textures_bunnymark | ⭐️⭐️⭐️☆ | 1.6 | 2.5 | [Ray](https://github.com/raysan5) | -| 63 | [textures_mouse_painting](textures/textures_mouse_painting.c) | textures_mouse_painting | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) | -| 64 | [textures_blend_modes](textures/textures_blend_modes.c) | textures_blend_modes | ⭐️☆☆☆ | 3.5 | 3.5 | [Karlo Licudine](https://github.com/accidentalrebel) | -| 65 | [textures_draw_tiled](textures/textures_draw_tiled.c) | textures_draw_tiled | ⭐️⭐️⭐️☆ | 3.0 | **4.2** | [Vlad Adrian](https://github.com/demizdor) | -| 66 | [textures_polygon](textures/textures_polygon.c) | textures_polygon | ⭐️☆☆☆ | 3.7 | 3.7 | [Chris Camacho](https://github.com/codifies) | -| 67 | [textures_fog_of_war](textures/textures_fog_of_war.c) | textures_fog_of_war | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | -| 68 | [textures_gif_player](textures/textures_gif_player.c) | textures_gif_player | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | +| 47 | [textures_logo_raylib](textures/textures_logo_raylib.c) | textures_logo_raylib | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 48 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | textures_srcrec_dstrec | ⭐️⭐️⭐️☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 49 | [textures_image_drawing](textures/textures_image_drawing.c) | textures_image_drawing | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) | +| 50 | [textures_image_generation](textures/textures_image_generation.c) | textures_image_generation | ⭐️⭐️☆☆ | 1.8 | 1.8 | [Ray](https://github.com/raysan5) | +| 51 | [textures_image_loading](textures/textures_image_loading.c) | textures_image_loading | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 52 | [textures_image_processing](textures/textures_image_processing.c) | textures_image_processing | ⭐️⭐️⭐️☆ | 1.4 | 3.5 | [Ray](https://github.com/raysan5) | +| 53 | [textures_image_text](textures/textures_image_text.c) | textures_image_text | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | +| 54 | [textures_to_image](textures/textures_to_image.c) | textures_to_image | ⭐️☆☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 55 | [textures_raw_data](textures/textures_raw_data.c) | textures_raw_data | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | +| 56 | [textures_particles_blending](textures/textures_particles_blending.c) | textures_particles_blending | ⭐️☆☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) | +| 57 | [textures_npatch_drawing](textures/textures_npatch_drawing.c) | textures_npatch_drawing | ⭐️⭐️⭐️☆ | 2.0 | 2.5 | [Jorge A. Gomes](https://github.com/overdev) | +| 58 | [textures_background_scrolling](textures/textures_background_scrolling.c) | textures_background_scrolling | ⭐️☆☆☆ | 2.0 | 2.5 | [Ray](https://github.com/raysan5) | +| 59 | [textures_sprite_anim](textures/textures_sprite_anim.c) | textures_sprite_anim | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) | +| 60 | [textures_sprite_button](textures/textures_sprite_button.c) | textures_sprite_button | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) | +| 61 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | textures_sprite_explosion | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 62 | [textures_bunnymark](textures/textures_bunnymark.c) | textures_bunnymark | ⭐️⭐️⭐️☆ | 1.6 | 2.5 | [Ray](https://github.com/raysan5) | +| 63 | [textures_mouse_painting](textures/textures_mouse_painting.c) | textures_mouse_painting | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) | +| 64 | [textures_blend_modes](textures/textures_blend_modes.c) | textures_blend_modes | ⭐️☆☆☆ | 3.5 | 3.5 | [Karlo Licudine](https://github.com/accidentalrebel) | +| 65 | [textures_draw_tiled](textures/textures_draw_tiled.c) | textures_draw_tiled | ⭐️⭐️⭐️☆ | 3.0 | **4.2** | [Vlad Adrian](https://github.com/demizdor) | +| 66 | [textures_polygon](textures/textures_polygon.c) | textures_polygon | ⭐️☆☆☆ | 3.7 | 3.7 | [Chris Camacho](https://github.com/codifies) | +| 67 | [textures_fog_of_war](textures/textures_fog_of_war.c) | textures_fog_of_war | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | +| 68 | [textures_gif_player](textures/textures_gif_player.c) | textures_gif_player | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | ### category: text @@ -113,42 +113,43 @@ Examples using raylib text functionality, including sprite fonts loading/generat | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 69 | [text_raylib_fonts](text/text_raylib_fonts.c) | text_raylib_fonts | ⭐️☆☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) | -| 70 | [text_font_spritefont](text/text_font_spritefont.c) | text_font_spritefont | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | -| 71 | [text_font_filters](text/text_font_filters.c) | text_font_filters | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | -| 72 | [text_font_loading](text/text_font_loading.c) | text_font_loading | ⭐️☆☆☆ | 1.4 | 3.0 | [Ray](https://github.com/raysan5) | -| 73 | [text_font_sdf](text/text_font_sdf.c) | text_font_sdf | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 74 | [text_format_text](text/text_format_text.c) | text_format_text | ⭐️☆☆☆ | 1.1 | 3.0 | [Ray](https://github.com/raysan5) | -| 75 | [text_input_box](text/text_input_box.c) | text_input_box | ⭐️⭐️☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) | -| 76 | [text_writing_anim](text/text_writing_anim.c) | text_writing_anim | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) | -| 77 | [text_rectangle_bounds](text/text_rectangle_bounds.c) | text_rectangle_bounds | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | -| 78 | [text_unicode](text/text_unicode.c) | text_unicode | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | -| 79 | [text_draw_3d](text/text_draw_3d.c) | text_draw_3d | ⭐️⭐️⭐️⭐️ | 3.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | -| 80 | [text_codepoints_loading](text/text_codepoints_loading.c) | text_codepoints_loading | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | - +| 69 | [text_raylib_fonts](text/text_raylib_fonts.c) | text_raylib_fonts | ⭐️☆☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) | +| 70 | [text_font_spritefont](text/text_font_spritefont.c) | text_font_spritefont | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) | +| 71 | [text_font_filters](text/text_font_filters.c) | text_font_filters | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | +| 72 | [text_font_loading](text/text_font_loading.c) | text_font_loading | ⭐️☆☆☆ | 1.4 | 3.0 | [Ray](https://github.com/raysan5) | +| 73 | [text_font_sdf](text/text_font_sdf.c) | text_font_sdf | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 74 | [text_format_text](text/text_format_text.c) | text_format_text | ⭐️☆☆☆ | 1.1 | 3.0 | [Ray](https://github.com/raysan5) | +| 75 | [text_input_box](text/text_input_box.c) | text_input_box | ⭐️⭐️☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) | +| 76 | [text_writing_anim](text/text_writing_anim.c) | text_writing_anim | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) | +| 77 | [text_rectangle_bounds](text/text_rectangle_bounds.c) | text_rectangle_bounds | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | +| 78 | [text_unicode](text/text_unicode.c) | text_unicode | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | +| 79 | [text_draw_3d](text/text_draw_3d.c) | text_draw_3d | ⭐️⭐️⭐️⭐️ | 3.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) | +| 80 | [text_codepoints_loading](text/text_codepoints_loading.c) | text_codepoints_loading | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | + ### category: models Examples using raylib models functionality, including models loading/generation and drawing, provided by raylib [models](../src/models.c) module. | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 81 | [models_animation](models/models_animation.c) | models_animation | ⭐️⭐️☆☆ | 2.5 | 3.5 | [culacant](https://github.com/culacant) | -| 82 | [models_billboard](models/models_billboard.c) | models_billboard | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | -| 83 | [models_box_collisions](models/models_box_collisions.c) | models_box_collisions | ⭐️☆☆☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | -| 84 | [models_cubicmap](models/models_cubicmap.c) | models_cubicmap | ⭐️⭐️☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) | -| 85 | [models_first_person_maze](models/models_first_person_maze.c) | models_first_person_maze | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 86 | [models_geometric_shapes](models/models_geometric_shapes.c) | models_geometric_shapes | ⭐️☆☆☆ | 1.0 | 3.5 | [Ray](https://github.com/raysan5) | -| 87 | [models_mesh_generation](models/models_mesh_generation.c) | models_mesh_generation | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | -| 88 | [models_mesh_picking](models/models_mesh_picking.c) | models_mesh_picking | ⭐️⭐️⭐️☆ | 1.7 | **4.0** | [Joel Davis](https://github.com/joeld42) | -| 89 | [models_loading](models/models_loading.c) | models_loading | ⭐️☆☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | -| 90 | [models_loading_gltf](models/models_loading_gltf.c) | models_loading_gltf | ⭐️☆☆☆ | 3.7 | **4.2** | [Ray](https://github.com/raysan5) | -| 91 | [models_loading_vox](models/models_loading_vox.c) | models_loading_vox | ⭐️☆☆☆ | **4.0** | **4.0** | [Johann Nadalutti](https://github.com/procfxgen) | -| 92 | [models_orthographic_projection](models/models_orthographic_projection.c) | models_orthographic_projection | ⭐️☆☆☆ | 2.0 | 3.7 | [Max Danielsson](https://github.com/autious) | -| 93 | [models_rlgl_solar_system](models/models_rlgl_solar_system.c) | models_rlgl_solar_system | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | -| 94 | [models_yaw_pitch_roll](models/models_yaw_pitch_roll.c) | models_yaw_pitch_roll | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Berni](https://github.com/Berni8k) | -| 95 | [models_waving_cubes](models/models_waving_cubes.c) | models_waving_cubes | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [codecat](https://github.com/codecat) | -| 96 | [models_heightmap](models/models_heightmap.c) | models_heightmap | ⭐️☆☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) | -| 97 | [models_skybox](models/models_skybox.c) | models_skybox | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | +| 81 | [models_animation](models/models_animation.c) | models_animation | ⭐️⭐️☆☆ | 2.5 | 3.5 | [culacant](https://github.com/culacant) | +| 82 | [models_billboard](models/models_billboard.c) | models_billboard | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | +| 83 | [models_box_collisions](models/models_box_collisions.c) | models_box_collisions | ⭐️☆☆☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) | +| 84 | [models_cubicmap](models/models_cubicmap.c) | models_cubicmap | ⭐️⭐️☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) | +| 85 | [models_first_person_maze](models/models_first_person_maze.c) | models_first_person_maze | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 86 | [models_geometric_shapes](models/models_geometric_shapes.c) | models_geometric_shapes | ⭐️☆☆☆ | 1.0 | 3.5 | [Ray](https://github.com/raysan5) | +| 87 | [models_mesh_generation](models/models_mesh_generation.c) | models_mesh_generation | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | +| 88 | [models_mesh_picking](models/models_mesh_picking.c) | models_mesh_picking | ⭐️⭐️⭐️☆ | 1.7 | **4.0** | [Joel Davis](https://github.com/joeld42) | +| 89 | [models_loading](models/models_loading.c) | models_loading | ⭐️☆☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | +| 90 | [models_loading_gltf](models/models_loading_gltf.c) | models_loading_gltf | ⭐️☆☆☆ | 3.7 | **4.2** | [Ray](https://github.com/raysan5) | +| 91 | [models_loading_vox](models/models_loading_vox.c) | models_loading_vox | ⭐️☆☆☆ | **4.0** | **4.0** | [Johann Nadalutti](https://github.com/procfxgen) | +| 92 | [models_loading_m3d](models/models_loading_m3d.c) | models_loading_m3d | ⭐️☆☆☆ | **4.2** | **4.2** | [bzt](https://bztsrc.gitlab.io/model3d) | +| 93 | [models_orthographic_projection](models/models_orthographic_projection.c) | models_orthographic_projection | ⭐️☆☆☆ | 2.0 | 3.7 | [Max Danielsson](https://github.com/autious) | +| 94 | [models_rlgl_solar_system](models/models_rlgl_solar_system.c) | models_rlgl_solar_system | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) | +| 95 | [models_yaw_pitch_roll](models/models_yaw_pitch_roll.c) | models_yaw_pitch_roll | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Berni](https://github.com/Berni8k) | +| 96 | [models_waving_cubes](models/models_waving_cubes.c) | models_waving_cubes | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [codecat](https://github.com/codecat) | +| 97 | [models_heightmap](models/models_heightmap.c) | models_heightmap | ⭐️☆☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) | +| 98 | [models_skybox](models/models_skybox.c) | models_skybox | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) | ### category: shaders @@ -156,36 +157,36 @@ Examples using raylib shaders functionality, including shaders loading, paramete | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 98 | [shaders_basic_lighting](shaders/shaders_basic_lighting.c) | shaders_basic_lighting | ⭐️⭐️⭐️⭐️ | 3.0 | **4.2** | [Chris Camacho](https://github.com/codifies) | -| 99 | [shaders_model_shader](shaders/shaders_model_shader.c) | shaders_model_shader | ⭐️⭐️☆☆ | 1.3 | 3.7 | [Ray](https://github.com/raysan5) | -| 100 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | shaders_shapes_textures | ⭐️⭐️☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) | -| 101 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | shaders_custom_uniform | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 102 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | shaders_postprocessing | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | -| 103 | [shaders_palette_switch](shaders/shaders_palette_switch.c) | shaders_palette_switch | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Marco Lizza](https://github.com/MarcoLizza) | -| 104 | [shaders_raymarching](shaders/shaders_raymarching.c) | shaders_raymarching | ⭐️⭐️⭐️⭐️ | 2.0 | **4.2** | [Ray](https://github.com/raysan5) | -| 105 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | shaders_texture_drawing | ⭐️⭐️☆☆ | 2.0 | 3.7 | [Michał Ciesielski](https://github.com/) | -| 106 | [shaders_texture_outline](shaders/shaders_texture_outline.c) | shaders_texture_outline | ⭐️⭐️⭐️☆ | **4.0** | **4.0** | [Samuel Skiff](https://github.com/GoldenThumbs) | -| 107 | [shaders_texture_waves](shaders/shaders_texture_waves.c) | shaders_texture_waves | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Anata](https://github.com/anatagawa) | -| 108 | [shaders_julia_set](shaders/shaders_julia_set.c) | shaders_julia_set | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [eggmund](https://github.com/eggmund) | -| 109 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | shaders_eratosthenes | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [ProfJski](https://github.com/ProfJski) | -| 110 | [shaders_fog](shaders/shaders_fog.c) | shaders_fog | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | -| 111 | [shaders_simple_mask](shaders/shaders_simple_mask.c) | shaders_simple_mask | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | -| 112 | [shaders_hot_reloading](shaders/shaders_hot_reloading.c) | shaders_hot_reloading | ⭐️⭐️⭐️☆ | 3.0 | 3.5 | [Ray](https://github.com/raysan5) | -| 113 | [shaders_mesh_instancing](shaders/shaders_mesh_instancing.c) | shaders_mesh_instancing | ⭐️⭐️⭐️⭐️ | 3.7 | **4.2** | [seanpringle](https://github.com/seanpringle) | -| 114 | [shaders_multi_sample2d](shaders/shaders_multi_sample2d.c) | shaders_multi_sample2d | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 115 | [shaders_spotlight](shaders/shaders_spotlight.c) | shaders_spotlight | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | - +| 99 | [shaders_basic_lighting](shaders/shaders_basic_lighting.c) | shaders_basic_lighting | ⭐️⭐️⭐️⭐️ | 3.0 | **4.2** | [Chris Camacho](https://github.com/codifies) | +| 100 | [shaders_model_shader](shaders/shaders_model_shader.c) | shaders_model_shader | ⭐️⭐️☆☆ | 1.3 | 3.7 | [Ray](https://github.com/raysan5) | +| 101 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | shaders_shapes_textures | ⭐️⭐️☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) | +| 102 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | shaders_custom_uniform | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 103 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | shaders_postprocessing | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) | +| 104 | [shaders_palette_switch](shaders/shaders_palette_switch.c) | shaders_palette_switch | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Marco Lizza](https://github.com/MarcoLizza) | +| 105 | [shaders_raymarching](shaders/shaders_raymarching.c) | shaders_raymarching | ⭐️⭐️⭐️⭐️ | 2.0 | **4.2** | [Ray](https://github.com/raysan5) | +| 106 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | shaders_texture_drawing | ⭐️⭐️☆☆ | 2.0 | 3.7 | [Michał Ciesielski](https://github.com/) | +| 107 | [shaders_texture_outline](shaders/shaders_texture_outline.c) | shaders_texture_outline | ⭐️⭐️⭐️☆ | **4.0** | **4.0** | [Samuel Skiff](https://github.com/GoldenThumbs) | +| 108 | [shaders_texture_waves](shaders/shaders_texture_waves.c) | shaders_texture_waves | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Anata](https://github.com/anatagawa) | +| 109 | [shaders_julia_set](shaders/shaders_julia_set.c) | shaders_julia_set | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [eggmund](https://github.com/eggmund) | +| 110 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | shaders_eratosthenes | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [ProfJski](https://github.com/ProfJski) | +| 111 | [shaders_fog](shaders/shaders_fog.c) | shaders_fog | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | +| 112 | [shaders_simple_mask](shaders/shaders_simple_mask.c) | shaders_simple_mask | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | +| 113 | [shaders_hot_reloading](shaders/shaders_hot_reloading.c) | shaders_hot_reloading | ⭐️⭐️⭐️☆ | 3.0 | 3.5 | [Ray](https://github.com/raysan5) | +| 114 | [shaders_mesh_instancing](shaders/shaders_mesh_instancing.c) | shaders_mesh_instancing | ⭐️⭐️⭐️⭐️ | 3.7 | **4.2** | [seanpringle](https://github.com/seanpringle) | +| 115 | [shaders_multi_sample2d](shaders/shaders_multi_sample2d.c) | shaders_multi_sample2d | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 116 | [shaders_spotlight](shaders/shaders_spotlight.c) | shaders_spotlight | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | + ### category: audio Examples using raylib audio functionality, including sound/music loading and playing. This functionality is provided by raylib [raudio](../src/raudio.c) module. Note this module can be used standalone independently of raylib, check [raudio_standalone](others/raudio_standalone.c) example. | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 116 | [audio_module_playing](audio/audio_module_playing.c) | audio_module_playing | ⭐️☆☆☆ | 1.5 | 3.5 | [Ray](https://github.com/raysan5) | -| 117 | [audio_music_stream](audio/audio_music_stream.c) | audio_music_stream | ⭐️☆☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | -| 118 | [audio_raw_stream](audio/audio_raw_stream.c) | audio_raw_stream | ⭐️⭐️⭐️☆ | 1.6 | **4.2** | [Ray](https://github.com/raysan5) | -| 119 | [audio_sound_loading](audio/audio_sound_loading.c) | audio_sound_loading | ⭐️☆☆☆ | 1.1 | 3.5 | [Ray](https://github.com/raysan5) | -| 120 | [audio_multichannel_sound](audio/audio_multichannel_sound.c) | audio_multichannel_sound | ⭐️☆☆☆ | 3.0 | 3.5 | [Chris Camacho](https://github.com/codifies) | +| 117 | [audio_module_playing](audio/audio_module_playing.c) | audio_module_playing | ⭐️☆☆☆ | 1.5 | 3.5 | [Ray](https://github.com/raysan5) | +| 118 | [audio_music_stream](audio/audio_music_stream.c) | audio_music_stream | ⭐️☆☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) | +| 119 | [audio_raw_stream](audio/audio_raw_stream.c) | audio_raw_stream | ⭐️⭐️⭐️☆ | 1.6 | **4.2** | [Ray](https://github.com/raysan5) | +| 120 | [audio_sound_loading](audio/audio_sound_loading.c) | audio_sound_loading | ⭐️☆☆☆ | 1.1 | 3.5 | [Ray](https://github.com/raysan5) | +| 121 | [audio_multichannel_sound](audio/audio_multichannel_sound.c) | audio_multichannel_sound | ⭐️☆☆☆ | 3.0 | 3.5 | [Chris Camacho](https://github.com/codifies) | ### category: others @@ -193,11 +194,11 @@ Examples showing raylib misc functionality that does not fit in other categories | ## | example | image | difficulty
level | version
created | last version
updated | original
developer | |----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------| -| 121 | [rlgl_standalone](others/rlgl_standalone.c) | rlgl_standalone | ⭐️⭐️⭐️⭐️ | 1.6 | **4.0** | [Ray](https://github.com/raysan5) | -| 122 | [rlgl_compute_shader](others/rlgl_compute_shader.c) | rlgl_compute_shader | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Teddy Astie](https://github.com/tsnake41) | -| 123 | [easings_testbed](others/easings_testbed.c) | easings_testbed | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Juan Miguel López](https://github.com/flashback-fx) | -| 124 | [raylib_opengl_interop](others/raylib_opengl_interop.c) | raylib_opengl_interop | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Stephan Soller](https://github.com/arkanis) | -| 125 | [embedded_files_loading](others/embedded_files_loading.c) | embedded_files_loading | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Kristian Holmgren](https://github.com/defutura) | +| 122 | [rlgl_standalone](others/rlgl_standalone.c) | rlgl_standalone | ⭐️⭐️⭐️⭐️ | 1.6 | **4.0** | [Ray](https://github.com/raysan5) | +| 123 | [rlgl_compute_shader](others/rlgl_compute_shader.c) | rlgl_compute_shader | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Teddy Astie](https://github.com/tsnake41) | +| 124 | [easings_testbed](others/easings_testbed.c) | easings_testbed | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Juan Miguel López](https://github.com/flashback-fx) | +| 125 | [raylib_opengl_interop](others/raylib_opengl_interop.c) | raylib_opengl_interop | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Stephan Soller](https://github.com/arkanis) | +| 126 | [embedded_files_loading](others/embedded_files_loading.c) | embedded_files_loading | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Kristian Holmgren](https://github.com/defutura) | As always contributions are welcome, feel free to send new examples! Here it is an [examples template](examples_template.c) to start with! diff --git a/examples/models/models_loading_m3d.c b/examples/models/models_loading_m3d.c index f67ba5e57..d11c3a005 100644 --- a/examples/models/models_loading_m3d.c +++ b/examples/models/models_loading_m3d.c @@ -1,97 +1,101 @@ /******************************************************************************************* * -* raylib [models] example - Load M3D model (with optional animations) and play them +* raylib [models] example - Load models M3D * -* Example static mesh Suzanne from Blender -* Example animated seagull model from Scorched 3D, licensed GPLv2 +* Example originally created with raylib 4.5-dev, last time updated with raylib 4.5-dev +* +* Example contributed by bzt (@bztsrc) and reviewed by Ramon Santamaria (@raysan5) +* +* NOTES: +* - Model3D (M3D) fileformat specs: https://gitlab.com/bztsrc/model3d +* - Bender M3D exported: https://gitlab.com/bztsrc/model3d/-/tree/master/blender +* WARNING: Make sure to add "(action)" markers to the timeline if you want multiple animations. +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software * -* Copyright (c) 2019-2022 Culacant (@culacant) and Ramon Santamaria (@raysan5) * Copyright (c) 2022 bzt (@bztsrc) * -******************************************************************************************** -* -* NOTE: To export a model from blender, just use https://gitlab.com/bztsrc/model3d/-/tree/master/blender -* and make sure to add "(action)" markers to the timeline if you want multiple animations. -* ********************************************************************************************/ #include "raylib.h" -#include -#include - //------------------------------------------------------------------------------------ // Program main entry point //------------------------------------------------------------------------------------ -int main(int argc, char **argv) +int main(void) { - char *model_fn = argc > 1 ? argv[1] : "resources/models/m3d/seagull.m3d"; - // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; - InitWindow(screenWidth, screenHeight, "raylib [models] example - M3D model"); + InitWindow(screenWidth, screenHeight, "raylib [models] example - M3D model loading"); // Define the camera to look into our 3d world Camera camera = { 0 }; - camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point + camera.position = (Vector3){ 1.5f, 1.5f, 1.5f }; // Camera position + camera.target = (Vector3){ 0.0f, 0.4f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y camera.projection = CAMERA_PERSPECTIVE; // Camera mode type Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position + + char modelFileName[128] = "resources/models/m3d/CesiumMan.m3d"; + bool drawMesh = 1; + bool drawSkeleton = 1; + bool animPlaying = false; // Store anim state, what to draw // Load model - Model model = LoadModel(model_fn); // Load the animated model mesh and basic data + Model model = LoadModel(modelFileName); // Load the bind-pose model mesh and basic data - // Load animation data - unsigned int animsCount = 0, animsSkel = 1, animsMesh = 1; - ModelAnimation *anims = LoadModelAnimations(model_fn, &animsCount); + // Load animations + unsigned int animsCount = 0; int animFrameCounter = 0, animId = 0; + ModelAnimation *anims = LoadModelAnimations(modelFileName, &animsCount); // Load skeletal animation data - SetCameraMode(camera, CAMERA_FREE); // Set free camera mode - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetCameraMode(camera, CAMERA_FREE); // Set free camera mode + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); - // Play animation when spacebar is held down if (animsCount) { - if (IsKeyDown(KEY_SPACE)) + // Play animation when spacebar is held down (or step one frame with N) + if (IsKeyDown(KEY_SPACE) || IsKeyPressed(KEY_N)) { animFrameCounter++; - UpdateModelAnimation(model, anims[animId], animFrameCounter); + if (animFrameCounter >= anims[animId].frameCount) animFrameCounter = 0; - //printf("anim %u, frame %u / %u\n",animId,animFrameCounter,anims[animId].frameCount); + + UpdateModelAnimation(model, anims[animId], animFrameCounter); + animPlaying = true; } - if (IsKeyDown(KEY_S)) - { - animsSkel ^= 1; - } - if (IsKeyDown(KEY_M)) - { - animsMesh ^= 1; - } - - // Select animation on mouse click - if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) + + // Select animation by pressing A + if (IsKeyPressed(KEY_A)) { animFrameCounter = 0; animId++; + if (animId >= animsCount) animId = 0; UpdateModelAnimation(model, anims[animId], 0); + animPlaying = true; } } + + // Toggle skeleton drawing + if (IsKeyPressed(KEY_S)) drawSkeleton ^= 1; + + // Toggle mesh drawing + if (IsKeyPressed(KEY_M)) drawMesh ^= 1; //---------------------------------------------------------------------------------- // Draw @@ -102,25 +106,53 @@ int main(int argc, char **argv) BeginMode3D(camera); - if (animsMesh) - DrawModel(model, position, 1.0f, WHITE); // Draw 3d model with texture + // Draw 3d model with texture + if (drawMesh) DrawModel(model, position, 1.0f, WHITE); - if (anims && animsSkel) - for (int i = 0; i < model.boneCount; i++) + // Draw the animated skeleton + if (drawSkeleton) + { + // Loop to (boneCount - 1) because the last one is a special "no bone" bone, + // needed to workaround buggy models + // without a -1, we would always draw a cube at the origin + for (int i = 0; i < model.boneCount - 1; i++) { - DrawCube(anims[animId].framePoses[animFrameCounter][i].translation, 0.05f, 0.05f, 0.05f, RED); - if (anims[animId].bones[i].parent >= 0) - DrawLine3D(anims[animId].framePoses[animFrameCounter][i].translation, - anims[animId].framePoses[animFrameCounter][anims[animId].bones[i].parent].translation, RED); + // By default the model is loaded in bind-pose by LoadModel(). + // But if UpdateModelAnimation() has been called at least once + // then the model is already in animation pose, so we need the animated skeleton + if (!animPlaying || !animsCount) + { + // Display the bind-pose skeleton + DrawCube(model.bindPose[i].translation, 0.04f, 0.04f, 0.04f, RED); + + if (model.bones[i].parent >= 0) + { + DrawLine3D(model.bindPose[i].translation, + model.bindPose[model.bones[i].parent].translation, RED); + } + } + else + { + // Display the frame-pose skeleton + DrawCube(anims[animId].framePoses[animFrameCounter][i].translation, 0.05f, 0.05f, 0.05f, RED); + + if (anims[animId].bones[i].parent >= 0) + { + DrawLine3D(anims[animId].framePoses[animFrameCounter][i].translation, + anims[animId].framePoses[animFrameCounter][anims[animId].bones[i].parent].translation, RED); + } + } } + } DrawGrid(10, 1.0f); // Draw a grid EndMode3D(); - DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, GetScreenHeight() - 30, 10, MAROON); - DrawText("MOUSE LEFT BUTTON to CYCLE THROUGH ANIMATIONS", 10, GetScreenHeight() - 20, 10, DARKGRAY); - DrawText("(c) Seagull model by Scorched3D", screenWidth - 200, screenHeight - 20, 10, GRAY); + DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, GetScreenHeight() - 60, 10, MAROON); + DrawText("PRESS A to CYCLE THROUGH ANIMATIONS", 10, GetScreenHeight() - 40, 10, DARKGRAY); + DrawText("PRESS M to toggle MESH, S to toggle SKELETON DRAWING", 10, GetScreenHeight() - 20, 10, DARKGRAY); + DrawText("(c) CesiumMan model by KhronosGroup", GetScreenWidth() - 210, GetScreenHeight() - 20, 10, GRAY); EndDrawing(); //---------------------------------------------------------------------------------- @@ -130,8 +162,7 @@ int main(int argc, char **argv) //-------------------------------------------------------------------------------------- // Unload model animations data - for (unsigned int i = 0; i < animsCount; i++) UnloadModelAnimation(anims[i]); - RL_FREE(anims); + UnloadModelAnimations(anims, animsCount); UnloadModel(model); // Unload model diff --git a/examples/models/models_loading_m3d.png b/examples/models/models_loading_m3d.png index 80c859fee02548c70a84f42fd75584cf341d36e5..2214b8e0152194319b3cb88f763d85df9019e5a0 100644 GIT binary patch literal 23682 zcmeIac|6qX`#(Ngj2eukn!zxWLW{DDZERy{21Qcu7O99dNsfd{su6~2Fe0Rg265Vy zse?9>B9TEt>L6-tC8@NY@AaDDob&xWKA+$6|L6SS(cxaM`?|07d0qGGn5PF@ai+#h z6bhy2>f-E$LSd;W6#7114t_J&|8gA)<>Tt=?67wK7XKgLJ`Eq?tv1rY2x~46zI4A14@13;p>mLeAaY{iK#$3$}%M+%8KyYkAzn`HT9`?utd`|MqA6 zt@jT9wAUc~<7i_S;}Qo~`VJEa1F0D3Y%A-;V=zf;X z72Z$JdK$KD)XK30@JIukv?hcIgt~TvbAU6j6vuB>vkru^HJJR_y zBOhz+x@v1=T*yD;gcO08J{=KYNf_Py))>S64iuFz^R5)V_UY-0G5I=41PjfN@_ehy=@no?2euO9}Nth z5F?he2<%Db)pIg5r`VpVh7qnPWv%%>b@*mu980q+4tp@%wVjipH8rZ2BBe^*Zi*^o zDJA&>G16mZOm7kGUEsQ)7*!3L@-W)?0$B7ogZ*sSm*cY^H1|-iXC*EWR8^L2h%b`$H$0Mzl#IR z{w+ftPSRCOrbUE~lZ(LfBj2#pBvb4lT$Nq0Wa@_U!ti|atdesDteSB8nZF5EkP;m9 zFM|J(YUE#en_yXp*Erwk*BL;By=>MNx`eCIx0d(;+ zPnzM}hzk8nzyF_k;z`4?*!}D@@jpD`;E8jk*O+ed5B>l5zy6z0mPW=1%RGb%`=&U_ z3zRZ{&AWdu{O`CL^-?BH9skI|fBDycm8Sm}u6oi!huRjNyrli|gi-doe{+#LN%SQv zUYcff35|PE=oc9HkQuCxD~P1e_%HD`Q3o?+=X|HP^l?IMWgpeZkr#Zuefzdhfx~rV zu358}KJw2tybaO=r;SJtT#83Wmyt!EdnBrtVpcdJ)&&zh&6+KE{?cj<_Z!mHo%C=V z+cU=5>i^~RoGF_m)1_iyR+@1()l~uAJklyzQpd?APu*<(Y?+y`mfjJSW+YfqR6N)# z9#}6VbN;QOE|4C8a2%IT%-e|PHwE(bu1s@9wi4z7>HllzL}i((N_S=|po88wQroJj zZ|>g{H~eC$4gOn32z zEH`v+ymrzul8IdU!QVuAF^Qi;;F!+~q+aj0u$WMP^1gli!7 z<)9{{q>)U?fAXZGWzvwZB^^Bh5`}Z*w&x^>n-mVX3bvGK6qJX62Y{;&o-u@+_qfcX z@nzzWDWstkW2(yof<$}oR~fZsTu+L0>_)?DUD8ZG9VGeH;o!7sv2pOl9{BLbS2MHwg#_u5=^ z2wK9AbSyp>!X6rV6gnI(NHan9Q9K2FJ}hIyv)Fmy&acK=(^Okgq?dWe6KfE?laK2r zlAf%%D0eWzs%tfQcQaVS<|!Xm2(GFrkZ|V#YvrR*`WEBY5paulM8Cd%+;NttnCbCe zvPAw+!$WcMV@}NuaF}*7p%)BEub!?p`{sV3D8|CeT3<*Z4)voQ8?NBZ=F9Ju-!5u3 zo@}T`CSrHeaU7XtZ(9zbOmdX+%Q({wjKmsSMYtz}r@HCyzEg|Pu2(%~R&HWtE>XH{ zqCV$HN8fId(4xTcbYdV{aE#XEapt^8GU%O$wEa;8PQlmH5DJuT>AqJ`~M2cPU9bCx1|W#+$ohkAbnJ_ij~Ik{&;PTpD#U3uO2k zNo&wwggvUO&C<-%{R2I7{3{1-X7l<;DgSUvn+M(&tVWK~x3|49K|kQotR^4)-6r{K z`OK9J%5M2)JNG1s68^5UWfzKac!tKpoX0UF@($9BwP3Zh6Ld?|=FL9SSal>&$9>JD z@1Rd|p#KjVv-kts?WJ|s2hzrpB#j(pFUMfGffo~I^BB|ux($1AO0Nn=#EDKW5?1G! z^R{8b=Z8BobCf+F=P#EJ09BZLw&8*KH>RBq#XyT}ILGr5wttOJ!xcG(Iv9@r+N#n) zZqEvoFurZfut3h~0(VYMjyTzLiw4Kp0=Sq4HpNIG4J9S@ezm-~~GV;|ju zzq7-ZLk<&CX16s{ydb{tcvu&bp;XBG#kmkyxig|X;ce(h9Ce?a!628AnfykQhdDsw zc7LF@$BC65kGbrwDf#H&#^_}VFluK1xYshm zvDsRuAd)F~eMEFg=k(^eVGQlIp*-#rvim;lnRl$9xBl}Z*2-PN9=)38u=1hKnrDQZH`w$ls>NQ>;9Yj7j?u+D5+;! z8DoKBaoEBB&-NUv7Y-LaDWiGKdI4-}9qf9g=37F?Q%ZO{wz6}fNmmuQ<9M*8MXtO_ zK*Bct5W1ltcN=e;KCZo!8)3)1`|zeb&dRoGh*!Pth!G!C8IM}>4t!Bs*28Yj1K~IQyf8ksiDqWjieQ*|;1tc2ulLZE+yyd?FqGdN#{rCQCkGzWSsvX?}~^ci*7?5@rk~;f6d)O;=Ly8jyIB)&?Z*oXq z-v9ZRPUm;sYrdr2&NMI770hp<`=oF2xWYY{$$1+WbEVe?l%pdopfu8xWvwG@Oc5*LRd%ARu*$Xf z)z_ox-p2ens8S+zt!s5#Qqk#{Ri@ZZmFnkT^F&xo%c`re>;|pTv!1zk**k1_>+U$N z>|8Y(c0}~ixa%_tfe+#ygd26RM7ssH~(HuE) zaaqlp5)b@Ri{wa;&_}O4bqX{u)5a1|Hv(6)R#j@a@2o?-bH0%+VQoS{_&R^OZkj4a zwDN*5=VXlgiMDr%f|g$97b`Ocm1-)#OFyoysXkQaN6f%avBQGj!krFxEVx5!gpAIGt};C$8wHOoemAdJ(xP!r)CEZR`C z3Qu?>_X8|}-OjhdV`|;=f=y?a!_jU$i1aA7!XDLHRC7b^=;Al>YiwgiGQ_MNjyu~8 z@42_kDqm@4-Dct7UQXdtDNQGuFFo|sxT9?tHK>EpH9JInY$4p48j9!M_q4r;aiWWItWl}6b3{$6agBBom<|JjKAlb6CA;`q4y%DLCR28h5H_vX#V z$$bPpq@-7$y2-Yt20W0z!`i_fl6-Ml_>28IlVNPzVja>UXDGR{Mi;~iRm|n7`>K^J36s=x)#?7}p z(wDs{teD1pzrQH(@PhFEcfKjRwx#@}jB<%{)7nP%6a8Ov-UbAu7YTEezuhnv?ABOH zN%w0-lXt7DHsOU7)$y4p#G#s_*;S6*t^vaJ18tYq^4#R(S{jt$F3LaZU2d6ESXd2f zNHQbXfJ+W{S4?I|fBR4C!EaCLIV7udc~Y@ZpFH%lN^dc;YHO(#-stUS-Y zt2vWG4C=mZ*M+WLSyDP-rat@tu~N$pvUk|>SU+7L7$QBEZ)@4$qLgbsH|PD%}_ zT@r0~e_@WIn-gmNX*y$rN%l<%8RJy(8a+!t`qOuyrRQTS7)nX{&bY3}vH7tk1`Mij z_NOZSpos?zAM5$LH-u(g>IJ{ysTWKql7DeDwA_>02r<3QAEsSVrnU(gp4>rVJb24FExAAsqF$LH1%4Oqy zvr1e7VN_}@9igV>a{!B;N84guPw`re7qu1^xEO)2F=Ya@%Ag(UYhPB{_oO=T}V$Z#RkA*4o%K z0Xyn#KzO^q=x!k!-*Xm3V=PIJ>E?*~lK^^QT=z=cnIxXDAThM47R0nI@+LP+E8f30 za4y6JZ`;6tSPZg7$<+dY6+XZhFM|{la>DsgxG;s5n$ue$wJb+AaT5i*Kwo zjbk%o#H>G?Ppq0quJ>G(DlDTo-CIc>l1*&%cnX-#Zb_0}c{PBJJHzPiEeMuJiM7vB z{KG@;CQ)Z}Kc7DyQo7FraY~<--f{A+dl_e!?aW(;7nG&{7XI}aXVHb_c)lpytSzN) z!Of4xYrjA)Y{P1>+6G5Djt)|6Pl~i-we~UNPz{{Y6duaViK~%h6aAgd458%E$nIqi zcvUXB13mU-$_uh`(H6leMQ39GXW00MSluNEFEHKf7)-H>YI(+q(yEiCphwi>tC;*n zDNO>to_933q`Dey#&h`t^0)(QtQM}g%DYdflLSBFoL>HvNDXX9*iCm=3YTI_tyD3M zd)ZTyP^KcJoJ`G0WWPRFK6%g1IgrVuq(YEIhBL1#jWxtEca9^jN=ZqHXX`8$IO%%6ZkbJDL)c{n@bbr5*XGa`G&3*#;$&6zZ2gDqI-G_eiSLwZP; zO7iX}ekl@hDA|YX8?Jsj@`JIDHT9hRkw8*nVTO>BB4$C5wV&I4Y***(%Rh~}tjLY} zNBRWQrv5~0}uU0YfQWw5aRBPS zS&_A7K7B`!Bp$*nC4A6r+S5o+4Iu%6~Y{~$M=tb6ckQar)#7M zYyavY#8jvASgjw&8W!l@!8%?|mM_67Q$HbFdLL^804AF7j&9mzMbol}rA=DKBqI+w z+Z|Gfd0#HoNR~Vr^LVa%4QsNtWrCAq;(bA&ifomivn4dbgVn`+0Fg&xxD7+Y#@mVz zj&EM1m>kJqd30&JQUui|FC1KlG)N(%-MPgQN- z;l%BxGqP{8BfGSdbBGZC?k`YENS4o6XD~LIn0y?QxUSc|H3EN2Q~483HUyE^tfAq? zB9;gSSkJRlBAL8RcrJsgn-5%h#oDogx9_etBm=uI2-5y?h?3izW8VkPNw-Q!J}^J7 zio?)xe+vXzHgThW{W$F>@=vn8lcH3r_%jS4(mP{~Dkk>8n}7}bn5q0=gF({MwPpo^BT+~uM z1w6aD;rZ=l*t9K(q5T?e1Ti;5-wBdE#y0D08haa_;9RNGxU0sZ5P~FD!)iAOoYy$s zqSFz>_)BYu#(W&S$p6rxpGUG18XiBEOZt7W6zv zwXInP;oYND4b1*8+$zSryeith1MM6?)9ebC6G|21v@;|2q^0JlfbdS;9^qoD9AJ5E z3w%HT#kVa_I&mfLk_S!4`Q~;k(>4wsaNB}###rrF&S|6aFp$guQJlsin$cN#Bgk8Y zUqcHLQ1usl^Y=NkH0MfT^wNEn%=5yx691xPu}5dsn=AxOJZ6^etTe4oAiQ`WjIl&Sb5s(l8uOb@DZMlEH6^ z;um#_iQwN}DdDdr#fr6ma!zXO1iL+$=gv=wbm5#!v&*(Lw%KG8QMaQL+4zo=0Zwks zg#d(+Ti8x0Gh7cuZUJp#VCJ~S6_{$Ios~sV+&7f)9XZ@t?RuIKaRo%oI>G}XbexeB zch6tHe)gQemsG6F(YUZ9iPg@*gI4mJ!U%WimR+=b8}Qgv;r3w;-j|2E9Jm6RTC$st z1K(1ArrA}oPP{QyTwsw7+S+O?Y8mDv#7#_UAeUAT&dLYx*|iW6_#%;*SVh6m-*c-j zX^$rI^=hi2x~JIDdul2Bby{e2G9rw9Vj|TZmk4oJ*DJESAI!JJN!rmdR@=kjmal6` z!1WD~tagUduNc3MvIPEFSl$j1_c zYEDbRdZ=1Dvs=3)Bl!7>U`kjY?{o0Ydbs9HA92vudd?51JB8w7(4*Wch-r0AvQHPo zbtN^5>B|A&3(_FNk=`Uh9rG}rcrxxo+TWBaUa&!U;E+)~%FO&sN>c{EXfPE@>c2zwH;ELsPp4*q zWew*Ssd>j&h33-oKkb%)QwY25`MpnySl`uILSrU1$uGUfM`nNQ)xyNy#A0SmAeSxY z3`L5<{|E>D^1wO-4AGu2eh_|HogH|s;zXAzwIG~naO^oErWHobG$WF=PWgS@ zrVCKyo7mqYj;50wx!Vm`P7vL6bOHxz^wktE3>XTRzo>(@1h+#*1v|1dS(=(ct1vpQ zSPkP;@-gPB&=|~nwl0uTN*Lg9Bb=FsNjbC0QN~ulc5l4Wb0YJ%iPkazOg@kr*Mk84 zgt|nIax{&*+jARu=gSwgb2bQ$hA7>bFui6<@m+ zZ3J!y)UskH6^!{uhn!}e&G*f+Q$EC_8eC@Pid)Ny=e`iGxX7B70rGnUU&YWCQhtfs zEHp48D0wu=f4V>WIkR38T+ewo1DQkM!JN7ipTw-EoP1;0Xcjv9>+Vv@SL^JhP>itz zhxj(u?wZTULLcgLzP7GibVG*94cx4)^yH;a?`tz4G7|G@LA@++1~30~7#ZmY3m?Dh z>uiqD`mfW6g!OyiMxns=>8~F5wZgImH5N5x{EY1aB58B(421+lkgc{sVMPyTFuK3W z$5yaUKuyrPl8jraxKMwGc(~}3SY$sA)%JEk!oNy#7Sx!oIy!U1gl@s&UJ;G)xheo*UKX72@o1Kn1%06?_F8)UUnao33fqnc+${q|1S9m^F_a0&y zn-7V0i;s3&k%z?gAQ+cRp<2@8=u7>mb7{Qj^Y*v`o?da8!;>cuB_oeG9)*yvMB4Gz zS8BW*vzzGK3qh3gS;Yj{A9%g^1MELZ%=;Al$T#t|cq3nY)*NZJ_-Gu~A^~x#)_e{d zs`dpI8$Q(ltF{~I2kODcRCjzpZI)Oxmr>)k?Fj!2UUiK%#G5+8ok2imj|*0K!FM%D zId*h{FO>smo`?l#=R05i27_9fjIk=y>0pqJ_BIc&R#j^>zJ$sd#6rTI31^{L8h^qZ zPOHY4eLo^Eb4SwB%NmAj;fSH}RW1}<-kX-iJ~^tt#1Eh_84w4N4EaSmK?z7qFcb%;T%z&DJ;>uL z65!1e13%8vjMA;OW49~g?{42vcTK7550h+VP`(b?)Kf8F#TNK<`1?ZMp0q}90oc^c zbxCuOo|kgyta%t~{=t;-+Bo|oC==q+!@-Ea*tzdEKt(Zs@61|@#U_X$@P!tPW=S~L z=h$%f*L?MaSUrX$dex575oa4GW_KraN(Mez~NT3T8? zOG!$K+2U=`I>qzH6P|Y_S05%UyD6e0cF-TVCFQ7pIT&i6`!mMXitkugD&#bk%+AR2 zrKDixl@R~Z@B|KA00ty;qhc+@Z!EGR+6UajuyM9Ivg%t!MB*3)8=_ZS6sSFyNE$h4 zgsYG^f7wTPm2RnF0mMcjBF1Wc;4%~Kb8$PbE4UuvYN5B==e_($XV$D%sYdffwi}!d z$l*kUT@!i9VlNC-xe@k2yA|-wDAJ7?f{8c}re&>Lg{YX|M^O=|rM@SV8-t}?4{ftz zQW@v%+N`OPg}xB9j=RMp5vMy$hXClNheDlt)Tk3gVxF{TEqfn?hp!6|Wx;WVAmIiD zb=*@P0S0Kk?!`ESv+a1WyJr|Gool_r-C)mvhnj$8bey&9QXw0L!EIkBk_IWt8zhRK z+$9CMJhSHQUpRLQA>nL~5iW$fsAMiiv;krOG|l9f+_2~u_$cu_XkkDa7ar;dZa}cj zFg&3>>=1p`Yxv#96tOyV$6$3Z9gGFk^(xkzAcC$|OK`e;&4e+J?ma(=hx!bm!)R5G z2`fww70f^Rq;@n}l*p@Ir)B<|kq{zx<@DeqP zalQkCiBPXd*r?={27M3#B8kR3nvv>9v%)2eq`dKxxna% zczD~XYVG8@x#Z+I@4&Nqf_^1G;(Vh7)3{rn@|B`fb)2C2K=}0_G*__jgcIPb{Z@Hz zi;rNjtmg@9yFI~$!GtKvBB)l;$T<|6UAr`RjD`swctR&kxDY$;eEgLP`gEcVq`*Wl zV-RU@>~!2?ooslkw5)sk_hC< zbUq^RHuf;m6esr*x;-xVhc0*kevEa36$K9KQS9A8ejAxs(h*#WJ!hE9Ffe`Kd2UAa z+~S%DUO@QGL!uC9h)JD`sWYWwU!lo4hqW0Bp-{asTv`IjN30??E!Sl*8hoc@X`x6L zW0KjGbGo-%!9nS-Ue6uL5WKf9fa@}G@~r|7t_b<=7{bEk`bbFl!Z>s=p`%IuO0xX* zhWbHf-kBAR9(68*+`J39`RmRlgNhHQ!0lDgjHpQQ@X^?cP$Zx{vDypb>et4lgYnrp z%HijFhFyAwpLkxxns{03Ofqz-71fdV+YvCb30_j9QZRKCVm775x>6K0sefJEpvXSq zzs1H4yK?rs7h*i&N)e%y5(E-he(-74#W3W%l?_!)2bUAL$ zHKVt7flT#hsMMLN3-z}ob%%4i2dmlx5xaI%SK1Vos0cl~tXj@CGJuFMWwP~84%xWt z15*jTVMhRD4%dg3Cdfq3w>8z(F@B=kq}^+#H(L@rdj7naqj{QURB5v-wD!A1^@;do zV)I>s;0H%PfS%LC7z_&kPc5fQ`YxtwE@p|a8iYS~p_B>1!TjVc$rKirmM-MBz1Azu6dAEak2Oaoh?fPithI$R&`V?iL`+MQy!lT6E5+f`9#F2< zbZgywV7s~_%KVvf*y8b(^_-DZq~9&2_goa`5N6JThSK8BPH|hCmf=i^I!4qHY*!hu zi~bdy?3fbTQ=6@wC~fHZ0Nr!2?P~qs!GrMwzkxt2qQjiH>-0CL?(KiiSt4zWB)kM8 z$>kTlLYfrMw7aI<6n7?zpGaHCn6CKdk6D`?*}sw>_DlPVnibF!oyvj+fZ2o#_q)K| zUc&cEG(qG7!vI2&?A%aef2fx+czlbU&P#g}Zyuy^NN+jVrQfy9fzLZBW{UtX7oI+7 z1d{{5aN#0#};ZYr4VP^}rjEca7LiRTr2hoblii$c@F*QeG zY9K5GH~~7o0`a~tz{Y@RE`-D!!qsgX?<2O`)eE2?FL|7L;DiL%GpjYfT>%`QXKt&M z>z_bF!N|Bvge3uV9Kc;s5Gud?(>R-6Lc!=>{^*dRPCt7;9LadpO)C=uL?haYXe2F= z3!o3ct_n2fD3T0Ng!L)wXhzLR+na+?cV04w$@pzQOw|LStxacQ@jjM(CaYmGRU4u~ zd#0aBrNSZlZ?f5!!F#|t>q9IPszMo*nd+-*w!iT&0F*~?VE07bpW^F>5gwPp~U?VZC+irvPR&cbjS4YT*l6XqIlHZ zpOiK`+g)%@?az1v?!yYO3=c-cLp1Ee<)?p(^~E)HHm!eA?MBM}_Q zr(PkZy7I@&&Slse4!K)aTowFuO95_z)4r6)0(Ep@wW=68qSn8~20WM8LUStsbIp$2 zEoGER%wZYurHFp)h^i2pb}w~}i+_T+<4jM`oXp^)q6JYPe{er^aBgqjVZhXoq-R>kOq$46LmStNT`Gn~^yu=bZSuuV_i$K0x~f{35F` zq;v?KkpXn~q)8%agrYow*VrA+5A=q#Wi7NTd{GY9kK0m`*aZ;)#N0pZA#9^&8l)6) z^Wg~v{IU)57Y@xxYv!sAY+S!t$H~j$L~V#^(!scFz>L=CO+5UNPkhlf0+l^G){1fj z0xZ)N4ypn;_YRDMrnF@>-~2_)vOWReNdSwvMjP-@oQhT#Nt~x{h%EFh1-t(%RV;Fa zlp(}X$K67A9*(!>5q48tQi!)sV;wj%c!z;tqLm3=G6pX;23G(l%OMO)jbn7G1@I`$ zlq#xp!oH~G z*6h)XJ3FQcvCiczHoT;05*QIKMv|iv)ZSDeI%Z|j52U|#h*D2ZzM^!Mzp8OyW$8g9 z-yC#QB$Ii~q?qvF5s+PfOPhOwxmdBUL=~kdrnL@ z%jV{+NhU0?j~QB_bH|_VY0UoJ+C||W5?jZ^E1OA3ts?_Ch0q01$4N%KCPUTnOtBUc z50&AsDB-XFhHo_Jsr;%LAP44!K8xfSl2D?d|%+yp$x$kEX!H{D-@M|daZKx4gYqY)6vWE=Z8)6sKD6q=OWdE8@ ziQa@*)wdZCk6+2v=SXaJu>5*0l`{D_)w#<3+Qe-y-IJ2hcMoZ#YwzJVjv!pCg>Xxn zs0*5xYU4-2+yUN=!GiUGy7)4cOlH!apr-xJ*RhzH4nYxlr4?ye$yj5} z2MY&fEb9Pc=*KzLEvq8JI-t6%+5b@yYCiPppioa*>M@= zH@EI?11pK#)oa)osR+|(hQE+drSSvOCVjyy;fSM_t?e#RY5qDqb>Gs`Mt<`xe_VDw z^$#_ZE@Pd>xu9D%;9;GtBVO-8UOLq?TanC~RG|0YzVh^QN9_mqP0Kw=zjtmVi(S-3&C@bAZN zl9Pr%KG;^`c8Q$xED>0RuQ$&Ng#Eyrh!(6IDA2^&+9wxe@6Z-EI1LsPW24NI%pRYAOXQ^p zvk{8g6xD6WTL-G}01ql15L)WZfy`AhzNE#Gd|)AQ0Yzm4_y{QE#7$a~?)>R5@{vAH z%ZtDhZa|U-=53WHJQnzF%~BIXaxAGc>1}>=V{S}G6F%$_Ht+>ZEMIF6kmnS&a`SL< z2O(?%QkT^MsSt)gFwKI5Q}?K~d15Ca>7wb;%OBC#p)l`g`3XrG8|o168B-0_&dW|n zJlCi>AJJ8Rx|r|=$%f*|)&j5#XKClxB&>a}*PN<(@ zPJ*q1lrNN|mk?OM11F?@c0o#CK4|9$2+x%2@K07D@n5_o6o3rt<*ZiI%OEx286HY= zIo=A$Z#BChxzIIOg|sNoYVOs>NWkxy&J*s;ZGl?=q%dE)DAZf9&uC!(hh5tQZ0MGK{wMLvYl&^Q2@{Tej* zMHugH4H|_=KvfmuN3=uOK$EZ{coG8}GHS%mBD% z_8mBVTRj@NrIQe5OZj4;jPAFkPBIWpY8ISI#iA$-G zxc7)(3y{7`0x64;KF6SX96$zcgMr9H3%~;It+hmI)%DX4;;@Lx6gXsH*r4EZ6o8+W zQZmO}P9xaXf+x~MQVM1OE-UA{NDHA+2@cAMtMc{ET|TM?5T1q>Ty=)Y)NL49f*N2= zsy+Y$NHUxWV=RX8^{Q`2q?c0WMmH@W|4|_XaVFXVF zJKQ*fYl46^!{B7VbL@n4Ub=?}SZvM2cbYS>j*rx>D)0Hzzk@X&Q;JCiujiZm3>jTA zJzCmxLJdz$LzMIqf^q@)F7*&PAQ+;yX`WRhydY{kY(#W&SoY30H+T78bSduqUV6Fk zBNUWYK28pv=|Gw6vy>hQf=QgP+bM02`!YRn41!C&@I|#^aE;;-S&klr_uO@wXl8z1 zIRT1faJx2A69!U@g$FHXng>ar5dq$K2oVo1JhR!HyZnyG6okDoVVb?+;6oJVoZe%G z5b#F&TYz>z*wf>Y-a7iSzu!>8ZDvVh3f+?` zzajRo3_5~AT<-uN)li1i%*W1kS_I6CLb?=I{k=5!AtiinIU=%+UDBno6wHKA?u?;0 z?hoq@K=0si(V()@zd1n}W>xilRmk#F#KE$!dSp4FZcgC)S)TIo8W((BYXkj1jr$Js z5f}UM%`{y_Y`gh`Jd!)Y(@u|KP0W;}@%m zc0&ElNpB$e`rCsdoh`^2rY1O{+D=o8)J(FhDW#JL3fFk?Z$g}W5z7nydEuuIEO$@f;sv)mI@b`T=3TbViK@ju!#XEWkv!Pd$1?yWk0@pttD;GH|U7r2;J6 z8pqoX18@4%U&yWl`b69)O8w=Kdh*|ZL6;Hxi)M65M(mR5sZLOk0^KW_e%d+>TZ6pc z`uk?z?dSTWMBl52had>fCpDXdKZ&I4z^b1VVW-R+$ zapIN}Cpmo&sLLN!9gSesK`RBa$LDFvcvX2rkO)We^<=IZEWaHN9>93>=0fOhnZ$md z$W`y#l)F6XbedQMwcWq3+R@ijcGaCw`jG0s+RFjy3K_s%Cqq-Y(+dZ9Da?HZdD1Uug?FcTJtIcrNBa zQ?#d0*D*vsF1=~SN<)LV;)se~PSo@_1Ef_qh;8$SAoT``ss|uQ#xrwVu3_%XNR-(Q z=fn>xCEsm|55dIBeh`Ae4}* zK(iebijS=qF}CbOaD{j99#%R9zHQ(Bx@OR0G{O^pqW`AJ58|Ma(zCX{1h05L84Xxz+x13d#8 zji;t>bHWMbuh5QMJMqQ}myqkVfU#)}bkx5m-v=KtWfgI)W znj;8s^JSXw=9%a@Vb4R7SQCG13Wx{NEpaEEUb*uSef{*v9%b|#Q`0i>{%P*OIRJ4V zjc(TKLGC4RaQa}kX;mf~R?~!oPhJe{bzR@aPeP)$ifL_;+lnXJ@b)2inJhD*<2Y)V ziL*bslv-2yp7*IeMT-MD%&>{fJ{L%kFFG)x+aZY;Rk{uz{Sm+ z4nOb7F*y_TQjOrhW*a+&(uzaL~vnTdvH-a8!XppW=Aqq6__ZM+VWgci$e zvLf0U?`a}~k6ouJ!8>w0Jn$7cN?Fj$tCPY-{*?TlZsbmmcl$*Z4ut>*` zf)4mz|4G-*lo|3caIV!JEALP!fFotdMXUarKrj_f?zGps4^g@bO`#;Nn`e5dSE)7S zvJ*3jWpzW%CQMi3#ghBJjlPncnbGgGmK>g6+bEm?U+;jT88`#%IS8ih6>Cgn}<<5S3+Xu6u`Us1=&aokSca?DFR*rtCGR<=@_Ee-~|5_fBw`Q?g zs%m8aWa?Ur*K1aJOs1)Mi12U4j=w?63V6ZL+Mmdsw#dF+P#%w3@EzcJ2eIms{wn8p z^gN65J!VbUjtQU6p}yFo`qWN+B60b;6>e|29di11rX{EA>aNLeR<`mxZWvNBuq-H! zvef>5H%IB^8Rtuz9~7ME82aNZ()*}1aOa~eQV%|5^OTFER7&E)U zXW;1a(i6B=xmZ=XU6V@7EmDe}RRbrWu{lixF$)=5GC{Gzajwhb?x-EzbwK?_#!PY0 z+U&JodWX(J^K3rvj2J$(V0AvyGF8>CE~Ms^Hj|vX)?VfD?K;J%tWIinJH<6PQbqHZ zFh?MEI|dy)0HZgCBf3MsC$omoVQ>cu6fdW3BT^tqyTaQ#PDyGN&y#s>XwBRVk0Jd5CEy*z^R;WNvmZ{$oiAR>_euR1h{0GcvqqsvkX*;xR$hsns5R8z3gy($dVV{b$=E>6E-x0We zHo)~#?l}Pn1d2O29o)$s!1HsD)3cpF0LBAdUlX!`rOnZIg7ivEpT4SC0CynSP17%d z?uXK&6SSx4e4ea+DAhCr+oN;g^*T6R(RAz)3+52QNY^xAGT@xqAu{6#EP>V?1pk+r z(EG?0@by*%Avg?ROwh0ggp$BO0B9onXaYDHE4p(qd9N_X^M%f$LHKNtE{KG41*q$Y4_VPId_tc4$D&e{}U z+i_nrbCbij#3UU@zgcPe`d5zaso{LE`~lQJT69V|0E|5le?&_BgcAB>AhXm=D^+u= zB+0=itZry5Le6E-pl7e98TORV!8$Sf(qF01{B~ujjoVjzIR4Zps8+tBm#3}NF*(^n zyM%Qy2)-5(T6~JdI#H77Jx1TwsIzoq z%$#2f3d`cVS5xW3%myR<3$d2oT1pVUBVf!scoTyFD6P``3T5cTEl_fyCvV?Cl|MNz z!R~kdJBKWrg%oV`=hr4W8_x>PBp$q|^KAldOa0+hx6+?3_nmlEAi zh(-jydrb{no^n#Hq)x^-n~~rxV>>+U0Vmo?(~{udmiof8@Oh&3LO;8; zuR{zf4;BohiMMI0!efy~h`gB*J`qt7EG8)I$-=TPB(*9%&Y@Ep%orr7e#WT1^8%;GlJc$G|}sgJ?kCd65t?3~1;OK{U%lD)WFIAYW4f zv`)kdl5t7qr6*;h?50OO2JC{co$d;54$x#o0}&KRX4nxuogQ}_R)hAtvrxDMMMs34 zEFA|n2(e9n$G%9>2o$wNR(}R5KJKgJXZE88-&jXp=Dg;|s#X|*uR_UMF zfBK|&zcet)+l@cVh&W#THxpQ9= zh}+s^C~OIhIYDp<52v>qc~^!n#NHWbreLn?^eeg59&^Q&kDO;=<~<5_JbYn(NOMg( z=}T`}O2;Jm_Yd60m!&^q7B5k#RlX9Q^mM6DFMH*d1?ElHDm05Svv(@>&)rbzWS)64 zbb-ZHq;E=dCY%R4k8;cAZ>`^jYhs+?=JRA7;#qdQDod%duQX zjr-wo*+|cPWUTX%5g%RgOOLIy)V8j#oWY+QU$jshd$r6lWFxvv=gf;e5sc7^)84;u zrvYU5CCvcBis4;Ih&TH;YTr;gab~oeMz$nrXV^=l?B#Oi@WwPlGH}AL3^%J{&(Ylv z)NPr56!i_dGyY6mS`oG9v@3seL3zU3d&)(Q+bnCb*Lsg%^fw~)Z8y55xM@<*wZ-vW!}Jf5fpp!REfQ*Q(#Gn@6dS zbUM7WD*X6Yl(&*p+y*=D&)KMaH?)XlNj%Q>`LH6y`{?O}TsWZ+49F~7h-4lE(~{FU>s7lL$PA}j1mw1_B%#j1btV< z8udSQf`>=? zI}+Y4Bk7#e+*6Cb8>(-1xOiaew!V9Fcc-W>wJq*_+K1NJ9LnQs)P!?)7R+==l zM)!KDnb*SI0bZsmigBCZdk7*4yysy(cwk?b6T9$T>DSbu6{Q(oJ8==BksZDykDQWx zt#fV33HbuH%kI+G$G1j(J>~sw##es`PQAZDdJ2WJ>cbcC#bW%f{%yNP&YutqQ(cD) ztS);!Wm^35OZpZQ{)qX&{&HWM-a%%wCZ&UAsbEIp*ajuUnF8<3$gprF)OfPB43z zYQ0-hlDXEJbNZXBB0G5K!)XT(n^XQmlK<_vtKMqceF5?i7c(u_L5QNjBnc%UM)^Rfs4TE-CLsvrfF z06oupJHQiO0|#3(6&uT7g$D>G0#KJU4?vPh#A$#JMZ63IoeO1IQwPBJ(ENW4>DGll zJekwj4Q_H!wxyYr$K-P$alRg1Z%WLU0NcC@#g_U5f+=9=t$tsGx-ww;$SIZSewy7Kh^Q zW%Ik=-tX>xcK3Vs*}w9v5FbWh=_->P)Lai z$3k%B#KjR@gwLc|l;vdP6kw`K@;wjywvCRV1F)>bdGOt6bz;HI0A#G7;2+Bs)h z;X2#f+B!NoJGeMFdAK?`+PnA_+u&x~GkLnXXWL7aIWT#82IjdFl)2&rdV7_+k>z?) zymJL+c?tyj1eSO(1^7n!`iGXd8U*?KmUwc%^CT(sRSpdfeecgw6+~7RC=?kU9TOf_ z9IW>0)vK7u*vOce>TtoBn3$3<-}sowl4zxPIO0>JbZxA9G9oQKG4V4TnwEsDM7&H& zMW!Ve)FSjN5(8=xFSF8;vof-4(!BF>3g6`BzR4}hFUZd?C@d~`-CPh@R$Nw7nps)? zzPh};r7Zh>Wp!Ic;@h{?Z{NMGuP(2xscZb$+}Tjv^6_I!Q%hq@OIJ&FXIp(odq;nF zeSddHPfuUxKRvy@z5PA?-TnQ8{hgzuqZbz!F=FFG=;Z@wz?2Mw7Y~Y3mCYAIwmeK; z{t0+j!KlkHzyA5M@~g;nu!)1TjaGtam9Iv%OVv3~?3H6xcaFFlrRCEX-}Puh`ed*f z@UIK6x|p|r`Zcf-w%kM()0{`MiB8^}L>6CJ$V7piE9+MuF@cz15Vj&17^MgTM1ujC zN&xH_01z7k^#1_<`_KOs{C^hJLUuYB49NR+L-uxF8MQluP@!Pi?oL^7_EO)~4@?vo*RM?7S%dZOx=$LyWBc_tZ zf%1;PsE?j2T|Rc<_lwPL@Wk)JI$ghG;{k}tP6;m^z1Q;WWH8iHC^NGdw&KdfCLt9$ zc@_a`<_C@S&u+J#)q(hWS@2QMn8{C}f;DIR`>#b7hs!~JgQGInZDln?sJo+Wnm7xA zFP?MP*I`GS>QA4#Ype|65nFmFuJneSaj-XxjX}s*$4^qqjujRH+h+vIm1brlFMpUTVs|7( zxd(J|(EM5y0d6EBb>7*zC*UiLGy2px0E8tf-n-U=siNzdz{?X86Z!c@HM6^eDR@In z80(56uU{9I;j*64Q33p$0a8NVDFzR$NiAmlY2tL5zdhipA$f;l{tFJYy;xCmjo z_V7q2r*~Hqb8|+q;XLavg}HCS2lB}hbyBKaY={(%@sU^p#B^%BX@0f}gJy$`jf@!+ zwjq-vPt!*?eO%=S^&*jM1@;Wm-Qe)lU zPIA;Cpe+jM?*NecX!_Ij#oFm>u#n`8?e56hafKN_1;M@tfAaWxBSUEo7BFGQU1U7( zTAv~(%WFu3FSAi}!jZ-#4nl?Pe}f_Q(IL(3nQdCQ*5Wfdv7S%E4;*orOQfvHcnhSp zz#Sfdt-X>^(t1@DI~4reD2oe8keIkY#AIW_N2OJz4-zeW2FA3cR2&TU9)!qsxwE?; z#FF<>^lcL{jmP^8A~H*thpVFmB)~AB7!P`hE=wvCj0u=vi1v}8bKh7Qnvsuud>gw< z{p(*YLdnN4J2s+d8Z`A=2Yo^Id1}or8khp44Dfhdq>@l z_-3JfL>v;qG;6Uwel$nrr@|WZ-o(~Z;Z@oTOhtjB>NlT>1~xgk=lF6Dcrt=3-zND_ zmtoku`T4me*Qs?br_D}>5~~7GRR)oLd=Wb8&#y@br|kQ0tQIh#roZCFooQj^Fm0{E z#m@yTl|UE(#cp7j{Zf|091=;1H3iaS(by3I@ndpKopu7IT${t>1TsvX+J^JjQUQDu z0WKVtN3tAgPZ-4S-_J^lzq|OR8eiDDFaJ~fy+FE9@!TSvNH1Vx%DL~^wN0MpLE@oU z(>RXvFDhS~ zaE09e_&Mf{J8fV&DO*z2oN0KmHUW1R8mInp6u6cs?h|)Nhx7DV==af4f;kYNy-nW8FMql#J{?+R zOZA}HZB2K6^|WhwJk(5zU33lSBR;FCpPKobr#bC!DS-n30e(Z2Qju zRGi@eHe_gx1#h#G;5nJAqE+UQuJwlP?4C_|Xwe$kz%x0D+CS$Oe#Sdi8eC!buVcgQ z)Ia6|P&lHH2?slwaZHIZnPULRaIgSn`|7@}M;k+{d&T~!+OU9^g5b?U(>IWQTfoqu zkhbyr{TCynFU2sBPk`zswG_*Atu@{6l~nv39O4E7E2Ni2bWF1z_{clFy*&ql&n$Xs z-L@+#V~E5Gj%;;__VA-D{s9kSkQs$@jv}&*pV>XTHY&_=m0#k$?O~Bm}TThW|aEZ2Kdn$4VPE+5-$VLCUb; z3|y@n+`JB0?oRqMrEC_4pLa-I`TBFNGk^cnZf9)r8Sy=M^Bq&9W8navW4Tey z4QV24fcO^o?#q5%su-Mus|(x-(|GJ8BuTW6FHA@QzRzboWfY;9_TS#G?9LP|t0(M!pc05y z!txW$W0#Pm2;q3E+|6qzPZ%eefEQ)K_M$23{Em?WeqXEIYxFvGwJ^Iqbn$$Xtaoel zDMoB>^AdgKMQW-iH5`CUW_xD$A$j)b$ji&C(7~!^K~tTIXu19HQ<*@nE-+!2SDvx_ zLV|r`AT;bUmgJ)u2I_-GEHXj_La5%W+ZPl8WDd`g*reOb@Tu)OUeC91k!d^uDXt)q zkEg2%Hh*JD9AnHU<`$<${IeWFoE(V>_STgbQ=!ZN~zL_yHRm z**I`DarKW(uKarLs?%1r-rW`k?SvYI6SxWVHSUTQ`;99H931v%LvA2_*LWKb^iC1z z;}aTsnQ-OEB!55Iy>!(3`1=#5?&y<}iSco2^Iwt4afFIGI)tbeoJ!Me)&3-h%+G#xUM)Cnev^MX z|8~2CM$ybN*bL1ln+so(5-R36-@SMirONz`fzjhbju!&Q2ZE}8O>&m{JNR#m1C6XW zrK>AK+ry@**|Q}k9}I#r4ML(8-XfrP|~6eg0~fDWmxekffl z`un>$FH1k5-v`g2>8qX|xT)vs;jEtsvmgcNv?)yu)ibHny1cRc^p(+mv7F4WH<#&4BI^;Rxm=ol8Yq(_YWmrf*u7t@db|JHo=27j!s1 z`Q^Ch*XrupkYBceXsKeW7h2YK4AMc>GpjT|uM*-Wuo4oOrnV%@b)>*=jdTQq(!McPxIN}n$4{25pS4&I34)zbae=hw!?3@d4w{V+1eZssPalS(;uLkh7 z9R)x&RW{F;UzP^F=CxH7&-|QI7OO}qWJP#935R*yNeelpQ)BiXzOloZ*4!BJc|fV z`&U&l2LU$azS6ht6RWNBai|>MC#Vidi@m)!bDPM43cH}7tIaX1Zx-iw!*Vdc3y>aWm+ zvs)g9yI?>=BV>ubNJrS>O-V`Q_0Ht^xh|6&57nMeN;*l@8%!2_u&wMAZe`&)E64Bv zj8Pt}ic6z;>r!EWAR>{^x-kfh65D=C~mU;D9M`1XXWYIV>zkPKWt6( zriwG35_u(%K#zt#rKV0uA5h-7hdMg8nAE}*@aeCAq9;uXjq-mg66H>!9+S?v@<9jvK4F{(;8S0GQ4r2WI6u#C@uU z?FuW1#Obk7R%BXiwC`8p`@PYj4@VtEI?F=(0(nl3J$Xm)IOqoqa!f@XT>?}xdM9ad zxQZ)T$oc-}o_o*0RAeUDMBp~^dO0kDOW)^q>|jEtbJ|lOMC5LOSwH)4AKtG!ATu36 zDnPNL{^(D8s?>NZqdbxfJSmV$hFuVcd&JPLSR+LzzWc&1BbjCD(__7B*hB4lK?Qsp+MLr-ilkWV3S z8V%|Cl-VD-R%FX__JG}XP=~~n&UvjhtZHDUTtWZ9?mRYhY02_ChT_*W5b>0?y?%$i z+#)Snywt~dm&B>fvO>WvGJ79hhY@Q`b=GH0)m1$tZI`^i%VuduLo ze&))ruYomO9)jEKQ@7^SrZX%Yyd)ludqAn2?m=mrY-dw zMvZo@4ULQVi<+y;bQdk+BfV$e$kx`LyK#^75C2G|T!CNYm^7$_VN)>^AURg*~~<;i@fzo4`cZcXGN z83Yf|&HxXt`}{Za3S*ZD4q|OG$5K!Ao)ZEQM_FK30W=7Kbq_P6heU?cB>chWs_s`G z$M+8p^`cKZkJ^mMn6Us-S5fB)e0F*7>Gu1i_2oX!k5zVv4jvgiM4rWYw7yGQ3katG zY*-|f`}ZE^RbyUSHil>8&Axg;V$`Hz{Ij)qysUylBNp|Rp04rVkoSfShB2}q+uWTr zrP(C$vzN}fT~qBW|F0_TSR20+Ll4UHcKOGTe-hA(SvL6PPrAFxw}N!Gdm6-4Sgch+ zL?z(`r97Fe_)m;|5o*d3T!7RoGI9}-?}tQnr>R`I-^G{ZB8ji0nqpOSe`J*PxXSx0 z78RCt*MG@%|0e~2e1e6F^b)e%{Plz0%v`HvN*97 z7I<4bjMbvHc%VXp?MriOUaEZPLP1!A*LI)R()ZYLyrGSnT|1h&Wzz%yNEUgt|L(!x zeMk7^Ubl-{N-yx)29#WOT=rj?Lr9Ay5kY_G@yvrn2bg5O{?AGA_l#$vLhhdnmSc$ zpq_ReluGgJ0NXrE6c}Rj_h6kgaO{h08OsgoZNhjvecX6K87WY{qa1@mo)^= zxC^X9j0gM5Q|g^$jkvyyAq;C?D68@l4oF9=PNNayk?Y#wS_O3*=Vod0wHH5HQajdk z*rR^9Qzp=}tPV8lJ3(Dl%Lt0808)3bTpc6XwS5Vfw(chJ$810oV6 zOcUo_EguA$vTZ-hlao{y+w&5g#-cr2_K6~HW&fZZeKF4)ojbpCG zU`A$YfE4TFACvIlqGXZE!Pmq-b%qD2voCN5!B871au$pZ4~`7yu3b+NmVi;4j8`u{ z2r&=YW?%@H7uuNAt+8T(oxUVk-_!Rc1m$v0aFwOiY>SJx2J3z7tLn>PBXg0V*VlcT z2`=B|6`_oQWjJ^MNugA@CFmW)PWJL31I~J8jLWo?b`2Gu42^306CzGL$zbFMWC>`3 zjN`pf9CXc2Qb`8NnA~^MVPnWk0emmR8AK{u=PUjR=M;;xDatb5>q<5XBrto@lzHgV zdZE~Rry1P1Khp(RUIfLezO1+abFB{i%jK6E{qC+`u}@+xzXi7OfA(yZlE`s()1V_^ zMml~v{N+3+HDa!DtS2~Tl2&S11!Au)D7?N0piEa!cof^XeeT*#NEQf(3~TG^LgXoB zO!FV~3hFfDm=cTWT#AG~k60?Jy$0*sLb*WPVsu2|2*8H>b+7~FAmH@AodzUr*s(Y9 z5}CVi0@Kz6w;$UaF zX`<{p53S|eNyg!i33uewdHwSydRX!<6=}!sJ$GoE>gj8y)~=K_2q2`>|NGC2$jh1S z=iU1i7z;WWO*T%q$Dp=xA>8>Fr+nmoTrBdm`(C6Fan&FrSSkUjZ8Bm=`YcA5GO9~V z{`Rk_s~0KqqF!R#H6TE!VaeUGgF=dfTGh4q!aJWYS)E&{a-$Ui=jbmjETn4}yduQ%%%t0&Xh_EkvA|y3A+vj_ zA}kLph}Cj6JXl1{EZe8TL@8`iH(7ln)}aJZKG!0oTn&%bc;cyzVRKGkiaj>iOTY_r z4#Ya8;4gmRt;h%ARupw}Ffi75;zgDy>#&#MIeglwi;ZK>Ub#1}2Ex9K{x>$<&Y>|L&?NGCE5jtU`rOcT zHYeBh;zK|;7hBMRB|lt<7>CvOgZnm1h-Exd^6k8rsGb!b*lYL;2zuLT3ca*yUcK~I zY`RD%Wa_G)M*QeZaX&7GZFajlO&ro^jo#w{f zFyR*xXE^6*6SgENJds96CaL?muVWDnI`fR09by~A+(Rr)^( zENdz1)vB)x@+1d)HR;GGNefq|v~%e**lnIz=UB2*k#-jG04un7s94F<_^{Ak^d7`! z2g}CzV?|*+Rzm;oQ)mLoKI7?aJkd?wA|z*p>viotA9%6WoR+T0&|yFo&id>sX1sW-h6lFeMoMOIJXyaP^Es~cGGCylY|I9aiLwWUnSYVM%JjwcI0 z1#ARsSZzCAoQGP+H`8M^Y3UeA7k@`$2MH?SnWIGF#^#_sB@EH7IoDqRv|Y~=JJ9%`{v;g=u+ z=C>2|qW^C#09<{RM@xO#?jKSSniRwPcS$yx-&xm=EilP;Us{-We>KKJOKKf6vrKs` zE(%Sz076+BVs1teu)E@#WRkl}I4FJaqB>YJRC|j1r7@PUE`i0j&SVv?F>^iv zN$C3vY;?wO{UpP4xf!pR{!S?XWULcpTD!iwnu3bPQ{T@SHpoF%O7JpfAv}(sX^c2T zh)whUHGICGHA9f4WcCD~S=EP7vD6N8YL89I+P6K>`cT>`o*^@mP@aq%{Jb`?wszJ# zhxFT3Q|I^~Y3rT-;t0;J(k5fU1$E){`6uc%$$jNcxX*L>#zAxEWQR{ zVavl%1Z!-aMFkPmR(IB_S@4ye9(|`s2zjyc*^^mC%&&=>5TOK%;-bfyt^R29ruI4n zD@sufVDE9D`*^-6bHrEmjZV9@yasHX+o!3pPx#HrWTJJA~+8|*A zO8kRW@a180$o@+ z64zb3dWQjlHI;?%G~@`C%gA@>RhelP{A|8Ptv6P`nIy274}&q~x(`)xy=N~+V54c^ z?dI3TPFYX=Vpnd8fO>(kP?wjNdRNuC3*!13j6QqSCoo)}bq?3(q4VNJ>P}Q~XB1Uh z;W{GTTr8FV%mMFaOm47`yUb8gwVXr8>F5bONL>R%J___vwEnST>dFCF}s(Wo&3D~`osSRzp z&7ig6M~FHkANZ0jyGi5`sb@xB$+E7krT_2{9tSnyDwdK)z4i`&w;gnmNxQHlf6_W> zsMzAc%eI7sba(qVfNj6Yl+qiLShVn43TQVT7?-8+Owel(RWbmnM+7X)^_^h#nI$-i zX&9)Zpq{(=R}Xc0J((dy-3Qabth9=kmm)T}u;SmW^*0H9LXBm=V8HWk?keElDKX2SP@f$LkvFhmxWq z_cuMQey(0|eq96ziv5H3ZxtZ!oS$2M!jM_RPq{xSpm36d$RI2YJCEBcY{j2@Cn-~o zXFRlM!)$A5C1URVwQ$q=>aNxL@s{~hp~pzfo2||hjD=r$-r?#r<*jYemeS9-?n{L# z<%JqVv%BH_c*ZkT&Rm4*R$3mwhdP8q`1&jaZ9w&Pb#+BWzaGE5y5ExM{af6Vfb@dmky2IitqrAO4+*#KAEwz4=0|S8Ms>C=PTCPr^ZiyfN^C3}U7y@#kXE zgQarW(>fibZS^J!(G z+WI9gn+zfQ`kqtc`(KsIR(A64@=u~HY#!2k?>epT*GgX9=%OiaHbmYnO?c@1DZVH? z1(;H&$`bd9Uy3kQeo5~(eH%c#Bk(~$T9q?REPY7MY(zeT%XJW+#gJR{l2zjd6UkfC z`><5<_uQ|-`tQDMH!m~jmOzb>w%jr~1#uvAl9rS^nUuL3I*#`&M^l_4;}eL1nGlOU z(@5XgOH?!$4{U7sc#n3EL)7uS>L-Qg=3N*yXsJWCpLT z{7oR1mL|uJUo;fDgz4i!KF#-t%AKY@zy{Bs>5_;Ozy9^@Uily|ej&8>%Ct~)|J1x zAM?9j5sCUS2b*86(c{7t*_q#qcxM~0229|b%2&CY8-Y9beFyb>9Lh6KZsk7bo2FTg z&!CC25PsNv$DH-*V(ix_Uf{XI(=Vm%Wj;W(uln{ z=u5Rrx)B|2>SPeJDjebWaV=gJT@JziaGm~lIwVCwA5n>M()p1h1JP$qdziubSBr|CBI-==871>{Vvddru@hbEGI zT*+S$Alo2-M<5+0S<2~ebn3d& z86hgP&J&D1(Jkz^L`VI2^GdSvw)hVVv#yprx=*4AXTSa3^6I(1&eD~ay7HRA=np^k zzT8)05r|+%yvND7ZD*@VSrCF}zrjyr8TqYQz^lW+_XRJHAj_kz(IdUmxe`{<#0v2J za3NuRziAzL|8Vs9`@VM?efwlz|4Nn~k0UVIra7B|9NML~1Ia+Ku27b5@1iygE*rAb zzb{pOP0GuYlShC;*s&M@?K4r~Cl5!j9(4u!%`X7li?IX=kTvEHS>tR~z)DRx%Kb`B z^>cssSwQ%srjUBPgb;Y_v&Ue|yjnk9VdWRV2H6*|!u4O~#}k~81{cM}oQ#CG#ysJF zl}rrp`iQzk;=B=K;^^i=bEuZd)6WFAGx)gn@vW~veV;mR!Y=!(5GF~i(L`{ zLgw&H1XksgXRF$=4eB>J)ZS6h9DkA3)=B33r$msLpe=uHZlphHbGJrT3b36*xZK&Y;YbaQlZ!6NCHdUu_5%2&_%f@`=1Xj zFkl{qivc9(NtF;w4yfG5g?oW-NSw`O-$QeNfRt?E<`^EgIq-fo><0#_YC2tTk^U0H zg*eR*#iFmN)6B1_@|gb<&=O9GH1;AX%bhnnORI64$K(rjLY5EtNg75qlkeFR4pGVkvhCSKYKe9iIAI+z z9{ZT!@A;#6FcRqZuR|L@`mss#18fb9Qc@(aGCH_l5mR?bPgFO&-_~JWZ*_*Cp zSvHf_iSxc873?Sr5ooxgJB9v8@g8?L2x4oTcwQ+?A2JT+-kNYm#jp8Tp9Tk0MOr&4o5vMmLM!pn$?!1 zbMpYw5u6a1LX6{__BAzCX5JHymMH@l1M~e)% zdXi!9c+Dm`rsl7NF2%~rMpA%P7M|@ae_vnd|H2?>=rAe1J3Ne=?&6&D@Q;#+kr=V6 z{ZYct{Lhw~SYEGe-Z-UQ|1Ed_omrRWOZP^L`U^UUV}(vdsn^en73xVLi}+n%R4P}T z6Am~U=ticQIqXh0kMQA-xfL8u(X4EA&u7eH{l06gol=11^$QHey znGU2G^PjU`DFZNzG757rVYcZi^9TpvYKdGV-aKWBqd#gY7Z z3Xx9oH&iancQ~lgLHjGWQGrbP{1f@wl9ytco-+=_G_l0J=ETkKJDVji>H6j~_E41L%O= zfD`RWK6p|SIBJlwU@9A=9cHTthM0PgPBOO26Rp7=4p%{ycA(Xnh9KF)MKiXdWN3Vs zuWOCQERl91+Pp^L*ARq4ct+~bY12%*GGiao{e3eWLBjUH*?c|%d`?G8z)1+vXFS=$ z8gdgL8UA+mQ#|7!Q0kQwKU$EYm>?oaOfRbNX$5u7RCSa*GUXuyx3(bYA1CGI50&LV zCU46mn7MM1)*|M&qduDf_fdRR+r5uJQ(7J_*qGmp856OQ@tFi> ztbli{e_B5(*Hn<7$>qHbo0bo-`XRz7a2)TXGB>(G4s&l1B5(Sftw}DEgc-eU@#Y_5 z#d;Q&RWP{Gi03-J=b`a6#cq2uCCsXAj(bXq_z!)1o+gyG3I*qmoV9R936er~u|HO* zKbQ4Gd+Qf4doFNbYQl4hP&kGCswQ=kq(ZR)Y+#iPis_}?!9FPX$!*-zDSImPA0M^7G2s{1NF?Bl47+mAX-Ovm(2)MeLw-jaD2F_zf>|LSGjoT9sKh-j=#Fs&akTr zJ~$pU5+!D@l>!h$Ph+w{E^^r#++wfHkgB{y^1I)cqSgCk$eWrS zzL^KXoq43z!srXmGw1P}<;c($L0iWe4oh6x#1LU~_8g(%5BzK!Q9MqTbRS|?KMx1F z2tx`Eh~kiS{7|?JqSBy;T=MCsmbb!P@#j_wY-r(=WRwZtHn~&!^!d4eDcW&~3ygC9 zWXdXKO7}v;fOvpSZr}fM(o>rc$m_-*T}N=1&zu=ioQDo%c?tvdC}|7pGvGG ztH{R0tqHABt%)!d>3cQ=OJImT+q;EmOhvS(^-p1Pz%Vr_wSS?dvoN`(hX2KYzF42$Z|IZ@JgUzS z2LG0OnPPpz$RnFK$c@d;m5))WlSzR&nmv2W@JCv zRdL6+TxuDF9uF&XR1T@CzE$4v&=MqHOLKkatPXT}L%;&SJ{9Fr^|Hqp8B_X37SdK; zicUd(E%x1n3bIn-e2_XOTBvSonbUvn!{)NR&%cvNnJSa`(OWo*kZLfHhp5s(ZYKR2!2T$K=o=Yub4&S1vnSw!;~z;jp4 zH3$TyrwH}B)!lzPAtnmi4z<}3J4xysV)sAob`MGvV|1G-&zw1>ltFIIw8|(7bl6~(00$EzrEUvAXNNArDhCTl(y8`l!#s8P>_U|=-{ON;efsT51#1Aa>{V4sy zuOjfzm4AA5Iab?-WX@@q~plpUM z8!6cRR&}+S)&Tua=ZM<)AkK&*6qXEQeLW4Q+a$q4&{2+UoDT?q!rANj^7@Rc5V8gw`ggajS_q@^cUB!tY@V}N$T4Nf(o6r{^I zRm(??C*SOWF5Hm%G~JKt$JC8`17-ci(-Lve5SQtFt7u9t*V7Pfu>lWDk3P zG+28*@tSn^0!Ug!T06mot&#uxb$cwHt%6)GVA@+Z^Ca#DeM?kP90)Ltlhv@e2EiFGfB*fEX;b3c` zCz9z#M< zc6QmLRH1lNZwosOfx=?~Lk$z~6Ze5%d{Y57P>wiIbvZfXy-IM(Q!rTpnoFpDCMGOx z=wO4KR&h8ENku;OTyb=UK|6{D>ZwBq9rRDpmHJR2#sN=Z?8U%AYbmrCW0G7xfY>fA z5VpB{qyT}E?D^ZTiKULbeP9oY1Fb*rwkxW!fvbo6TENhT6j_N2yGE-MC;VLeifAAVk8h^07bzueP#cB?Q1q*YSamoh(qc!xmZrW*@=x>{!mCbu<;BMb4lfh zpU(ybrtf`${%a`DZ*sBVz+E6@%5rLoL$$j6+xLIsmx7My?v#+P_3U}_*x{&lPhkFQ znqJSHHl1G_X!`gH=z=Px3(*E%oG(c_J`5 zIX+~*0j(qYdj05Q@>GLlMMU!1SuS!3ijpHx1|k_SL^1|h=NqQy12FAVe$yC0|D~@{ z86`wl=u4}Tg0d`d_Pq-f2s&Gl8@;KL3>jhwUY}i75v$7;6 z)=F5U-;OKv^?`hq7sL2jvY?1|dv!uR19Y=5F)~fBb=6NM_C-iZy&;^(4{`~C~ zUHS=|?Lo*1GYuPY_bUU?o&(5?ToY3CL_0~iMQto=r^$*|<=kl>sKK>OInWKEG<7Ak zW4kPky4SLD`yTTXz56XSfjwQ8rD;4xiHUI^JATnQID0z8qoK$88NAV z2+W}!PWLm#rdNLHKvbOp_QvlyVSrQ{j$&ymKB|wj$s|E`QGWj=_(RSFwCYv(>sJzl zY6{6YxY(wAJ9Su?O8?QvUDV!l%M-R)j^%6J`^#x$Vk6fgI9+S`)vw1J2p4?yps;t_8u2^sY46_vfD{cb>H!;h z{_0#v@em6+k3IM|LkDB+@nP;LurDnV9%ga6&f0Z|I6_~>Sqgu6v30|QXG-mc>eq=p zC3xbi@X7Vl#!b(Q+n~2rp6|VKEbP0K?>^q)<-Zz<#pOpuw3#&EqlBpUYR0WkAW=Jy z@vHuU6=GzD77nPa1*DAh3xPACnXh7<4XL`_e0AOQe)+N`~ITvSK9Ra?5Ln(L8>Jt_Sk#x zny872y~h}%CXY!>6bl-SEmrImr7MDhC|1h$h2P9vXL^{5U!NX~xsEjDob6&vTzW z-*{x}(e-CGpZezLcSn|=S$SsDxpim1ST%6f=Sv4H9q{9Tz5RB^?rm_n@s;|w8r^FA zv`KEm>_&Oddp_^;wCB^_xxu+zvxBp{=C;mllhZn<&8ZzHe>k!2`1cn!{j=rV`ZF7^ z#U-w}vhq^gou#*y-~9Ue(xiD07T%k4cYf;Blo^kvJe-y}CSzRM=+v=K2WJh-{4!%` zPHay9te7YLiu)8t6!!km*U-5nq^NUIh@rKiO;PKjHdppt`t8y$7xvxWb#wR4o!56g z+M2Ze!RGs0GghasON&cgle6^c@~p3)EPF9GZ+`CVXY*c9Dwz6mV*ZqOBi@aAGyL^e zg#!u)y&v%I^Yl4s^OI*inp5z_t08%Va=%Pnn7sJ;(C5P+ef@CR{l#~`&L90^?6a?O zMnCxW-iqvTPbXweelj(EV%p>v{ay^nZTG5OZpT+0qxyx%M8||jwU2Bc5gZvD(WrmJ z*rxrO#KcC%L`C%N8`-{3aG&;lgTos~Hjb(v-5@4tZll@Fr!}73ZfEPV}__cLrRGN{>j7ei-@CYn#{Z%G;{!t+=4_f{M#4FCTwu zT>O;3Cmon}Yucl!x2HY|__5ZO#@{#I*#CULlf%yrO&I!maACjvn76|p4tO~Hw)+~_ z)$Ysm%PLH%G{t>El_Qn@@Hkv$|BQm!ucsHyEb(*?aP_PlP;tEbjEdtbPp{f4v~`De zA?@0KrfsVG%%!Pj=h&T-wvO96Y1#Az)0a+OFnLSnrtA%w>#~2F^7EwMC;U8a{f4*= z>(|DuIeh=v{Ua&IQ+~_;J?B9F!JN3|aVwWCTekAIw+G(-R&=0f=jtEUZ(Xx>!*5Fu zEcRs!9iTl_3pW}YM z`r!J5t0~t~E~H#exsZ7|bMNk7_w4<7-!He`-Y&fH_GaPtzkL6%%|CDc*OlChxmTWE z%)XIvBkNkm^{02<-uoq2!x?b+hXg{SjQ7aV($@OsO(ExXol zTfgh4ZM%NjvF-a^t$Q}>-Ks~^o{_zydJYKxyiaJ)&>lT|_UaMbvt7^N9_@Mzju;;O zMdXl}fQZ08bs`&tN8agsC-Pd~YkePvr-iN$-P&e($g(zZA*;GB?m9PoQTUwDJ)t}M z?uq!}lhdtE2c2(qp=n}JVv}3VZZ}P8n$|d}Nm{e#&9YiPZ;@3yvGz^h#F{roEg8Rf z^s@2atPR-|vbM*j9&1{y3EJ3dW6&nwO#y3t*9L40*%`8}$Ih^At+qAa*=lF=oi%p` zY^%8~U|-mtuzewWLiRP^*J@AmJ+1cn>B$NVeujRo5wfb-zvVq;EpN$$*O?7sAeloau3?)!9~;g3bn=@jdT* zCg4IqmU~vk$L^0S<+W{s$s%LrSSI?`S@0I6OSp8k~La%pTkA1Ry9{Xnb=KJLP=K19L7Wx$WzVmtK zo8_NX`?3GyfV|py{`s}@{Xh7B2zclJE+8xLabQ;6$941S=he-xpI`Swoe%Zi)qNK@ zIAn0AAzg=b7}R4>kA6L3d(`bwr)RCMzFli|sM#j4O<>D0-lOV#S#3~2oodZI>jnh* zPxYDOJGtJh`qjL>>s0WmTrbiy!oP<{cfZd(f<4;!1^X3$RWzn(WZ`IwpETG06Q z{8tNK&3n0UUb}_u=67Dyxp3Tvi66$jpP2f6$`2{qlXo20{^z!X+YWBM+51|=wO&{H zUfZAe=hfe@{PBLuyXo&Hzn!*E`=@T7>mP2WI>vg&Iwkc|qf(;MB2pvF(WZXJXk$Nf zB~xWn1!IM$>z-`PTK9N^wY9a4rM0C^QozGn59>UtQ`E4qK}r4Mz`Uld_lSY;vmR{x_=AJK?yjYsQB=4Jj z!*&nbH+c8phZU0D9#u$jyTA9&FZcG``PmR{h%k0Hg6dGF&DPE|fu^>2^W9&5Z- zR9of!I6Nc#aqo=YPeL<8pLEIWa&-IQZ3)|sZuxuTiS?(~|Gn;f+_{w(R-Rvxxb*Tj zSHHfpR-BYyjX$@eEEO?WWjkzbPEBcCK6V^woiqnFvs`+3bg z?_A&ffUG*X{!at)s%3bld8b!Pb$d|Zq3a{}*L_|4pIYYw&ibF5FmK}A$&02e8ZdRxtbQ{F&L6vZ+?Fxl*L_?& zrG7?WlGoE}Sv8*dr}?D>JQ}fn$l76X-jBU9$8VUhsqWdp^K~zNIeo~iFXvRf=5@{E zme_Wh~Jqtd?2jDFkuZQpmD--Wzy^S<@@J?DPDwj*)py^VJ^C$D@Im$@Y4 zo9tOn=j2Vuo%C|p%aO19zaE%9@aY#%Mm!#Mch$}B9?y8yxkpr3#Ai{TMg;b+Kd@(b zSl>^>KkZw$U%h^f;)3E@#zj4icv^Xl=bDOZre2Q2U;tOu`?-t9T~k$wV&?&IP;EHZlquhJA1-qRdbZX$dRtsAl+7iF{^1-(=59<%Rr-i5XF%C2gv{ZfI z_f&O%?7cC0%X63S7`o$2V;@tO#NY1hPTux-?XzWXCw~}OJa9#$mG!=ByP{KEpVfVT z7;q-ypT37Gudb09_Bi<1=F@8~e0z1#tyvGhO8Fu^xX$AzGBR#!PBbVs(ic7=_yMm zFa7FA-@H2aN3Qfp54iZn0QibxBj#BeC)!0OJjHT+uH2a)4tiEIqkCA zCG0r8`Qn;u%kL~qnsIM>%J}r*j|YB;dJ|dH{av@B_V3%D-S^LLS9f3Db$9!%t;y?> z)?|L0wk&5s*8CUKo=+_p^Y+Up3sb*)HvL`4?lFD(wTbBv-T3o{gFc!2$>J8o(kVvfD2e4otC3GS|{As5ryDZHr*-&M`laSvqOe z#Er@8GJhX;aN^du^>Oj{4&FHUHa>sRs%3HUMe(MctM;z?b=9GqLzz35Ze6xJ`M~^d z_I|f_{oc)c6YnHGNPL=@x$Bp`|GNJ6+RN{MzM6X@<<_fxfBX`^dEch}35BP#XFrEZrkZCZ?{Nlkrwo-#+@Mxhkmm%f& zJ!|%~nYn_|H96{0Oxli&Z8jgPUs9b%fwoSzE>EQ=sv?a+cW2z)F=>rb8rVXuJu=j3 znxx(L_r7lSw&@4;Ta{sW$yXVTpER|GTYKd%eevz?5j%!Ia!t|Q{nzbZzpb?@;G0(8 zwfeT_s<0oTw?+LOdouD$&+DzO)Y{;Y9+uuKBRHc=!p0+;Ppv+==KS(=-zF}+y!htK z>$8(aJ{X-m=+WT!x_7R5nmm1`?y+l1#k7hkwbN>6HppxAzClUtl8Wc|pZoLW^!!=- z2JVa5SLspp)au6SRdc*w)Xeb9u8~&Zw(I?=TPJ_-macy^cIKoxBlZs8J!<2ab(2=k zST=Iokf~pe_eiRhSL27F$eeeApsT;CZJYV#7?1#Zo1B0WR4s0>4 z)z6*_r~Ii~SSewe&BJxPYm1h_E?dSdn6xH4F78nBpK)<}6I1r>yI#2O_hW|RIkjTi zEN*$V<*N~G^!4vme=~n>=RdaI?z7J&d%dmoqkgvPw^T?KSTTTCDSIb{o zE^oQG`SzdAXWddbn0pRSwgx&EJ&2?%k$$+wX0@ zyRKwI$wtd2%lZlH$FE;`;NFp(!}-fsA1XZbX6K5nD}P=6=b9s#Kjv?{w)^_-d%KFa z6#w{k{k-*4zWsUqo-0XLGxzS>_v^L7t8c&GyJgSSr`K|?=ibb{asT^Yzx~&@`>b*>UGL!DpGSQeTQ90% zM33A)x#1VXF7`Pcb~x*yJ_Sw{DZN!?k8{4i8+!VMod|RJwZFjca8MrNQPt3mXJ>h%W?rXa*a8KYL;ql?| zZTGj`9~d8avQI*vV^JsDCbUfmJQ;YV&-p%=+MaEDvEJFhj0zc*(%hfBKd<=4{Y}Mm zkBlnMt33C3CfaC*AkC?{l9wK5u+80y6wlYdx?1-2aXL zo7x$5GU`3A|Ge&-z&CY2?-1KzV4J8mQJwpC`lM6S&doy`_4vH;S4{`DY~HY5CO%2Pd)o~hmwB@KBnq$cD_C7)}&+W6V@GHdwk7i zx6Qg8`W>3oUMaoO!cxN?4SM+H!$C=3+Pth@f5)9zeR9=btK%xKthlbiTDP?Bsol~- zQbTUnxmV|I!v_s6ExNeq@`B3?9u0graAEiP-Oqe?YUSzg{$BBQ_2pHUdVlNr*WkZ~ z9v*sR_?tOz=cWgzbx8|O?Q+fgM)jM1w|z_c8GD*KUE6nWSL&9htFz*AzkWBNaMew`HNL`>lySKImBgOX0WMU2AuvZerbkJkEM;sj#(bW@LKAlkS<_vpPKP zaAMP68_%sd6L)#}rDZo3UR!W?=It3NBOZ-N|2*~cLj6niOKp}e)jhdZdi`e&-!v$$ zYp85$Z)%gbIDf(Jfqztb-0pFkJJaq?dE{mE3H+Zhs?{qrk7t&%l6Zq|x9akIbsV#nZ3 zgLVzt+vHfoQ}tg=S~Pxs^?PH#9sgaGN0n2iuBmy+=fbGD<9j6EetQ4;lici|{@QUa zddj=7)4yKaePjFmb${>a`#St}#Oa8Oo`<}qRU0)S%YV`4YuhXbZY+*FY}{@B`j;zr z?moYB|J3b^cfQ`bWL@uq?gjnUM^1~H+BCFb4^!*Mt%q%?f1=TmN#9IgclTya#K^72ty!JF>DtD->zDn0{r7t}Z`O(J_{y!t zt?3!$f4m}ii#@B`Grhi zsZ^8E>G3QTN6FIW@_1ID0bfw0a@4_<N3^nS`(F^wohMI;}SVG$^uoagz z3#rIZz9y2PCL!7-#D!G8bORwN(vVi!i9BRiR~Ax#?hZpiUECOIm3f_^M=U=rd5Zj! zy3>$4a=A@Kj#z$rl8*fDhqyCzx_%9Y9i+ef zqb@vN(^I89l`cHZ+jpCA8LNYyl)T}sq;rv$5O)$hIx z<>yH{y0u}*!em~K{46ZLYL5Jj8k$3Oa=GF)$Y>7UL_`iImU|6ysls)nVq-`|$qeJE z%!iyzDQ2i-B1JVxLUu7^R)%DmVIoDo4w+>%4e3WxPI6=(Lyd%{o|L$yg^LJnj!WF2BX{1P&X>JkHx3(Kz_X^1pcqbLd_^-mNrq-Oc~ z{aZ#+eG+ht%k-#U80w%KM^OXP^-eKlynf{}iW)j(Zc}NMpQ9FCIZ`jMDr8nC z8Ck?bk{FJJg&gUlAzNrw$gEB>3-U`rnl{AC4oCkXKZguRmKjjLlckULF8CAMOp<|GTG>xLD1s#JNSw^WL;~`C>DQa0hK1b4!t%&s?4_U@gYhs8m zf{cdzlvoegAfxCrQhbn4#xBUOA@Wl*)Q0$D47#xV+B(Lk`YVds(eYWrM+oW{hWhEp zQq-P~L5^Hm{hB$(r+zF&9USA+eX53y-5A0{x=+@yQ66monyO}_RUV)2Q`C@QM9$H$ z)(vaOL%Pk@uwLookNoDSA;XxTrFI&-E(|2OLbcQQ)GkmvkI%&# zj6oh!0MbXJJr}E;$0v|ud?LRT zVJtz`)giMx$#i(9Wtnll#84t+rUe|`L4GErDa*_#i!5_RS<2@@;xv{ls6+YOL!A20 zj`l1-o0S0>FedD1L5B=TmK9GWiur{jxsU8$(U2X&maw_j}Q_jK{lMqLP;#PjAbKeD|I6| zuX=MdoTBa|hxFxRp2>O;@|y212$O{oqKd_gLd(*VJb#~ncog*_Il@tfN?BQYlaoa$ zybdh)KIEjF`!I^aNz*QQ<)|;|UM&rX7Abp;p;B#H7sIfv2QqsZ$HpYgH`Q!OFU zgnZh$Toyx~dGv;iqFB0h7QScLq^_XF5VOkCS{f4xs0J9B&XsrE~`n= zP*Uc4kjrY)RECjk9dAJwf4bWqPIsWZbzN%H-Qfu0qKZL&6pbWTNPFZ*-}kS`C7~^U zJ8IIBjUusSykvTBTKCbk_GSF-U^$E-9W_@uVr3aiI=FIVVfl?C7J=tyXE}_gvpLVf z!g8NLEXdu?@|#FHB0mFbmr3LRaxnN(G?^lvyV0M9oI=h^e8*|@rD!U-VB~QCSeJ`&<%>9xG+}%_GsKLM~(Z&8Jg2WGuf0BP=0 zHtnNj4p}K1S<4;ew6l=kk|>O&QkKeh27bzXWG^jts|j!9#7qh zhFnk7h5XE=ZcWh!BIWb56WxO>AsflL+q|4YOZwPEjy&f`WNB_D53V)@qHVo}A8%fDIhrXpJ)9plfahR97m1PO}o}97pH`Uadq8;R%?KbZfmdX!~ zRIIHj+DU}xI8A&;L;gt4s(7y$KBGn2MGj!*Gqt6%pU7FwU7iCwdG96%T)0fj;_V?J zh^PLHrn#4R2s{TZi}y1LK|EDkD*J_aYPifYnD*ws$hG>s%`EI>x{ut($<+QOMZc1_ z)%e_MXJ^>oNHNZ^*3W2r{!U(yNR*m}+)qwRL8uXx{Xt$>B2afK`;(j!nsGFkj)?;# ztrs6lC0|l>kYw~m{l27cKs-rq+nCF~pno1BIc@n_)XrcOV^+$LMLB&l;{Q&Ev!mX=(>i*R3B>Ej=gf!cbrkmt!=g!Ex) zULd!SW;Is#i=-Y}uv$O*xI}#0@ENQ|ER|g*foN;*SSq_heA@E4t{{q{L{j4_5BV~J zqN~L3I!CV~X}oKWwtg8w(RBx^){oZq2F>9*(xm7n324pF#a=PA&2AA9ZB{*+qT57M z%GZwPF|-hONKy};%Cl(txa&Za7NJ-~bkkR_xC+033y<%xTAf-sNAd2RfL|mWq z=^~%y@Q|31!^;RNdqi9?m3Xl4nW7DKsoEb(^9=uKC{ zJkqHyAFY`^=^OWgbkC~AQE!U!N&7lM<+7I~G^-9nb;D>XuSm)XUe0<96_DhU9MxqZ zUz0O(NQT~!Q%Ey_<^GnAI-YwShTf4IC|T`36ul=|Rr#2&)0@r{A4rB*50r(rL?KBn z;M4u%p0r{`BtMDInCZPJDkhn)Pw*Or(Kn}r6g)h`P=lTn8Hmot`?h`$+Ac;?`h@RF z>NA;%xLLR?FpSE~M1(AjmBm7m!$>)@lH{HoW%SXoc2V`=^-J$V>t`eCa9+Q_aM}-c z(xeC9J=N_?(=07V;V!I3E+M?Ob^20NMl=|o^?K=93*HH6$5ZJ;dxZ!tJ^9*EkM)rt zTtpuQvix2VEAnf|YAXsgN{*D*PZETOe>0TAWGW#KvXov_rWS5AO=2jO)!jufqFqvZ zQ<+9cZgGp(kCjC$v_M%h!f5U~A>;|KZLM(n{^^AVuX#VzWxe7mG(fNTv%&5rct1SL z>&N=YU8s&e3W%g3D+o=|5&`U8sVKCo%U3mD_7+#7GTyqrQA`WxkUfp0C95LHZ}DT+ zW>p<1yDyj3#&~(shmY$3pe&YyhmeR=GT2<_=|EYmEM7tq%96=asU|!GvJIu}QeAl7 z+l#M2Luo4BLUvy+vksvlYX}cJ@s_YKnUBB+A6+RKswwy*qzgm7LLg+Sp>z-CCwN2| z5t8ZMgxbCMPDdO{$4f22wMQeq!yQ6VfZ!R_74c|UY6~?{7B$Pgj?e_T6Be(oKtlO? zTZ&XlkP2a`)D!5iNQUV@k$WS%0f04o}dn;h-XGT8>?*-;WcV&@uj1usbDejeU_yr9lOm0%R9dI+kGht z655$Na8#4NRn3KVMSLf2Waty&LJ6Pi3~aC8LO3Ar^{dckZ7IYOe#X;Pp?|g#+Pfy= z6vA{tg1Ug8fn2K4G4ZLO0@8U?^qCM`*c$Peo=E6a$a9bwY9n0v&=!d1(AJTk%8m9z zyKn_j79v$IIAS5Y2$51g zZwVbc!wT}r#?JB!aUh$PmMm20Xljd8DC#D3DB{SXWoKBS%z(Dmu`{et_LjG`k%bHs zE*5_VL=)>N96$>iS(?3si)P5QRMwly>_~+^`Uql`c*J98SmBBrZ)*#yQC~qsjf@OM z2v^V#HZ^VQNFk`JC)YYK6eZ9jEgwB9I=@5!AfaWAoFa6jG-pwvZ=02qvSwST$vWm5mF(uGFd|h za{M{Ym8tt2Xgo#z1xI2EnVHF&5u2i9r3z$2$x0OkbjTECu_?+@3R$W0PnP=tM_Ec0 zC9^SE`|`vTGJ@R8by*Qj|rlD7;FE z&{b-TC6%H`Y9OtmNLoei8ih=wkm(eK&;aT12597mVhC%;@s87ABs>08AjgX^sRSAE zy{V0%CJtnssE{d;@?o8-h&Qc-=_(!Z6f&DqHoJsttYtLI8CexFt3qa1l(STU>?mic zqPTWNA?%7mltNaj{1dsCDzjA-$*zzQMSf+<#zG^PDauLY{1hcCQxu|1mMO9&ifqdu zD^r#Q4?$4~LDAEqLMB2cC~_ASNI+RcJOpGb;vpz<7ZpfSWUEpjNl^%u5-Hk60#Yf8 zBmqf^=20n-gtDmca8cy$g8bBqKh^(blxt83wW4I2>CQ+!O@S0;aZw=kEa$4Y0BNCT z=;_XNzuEzGUpGjIv2o41=5s3hLI@W5Ib73^%Dxn$tXvK^Mwx4K!g%@5siawSKEzWVIA59CtjLJ~> zQ934Td5$AJUi3;LPgstx>LEQ}JSDP%+<5pIWTUkABW%anR)j?*0j3Yfz z(R5dKFIptT;0BH(x#@~#^6f#91R0QFKJWf3?RnCsg?d(qJ6$<4%-1n=rM(FzFLY01nnDdTv}Us1M>|dX$0DQq+fD@v1P{w}L(% zSJ6z?fanju!c`{kX*UfoydM4Tss)VqiB^-D}f{PBHj`yVR~F|>v27*hfD{V2{PURPs35aku>)>ffVwR2@I_kgrXQw zYbaV%zWZfpm7vBeqpiS4feVn{og=m4b#j^Oj7p{&o%tG54GbM3ys=8Aa9KRq1|?It z?685$iYDpV{_}7FuSy|0E*>3MG)V`U2{PVs2hnjhyx|tS?{-DWtUxBz!K#qCVYUgw zY~wy#&qiIizaBCjWG2XTTviJWIf4dRD_9TeahppY>jXnQ-hdG_+6D-Sprhyp)EwSjxE8?m={nxhZomfACEmWM;f%Xn;ZU|<6I*>mhwu3%k)!#O7Rve zmU-P2XJkRU7|^#CMQ@scijkjLk)L6PkqtMQiC~yvVCbkPdV0FinWr-yJ+0?5_nEw{ zBR%m_PSW%pb*;e z9Jw2S6h+dEcWw|fW~mg+QYI`fcd)#eF-xUjmNH>^xsBz;gj9-% z#4{?EI$0*8A`IHY7_>#0E)pt&9xM!dFjv&CE9zG?NsFaGru=E0D1XM$6m1j|6J=VT)``|9;q~>z>nn|Qdd$993nbItv`(})BhpMnnkDnJPSmy{l|YNOrmJBV_#6BkQGmIRu>s&I&bI<*xnfw8y+K&ah~&^CLrrV z=OJZTz>y6P%lwb1C6#+`?Yxf!(JNF?dPMRF86H)2NJG7+UH;s?pBKg`q9ws$3;vNiTCC;}~Z}t4Wbx$s{xH z@B*y9lT1#?FwyM9)HY1yG8vi1nprgy6J=y#udj^EW6bRIA~RtvV@&LzA|q)Om2IW3 z6PR(MOl&JHBh_d#<9quj$jHRD(lXMH1M@_ z%;bbjilxq^SO!g#`Cie8hY34JqhbT8eDKx2d>ykW)_%KUMJQDuwPGjWqKK!(Dymg1 zm|B!mJN+YN(I}Nwb3UR_loT6X5u0GEBBbSG@ze+9a{!$md`EY&$(L z%1mah6U(^_Q@R1?;xfn#;54?-Ev zasOk^VsGlse;;!hAIyOSCj0T<$6OP8Z)HR6J{7X1h`T$6^gzR(VU?Pk_CK%bDzX`<$%MhLZ z`MXdAWG3!Q$bNyuR|0Zl$byG^ybh&yWk|(R`GdyeNvj$9(~*&irFnqL1jr~l=#beM ziWl4=vl1OEQiXU4h?m8}{yZc|B1MOVgDgKfdYJ5p5MRiVN}xNdqr#yw59CKtf^fKq zBNt*>LXHVE3ywsJjtj(>^N_Txd5#I)(L7q#kjI5kG^Adnb@)q&fk~TQCa#DyXHX}`5KOKAgO>>1ZmDS-C{Zq$e70^l=)>Wqk4eR$af|jAPLPd1A zhIRNk+TlDu73=VS1ep`8MmY}~^HEzWJ1-n5fDAP{`kGq~8Ca<=2nSGV11r)+;ULOs z5cRC(4+tV;6kVb+5uIvb!=?;vW?^l1+0kZJmctdHrNkL1R#uiop=lM)3$n8|yDG$% zseovH*Jum!KC-hmyDmh3kbro}qS1e9fsV5q!lkmdr~^lr3%TW&R;a*`Aa8~UMPgt zGqA+&3kP+0Em&d?=-?{>qKPF5XJ8m-WvM)*!<0TA(FYBgEEq(JQiOwLMzl4pdn%2N zmRC`fCLHp#VPw&e=|T)b>RGlKLJYFivyhoW6hfL<4v%RLD)!Lg9dp6M&Qf_I#MpRG z+gU1ELM&Rs&Qf_QM0sd=OR$jHv|TJfRF)$gK#xf*Le!17yg3meh9Z{On@wzrKuxrkY-W{w`lwfX?h&4 zz{y@08p7U?*8Qb$2{wf~W;ggs=m5JxEwdCX5IVwA(8xl*7B0ft(Z=i)-w6J&Q?$XR zFaQ>fhVgvIDO+M$*?zEr!@jBvYmNb{j1>!!ngv-d$R<&G7QNgM&vh!_#>nPN`q^eD zLlQN%VzT**fMrQG8L~nqo0S+4Pd0`rL7EPg<#6 zxv`d{FvyY=23eBA=t@!;1xn6_RY2v2Rg$yu6i~VGl;mt6HCIv?NJ$DKD9Opdreua) zVX(wa1Z9II6O4<>jfCt@MnY~dbSmGh+no@B>5p6o3p30q7UW)$M$my-B7_yxh4BqV z1|f`aikh9tjKWFC>`Z17PC`bQNsU>sNC(k>6j=mY5llyh(U4XlD7a=hvI*Ti8^FYc zBD-)OGLA}xQ;?BiY+e#2^X=4Y!nehkw)yU<^}~iW=x?Kd%&2Yl!erZAu#1A zWg+!q2;rpAQWnxx>LU>=HMxwR`J_M!t4XQMC)7Vewjr;HIcYrm(E!K)kRX7^UrK;X<58Q`M%LKfHqwX z@zo{p=Na-5y@2$L^ITKR1v}cB&FklulK=)g?M7cQFX0s!?994Z%unD9{W>T3qc$GZ z7>nCqw4ixB8Q;5>SOUIxZVa<-7Ow~Lo8@PWZ(3WFxuGu^FTIZV47~IgjF(91@ask^yWO{M&R0V zR9|cobhDg?+dzB>6v*N=6x$$PJ;q^eB+9(l`aNA4llh5PPo4^6?21CQU_PW8F&1!R zvB^u$!)@4I%`Ey|uXD?jWG2&+hmbw$$!smfGxfM-cN$BxsaP9nruSfqL9t_UAfFQ0 z4S$e$qch(Vxv)F^=3)@;^!e@oC*r3L8RKe-ZD0u^u~E=ctODB)X)qljtwc9iyc336 zixOT#J42s}#gJJTkMlFp3g)Jrp*CW>51f%~V76XuMcER|$XK22#0xU3le05L2RD>) z5<7?vZm1hASw~Tn*`SQo*-7kF$XSnvrI&bsfyp?K!J=%JWz#aQrWmQt2S1Y88;Vyd zz?w`;M^9H#^nwizb{Br#`F2aq_=+K7GI)+^@D+0)GtY3=gIN{GtWfurQ>vW*G>>&w zI$6g$li6&F#7Y&&rbwj}$UeqdyJcf2RCMG%gRADsNcy81 zEX`nnk)gsGR0N_Eb$7A1e-)6S=rYkmyb2PPZ1QyiR4fytVugtZLB%pL)3l!A0UM}F z%q*{$C{vYeY-#N+7HDKcJUZp|5xZd#R>fL`Jb_K*}}9oMPd5^c5~^_^qrbZe{Jb;3~icmo$I?en5uR1 z^58Z{>*TvZvry~gk--ck`%5TBNZAWQAyScj8yGR$m?k>k^%xa&9iw8-GJ)e_#_f(> z(bFG&XmDAhnfsAD8^>g<&}x44Va7aYoM2KMElun?K|Tkl8EW8gtf525@>8VA=@hA( zZBm>fO-^SgE0BC5G9qO8xzXfwZZzX%wkUMzW`&~Mte6Wd6F$Pul=bDMP=?zTI&t;* z|EwYZZx5v!TTtAcN%Q`5KM0E4#c}^@em16mi4fhO(lam=DaIEXpf{x`N-T0{QMrn= zFkS<_jjST2L83)j(W-{-={D48Nzk9^*`G0DG}6?vcsB$cOYDYF0g35YkXTXHD@qLY z6A!)P@1H^7N|`f4a}BMk zcLT&*!Q4DVFVQ)2pcq-r4uvq+AluoWpNo;6e4T71=MLBRsN%Uvl!_VH z3>GiJXvc+_=?oDCnCZB%4dhU<6dOn#+guJ4+hcR-SM?a~4Y^Mzc^Wm1wX&B>z74c9 zKT5;JS2%arasO9vSiTLUvJs*eWLg%lf#X)s6=^!|>SkD-4)xl3R;PP42_A`L|0oia zIWn?CCQrX6#FLc>B}h|NHxx}$gDwDN&LoLlL&(TDhRQ~Ya*d2*sO&2TvNQiZqr`$k zW+3L}LCiU7#hOFW7|}lg`au?Qtmt)^htwfW#~mipl#x5iBG=swWs#BlOf|>@vg$)} zLb~~C&;?{9Ikyu0+c;VY${a^4K~~^Ek`po_O}WjAkh|PwYN&l=Uo?6sdSs6;Wk^N7 z-LW!7);KW(imc#=0a%0?^;wK6-~;ml{(OWB>`N%5G<%cbiIkT7`9YzJj211HnQ=wIjQggDE->!Xakm#@u;08(#NXGe;NV>?-z}zM*5WB){f|@x>SSXgkQ9>zm%&k`bMXv0n4Yq;qnpV5|BA`%$enHf3$YcZuKS88Xr=f!>a zx2jzA@r`&Xtx>t^W2x9tM$D1GGO>fikGZ)bFW}1@uFB10X5!1m*PZw=_eB(q_pMk7 zP86#5rTKj)W*+0MTb-#sR){&r`7WpiQ&X%In>6JL4IgI8ze;Qr#zW?_ka40PLguqn zR*Q9!igy%kvo)fZfgjGbnY<9WEc#k88PW4t((A;BNcshfuwHzH2sK!7H;5i6t~V?0 zM)5t0`;z$@*d)rf@h_RLfz9GG_!_9l;%yOS3wzgR3FRi;TSfol(5f&~_ibW>zl3rl z_3h#(z8zuct6``ttTD{eX}s^nY{aX};_VPq5w9K#`GY7RWL=iZPVp{MN$XAH{V3jU zd>iKF6zvjU6!Go|WauZ+8>l`Dxm#>0hh)azd&EaD8t10qd&S0KvWYw$AwP>}VMg7M z8DswsVmuYh>>Vs3sVdrMBWQnbQ;bjo>F?DUYY(B0uKwuBz&drkl%=mlsC{Q0x;7*-j_n z_;{EmWK&rvZ(fy~kS-L*pnx zZ80XjJP=k0cmOQ(Gf<0~?Pb zemMu+k+Xjwu^RZT)c<=-%n2RfxtWba)^7@>eSSN~l~-nzQ%3yj)X`{Vp`)&QmZ#d; zt4nM>db`EDL!Qpcd@$nnLLa{yuM>i9{dR%}Z+uHpcK4mSQ|~bxP*nx%JxvZzv3>8r zDax$xhkH(G+?2=n=$sfq%K7aEt=0@J7=VvfOTKXUevQxbdc{{2SD3I551qomEK~Z7 zWAwg9_}ux-*?cP`XZ^o(5WyOTH@e7Q<}0L*tM?sdq=VPqLE7=q{%%=~5N#XErud%V zMP$ufHWi+?1USh;g)w^iaHrTt-xHzJ0LrEZbB@)F7^*!611W#l&{FQ#Ab}D7?t}b~ z?223hH3AiRQ78Qga}>$!(mcO+6>PZ^d{3KGwWId*`JkC45^1#~l7iz0us^?&R9aFD z@&Kdiyzt@+3tLw+_0oN!%tS_(>quq18SSAF;Zed&mh32mFKSQS!_U->0R|u_(r0R#9WAFVVW8()X~wXdxMF9#`nZ`Od3Xu!NYXdj zUl2NOtGrBXI54i|yVn5wajI+vwlK4r4N2MhI^tY0D>+4cwwGV-HVbE53X zePB_4nLBC9OpkIz0i7gYu8YwELCrZQN;`LTL)K-wTvE7w!9;k75~~{JxVy`n^|3yS z{l07arpc_xO`5dspImHF)1H@Xvx?G<4N8EsAm^mI=))A2(2C!&)9iYMlf)d1jH6O& zNT0Hzg4(GXgK6Z=z8m3UN+?(cm6lWDThYAf2wN)bUO)fMog3vNb%OkXg`rSF9@~X@ zgtATC)57W|vDR72j76s^ykXN>3stWrVCXFWD??hoQ|%2~^c3Hc`{E@8d*gIcjK;vO znKG+a*}QOIm_vfsc-z94d~@tFGO>b=OIaIRDwGzkSXe5RcPzcpt%9xGp<28ea1Wb5y&>K*B%I%SX>tVKf!N$4%$lG6c(V;>b zv?&q-a#d(w&Cp<~ec5VlNd9&YJDjzvc{!cu3(;_uQAFa{M1F3jtr!8;n1jskhH?+G zJWz`HqGGgph3;~yOXwac%PtR?3@zC!v$rF4-mfcSwUPLLrP+e43@BU4nR$CKUIkv~ zy!uD0zLJp%jgtT1?VQ5NL^U~{zaxiz+ZQO3QBSE=vkg|0uZ)go}D zq;Z4z!#&HVh7Tl=sJhayQ!B<9>`#&Vt}%!3h9Gn|Aky$MC(IFS z{0~r}JcLg6A@qIIBu+L`Y#as|POR1(gHPHwZS$1Pk#E|D>6cJs=y&TsgSZyTW?xoz z2YXAaLivZP4vX7ma%& zJ(OuzpTb|eXWM*F&20A8ow_ggnBhj@QJXy-AAR&&93s>{3~Ehb_ncCoUlnh&Z0|Ng z0tN4{Cj37aP56H_DID?9$BUKIGKu>XY5E}lH*f~>lU)&2vMU$47-Fqw6yfKH%F4EI z?jR}J9Mr_Qf9230=*Z$=b+)q}R;yw8(@B0kLTghU_%4_J^*Zq2!^9DbYR@N_l6TI* zn~*bNoUl&EO?#`#^@x5+zJUE=M7n{@1%*q1^=Hh)D}x{j@i*;78qlfkahRVQ@!9+# z8VC!x0a7y~)~-waI2bN4VA>E$(rr4&S+u9E1{t<94O^02`d1&c`fpL{jk|CGlSK(W zYSRTISssf2PUhkW*VU93%X7eO>#Yk1i|mI@3quR#0ja~-6N`+XL}GHH-7BT2pHium zBb~G8CnGY{B!Apu3H86BK&FjE1U$>YplwIk>6L& zrf1#%FcRNnZ>nrkuLOC%bx+zsEmGfWfGgR&uUggKdxQgPdv0$D_>fbCMG5s}8(cq$ z^rFK69`9sI{-J3l?l4viG$+_ZjTU2UY&tJ&CgoQ;l2lq@v@$AO6`|C_&>=V_L@Orn zC3PLG+7U#$5^4O&(BjC)=B#O3z60&RkTQ@+LkE?^-RwMv%F)dDiiPNe z{+>%~nkJD*5fJKb<1mc5R`M@0T2mt4SH^ZJGb)Da4{sx8Wnr^8H2(t>?;LNguW2{t`5Ic%F2YMklVJUZ(CJwW_n+wRtib3DW~Ejo3g= zzyC7qa!u#&mb32u>4jMCjkf&E8~Y2h@{l-W_X*aqa5ssf+Y-DChk3i0%aAazV~!~u zScm9*-a~0GLDB+|=A=(GcD^wluWuBK2d+7B7;le}&?Ve!H^v2D)IX(qO1(&yeyAF9 zTTIeMr6)1UzNenIb$<7fHj^5%o~+K^PE^EsK2Slmbj{v{Z_Di2Bg5gY@mQjX_mY6P z(<=T1lQ-d>=|!^kkCl_~-u)eSP4~5v@19dr)a*w*L*j-c!fqL7B<*pC`n4*~BKAoH z|8#GcLbo$0qRADr7EN2UV)A2W-i+Q*v^wBdIqF-t4LLv9Kl8OasB(!w(9F z7fz>xm2CnFwZ?~OFmErsLzMQS$J^anS}jZCBUoE0mG|Pf>GxpOz8Rl!mRa!vY{TMR z4nI#`dQ6$BBG|Q)J3USsa{F1M!#*ixO@H%2=x`VoE zDBc;f%a_Wb4-hi#9IQ~;ar~!@MTWY=(!UG)U(&})MyWk>Uh(Pfl8>fz>R6OlpJQ_A zhCf21cJY`y#Qks~b9j^}U+47}5jow|Z;TN;)1wNa0#=tdOqL5jo(pshk(QT&Hvgml zWE-7Xz@Zx6v-&&w{@1gi4Q6(=z@8o?c4xzwv#QQmHgm&mKFBlwSslw!uF|Zwd)o4@ zGD)|cJifP#W!o4tX$MEF-x*(eUHWdylJt9sLcxWstyPwnj4Xz63ykPomLAK(9`*X= zG07r>q3-QElJ-msTQotb{FTA9msbvH;`?X|!9GE+tkBqir*E=fFz1l>W8<;t!}G;m<^1SMbJOm#<)&@& z4-u(kh|SLMc{ecz8!0pW#)Z_c{Q(ce5vZ=rh9V;xVZp#6l|(bgOwv3^(5?K95-Gj7 z7NC=wU*N6lXE9i0l(3!vOI;1LWCZ(AfLP0BiAqE(o_{`V%~dXohF`IK(~JX`g=Vbd zP?G~FP|!0dquWjpe?qK2mwpxilF!0z_OY-|mMphM9Q+VXXV&_WP2Mv}90G$~r85rW zp7Y>3WNDhjElF|h_>_FUf+5l6Lx%egqIwp^6ZqURYOqjbeBtCOHo6SwTLQ# z{B(G*DHd{Um$r>-9P@a4<4C*sKJf$N%43okj`a@-QN~%{_d@bcy~h91w4(DqEe(3U zG2YG<-KX-`WY}oY@eLHOR%q>yZ$!rCzO$JM^g0ZWIF$8}KplLp_qkriJDc&6aHkVv zr~5;c@ZY=#`B~-mCfn)9%Ift%zsvVeZviYn6szfY%z}CTa9g5({<@MwQ~n>WAG+X6 z25gD#%<@SEr*Zo2igx%$_h@}^rQ;|88V$;=^|j(G_I8_UWKfr+dSJr&OFV6b|Iadg z)wMA;wCVs12dVz>Z-nd~5~rU&c)!K2@Zww4kmxNPlqf9cIxyPk3%twcl=&y&f%@KU zD+XLGg{CUm84}VCzCcAwrCsY)Ga}Wez$AO67Z1eF5ewfy?9-42qRM9(^GMrb1eYkP z$V$actA6BN!D}n?6mk$&S;m-iA`oIv&Z*JFH+jJ~@x#~42)Kxv+`wjl@W8{^r|tnS zRz<(Tv{y3l#;1u15u`8g%0uazOH|slx#Hc_Wa|VsnFh>GWQ*pC1_6gnrC8Hc0 z)^8YWTuGuL-+-jj3D{~+s*!89RZ#VH3XO>;_NG+!EK(9EeTGXkU-p;k!L*RxlK1bF zC8MsbSL^xj|tyUL{Lt9}+(-=#z5cWuSgAcmpQz|hXwZFMi+ zLNDLqY$majCtb_#Qskyjebt%zx-j+CJ{4n?oy5zW)OFC>ZP2>n=No1X0k6mF15>{x zWy6fKV(*VOi~yl%${o31OarnkJ+gj35Im;23l`dAGfxRW7JQugels>AbdN;3 z_8bC`?=Kg#0Spxl}cP!O3jExH=?cuSXh`fjdM&#ZYtAT_|}f%+sjZ<3KJJ5txF^B zV9c=j{|g7ojberQ?&FQ(vM2kVll(xP?)#KT*o7v!?JBb)owlEbDWtW8?T;KZ681^C zp;*ujj~1gGEp1h2lnU)l1{u`??;a2k$BNurf!mC zA0pQOhRKjwG#efG8AF-0!O5hV!~7u~8i10efkP_1umwk}@_ zOeW1p!}s9WicC4rr)%!rLQBL^Cohdh{S-@BnY=dK*|1?(dhwOss{O>tLi4%$q)xt{ zPvY$3*4yiHiss(w9}bk>FfY`!nE#Svli7{5mIqg%<~;*u+4eHQCA{P!1t+80!SRoI;Mjbd!kso*D0zsJjO`B%d`}8Msx34s{!#1;E&AE7!l#GWwlexI zw#1CeinPtVftTj;8qU2Dn#0%0n=>bUrSsQUfwLJ!r37~FNOFytS*|bz?n11vd|4_i zIog70S&dmus(7q0#NRN<|9#~D|HApeCk?u8blgzbl6Sj*?f2BVelGfW?pOk6-TmXWd1}b6!d*7-Htp3CV$)B= z`Ta$6h|-z##m%mwV|un$kCZ=k=>Tao5dE5=vn4Z3WI( z&I16>dV){j!lR{!|FiKI1(~@b@42_ibLeZ9cO;K-m)6-(i{{G%HeCbWUD+OES@#Lh zf4Or?m>2;OZh@VDaH1p4AF;Yj-j5w;y-;=;*KAZCv)sJ><5u_UqjmN1*O!QC(p6QV zr>%LJl&nA_-L9L=F+kUm;Fn+NWm!~DUKKokkvFfe1dps|Bkb*0G&joG@U0cx@^T@9 z4s7!YV*n$hT|-NTpkQ^V0nXqRu zr#r;S6JPUkO(_DKyfgWJBD|QJF)HX$P~nnAsBJ zCtuC)3c&9jYDSjqkG@yyxYs}J%H=HC-Bl*h86)luPV-HZ`Ym>uKhR(&+}b-}F+JLQ zSl*A^rSxK*yB67p?IJRXOZ%=e-O8_8kUVf)zUlR^660tlJN#*tD0+6^ZS%*oB`nJX zxCV{{Jge;=1Y~|!$MR9V9wE}ve@I%|t*-uAV_Wry-{~mk18ri?g}+@kv6Pd0`P0G8 zuuM?WJEFh;Hh%>atT-O@^aU)jm2h1~KYLb6${ zEEX5n(gpg9fJuvr-96hz;N3AcRtfQv;$e`LvLn4J>97t=N@aQ2101f%0^Vo|({o@f zX@B#2@L$Zx!@=WMtu5crGG`LvS4~f9HUdto60XIHMpx5)Ayisvh_fXk4Z{RZs57q$4{e- z5nIE3xr&uJX)nhjn)TEyF)Z>*28k*mi$FiVQaY)z6aH6xD4#&f;2MTi<*@)rtv*E; zyZ?qph~zRab&{LxC~dZ-mM(`yf%qqf+ssItb3R(*97zkNZA8WGc4*&@gUD!>6Id&EG^jW2#)93sp09-h&Q}V#gQKiB+VBX#;zMm^Wzy;YbEtv5Ujd|bWFI8*XWs7^U8V8Pjk;!JFHV5OBrKr zMo>zdy!kD~Vn$Ux?niWhhJWtF2=Ch$x)^!|Gnrq4Y2haQLPLcZ+i37i6rJ09>34EJBJkPgx*o+EcqZNo~u_%uR#ODu<*5p)YX_(2$|C zliJtBv#f_TRfE9ql#Jfi11Eju)QgYV*DhC3+7gCHKs&-=R3D0s|xx1Qv656;A)0JezB_(yOuH*JY;7$aD zRLR{k1dzoBjr-bH=KJDOrL49c&#kv6vV;l;#et+D0#9vw$Fv~dzrhA z!I9;OXaNVc97yE>F~D`lBZAf-I9qP*~nL61*uhawoQv?F;L zlwmN)m=oyVDNCi23B@KUcT>4Yo0f}#8xQB}0W7*c;MYStwM42=Ue+V)%fc_Aan2l- z7ux_u-R~z3ec;w7KJRyHFdDTN48p&7Vd!b=`c+r=<~`BD#K2+py7|}giC>my8-U&K zJgdGmt0n)0%704sY@Pi%1cwS^j4JzyiKZ{LAu)OfQ_{=jTRd9mfdseB3#rPq382jk zi`lVD8;a0sV%ejXrsuBU03e`cY4^|J?hx9jVY{B=L@#;g=KP3(&(83a>|}K3+2KL~ z#K;{cqVyWrFunhIk$!JFRTt7h};Gm%m*yCE(m|aa6d0n3biyqu0QFS}d zIqK}z02eXHlwwT8RY%d$Jv&=lemGZm&Qz8Hnc}z#;6UZBu|r^rRHc8H-KM&-qUjsn zx^#5KLCXZXYo!-^Pty~^kqNMv+DZ!k9WD1~-oXu7dz{xsU*2DC7Lc?&rK;6VdA!t3bJt%zLX>6Lc!=-$sqL45su7L?-Hx6;tsPG9Ki&|)mEu_g z=Vpge6vHkLP;^*G=8@)T1~6mC{U@uuTQ&Wxw3`Q5{#)U+cXt{GHgCm$#94wiF(rDf z=<%VM?C@o~M$~4`>slv7(N^iGVH8c6yDT|f#x-7%<9Ryg(MO~0k?~5%{o9t%5(v`l zgC0yRXk`*|%DFe4bRuv)lCQWpPnhKIQtrB+=6ai=LjawOYW0(&>QrOUcV`<^UWTME zNlAYqiks9QwQIG!T{2?GdZ7|gE+5_)A-{5L@kTWnEm zY_xGQ;xyRhneesLiq>}|PO2nM!Y)e}5sZ!9N0Hh0q+6oW^)ueNVv=sas22`DEs!5w zg@c8j&w>tfPT*Lj4Nq6c41#4G?MxUW3uK(fwv4tZWWsZZLJ3T~yWsAwD(ax)sf%@ft=HgcLn=xR>GIpE-t zd^=W=HL6zf(Sp&~GqGf$qjkW2-tyTGtw-B*dFfW1iA6FkMOsHkGY>Db0J{eYF|>y> zts>y}>RyWv%eDG@z0Uu>*NmZ|=9ybUK0=e)QZToQSvf@-=}CZb+@-%YR*eeOc2C!N z$@xx=ZBc{1Jj*gxyCl|LjmZ?)dh2V0_Oo}FJKO(VCXbA%F-+s|toF(_!3rYYIlU$g zHgDo&zOrg5g1l*v?~}L>XokX<-Xzo|^KjlE!U6}%Sd$XF;j`eB6jI5o8=S;Jwm1i` zNFjxmQJ0u9?S%a(veQAA`p2!;db6(AK?V@0!8X8QdeuFxOtx)$qq44av$K3DoELQd zRfQ=*{Wb*J8K48UiAmYiOz-ClW9_(f_eP))B2{_f4i1;4@+V3-e{+GiIpu{`Lhh< z1kA+>E$(!NwC-+A!q^1cP#-x4#SU)DXv8t&uO^e&2U>5?0DySbsFR zf00I1uO)4t%!2LRPvT8`oISo&H01q4Cb0DmRNEE2$lc&<_wSZOF<$4qL76AH>ny!| zy$Cv}!8&Pq!uRNrIF=NjaQ_eb{EKxh#scKsNeOK^7hl0k->2w?eMwqpXht@0Yub^nOd$m{mSr~0K**D=7n!?Y~v6@7+E zYcz3vMoa6qb(=#9`e%f+lZpn>nduW2EC`rdL`1uvs0w~q5x)KRHmhG5M4x#_UyfTg zADBH-t7r42YV4@GeW@Xy0I$~3+1|p;YroTz2GmGD%*F2Z!92@h&ExUm$GufO96UB? zns`;TM99ej!YAO2v^L>QHY~7FgY(c}W4rN~I>NPSEbRX(9dH?>PdY`T2L%e&+LX+N zG}xI2@PEbF`@!d$b(n5~5gN!Zgt6D7PJPa0;G$IGT7jV_C_(W%BP=6i<}AE%nO~-yX@r`L;GNe_fcs6oeQnwj4?slRRdmN4#N)%Rs{02AD2CV@> z%O_AnO|!i0uD1mTT)hJ;S-$b7?B?*rMQ5;bT3C=qt@`OcYV9dM>R!S3GCa#=-RiIX z15Yo)c3?r4g@Khb-!abs?K~I6cc-w14Rk^fb9{)a23~DJBp9ir(3Gumd+L-~_}D2t zQEpKNheel@8YSAe-NrMe%gC*3K6*}UDH1(PF%u}rM{Dn=ZB&inIu&Et$#KUgOG&$> z+65kn^fx)Jd?Whz*B(UMv6v+`abPo1-5i8MvS(ALutrEEIT~~m8W}Yehon)uM7d=W ztx^KQjGRjpp$W~sq`)XK^Kz$@iQ$3cD!BHyY)`tRvE{&<>+cBZhe-;H78k#JS(qPt zc1DprLus^+%V-DNivEVte4-q@my(8rZZzus9>dXpKrLr7w6R=kCw2+bj{slnH`SPm z*%Hm~qyfQ71)8G^s57TO&D1O?`lp*2uat&#)67R3i<3~GW^#>7Mf;kj>T;w&vrqBr zTugH#a+#cw8B+tn?9Un}MbyALJ4402@qE|`Hk7R`5Ix~BjZlujm{=5#UgI(C6jq#Y zZ!PAm(AM@Dh>xjWXfw6i*P`FV?PP$hgM}Htah%_u`}NE}KBFo@+d9)B7e8T%`7Ah~ zS#*TsS?vloKkPJlnEANqXA_*gJV4ykyKv)^Fx{3qng$=OOE={N&P|>ZR}JvGxNr!8z`u8)he~( zyOb%Hed^LprcE$ZTLCujb9N8PZZ4hQO||H&6({1cNUv_6)OTu8yxePOT1cB33m$$} zvTmO~QL{~0f@E4Y+To?0UexTF0YN&393m!aw%!W!J4>kGa!c{!e$al_%-HfcaZk`{s)hkn&J5Hx~quNCnZ^{`Vh+VTtRO>^m3zz(F)sg~S?sou*Lh`tJJ zrb3Z8C8sU5SRvTf{(X)q$@N&??s!oMPGig<%_&|K&VVxMJn!7%OTK+v*wnPox=&W^ z@0zHW741D2oH4L%o}h1a^MBjF@PTFzUtNf{jUX^bfMQgk<}uFjli?}JKc#>ea} zXs8M&xU$C&Y*a+*A~GvdZ3$a`S5zmY^zhSIV2?Mrq?R|(P+3)!eRP6=D%A>X=0Tiq zhJX%@p2x8H`jzI=nL4~QKYB+0=u>MB7fvgDVci%`_tHLA_MAmB^PY>Htr5(?nims* z^QXdPN`qUlxp!-Hpo_W^SZ`&7H@k@-#ddocJJVFeIPq*h4SyZGY=7s0A4NbnBe0oC zl=N|HV!uJ$FuU;dp4akYSqkX><}QhU+0eM{`oq~%_a2wst%1hq?Wvnf^=o3!kdec8 z(sACrq-^`D?3m{i?rF&Dk{v}KMkm{S#Ox_VJh`?vxW|%ar>eoFA#x0|m(Z+DWR z>Yiq&1%IdQmSrj7F6cW8v|60BYej#iU7EBC&uqqts>^wm^!9imgzXKa$2P7SMr*?( zKz8-Y!;VDZgNv&M%#AseG%*!;OMw0II&$w0ltO>`icS`UTUj(MEC3I4^^l29Hdbds zM9K%z8^;{1Ea211ZG$4-s)k6HGNAYj{Z*JzS$e=A^O$1J_D%9r(HD^MN0(Y8&^nz< zpxZQW`frU!cx-!bX%}Jxny$5!k(fb?4RZu{S2@^)D-K9qzcTi{yJ%JrqBlK=) ziR6@grd7vq#85=!C%r=bOz>*sk2Xq!RNtGL@K1Q~&sNr1D^E!@skK^TsjJf&^lkfW zfGg0xPC3h#iPwpTU`61PVA&WKz}YGe1=MX;sb!nzE7Fu^3(eoQwSb4rVzXl$zPmmR z+Q!@lfEqGwCW!p;Kh&9pmUUjc*2zF7%pU(V)r|O9m*$&<0pB!0jV|+xw5uAv&WzKk zx4GMcb6Xg*9PCZ-p}VT>d3ygr%j_-~akVb#$9jfmwQ_)t`AlGN%18Q9ms3rHrc4JN z(%z7q{R&H>Z2R_=Unff~kPcNgPT_tYu7lr~FxNW!kION`4cFJwQoxfb5?X0U=en0o zIMCRYn9MTuIRm3FRpfhN*SSU_!BRwe3rM{-Q*^m<4zDqGdF?DSc3rb7z~H^j-H+-e0CV9Sl}Q#RWh(JTtcK|wUdkMH=+$_ zQyy$?A5un?k8YaD>8}_gF4@-gX3EkYKLU$aEWOjdr#FDT}6zaxR_wtjog=5*jNEQgSZ4sZ-46o7}OqAxfFML)pFg||lEw!I4%xngx1{+~9 z3QKb{5|T=@Ur32cv0i8S6CVNgZYoo0;!-SW6zHv-#s#HYAt_Ylzhh2_(#?>EgyFie znP!olV=b^3z7w96%NEVw%A@YI}YzDxWTWZVz*mk(%CAaFtUS(nCns2^>B39;VY3^ zH(m>*RowSokI`m{HYF^jO$hs|$2koqYJxAr_9qVPMc54{c+pp{$A*Y*3(}{-&U;cn zphotQiq?YbYiKifrzfoTPpP}RGW7O^xV&hb8W9rPHScanpmfzF#b4?bD6Ru`RqU5&8SrAkhkL8=Wp}Gm`vY8*kp1H=U6tZJ057%H? z*W6bPZSO;<=ZjHKm^sQ6%el9WzSkMo{3kEZ1F+K&Zh2P%u=@ZtD?%aw%7ZmH>O$E# z%x#`bC$@+I4`@}Ez18|RQ;{+|eE1WyUX8wg;^E^1M9o$z!~)+Wz59=)Aeh$x!k_QyWQ~^PVOAONEKDe&WRdlQsKNCq3%> zTg3)S!=`R1aRn*E7n=U*);8KtBE-E3+Mq**Jlt_spER{~SxE+4Gr^yL{o=mRwB zlHtiX1)$1myZi~w>)$bCV41O%hQ=VbY#RfuZ2AMN0bF?J@1oTi4<`ezKzrgV9XL?& z``F_zy0K{3vPvUm-Q*Mo(M*bEy1ir{uw`mVp%!-b9hC?Uu!?X4iGhs(ea}-F%6pM} z%-`^#P5*hwnLLCNtb%oCmkpO-v_k9cgrOlXmLS_?vn=E06=Jg&5@~|b)8jWCvz<}0 zOR@Ii12hKB84Zp9eP^_Vsy6qP_Vma3($@3Af0YM8-mF*1?x#WcASM>@g+G;koxXv~ zG!$)UKgrgM!ypBA!PrE!?s7GZ=fjzHvl^d^AOq>T*I0Ay!(0w3N?c>}|9qv>Qc9e- z&ULpsRhCO(7+IbHkwJu1{;*NEbS zr2XU__oaoO^>tP#mn3(nrr$f)dh(ir_yLb_Hn`uywA*{5H|Y&JPob&fM&5Ytt>w=p zdxPj1?A_a)2RF%L9?>ZK!aS#A$xWhvSVdm1P<4P~V=UOWqU9_RDd**+WfRDw=CeQK zlFyORY=*D}$DU4QAp(Mdo{{*O!#?wiDEPC#-j&lcnve@d;M9h4o6lxY*WfDu`CX^S zVLLo-sO@YkAxL?h<+#WD$Y`x`nIjK%Z88QkeGJ6B`17%= z!vh2Ehb$0xABh3>R@zS5ZN!Rh2YA76)A8499~Y@0G;P^aNSDA2#Q0vZ+@>0f5|+!K2z-Ddlb8T$GI>2jB>P_G2c}>tkyxygg@k0!C@!g5mjs6M?ZtcQ0O?BuL zkrSiG3<`cdpFM>`4Yd=cXL?8Pa$P~>S`>VY12MDr3D%8>0clef=3;nrj?d6RUUNmc z>)ZFfFc$N&#iQnbK0Wh&=(`%y+5L8w6#%w_>t^x_bK^dxLxsjHV1K7sJ-I#5Sny3? zr>Ra|)Cs&f%Fb-Pf9%j(I(-}WUm${1g_RXQ3(Jt8r_!u^MPZW+$45`mwgzAtdHx~y-BPJtYsbtUw%?dd5$%6K=$n0H)l4?#M&07K=>4#Zm2ZE3r{8gcKeKMt zEsgoG`6sXTeE;Ylje}Tg@D)E8zbi>}!hXAV+l!>T_srYfZPi;O;RjJu6?{}R5&G9z@n zV_eiM;*Q9N+B<cZ1rV-JBq%)0q_xws_k>iEbxOZ*8KEr=R1fhZz8`(9O z_cA`r2E(Fz*>zeO+ShI;00fE%U*0_?`VVwj*xv8^2pbF@qQ2lfP9t68*{c zhWjRIP~5{%rKJVWLokMfKcb-9x2*0sZ{guZ)XgW`?KW{PsO{#A6f%0eQI9BX zE{PCK_3bZd&u&(;xPCGFQ9SnHQ>)zUW+0+niXvp4>3u}&6E3^t&Xt*%gp{xd3hj95GZ$qL)%YrM58u?<#1^Z7P`+tGVcJaC2zaAu^gi)AD6g zAJ$Y>7vdd1D7P30tWdJ-DZFC|@Ro1>gm7d!hCL}^w~`-TI(1oCcF9ulsz~lb5Dbm! zv-Byr(={B|37g9Wyh=_II=y>ENcb=G0Jac5(Vyg#c_(hz--TUoY32ujnXcwYh+DJr)`!?PvbJGCY!w!B^<5dI|npxYk@E~WC4 zeh2)!C5Ze??sYAS=-?kF^5jsXvGT_~Y&Dm4ozlAMVDJ_(!%YOy{TnCMzxyG5rtCjb zJ~050JX-*4p~LBXDdHGg>I`~)4OA*?FkghF{`%osRr(4yiz<$i9PcB3B2&l(Lv1P3 z9(`>Z@rVYsR!Z-k6JnKIo{XYKg`;o}^svWo#SS0wH8n60C2f%T1G4EjEm1_})RT#a zRS#DPztZGSvl?B#f*8rDN4EzqxV?S9i%3z+DrY_4@vQwxJbF#do#=i!gV3+2 zoz*8-&tT#~xh(qg%_wT_xNT1j1YJMdQ?jX1cahf=c~StLsB%`Lj~)sL`SUwtiRv`Q z-(FuMEYE+U#?$YdIUKeT0gkH35PT$J2YXGqF$ME7f*MFcwnu`PAZ4VaJ+EC+q=z*n zb0_cVlU(L5m*4-O#&C~+PEnOSuRT1@$mW5NeTqVS!%Cy-p=uFDfH%H|#* zH5V<;#iOQgHYj*x|DFv&cZD-cml8$_>&2H^$<84ec|z*_%P9n7;kyb?82r-X`|cw( zSC)P$`E9$5J{bt|NLzlyq}-0^+#~a=bq<^-aLKXk{6Au1tFDKy#9BgC;xLDK?|S14 zM|kfk5hKa$nu#ch(5!FG>~1@w_=``Y-ShY(EHalyXK!}A%4mU4vX6Aptx%lr`~htKl#nqQhD& z*){L3Sxa~qb;{7(lbzi8kjkApVsUNG=*Beb3E5Y-yH|I?K3~5F8IFqnFQlRp-Dlh# zbS5#T)){5Jqm7>*V$HmpCCrx7XI!|R*cG_Pc@_7g=e_tB-x+T_=q>i=H~JOPOT&}2 z{SMJ?(-nNNP{~S1I-UQEwq)#MMw@kBaPhpepEA!= zT)&-dd_as7vP1S%&6MPS#i7UYx~2F<$KNIAt4XY;;I<2W1EYv)+3JeMPMNTf>Ss1O zO>fWq_}R|pZ^JgCRk_8b0)I5Hki7miA4r#y@VgOJ5`e| z(cA(UVlesD*yBnLsQRUnIkqfpGjfZQv9^#rOXDdF=CtK!)e`gSi~r|Jw6gAi^BSFZ zhVwcT$7l_RV7Qq`4ExrtgaT0lBPxyg^;oOlB!bL z{|~w}|82)SlnJqaL)S#_Qwo1y;-j{Mz_1=ScHkWI5f{58PMP%HpPVCC_W$=a0+b>b zJW^)OggN8b)Zx;l1D6e7O(yB)BqOz($_lqIxTSIWUJC{1^vud}-1R7x|JiHN4U~9m za>F{4Fv+3Y0_qyy1;sW;$oBD6)NB%*J|CfNp$>?+cR z6~ySJ4fK)x^Lu}m+AP}3$nCSs9O}_@v-W}19DAobVv4L*#rFKYveE6+(b5DDsj2^C z>bv8qe&7G?nNU_ns6@6@R`#mM$jaeRDP-?;>=Buj?5$*l#5wlPh-}9=wv1yOWRLK> z&(Zt)`~1=4(QDk}y6$T{ujhR`F9O#P4`ler*HW$i)dFW@iHM=NIjY?+)sOh~cj8yB z#Xl|m!K_ACS5(Zfk(X0Y=wTqBGZMB>S65OTRYHs(6kljJM+jGda?9wl=dZuW$&Nwp zVok&nzQQS^ZLO>MC;v!&_mVZePq9}7Ht!4Rvj53}l-SXj=2I1v96)pF&CqeQL<=Dj!{Z57z(Du$dA)RB!s$6PLTv`k$=|iZ?E` zgSa!WGdbsxR^0xUx%x}J>Pt&W`4~oSfV^+-*3I2W%i#`--M!`YVj@aQz$Zf-NzU}K zi2E(7I=bF;9$kHe|GqFkJ)M6AfQ_x4pzMI25gjE(pJd+$cLu-*sl?YCfF)h=D&X+> z;;VFL`0>uCMOxc}+_wZ^=7vWi+IcC<%h^?SS?r7!)>io$VK6c>CYR`R&K_jZPVC(M zNk}iAEv;&t zm0#v-Vhm76^`l;T=nnFTxL?oolPTSZ)ykKpRzfQ9K%?PC_3G-bcfaEPkWhq4ve&AC z5<8d^l~(||@OasvHLAM7_wj|kJ6b|?Vn9bE%OlF~>kWl21?>tPQHdz&l=|vi0NzP8 z7|~jEbnhgdsaO@wm8~@R-~_?601E%2Y1)cashuYxD%1JX^k#P_a}wUx0K@*h1Dm@l zZPFmLj=a3%B%(d&b3`ce6Cl0@6V9uBvAdyj^3uwFH?9usd^5Qc^BtIW!Rgcc+3d)| zA9qd?O$5GJdl~y(O9#-oyU+SZtk;)Q-TOHi!x?W4lhgaHTWx?0Wk=3`Qqw<;yj|Kg zJ_+%VAB;Fs6X^ws=YxsR;%dUK!5n>^oIOp6mDgiG0c>$=GBO>ed_+~JU7OFiYTs&< z9FKlHXA63gI+7~YZ76JD?An2Om3f#BI-LX^G=dnfU{A}w60;NIC<@83tD(s(W@RqIc(Bss7;7kwGayk2@h#g7rhIyY_Q@b@FF|^}{<+Q=Ip}$n{9S zu*XMIC%FeE_QQT}+3(o)`$ez=HOVfgy(m02+_=<$w)Ltw&>M8CQ$2T&4SJ~^cCU;B zowJ<%h=#kEA<`c>_wdnL>xb=fmTGQ{gmz~-%O$kogA#w})!aLouU*Rdf`jVu)-SFm zOn?%&`SKI5&e$ig^xV%I+B2`OfQek|jeThHeW{DrL{I45t*d(53P~#<ObV3zSjF(CE*Np|wyDtfarVDSec)27eaIyfq(%9E{XW=oQ#?!mQ3`_d{ zR`qdR>`VEOZzO38uYM|&B)NaLS%+_GytjZ24HRFR~CU8z?8BOKF@nuo2h|n1^(o=qsTZFIdzooO_sD z9vfL*x*I3vby7zl(fBD~%5du@=!&C6i@{S2);<4hgQ28~bxyl8m87 z%p36c`(SajK9Wy`IAw>9tM7Z-F5CdaolGfj;oE;7(U3uBDdyZVfgQfPEKC+O&@$EP zR1g}Brro%7mdE5Msu}?yEfYCO=xsP`i@{MF4cG@bmi6= zns6URijCJO$gK7|n^;J+1FNld&q-aan}Kqf?)3E!-Y<#p296q>WnJ$M_a19e3N-ms z-AN2)eCLxvo%Ou+l)?t&uv#^u)^3Xm%rRxk)v0tpegrD`XKJrFVZ)<*Xq9ss=tN-K zt8@SUg^~?e-OF05<^u|lZ(wx`q*D|nF~6R$dx>?#+=ndhM)eZl2g&Rm{nVSX+Gz7Q zemf#NHNb4|5591qnIj^z-Jz~6lVDvJu;tvV4xJ;OlH9m?7!v9kDN?^;#GF+Lg|!TK}Ez*SAl!$@bl| ziyNO8nzFr#w4HJ|EF{GbLcp%i+fQwnyq%amnT-OZ1XUvo*BPiqFgq$;&?&nOx2pE> z)k)5M&+=)O>(n4lU-WYCRGfNl|CN8Yv$p1CmFlksBPVtO5^}%PkM&y{?@{}I{|xNk z+T4iC0;p??yW@uJSO!nwf!@jS%WzHP--owBmeHMTFul5zdq~~!`^3c$IG@hrGx;Py zTu3%$T+`eUJqewE=o^3b?fzJ<&fom+@gNQ8p3x>@M)ug_T>rBAC4XJjDLza53QCTG z4b22kU&1rTqz$p1jCZ+*Lme5Mn(n}tW@T^vlpV~t#d7@kZ|+N-42r+G3x>dD6#U|C z7RB~6-V6LKI~n_)qq%g@+vyDAQqkX~c~4(!zv%nZ4UK*#h(F5;e#JHbQdW2P$s@MM zkA*rTd|Y~hr>+1mn(K|N(fPzsmcK?P`wO-*RQm~Cw7~4u_tgGU&p!Z+nnLv6vfG)WCnyUnBhTK~ z4zjP7L{_*TvUk<^FfWyS80!qPc@+usX5J`?-#@ziS96})DZAn3)PT=vuG0tmA5!Te z>-)?2XQC2geto8Vxd+sT8C{`1$txwXF~FX#?l!y|{M-IlXu;*o(XY0y4 zt~Sh^ahUEb9U9H6$#n1geG~%d#pI9Q2g<(&Cq-L#{j$!=yeD&&Ple7M`Sf1Zs9)FF z-6_F86J7D#%k7EG9M~tVwhdB*XvK$RtVh5xPBQieV z%UmqL+NO^}7jB+OHR$?o*za}CQ_I-?=~}>{NAE9)BiUo)lR5kCkRxO+re3!JWE0>0 zILPwGCj6-7Of-G9E&r6>J=YJ&=5`bSS=-oZ@u(S(8M>OWcl6LI11wcT#@CAnq$j*9 z@BBtf3Lg3JZtLh`i40;S9ktTCf|r?rE00L$iQ8|1s+ErDHSdM&8IL%+8>GtxkL2`% zn0Z@)mkQ+NKM7iqezFgyw}A!#UG|Iy(BSQ`RxBaFc$d} zxRy?!j&9M+P-cARMJv+W0!jP@qOpQv5C_Ea*bLO_GNX@vs1|9RaB!cJ0a}CDRWFD` zwnL99XfV*LKwB=CbQcK-b`FZIA>*@OneyHo5V5-#w_?bchHhBqC6f?0y55T+}z47nhm zo0(I64b7VRsrUlAV8$2;^b%c2tORrId*n)mPM*2%YKu3kHEt(w?F#La7B_{mi-$27 z3ji*J);QCPq%QDYf%^;x!~qU?QcZ`fYECpux!wr@X@6i~h`+oT31j|glYeF!Gt<9j z?MQ?L2KhK3$dZ(Zu@K9VJibU{tL^Z%TEf9tAXw3sl$32qpy}Pr6FpY(Vun00(#Sks z|3xavg69FhtvFe&VAc*v)dEacjf+)?E@l%OP~x}9mnVLZC`Q~se^w!(v6~|aW6-(X zj*O-#*7`(9Cgw<}1cUV%PST1O@8O?4y4yz1bTPa2N4F!~ox~u&6hAm+3jg0VF?4A1 zf3ANA79yqp_d2L}WeTtP@djT1i@C*06nWEKs~32)U)=pIHz|K}zrM%PG;);>InJ-8Bq}wenf~XR3tfDbf@9(a%>lm_Dl}*nIplwp+$&F&kc^4Q zn}G*Yo|)^#pSdhAwCjO~6;hL^4jI|#2-hU>8Bzy$VAC+OT$5NVFPAWxen+pDh(?$U z+tZl5?5>SmFR@sG1U}IP0vXDWdxx0~$t-=8O?bO6@bH8DdkJ#V7%%7w5#N!md|1aS z*T^wbCimKuoFtzZzmAzMe}v%Q44P-mcfI5y0-IK%@CZooGl(A@n>$26So@5cXy7;e z{pA}i0tV{Y=nCBlAj}u^Hc0+W;Z>9Hu8G_RX+^;Tm_mCqfwwD-KqZ7Mw4DIkhrB}y zgtjlV$zfL;2v+(H&y-DxvY4THwp7lHg)YHMYX&{Usie~`&^d!DFR|&~P&|DN8qn*e-CG+n+y`uia zkN6@y#K9Od-E?AQfmcZsSwyJE!5T>5z~EB!`ue2o&j z&NV_FS{Ula(Sd+x;gXLkNkUA9Fn&bgb~rgAcy-NBvLfndRJ2@{+qb+>~G#%M9>sg znXH0fqHG{aR%50$+w%+9|E66t&ntLt`{(l`@}|*CPeI?h0;%~=6f?__ExALEoB=r? zFua}}Tsfd|vGo#HLz0mz0WT*Ir%a@m6F^?b(7wVM{K*)30&{eD)CaGmOS{yg4Obw;2CdN*4oKg7K;;Z=dd9H@cDfh~JW$68 z?j~-4Bxj3Bx?G>R0x-FMuiIszf{DIAi3Sm#1z=N*43GDjE?84InAvVig09IZM{3E| zKWX2XJ(nMm+@!}&(hE}imHCaoWd?mo-k?G|QbBwOpDcf&e8evuhWiXcO|3Gd@p0E6B1Uq5|m&;_NqG4oG_m)|c`GzNz=Yi(1@=4mktz{xxI_ zR?|y)CwO66&sLEv6ct!l$7B2j6#_h}0f2l|=th1-i(2!(Ug*Ek>9ucu-z0SP zBs=#L2V>h@hmh)PE;P1Fn~JVjCcR+uI+Cka(m22RKUK6NO)mR>Ev8~q8W%9mDRw4! z^Vaq3s#j=0DuCxDezUhIvv z-kF2kK@~GoU?~^20s4zW8Z#ZiFus}Ev)7!gt%ME;p1%r{tOR*EO|uCr44@u*cW}RT zwr`W~F8{wZ264lvg=z&sBPT#b-JpLR#Es}Yss`=rig@rlyc2mU0J-4xOkHo#s|dxj zdYwJ-dEJ5FO^cf&?Rm5UfwMh$I$sLd*qwWSO(sEA2_B@l8Vfu%#5yCxGk$+awbaDd zwh)@=L}ffEWy(6apVn_htUZI&P&dnPm-9v~b)dieySy>Tx8{R z@a&*0`O-fb$&@gPvqCGgeRyykMXwtZU#Te6h~EzbuzTJc>{r15 z3XK|@Et@s9as$R4+NlSHjb&-3!3!3YyKas#(F^03tIrq2L;11Sipj zWX5%Ep^!JlKDScY*Q3rJgSL6u{*#v)#}Zn693SEj4e-tS!U1WsW91=N#~^rtx~-J} zw@T0YR%bckJl@yuf1SEOWyZ2Z3A$jPyJ zG3R;J(ZnZr#V-jVVA1Q|t?suhWc9HJKePGyt(-51mM=#{AAC!eXIGUIjf%?}U=PKG zHbd`wcX%)>o3UD}dYnb%(sfUmMTQ8?tgBFZTZ4TgWr~FTZMJh|!hP1@FKXJvRr{Bo z=Z%Dz2ERYO4McsD1GR587#^hoLY1`Kn4BclQkxF`>1BqCvc4?({T9~3i1J%s3mPb+ z4rK1MxpUfH)Nv8oReUNi#oUI7xz;jZM~+KW>@B*|Px13|GMZPsz|XJ*`Cg0}6uZ?2 zZwP+vWpo}?u!x}HP5UZ-I3jfUk6tADRn$RvqlF)(HTn{9Tf8r|^$J@StzU54f#~Ok z<_nXm0mUa$_vJStYgF|(+(J~=D56UF)}QH$mU2$8rRPcU5)Q4CzqU`jVoK>!Br?ah zPN_L?+(P&~UgrOtN6X{83~T(GT=e%oVZ?$Xw-u)mUPW6XVKE}%g?7=w50dN!+P7%k z?(5fIzPvzBi=Cll=dg*Audb2ePMM0aguJe5s5adK_-WkpFed*~d-6a|aYX-ZflAdE zIS?!(Y5iVqj(zL^86+=tN@Z>gH1#08DYH=<+A;v@87&wH4Fo!Cq4Ar@@_Dv}hDW`?`;n5;h=fxw%vq zvjr3vT~5n#zDA%;iOmzkQ4f|>Kn!n)0jSQ`cV+9`Yi*rLo`1G0j<|d$GRRWCQBHi~G6?Rf z``vfLR6!22Bzij!a+oU3MW_4HynPl*bZI%gk&W0a%KcRy&!VXtIr8yGwVYl9zcYB8$v? zIG%~$re`X^p)B#I^tx=~ydeCf1v+Fx<%f(j=<%}!A|Yt=_c*{!>A-*|>JMqZqbUBX z%F_j5M;k!kOe4@C1n6$Jp(hoQaz+wi48io+91hcPiIx!~&{8YPcHZTo!UjPCHe#(+ z%O_-{iRp~+fuiejh$$01s%L~z`5ep#p_CcXd+!4XD@p%ll{>f4 zcfjl(1UdNMBGZ~lKbI-9FXGd^qYoW&l*_cZMFC^U6NCYm13?_%IzxvjJS(;uz(e_y z5i*jPtn4>01D%XNM70t?VgDcg;Z38GFG&gB zT-OQ6I#+Fwo|F>firRHKC0s@i{uBWO<0jEsB{L%7C=CV@%$WK&Mwb$+fwF}*vr+mS_{wKBp5fmJz~!T8T>yo8Mn#OC zMF8k(YBZBee=f1FKfVJ)YU%a7Mh3-3hXzEWCLb#fHlN`A4$n(lXN6vYj~M)?M!X)k zw}Qh4s(4oU)-G>N*5t89BNvN5Bni3FEYfuVC+5)yb21KbkZqLnVrnaXD~YzgehxUI zXvHdxT=MG$op3o;q%V^XbJcZdL^T?R9_+ZEEYm{2z*NpJuZmwFs>|+j-RN+{>Gd>5 zuuya8;WUi|fb?02JY%_XpHF-)4d;(r9fAc<+w#iR+0P$aGAAlr2rC{U{5N)*Fb66n zyKpD-UvJ`+)d-%IOG3fuMf8ftnAwlDKBl1S1TrwSAwBB1jiXN-U81f6zMDW?ioaUl z;uap<#d_#*$p@_4ui5sydU?EL8mE14YwCWa@=>Xc=?ZNaN?Y6gq{_k{)yowXT^!R( zTs_Q`;RTYei@>no-cnqJs>%fImEU_FsMmiC|2hl^BW{w{pn@D^OYY39C3f&{wkeV1 zv0bjZ%MQ@9(W99%cNOWKQL@M)HtUV=bHyD@?#eG4$7-%`2XY!+$#gST+E++?Q77B?C=08s=vF)r{Q0?Aw2JiI^Vj`#@xFN6 zSSewTVl|+g<)P%D_rLW;nQ+GpXQQw1KNASI?i_IX+{eEDiT{H5xZ0I!H-E2d)jz*B znkxnE#J;D+-1%liAR{HpJD{ojrnK&9|6qUjpB@_F4*#;UY>VtBFSnQeD2v|~Qt4C- zx5$`);J%%G@ROlbOYr4~ZEeR|4bc~NL~HSQJ@qtHNFfz~hD`3LH@s|BdoN-VPKL#{ zU%AL59^!yaL&u#+%-^tYPT-rgNTBR4yHZPklmYK>49&WG5}pMW6jpGrYZ3e|0Q75C zz~rScNNuaI940W#B+3q1qO4NOaOF3=<75w?rsz0}5LhY* z(k`Ngq-C`J>b_II!-)zJHqg(-B|f*Aj$A9OZlwhU>leaoR}M*B`%^#NN!LV%h4HpO z7Ay4@=~dj1*VgOl=xb)KTtS8}N zLhrrlQ;*`PQlxzs%}&aV-U?Dxq4LtO6{|m?%+(={7OEAR;cew22#U+(bOaebr9MtO zPgtyZ5)}wSs!<8!xk@GF^!@cHnY&&J$^zh4DP}Nx1Ql*+YM*hnE;~D3fmXnqA(anp z99RuG;Qz=##ha&zZR&@4hmJyALtWX6v`i(TxH2sx>Qxq1p=%IPdP9rMo8ggEmXH3@ zWPAn6Le;*4oNi0wI2Ap4@9Pt&K=jAVgG-8Ui+xI@?|3x`gh2?vJhRH#%R`mf5euL8 zs``K23s8Ux+m3fS=_^GPa)B35 z5YELXP$M8il3Z5U-tpc-{}7@Yg60A9#ZY7Tvf0POEvu{)GHGV`6GlG@I#5MrGR{>B z9_bu+T0%g(p?EpY!Epm+*@}L+7cHH(S|*L4ceb_PYg4up)S;ZavOs`>P$0NrZF>1+ z>aYUA2jp9^I%WlixTIML_TAhz|i!gwe{{N+P9e46|JtZj%FZ&@NLN%&t;5fTVN4oYm zyFRur&w=Alp4iJpUhL)J0BQE&f0z94WS9gJ1wYEr38eC7w<0g`ynMeiYuWEo>Y`Nc zQ4q#ppqBZLYd|%dYcOX(^;3>cWYM$Na|MW`7P|$}TBEywe2n7)gA_BeT zbM1pJtw1qY4!&GXmBP=`gWCNC`PU%EU;*^iGQ#yWVL6(r)}O;Ife%s`iu&Ay@Ij?~ z?m@WqaJJA{FmM$3m zWxoF5e5{{TZ$uO?1PO*g0yRzpyZYhdpG#E6zf@y&_iCWD-|dz+!t@AI?o%)npIPjd zzq4x@N(Ys??|U63f+RO02)TyhEOPAE$gf5XLVkZryQ_s}74$GT*P<4brl@Cj&Wikz zZ9thnRIX^wB=C{R!J6Q5N`G;_-LLg{jW9Q0maxzE%CIkJRNX+ur#c<^p-V1q3`#Yc zM;b%2dImN2M|R~IBorsNTrj80uzvh}jnPXyE+z3}hH^#GKWSZ38DwD3j(lCT!b{_V z2C1|0nR({l?X;l#=mZL2@G!&XGsW^v!_gwvcwagyb@COffKoJM=PPTvMr8B@a>?hE zI>ZwzCITf7GW*z|Q?=29FJ6-$Y2dke(oYt)4qV!?owbrLSN#&3EuYUC=gZ2LcIhK( ztGU*l!U-3NFZA4&DFowyWnqo=y~LK1Z5^W~8x^hT+6GQObqE7L9iV+2Jy4(CG_aw#A8cv`tCgG*X-KW_2 z$!P1xo|f^#W+BkU$|Z}00>3BQTIi8qn4reOhn;rxz{kwX2ug%sxS$%Noo0lfrfUg< z8d!I}f#v?VTh)67J4@)5o@pm2uru1H2Wxkih5F&Q+VtP#HmHoe&IGLU$GxMS3iKOY zJ9WPpyGK}EW`qn(rJmAGe&{S(&gi$j6`;`m+FsK_$^A3acu&cJflDq4#bjX}--%SU zRO@J`^s;P!9WxJI|5U;$%Vb7D;X)1>on#SZjt|F)kk_~EeFM~O>Rh6P$xt;S?(n{dBXL2z2MePxb3}{&%RpBd}+K8n;Wy+)ua~`PVM-%>TS|`_mH_ zj849YX0GIO5Lsu|MDy?VeyKhc%9g-j?hR%mHaMW(C&$@n=u%W)R58$5TVx-hU`h); z)_|nA>!f`HE^LB8n8s6Cv6rYh;U1+gvYNW6ApQi_$G;>0SZhh zB>fr>m+qP7u3#N)7S3dhvs>Na!iSh^kTmyJWPxS~>YBNHd8Zl9VpE$HU&pmyGY7U9 zF|RzrJFYx*$^2rNd%j@00WKS56*DMFaU`{S$9DEK)h>>I%pB5(+A{v+%~t+->2z8g z@cnl_|GkDld&CCPb^@fylD#99s*A=U=PkKsSB*3bD)ft6lbErKilV2~NwY_Em zw$&%^=OQ3>hdetzvoayyaL@9e$t^D{EH3RNxIEvs2G;8cWd0j3_`+B7N(Q)~0euNx zV7Tk|*}F`hR$$teLklgA$yk12u2L|~GM8=*-i{NrJJslipM6$K^gCDkf}{(^Z~4RG zbkb!65yk7OoXDkQHNSf6$f6}8HOfjPWpE{`QNXqjP8sUu8nFs_Oe;AF{$hH4G*bj& zMkv2QVCTxo_>FQ3On_e?AiL%rOBKlm^N2sHgFKr78nJ?OM3HQqvfx<}4+FU*j5mwd zksxx=HFM$f2qaLr+(`i5^}uAb7#C2&VY6l5ppiw7OakYoRJI@^Xviuv!a9w^N~HFi z(V_!1$er{G!kSoZJXoFtS@^qr287E@ck=3Y<64tH?pE)GxhZ~VbBsApe0bn27uwS9x7B!YQ%$}#O_4Lfs`Ai^f?&cZGc=`YLcr`|d0?Kc!fbLj z+S_5`d)k*OWA{wkNZX~HZ{_|*#lKylm^DnNfQ9*niEnZm-xK)nYkE4r=Bi=v6U9xz zHvMOHk3G1bOByUWG}TCIj6X%yPv(GsFB+04tEi^Zkjo|lAhq_)43@XHJEb1*^+RTx32Oc9e$(M+6tWl3UaGXZ7!@Nd~SX=Ro>V zt3v)7(1>>|OnJpNdxk*@E_o#_q%n`vPcWM+Q_+3@U^EzJG*F=kk7Ron$rZAVy^K8Q``jTR&B zEXh=?ZTk0ISdyadXg#nW8Mj&MgZoUhnP1MuI+81#1N9inJ~;Bz-0pH&)pZ_tNUz=O zy}L$|kwrEON6AHZ0VJMmvo%M!u2@w#r=<8Y^Sp#rgp4&|(1<%y5^T93r}7LT11;U% zjFO;|epNL^-FDHLLktF#*^`sDW_u3bbH|6*7RVmi?z@dA`AC+G_U^b#f)6lpX?4`w z!OAkmr!mhiI-K9($(HWJSYC8mv7&a9N&=}L+cT^tt(#NhqH9fJ3#)uSMy{ezVj{~r z#-S$ZdKwlyVBaCFn(Wq2^K+TFy2zxeWks1GJ&buB?aX8(F@<@h(I?k`=(1+3;etjr z*|9r+z-cFS?I=ZuwR%stqC}z_7_fZk15NkiB+m879>&QejrP}AqkY6l&h( zzfo*nC_|%iCup|IV=X4GEE;0X?qJP%U46S2G^1SS7ljap2<~TFw^x>R zM`)NhEhQ$f$?sb^0-G|J(AqADEwxMZ>;|UUY+>rYlq|;DhS)A?_B6*9lN&u^_HL(v zRgLQZmcGMiU11vmYlps^`X?%x_nx$Ssps@_n*~Dmw})EiHPQVd9S>ga0EL+{ElB$C zt^0AY=jfq#mM*>GAr8jGFF8>3j-S`4UC!bmOSYGIh-4^p79>)ex9?$#`h5G$+23t3?^UeoD43otB5jx;kipR5~POsfjJ#{<+IM-oeFW?4vU z;_N5k=HCx{sKlnFB8%?CyA{0og03|UL$Ob|E~@5=Y254Oy25_vxlJFPtb{9kaAJ4S z5D7mTy##=RyI5idTMSqKxk)jLOI1#S{bkmr9ItWi{n(XYOv$>+c8V`Mo*Cc7)Ohf8 zP3wjR&=X2_;_+f{&vgH~`F6r}TpD2AI|2~NmrA8#Yx*N_K@M$!AUm4VVVL9oR)s7BzlU<75z$( zez7F1fv`d0u5#YV!pK@3PQj86+8cv>h2s4`x)2qA#=f zHUEHCAV!W;tK*U3QiSYpT5cwzCJ@tHO57IKB+4Fr;VzxH{wVWZ`q;KPGSZ&ynN7~& zX{(jtW&I6?y4%>~GSXopY;FEs{~qdV+PN;F+$?6p-7o9bl*@coK#5%=zxUxv5(uQi zu(3#LGJvYYI!#1Mh{7#X?9HN(=LWprN50>A-hM%lbJmW7KzRhY*K@DO1mj)GlZ}au zIx)re^>8owity$BEdfe`5S!#WyCZW@WPTU>wU`77z)m}?(+YfdH1Fz3u)jBDlSb>( z?3S|jxUA^(BM#9Vg^$0wtln@zrp9M4evDJcN)7aBwuczIH7)^bU;FUfh8SnOYsF(V z<`wD{_U^q?qA<(MchY71-6msGW2EL8>gNR^fXTLJYl>y|H;-SjC!GL0VSV@b4k?&V z(D#RnGwL*;tY*t)d*@?w@h2YK$#U5QWhCW*KbSQKAyPH z39>6p_ud$5+Mm+%DjeM*T)mgLM(J#Gv;CE6@^4WBM1}dPz@Alo7_jcB#wqWO|pcLlx&KfV23aw5Tq_F z{Z&}_lhIr@B}ty!MyS(Qq~xhe0urfU3p#MzE3CTl`kbMwAP~n@Pq3y4F)AJ0?ExOj?Wx&dvcUpB}v#1&bt;x8R5zXNBFNv-t1Q!0H}?_ z7cFB>dTi61&PUN_K;$xGA=9>2ll8TS0OGC&lR@Z~IcRjiD zk?~KA0;^HZMgx*1uFiWURa`Bj6!Bmx73OD2I=4)Z<=fxFwdd$mV zndJP!5EP)S^fwZRZKgW-5i$RbDZTIx_hu%kU23{aI@jLYe+_eUHO+0Mc+W>5%Vbol z`QUD@cHb4t2Va=YwjSAe10PR+#tHgY_;9REe+3652LZUGCq_2|Adu(Lk;Z(H$(z=p_ zqN)j2;QGnEc;8|5KD3A)RAUP3Tj}l>NttM1J zK3{;2F+QRc_c}K9*B1B8UUF&P)3aBw{+e*yfS@ovM{Fmz0LaF2K2J8s-cG3&J-phc zZ=nm=>3p&L-K2d5eN=zaIXky+)v$lF;)|C*MB;AIS|Z3|4IVm>2CuIz1%<6&u^C`b zY-4qJBYhoRzv0t&Bu5AW%bU}fqK=V}iITcr$g~F$AYpEv?&yz`4iyOB)Z*y?e(F`o zZb=YQn~2=Yxd4^QmHmWl8L0y$a6Mg^z8?j4Nnq-d5k3+@1A;SWd3Oe8K=5+bJ_9dol)Bm&|Nl84tHa_ma_luaPaO2yJkH z2_Bn+q==;?t^r^-fvLg-_atRCWL7kgxWcudE`aU32IAqC{=FC7%7@=jh--TEs zle6l_Dn!*%VFD$yq9Gj?QzB~RKReQW!k&TtLZ~A(1JQd(Q*V+K-qwROu z{<9yV;e&g02~HD$d9RLddj8xoF%t#{Nk|~5rFl*mAkXRE#R_(?^WT4}KgDEP zs)h_PyPMey^gt3s!>9e|v*!r^6CRy&jyLpFa7vY#4jcH7o|qoOJaztZ4-#X3oTs>~ z;yqG7(+yQ5d`qGFUD`)l9v28B+1K+~fMQa=PKYQG5CfGcVJ5UPkOu0425r~vnpXp_A1?~*sw*PovCWuyVIM2E57zekV~3Cm z+iwuzAtNZa6`-I2a$75If=}56^vv2Z8KZ4K2PpWLodmJe`Vh($tzG3e=e7V@y=G~c zHL^&sA9%@HdJ+srQMsI@KlE`C&^g9d7>+2jpqkp>fkNL~F$w?T!>lYC#2;+dzdsZ8 zS{fZ-*?aNoRu4HY1T|X-QD5CJCKE<%=^=vCKG5>$PCv=RMO9#74#4$)2*?}Q&X(;H zeX4^IMiv>f^1p5XC~`|{^TWPFV?`Afb{Aeoc%ND8ZYJ;RV(*kNXah1A+;I_}V!7-< zt^vO04JWF**REWrGU6Ls$Et2w$&HPd#d~!#L1)XT^}8+PyjHh@4N-5Kls0}B7oXgV zWegIlOCV6P)$vaFX`LpNHA3iu$!%(%vIqdxr^_8i8L7Jm1IL`t=nSSPrnaZRV#pHf z)RqK2Y`U>=tbQJqCJRqQ6IZ&)TsZe5W(Ip;>Y3>1L5=QOhva?5VSiM9lJ{lxy?UxX z_~Y5oEwfF%r8K1xlG&Zb-ys0qgi)S>gLM@%H9Zz!(f;E!&d7aj$Ts
9ss0R$N< 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 Y5DY3V&l!;|4(5h}8O-mDE=tt?59F};=l}o! literal 0 HcmV?d00001 diff --git a/examples/models/resources/models/m3d/suzanne.m3d b/examples/models/resources/models/m3d/suzanne.m3d new file mode 100644 index 0000000000000000000000000000000000000000..9bc64d7d787a4cd7c135af96c71cc0c6d8c463f5 GIT binary patch literal 11645 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 W?QqGf)qqRRMyLE2$&$JCoc{se_CU4( literal 0 HcmV?d00001 diff --git a/src/rmodels.c b/src/rmodels.c index d6e73c07f..710cfabad 100644 --- a/src/rmodels.c +++ b/src/rmodels.c @@ -5264,18 +5264,28 @@ static Model LoadM3D(const char *fileName) } // Add skin (vertex / bone weight pairs) - if (m3d->numbone && m3d->numskin) { - for (n = 0; n < 3; n++) { + if (m3d->numbone && m3d->numskin) + { + for (n = 0; n < 3; n++) + { int skinid = m3d->vertex[m3d->face[i].vertex[n]].skinid; - // check if there's a skin for this mesh, should be, just failsafe + + // Check if there is a skin for this mesh, should be, just failsafe if (skinid != M3D_UNDEF && skinid < m3d->numskin) { for (j = 0; j < 4; j++) { - model.meshes[k].boneIds[l * 12 + n * 4 + j] = m3d->skin[skinid].boneid[j]; - model.meshes[k].boneWeights[l * 12 + n * 4 + j] = m3d->skin[skinid].weight[j]; + model.meshes[k].boneIds[l*12 + n*4 + j] = m3d->skin[skinid].boneid[j]; + model.meshes[k].boneWeights[l*12 + n*4 + j] = m3d->skin[skinid].weight[j]; } } + else + { + // raylib does not handle boneless meshes with skeletal animations, so + // we put all vertices without a bone into a special "no bone" bone + model.meshes[k].boneIds[l * 12 + n * 4] = m3d->numbone; + model.meshes[k].boneWeights[l * 12 + n * 4] = 1.0f; + } } } } @@ -5352,11 +5362,12 @@ static Model LoadM3D(const char *fileName) } // Load bones - if(m3d->numbone) + if (m3d->numbone) { - model.boneCount = m3d->numbone; - model.bones = RL_MALLOC(m3d->numbone*sizeof(BoneInfo)); - model.bindPose = RL_MALLOC(m3d->numbone*sizeof(Transform)); + model.boneCount = m3d->numbone + 1; + model.bones = RL_CALLOC(model.boneCount, sizeof(BoneInfo)); + model.bindPose = RL_CALLOC(model.boneCount, sizeof(Transform)); + for (i = 0; i < m3d->numbone; i++) { model.bones[i].parent = m3d->bone[i].parent; @@ -5381,6 +5392,18 @@ static Model LoadM3D(const char *fileName) model.bindPose[i].scale = Vector3Multiply(model.bindPose[i].scale, model.bindPose[model.bones[i].parent].scale); } } + + // Add a special "no bone" bone + model.bones[i].parent = -1; + strcpy(model.bones[i].name, "NO BONE"); + model.bindPose[i].translation.x = 0.0f; + model.bindPose[i].translation.y = 0.0f; + model.bindPose[i].translation.z = 0.0f; + model.bindPose[i].rotation.x = 0.0f; + model.bindPose[i].rotation.y = 0.0f; + model.bindPose[i].rotation.z = 0.0f; + model.bindPose[i].rotation.w = 1.0f; + model.bindPose[i].scale.x = model.bindPose[i].scale.y = model.bindPose[i].scale.z = 1.0f; } // Load bone-pose default mesh into animation vertices. These will be updated when UpdateModelAnimation gets @@ -5440,8 +5463,8 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, unsigned int for (unsigned int a = 0; a < m3d->numaction; a++) { animations[a].frameCount = m3d->action[a].durationmsec / M3D_ANIMDELAY; - animations[a].boneCount = m3d->numbone; - animations[a].bones = RL_MALLOC(m3d->numbone*sizeof(BoneInfo)); + animations[a].boneCount = m3d->numbone + 1; + animations[a].bones = RL_MALLOC((m3d->numbone + 1)*sizeof(BoneInfo)); animations[a].framePoses = RL_MALLOC(animations[a].frameCount*sizeof(Transform *)); // strncpy(animations[a].name, m3d->action[a].name, sizeof(animations[a].name)); TRACELOG(LOG_INFO, "MODEL: [%s] animation #%i: %i msec, %i frames", fileName, a, m3d->action[a].durationmsec, animations[a].frameCount); @@ -5452,11 +5475,15 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, unsigned int strncpy(animations[a].bones[i].name, m3d->bone[i].name, sizeof(animations[a].bones[i].name)); } + // A special, never transformed "no bone" bone, used for boneless vertices + animations[a].bones[i].parent = -1; + strcpy(animations[a].bones[i].name, "NO BONE"); + // M3D stores frames at arbitrary intervals with sparse skeletons. We need full skeletons at // regular intervals, so let the M3D SDK do the heavy lifting and calculate interpolated bones for (i = 0; i < animations[a].frameCount; i++) { - animations[a].framePoses[i] = RL_MALLOC(m3d->numbone*sizeof(Transform)); + animations[a].framePoses[i] = RL_MALLOC((m3d->numbone + 1)*sizeof(Transform)); m3db_t *pose = m3d_pose(m3d, a, i * M3D_ANIMDELAY); if (pose != NULL) @@ -5473,7 +5500,7 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, unsigned int animations[a].framePoses[i][j].rotation = QuaternionNormalize(animations[a].framePoses[i][j].rotation); animations[a].framePoses[i][j].scale.x = animations[a].framePoses[i][j].scale.y = animations[a].framePoses[i][j].scale.z = 1.0f; - // Child bones are stored in parent bone relative space, convert that into model space + // Child bones are stored in parent bone relative space, convert that into model space if (animations[a].bones[j].parent >= 0) { animations[a].framePoses[i][j].rotation = QuaternionMultiply(animations[a].framePoses[i][animations[a].bones[j].parent].rotation, animations[a].framePoses[i][j].rotation); @@ -5482,6 +5509,16 @@ static ModelAnimation *LoadModelAnimationsM3D(const char *fileName, unsigned int animations[a].framePoses[i][j].scale = Vector3Multiply(animations[a].framePoses[i][j].scale, animations[a].framePoses[i][animations[a].bones[j].parent].scale); } } + + // Default transform for the "no bone" bone + animations[a].framePoses[i][j].translation.x = 0.0f; + animations[a].framePoses[i][j].translation.y = 0.0f; + animations[a].framePoses[i][j].translation.z = 0.0f; + animations[a].framePoses[i][j].rotation.x = 0.0f; + animations[a].framePoses[i][j].rotation.y = 0.0f; + animations[a].framePoses[i][j].rotation.z = 0.0f; + animations[a].framePoses[i][j].rotation.w = 1.0f; + animations[a].framePoses[i][j].scale.x = animations[a].framePoses[i][j].scale.y = animations[a].framePoses[i][j].scale.z = 1.0f; RL_FREE(pose); } }