Brad Bishop | 1932369 | 2019-04-05 15:28:33 -0400 | [diff] [blame^] | 1 | From 2391bba64116135369147e930fb14b5824a9cef0 Mon Sep 17 00:00:00 2001 |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 2 | From: Tomeu Vizoso <tomeu.vizoso@collabora.com> |
| 3 | Date: Tue, 1 Oct 2013 13:19:20 +0200 |
| 4 | Subject: [PATCH 03/18] wayland: Add Wayland example |
| 5 | |
| 6 | --- |
| 7 | .../linux/apps/hello_pi/CMakeLists.txt | 1 + |
| 8 | .../hello_pi/hello_wayland/CMakeLists.txt | 8 + |
| 9 | .../hello_pi/hello_wayland/Djenne_128_128.raw | 3 + |
| 10 | .../apps/hello_pi/hello_wayland/Makefile | 5 + |
| 11 | .../hello_wayland/cube_texture_and_coords.h | 100 +++ |
| 12 | .../apps/hello_pi/hello_wayland/triangle.c | 666 ++++++++++++++++++ |
| 13 | .../linux/apps/hello_pi/rebuild.sh | 3 +- |
| 14 | 7 files changed, 785 insertions(+), 1 deletion(-) |
| 15 | create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt |
| 16 | create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw |
| 17 | create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/Makefile |
| 18 | create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h |
| 19 | create mode 100644 host_applications/linux/apps/hello_pi/hello_wayland/triangle.c |
| 20 | |
| 21 | diff --git a/host_applications/linux/apps/hello_pi/CMakeLists.txt b/host_applications/linux/apps/hello_pi/CMakeLists.txt |
| 22 | index f2c6aef..0df78f7 100644 |
| 23 | --- a/host_applications/linux/apps/hello_pi/CMakeLists.txt |
| 24 | +++ b/host_applications/linux/apps/hello_pi/CMakeLists.txt |
| 25 | @@ -21,6 +21,7 @@ add_subdirectory(hello_encode) |
| 26 | add_subdirectory(hello_jpeg) |
| 27 | add_subdirectory(hello_videocube) |
| 28 | add_subdirectory(hello_teapot) |
| 29 | +add_subdirectory(hello_wayland) |
| 30 | |
| 31 | if(BUILD_FONT) |
| 32 | set(VGFONT_SRCS libs/vgfont/font.c libs/vgfont/vgft.c libs/vgfont/graphics.c) |
| 33 | diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt |
| 34 | new file mode 100644 |
| 35 | index 0000000..9a2f75c |
| 36 | --- /dev/null |
| 37 | +++ b/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt |
| 38 | @@ -0,0 +1,8 @@ |
| 39 | +set(EXEC hello_wayland.bin) |
| 40 | +set(SRCS triangle.c) |
| 41 | + |
| 42 | +add_executable(${EXEC} ${SRCS}) |
| 43 | +target_link_libraries(${EXEC} ${HELLO_PI_LIBS} -lwayland-client -lwayland-egl) |
| 44 | + |
| 45 | +install(TARGETS ${EXEC} |
| 46 | + RUNTIME DESTINATION bin) |
| 47 | diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw b/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw |
| 48 | new file mode 100644 |
| 49 | index 0000000..de9173c |
| 50 | --- /dev/null |
| 51 | +++ b/host_applications/linux/apps/hello_pi/hello_wayland/Djenne_128_128.raw |
| 52 | @@ -0,0 +1,3 @@ |
| 53 | +öÖ¿÷×À÷×ÀøØÁúÚÃúÚÃúÚÃúÚÃùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁøÖ¿ù×Àù×ÀúØÁúØÁúØÁúØÁúØÁù×Àù×Àù×Àù×À÷Õ¾øÖ¿ù×Àù×À÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾öÔ½öÔ½÷Õ¾÷Õ¾÷Õ¾÷Õ¾õÓ¼öÔ½öÔ½õÓ¼ôÒ»ôÒ»ôÒ»ôÒ»õкõкõкõкõкõкõкõкôиõѹôиôиòζóÏ·óÏ·õѹñ͵óÏ·óÏ·ñ͵òζñ͵ñ͵ñ͵ñ͵ñ͵ðÌ´ðÌ´ðÌ´ï˳ï˳ï˳î˱î˱î˱î˱î˱î˱î˱íÊ°ïÊ°ïÊ°îɯîɯíÈ®ìÇìÇìÇëƬëƬëƬêÅ«êÅ«êÅ«ëƬëƬèééĪéĪèéèéèéèéç¨ùÙÂúÚÃúÚÃûÛÄüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄûÛÄûÛÄûÛÄûÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁù×Àù×Àù×Àù×ÀúØÁù×Àù×Àù×ÀøÖ¿øÖ¿øÖ¿øÖ¿øÖ¿øÖ¿øÖ¿÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾øÓ½øÓ½øÓ½øÓ½÷Ò¼÷Ò¼÷Ò¼÷Ò¼öÓº÷Ó»÷Ó»÷Ó»õѹöÒºöÒºöÒºôиõѹõѹôиôиôиôиóÏ·ôиóÏ·óÏ·óÏ·óÏ·òζòζòζñδñδñδñδñδñδðͳðͳòͳñ̲ñ̲ñ̲ð˱ïÊ°ïÊ°ïÊ°îɯîɯîɯíÈ®îɯíÈ®íÈ®ìÇìÇíÈ®íÈ®ìÇëƬëƬêÅ«êÅ«ûÛÄûÛÄûÛÄûÛÄüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃûÙÂúØÁûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁúØÁúØÁù×Àù×ÀøÖ¿øÖ¿øÖ¿øÖ¿øÖ¿ù×ÀøÖ¿÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾øÓ½øÓ½øÓ½øÓ½÷Ò¼÷Ò¼÷Ò¼÷Ò¼öÓº÷Ó»÷Ó»öÒºöÒºöÒºöÒºöÒºõѹõѹõѹõѹõѹõѹôиôиôиôиôиóÏ·óÏ·óÏ·òζòζñδñδñδñδñδñδðͳðͳòͳñ̲ñ̲ñ̲ð˱ð˱ïÊ°ïÊ°ïÊ°îɯîɯîɯïÊ°îɯíÈ®ìÇìÇìÇìÇëƬìÇëƬëƬëƬüÜÅüÜÅüÜÅüÜÅýÝÆýÝÆýÝÆýÝÆüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄüÚÃýÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃüÚÃûÙÂûÙÂûÙÂûÙÂûÙÂûÙÂûÙÂûÙÂúØÁúØÁúØÁúØÁúØÁúØÁù×Àù×Àù×Àù×Àù×Àù×ÀøÖ¿ù×ÀøÖ¿÷Õ¾÷Õ¾÷Õ¾÷Õ¾÷Õ¾øÓ½øÓ½øÓ½øÓ½÷Ò¼÷Ò¼÷Ò¼÷Ò¼öÓº÷Ó»÷Ó»öÒº÷Ó»÷Ó»öÒºöÒºõѹôиõѹöÒºõѹõѹôиôиõѹôиôиôиóÏ·óÏ·óÏ·òζòϵòϵòϵòϵñδñδðͳðͳòͳñ̲ñ̲ñ̲ð˱ð˱ð˱ïÊ°ïÊ°ïÊ°îɯîɯîɯîɯîɯîɯíÈ®îɯîɯíÈ®ìÇìÇëƬëƬûÜÅüÝÆýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÛÄûÛÄûÛÄûÛÄüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄúÚÃûÛÄûÛÄûÛÄýÛÃýÛÃýÛÃýÛÃüÚÂüÚÂüÚÂüÚÂüÚÃüÚÃüÚÃüÚÃûÙÂûÙÂûÙÂûÙÂúØÀúØÀúØÀù׿÷Õ½úØÀúØÀù׿øÖ¿øÖ¿øÖ¿÷Õ¾÷Õ¾ù×Àù×ÀöÔ¾øÔ¼øÔ¼ùÕ½úÖ¾õѹøÔ¼ùÕ½ùÕ½÷Ó»÷Ó»÷Ó»÷Ó»öÒºöÒºöÒºöÒºõѹõѹõѹõѹõѹõѹõѹõѹõѹõѹõѹõѹôиôиóÏ·óÏ·óжòϵòϵòϵñδñδðͳðͳñ̲ñ̲ñ̲ñ̲ñ̲ñ̲ð˱ð˱ð˱ð˱ð˱ïÊ°ïÊ°îɯîɯîɯïÊ°îɯîɯîɯìÇìÇìÇëƬûÜÅüÝÆýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄüÜÅûÛÄýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÄýÛÄýÛÄýÛÄüÚÃüÚÃüÚÃüÚÃüÚÂüÚÂüÚÂûÙÁúØÀúØÀúØÀù׿ù×Àù×Àù×ÀøÖ¿ù×Àù×Àù×À÷Õ¿úÖ¾úÖ¾û׿û׿øÔ¼ùÕ½ùÕ½øÔ¼ùÕ½ùÕ½ùÕ½ùÕ½øÔ¼øÔ¼øÔ¼øÔ¼÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»õѹõѹõѹõѹõѹôиôиôиóжóжóжòϵóжóжòϵòϵóδóδóδóδòͳñ̲ñ̲ñ̲ñ̲ñ̲ð˱ð˱ð˱ïÊ°ïÊ°ïÊ°ïÊ°ïÊ°îɯîɯîɯîɯîɯíÈ®üÝÆýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅýÝÆýÝÆýÝÆýÝÆûÛÄüÜÅüÜÅüÜÅþÜÄþÜÄþÜÄþÜÄýÛÃýÛÃýÛÃýÛÃýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄýÛÄüÚÂüÚÂüÚÂûÙÁüÚÂûÙÁûÙÁúØÀûÙÂûÙÂúØÁúØÁúØÁúØÁù×Àù×Àû׿û׿û׿û׿û׿úÖ¾ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»÷Ó»öÒºöÒºõѹõѹõÒ¸ôÑ·ôÑ·ôÑ·óжóжòϵòϵõжôϵôϵôϵóδóδòͳòͳòͳòͳòͳñ̲ñ̲ñ̲ð˱ð˱ð˱ð˱ð˱ïÊ°ïÊ°ïÊ°îɯíÈ®üÝÆýÞÇþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆýÝÆýÝÆýÝÆýÝÆüÜÅýÝÆýÝÆüÜÅÿÝÅÿÝÅÿÝÅÿÝÅþÜÄþÜÄþÜÄþÜÄþÜÅþÜÅþÜÅþÜÅýÛÄýÛÄýÛÄýÛÄþÜÄýÛÃýÛÃýÛÃüÚÂûÙÁûÙÁýÛÃüÚÃüÚÃüÚÃûÙÂüÚÃûÙÂúØÁûÙÂýÙÀüØÀüØÀû׿üØÀúÖ¾úÖ¾û׿úÖ¾úÖ¾úÖ¾úÖ¾ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½ùÕ½øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼øÔ¼÷Ó»÷Ó»öÒºöÒºöÓ¹õÒ¸õÒ¸õÒ¸ôÑ·ôÑ·ôÑ·óжõжõжôϵóδôϵôϵóδóδóδóδóδòͳòͳòͳòͳñ̲ñ̲ñ̲ñ̲ð˱ð˱ñ̲ð˱ïÊ°ýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆýÞÇýÞÇýÞÇýÞÇüÝÆýÞÇýÞÇýÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆýÝÆýÝÆýÝÆýÝÆüÜÅüÜÅüÜÅüÜÅûÜÂüÝÄüÝÄûÜÃûÜÃûÜÃûÜÃûÜÃýÜÂýÜÂýÜÂýÜÂýÜÂýÜÂýÜÂýÜÂüÚÂüÚÂüÚÂüÚÂüÚÂüÚÂüÚÂüÚÂúÙ¿úÙ¿úÙ¿úÙ¿úÙ¿úÙ¿úÙ¿ùؾúØÁúØÁúØÁúØÁøÖ¿øÖ¿øÖ¿øÖ¿øÖ¾÷Õ½÷Õ½÷Õ½÷Õ½÷Õ½÷Õ½÷Õ½öÔ¼÷Õ½öÔ¼õÓ»õÓ»õÓ»õÓ»ôÒºóѹôÒºóѹòиóѹòиòиòиôиóÏ·óÏ·óÏ·ôиôиôиôиñÏ·ñÏ·ñÏ·ðζðζðζï͵ï͵ðͳðͳðͳï̲ï̲ï̲î˱î˱þßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÝÆýÝÆýÝÆýÝÆüÜÅüÜÅüÜÅüÜÅûÜÃüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄþÝÃþÝÃþÝÃþÝÃýÜÂýÜÂýÜÂýÜÂýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃýÛÃüÛÁüÛÁüÛÁüÛÁýÜÂýÜÂüÛÁüÜÁúØÁúØÁúØÁúØÁúØÁúØÁúØÁúØÁúØÀúØÀù׿ù׿øÖ¾øÖ¾øÖ¾øÖ¾÷Õ½øÖ¾÷Õ½öÔ¼øÖ¾÷Õ½÷Õ½öÔ¼öÔ¼öÔ¼õÓ»ôÒºõÓ»õÓ»ôÒºôÒºöÒºõѹõѹõѹóÏ·óÏ·óÏ·óÏ·ñÏ·ñÏ·ðζðζñÏ·ðζðζðζòϵòϵòϵñδñδñδðͳðͳþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈÿàÉþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆþÞÇþÞÇþÞÇþÞÇýÝÆýÝÆýÝÆýÝÆüÝÄýÞÅýÞÅüÝÄýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄüÝÄüÝÄüÝÄûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃûÜÃúÚÃúÚÃúÚÃúÚÃùÙÂùÙÂùÙÂùÙÂøÚÀøÙÀøÙÀøÙÀ÷Ø¿÷Ø¿÷Ø¿÷Ø¿ù׿ù׿øÖ¾øÖ¾øÖ¾øÖ¾÷Õ½÷Õ½÷Õ½÷Õ½öÔ¼õÓ»õÓ»õÓ»õÓ»õÓ»öÒºöÒºõѹõѹôиôиôиôиòиòиñÏ·ñÏ·òиòиñÏ·ñÏ·òϵòϵòϵñδñδñδðͳðͳüàÈüàÈüàÈüàÈýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈüàÈýáÉýáÉýáÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇÿßÈÿßÈÿßÈÿßÈþÞÇþÞÇþÞÇþÞÇýÞÅýÞÅþßÆýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄûÜÃûÜÃüÝÄüÝÄûÛÄûÛÄûÛÄûÛÄúÚÃúÚÃúÚÃúÚÃúÛÂúÛÂúÛÂùÚÁùÚÁùÚÁùÚÁùÚÁúØÀúØÀúØÀù׿úØÀù׿ù׿ù׿ù׿ù׿øÖ¾÷Õ½÷Õ½÷Õ½öÔ¼öÔ¼öÔ¼õÓ»õÓ»õÓ»ôÒºôÒºôÒºôÒºôÒºôÒºóѹóѹóѹóѹòиòиòÑ·ñжñжñжðϵðϵðϵïδüàÈüàÈýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄüÝÄýÞÅýÞÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅýÜÆùÚÁùÚÁùÚÁùÚÁùÚÁùÚÁùÚÁùÚÁùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂùÙÂ÷Ø¿÷Ø¿÷Ø¿÷Ø¿ö×¾ö×¾ö×¾õÖ½øÖ¾÷Õ½÷Õ½÷Õ½öÔ¼öÔ¼öÔ¼÷Ô¼òÓºòÓºòÓºòÓºòÓºòÓºñÒ¹ñÒ¹òиòиñÏ·ñÏ·ñÏ·ñÏ·ñÏ·ðζüàÈýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇþßÈþßÈýÞÇþßÈþßÈþßÈþßÈÿàÉÿàÉÿàÉÿàÉýÞÇýÞÇýÞÇýÞÇýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅýÞÅüÝÄýÞÅýÞÅýÞÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÝÄüÝÄüÝÄüÝÄûÜÃûÜÃûÜÃûÜÃûÛÄûÛÄûÛÄûÛÄúÚÃúÚÃúÚÃúÚÃùÚÁùÚÁøÙÀøÙÀùÚÁøÙÀøÙÀøÙÀù׿øÖ¾øÖ¾øÖ¾÷Õ½÷Õ½÷Õ½öÔ¼ôÕ¼ôÕ¼ôÕ¼ôÕ¼óÔ»óÔ»óÔ»òÓºôÒºóѹóѹóѹòиòиñÏ·ñÏ·ûáÉûáÉûáÉüâÊûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉýÞÇþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýßÆýßÆýßÆýßÆüÞÅüÞÅüÞÅüÞÅüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄüÜÅüÜÅüÜÅüÜÅûÛÄûÛÄûÛÄûÛÄûÜÃúÛÂúÛÂúÛÂùÚÁùÚÁøÙÀøÙÀúØÀúØÀù׿ù׿ù׿ù׿øÖ¾øÖ¾ö×¾ö×¾ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼õÓ»õÓ»ôÒºôÒºóѹóѹóѹòиûáÉûáÉüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈÿàÉÿàÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýßÆýßÆýßÆýßÆüÞÅüÞÅüÞÅüÞÅüÝÆüÝÆüÝÆüÝÆýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄûÝÄüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅüÜÅûÜÃúÛÂúÛÂúÛÂûÜÃúÛÂúÛÂúÛÂúÛÂùÚÁùÚÁùÚÁøÙÀøÙÀøÙÀ÷Ø¿÷Ø¿÷Ø¿ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼óÔ»óÔ»óÔ»òÓºòÓºòÓºòÓºñÒ¹ùâÈùâÈùáÉùáÉüáÌüáÌüáÍüáÍûáÉûáÉûáÉûáÉüâÊüâÊüâÊüâÊüâÊüâÊüâÊþâÊýáÉýáÉýáÉÿàÉýãÈýâÈýâÈýâÈýâÈýâÈýâÈýâÈÿáÈÿáÈÿáÈÿáÈÿáÈÿáÈÿáÈÿáÈþáÀúàÆøÞÊþÞÇÿãÄÿâÃûÝÃöÚÆúÞÅÿãÈúÝÂ÷äÊùÝÎÿÛÎÿÞÈñåÃÿÞÉÿßÈÿßÈÿßÈþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇþÞÇýÝÆýÝÆýÝÆýÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÅøÙÂ÷ØÁ÷ØÁ÷ØÁ÷Ø¿÷Ø¿÷Ø¿ö×¾õÖ½ö×¾õÖ½ôÕ¼ôÕ¼ôÕ¼ôÕ¼óÔ»óÔ»óÔ»òÓºòÓºùãÊúâÊúâÊúâÌüáÌüáÌüáÍüáÍüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿâÄýâÈûàÌÿàÉÿÞÅÿæÈúÜÃöàÍþéÖÿãÉûÝÁùæÊúßËÿÛÎÿÞÈõäÃÿÞÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄøÙÂøÙÂ÷ØÁ÷ØÁøÙÀøÙÀ÷Ø¿÷Ø¿ö×¾ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼ôÕ¼óÔ»óÔ»óÔ»óÔ»úäËúäËûãÍûãÍûãÍýâÍýâÎýâÎýãËýãËýãËýãËüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþâÃùàÈúßÊþßÈþàÆÿãÇ÷ßÌìÜÑóãÒÿãÏÿáÅøâÈûàÍÿÞÌÿàÉöäÇÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈÿàÉÿàÉÿàÉÿàÉýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃøÙÂøÙÂùÚÁøÙÀøÙÀøÙÀ÷Ø¿ö×¾ö×¾ö×¾ö×¾õÖ½õÖ½õÖ½ôÕ¼ôÕ¼ôÕ¼óÔ»úãÍúãÍúãÍûãÍüäÎüäÎþãÏþãÏûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍýâÍýâÍüáÌþáÌþáÌþáÌþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊýâÇûáÉûàÌÿàÉÿåÉøÝÅúíÞnhcòëÞøÜËÿäÊøàÅúßËÿÞÌÿßËøäÆÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄùÚÃùÚÃùÚÃùÚÁùÚÁùÚÁøÙÀøÙÀö×¾ö×¾÷Ø¿ö×¾ö×¾õÖ½õÖ½õÖ½õÖ½ôÕ¼ôÕ¼úâÎúâÎúâÎúâÎúáÍüãÏüäÎûãÍüäÎüäÎüäÎüäÎûãÍûãÍûãÍûãÍûãÍûãÍûãÍýâÍýâÍýâÍýâÍÿâÍüâÊüâÊüâÊüâÊûáÉüâÊýãËûâÊýáÉýáÉþâÊÿãËþâÊþâÊþâÊþâÊþâÊüáÍüáÌÿãÉýàÄñÝÇÚÖÌ]egòÛÌÿÜÄÿæÊøáÉÿàËÿßËúâÈÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇþßÈþßÈýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃùÚÁùÚÁøÙÀøÙÀøÙÀøÙÀ÷Ø¿÷Ø¿ö×¾ö×¾õÖ½õÖ½ôÕ¼ôÕ¼ôÕ¼ôÕ¼üæÔûåÓüäÐúâÎûãÏüãÏýåÏüäÎüäÎüäÎüäÎüäÎûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍþãÎþãÎýâÍþáÌþáÌþáÌþáÌþáÌþáÌþáÌþáÌûáÌüáÌüáÌÿâÉùàÅôæÓ¬«UdlYheÿìáÿäÐþáÅùäÉþáÍÿàÌþâÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉþâÊþâÊþâÊþâÊýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈüàÈüàÈüàÈûàÈþßÈþßÈþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄúÛÄùÚÃúÛÂúÛÂúÛÂùÚÁøÙÀøÙÀøÙÀøÙÀ÷Ø¿ö×¾ö×¾ö×¾ö×¾õÖ½õÖ½ôÕ¼ùãÑùãÑùãÑûãÏûãÏûãÏûãÍûãÍüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏûãÏûãÏüãÏüãÏüãÏþãÏþãÏþãÏýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÍüáÌüáÌüáÌüáÌüáÌüáÌüáÌüáÌüâÊþãÉÿèÍîâÐ@Vg:PMÿõîÿÞÉÿäÆùåÈüáÍÿáÌÿáÍýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉÿàÉÿàÉÿàÉÿàÉÿàÉþßÈýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄûÜÃûÜÃúÛÂúÛÂùÚÁùÚÁùÚÁøÙÀ÷Ø¿÷Ø¿÷Ø¿ö×¾øÙÀ÷Ø¿ö×¾õÖ½þç×þç×þèÖÿçÖÿçÓýåÑûäÎýåÏüäÐüäÐüäÐüäÐûãÏûãÏûãÏûãÏûãÏûãÏüãÏüãÏüãÏþãÏþãÏþãÏýâÍýâÍýâÍýâÍþãÎýâÍýâÍþãÎüáÌýâÍýâÍýâÍýâÍýâÍýâÍýâÍýâÎýâÎýãËÿäÉøàÆäÚÉlyzB[n>VWIJ¬ÿÞÉÿåÆøäÈùâÊÿßÎÿáÌþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉýáÉþáÉýáÉýáÉýáÉþßÈþßÈþßÈþßÈþßÈþßÈÿàÉÿàÉþßÈþßÈþßÈþßÈýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÂúÛÂúÛÂúÛÂúÛÂúÛÂùÚÁùÚÁøÙÀøÙÀ÷Ø¿÷Ø¿ö×¾ö×¾ö×¾ö×¾úêÒýëÚþëÜùçÖõåÎøçÏûåÓüá×øãÎùäÏùåÐùåÏüäÐüäÐüäÐüäÐüäÎüäÎýåÏýåÏüäÎüäÎüäÎüäÎüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüåÎüäÎüäÎüäÎûãÍûãÍûãÍúãÍÿáÈõâÎöâÍÿåÃÿèÏA;=?LWI]`AU[ôãÛúÝÍÿãÈüãÉûâÉþßÎýãÇýâÈýâÈýâÈýãÈþãÉÿäÊÿäÊþãÉþãÉþãÉþãÉýâÈýâÈýâÈýâÇøßËïæÉÿàÂÿäËÙáÈøãÒÿØÉðèÈýàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇûßÇûßÇûßÇúßÇýÞÇýÞÇýÞÇýÞÇûÜÅüÝÆýÞÇýÞÇüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄùÚÃùÚÃùÚÃùÚÃùÚÃøÙÂùÙÂøØÁøØÁøØÁ÷×À÷×À÷×ÀöÖ¿ùéÙ÷ç×öåØøè×øêÔûêÕýéØýçÛÿñÛÿîÙÿëÖýèÓûãÏûãÏûãÏûãÏüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎýäÐýäÐýäÐýäÐüãÏüãÏüãÏüãÏüäÎüäÎüäÎüäÎûãÍûãÍûãÍûãÍÿäÈ÷ãÏ÷ãÍÿæÆüåÏÉÇÅGV`=QV@TY.23D2+óØÆÿãËüãÉüâÊþßÎÿãËÿãËÿãËÿãËÿãËÿãËþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊþßÈõçËþÛÄüâÑÝç×îÚÏÿßÌõåÄüßÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄùÚÃúÛÄùÚÃùÚÃùÚÃøÙÂøÙÂ÷ØÁ÷ØÁ÷ØÁ÷ØÁö×Àö×Àúîâùîâùíß÷ëÙøêØúêÙùéÚøèÛúåÏùäÏùäÏúåÐüäÐüäÐüäÐüäÐýåÏýåÏüäÎüäÎüäÎüäÎüäÎüäÎüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎÿäÈúâÑúâÎÿäÈ𶸻_pzGV]@T\MRS¡÷ÞËýâÊüäÉüáÍüáÎüâÉüâÊüâÊûâÊýãËýãËüâÊûáÉþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâÊÿáÅùáÈýâÒêÝÙhwvñäàÿÝÌùãÁýáÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇýÞÇýÞÇýÞÇýÞÇýÞÇýÞÇüÝÆüÝÆýÞÇüÝÆüÝÆüÝÆûÜÅûÜÅûÜÅûÜÅûÜÅúÛÄúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃùÚÃùÚÃøÙÂøÙÂøÙÂ÷ØÁ÷ØÁ÷ØÁõíéùðæúòáýñßÿðàþîáûëßùêÚüçÒúåÐùäÏûæÑÿèÔÿèÔÿèÔÿèÔÿçÑÿçÑþæÐýåÏýåÏýåÏýåÏýåÏüãÏüãÏüãÏüãÏýäÐýäÐýäÐýäÐüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎÿåÈùâÑûáÑÿåÉìßÍ\m|M[d:T\LSVÿñëöÝÍüäÊûãËûãÍýâÎýãËýãËýãËýãËüâÊüâÊýãËýãËþâÊþâÊþâÊþâÊþâÊþâÊþâÊþâËÿãÅÿàÊöâÚ¦¯³Viu¯©¯ýÞÐþå¿ýáÊýáÉýáÉýáÉýáÉýáÉýáÉýáÉüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈüàÈúßÇûßÇûßÇûßÇûßÇûßÇúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆùÝÅùÝÅøÜÄøÜÄøÜÄøÜÄøÜÄ÷ÛÃúÛÄùÚÃùÚÃùÚÃøÙÂøÙÂøÙÂ÷ØÁõìïôìåøñÞùîÚøéÙúèÞùêÝøê×þèÓÿëÖÿì×þéÔýäÐýåÑýåÑýåÑûãÐüäÐüäÐüäÐüäÐüäÐüäÐüäÐýäÐýäÐýäÐýäÐüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÏüãÐõâÄûäÓþãÕþáË¢ /5G\nJS_<ZgFOWËÁ½º¤ÿîØûæÌüäÎúâÎýãËýãËýãËýãËýãËýãËýãËýãËüâÊüâÊüâÊüâÊüâÊüâÊüâÊüâËýãÂûÙÅóæâ¥K`tSS_üêàÿåÅúáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉúáÉüâÊûáÉùßÇúàÈúàÈúàÈúàÈûßÇûßÇûßÇûßÇûßÇûßÇûßÇûßÇúÞÆúÞÆúÞÆúÞÆùÝÅùÝÅùÝÅùÝÅùÝÅùÝÅùÝÅùÝÅøÜÄøÜÄøÜÄøÜÄúÛÄúÛÄúÛÄúÛÄùÚÃùÚÃøÙÂøÙÂÑÆÑöìåøí×ùëÔüæ×úãÜ÷äÕõèÐúåÐûæÑûæÑúåÐýåÑýåÑýåÑýåÑüäÐüäÐüäÐüäÐüäÐüäÐüäÐüäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐüãÏüãÏüãÏüãÐùåÇøàÏÿáÕõçÑÓÎÁv1EYPVd;ZiGQYogcÿîáùàÌûåËûäÎüãÏûãÍûãÍûãÍûãÍûãÍûãÍûãÍûãÎýâÍýâÍýâÍýâÍüáÌüáÌüáÌýáÎõãÅÿÚÍßÖÓ|¥?RePUbâáØúàÇûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉûáÉúàÈúàÈúàÈúàÈúàÈüàÈüàÈüàÈüàÈûßÇûßÇûßÇûßÇúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆúÞÆùÝÅùÝÅùÝÅùÝÅøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄ÷ÛÃ÷ÛÃ÷ÛÃöÚÂ|éÝ×óèÌýìÐþãÖýàÚúãÒùéËûæÑûæÑüçÒûæÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑþåÑþåÑþåÑþåÑýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐüãÏüãÏüãÏýãÐøéÇþåÕ÷ÕÉÿíÞÌÍÃ|@ZnKM\=_nJU`C<;ÿÿòùäÎøäÎüäÎüãÏüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎýâÍýâÍýâÍýâÍüáÌüáÌüáÌþáÌéàÊÿßÓ³§9=APbTYf£êÔÃýâÊüâÊüâÊüâÊûáÉûáÉûáÉûáÉüâÊûáÉûáÉûáÉûáÉûáÉûáÉûáÉúàÈúàÈúàÈúàÈùßÇùßÇùßÇùßÇùßÇùßÇùßÇùßÇøÞÆøÞÆøÞÆøÞÆ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅøÜÄøÜÄøÜÄøÜÄøÜÄøÜÄ÷ÛÃ÷ÛÃjWiïàÚøêÍÿîÑÿäÕÿâÜÿæ×üêÊûæÒûæÑûæÑûæÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑþåÑþåÑþåÑþåÑýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐýäÐþäÐ÷êÆþãÕþØÐÿçÕÏÑÆw¡]v`bsChx[irúæÚûåÍúäÎúåÏýäÑüäÎüäÎüäÎüäÎüäÎüäÎüäÎüäÎýâÍýâÍýâÍýâÍýâÍýâÍýâÍÿâÍêèÒ纲¾¹³b;JXZbn°Á»îßÏýâÉüâÊüâÊüâÊüâÊüâÊüâÊüâÊýâÊûáÉûáÉüâÊûáÉûáÉûáÉûáÉúàÈúàÈúàÈúàÈúàÈúàÈúàÈúàÈùßÇùßÇùßÇùßÇøÞÆøÞÆøÞÆøÞÆøÞÆøÞÆøÞÆøÞÆ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅùÝÅùÝÅùÝÅùÝÅùÝÅøÜÄøÜÄøÜÄCHVèÚÔÿæÔ÷ãÓöåÔýçÎýçÍôä×öæÑöæÑöæÑùæÑ÷åÐøæÑûæÑüçÒýåÑýåÑýåÑýåÑýåÑýåÑýåÑýåÑýæÐýæÐýæÐýæÐüåÏýæÐýæÐÿçÑòêÌþêÈûçÎóäÚøáÒÿäÆüàËóèãÐãÚÌßÚ¼ÕÕ®ËÔª¼±Äµ³k
;W^Nir/GQ¤¶»ÒÙÖîíßçßÍùåÊûåÌûåËûäÎûãÏüãÏüãÏüáÓüéÅüåËúæËûãÐùâÎûâÎûãÍþãÊóáÊïçࡹÃjUT_MZ[xôÜÜúãÌúâÌùáÎüáÍüáÍüáÎúâÌúâÍøãÊùãÊúâÊúâÊûáÉûáÉþáÉþáÉùáÌùáËùáËùáÌøàÊøàÊøàÊøàË÷àÆ÷àÆ÷àÆ÷àÆõßÅ÷àÆ÷àÆøáÇößÅößÅößÅößÅößÅößÅößÅößÅ÷ÞÄ÷ÞÄ÷ÞÄ÷ÞÄõÜÂ÷ÞÄöÝÃõÜÂJM[÷éãýåÑ÷ãÒ÷åÔýæÐýçÎõåÕúæÑúæÑùæÑùæÑýçÒüçÒûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÑûæÐûæÐûæÐûæÐüçÑüçÑúæÐûæÐöæÔÿæÍÿåÒöäØúæÕúãÉäÛË¥¦¤±£°¢´}©¥¶y©z©x§\mx<R^8M]K\iJVaV[^onjîéåþèÌúæÍýåÐüåÏüäÐýäÐýäÐýãÓüåÊüäÌûäÎüãÏýäÐýäÑÿåÌÿäÍÿèËüçÞm"?PSXiN^`F]YåÎÌúäÉûãÎþâÍþãÍüáÌüáÌúâÌúâÌùãÊùãÊúâÊúâÊûáÉûáÉûáÉþáÉùáËùáËùáËùáËøàÊøàÊøàÊøàÊøàÈøàÈøàÈøàÈ÷ßÈ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇöÞÆöÞÆöÞÆöÞÆ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÆ÷ÝÅ÷ÝÅNQ_öéãþéÕüè×øæÕþçÑþèÏöæÖúçÒúçÒüçÒüçÒýèÓþæÒþæÒýåÑüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒýèÓüçÒüçÒûæÑöáÝÿäÓÿäÑûäÖôãÒöêÔ´¾´v¥¿·{°{µs¨¡°~¡]R_q>M_BSg=L`KXhFO]OU]»ÁÉþåÌúåÏùåÏüåÏüäÐüäÐýäÐýäÐûäÎûäÎýãÏüãÏþãÏþãÎÿäÌÿåËþéÄઽÃs§KRhL]h#>:ÿôôûçÌûåÌüäËÿãÏüáÌýáÌúâÌùáÎùãÊùãÊúâÊúâÊùâÊüâÊüâÊüâÊùáËùáËùáËùáËùáËùáËùáËùáÌøàÈøàÈøàÈøàÈøàÈøàÈ÷ßÇöÞÆöÞÆöÞÆöÞÆöÞÆ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅ÷ÝÅöÜÄöÜÄ÷ÜÄJM[çÙÓÿñÝøäÓøæÕþçÑþèÏöæÖýæÔýæÔüæÔüæÔþæÔþæÔþæÔÿçÖüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒþèÓôäÝÿæÑÿèÎÿæÒþêÕøêÓ ¨¥v«}µy¯x®|°s¥¡²
£^^gv@Q]>N^<L^<M]TaoMZdþäËúåÐúåÐùåÐüäÐüäÐüäÐüäÐúäÓùäÒüäÒýäÐÿäÐÿäÏÿäÐÿäÍÿóÌýÛ̼Äm¤gn`w.OJðæåôâÌõäÌúãÎýãÊýãÊýâÍûãÍúâÎûãÍûãÍûãÍûãÍúâÌúâÌúâÌúâÌúâÌúâÌúâÌúâÌùáËùáËùáËùáËøàÈøàÈøàÈøàÈ÷ßÇøàÈøàÈùáÉ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇ÷ßÇöÞÆöÞÆöÞÆöÞÆöÞÆôÝÅõÞÆ÷ßÇ,/=ztnZþíÜøæÕþçÑþèÏöæÖöâÐôàÎÿìÚýèÖüæÔþæÔþæÔþæÔüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒüçÒýçÒéåÔÿìÑÿèËÿçÒúãÌþèÒª§¤q¦®§µ^wm^s
CXkCZj|£Obf<MVBV\BU\@TZGXaCW]rÿçÒ÷äÒ÷ãÍýèÓúæÑþåÑýåÑþåÑ÷äÒüæÔþæÔýäÐýâÎùàÌûåÑüèÔÿåÇóßÕm:Zt©Mfs.QRQINÓ̺ßÔÃòãÍ÷àÊþãËþâÍúãÍ÷ãÎûãÍûãÍûãÍûãÍúãÍúãÍùâÌùâÌùâÌùâÌùâÌùâÌøáËøáËøáËøáËøâÉøâÉøâÉøãÉöàÇöàÇöàÇöàÇ÷áÈ÷áÈ÷áÈ÷áÈöàÇöàÇ÷áÈ÷âÈ÷ßÇ÷ßÇöÞÆöÞÆõÝÅõÝÅöÞÆöÞÆ?BPùëåûàÌïÚÉøæÕþçÑþèÏöæÖöåÒÿðÝñÝËþé×úæÔüæÔüæÔüæÔúçÒúçÒúçÒúçÒúçÒúçÒúçÒúçÒúæÕúæÔúæÔúæÔúæÔúæÔúæÔúæÔïéÔúéÍÿëÏøç×ôßÑùéØ
°Yxy%*=Q\-?M<N_yYj{CTfTglATZAT[AT[@RY!59@PUuÿèÓýíÚôßÍýêÙüçÑúæÑýåÑþåÑøåÓûåÓýåÐþåÑüäÏùåÓ÷è×íàÑðéÜ®¦¨ªÈÖPp
£§ÀK`k*PS|}¢¤MJ@ýðáúèÒûãÎûãÊüãÍúâÏûãÍûãÍûãÍúäÍùâÌûãÍøãÍòÞÈùâÌùâÌùâÌùâÌøáËøáËøáËøáËøáËøáËøáËøáË÷àË÷àË÷àË÷àË÷àÊ÷àÊ÷àÊ÷àÊößÊößÊ÷àÊ÷àÊ÷ßÊ÷ßÉ÷ßÉöÞÉöÞÈöÞÈöÞÈöÞÈDGUóåßüãÏþêÙøæÕþçÑþèÏöæÖùë×ôåÒ÷èÕìÛÈ÷æÓ÷çÔúæÔúæÔúçÒúçÒúçÒúçÒúçÒúçÒúçÒúçÒúæÔúæÔúæÔúæÔúæÔúæÔúæÔúæÔûêÔÿéÏôâÓëáàïìëäáÝ u²
¬¦¾Ï²Ä©½Ï¶ÅÙj~JapeoVlxF\cGW`2@J6CK-6A$ìôßÏÿîÝ÷ãÑûåÔûæÑúæÑþåÑùçÑûæÑýæÐýåÑýçÕðàÐòêÞåÝаÅʯ¸È³Çx¬wyRhlCkm¨O\]Z`\ÈĺñâÑüäÎüäÌüäÎûäÎüãÏüãÏüãÏûãÐûâÏûæÒöàÌñÜÇúãÍùâÌùâÌùâÌùâÌùâÌùâÌùâÌøáËøáËøáËøáËøáËøáËøáËøáËøáËøáËøáËøáË÷àÊ÷àÊ÷àÊ÷àÊøàÊ÷ßÉ÷ßÉ÷ßÉ÷ßÉöÞÈöÞÈõÝÇGIWóãÝþåÐÿìÛùçÖÿèÒÿéÐ÷ç×÷é×÷èÕÑ¿ÿóà÷çÖøæÕ÷æÖ÷æÕúçÓûçÑüèÑúçÒúçÓúçÒúçÒúçÒûæÕûæÔûæÔúæÔúæÕúæÔúæÔúæÕÿäÕÿâÒûèãÒÐÙ¥°¡«m¢¼z°º±~¬7R_3T[6]]<RiAYjBTe>N\<GS">BPEJ]ÿÿÿóßÍýéØùåÒüæÔüçÒüçÒüçÒûçÒûæÏýæÐÿèÑôåÑöéÚðëঠ¨¼¤¹y¢ºSu
qm|]pt:dfNU`^mvZcdÅûæÙÉúåÎþåËýäÌúäÎüãÏüãÏüãÏûâÏûçÒñÜÇüèÒéÕ¿ýäÍûãÍúãÍúãÍùâÌùâÌùâÌùâÌùâÌùâÌùâÌúâÌøáËøáËøáËøàËøáËøáËøáËøáËøáËøàÊ÷àÊ÷àÊ÷àÊ÷àÊößÉößÉößÉößÉõÞÈôÝÇ?TXÃÎÍçåÝùë×ÿèÑüèÓõç×ñè×çÞ˽ÇÄZp~XdrîßÞþàÑÿßËÿíÝúë¼êãâäâí÷èÔÿæÇüàÒúäÚýìËîêÍêè×ïêÖÿíÏýçÈùèÓùêÑûéÁûæÉÿéØèçän{¢µ¶¶ªu¡sx¡ne|7N]>R^=Q_8MR@U\@V]@S[9MU/6;MV<NWwØãåïæåûãÙÿæÑÿçÎÿæÒÿã×èäÝôåÖ÷äÖöä×þçÐÿëÊïèÞ{¬
¨Á¬Á®Â]j~CTdYhwSak<NXSkd^fuµº´áåÐÒÎÚåÚÚòçÅÿäÒöãÑöãÒøäÏýäÌþåÉõæÑàÞÚU`kÙÞØäàÏûæÐýäËûáÍ÷áÐ÷âÎ÷åÈõãÌõãÌõãÌõäÌóâËõãÌõãÌöåÎõàÊöáË÷âÌ÷âÌöáËöáËöáËöáË÷àÊ÷àÊ÷àÊ÷àÊößÉøàÊ÷àÊöÞÈBTZJSWöóëôãÓÿçÓÿèÒùèÓöèÖóêÜPdlEU^ïêéÿîÝüéÔöêÓóéƼº¸\\cöìÞýèÎüâÓ÷åØýîÒÚÙÍÛØÖìãÚüãÏþëÕîâÕêâÖüðÞÿòÕíÚÊåãর
¨¹µ©¬w¡k|£f}Thw>U`@Vc:P\AT[@SZ@RZEX`?OYGXaBS\DT^9WRHX[ÿñéýçÑÿèÎùçÒõæ×òæÖûçÑýçÑøæÖùãÍÿéËâàÔ§¸
©½o¢°Åh|DTdfvDU^9ITIa[HQb¢¨£ÚàÑF>HôéèöêÊÿäÔøäÒøäÒ÷åÐüæÍüèËõåÐƼfpz¼À·ïéÛìÚÅþäËûâÎøâÐõãÎøäËöäÍöäÍöäÍöäÍõãÌõãÌõãÌõãÌ÷âÌ÷âÌöáËöáËöáËöáËöáËöáËõàÊõàÊõàÊõàÊõàÊõáËöáËõàÊ9JX<FMuppíßÓýçÕÿèÒþèÒùéÑåãÜpz~>T\@S[åßÒïêÖèæÍæéÔ}U\iòçÑøäÓöåÙíçÓZ]höïñüåÕüæ×îé鲶¹ÓÕÖñäÍöêßÍÎФ«¦¹}¦oux£u| aue|8KV@S_F[bFV_>OXIZcFW`GU^GV_ET]ES\7Y^G[c@FJÿüõõçÕõêÎõèÒïèÖøæÐÿçÌþçÍôäÔöéÖõåÑÐÎǨ¸~´{¸ÉLdt=P]_q|?RY;NWCZYWarÒÝÏ_^lÏËÍõêÐýäÕ÷äÒøäÒ÷åÐüæÌþéÏîáͧ¨¦UblûöêýíØüèÒúáÍöâÐöãÎøäÊöãÎöãÎöãÎöãÎöãÎöãÎõâÍõâÍøãÍ÷âÌ÷áËöáËöáËöáËöáËöáËöáËöáËöáËöáËõàÊôßÉôßÉõàÊ4DTGQ[IHMòçä÷æÙûçÕûèÓúéÒÂÌÎ`ruBZbAT\]adîåÝðâÑöëÔÀÔËdpxKXeZcgöñæùåÓñå×ÑÒÄlzO[k§¥©ùèÙóâѧ¬®XjvAS\ìèÛêãߥ©§µ¯^o
1C!<K[n-=;O`6KZ*<I@T_>SZ1FN-:)5=JW!.;1?LJUaFR^NXd:XbBUaBDMðèæôçÖöëÒöêÑóè×õçÕÿêÍûèÐêæÜëèåÙÚÓÅÎЯƼ̨¹©Lcr9P[OdoI\c<OX.-'2IQ`]²Â¹LReÅÅÊêåËÿâÖûæÏøäÓøåÐúäÏñÞÆéÞ˼½¼QapRYZÞнúäÎùäÎôãÐôãÑöåÍ÷ãÎöãÎ÷ãÎ÷ãÎ÷ãÎöãÎõâÍõâÍõãÌõãÌõãÌöåÍõãÌõãÌõãÌõäÌöáËöáËöáËöáËöáÊôßÉôßÉõàÊ.?%347?æáãèÝÚøìàòè×íäϤSls:RX<LVFFNüìîüãÛÿêÙ°³Tdl>KZCU^çëåöäÒóéÛTjx>R__egÿøæãßÏ~D`lA^eglfäå硯¾ ²¥·kzx¡Tj|y ¦BWfG^i?R]@U\9NV0?L7GS0>J#1=6DP#/%1"-9"6F2<K74?ÿúûøè×öæÎýì×øåÔñåÙûèÐòåÒÜã䣱¾¦²½§~µw °c}H`l?UaAW^BR[>PWDWX;F\)8;¨½·GRgíèÒüäÖùäÏ÷ãÒôäÏøæÏöåÌÿöè©°Ug{T]]ÛÚÔíßËþèÒ÷äÏõäÑõäÑøäÏóãÎôäÏôãÎôãÎóâÍóâÍóâÍóâÍõâÍõâÍõâÍõâÍôáÌõâÍõâÍóàËöáÌöáÌöáÌöáÌõàËõàËõàËõàË,9G!,:7=H #,/.3¹»²ÀÁ¸a|Jbh?UZ>MTEDS¬ ªýæäüáÒjHV^;IU:P`mtsúçÔïâ×rUnt4OYGVXááÕÓØÌgz~>[e9TZ7EIÝäîx8I8I¢}v¡ µz¤czqQit<R]@Va6NU<KW<LX3CO1AM/<H:HT;IU(6B(:G*2A'%0F85áÑ¿ÿóÛúäÏþèØìæÛüèÓòê×¾ËÐu¨
²©¡¼xcyUny=VbCVbG[b?NWDPYHZZEPe@QSPhbP_tZbjóî×üàÔûæÏùæÐöåÑöæÎ÷éÑðèÜ{Uk\hnÛÜ×èßÎôäÌõäÏóäÑòãÒõäÑôãÐõäÑõäÒôãÐôãÐôãÐôãÐôãÑõâÍõâÍõâÍõâÍôáÌõâÍõâÍôáÌôáÌôáÌôáÌôáÌôáÌôáÌôáÌôáÌ?KT.:F0:H1;JCMW?JQ>LPCRP8KY:NR>RR=PW?M\BIVôôöøóèeIRULU_/J]WaeÿîÚìàÓx£I_c@[h8LXqxw¦®®qLdtIZ`2LTHQ`¡²¯ÀNj{.?Pet^|r nx¢o`{8P\=Ua<V`AQ^?P^9JW6GT7GT6FS8HV8HU7LW8DQ;=EéáÞôæÖòåÌýíÚüèÙòæÚÿîÑõèѹÅÊRp/@*<K2@;KWdw&9D9OZ@V]-7%2:AKTL\[CLaGXZF`[FVmIPXÿüáÿäÖûæÐùæÑ÷æÑ÷æÑëÛÇÀ½²¢®³=TlWclvxu»° ðãÌöäÏóãÒóãÒõäÑõäÑõäÑõäÑôãÐôãÐôãÐôãÐôãÐóâÍóâÍóâÍóâÍóâÍóâÍóâÍóãÎôáÌôáÌôáÌôáÌõâÍõâÍõâÍõâÍ@JR?IS/:I%3C(8J&9G-BI7OU;FU@MR;IJ5HO1JZ2L[-CEL`O/TdMRSKPY4OeGRVÿ÷áéÛÐOmgz}:TfCWjPXbl}G[nCQV1N[CPas¢s¡ lz]{t¦n
®oQk|4O]:U`9T`<O\;O\1ER*:G=N[<MZ?O\BQ_5SW-@G9CGáâÛùòßëàÉûîÚøèß÷çÔÿèÅþïеÂÀoz¢wNW\FVd5GQVkuAU`GZa8GP5?G?FQ*75ILeK\^Hc\@PgAIQÿûàþâÔýæÏùåÐ÷æÐùæÏúèÑäÞФE_xWbj¨«ªïæÔôåÍóæÎòäÒóãÒõâÓõäÑöåÒõäÑõäÑõãÐõäÑõãÐõãÑôãÎôãÎôãÎôãÎôãÎòáÌóâÍôãÎõâÍõâÍõâÍõâÍôáÌôáÌôáÌôáÌ9JP4BH1<C/8A-5>'%,;1;J6FN2DN3FR2ES1DP8IS7HR1?L?P];P_5KX@P\>P^J`rq
ftBX`9MW=P]7K[¢²Zr|Kbk4MT7PZ.KV
¡²w¤nkh
fua}B]jXsd{@Tc?P`=P_8CQ*7+<I@Sa8LY2BO(6"+:ALS6=G7:>îçäøîà÷èÐÿëÌêëÙõäÕòäÜ£«©yv¢s¥s¯i}^s
as;N\I[f@QZ;NU6JP;M\@RV>HQ,3@-7@CEJ¶±¬ùéÔÞáÖüêØöß×ÎÑÝ¥ÄÕ¡ÄÏ®½«Í¢´l·¿ÄçâÛòâÔóåÎóåÎñåÎóäÑóäÑóäÑóäÑñâÏñâÏòãÐòãÐñâÐñâÐñâÐñâÐðâÏñâÏñâÏïáÎóâÍóâÍóâÍóâÍòáÌòáÌòáÌòáÌ4DK)9BEOY2;D4=G"0)2?1=I6EN:IQ5EQ7GT8IV9IU5CL(.?L5ER6GT<MZ7GT3CP@P];KX4JQ3GS=P]>Qa:M\H[h6JU6KR2IQ2JV`wd}d|z§a|qh<SbAYh;O^AVe/DS=P_=P`<IU5EQ2DO9NY8JU-<I+9EEP\:KW)8D(2y}¸»ÀÛÙÕåäÚëèÙÍÑÅøìâüòꢰ¯t¦®mk§h{BUbEWbCT]BT[<NUI]dK\cLY^9DLLU_/38ëåÜúêÖïæÕúæÎÿòæw£©g~u¨a}Seo]bd¾¸²ñäÔôåÓôæÐóæÐóäÑóäÑóäÑóäÑôåÒóäÑóäÑóäÑòãÐòãÐòãÐòãÐòãÐñâÏñâÏñâÏóâÍóâÍóâÍóâÍòáÌòáÌòáÌòáÌ-=J+9E#/)2?-6@2=F0:D2=G3?I<GT6DP/@M5ER1?K9DQ#/9'7E4DQ;KX9IV@L[9FT)+8F4JQ4HS8KX8K[3FU8KX1EP8MU<QY6IU!4A)<K^rgz{ v9IUK\iAQ^FZf?R_?Q^;N[<S_BS[5FO:MU;NU9MT:KT7FO=HQ4IW8IV1CQ©et^luëøÿ ¬²N^[ÈÄÄõö󤦯¿n~|xh|s_rDWdEWbK\eM_fGY`HYc@NTfqt^gn=GQEKOøôìøéØúëÏýæÎóæÛ£t¬~©~h|Wn~HZdfoputkðèÚôæÔõåÓôçÐòäÓòäÓòäÓòäÓòäÒñäÒñãÑðâÐñãÐñãÐñãÐñãÐñãÐñãÐðâÏðâÏóâÍóâÍóâÍóâÍòáÌòáÌòáÌòáÌ)9F)72=K*3@%/9=GQ0>E6CK8BL6BN4AP5AO5BP:GUDP\8BK1BO5ER8ES8ES2?M8BP)7.8F0EP6HR;KYCS`%6C$5B2BM5EQ7JR=MV&6C+;F/<]lyM^k9IV-8C<GS@NZ(3EP8LW8LW<S^CS\:KT?OY@QZFXaFU^?NW<GQ;LX8HU7IVN_lSgw?Sc¦¼Ìe{F_d\dlñõúVns$2-?P3>MnThy0?9LYEWb$4=)0&8?*9B2=C*.sJW^CKPòñéõçÙþëÎúæÌçàÙ|¦Khj\mw`t[n{@R\OY^_^[îèÞïæÔóåÑôåÒóåÓóåÓóåÓóåÓòäÒóåÓóåÓóåÓñãÐñãÐñãÐòäÐñãÐñãÐñãÐðâÏñâÏñâÏñâÏñâÏñâÏñâÏñâÏñâÏ3BS3@P5?M.7D/8F7AJ6BL(9?-6D)5A3@N1=N2>O#0>'/7E7HU8HU6BQ7DRAN\5?M9DR>HV.?L2BP3FP:LW0?L)9E-:H/<J5GO8GP".8&0&/,%1,:"+.7AFQ[:IQ5FNAT[?U\6OV&6?(1,>G#$-(1(1-=F9AGO\`?KSAPY7ITBUbXpTk|1N^@MZ²ºÄqgj{7DP\qsK_q,@R`r9LYEWb:KT8JPCV\BP]?JR4?C +.1@G2<?®¯ªÚÑÅüéÒúì×ÒÖÒ«Á¤Æu©|£oWfoLX]DGFÙØÎêáÔóçÕöçÔóåÓóåÓóåÓóåÓñãÑòäÒòäÒòäÒñãÑñãÑñãÑñãÑñãÑñãÑñãÑñãÑðâÏðâÏðâÏðâÏðâÏðâÏðâÏðâÏ3DQ6GS2@N1<J2;H5BN-9E%2+7(63@N/>O7FV)6C0:H?LW;KX:JW3DQ1AN0<J&4&.;I3CT4ER1CNCS\>MU1?L1;I,6H4GS;IU5?H'0:#'3 )3#0<,:&31>J:ERDQ^DS`@R^?S^9MY1DK6GP+9B +5&2<&1;0@H)207=$(.$17'-:MT?R_J_n,L[CS_z~¨g{£¨by|[n§¸M`o7KX?Q\>OX<NU:MS@M\BNYEPSARX:MU:GNàãâóîåëâÙÒÊÀ¸w°©¤|ªO_kSblVcgAHGããÞãÞÔóæÖóãÒóåÓóåÓóåÓóåÓóåÓòäÒñãÑñãÑòãÑòãÑòãÑòãÑòãÑòãÑòãÑòãÒñãÐñãÐñãÐñãÐðâÏðâÏðâÏðâÏ3EP6FS2@L.:F.:H6AO0>L%2@%3?.:I1AQ/?O1AQ/>N0<J8GS7HU5FS5FS4ER2CO,9?P\=MZ5EU0BN4CO3DM%.%108F29J8IZ8HU&.;%*5(.9'1:,4B"/= /:3AM:HT?O[:MX@R]=OZ<Q[6GS0@L9GT%)1>0=I8FS$0&.=.6C;GQ:KQ;MT3FM<MXAS`-IZBM\~§Yzu Xey[r|ThzOcu{DWdI[fEV_ASY@SX;I]?MYBSYDW[=S[<PXª³³íéãÙÙⶼºYlpv§z¢ h¢UbnSclP\cOZZEJFêæÛíãÖõåÓñäÔñäÔñäÔñäÔòåÕñäÔðãÓïâÒðäÒðäÒðäÒðäÒðäÒðäÒðäÒðäÒïäÐïäÐïäÐïäÐîäÏîäÏîäÏîäÏ4HO1BK7FR*7C-8G09K-:J-8K.=H+<I/?O';J*>M.>N,<I4BN5IV3FS4HU4ER/@M(9F)9E5FR.>O2DP3CO2@H)4=8DO5=K4;M(<M)7H -',6-0:).9/8F1>O&7C->K8HU8IV>O\GWe;LY6FT3CQ8HU+4C#18@O?FUCQ_%3'0G6DX6GS1AN<PW;MX7KX>Qa3P^@JUEKX6Qb'J_¼dt &2Pcu/A1@AUbEWb>OX'9@L^c?NdGXf@PWDX^8P]H]fS\`ÕÔÎ^fm
]{fw}ªe©U^jNYdAPVWehU]XöõìîäÖúéØñãÕñäÓòåÓóäÓòãÓòäÓñäÔñäÕðäÒðäÒðäÒðäÒðäÒðäÒðäÒñäÒðãÒðãÒðãÒðãÒïãÑïãÑïãÑïãÑ0=I0>J(13<F.8A2>J0=K1>M*8D,=I'8E+>M.BN2DN3EM3CI1@M/?K1AN4DQ6EV,;K+9L/<O/@J0AO,@P0CU+>P/?Q)9I*7E-<M);G!3@#1?#.="2>*8D+<G*;H-?L2CP5IV2ER9Q\:Q]8Q],CM 7B"7B:MX9JV6GS&2,8.EN5HR=MY>KW4?K4?KCP\<IU;JW8ETAMY:CO2<IDTbudy9IT0AM1CM2DOCVa*;D<LV$.")'4<E*4<DPWKW_YfoGY`¥@UewPaoQbrtK^o<K\LdiEX_HX^@EK=<>ìä×íæ×ïëÆòèÝìçìÝãÛàçØæäÚîä×öæÍìåÔíåÔíåÔíåÔëãÒëãÒëãÒëãÒìãÒìãÒìãÒíãÒìâÑìâÑìâÑìâÑ,<I+7-9E-9C*6.9G*7G-;M3AM0=K-=J.>N0AN5EQ3BK1BH3CP4DP->I7GT6FS2AR1@P0@P0@L0@L1BO7FW6EV+:K+8F*6B,>K/?L'4B#.<)1>#/;'3?)7C/;J0@M1AN4ER6JW;N[.EQ/EQ/EP-@K+@K8JU<LX5EQ1?K9GS8NY2EO%1)58DP3?K/=I-:F,<I5APBNZ'4=)5 #%5F(9M0@L5ER3BO:JVFVc!2;6GP=OX"*3DLU9EL>HP)15BJ,4<MRjzDXeatzViwCUfi{xH[bNahFU[V_cLQRØ×ÓæáØêâÖæéÐÏÌÈäæÝææÓêä×ìä×òæÒíåÔíåÔíåÔíåÔìäÓìäÓìäÓìäÓîäÓîäÓîäÓîäÓîãÒîãÒîãÒîãÒ2BR3CP1=L)7C-;I-:J-;N/>Q4@K7BP0<M-<L3BS7DR9EN8CN8GP1@I2@L9GS1?K1?J.;I,9G5DL/>G->J3CP:JW2?K-8B09C0AN2>L)4B(0?)1>%-;)1?*6B/9H0=K2?M3CP:JW=N[8HV7JX7KV5JU7HS7IT:JV1AM6DP;IU5GR4DQ3AM=IU8DP.:FFT`6GR3BS3@N@LX"+5.8B'09*6B0;F2?M0=L2AL8EQES`7FOCR[APY<FNFQY<GOGQY&4<:GOGT\EQYWiq6GOI[fSdpzlli}I]aIYa4@EALT>BFçèçÞÜ×âò妪°XW]êéÛêçÒìåÖìãÚìåÖíåÔíåÔíåÔíåÔíåÔíåÔíåÔíåÔìäÓìäÓìäÓìäÓëäÓëäÓëäÓëäÓ5GX-=M9IV)6E*7E*9I)9J(;-"0.;K2?N3@P-:H!.$-7".8%0:$09*6@=IR.9F%1=5AM8EL0<F1?L7DPDR^2=G3=E,6=.;J4?M,5C%-:)/<'0=-6?/9C1:H4?M9DR;HV?KY<LY<MZ7HU;MW9JU5HS<KX8HT3DP9FR:HT3DM1CL9HQ?JT'0/:D2BJ%7?'7H7DR@KW:DM7?H*5;8?F3;@4=L@HV3;H9EQFR^NYcJV`DOZHV]DQYES[AOWCPXFS[IV^@MUDTZBQXEV_br~xtfxH]pIV\R`fLX^JS[U_bowz¥¨¬¤¦[]iÜØÊîéÎîæÔêâÙäãÛìåÖìåÖìåÖìå×ëäÕëäÕëäÕëäÕëãÒëãÒëãÒëãÒëãÒëãÒëãÒëãÒ(:K.>N/?L&3A,9G2BR-=N!3F08F0:K9GV5@S.;J/<J'3?7AJ*6(4%1=*6?-8B+4$.)3%()55DP&2;)0)0"*-$/>7?L)1>',9#)6 &0)2<+3=-6E.7E'2@*4B<IW8HU:JW@P]<LX5EQ9IU9IU9IU7DP6DP@NZ<KS>MV>IT@IS1>H7BL6EN2CL=IX8ES&5@&1>2=D$+2"'4;<(/?$409F7@M?LX7CM&1<&6?1BI8IOMYaGT\VckN[cMZb;IQFQW;JOHU]CS[DR^4DRgx6GYJT\R^dCOU>JPEOWIS[blt<Y_}¡OQ^ÚÚÌïêÐîæÔìãÝæåÜëäÕëäÕëäÕëäÕëäÕëäÕëäÕêäÕëãÒëãÒëãÒêâÑêâÑêâÑêâÑêâÑ.>N;KX<IW+:F1>L7DT+9K)8K,7E.7I/:M0?Q/=P6CS/;F/;G+8F&3A,:F)7C/=I,:F+;C$3< ,6(4@&5A-:F*6$+$$(+8)5A)'5*#"-)3%+9)7"08DR;LY:KX6GT!1=&2/;(4)7C*9E.<H$1>&6>/;E.8B5?I+4>9EO.=F3DM:HT3@N0=L.<H-9C"*4(*/67&-=")8)2?;CPCO[AQY7GO;IR*9@/>E,2/5(5=,9A2?G9FNIS\?JRGRZ;FM0:D7AK%/9\foEPWQ\dGSZ>IMYdh+6:ISZhoyOin
¤\`nÐÒÉçäÎêâÒêãÚçãÙëäÕëäÕëäÕëäÕêãÔêãÔêãÔêãÔêãÒêãÒéâÑéâÑéâÑéâÑéâÑéâÑ"2?!.:'3*6@*6B9DR4AQ-;M.;K2?O1?Q1AR4DU4DS/<J0>J.=N)9I+:J%6B*;H0@L&6C*:G.8G&3A*6D'8E/=I'2=(-"-0&4A+7C/7D(1%.#-".5$.6"-<%0>$2@,8F1BN9JW:KX:KX*7C1>J0=I,9E1?K-;G9JV%6B/:E(2<+5@(2<(1;9EO.@I6HQ5AJ0<H5AP.?L(4C'3=&/9(06,2C)3@)1>4@LAO\AR[<LV;OW1CJ=OV8JQ<KR?PWJW_<IQ'4<6@J09CCLU3:C:@F29@;=EHJR@KUV^hNY\GTU1=?HUVMY\SYbCVSR[hgj{¹½¹áäÐçãÙèßÖîçØëãÖëãÖëãÖëãÖêâÕêâÕêâÕêâÕêãÒéâÑéâÑéâÑéâÑéâÑéâÑéâÑ0<H*7B7BK'1(2.:F4AO1>N,9J)8H*:K*=N-?P2BR,=J0?K-;O+8K(7G)8I5EQ2CP%5A*:F&3A.;K&6F0?O1AN(7?!.6%16+<H-;G0<H )3'1(2&19%3:"/?%2A)5D,<J.?M;LY7KX2ER7CO1>K6DP4BN3AM3@L2BN3CP7BI7@H;EMELU6AH3@G+?E3GM19C1>J5AP,<M(8I%2B(3<,5=,6E.6E,8D/=IANZ>OX7KS<OW=PW@SZ<OVEV\DU\>KS<JRBPW@HW?HRDIU@EN9;D*(/<=@HDF>JTV^h?IM9EGQZY6>APY]KSYR`VJR]EJ[^fdÖÝÍÞÝÔòèàñåÑéãÖéãÖéãÖéãÖçáÔçâÔçâÔçâÔéâÑéâÑéâÑèáÐéâÑéâÑéâÑéâÑ$@Q$<M+?N&7D)6E2>J7?L/;D,=H/@M3CT0=T-<O5DT3>J7AI+:B/=H,8F,9I1>O3?M.<H+:B-:I+<I)8I0AQ,;K.:I*7$-7(9K6FS+9E#.5+2*2%08$0;$4<&5=':B,=E*=H6HS8MW<O\7LV8MX0EP5GR2DO0CN3CO4DP3MT/HP8NV?T\"1: *&0!(2'4)50=I%.7)2<%.8-2>29B'-63;E2>J-;G@P\<LY7EO0AH9@IGNX5@G(2;KV\JT[MT[DHO>IQ>KP>IO:EL3<C5<@:@F=DIAIOMW^NZ`HTXNZ_HTYBOPIPT3GGL\YFPKQUOéçÞäâ×ãäÓâåÕæâ×æâ×æâ×éâ×èâ×ëá×ëá×ìáØëãÏëãÐêãÏêãÑéáÒçâÓæàÓåßÒ+BR*@O4DT)6D+6D.9G+7C,7C5EQ'9E.>O-:Q0?R5DT3AM/<D1AJ3AN5AP.;K6CS4AO0>J-<D/:G(5D(9F/>N3DP(6B(1;!-4*:L.?K'5A!,3)1!,4%08'3=%0;,8B%4=1>K5ER6HS5ES8KX3EP8JU+=H0CM9IU.>J7GS3CO2IP5HP6IQAR\0@H,8B*4>6?I.=I'3?2>J(2<%/9 )"..6>#,!++7C3@L<MYEVb(7@"39(1;",61=G8EM&.#+"(*28ALTCPV?IPDLS5=D>DI.49?BG<DKISZHTZAMQJVZT`dIVXFNRN][HUUNVSab^ïìååãØæå×êêÙàãÖãã×ãã×âã×ãá×ãâ×æâ×æâ×äáÓäáÓááÓâàÕâàÕâàÕâàÕáßÕ0BM1AL7ER)4B.9G-7H(5E.-8-=,<M,;N*9M,;K*6$.'0 ,-%2B5BR)6D!/;.6+3=!.:&5@5BP7EQ+7A$,5'18*;L6FS-;G!,3)1!,4(3;$0:-6@'0: ,9#/+8D7HU1AN9JW2AM(8D/?K(9E1>J>LX1?K@NZ5CL;JS=MUEPZ?KU/;E1:D9BL/>J,7C6BO+5>%/9"+5(-9+2;*1:(1;(4@0>J:JV:KW>MV5EL:FR8DP8FS<KT5DM@LWAMT,4>,8@&07)3:,4;"*2-380386:?DLSHRYAMT6BF.:>+7;5BC=FIANNX``LQQPQMÏÑÇààÖèåÛáßÑÝâÖÝâÖÝâÖÝâÖàâÖàâÖßâÖàâÖÜà×ÞàØßàØßà×ÝßÕÝßÕàßÕáà×5DM6AM=FS,5C/7E-7I/:L"0C&2@,<L*;L*:K+;L3AQ-9/>F(7@-9-9H'3D.;K&2@"/;%.&-!+5&2>3?J ,!+"+$*(9J*;G%1 *2$,'/$0;"'5&/<'3%2A:FT7GT'7C!-%5A#/-9#1=$0*6B!- +5 * *#-+5.:D,9C5AK4CO)5A6BN4=G&0:$-7(.9*1:.4=*3=(4@0>J5EQ@P\@OX=NT:GV@NZ;KW9IU9IV>NWFR\8CM:CL;EL4?F8@G-2:3:?8<A<?D<DKISZMZ`HTXEQUEQU>KMBKN@GJ?DEHMLTXWããÝáÞÖæäÛääØàâÖàâÖàâÖàâÖàâÖßâÖàâÖßâÕÜßÚßàØÞà×ßà×ááÕÞßÓáàÒâáÓ2>H'2>&/<+4B2;I6@Q.<O*:K,:J.;K-;M-=N,<L4DT-=J-:F,=F-=I*;H(7G5DT6FS'7C&8A*5<&/9#/;/;G.:F)3<$-")/&7I*;G!/;&-!)&.(3;,6"*8(1>'0<)3B%3@7DR<LX4CT.>J0@L2?K-;G0?K2>J1=I6BN4@J.:D7BM8DN6BL($.1=G&5A)4@6BN7@J%/9#,6-3>+2;-4=/7A(4@/=I7HT?O\IXaCTZ?KZAR^<KWAT_8GTFU^COZ>HS;CM<GN>EL=FM06><?D7;@CEJ9AHKU\MY_NZ^LX\MY]KWYHQTUZ]PUVKPOOTRÏÓÎàâÜååÜáâØéçÛäâ×ßÜÑãáÖààÔääØááÕÝÜÐàÞÔàÞÒçäÙáàÑàßÑÝÚÊáÞËæäÑ"0< .9.9F*5C!,:+9I/>O.>N3<N1>N.>M-=M+;K2CO+;H.>K4EM.>K3CP,;L2AQ9IV*:F,=F4=G*7C&4@4AO7EQ-8B#+4",3+<M)9F(6B *2!,4)1(3;$0:,4A)1>%0?+8F,8F5FR<K\8HX7GS7GS4DP5FR7EQ6DP7DP<IV8GO:IR9HQ?IT9EO*4",6+4>!-$0+7C"+ *4&0)/:+2;.5>.7@(4@-;G:KWDTa(7@"28)5+77GTEV_+=F+:C:GO)4<'0:)18.6=.4;#*126:,/41389AHCMT:FL0<@-9=.:>3@B*46;>B:?@=ACIRQØßÜØÞÙÛßÙÜßÖæâÚßÜÔàÝÕãàØÖÒÊåæÝÝÞÕãäÛäâÖßÜÑâßÔáÞÓÛÚËææק¥¹¼¬3CS+;K/?O&3A/<J2?M1AL/AL3=O3?Q1@P-=M/@L4ER,=J2BN0AJ-=I1AN*9I4CS:KW.>J->F/:G.;J'8E0?P8IU+9E%.8)1+<M/?L5CO*1 +3)1$/7#/:'3?)4C'4B)5C&7C2BS9IY1ET7IS;MX8JU4FQ8HT8HT6FR>NZ1GN;MU8LS=NX;JS0;F&/9;EN)7D&2>:GS0:C%/(!&2(/8(.71:D/;G*8D>NZBR_?MV<MTBLW;KSAPYGZa8IO5AJ>JP7BH8?H:BI:BI8>E(+326;/271386>EHRYKW]JVZ@LPAMRJVX>HKIKOHLM?IINYW»ÆþÈÂÐ×ÒÕÝÖ×ÛÕâæàÓÚÓÞåÞ×Þ׻¼×ßØÕÝÖÛÜÓßßÙÝßÙÕÙÓäëäÚáܬ¶°2EW4EW8GX&6C)5D.=H0AM,>F37M4=P1@P/AM0AM8IV,=J.=N,>F.>K.>K(7H6FV5FS-=J&8@+8G):G$3D/@Q6EV+8F'4@'2*<M1AN3AN)0'/)1%08'4>#1A$1@$6C'8E):K1AR3GV5GW9NY:OZ6KV:MX5HS5HS1AM:JW5OV3LT4JR7KS;JT1=G%0:4=G6ER*5B6BN2<F)3(2(-9$+4%$-7+7C*8D:JVBR_HV_DT[GS[FRZ?PW@PW>NTBPVKV\?IO;AK;CJ7<C@FM.1:15:58=79>4<CBLSERXHTXHTXFRVJVXFOSNSULSV=GGANLwz
§¡¼À»´¾¹ÇÑÌ¥yoxt
~¯Ä½ÈÉȾÂÀÅÊÉÑÚÚvv
dx|*KS2QY0GR-?J.<H.:F7?L3;H1AI6FN7GT3BS/?Q3BR4@Q1>L-<D/>F4BN)6D0<J;IT1@H,:C4?I/;E+9E4BM8FR2>G+6=&06,9F7DQ:DK$.4#*1%,3*3<)2<06>/8@-7@*6?.<H2BM8IV8LY<JRAOX>LU=GR<GQ@KU@LVCLVEOWDMU:DK:DL2=D.4=04=?>H5BL%2;5AK5?I&/8"+4&-5%,5$-6,5?,4A-9E@MYBR^EV_9MTBRYGW^=MTAQX>NU>OVEV]:LS5?F=GN3<CGLT,3758=26;:=A6;BHOWJUXHTXJVZFTUDPR/=>=@E9@B;CGFQRizwaupn~b{rl^uid}|[rp[ljcqk}}m|cvw^uv«°t¡§w|.JT1JT2FQ/?K1@K4@L -8*"+,9/?L,<L4DT7FV&3C)7.7!09#1=,:9FT4BN'6>-6"-&0%4@5CN'5A)"*!(#4B0>J#,6'0%+$.%.7#,6'2(0:*3&3$2>6FR3DQ)=K,4!* /8$-!,6*5)3'1%/",&0$/+7B%/#03> )&02>H*3>'/$-6%+4&,5"+4(1;*3@/;G3AM@Q]CT]6JQ&6=-4,<CHX_2BI-=D3CJ1BI'1)3:%-419A!&*.3$(-,059?FGOV2;C+7;/;?/;@;GI9FHJPT?DI>IMIVXCQSbwt\sp_tsUthp`|rczucvt[libpn}y
¡«¶¤ªz{n4JV8KX<LY1>L+6D5?M(4C!-<,<D*:F2CP/>N-<M1AQ"3?"/=,4$1'5@$1?1>L,;F(5$3<(3=-;H"0<.?L1>J*5?(/ &&7E-;G%/"+
$(1&0)*4=&.<"-,9E:JV2CP(8F$5==NW$5>3AJ/>G.>G2=G'2<3CL-<E2CL3DM9HP/;E#,6;?J$4A#,/<E(2$.$(1"(1$!*4(1>'3?1?K=MZ8HQ(;B7FM?OVGW^BRYBRY=MT/?F0AH4=F@IR5=D@HO(-5.59,/41498=DFNUFPX?KN>NPAMQBNR<IJBJQ<FM<GM;IOy~|x]tpv^wlUja\nfdvr_jnt`m{sxwfw[j~m}^l.>K.>K5BP/9G/:H0=K.?L(9E.;H1AM3DP,@O+>M7GW/?L+9D1@H)7C+7F"/=1=K7DR2@L-<D,8A+9E"3@2BO9IV1?K(1;(/,=K9FR7CM)1 *$-(1;!,5(1?*2@(5@)8C,=H3CO:KX9JW2EL5EN6GP5FP5CLN\eKZcN]f?PY7JR7IQ7JR7HR0?H&2<5?I4BO"/+7C;GQ!+#.!*3&/#,5'0:*3@&2>2@LAQ^EV_BU\BRY@PW?OVAQX@PWAQXCSZCT[2>EAJS+5>DLS05<+1947<48<1:@@JQEQWESZFVXBRUAMQ<GK?IPAMR1>F>MVvwlr
cvz^qnXkbRdV\naycqxwcp~zv{}fwhwdq(7D*71>K1<J"/=3@N4DQ,=J2BN3BP1@Q+>M(;J7GT8HT)9F.>J-=I.>K&5E4CS7GT3DO,<I0>K/=I(8E4DP8HU8FR(4>(0(:G3DQ7CL&18"+ )1%0:'0>'2@+6D*8F0<J,=J<KY:LW>P[8KS8KS9LT9LT6GP5FO:KT>LU5IQ9LT8NU9NV7KR5FO+53<E5CO!/;+:F8DQ",!+6"+5$-7'08&/9'0=(4@-;G?O[CT]>RYJY`GW^=MTAQX?OVHX_AQXGW^/:BDOW6>H@IR-6<16=/6=45>/6??HQIU[GU[DRXBRTEQU=IM=JP=IN6BJ<KT`p}euN]nQdw:JPWfiVf^M^Q`ndhtsir
Wfobt|Xht\mzOancrJYbJW_-@O1@P5DT-<L.;K1@Q1AR-AP0@M3EQ*=L)<K)<K4GT9KV,=F3CP4DQ4DQ)8H7EV8HT2BO.>J3@L->K$4A-=M<MY7EQ*6@!,3,=N4DQ6DP%/9'.",6)3<*2?)7H+8I,9F->K0@M9IV<NY;MX;QX6LT:MU=OW:NU;LU=NW<MV;MY<MY;OZ<Q\:LW4EQ*6/7E/@M!.:+9E7CO(5",6!,6"+5)2;&/9&/<'3?*8DAQ^BS\-AH$4;(/ 07AQX<LS&6=(8?$5<+4?BLV2;CBLT28B-5<06=4:A39B>GPLV_ESXCTZCQWCQX?JN=JP9EK6CK;FP;IVUfs[kxSbtcv}kz}bnn{
qw_otvarzpbs|ex~lzbrt2IX0ET6IX-<M,;K1AQ3CS+>M.>K8HX2ET+>M)<K2ER9KV+<E3CO6FS6EU)8H3BR8GW3CP2BN6DP1BO)8I2BR6EU6BP-9B"+5/@Q4DQ9GS)2<$.#-7'0>'4?)9I+:J,;K/?K,<I4DQ7JU:LW5JR9NV<QY9OW<NVAT\EX`?RZ;JW9KV9KV;MX9LW8FR!.94<I1BO$5B/<H7EQ(5!+4#-7",6)1:&/8%.;%1<.<HCS_AQZ&9@5EL:JQ?OVBRYEU\<LS@PWCTZ3<FEOY1;EDNW07@18A39?27>1:C=FOHU]BSZFV\CSYESY@LR>GOBKS3?ELW_ERZ>ITM]fZir ¥aqw¥°·xz{~{^mvFVb n~x{DPV0M[0LZ7M]1EU0AQ2BR4DT.AO0?L4CT2ET*>P+AP4HT;OU,=E3CO3CP5CT+:J2AQ:IY2CO/?K8FR3CP(8I1AQ9IY7HT2>J)3/@Q1AN:HT(4>$.%.8(0>(5@(5J+9L-<L0?O6FR9IV5DP;LX5MU9MU:PX:OW@V^AS[AT\?RYBQ^=LY:LX<NY9HU6DQ"*82:G3DQ&7D.:I2AM"/;"+9#-7 *5(19*3<*3A%2>(7C?O\HYb:NUBRYEU\CRY;KRFV]IX_:JQGW^1=H>HR.8CAIS09C.5>04>49@/8A>IQER[FW^DTZBRXDRX?JQ@KN=HK<FM7CI:FLAOVSagVbirK^epyccstp~lhrvyxcn~wzsqgoz~?O\?NZ7FR1?K1>K2AQ/?P.?S/CO.AN3FU.>O*:K5EU9JX0@M2BO4DQ4DQ-=J2BO8IU5ER0@N4BN0@M"2?1AR8HT6DP.:C",6+<I:JV4EM(7@%/%2<'/=.6E*:A+9E,<I/>N.=N:JW8KV9MT7JR;NV<OWCU]>QYBU]<OWAT\=QXBU];NU;NV=QX3BJ(2/8A.<I+9E0<H8DN&0:$/8&/9&.7$0;)2<+5?.8A+4>=LUDU^>RZ>PWDV]CV]@RYEX_FX_ASZEY`9EK<HN2<C?IP.6=6;B06=4:A7;D;BILX^KX^EU[?SVARU6HJ?HS:EN7AIGPTCLOGSTT`dQac7JRJ[bS_e[gjo{~¢£°¼|Xqvtr}lmZovo|/>O8IV<LY0>J8ES4CS/?P.?R3FR2ER6IX0@Q,<M4DT8IV-=J2BO3CP4DQ-=J0@M5ER0@M.>K/=I2BO 0=1AR?O\7DP0<E"+5+<J9IU3EM+:C%/#/9&.<,5C,<D,:F*:G,:K/>N9IU;MX>RY:MU9LT8KS7JR@S[@S[>QYCV^=PX>QY=PX:MU:MU2AJ ,61;D;JV*8D6BN8DN*4>",6%.8&/8%1;)2<+5?,6@7@JAPYGXa-@H7GM2AH+;B1AHCSZ#3:$4;%5<)/4AG09@@KQ08?.7>27>39@9>G:BIIU[ESYCSZCSVBSV9JM<IQ;GM:EI?HL:ED?HKNZ\OZ^5HO8FM[gk_kmZeikv}tx_u{n~¢r}tuct}x':H%5E$1!2=$1,;K1AR0AU1DQ3FS4GV.>O.>O7GW9KW.>K4DQ6FS7GT0@M/?L9IV6FS-=J1?K-=J#3@/?P7GT8FR0;E!+50AN9IU5FO0?H&0!.7&/<,5C+;C,:F):G-;L,;K3CP7IT:MU8KS9LT=PX?RZ9LT=PX@S[CV^AT\?RZ=PX8KS<PX4CL$0:09C4CO-;G/;G:FP,6@!+5%.8$-6%1<)3=*4>,6@3<F>NW>OX!5=)9@%5<-=DAQXAQX4DK>NU?OV9DJBNT2?DBLS29@/8?27>5;B3:D6=DHTZESY@QW@QTCQT6EHETZ<HL6CEAIIbjj^gfV\_NVY?MTT`d\ijJVXFRUix¢i|¥U\i}o~u_o|PZd,?Q*=K5FS,<I-=J.>J3CS3EV3FS6IV3FU.>O,<M5EU9JW.=J1AN4DQ6FS.>K4DQ8HU4DQ/?L2@L3CQ%5B1ARIYf/=I3>H!*42CP6FR0AJ-<E)3#/9&/<.6E'7?*8D*:G0?O2AQ5ER:LW:MT<OW;NV@S[=PX9LT@S[EX`?RZ>QYBU]=PX?RZ:NU4CL&2<1;D4BO/=I2=J7DM/8B$.8)2<$-6*6@+5?-7A-7A5>H<LUCT];OWAQX<LSAQX:JQGW^AQXEU\DT[6DJ<JP2>DBKR+5<19@*3:4:A29B0:AFRX@NTFSZDTVBRT8CGFVXBMR2?A=FEMQRBGG:AD9>CCOSP\^forIUWKV\£§»Ì³Ìá®ÀËy
fm|t|t{lz
\er4K[1FT:NZ.?L.>K3CO1AQ4CU/BO3FS6IX/?P*:K4DT6HT1AN1AN3CP7GT0@M0@M8HU7GT/?L2@L4ER3CP+;L3CP4BN3?I)3=->K<LX7HP,;D ,6+5)2?.6E-=E-:G+<H,;K0?O8HT9KV<OV9LT<OW<OWBU]<OW?RZ;NVBU];NVAT\<OW;NV>QY4CL*6@09C6EQ3BN+7C<HR3=G#-7)1<&/8#/:-7A.8B-7A09D<LTGXaAU]DU[DT[@QX<MSBRYFW^P`gFW^;IO1@F3>DFRX-8?,3:.6=-6<3:C.8?EQV@OU>MSCNRFRV6@E@PSIVX0<>>FECLKGMP',1/7>?JNEQRNWZ?KM>KR\mx]t[t_t@O_LVgwxr¢¨2J]4L\>P`/@M5EQ5ER2BS5EU2ER3FS1DS-=N)9J5EU7IU2AN3CP2BO4DQ.>K3CP9IV7GT.>K=KW.?L"2?3CS1AN1?K3?H,5?,=K9IU6GP-<E'1!-73;I(1?"2:9FS*:G,;K.=M5ER:LW<OV8KS<OW>QY?RZ=PX=PX<OWDW_?RZ>QY:MU?RZ:MU6EN-9C,6?4CO2@L*6B?KU7AK!+5*3=)1:)5@.8B-7A.8B3<F7FOEV_=QYKW_ANV4AI#081>F>KS(0 )&4:0>D7EK:FL/9@&18+3:/7>18A.8?COU>JP>MS@LP>JN4<@AMQIUY1>?:BF<EH>ILhtzx>IPDPTN[\?KM8GJ4GNpnh¦ £´ªº§¶§¹¬0HZ4JZ<Q`2CP4DP4DQ1BO5DU5HU5HU3FU/?P'7H5EU:KX5DQ4DQ3CP6FS/?L4DQ9IV;KX/?L3@L/?MYiv6FV8HT5CN5AJ,6@+<J6FR6GP-<E%1;'4='/=19HP`h(6B0AN1@P.=N6FS=P[<OW8KS:MU<OW=PX8KS=PX>QY>QY:MU<OW=PX>QY>RY6DM0<F09C6DQ5CO)4A<HR8AK!+5&/9&/8(4>-7A,6@-7A/8B4CL;LUBV^$19$19.;C1>F8EM@MU5BJ;HP8IO:HN.<B<HN4AG-7>*5<+3:07@,6=BNT?KQDPVALP:BF5>A;HMGQY1<@=HL;GKCOWGXa2DP9IPCQXIUY=JLFUX;LS|}¥r¦_vhzj^z]{]u\p2M_+FV8M]/AN/AL4DO4ER:JW3ES3FS4GW0?Q*:L8HX:KX3BO/@M2BO7GT.?K0@L6GS;KX-=J8EP9IV¯¾ËDSd7ES6CO5AJ/9B.?M6FR8IR/>G#/8&3<3:GmsSbkAN[*:H0?O-<M3CP:MX5HP>QY9LT>QY?RZ=PX<OW>QY=PXARZ;NV:NU:NV:NU:GP5?J-5?4BO7ER)5B:FO>GQ*4>&/9)1:%1</9C-9B+7@/8B.<E<MV=RZCNX<HQDQYAMU:GN8EM&3<=ISCRX>NU7EK;FL;GM;EL:DK6>D6<F+4<?KQ=IPCPW?KO4>A9?C>GQ?IPHRYMV]KY_<PV@S_(AN4FP<MTHSZS^bFUWBU[OcoPitBcKeTlPjGj~Lp
Li
Tj4EP6EQ4DP/<J/<0AM8KW.DP2JV)?K9LX1BN(9F6GT7JW.AN/;J6CQ4DQ*9J1@P3AS0@Q1AR0CTMbq¨B^g2LU/AL:AO03C.=H9KV7JR0?H)/='-="2C«ÄÕMejH]e/AL.<M1>N7DR>LX?PY9MU>QY?RZ>QY:MU?RZ?RZ>PX3SW>RZBN[BNZ7IWs*AH"1:6BJ;HP.;C7GP5FN2>H1;E.7B$5>,5>43B12A0<H$6A/ALHSa=TT>RW>PWAS\*:C(6<>HMJWT>RW9MR6FL5FL8GM:GL?IP=GN9HK7FI;GK>IM@HLINS:@E=?D4AG?KQANTFPXCMT=GNBIP@FM7BH?JPGV\FTZJV_HX_JZ`P`fN]hO^jM\hO^jM\hL[gM\hN^j*<I 3@%6C.>K.>J3CS6JX=Ra*BNG]i5HU<LY):G6GT5IV.AN0<J4AO2BO+:K0?O1>Q8IZ2AS/CUt¦;V`9R\4EP6BN07F0?K8JV7JR2@I.4B2;IBRc¤´OfkEYaEWb1AN5AO;GV<MY=NW;NV=PX?RZ>QY:MU>QY>QY>PX3SW9NVAMYAP^«TnwEYd!3;5AH;HP4AI7GP7CM4AK8BL8AK-AH1<D58C38B(6B«j~?N\>RW:OSASZ?PY?MW@PV:LOERT@TY<OT9IO9JP<JP=IO>HO=FN<KN8HK:FK:EI9DH9CF39>;@E@LP=IMDOS>IMBMQ>JM<GK7BF:FJ;GKCQWGU\JX^GW\EU\GW^EU^FV_EU^HW`HXaHW`HXaIYb4LX,BN8KZ/?O-=M4DT5GX5IZ~¢Lbn?Q^6GT*;H6GT7JW1DQ1=K4AO1BO-=J,:K4CS/@O/?O*>P§¾Í{¤8S]?U`7IT4?K27G5CO6JQ7JR4BK09F5=KScsqLglH_fCT_+;I1=L8FQ;LU:KT<PW9LT9LT>QY;NV>QY=PX=PX7RX<QY>MZ*:G¨ÁÌlI`j>MZ1?H:IR8GP5@J8DN7CM;GRAIT0FJ:HN>GP<EO
*µÍÜuASeAUY?PXBU[@PZDV]=PU@SVCVX=QVAUZ?OU=KQ>MS@LR=JPBJR=LN8HJ8CG4AD0;>+7:6?B=FJ6<ABGL/9<ENR=HL3=A?KO;FJ>JNAMQGVYFUWIW]JZ`HX^HX^P[cR]eS^fVahU`hWbjYdkYdl:T`5K[4JY1CT5GX<M`8H[;Pa
©H^j>Q^/@M%6D3DQ6IV2ER1=K3@N1AN-=J.>K9IV7GW/?P,AW¦¾Ð¢°Tlx<R\:LW5CO8@M4FN5IP4IR1BK;BO7AO°}¬WpyI_jEYd>MY(8D4CP;LU;LU;NV<OW=PX;NV=PX=PX;NV<OW9U[>PX2AMFXh±ÌÚy¢CXgL[h6JP5FO9HQ;GQ8EO=GO>KS?KT6ML:LNBLTAOWJcn°ÊÚiDWnDU[ASZ?QW>QX@SZ@TY?TY@UZHX^EU[?PUGU[APU@LQ7CI7CI?MS=KQ?NS@KQ:FL.:@8AI#.58<@>BF9>CAJMDOS;GJ@OR@OQFRVEPUJY[JY\HV\BRXIY^Ufl_hq`ir^gp`hqajsbjt`hr^gp0KWKdp1GV-AO1CT0AT1DZGZosRgr7KV6HS+=H1CN5IT/CN.:I5BP4DQ2BO1AO8HU3DQ3DQ1I`³Ç¯Nfq=S^:LW.;H9DP,=F6HQ2IN7HQ?JV,8I¯ÇÖUt
F]hG]hDXc9KW*;C3DM=NW6IQ8KS<OW;NV<OW;NV=PX<OW>QY8QW>PX>N\Ym|¶Ät H_oETdH\g1CO:HQ:EP>IQ>IQ<IR>KQ9PP;MOBMU=NYi°Áq@UnCV]BU]BS\FX^BT[CV]>PWI]cEV]HY`IV^IV^ANVCPXGT]KX`NZcVckUbjTbjWdlCPXLW_S_g\]fX^dPX_XbiS_eP^dP]cL\cQ]aUadTchYgmWejXhoXio\mt_jq`ksbmtcnualtbmt`ks^iqµÁ3GS4ER1AQ4DU7H[3I[|¦¥Lbm>R]<NY4FQ3EP5IT4HS)5C1>L1AN2BO6FR>NZ6HS3EPOh°ÆqNet?S]BT_7GS8FR5HN4KQ2HN4GO7DQO^n«½o¤IaqAXgEXcDW_(9B5EN:MU;NV<OW=PX<OWAT\;NV<OW;NV?RZ7NS<OV>N[¯¯ÀmOgyt_z:NY:JW@KUALT?IR=LQ?OU?SUAQW<LR7JU¥³±ÁeBVn>OY@R^EV_BT\FW]CPY-4IV`=JRCPXERZFS[KX`MZbR_gUbjScjRbiPagT`hUbjZgnZgoWdl\enYaj]enWaiZgoZfnWgnVfm\go\goXemYgn\gq\ks\ks]mubmw`lv]irZeo]isalv]hrVak_qx0?HDR_8IV0@P.BS6L^³ËÝ©Ndo=P[8JU5GR6HS7KV2FQ0<M5BP0AN3CP3CO=LY8KS8KS·Ó좸w BYhK]jI[eCR_.>J:LR2IN.GM5GO)9Feu
¾e]u
D[jGZeGZb/BH:MT6IQ9LT;NV=PX<OW=PX;NV<OW;NV>QY;PX=NZ(;G¾×ç~ ¯m¡Hav¯¾Ñp>T_5ER>GQDMVBNSCQWFV\ARWERZCMW6JU£ÀγÁr¢BWm:MZ?Q\8IRARXHUZXaj |
| 54 | +bepSaiYfnYfn[hpWdlZgo\iq]iqYhrWfoYhq[ktUdm[jsZir[js[jr]ktZjrZirZir[js[js]lu\fo^hr]ir_kw^jv\kv\iwYftWgsQamO_kRbnM]iM]iM]iN^jgsy=IQDOY:HT6FS4IX/HX¡ºÌ
¨BWc6JU8JU:LW7IT6KV4IS0<M8DR0@M7FS8HT(9ANah §t¬WsOhzNdsL`lr £¬¡z{¦ª·Â·ÅÕ¥µk¦[qAXhF\fO`gI[a@RX%7>&;B(9A)<C-@G5HO7JP?QX@RYBRZ<QX1@Ks¸Ç³Æk TlÆÓê®·5NZ<LX@ITAISALR>KR9LM@MVAITHQ^1CO²ÐÝ´Â`}BWj@QaNbmYjsYhm]gmbjr41@gu|gt|cpxanvcpxamvZkqSdkZhpWfn[irZhq]ktXiqWhq[ltZlxYlvaq}`p|^o{ao{_ny^lxem{fm{amxbl{_hv\huZeuR]nL_lL_lL_lL_lJ^kI\iG[hFYgOjp2IN;LU8FR6FS3HW/JZ¬»v>V\8MU3HP7IT4ER1AN1AN18;MX]ozeykj}h~PfsE]iG\gJ[eO_l^n~¬³¤¹ª»¯
¤µ½ÑµÉ®Ã³r¢wOfvI`pG^n{¢©¨¶®º²»¨µª ²®¥µ«¦²¡°¦ÄÒ°Îߺд³Ur¸Óçv¨Gam>LT?HPESXAQWHV[HSY[ggO^cZp{d~¬ËÞ²Çd@Yi7R^FakXkr`pyv,1>kp~3YhpWgo\gr_ls]jqanu_ltbntWkyWkx[o{Xmx[ny^p{]oz\nz[nx^nz`p|aq}dqdqerercrz^nz[jvVgsPcrL`rKcsNfvOeqNepRerWguVfrUeqZgtWfoPjp;PV5HO;KW@P]2ET±ÁºÉYqw:PU6KS4IQ:LW5FSN^kbr~t\nyRdoL`kM`mK^k>T`>T`4LX=S_\lyZkx>Raax³t©¡±¬À¦¹®Á§º
´w¦w§h~\sYq~§«»«¹\t¤¢²¨º°Á½¬½³Â¸Æ¦ÁҴƮ¥¼t«yª§Áצ²<VbCR^ET\K[d>SZFXcQ]jK\aN`jXq¼×ëºÏ¨¼iCZi=Vb9P[Ymt`kuYclX`mt{06Ebs_o|_o{_o{`nz^lxao{_lx[kxUfsTenTenSdmTfoTfoZirZjv]mxYiuScpScpYiuZhxVduTfpXhtUhuSfuSftRgxThyThzRhtPcpPdqSepXhuZjv\ktXgp\v|=T[3EP5DQ8HUL`l®¾pG]b7LT5JR6GS9KV8IV8HU:IY7JT9KV>P[<P[ATb5HU9P[8OZ7M]9OZ¾ÑÞRboBVe9QaRl}²s£y§³¢¶±¤µ¬y¥nnWpt¡y¦®¥¶¤²9JWl¥¶ ³´É®Ä²´ÈµÉ²Ç®Å¦¿§Àsª§À·Ë
¨¶<Vd>MZ\myy¨¤³°Â¸ÅªÅÖ¥ÃÖ°ÐèµÎ°^tDYh=T`9MXWhqbnxCLWHS\DMZ%,;as^o|]n{Zkx_p}YjwQboYjx]jq]jr^ksbowiv~dqybowhu|evjzjzfw`o[m|TixPetPfuOfuQetNbsOctRduPbsM_qOcnPdoUfr_q}XiqRclRakQ`i^wCYd/DN6HR8IV6GTlH^j>QY9LT5IP6IT5FS8IU8HY:JZ7JT;MW8JU9LY6IV7JV7L[7L[4N]:Q`®ÂÒ@S`BUb=Ra7Qasx¦|o
´x§®}ky£d}h[v|«t§¨»«¼DP`AUf°¦º¤»|³·ªÀ¶Ê´ËƤÀ{µz±§¾¤½u£B\l?Q`Pdu°Á±Ã²Ë¬Ç¬¿¾Ö«Ìã¦ÆݸÍt¡]qGVg<P]GYdTcl\iq`ksLU`8DNco|_itdoygr|hs}lteq~huivlu|nx~jt{ku}r}
vr|oyap[jzSbrM`oK_pKbrIbrHaqGbrF_oGaqKcsMasPctTduTdvPbmYkvfz\mvPajL_fIZ`EU\VnzDZf=P]<MZ:LW4FQ>P[9KV7HQ6GP7GS2BN7HU7GW9IX5EU8JT:KX8IV3FS6IV;M]5JY4IX3K]E^n«ºRhs7MY6K[<Sc<Scayx¥{©¯°{ªpf~«a}fjy®t¦µÈmUaq2FXs¢z±¤¼w°µ¡·Ï¤»²Ë »{´y² ¹©Á±Ë|¨AXh:K])=N°Á} ´±Ê®Ë§À¿Ö¦¾v©lUl~M`oK\iCVcDUc?NWeszgrzZem1=Gkx{x~u{xzw~oxt~s~
s}o{
lwit}anz[hsTctN`qM^oI\mI_pI`rGbrF`pD_oIasJ`rOcuQds]m~aq~dt\mvZjtVgqN`gL_fIY`FV]BRX]t@Wf8NY7JW9KV5ER7FO7FO<KS7EQ5FR7GU5EQ,<L2BR5EW5FS5FS3DQ3GS3FV5GV2HV5JY+DX=Ug®¾Pfv@Va6LX:LY7JZ8PcMex®y©z©kq¤oi]yhzªp£©ÈÛ ±O_lAVf3I\^w³µÐ ¹¡¸¯Æ¨Á¡¼w²¸n¥©ÃÜ ·Îk
AVgGVe8K]t¡vªªÂ»yp¡GauB[n>VfCYhBTbFWaBWg>Q^>OXiv~v}$/7S_h
z{v}wxxn}
mziy]lxWgsN`oObpM^oNasJ_rI_qG_pG_sHbuJcwFbvPfxNdwShy[o~`q~euYiu]luK\eJ]dHZaEX_FV\AQWAPWBRXI`pNeu9N^=P]<NY?NW=JR<FN2@M1?K2@L0AN#2B#3C-=N4DU7HU6GT4ER6IX7JY3FU/DU/CT3Kb¸Ì ¯D_l=Ua5LX2ER;LY7N^7M]Ibr{¦w¦nq¥n¤x¡qhf}y©o¶Ò㣲Zr|>T`?QbQ^u«
µ~¶Â£º¡¹}·x³x°}´®Èݦ»c{IXgETd8KZUp~¡¯e}L^tCXjEYl=OaG[h@R]DUa=RZAV]8O`8N[=QY[goxjt|":CMclsgsxis{lwiw`o{[kwZjvUhwQcrQftLcrG^pG_sG`sG^uF`pFaqHauIbvIcvKcyMe|Nf}Xi}[n~aqZkxXhu[luN`gK[bL\cFV]M\dGV\CSYDTZ=PS;NQLctAXh=Ra9KXCT^DQYEQXIRZDO[6CO-:F,9G$+;-<M1@R5ER6FS3DQ2FU4GV1DS1DU*=N.E\²Ë߬Zu<T`FYd9JU@O\0JV;S_=VgB]nw¦s¦p¥u¬y ld~h~«©¹«Ç×UtyLbm@N^NTiz
©Ã§¾¬Á|³¨¾} ·y³ ¶±Æ°Ä~¨Shw@OaBM[?P]*FQ2O]9Qa<K\AP`>M^BM\ANZ<MU?RY=RZ<QW6Ra9R^@RYCRXq{tyqv|gkoVdoTdpTdoK]kM`qJ`rI]sD\qI`oF`oE]nF^rE`tD`y=]tFeDcuHcwJexKg{TlUmUn
Volw]i}_nWguM^hEW^GW]DUWDS[HX_>NTCTYCSYASU;OR@SVfD_h6P\6P\5O[>YgB]kHcqTjtATaq¡o~y¤tr¢¦x¡®¬º£ÅÚ¥ÃÖ©Vm|BXdATa?Rb8KZ>TXBZcF\i?ZjF`tkp¦m£wsjg}µȨ¼¡7MY=P_.BSx£¬Á¤»¤»£Â£½y³{³·±Ç²dFX^>QY@R]=OZ7HU=NZ9IY;K[;J[<MZ9JW:KX=N[<NY;MX<MX4IY3K[5M`/J[Gcx>ZoA]rB^q9Xr>Yt>XqBZsF^tBZqC[qF`sM_tK_tG_rB_tFcwFbzMgSiNkYtLg}^yWqWo~WlxLanHfkQjoEX_IY`IU]GW^ASZBT[=VV?TV>NTDOWEPXDOUCQT>OR_xPiu7Q]4N\5O]:TbE^nOhx¦¤²
©®¥©º®¶Æ§ ®¬¡¯«º ¹É³ÃÁÕ²Å
®Vm|F\gI[h@Rb;N]DXXCV[K^fNaoVi|F`pv¡}¨|§z¥oq¡v¨´Ñæ»Î³ÇXpxC[g@Ud9M^tªÁx®¤»©Ã
¥¼¶{¬dUpF]q?YjBT[BU]>P\:LW;LZ8JV:JZ9IZ4EQ6GT8IV<LZ8JU;MX=OZ:LW;LV<MU9LZ3HWJaqD[nC]mD]qA\qC^sD_tH_uBYpIbuJbuA]pKbzLe}Kf~MlHg~KkVp]t[w`xIcwp¤´jKamNbnG`fI`eFX_GW^CPXAQW@SY=PW=STAUY>NUBMUFPXAMS?NQ=OPlSm{6P^2K[5O^:ScC[mLdul
®v¢°~«~®mq¥l}«{§ ´¥µ¨¹©¹¹Î¶Év¢k
?Sb@Ud@Ud=PbKZ^N]dTemZlvK^kYo{Umyw~«z¦{ª¯¡¿Ó¼Ñ·É¢¶_{
?Ye>Tc.EUw
°µ°`yk;Sf@Wg>Vf0EU<S^5HV<NY;MX<NY=OZ8HV:KX3DQ5FS:KX8IV9JW8IV9KV6HS;LX:LY@KN@NT>NT9KUThwLcuGbuKfzMgzLezHeyEauLh{Kf~Hg}Gf|IfKlNoSuKkPoSp
Okj ¶y¡}£patI]hN_kCV^CT^BQZ@OX?NW?NW>OX:MU9MS@QZ>NV@LVAMW=KQ?MP=OPz£Xq5N^6N`1I[;SeAYmH`tiz®µXsu§gWuqª¡º{³|²r¨}±©¾¨½®Â¥Æڻά½n<RaE[j=Tc@WhL_hSeqXm{`s¦µ «¦¯¦·ª¿«À²Æ°Ì塽ҷʡ±c>Xf5Q^9Rb>Uem?TfBUl:P^>Td?R_BVc9KU>P[5GR:IV<NY7IT4FQ+=H$28IV1BO8IV7IV5FS9JW6HS9KV9KW>QY8LT?MN@OU;MS7JUE^mJg{MjJhPm
PrXzVzTxJoVzl«z¼£Â©Ç±É¯Æ¶Ì°Ä¥¹{¡]qUgyPdsL]jHYf=OZBU`AR[DU^>LV?MVAPY?PZ;KU<MV>MVAQY;IU>IVBNXAOUBSV@RSr_w5M_/GY1I[7OcC[oNfzr«vw«bIe~=\u6Tp=^{Xwcl¥k£}´§¾µ¤¼¿Ö¹Î|¨pC]k;Uc:Sc<Ud>WkE]qC^r¡¹ ¸}® ²¨¶¯±¨½§ÃÛ¨ÄܳȱÄ}®VsB`o<Vf6O_4L\AUg<K\6FX9LV<NY9KV;KW=MY8IQ6GO6HP@P^3CP4DQ(5,89IU7GS4DP6FS9IT8HT9IU8HU:KT;LU:KT7IQ=OW6JT5LZ]x ½{ Â{¢É¨Ê§É}¦Æ~©É{¨Ê¬Ð«Î¸Ü´Ð¶Ô¼×j¢`}h
c~JduRetI\lHYfDTbCT`CUa?RZ>OX>OV>PX4GNASZ7JQ:LSASZ>QXCQY;GQ7FOBQZ@NX@PV?PS=OPªd}>Wg0HZ2J\7OaBZoNfzn¤uªmXs9Ti5Qj$A]"@]">RJh}s¨q©uw®¡»¥¾ÀÖ¨½ ³VpIcs<Vf6O`4Pa9Yo@`wIgm¦r¬ ¹{²x²yª®Â®Ç¶Î©È߰űÄu¦[t@Zj6P`4N^3IX9KZ4DT:IZ9IT;KW:JV8HT7FR7GS7GS7GS5ER5EQp+!1=7GS1AM1@M2BN9IU9IU:JW9JR;LU<MV<LU2IU7NY5KV2IX9Ti½t½rÅt¿y Çz¤Êy§É¯Ò¶Û»Ýºß¨ÀZzTpLdzQiyF[kAWc=TaCTaCT`BT_?Q]?RY<OW>PY>PX:RW5MR5MQ6OS4JO;OT9LR;LR<HMBQT>MT9KS=OV<OTASU>OS|¤kD]m3L\4M]7OaBZlOgyn¢x©s\u
Ict-H\,Gb4S4GX,CS³Ä©½z® ·}´
£¼¾Õ¦» ³c~Jdt;Ue6Sb3O`7Ug@_rIf|Lh¢¼¢»¢ºv«´
¡º¯ÇǼӨ½ª½q£Wn>Vh<Wf2L\2M[6LX8HU8HU7HU7IU:JW9JV4ER5FS6GT6GS7FV8GWJZgRbo1AM:JW=NV3EM;KW9IU;KW6GP=NW;KU8JQ7IP6IQ7KR9LS;NV-BQHdxIeDhDdGkCjBiFoFhHdKa~E`pLdtNetPanJZhHXeDW_BU]?RZ>RY<OW>PX:OW8MU=SY9NTEdcDdc8WV+JI1MM2KK=OP:ILCQMDRP9KL@SV=QV>RV>NT=LO{¢s=We7O_6O_7P`B[kPhzq z¥iXn}=Wd0IZ,G_8T7EO/AN{£¨¸«¾z±¡»
£¼¿×¯Ä§ºu¡[y9Vd7Tc2Pa;V`A[iLeuTm¯£¸z¦u p¥³|°¯È®Å¦»¬¿y¬h|<Qc=Wf4O_0KY1GS9KU<KW<MZ4CT3GV2ET4GW2FU3EW4GY2AR8GX0@M5ER5EQ8HU6GP3DM6ER4CP9HU<MV:JT8IS7JQ6IQ>PP:IK=KHBNO=MR6J[2Kd3Qq8Sx8Vw4Uu2Vo9\uMj[p]l~QhtJ\gQ_kJV_T\fO\cDSZ=OU=PX:MU2IP;QX7NT7MT9MT#5>UuuCgfMqpRrsPmnF[].15>CMXPLYUburF[\DY^ATZ?NUN[bs¤e7Sd0JZ3L\6Pa@YmMh|x¯}¯}ª\w7Wj3Sf.F\'5O;R[7M_r¦¤¾¥¹¢±¢·¦Á¼Ë½~¯k
^y<Wl5Sh3Rg3Wd<^mFbsQj~ku¦|³{¶{®~µ¶¹Ò«Äx®s¦x¬e=Wg<Ue6M]1EV3DV5EV7EZ3HR5JT5JT4GU5FS6GT/@M5FT6GO6GP6GP4EN:IR>MV6EN8GP7KS5HO9LS5IM6JO9JL<MP<JM:KN<MO=MS;LS4CKES_M[gKVd<P]CVcOcnWht_pxUfoYioRbhK]iGYdGYdGYdDWb>P[?Q\9KV4HO-;G7CO4@L2BIAWZ40SyqDyk?uf:oaH|jF{iPpPqNmL
sU{p.A>{ENQ0BA9SO4OKu¦b?Yj1JZ4M];SeB[pKg{}µt£nh4Ue3Sf+CY%3N5LU,BTr¦·¨»¨¸¡¶¨ÃÂѪºq¢hJcw?[o>Yn3Pe5Wf@]nHcwTkd|iu«v¯wªs©¶°É¥¿«Âvªr¦kIcs:Sc5L\8L]1CT6EV5DV3HR3GR3GR2ES2CP0AN2CP4DR3DM4EN8IR9KT>MV;JS:IR:HR6IP6HO9LS9IP<LR=MTAPS@OR:KM;JQ9HN9IP5DM?MYM[gFR`M_lZkyVhsSfpCR_UfnIYcXhqGYdDVa?Q[?Q\>PZ<NY9KV;MX1EL,:F5BN;CQUaj[mqXsq[{tI|oDvj;pcG|oCxiCxjEzlLrc|h
ƾŽƿ½¹°«p¡e>Xi5N^8Qa;SeB[oLeys¨lv£Uq<^m0Qd.DZ 0G/FP2H[¥À ¹¨»}¯|°¡¼§ÈÚÀ{¬r_xD]r:Sh7Sd7Vi@^qGbwOf}Wo
t¦t¨t«yw¤½§À§Áµ©¾wªrRl|:Sc6M]7K\2CT3EV5DV4HR2FQ1FQ4FQ3EP5HS9IU8GT;MT4FM3FM<LS<LS9IP9IP:FN7GN8IO:JQ<IQ;IO>MR>MSCNT;OS;NS7IP9KRL]fJZfO_k`p|]mzTdq[kwUdpOalHYeGZb>RXBS`=N[AR_;LY7HU9JW:KX4FS1AM6EP6>L!+2;EBNRFXWf|xTwJunN|rM}tExnG|rHqKv?pGwCui®¥qÀµuºr¹®Ä»~¯fB\m?Xh7P`?WiHauIbvt¨r¢o[u8Zj5Sf)?V!.EE\f?Ug´Î
£¼£·~ ¯q¥¥À¿Ðª½v§w¡¥·Zq>Wh4M]:UkC^sHcxNh}Xsw©}¯v¨¥º~´§À§À¨Á¥¼³~±rUn~<Vf5N^/FV2EW3EV4GV6IV3FT4FQ5GR6HS3CO2BN:KS;NT;MT=MT<LS=NTANV>KS<IQ:GO>KS>KSANV:GPALT<GO>HP2EK9KR:MSFW`N`hRbnP`lO_kP]kKWfJ[fGWcBT^?S^DYc<Q[<MZ;LY7HU6GT6HU:LY2CP8IW1BM2@L<FP"(1;CJHQV(21&&*CA
)&?]Z`}V~wS~wQ~wU|JDxEvMrº°o¿¶}ÍÄ5zu¤mBZl?XhCYi@VhMeyc|v«s¢~§\v<Zk2Pa&>R$1IAXb8Na£½×§Àt©£²µ«ÆÁÔ¨»}®§¸Wn~L`o<R^=S_8PhBYpIdyPm^zw¨w¨z«yt«¡»¨ÁªÄ¡·³~±v¢\x;Uf6O^1HX3HW4GV2FU6FS6GT6HS6HT5FO5FO3EN4EO;KQAQX:JQ<LSBNV?LT9FN:HP<GO<GOAKS?LT<IP5AI/<D>KR;LUEV_^ow[ltO_kTdpQamO`lKXdIWbBR_@P]?O\>Q^:NZ;N[;KX7GT3DP1AN7GS9IV3CP5FR0=K.:F1;E")35;@JOR"'*"''46-/$"!=:Xurs~rZ:u^¯¤o¸±M~zg
y¨oNfx?VfAXhF\nf~¬t©~«qf=\k/M^(=R!.E1HRAWi©ÂݧÀ}²£³³®ÉÀÓ¥¸À£²^s3FS7IT3FM9RhE^rIdyPmZyk¡{®{¯¡µ¦¾¡º®Ç¥¾©À{¯~±|«f?Yj2K[6M]3HW1FU4GS4ER6GT7IT6FR8IR1DK6FM;KR;KR=MT7HN?LT>KS<IQ=JS@KS?JR9FN9FN<IQ5AKCR[=LTCRZdt]myu
Wfs^nzK[gAP]HXdGWcBQ]JZgAQ^:KX:KW8HX9IY:IY7FV8GW6EU2AQ5DT0?O0@P,7H%.='0;%,8>CEJM&)- #(-/527:48;7>A!!"1-&FAcrss¢u¢^vRiyjpy¦®{¬¡µ¢´x¢:Zi0N_(=R!-C4>1GY¶Ðy±w¬{¬¥º©ÄÁÔ©½«ÉÜnZlyJ\g:KT/AG5K_C[mFavKjSrj¡r©u«vª¢¹¡º²Ë«Ä
¤»¨½ ²w¨l<Xi4N]4M^1GV/EP.EQ9IV7HU<LW8GT5FO>NU9IN=MS<LR<LR9JP@NT=KQ>MS>JP:FL6CL8DM7HO<LSGU_7HQVfr[jwGZdj|CU`PbmDVaAS^GYdAS^7IT7IT9JW4ER6FR6EV9HX8GW5DT7FV3BR8GW5DT5DT2AQ0@P-5F$+:"+5%-+2527:69= #$(-25-25!$) "###$ )>;;<DG"47%9?q ojuwezv |§k|§¨m:Zi6Rc&<N ,C3<EZm¨Ã¬Åw¬¢±«Á·ÒÆٯïÀc{Wiv?PX+=D*9?8M`6P`Nk|Gh{Uuq©y±{´s¦z°¥¾¶Ï¸¦½¦»¡³
£µs¡=Yj1K[8Qa5L[4JU0GS8HU2BO9HU5FO&7A<LSBRX4DJ:IO;KQ=KQ>LR9GM9EJ/;A5AG7EJ=MT?OUAR[WgpZlwM_jXjuQaoM]kJ\gFXcAS^>P[:LW<MX;PZ6JU<P]2CO6EU8GW<GY4?Q5DT3BR6EU4CS2AQ2AQ1@P,=L+0D!'7(2$';EH!$$ #+-(* %&/12!%53,;=..7WLY °lqd}rqu¥w§|«z§gjG^m;P^1CP-@M0HX¥¾Î·È®¦¹À«¿·Ë¼Ï²³sPetAR^:KS:JQ3DR4GVRg|Nfgz®n v§{´µ¬Ã¦ÆÝ°Ç|¯¥ºvªq¥e
>\o=Wf7Q_;Q]6JU7HS1FQ4HT6KS9KS7IP6FM;IO>IO:PR7LM:MU3EM1AN%7@=KU;KQ?QX:LSWip[msQbkRclVgpPajCV^J]e@S[<OV=OZ@R]7IS:KW4DT;K[:JZ7GW5EU9IY8HX3CS4DT2BR1AQ9HX1@P.=M.>N.;K$/='4#,!&!%/45#"#(' .,,&!"+"O93D($gRQqgj~r£j
r¡nw§m~°v¨|«¬i
^xOhx@WgCWfMap¡²µÆ¥¶¯¸Ê²Ç´É½Ð¶É¢µ~«azEZi6FSARZ8GP/BM/CRJ_u\ty¯s§u©w§~·£¹°Ç¦Æݧ¾~²~²r¦¥º{¯:Xk5N^9Tb:O[9MW3GR4FQ7IT9LT9MU6IO9IP<JO;GM9IK<JP1>F:FP1>J@LX?KULWbSfm\nuQcjQcjL]fHYbK\eFW`GZb>QY:MT>P[7IT:LW6GT7HT6FV9IY8HX6FV7GW8HX7GW7GW3CS3CS1AQ3BR/>N,<L3@P,9I$/=%3!*#!"022###
$3';.(60-#'&|´·z²¥¾~´´{°z¯§ºu¦[vrNhy@Xj²Á«¥¸®Á¯Ä©¾³È±È¶Í¸ÎÀ©¼«¼z£6JY9KU4EM5DL6GS,<L8Oa¸µ§¾¡¶¡´{´°Ç¢ÂÙ©ÉàªÁx¬¨½x¬´a:Xk=Wg:Sc;Qa4JU6HV3EP6IP7HQ8GP9HQ:GN;IQ<GO<FM6?H5>G19FAJWZbp\fpfnyNahFX_GY_@QZHYbEV_;LTFUbDW_:MT;MX5GR:LV3CQ3DQ4FR3CT5EU4DT3CS6FV6FV5EU4DT1BR/?O/>N.=M-<L0=M0=M*7H&1?$1%!&)
&((!##% "LFHQMI]]T$) #.'CSL)%°Ì§Ä«Ç¥¿
£¾}µ°É®Ç±Å³ÇÂv§g±År «¾¶Í¾ÕªÁ³É´Ê´Ë¯É¨Â«Â ¿Ô¬¼tVlwVhs7GS<JV2CL5FS3E´Ë¥¿§À§½ª¾¦À¼Ó¦ÆÝÀ×®Å{¯|°w«~±aYw6RcA[k9P_:Q`5KW5HO7HQ8GP7CM@LV:EO:FP:EP2<C:FP6BNlv
¥±À¡WgqJ\cBT[HYb6GP?QY;KW;KW<KX9MT3EP>P[2DO6GT2CP6GT3EQ3CS3CS4DT7GW4DT5EU3CS->N2AQ.=M0?O.=M.;K+8H2?O#1A"0*& &6<=%%%ebdLNLAIB&!)"&¦È±Ñ£Äv¶¤ÁªÅ
£¼{°m¡s§Wss©µÌ¬Â¯Æ¡¸¤¿§Á
©Â¿Ù°Ë»Ö¬Ä¶«Â ¿Ó©¹lOdoDVa;KW8ER7FO/@N*>Qu¤¤¿§À¦½´È¦À»Ò¿Ö¡ÁخťºÂ¥º¥·mRq@[l=Vh9Rb:Qa6M]:MS9JS5DM:FP:DM4@L3AM:JV?U\-AL·Êק´¶ÂmRhsLdkCT]HYb?PY>PX:JW<LX=MY9IU3EP9KV2DN.>L3DQ4ER4ER3CS3CS2BR3CS1AQ4DT6FV4DT/?O1@P2AQ.=M1>N0=M-;K2<M#,>(6"/#-$$)* %!&XWY@ECCJE87.\RKgXRz¢Åj´j°xº ½tl¡t¨{¯f
o¦«Ä¡º¬Æv±y¶£Áa
£§Ä}¼©Æ®ËªÅªÅ°É´É©·[tKak;MX9HT8ES4DJ2BO.CTBZq
¡»«Ã°Ê®Å«Ä¤ÅÛ ÀׯƬīÀt¨n¢|¯v§`~B]n=Wh:Te9Qa1K[4HO6IQ6DM2=J,8D0>JDVa9KX®¹®¹©LguwNfr=Va<W^9IR@QZ7HP?O[7GS8HT8HT3CP3EP1CN5FS1BO.?L3DP3CS1AQ5EU3CS3CS1AQ3CS4DT3CS/?O2AQ1AQ0=M/<L0=M/9J+5F$.@!,:&4$. %!!&'
475GHF>3/ub]B)%b±h³q¹v¸q®v´v¦m¤p§ ¹¥¿«Å}¼~£¿{ ¼¤Å¦Çv¸¨Æ¦Ä}¼°Í¢¿®ÇÂ|§j
E\d@RZ:JW6BS9FL/?L/AS0H^®É¥¾³Ë´Ê®Ç¯Æ£ÃÚ¶ªÁ
¤¹z®s§{«w¨g<Xh=Yj;Uf8Rc2L^7NU4IQ+<D8COAO[;JWx²¾¥¯Rm|lF]mYn}7JW9KV=QX>NX:KT9JS7GS2BN:JU6FS9HV2EO.?L5FS1BO0AM1AQ1AQ1AQ2BR2BR2BR2BR1AQ3CS4DT3CS2AQ0=M0=M/<L0:K1;L)3D(2C#.<)6$."'$), ! !#() |
| 55 | +!" &'%&$$/(%$OD=kºy¡Ä±Ó¤Â§Â®Æ«À¬Ã©Â ¹È°Ê¯Í²Î{¡¿©Ç
¤È{¾r´o´¨Å¨Æg¨|¡½£¾¯ÆªwE\dCV]7FT>K[9FM3CP*<M$<R²Ì¹¯ÆŧÀ¢¸¡¸¬Ã¶{¯|°s§r£mk>Ym=Yj:Te8Rc6Pb1KQ/FO9IR>KX
º}¢^x[vf}Oct:L]BQbAN\;GSDMW;MV5GO1AM5EQ5EQ5ER9IV3BO1BO/@M3DQ/@L3CS/?O0@P2BR0@P0@P2BR3CS0@P1AQ1AQ1AQ,9I0=M1>N'4D+5F1;L'1B'1C"-;!*7$.$*&+/&*+"'((,-".+%-,#"%$#!!,+'/+*=98%-& |
| 56 | \ No newline at end of file |
| 57 | diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/Makefile b/host_applications/linux/apps/hello_pi/hello_wayland/Makefile |
| 58 | new file mode 100644 |
| 59 | index 0000000..c9ddf23 |
| 60 | --- /dev/null |
| 61 | +++ b/host_applications/linux/apps/hello_pi/hello_wayland/Makefile |
| 62 | @@ -0,0 +1,5 @@ |
| 63 | +OBJS=triangle.o |
| 64 | +BIN=hello_wayland.bin |
| 65 | +LDFLAGS+=-lwayland-client -lwayland-egl |
| 66 | + |
| 67 | +include ../Makefile.include |
| 68 | diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h b/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h |
| 69 | new file mode 100644 |
| 70 | index 0000000..663e23b |
| 71 | --- /dev/null |
| 72 | +++ b/host_applications/linux/apps/hello_pi/hello_wayland/cube_texture_and_coords.h |
| 73 | @@ -0,0 +1,100 @@ |
| 74 | +/* |
| 75 | +Copyright (c) 2012, Broadcom Europe Ltd |
| 76 | +All rights reserved. |
| 77 | + |
| 78 | +Redistribution and use in source and binary forms, with or without |
| 79 | +modification, are permitted provided that the following conditions are met: |
| 80 | + * Redistributions of source code must retain the above copyright |
| 81 | + notice, this list of conditions and the following disclaimer. |
| 82 | + * Redistributions in binary form must reproduce the above copyright |
| 83 | + notice, this list of conditions and the following disclaimer in the |
| 84 | + documentation and/or other materials provided with the distribution. |
| 85 | + * Neither the name of the copyright holder nor the |
| 86 | + names of its contributors may be used to endorse or promote products |
| 87 | + derived from this software without specific prior written permission. |
| 88 | + |
| 89 | +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| 90 | +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| 91 | +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 92 | +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY |
| 93 | +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| 94 | +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 95 | +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| 96 | +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 97 | +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| 98 | +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 99 | +*/ |
| 100 | + |
| 101 | +// Spatial coordinates for the cube |
| 102 | + |
| 103 | +static const GLbyte quadx[6*4*3] = { |
| 104 | + /* FRONT */ |
| 105 | + -10, -10, 10, |
| 106 | + 10, -10, 10, |
| 107 | + -10, 10, 10, |
| 108 | + 10, 10, 10, |
| 109 | + |
| 110 | + /* BACK */ |
| 111 | + -10, -10, -10, |
| 112 | + -10, 10, -10, |
| 113 | + 10, -10, -10, |
| 114 | + 10, 10, -10, |
| 115 | + |
| 116 | + /* LEFT */ |
| 117 | + -10, -10, 10, |
| 118 | + -10, 10, 10, |
| 119 | + -10, -10, -10, |
| 120 | + -10, 10, -10, |
| 121 | + |
| 122 | + /* RIGHT */ |
| 123 | + 10, -10, -10, |
| 124 | + 10, 10, -10, |
| 125 | + 10, -10, 10, |
| 126 | + 10, 10, 10, |
| 127 | + |
| 128 | + /* TOP */ |
| 129 | + -10, 10, 10, |
| 130 | + 10, 10, 10, |
| 131 | + -10, 10, -10, |
| 132 | + 10, 10, -10, |
| 133 | + |
| 134 | + /* BOTTOM */ |
| 135 | + -10, -10, 10, |
| 136 | + -10, -10, -10, |
| 137 | + 10, -10, 10, |
| 138 | + 10, -10, -10, |
| 139 | +}; |
| 140 | + |
| 141 | +/** Texture coordinates for the quad. */ |
| 142 | +static const GLfloat texCoords[6 * 4 * 2] = { |
| 143 | + 0.f, 0.f, |
| 144 | + 1.f, 0.f, |
| 145 | + 0.f, 1.f, |
| 146 | + 1.f, 1.f, |
| 147 | + |
| 148 | + 0.f, 0.f, |
| 149 | + 1.f, 0.f, |
| 150 | + 0.f, 1.f, |
| 151 | + 1.f, 1.f, |
| 152 | + |
| 153 | + 0.f, 0.f, |
| 154 | + 1.f, 0.f, |
| 155 | + 0.f, 1.f, |
| 156 | + 1.f, 1.f, |
| 157 | + |
| 158 | + 0.f, 0.f, |
| 159 | + 1.f, 0.f, |
| 160 | + 0.f, 1.f, |
| 161 | + 1.f, 1.f, |
| 162 | + |
| 163 | + 0.f, 0.f, |
| 164 | + 1.f, 0.f, |
| 165 | + 0.f, 1.f, |
| 166 | + 1.f, 1.f, |
| 167 | + |
| 168 | + 0.f, 0.f, |
| 169 | + 1.f, 0.f, |
| 170 | + 0.f, 1.f, |
| 171 | + 1.f, 1.f, |
| 172 | +}; |
| 173 | + |
| 174 | diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c b/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c |
| 175 | new file mode 100644 |
| 176 | index 0000000..1a7bfc4 |
| 177 | --- /dev/null |
| 178 | +++ b/host_applications/linux/apps/hello_pi/hello_wayland/triangle.c |
| 179 | @@ -0,0 +1,666 @@ |
| 180 | +/* |
| 181 | +Copyright (c) 2012, Broadcom Europe Ltd |
| 182 | +All rights reserved. |
| 183 | + |
| 184 | +Redistribution and use in source and binary forms, with or without |
| 185 | +modification, are permitted provided that the following conditions are met: |
| 186 | + * Redistributions of source code must retain the above copyright |
| 187 | + notice, this list of conditions and the following disclaimer. |
| 188 | + * Redistributions in binary form must reproduce the above copyright |
| 189 | + notice, this list of conditions and the following disclaimer in the |
| 190 | + documentation and/or other materials provided with the distribution. |
| 191 | + * Neither the name of the copyright holder nor the |
| 192 | + names of its contributors may be used to endorse or promote products |
| 193 | + derived from this software without specific prior written permission. |
| 194 | + |
| 195 | +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| 196 | +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| 197 | +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 198 | +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY |
| 199 | +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| 200 | +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 201 | +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| 202 | +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 203 | +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| 204 | +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 205 | +*/ |
| 206 | + |
| 207 | +// A rotating cube rendered with OpenGL|ES. Three images used as textures on the cube faces. |
| 208 | + |
| 209 | +#define _GNU_SOURCE |
| 210 | + |
| 211 | +#include <stdio.h> |
| 212 | +#include <stdlib.h> |
| 213 | +#include <string.h> |
| 214 | +#include <math.h> |
| 215 | +#include <assert.h> |
| 216 | +#include <unistd.h> |
| 217 | +#include <sys/socket.h> |
| 218 | +#include <sys/un.h> |
| 219 | + |
| 220 | +#include <wayland-egl.h> |
| 221 | +#include <wayland-client.h> |
| 222 | + |
| 223 | +#include "GLES/gl.h" |
| 224 | +#include "EGL/egl.h" |
| 225 | +#include "EGL/eglext.h" |
| 226 | + |
| 227 | +#include "cube_texture_and_coords.h" |
| 228 | + |
| 229 | +#define PATH "./" |
| 230 | + |
| 231 | +#define IMAGE_SIZE 128 |
| 232 | + |
| 233 | +#ifndef M_PI |
| 234 | + #define M_PI 3.141592654 |
| 235 | +#endif |
| 236 | + |
| 237 | + |
| 238 | +typedef struct |
| 239 | +{ |
| 240 | + uint32_t screen_width; |
| 241 | + uint32_t screen_height; |
| 242 | +// OpenGL|ES objects |
| 243 | + EGLDisplay display; |
| 244 | + EGLSurface surface; |
| 245 | + EGLContext context; |
| 246 | + GLuint tex[6]; |
| 247 | +// model rotation vector and direction |
| 248 | + GLfloat rot_angle_x_inc; |
| 249 | + GLfloat rot_angle_y_inc; |
| 250 | + GLfloat rot_angle_z_inc; |
| 251 | +// current model rotation angles |
| 252 | + GLfloat rot_angle_x; |
| 253 | + GLfloat rot_angle_y; |
| 254 | + GLfloat rot_angle_z; |
| 255 | +// current distance from camera |
| 256 | + GLfloat distance; |
| 257 | + GLfloat distance_inc; |
| 258 | +// pointers to texture buffers |
| 259 | + char *tex_buf1; |
| 260 | + char *tex_buf2; |
| 261 | + char *tex_buf3; |
| 262 | + struct wl_display *wl_display; |
| 263 | + struct wl_registry *wl_registry; |
| 264 | + struct wl_shell *wl_shell; |
| 265 | + struct wl_shell_surface *wl_shell_surface; |
| 266 | + struct wl_compositor *wl_compositor; |
| 267 | + struct wl_surface *wl_surface; |
| 268 | + struct wl_callback *wl_callback; |
| 269 | + struct wl_egl_window *wl_egl_window; |
| 270 | + int needs_update; |
| 271 | + int ellapsed_frames; |
| 272 | + int kill_compositor; |
| 273 | + int single_frame; |
| 274 | + int terminate_abruptly; |
| 275 | +} CUBE_STATE_T; |
| 276 | + |
| 277 | +static void init_ogl(CUBE_STATE_T *state); |
| 278 | +static void init_model_proj(CUBE_STATE_T *state); |
| 279 | +static void reset_model(CUBE_STATE_T *state); |
| 280 | +static GLfloat inc_and_wrap_angle(GLfloat angle, GLfloat angle_inc); |
| 281 | +static GLfloat inc_and_clip_distance(GLfloat distance, GLfloat distance_inc); |
| 282 | +static void redraw_scene(CUBE_STATE_T *state); |
| 283 | +static void update_model(CUBE_STATE_T *state); |
| 284 | +static void init_textures(CUBE_STATE_T *state); |
| 285 | +static void load_tex_images(CUBE_STATE_T *state); |
| 286 | +static void exit_func(CUBE_STATE_T *state); |
| 287 | + |
| 288 | +static void |
| 289 | +registry_handle_global(void *data, struct wl_registry *registry, |
| 290 | + uint32_t name, const char *interface, uint32_t version) |
| 291 | +{ |
| 292 | + CUBE_STATE_T *state = data; |
| 293 | + |
| 294 | + if (strcmp(interface, "wl_compositor") == 0) { |
| 295 | + state->wl_compositor = |
| 296 | + wl_registry_bind(registry, name, |
| 297 | + &wl_compositor_interface, 1); |
| 298 | + } else if (strcmp(interface, "wl_shell") == 0) { |
| 299 | + state->wl_shell = wl_registry_bind(registry, name, |
| 300 | + &wl_shell_interface, 1); |
| 301 | + } |
| 302 | +} |
| 303 | + |
| 304 | +static void |
| 305 | +registry_handle_global_remove(void *data, struct wl_registry *registry, |
| 306 | + uint32_t name) |
| 307 | +{ |
| 308 | +} |
| 309 | + |
| 310 | +static const struct wl_registry_listener registry_listener = { |
| 311 | + registry_handle_global, |
| 312 | + registry_handle_global_remove |
| 313 | +}; |
| 314 | + |
| 315 | +/*********************************************************** |
| 316 | + * Name: init_ogl |
| 317 | + * |
| 318 | + * Arguments: |
| 319 | + * CUBE_STATE_T *state - holds OGLES model info |
| 320 | + * |
| 321 | + * Description: Sets the display, OpenGL|ES context and screen stuff |
| 322 | + * |
| 323 | + * Returns: void |
| 324 | + * |
| 325 | + ***********************************************************/ |
| 326 | +static void init_ogl(CUBE_STATE_T *state) |
| 327 | +{ |
| 328 | + EGLBoolean result; |
| 329 | + EGLint num_config; |
| 330 | + |
| 331 | + static const EGLint attribute_list[] = |
| 332 | + { |
| 333 | + EGL_RED_SIZE, 8, |
| 334 | + EGL_GREEN_SIZE, 8, |
| 335 | + EGL_BLUE_SIZE, 8, |
| 336 | + EGL_ALPHA_SIZE, 8, |
| 337 | + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, |
| 338 | + EGL_NONE |
| 339 | + }; |
| 340 | + |
| 341 | + EGLConfig config; |
| 342 | + |
| 343 | + state->wl_display = wl_display_connect(NULL); |
| 344 | + |
| 345 | + state->wl_registry = wl_display_get_registry(state->wl_display); |
| 346 | + wl_registry_add_listener(state->wl_registry, ®istry_listener, state); |
| 347 | + |
| 348 | + wl_display_dispatch(state->wl_display); |
| 349 | + |
| 350 | + // get an EGL display connection |
| 351 | + state->display = eglGetDisplay(state->wl_display); |
| 352 | + assert(state->display!=EGL_NO_DISPLAY); |
| 353 | + |
| 354 | + // initialize the EGL display connection |
| 355 | + result = eglInitialize(state->display, NULL, NULL); |
| 356 | + assert(EGL_FALSE != result); |
| 357 | + |
| 358 | + // get an appropriate EGL frame buffer configuration |
| 359 | + result = eglChooseConfig(state->display, attribute_list, &config, 1, &num_config); |
| 360 | + assert(EGL_FALSE != result); |
| 361 | + |
| 362 | + // create an EGL rendering context |
| 363 | + state->context = eglCreateContext(state->display, config, EGL_NO_CONTEXT, NULL); |
| 364 | + assert(state->context!=EGL_NO_CONTEXT); |
| 365 | + |
| 366 | + // create an EGL window surface |
| 367 | + state->screen_width = 1024; |
| 368 | + state->screen_height = 860; |
| 369 | + |
| 370 | + state->wl_surface = wl_compositor_create_surface(state->wl_compositor); |
| 371 | + state->wl_shell_surface = wl_shell_get_shell_surface(state->wl_shell, state->wl_surface); |
| 372 | + |
| 373 | + wl_shell_surface_set_toplevel(state->wl_shell_surface); |
| 374 | + wl_shell_surface_set_title(state->wl_shell_surface, "triangle.c"); |
| 375 | + |
| 376 | + state->wl_egl_window = wl_egl_window_create(state->wl_surface, state->screen_width, state->screen_height); |
| 377 | + |
| 378 | + state->surface = eglCreateWindowSurface( state->display, config, state->wl_egl_window, NULL ); |
| 379 | + assert(state->surface != EGL_NO_SURFACE); |
| 380 | + |
| 381 | + // connect the context to the surface |
| 382 | + result = eglMakeCurrent(state->display, state->surface, state->surface, state->context); |
| 383 | + assert(EGL_FALSE != result); |
| 384 | + |
| 385 | + // Set background color and clear buffers |
| 386 | + glClearColor(0.15f, 0.25f, 0.35f, 1.0f); |
| 387 | + |
| 388 | + // Enable back face culling. |
| 389 | + glEnable(GL_CULL_FACE); |
| 390 | + |
| 391 | + glMatrixMode(GL_MODELVIEW); |
| 392 | +} |
| 393 | + |
| 394 | +/*********************************************************** |
| 395 | + * Name: init_model_proj |
| 396 | + * |
| 397 | + * Arguments: |
| 398 | + * CUBE_STATE_T *state - holds OGLES model info |
| 399 | + * |
| 400 | + * Description: Sets the OpenGL|ES model to default values |
| 401 | + * |
| 402 | + * Returns: void |
| 403 | + * |
| 404 | + ***********************************************************/ |
| 405 | +static void init_model_proj(CUBE_STATE_T *state) |
| 406 | +{ |
| 407 | + float nearp = 1.0f; |
| 408 | + float farp = 500.0f; |
| 409 | + float hht; |
| 410 | + float hwd; |
| 411 | + |
| 412 | + glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); |
| 413 | + |
| 414 | + glViewport(0, 0, (GLsizei)state->screen_width, (GLsizei)state->screen_height); |
| 415 | + |
| 416 | + glMatrixMode(GL_PROJECTION); |
| 417 | + glLoadIdentity(); |
| 418 | + |
| 419 | + hht = nearp * (float)tan(45.0 / 2.0 / 180.0 * M_PI); |
| 420 | + hwd = hht * (float)state->screen_width / (float)state->screen_height; |
| 421 | + |
| 422 | + glFrustumf(-hwd, hwd, -hht, hht, nearp, farp); |
| 423 | + |
| 424 | + glEnableClientState( GL_VERTEX_ARRAY ); |
| 425 | + glVertexPointer( 3, GL_BYTE, 0, quadx ); |
| 426 | + |
| 427 | + reset_model(state); |
| 428 | +} |
| 429 | + |
| 430 | +/*********************************************************** |
| 431 | + * Name: reset_model |
| 432 | + * |
| 433 | + * Arguments: |
| 434 | + * CUBE_STATE_T *state - holds OGLES model info |
| 435 | + * |
| 436 | + * Description: Resets the Model projection and rotation direction |
| 437 | + * |
| 438 | + * Returns: void |
| 439 | + * |
| 440 | + ***********************************************************/ |
| 441 | +static void reset_model(CUBE_STATE_T *state) |
| 442 | +{ |
| 443 | + // reset model position |
| 444 | + glMatrixMode(GL_MODELVIEW); |
| 445 | + glLoadIdentity(); |
| 446 | + glTranslatef(0.f, 0.f, -50.f); |
| 447 | + |
| 448 | + // reset model rotation |
| 449 | + state->rot_angle_x = 45.f; state->rot_angle_y = 30.f; state->rot_angle_z = 0.f; |
| 450 | + state->rot_angle_x_inc = 0.5f; state->rot_angle_y_inc = 0.5f; state->rot_angle_z_inc = 0.f; |
| 451 | + state->distance = 40.f; |
| 452 | +} |
| 453 | + |
| 454 | +/*********************************************************** |
| 455 | + * Name: update_model |
| 456 | + * |
| 457 | + * Arguments: |
| 458 | + * CUBE_STATE_T *state - holds OGLES model info |
| 459 | + * |
| 460 | + * Description: Updates model projection to current position/rotation |
| 461 | + * |
| 462 | + * Returns: void |
| 463 | + * |
| 464 | + ***********************************************************/ |
| 465 | +static void update_model(CUBE_STATE_T *state) |
| 466 | +{ |
| 467 | + // update position |
| 468 | + state->rot_angle_x = inc_and_wrap_angle(state->rot_angle_x, state->rot_angle_x_inc); |
| 469 | + state->rot_angle_y = inc_and_wrap_angle(state->rot_angle_y, state->rot_angle_y_inc); |
| 470 | + state->rot_angle_z = inc_and_wrap_angle(state->rot_angle_z, state->rot_angle_z_inc); |
| 471 | + state->distance = inc_and_clip_distance(state->distance, state->distance_inc); |
| 472 | + |
| 473 | + glLoadIdentity(); |
| 474 | + // move camera back to see the cube |
| 475 | + glTranslatef(0.f, 0.f, -state->distance); |
| 476 | + |
| 477 | + // Rotate model to new position |
| 478 | + glRotatef(state->rot_angle_x, 1.f, 0.f, 0.f); |
| 479 | + glRotatef(state->rot_angle_y, 0.f, 1.f, 0.f); |
| 480 | + glRotatef(state->rot_angle_z, 0.f, 0.f, 1.f); |
| 481 | +} |
| 482 | + |
| 483 | +/*********************************************************** |
| 484 | + * Name: inc_and_wrap_angle |
| 485 | + * |
| 486 | + * Arguments: |
| 487 | + * GLfloat angle current angle |
| 488 | + * GLfloat angle_inc angle increment |
| 489 | + * |
| 490 | + * Description: Increments or decrements angle by angle_inc degrees |
| 491 | + * Wraps to 0 at 360 deg. |
| 492 | + * |
| 493 | + * Returns: new value of angle |
| 494 | + * |
| 495 | + ***********************************************************/ |
| 496 | +static GLfloat inc_and_wrap_angle(GLfloat angle, GLfloat angle_inc) |
| 497 | +{ |
| 498 | + angle += angle_inc; |
| 499 | + |
| 500 | + if (angle >= 360.0) |
| 501 | + angle -= 360.f; |
| 502 | + else if (angle <=0) |
| 503 | + angle += 360.f; |
| 504 | + |
| 505 | + return angle; |
| 506 | +} |
| 507 | + |
| 508 | +/*********************************************************** |
| 509 | + * Name: inc_and_clip_distance |
| 510 | + * |
| 511 | + * Arguments: |
| 512 | + * GLfloat distance current distance |
| 513 | + * GLfloat distance_inc distance increment |
| 514 | + * |
| 515 | + * Description: Increments or decrements distance by distance_inc units |
| 516 | + * Clips to range |
| 517 | + * |
| 518 | + * Returns: new value of angle |
| 519 | + * |
| 520 | + ***********************************************************/ |
| 521 | +static GLfloat inc_and_clip_distance(GLfloat distance, GLfloat distance_inc) |
| 522 | +{ |
| 523 | + distance += distance_inc; |
| 524 | + |
| 525 | + if (distance >= 120.0f) |
| 526 | + distance = 120.f; |
| 527 | + else if (distance <= 40.0f) |
| 528 | + distance = 40.0f; |
| 529 | + |
| 530 | + return distance; |
| 531 | +} |
| 532 | + |
| 533 | +static pid_t get_server_pid(CUBE_STATE_T *state) |
| 534 | +{ |
| 535 | + struct ucred ucred; |
| 536 | + socklen_t len; |
| 537 | + int fd; |
| 538 | + |
| 539 | + fd = wl_display_get_fd(state->wl_display); |
| 540 | + len = sizeof ucred; |
| 541 | + getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &len); |
| 542 | + |
| 543 | + return ucred.pid; |
| 544 | +} |
| 545 | + |
| 546 | +static void |
| 547 | +frame(void *data, struct wl_callback *callback, uint32_t time) |
| 548 | +{ |
| 549 | + CUBE_STATE_T *state = (CUBE_STATE_T *) data; |
| 550 | + |
| 551 | + state->needs_update = 1; |
| 552 | +} |
| 553 | + |
| 554 | +static const struct wl_callback_listener frame_listener = { |
| 555 | + frame |
| 556 | +}; |
| 557 | + |
| 558 | +static void |
| 559 | +update(CUBE_STATE_T *state) |
| 560 | +{ |
| 561 | + if (!state->single_frame || state->ellapsed_frames == 0) { |
| 562 | + update_model(state); |
| 563 | + redraw_scene(state); |
| 564 | + } |
| 565 | + |
| 566 | + state->wl_callback = wl_surface_frame(state->wl_surface); |
| 567 | + wl_callback_add_listener(state->wl_callback, &frame_listener, state); |
| 568 | + |
| 569 | + if (state->ellapsed_frames == 100) { |
| 570 | + if (state->kill_compositor) { |
| 571 | + fprintf(stderr, "reached frame 100, killing compositor\n"); |
| 572 | + pid_t pid = get_server_pid(state); |
| 573 | + kill(pid, SIGTERM); |
| 574 | + } else if (state->terminate_abruptly) { |
| 575 | + fprintf(stderr, "reached frame 100, terminating right away\n"); |
| 576 | + exit_func(state); |
| 577 | + exit(0); |
| 578 | + } |
| 579 | + } |
| 580 | + |
| 581 | + if (!state->single_frame || state->ellapsed_frames == 0) |
| 582 | + eglSwapBuffers(state->display, state->surface); |
| 583 | + else { |
| 584 | + wl_surface_damage(state->wl_surface, 0, 0, state->screen_width, |
| 585 | + state->screen_height); |
| 586 | + wl_surface_commit(state->wl_surface); |
| 587 | + } |
| 588 | + |
| 589 | + state->ellapsed_frames++; |
| 590 | +} |
| 591 | + |
| 592 | +/*********************************************************** |
| 593 | + * Name: redraw_scene |
| 594 | + * |
| 595 | + * Arguments: |
| 596 | + * CUBE_STATE_T *state - holds OGLES model info |
| 597 | + * |
| 598 | + * Description: Draws the model and calls eglSwapBuffers |
| 599 | + * to render to screen |
| 600 | + * |
| 601 | + * Returns: void |
| 602 | + * |
| 603 | + ***********************************************************/ |
| 604 | +static void redraw_scene(CUBE_STATE_T *state) |
| 605 | +{ |
| 606 | + // Start with a clear screen |
| 607 | + glClear( GL_COLOR_BUFFER_BIT ); |
| 608 | + |
| 609 | + // Draw first (front) face: |
| 610 | + // Bind texture surface to current vertices |
| 611 | + glBindTexture(GL_TEXTURE_2D, state->tex[0]); |
| 612 | + |
| 613 | + // Need to rotate textures - do this by rotating each cube face |
| 614 | + glRotatef(270.f, 0.f, 0.f, 1.f ); // front face normal along z axis |
| 615 | + |
| 616 | + // draw first 4 vertices |
| 617 | + glDrawArrays( GL_TRIANGLE_STRIP, 0, 4); |
| 618 | + |
| 619 | + // same pattern for other 5 faces - rotation chosen to make image orientation 'nice' |
| 620 | + glBindTexture(GL_TEXTURE_2D, state->tex[1]); |
| 621 | + glRotatef(90.f, 0.f, 0.f, 1.f ); // back face normal along z axis |
| 622 | + glDrawArrays( GL_TRIANGLE_STRIP, 4, 4); |
| 623 | + |
| 624 | + glBindTexture(GL_TEXTURE_2D, state->tex[2]); |
| 625 | + glRotatef(90.f, 1.f, 0.f, 0.f ); // left face normal along x axis |
| 626 | + glDrawArrays( GL_TRIANGLE_STRIP, 8, 4); |
| 627 | + |
| 628 | + glBindTexture(GL_TEXTURE_2D, state->tex[3]); |
| 629 | + glRotatef(90.f, 1.f, 0.f, 0.f ); // right face normal along x axis |
| 630 | + glDrawArrays( GL_TRIANGLE_STRIP, 12, 4); |
| 631 | + |
| 632 | + glBindTexture(GL_TEXTURE_2D, state->tex[4]); |
| 633 | + glRotatef(270.f, 0.f, 1.f, 0.f ); // top face normal along y axis |
| 634 | + glDrawArrays( GL_TRIANGLE_STRIP, 16, 4); |
| 635 | + |
| 636 | + glBindTexture(GL_TEXTURE_2D, state->tex[5]); |
| 637 | + glRotatef(90.f, 0.f, 1.f, 0.f ); // bottom face normal along y axis |
| 638 | + glDrawArrays( GL_TRIANGLE_STRIP, 20, 4); |
| 639 | +} |
| 640 | + |
| 641 | +/*********************************************************** |
| 642 | + * Name: init_textures |
| 643 | + * |
| 644 | + * Arguments: |
| 645 | + * CUBE_STATE_T *state - holds OGLES model info |
| 646 | + * |
| 647 | + * Description: Initialise OGL|ES texture surfaces to use image |
| 648 | + * buffers |
| 649 | + * |
| 650 | + * Returns: void |
| 651 | + * |
| 652 | + ***********************************************************/ |
| 653 | +static void init_textures(CUBE_STATE_T *state) |
| 654 | +{ |
| 655 | + // load three texture buffers but use them on six OGL|ES texture surfaces |
| 656 | + load_tex_images(state); |
| 657 | + glGenTextures(6, &state->tex[0]); |
| 658 | + |
| 659 | + // setup first texture |
| 660 | + glBindTexture(GL_TEXTURE_2D, state->tex[0]); |
| 661 | + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0, |
| 662 | + GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf1); |
| 663 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST); |
| 664 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST); |
| 665 | + |
| 666 | + // setup second texture - reuse first image |
| 667 | + glBindTexture(GL_TEXTURE_2D, state->tex[1]); |
| 668 | + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0, |
| 669 | + GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf1); |
| 670 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST); |
| 671 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST); |
| 672 | + |
| 673 | + // third texture |
| 674 | + glBindTexture(GL_TEXTURE_2D, state->tex[2]); |
| 675 | + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0, |
| 676 | + GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf2); |
| 677 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST); |
| 678 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST); |
| 679 | + |
| 680 | + // fourth texture - reuse second image |
| 681 | + glBindTexture(GL_TEXTURE_2D, state->tex[3]); |
| 682 | + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0, |
| 683 | + GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf2); |
| 684 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST); |
| 685 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST); |
| 686 | + |
| 687 | + //fifth texture |
| 688 | + glBindTexture(GL_TEXTURE_2D, state->tex[4]); |
| 689 | + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0, |
| 690 | + GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf3); |
| 691 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST); |
| 692 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST); |
| 693 | + |
| 694 | + // sixth texture - reuse third image |
| 695 | + glBindTexture(GL_TEXTURE_2D, state->tex[5]); |
| 696 | + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_SIZE, IMAGE_SIZE, 0, |
| 697 | + GL_RGB, GL_UNSIGNED_BYTE, state->tex_buf3); |
| 698 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLfloat)GL_NEAREST); |
| 699 | + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLfloat)GL_NEAREST); |
| 700 | + |
| 701 | + // setup overall texture environment |
| 702 | + glTexCoordPointer(2, GL_FLOAT, 0, texCoords); |
| 703 | + glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
| 704 | + |
| 705 | + glEnable(GL_TEXTURE_2D); |
| 706 | +} |
| 707 | + |
| 708 | +/*********************************************************** |
| 709 | + * Name: load_tex_images |
| 710 | + * |
| 711 | + * Arguments: |
| 712 | + * void |
| 713 | + * |
| 714 | + * Description: Loads three raw images to use as textures on faces |
| 715 | + * |
| 716 | + * Returns: void |
| 717 | + * |
| 718 | + ***********************************************************/ |
| 719 | +static void load_tex_images(CUBE_STATE_T *state) |
| 720 | +{ |
| 721 | + FILE *tex_file1 = NULL, *tex_file2=NULL, *tex_file3 = NULL; |
| 722 | + int bytes_read, image_sz = IMAGE_SIZE*IMAGE_SIZE*3; |
| 723 | + |
| 724 | + state->tex_buf1 = malloc(image_sz); |
| 725 | + state->tex_buf2 = malloc(image_sz); |
| 726 | + state->tex_buf3 = malloc(image_sz); |
| 727 | + |
| 728 | + tex_file1 = fopen(PATH "Lucca_128_128.raw", "rb"); |
| 729 | + if (tex_file1 && state->tex_buf1) |
| 730 | + { |
| 731 | + bytes_read=fread(state->tex_buf1, 1, image_sz, tex_file1); |
| 732 | + assert(bytes_read == image_sz); // some problem with file? |
| 733 | + fclose(tex_file1); |
| 734 | + } |
| 735 | + |
| 736 | + tex_file2 = fopen(PATH "Djenne_128_128.raw", "rb"); |
| 737 | + if (tex_file2 && state->tex_buf2) |
| 738 | + { |
| 739 | + bytes_read=fread(state->tex_buf2, 1, image_sz, tex_file2); |
| 740 | + assert(bytes_read == image_sz); // some problem with file? |
| 741 | + fclose(tex_file2); |
| 742 | + } |
| 743 | + |
| 744 | + tex_file3 = fopen(PATH "Gaudi_128_128.raw", "rb"); |
| 745 | + if (tex_file3 && state->tex_buf3) |
| 746 | + { |
| 747 | + bytes_read=fread(state->tex_buf3, 1, image_sz, tex_file3); |
| 748 | + assert(bytes_read == image_sz); // some problem with file? |
| 749 | + fclose(tex_file3); |
| 750 | + } |
| 751 | +} |
| 752 | + |
| 753 | +//------------------------------------------------------------------------------ |
| 754 | + |
| 755 | +static void exit_func(CUBE_STATE_T *state) |
| 756 | +{ |
| 757 | + // clear screen |
| 758 | + glClear( GL_COLOR_BUFFER_BIT ); |
| 759 | + eglSwapBuffers(state->display, state->surface); |
| 760 | + |
| 761 | + // Release OpenGL resources |
| 762 | + eglMakeCurrent( state->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT ); |
| 763 | + |
| 764 | + wl_egl_window_destroy(state->wl_egl_window); |
| 765 | + wl_shell_surface_destroy(state->wl_shell_surface); |
| 766 | + wl_surface_destroy(state->wl_surface); |
| 767 | + |
| 768 | + eglDestroySurface( state->display, state->surface ); |
| 769 | + eglDestroyContext( state->display, state->context ); |
| 770 | + eglTerminate( state->display ); |
| 771 | + |
| 772 | + wl_display_flush(state->wl_display); |
| 773 | + |
| 774 | + // release texture buffers |
| 775 | + free(state->tex_buf1); |
| 776 | + free(state->tex_buf2); |
| 777 | + free(state->tex_buf3); |
| 778 | + |
| 779 | + printf("\ncube closed\n"); |
| 780 | +} // exit_func() |
| 781 | + |
| 782 | +static int running = 1; |
| 783 | + |
| 784 | +static void |
| 785 | +signal_int(int signum) |
| 786 | +{ |
| 787 | + running = 0; |
| 788 | +} |
| 789 | + |
| 790 | +//============================================================================== |
| 791 | + |
| 792 | +int main (int argc, char *argv[]) |
| 793 | +{ |
| 794 | + struct sigaction sigint; |
| 795 | + CUBE_STATE_T state = {0,}; |
| 796 | + int ret = 0; |
| 797 | + int i; |
| 798 | + |
| 799 | + for (i = 0; i < argc; i++) { |
| 800 | + if (strcmp(argv[i], "--kill-compositor") == 0) |
| 801 | + state.kill_compositor = 1; |
| 802 | + if (strcmp(argv[i], "--single-frame") == 0) |
| 803 | + state.single_frame = 1; |
| 804 | + if (strcmp(argv[i], "--terminate-abruptly") == 0) |
| 805 | + state.terminate_abruptly = 1; |
| 806 | + else if (strcmp(argv[i], "--help") == 0 || |
| 807 | + strcmp(argv[i], "-h") == 0) { |
| 808 | + printf("Usage: hello_wayland.bin [OPTION]\n\n"); |
| 809 | + printf("\t--kill-compositor\tkill the Wayland compositor after 100 frames\n"); |
| 810 | + printf("\t-h, --help\t\tshow this text\n"); |
| 811 | + printf("\t--single-frame\t\tupdate the display only once\n"); |
| 812 | + printf("\t--terminate-abruptly\texit right after rendering the 100th frame\n"); |
| 813 | + return 0; |
| 814 | + } |
| 815 | + } |
| 816 | + |
| 817 | + // Start OGLES |
| 818 | + init_ogl(&state); |
| 819 | + |
| 820 | + // Setup the model world |
| 821 | + init_model_proj(&state); |
| 822 | + |
| 823 | + // initialise the OGLES texture(s) |
| 824 | + init_textures(&state); |
| 825 | + |
| 826 | + sigint.sa_handler = signal_int; |
| 827 | + sigemptyset(&sigint.sa_mask); |
| 828 | + sigint.sa_flags = SA_RESETHAND; |
| 829 | + sigaction(SIGINT, &sigint, NULL); |
| 830 | + |
| 831 | + state.needs_update = 1; |
| 832 | + while (running && ret != -1) { |
| 833 | + if (state.needs_update) { |
| 834 | + update(&state); |
| 835 | + state.needs_update = 0; |
| 836 | + } |
| 837 | + |
| 838 | + ret = wl_display_dispatch(state.wl_display); |
| 839 | + } |
| 840 | + |
| 841 | + exit_func(&state); |
| 842 | + |
| 843 | + return 0; |
| 844 | +} |
| 845 | + |
| 846 | diff --git a/host_applications/linux/apps/hello_pi/rebuild.sh b/host_applications/linux/apps/hello_pi/rebuild.sh |
| 847 | index 8225dd5..0be6ce7 100755 |
| 848 | --- a/host_applications/linux/apps/hello_pi/rebuild.sh |
| 849 | +++ b/host_applications/linux/apps/hello_pi/rebuild.sh |
| 850 | @@ -14,6 +14,7 @@ make -C hello_videocube clean |
| 851 | make -C hello_teapot clean |
| 852 | make -C hello_fft clean |
| 853 | make -C hello_mmal_encode clean |
| 854 | +make -C hello_wayland clean |
| 855 | |
| 856 | make -C libs/ilclient |
| 857 | make -C libs/vgfont |
| 858 | @@ -31,4 +32,4 @@ make -C hello_videocube |
| 859 | make -C hello_teapot |
| 860 | make -C hello_fft |
| 861 | make -C hello_mmal_encode |
| 862 | - |
| 863 | +make -C hello_wayland |
| 864 | -- |
Brad Bishop | 1932369 | 2019-04-05 15:28:33 -0400 | [diff] [blame^] | 865 | 2.20.1 |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 866 | |