From f9680b71584f59551ee227e35cbeaeebfd07cb9c Mon Sep 17 00:00:00 2001 From: Donghyun Lee Date: Fri, 26 Jun 2015 18:36:44 +0900 Subject: [PATCH] LB reviewed and updated Signed-off-by: Donghyun Lee --- org.tizen.devtools/.project | 2 +- org.tizen.devtools/META-INF/MANIFEST.MF | 2 +- .../html/common_tools/certificate_registration.htm | 6 +- org.tizen.devtools/html/common_tools/emulator.htm | 285 +-- .../html/common_tools/emulator_features.htm | 7 +- .../html/common_tools/keyboard_shortcuts.htm | 440 ++++- .../html/common_tools/tools_common.htm | 1 - org.tizen.devtools/html/cover_page.htm | 4 +- org.tizen.devtools/html/images/color_24.png | Bin 0 -> 150 bytes .../html/images/da_checkpoint_analysis.png | Bin 165988 -> 121042 bytes .../html/images/da_checkpoint_ide_editor.png | Bin 105588 -> 125399 bytes .../html/images/emulator_general_mobile.png | Bin 20212 -> 17259 bytes .../html/images/emulator_general_wearable.png | Bin 13614 -> 8760 bytes .../html/images/native_application_wizard.png | Bin 167452 -> 145021 bytes org.tizen.devtools/html/images/ui_builder_1.png | Bin 0 -> 112187 bytes .../html/images/web_application_wizard.png | Bin 197694 -> 171577 bytes org.tizen.devtools/html/index.htm | 8 +- .../html/native_tools/api_privilege_checker_n.htm | 6 +- .../html/native_tools/call_stack_view_n.htm | 2 + .../html/native_tools/command_line_interface_n.htm | 6 +- .../html/native_tools/da_checkpoint_n.htm | 80 +- org.tizen.devtools/html/native_tools/da_file_n.htm | 19 +- .../html/native_tools/da_overview_n.htm | 20 +- .../html/native_tools/da_timeline_n.htm | 6 +- .../html/native_tools/da_views_n.htm | 18 +- .../html/native_tools/enventor_n.htm | 178 +- .../html/native_tools/manifest_text_editor_n.htm | 190 +- .../html/native_tools/po_file_editor_n.htm | 5 +- .../html/native_tools/project_wizard_n.htm | 202 +- .../t_trace.htm => native_tools/t_trace_n.htm} | 10 +- org.tizen.devtools/html/native_tools/tools_n.htm | 2 + .../html/native_tools/uibuilder_n.htm | 2 +- .../html/web_tools/code_beautifier_w.htm | 7 +- .../html/web_tools/code_minifier_w.htm | 4 +- .../html/web_tools/command_line_interface_w.htm | 6 +- .../html/web_tools/content_assist_w.htm | 2 +- org.tizen.devtools/html/web_tools/css_editor_w.htm | 5 +- .../html/web_tools/css_preview_w.htm | 5 +- .../html/web_tools/js_analyzer_w.htm | 4 +- org.tizen.devtools/html/web_tools/js_editor_w.htm | 4 +- .../html/web_tools/live_editing_w.htm | 6 +- .../html/web_tools/project_wizard_w.htm | 204 +- .../html/web_tools/set_ide_preference_w.htm | 18 +- .../html/web_tools/web_simulator_w.htm | 2 +- org.tizen.devtools/index.xml | 7 +- org.tizen.gettingstarted/.project | 2 +- org.tizen.gettingstarted/html/cover_page.htm | 3 +- .../html/images/breakpoint_set.png | Bin 82836 -> 0 bytes .../html/images/create_project.png | Bin 107599 -> 0 bytes .../html/images/hello_wearable.png | Bin 167527 -> 140917 bytes .../html/images/hello_wearable_emulator.png | Bin 15171 -> 11679 bytes .../html/images/hello_wearable_js.png | Bin 273273 -> 155158 bytes .../html/images/hello_world_n.png | Bin 150022 -> 148673 bytes .../html/images/helloworld_emulator.png | Bin 10738 -> 0 bytes .../html/images/helloworld_helloworld.png | Bin 120431 -> 0 bytes .../html/images/helloworld_index.png | Bin 262442 -> 151268 bytes .../html/images/helloworld_js.png | Bin 77775 -> 0 bytes .../images/wearable_web_application_project.png | Bin 140298 -> 0 bytes .../html/images/web_application_project.png | Bin 150444 -> 0 bytes .../html/images/web_application_wizard.png | Bin 197694 -> 164795 bytes .../html/native/details/details_n.htm | 2 +- .../html/native/details/error_handling_n.htm | 4 +- .../html/native/details/event_handling_n.htm | 67 +- .../html/native/details/io_overview_n.htm | 14 +- .../html/native/details/sec_privileges_n.htm | 424 +++-- .../html/native/details/tizen_apis_n.htm | 12 +- .../html/native/first_app/first_app_n.htm | 504 ++--- .../html/native/process/app_dev_process_n.htm | 4 +- .../html/native/process/performance_n.htm | 14 +- .../html/native/process/setting_properties_n.htm | 38 +- org.tizen.gettingstarted/html/preface.htm | 9 +- .../html/web/app_model/application_model_w.htm | 6 +- .../html/web/details/tizen_apis_w.htm | 6 +- .../html/web/first_app/first_app_w.htm | 563 ++---- .../html/web/process/app_dev_process_w.htm | 15 +- .../html/web/process/creating_app_project_w.htm | 451 ++--- .../html/web/process/run_debug_app_w.htm | 2 +- .../html/web/process/setting_properties_w.htm | 4 +- org.tizen.guides/.project | 2 +- org.tizen.guides/html/images/ime_lifecycle.png | Bin 0 -> 22945 bytes org.tizen.guides/html/images/ime_list.png | Bin 0 -> 2954 bytes org.tizen.guides/html/images/ime_selector.png | Bin 0 -> 2934 bytes .../html/images/mediavision_code_128.png | Bin 0 -> 2865 bytes .../html/images/mediavision_code_39.png | Bin 0 -> 3049 bytes .../html/images/mediavision_ean_13.png | Bin 0 -> 2126 bytes org.tizen.guides/html/images/mediavision_ean_8.png | Bin 0 -> 1682 bytes .../html/images/mediavision_interleaved_2_5.png | Bin 0 -> 2953 bytes org.tizen.guides/html/images/mediavision_qr.png | Bin 0 -> 4415 bytes org.tizen.guides/html/images/mediavision_upc_a.png | Bin 0 -> 4334 bytes org.tizen.guides/html/images/mediavision_upc_e.png | Bin 0 -> 2682 bytes .../html/images/service_adaptor_structure.jpg | Bin 33976 -> 0 bytes .../html/images/service_adaptor_structure.png | Bin 0 -> 114660 bytes org.tizen.guides/html/images/setting_to_clock.png | Bin 0 -> 43910 bytes org.tizen.guides/html/images/trace.png | Bin 0 -> 19267 bytes org.tizen.guides/html/images/voice_control.png | Bin 0 -> 40570 bytes org.tizen.guides/html/images/voice_control_elm.png | Bin 0 -> 8972 bytes .../html/images/voice_control_elm_screen.png | Bin 0 -> 15126 bytes .../html/images/watch_app_lifecycle.png | Bin 0 -> 28514 bytes .../html/images/widget_app_lifecycle.png | Bin 0 -> 21221 bytes .../html/images/widget_instance_lifecycle.png | Bin 0 -> 37861 bytes org.tizen.guides/html/index.htm | 42 +- .../html/native/account/account_guide_n.htm | 76 + .../oauth2_guide_n.htm => account/oauth2_n.htm} | 14 +- .../sync_manager_n.htm} | 85 +- org.tizen.guides/html/native/app/app_manager_n.htm | 16 +- org.tizen.guides/html/native/app/application_n.htm | 51 +- org.tizen.guides/html/native/app/badge_n.htm | 3 +- org.tizen.guides/html/native/app/watch_n.htm | 134 +- org.tizen.guides/html/native/app/widget_n.htm | 135 +- org.tizen.guides/html/native/base/i18n_n.htm | 224 ++- org.tizen.guides/html/native/context/trigger_n.htm | 2 +- org.tizen.guides/html/native/guides_n.htm | 11 +- .../html/native/location/geofence_n.htm | 6 +- org.tizen.guides/html/native/location/maps_n.htm | 6 +- .../html/native/multimedia/audio_io_n.htm | 62 +- .../html/native/multimedia/media_tools_n.htm | 26 +- .../html/native/multimedia/media_vision_n.htm | 207 +++ .../html/native/multimedia/metadata_editor_n.htm | 4 +- .../html/native/multimedia/multimedia_guide_n.htm | 5 +- .../html/native/multimedia/screen_mirroring_n.htm | 4 +- .../html/native/multimedia/thumbnail_util_n.htm | 4 +- .../html/native/network/bluetooth_n.htm | 2 +- org.tizen.guides/html/native/porting/porting_n.htm | 2 +- .../html/native/social/account_manager_n.htm | 276 +-- org.tizen.guides/html/native/social/calendar_n.htm | 48 +- .../html/native/social/service_adaptor_n.htm | 215 +-- .../html/native/social/social_guide_n.htm | 19 +- .../html/native/system/system_guide_n.htm | 2 + org.tizen.guides/html/native/system/t-trace_n.htm | 77 + .../{social => telephony}/phonenumber_util_n.htm | 14 +- .../html/native/telephony/telephony_guide_n.htm | 284 +-- .../html/native/telephony/telephony_info_n.htm | 330 ++++ .../html/native/ui/animations_effects_n.htm | 12 +- org.tizen.guides/html/native/ui/components_mn.htm | 4 +- org.tizen.guides/html/native/ui/components_wn.htm | 4 +- org.tizen.guides/html/native/ui/containers_mn.htm | 4 +- org.tizen.guides/html/native/ui/containers_wn.htm | 4 +- org.tizen.guides/html/native/ui/data_types_n.htm | 1653 ++++++++-------- org.tizen.guides/html/native/ui/ecore_n.htm | 4 +- .../html/native/ui/edc_part_block_n.htm | 6 +- org.tizen.guides/html/native/ui/edje_n.htm | 4 +- org.tizen.guides/html/native/ui/efl_n.htm | 6 +- org.tizen.guides/html/native/ui/eina_n.htm | 4 +- org.tizen.guides/html/native/ui/eina_tools_n.htm | 4 +- org.tizen.guides/html/native/ui/elementary_mn.htm | 474 +++-- org.tizen.guides/html/native/ui/elementary_wn.htm | 475 +++-- org.tizen.guides/html/native/ui/eom_n.htm | 12 +- org.tizen.guides/html/native/ui/evas_n.htm | 4 +- org.tizen.guides/html/native/ui/event_types_n.htm | 8 +- .../html/native/ui/events_effects_n.htm | 4 +- org.tizen.guides/html/native/ui/font_setting_n.htm | 45 +- org.tizen.guides/html/native/ui/main_loop_n.htm | 182 +- .../html/native/ui/multiple_screens_n.htm | 4 +- org.tizen.guides/html/native/ui/preferences_n.htm | 8 +- org.tizen.guides/html/native/ui/scalability_n.htm | 4 +- org.tizen.guides/html/native/ui/threads_n.htm | 453 ++--- .../html/native/ui/ui_component_mn.htm | 8 +- .../html/native/ui/ui_component_wn.htm | 8 +- org.tizen.guides/html/native/ui/ui_guide_n.htm | 2 +- org.tizen.guides/html/native/uix/ime_n.htm | 112 ++ org.tizen.guides/html/native/uix/uix_guide_n.htm | 6 +- .../html/native/uix/voicecontrol_elm_n.htm | 228 +++ .../html/native/uix/voicecontrol_guide_n.htm | 65 + .../html/native/uix/voicecontrol_n.htm | 98 + org.tizen.guides/html/native/web/web_guide_n.htm | 2 +- .../html/web/tizen/communication/bluetooth_w.htm | 48 +- .../html/web/tizen/communication/nfc_w.htm | 2 +- org.tizen.guides/html/web/tizen/guides_tizen_w.htm | 2 +- .../html/web/tizen/social/service_adaptor_w.htm | 213 +-- .../html/web/tizen/social/social_guide_w.htm | 2 +- org.tizen.guides/html/web/w3c/dom/transform_w.htm | 2 +- .../html/web/w3c/useful/html_priority_w.htm | 8 +- .../html/web/w3c/useful/multiple_screens_w.htm | 2 +- org.tizen.guides/index.xml | 42 +- org.tizen.sampledescriptions/.project | 22 + org.tizen.sampledescriptions/META-INF/MANIFEST.MF | 7 + org.tizen.sampledescriptions/about.html | 18 + org.tizen.sampledescriptions/build.properties | 8 + org.tizen.sampledescriptions/html/cover_page.htm | 71 + org.tizen.sampledescriptions/html/css/snippet.css | 52 + org.tizen.sampledescriptions/html/css/styles.css | 756 ++++++++ .../html/images/DigitalWatch_sd1.png | Bin 0 -> 11378 bytes .../html/images/DigitalWatch_sd2.png | Bin 0 -> 12052 bytes .../html/images/alignment_main.png | Bin 0 -> 7687 bytes .../html/images/alignment_view_contents_tree.png | Bin 0 -> 23349 bytes .../images/alignment_view_contents_wireframe.png | Bin 0 -> 18733 bytes .../html/images/altimeter_ww.png | Bin 0 -> 61228 bytes .../html/images/analogwatch_ww.png | Bin 0 -> 26775 bytes .../html/images/animation_main.png | Bin 0 -> 7145 bytes .../html/images/animation_move.png | Bin 0 -> 2886 bytes .../html/images/animation_scale_down.png | Bin 0 -> 3479 bytes .../images/animation_view_contents_wire_tree.png | Bin 0 -> 6644 bytes .../html/images/animator_sample.png | Bin 0 -> 3537 bytes .../html/images/appcalleecaller_mw.png | Bin 0 -> 104059 bytes .../html/images/appcalleecaller_ww.png | Bin 0 -> 31117 bytes .../html/images/archivemanager_archive_mw.png | Bin 0 -> 12000 bytes .../images/archivemanager_browse_archive_mw.png | Bin 0 -> 10836 bytes .../html/images/archivemanager_browse_mw.png | Bin 0 -> 10933 bytes .../html/images/archivemanager_compress_mw.png | Bin 0 -> 9397 bytes .../html/images/archivemanager_confirm_mw.png | Bin 0 -> 12488 bytes .../html/images/archivemanager_extract_mw.png | Bin 0 -> 10259 bytes .../html/images/archivemanager_input_mw.png | Bin 0 -> 12055 bytes .../html/images/archivemanager_root_mw.png | Bin 0 -> 7721 bytes .../html/images/basicwatch_sd.png | Bin 0 -> 2443 bytes .../html/images/bg_util_bar.gif | Bin 0 -> 1137 bytes .../html/images/bluetoothchat.png | Bin 0 -> 42558 bytes .../html/images/box_sd.png | Bin 0 -> 3151 bytes .../html/images/btn_top.gif | Bin 0 -> 2558 bytes .../html/images/bundle_data_sink_layout_sd.png | Bin 0 -> 7040 bytes .../html/images/bundle_data_sink_view_sd.png | Bin 0 -> 15187 bytes .../images/bundle_data_source_basic_view_sd.png | Bin 0 -> 9165 bytes .../images/bundle_data_source_filled_view_sd.png | Bin 0 -> 11214 bytes .../html/images/bundle_data_source_layout_sd.png | Bin 0 -> 24442 bytes .../images/bundle_edje_layout_data_sink_sd.png | Bin 0 -> 13098 bytes .../bundle_edje_layout_data_source_buttons_sd.png | Bin 0 -> 16376 bytes .../bundle_edje_layout_data_source_edit_sd.png | Bin 0 -> 64464 bytes .../bundle_edje_layout_data_source_list_sd.png | Bin 0 -> 27090 bytes .../images/bundle_edje_layout_data_source_sd.png | Bin 0 -> 17526 bytes .../html/images/bundle_edje_layout_main_sd.png | Bin 0 -> 15555 bytes .../bundle_general_edje_data_sink_structure_sd.png | Bin 0 -> 22049 bytes ...undle_general_edje_data_source_structure_sd.png | Bin 0 -> 103119 bytes .../html/images/bundle_ui_layout_data_sink_sd.png | Bin 0 -> 5158 bytes .../bundle_ui_layout_data_source_buttons_sd.png | Bin 0 -> 6738 bytes .../bundle_ui_layout_data_source_edit_sd.png | Bin 0 -> 10807 bytes .../bundle_ui_layout_data_source_list_sd.png | Bin 0 -> 8961 bytes .../images/bundle_ui_layout_data_source_sd.png | Bin 0 -> 21671 bytes .../html/images/bundle_ui_layout_main_sd.png | Bin 0 -> 12081 bytes .../images/bundle_workflow_bundle_receive_sd.png | Bin 0 -> 35980 bytes .../html/images/bundle_workflow_bundle_send_sd.png | Bin 0 -> 26290 bytes .../images/bundle_workflow_data_creation_sd.png | Bin 0 -> 18775 bytes .../images/bundle_workflow_object_structure_sd.png | Bin 0 -> 32755 bytes .../html/images/bundle_workflow_startup_sd.png | Bin 0 -> 16906 bytes .../html/images/calculator_main_view.png | Bin 0 -> 4561 bytes .../html/images/calculator_sd.png | Bin 0 -> 58613 bytes .../html/images/calculator_sd_mw.png | Bin 0 -> 57816 bytes .../html/images/calculator_tree.png | Bin 0 -> 3434 bytes .../html/images/calculator_wire.png | Bin 0 -> 9283 bytes .../html/images/calculator_ww.png | Bin 0 -> 101398 bytes .../html/images/calendar_sd.png | Bin 0 -> 23219 bytes .../html/images/calendar_sd_mw.png | Bin 0 -> 20842 bytes .../html/images/calllog.png | Bin 0 -> 62547 bytes .../html/images/camera_ww.png | Bin 0 -> 423302 bytes .../html/images/chatter.png | Bin 0 -> 64256 bytes .../html/images/circle_email_detail_view.png | Bin 0 -> 24994 bytes .../html/images/circle_email_sd.png | Bin 0 -> 58342 bytes .../html/images/circle_email_tree.png | Bin 0 -> 4645 bytes .../html/images/circle_setting_brightness_view.png | Bin 0 -> 20174 bytes .../images/circle_setting_information_view.png | Bin 0 -> 30853 bytes .../html/images/circle_setting_sd.png | Bin 0 -> 45363 bytes .../html/images/circle_setting_time_sd.png | Bin 0 -> 26374 bytes .../images/circle_setting_time_set_time_view.png | Bin 0 -> 24852 bytes .../html/images/circle_setting_time_tree.png | Bin 0 -> 5261 bytes .../html/images/circle_setting_tree.png | Bin 0 -> 3228 bytes .../html/images/circle_setting_volume_view.png | Bin 0 -> 18398 bytes .../html/images/circle_ui_components_sd.png | Bin 0 -> 91797 bytes .../html/images/compass.png | Bin 0 -> 60091 bytes .../html/images/compass_ww.png | Bin 0 -> 46706 bytes .../html/images/contactlist_mw.png | Bin 0 -> 17328 bytes .../html/images/contacts.png | Bin 0 -> 35145 bytes .../html/images/contacts_edit.png | Bin 0 -> 30827 bytes .../html/images/contacts_favorites.png | Bin 0 -> 19058 bytes .../html/images/contactsexchanger.png | Bin 0 -> 62721 bytes .../html/images/content_sd.png | Bin 0 -> 81514 bytes .../html/images/digitalwatch_ww1.png | Bin 0 -> 217663 bytes .../html/images/digitalwatch_ww2.png | Bin 0 -> 6211 bytes .../html/images/downloadmanager.png | Bin 0 -> 75874 bytes .../html/images/ecore_thread_1.png | Bin 0 -> 9389 bytes .../html/images/ecore_thread_2.png | Bin 0 -> 16205 bytes .../html/images/ecore_thread_3.png | Bin 0 -> 15630 bytes .../html/images/ecore_thread_4.png | Bin 0 -> 11683 bytes .../html/images/ecore_thread_5.png | Bin 0 -> 72254 bytes .../html/images/edc_format_change_image.png | Bin 0 -> 22854 bytes .../html/images/edc_format_main.png | Bin 0 -> 17939 bytes .../images/edc_format_view_contents_wire_tree.png | Bin 0 -> 7181 bytes .../html/images/edc_main_tree.png | Bin 0 -> 7207 bytes .../html/images/edc_map.png | Bin 0 -> 7777 bytes .../html/images/eina_list.png | Bin 0 -> 77712 bytes .../html/images/elmtransit.png | Bin 0 -> 5326 bytes .../html/images/evas_gl_sd.png | Bin 0 -> 3974 bytes .../html/images/evas_map.png | Bin 0 -> 12951 bytes .../html/images/evas_map_mapping.png | Bin 0 -> 30363 bytes .../html/images/evas_map_rotation.png | Bin 0 -> 13087 bytes .../html/images/evasevent.png | Bin 0 -> 2505 bytes .../html/images/evasevent_2.png | Bin 0 -> 3358 bytes .../html/images/eventmanager.png | Bin 0 -> 91695 bytes .../html/images/exerciseplanner.png | Bin 0 -> 52513 bytes .../html/images/filemanager.png | Bin 0 -> 71593 bytes .../html/images/filemanager_functionalities.png | Bin 0 -> 39929 bytes .../html/images/filemanager_main.png | Bin 0 -> 21433 bytes .../html/images/filemanager_main_view.png | Bin 0 -> 2258 bytes .../html/images/filemanager_storage_view.png | Bin 0 -> 4912 bytes .../html/images/filemanager_tree.png | Bin 0 -> 2960 bytes .../html/images/glview11_cube.png | Bin 0 -> 50368 bytes .../html/images/glview_cube.png | Bin 0 -> 170364 bytes .../html/images/glview_shader.png | Bin 0 -> 60998 bytes .../images/gps_consumer_inside_boundary_sd.png | Bin 0 -> 11593 bytes .../html/images/gps_consumer_no_service_sd.png | Bin 0 -> 5028 bytes .../images/gps_consumer_outside_boundary_sd.png | Bin 0 -> 14595 bytes .../html/images/hellotizen_mw.png | Bin 0 -> 6314 bytes .../html/images/hellotizen_screen.png | Bin 0 -> 4712 bytes .../html/images/hybridwebapp_sd.png | Bin 0 -> 51507 bytes .../html/images/ico_arr_hidden.gif | Bin 0 -> 1145 bytes .../html/images/ico_bullet_2_7.gif | Bin 0 -> 1093 bytes org.tizen.sampledescriptions/html/images/idler.png | Bin 0 -> 14155 bytes .../html/images/image_sd.png | Bin 0 -> 14833 bytes .../html/images/mediaapp_audio_recorder.png | Bin 0 -> 13520 bytes .../html/images/mediaapp_camera.png | Bin 0 -> 113136 bytes .../html/images/mediaapp_camplay.png | Bin 0 -> 99368 bytes .../html/images/mediaapp_color_converter.png | Bin 0 -> 76212 bytes .../html/images/mediaapp_equalizer.png | Bin 0 -> 12330 bytes .../html/images/mediaapp_flip_rotate.png | Bin 0 -> 50123 bytes .../html/images/mediaapp_frame_extractor.png | Bin 0 -> 85469 bytes .../html/images/mediaapp_gif_viewer.png | Bin 0 -> 43261 bytes .../html/images/mediaapp_gles.png | Bin 0 -> 60727 bytes .../html/images/mediaapp_image_converter.png | Bin 0 -> 46401 bytes .../html/images/mediaapp_image_resize.png | Bin 0 -> 87587 bytes .../html/images/mediaapp_image_viewer.png | Bin 0 -> 51541 bytes .../html/images/mediaapp_inout.png | Bin 0 -> 10390 bytes .../html/images/mediaapp_main.png | Bin 0 -> 6863 bytes .../html/images/mediaapp_mediaplayer.png | Bin 0 -> 19379 bytes .../html/images/mediaapp_multi.png | Bin 0 -> 10824 bytes .../html/images/mediaapp_tone_player.png | Bin 0 -> 12202 bytes .../html/images/mediaapp_video.png | Bin 0 -> 142322 bytes .../html/images/mediaapp_vidplayer.png | Bin 0 -> 94269 bytes .../html/images/minigallery_ww.png | Bin 0 -> 72238 bytes .../html/images/mn_division.png | Bin 0 -> 113082 bytes .../html/images/mn_icon.png | Bin 0 -> 24895 bytes .../html/images/moneybook_mw.png | Bin 0 -> 31968 bytes .../html/images/moneybook_ww.png | Bin 0 -> 13920 bytes .../html/images/mw_division.png | Bin 0 -> 112882 bytes .../html/images/mw_icon.png | Bin 0 -> 24680 bytes .../html/images/n_division.png | Bin 0 -> 113082 bytes .../html/images/newsfeed_screen.png | Bin 0 -> 12023 bytes .../html/images/notification_manager.png | Bin 0 -> 63378 bytes .../html/images/paint_app_layout.png | Bin 0 -> 13741 bytes .../html/images/paint_app_layout_drawing.png | Bin 0 -> 10867 bytes .../html/images/paint_colorselector.png | Bin 0 -> 2938 bytes .../html/images/paint_conformant.png | Bin 0 -> 2307 bytes .../html/images/paint_draw_area.png | Bin 0 -> 2546 bytes .../html/images/paint_evas.png | Bin 0 -> 1900 bytes .../html/images/paint_frame.png | Bin 0 -> 2434 bytes .../html/images/paint_gui_edc.png | Bin 0 -> 9806 bytes .../html/images/paint_gui_layout.png | Bin 0 -> 9904 bytes .../html/images/paint_gui_layout_main.png | Bin 0 -> 6276 bytes .../html/images/paint_layout.png | Bin 0 -> 3587 bytes .../images/paint_mouse_callback_call_order.png | Bin 0 -> 22814 bytes .../html/images/paint_rectangle.png | Bin 0 -> 12242 bytes .../html/images/paint_toolbar.png | Bin 0 -> 7693 bytes .../html/images/paint_win.png | Bin 0 -> 1503 bytes .../html/images/paint_workflow.png | Bin 0 -> 64104 bytes .../html/images/pedometer.png | Bin 0 -> 11300 bytes .../html/images/pedometer_accel_data.png | Bin 0 -> 65500 bytes org.tizen.sampledescriptions/html/images/piano.png | Bin 0 -> 18436 bytes .../html/images/piano_main.png | Bin 0 -> 26953 bytes .../html/images/preference_main_view_sd.png | Bin 0 -> 9607 bytes .../preference_ui_structure_edje_buttons_sd.png | Bin 0 -> 3190 bytes .../preference_ui_structure_edje_input_sd.png | Bin 0 -> 33702 bytes .../preference_ui_structure_edje_main_sd.png | Bin 0 -> 9698 bytes .../images/preference_ui_structure_edje_sd.png | Bin 0 -> 47964 bytes .../preference_ui_structure_elementary_sd.png | Bin 0 -> 12301 bytes .../html/images/preference_ui_view_buttons_sd.png | Bin 0 -> 10618 bytes .../html/images/preference_ui_view_input_sd.png | Bin 0 -> 10718 bytes .../html/images/preference_ui_view_list_sd.png | Bin 0 -> 9733 bytes .../html/images/preference_ui_view_main_sd.png | Bin 0 -> 10168 bytes .../html/images/preference_workflow_sd.png | Bin 0 -> 51312 bytes .../html/images/proxy_object.png | Bin 0 -> 17701 bytes .../html/images/rectangle.png | Bin 0 -> 1570 bytes .../html/images/rectemail2_sd.png | Bin 0 -> 11006 bytes .../html/images/rectemail_sd.png | Bin 0 -> 41545 bytes .../html/images/rectemail_tree.png | Bin 0 -> 3919 bytes .../html/images/rectsettings2_sd.png | Bin 0 -> 7703 bytes .../html/images/rectsettings_sd.png | Bin 0 -> 27883 bytes .../html/images/rectsettings_tree.png | Bin 0 -> 4887 bytes .../html/images/rectuicomponents_sd.png | Bin 0 -> 77740 bytes .../html/images/rectuidialer_sd.png | Bin 0 -> 23686 bytes .../html/images/rectuidialer_tree.png | Bin 0 -> 12125 bytes .../html/images/relative_main.png | Bin 0 -> 4892 bytes .../html/images/relative_view_contents_tree.png | Bin 0 -> 10824 bytes .../images/relative_view_contents_wireframe.png | Bin 0 -> 11862 bytes .../html/images/scheduler_add_event.png | Bin 0 -> 52548 bytes .../html/images/scheduler_customize.png | Bin 0 -> 35339 bytes .../html/images/scheduler_edit.png | Bin 0 -> 45635 bytes .../html/images/scheduler_main.png | Bin 0 -> 51358 bytes .../html/images/scroller_index_1.png | Bin 0 -> 1403 bytes .../html/images/scroller_index_2.png | Bin 0 -> 1328 bytes .../html/images/scroller_index_3.png | Bin 0 -> 1330 bytes .../html/images/scroller_index_current_region.png | Bin 0 -> 7173 bytes .../html/images/selfcamera.png | Bin 0 -> 208890 bytes .../html/images/selfcamera_start.png | Bin 0 -> 289512 bytes .../html/images/sensorapp_list.png | Bin 0 -> 4949 bytes .../html/images/sensorapp_piecharts.png | Bin 0 -> 7018 bytes .../html/images/sensorapp_vectorchart.png | Bin 0 -> 7371 bytes .../html/images/sensorball.png | Bin 0 -> 251512 bytes .../html/images/sensorball_ww.png | Bin 0 -> 174362 bytes .../html/images/simple_home_app_info_view_sd.png | Bin 0 -> 38139 bytes .../images/simple_home_icons_rearrangement_sd.png | Bin 0 -> 43831 bytes .../html/images/simple_home_main_view_sd.png | Bin 0 -> 48269 bytes .../html/images/simple_home_tree.png | Bin 0 -> 15824 bytes .../html/images/spinningarrow_sd.png | Bin 0 -> 6673 bytes .../html/images/stopwatch_sd.png | Bin 0 -> 91850 bytes .../html/images/sunburn_ww.png | Bin 0 -> 114795 bytes .../html/images/systeminfo_sd.png | Bin 0 -> 40787 bytes .../html/images/taskmanager_after_swipe.png | Bin 0 -> 34230 bytes .../html/images/taskmanager_default.png | Bin 0 -> 34309 bytes .../html/images/taskmanager_swipe.png | Bin 0 -> 33681 bytes .../html/images/touchpaint_sd.png | Bin 0 -> 61860 bytes .../html/images/touchpaint_sd_ww.png | Bin 0 -> 44250 bytes .../html/images/ui_application_store_sd.png | Bin 0 -> 34166 bytes .../html/images/ui_application_store_sd_tree.png | Bin 0 -> 6719 bytes .../html/images/ui_calculator_sd.png | Bin 0 -> 30914 bytes .../html/images/ui_calculator_tree.png | Bin 0 -> 13267 bytes .../html/images/ui_clock_sd_alarm.png | Bin 0 -> 19961 bytes .../html/images/ui_clock_sd_alarm_ls.png | Bin 0 -> 23731 bytes .../html/images/ui_clock_sd_alarm_tree.png | Bin 0 -> 13581 bytes .../html/images/ui_clock_sd_alarm_tree_ls.png | Bin 0 -> 3591 bytes .../html/images/ui_clock_sd_timer.png | Bin 0 -> 23266 bytes .../html/images/ui_clock_sd_timer_tree.png | Bin 0 -> 3276 bytes .../html/images/ui_clock_sd_world_clock.png | Bin 0 -> 22132 bytes .../html/images/ui_clock_sd_world_clock_ls.png | Bin 0 -> 9785 bytes .../html/images/ui_clock_sd_world_clock_tree.png | Bin 0 -> 2812 bytes .../html/images/ui_email_sd_compose_view.png | Bin 0 -> 14975 bytes .../images/ui_email_sd_compose_widget_tree.png | Bin 0 -> 2128 bytes .../html/images/ui_email_sd_main_view.png | Bin 0 -> 70333 bytes .../html/images/ui_email_sd_main_view_widget.png | Bin 0 -> 10095 bytes .../html/images/ui_email_sd_main_view_widget2.png | Bin 0 -> 7964 bytes .../html/images/ui_gallery_sd.png | Bin 0 -> 38679 bytes .../html/images/ui_gallery_tree.png | Bin 0 -> 2734 bytes .../html/images/ui_imageviewer_sd.png | Bin 0 -> 31590 bytes .../html/images/ui_imageviewer_tree.png | Bin 0 -> 1875 bytes .../html/images/ui_layout_samples_sd.png | Bin 0 -> 16149 bytes .../html/images/ui_layout_samples_sd_editfield.png | Bin 0 -> 18214 bytes .../html/images/ui_layout_samples_sd_nocontent.png | Bin 0 -> 21188 bytes .../html/images/ui_layout_samples_sd_searchbar.png | Bin 0 -> 25089 bytes .../html/images/ui_layout_signal_sd.png | Bin 0 -> 10055 bytes .../images/ui_layout_signal_sd_button_clicked.png | Bin 0 -> 7600 bytes .../html/images/ui_layout_signal_sd_tree.png | Bin 0 -> 3740 bytes .../html/images/ui_messagebubble_sd.png | Bin 0 -> 43714 bytes .../html/images/ui_messagebubble_tree.png | Bin 0 -> 4648 bytes .../html/images/ui_setting_2nd_sd.png | Bin 0 -> 4584 bytes .../html/images/ui_setting_popup_sd.png | Bin 0 -> 15342 bytes .../html/images/ui_setting_sd.png | Bin 0 -> 25318 bytes .../html/images/ui_setting_tree.png | Bin 0 -> 8767 bytes .../html/images/ui_sns_sd_first_view.png | Bin 0 -> 93689 bytes .../html/images/ui_sns_sd_first_widget_tree.png | Bin 0 -> 4416 bytes .../html/images/ui_sns_sd_view.png | Bin 0 -> 38397 bytes .../html/images/ui_sns_sd_widget_tree.png | Bin 0 -> 21824 bytes .../html/images/ui_theme_extension_sd.png | Bin 0 -> 18092 bytes .../html/images/ui_theme_extension_sd_style.png | Bin 0 -> 26303 bytes .../html/images/ui_theme_extension_sd_tree.png | Bin 0 -> 3483 bytes .../html/images/ui_translatable_layout.png | Bin 0 -> 3186 bytes .../html/images/ui_translatable_text.png | Bin 0 -> 29351 bytes .../html/images/uicomponents_sd.png | Bin 0 -> 35383 bytes .../html/images/voicerecorder_sd.png | Bin 0 -> 148604 bytes .../html/images/w_division.png | Bin 0 -> 113087 bytes .../html/images/wearableuicomponents_sd.png | Bin 0 -> 49314 bytes .../html/images/winsets.png | Bin 0 -> 15600 bytes .../html/images/wn_division.png | Bin 0 -> 26903 bytes .../html/images/wn_icon.png | Bin 0 -> 20817 bytes .../html/images/worldclock_sd.png | Bin 0 -> 37856 bytes .../html/images/ww_division.png | Bin 0 -> 112882 bytes .../html/images/ww_icon.png | Bin 0 -> 25065 bytes org.tizen.sampledescriptions/html/index.htm | 190 ++ .../html/mobile_n/bundle_sd_mn.htm | 1965 ++++++++++++++++++++ .../html/mobile_n/calculator_sd_mn.htm | 696 +++++++ .../html/mobile_n/contacts_sd_mn.htm | 433 +++++ .../html/mobile_n/evas_gl_sd_mn.htm | 303 +++ .../html/mobile_n/file_manager_sd_mn.htm | 862 +++++++++ .../html/mobile_n/glview11_cube_sd_mn.htm | 329 ++++ .../html/mobile_n/glview_cube_sd_mn.htm | 284 +++ .../html/mobile_n/glview_shader_sd_mn.htm | 288 +++ .../html/mobile_n/gps_consumer_sd_mn.htm | 298 +++ .../html/mobile_n/gps_service_sd_mn.htm | 318 ++++ .../html/mobile_n/hybridservice_sd_mn.htm | 275 +++ .../html/mobile_n/mediaapp_sd_mn.htm | 970 ++++++++++ .../html/mobile_n/notificationmanager_sd_mn.htm | 522 ++++++ .../html/mobile_n/paint_sd_mn.htm | 1110 +++++++++++ .../html/mobile_n/pedometer_sd_mn.htm | 407 ++++ .../html/mobile_n/piano_sd_mn.htm | 226 +++ .../html/mobile_n/preference_sd_mn.htm | 1238 ++++++++++++ .../html/mobile_n/scheduler_sd_mn.htm | 384 ++++ .../html/mobile_n/scroller_index_sd_mn.htm | 456 +++++ .../html/mobile_n/sd_mn.htm | 326 ++++ .../html/mobile_n/selfcamera_sd_mn.htm | 222 +++ .../html/mobile_n/sensorapp_sd_mn.htm | 311 ++++ .../html/mobile_n/simple_home_sd_mn.htm | 313 ++++ .../html/mobile_n/taskmanager_sd_mn.htm | 389 ++++ .../html/mobile_n/ui_alignment_sd_mn.htm | 263 +++ .../html/mobile_n/ui_animation_sd_mn.htm | 203 ++ .../html/mobile_n/ui_animator_sd_mn.htm | 176 ++ .../html/mobile_n/ui_app_store_sd_mn.htm | 242 +++ .../html/mobile_n/ui_box_sd_mn.htm | 97 + .../html/mobile_n/ui_calculator_sd_mn.htm | 228 +++ .../html/mobile_n/ui_clock_sd_mn.htm | 437 +++++ .../html/mobile_n/ui_components_sd_mn.htm | 225 +++ .../html/mobile_n/ui_ecore_thread_1_sd_mn.htm | 133 ++ .../html/mobile_n/ui_ecore_thread_2_sd_mn.htm | 168 ++ .../html/mobile_n/ui_ecore_thread_3_sd_mn.htm | 176 ++ .../html/mobile_n/ui_ecore_thread_4_sd_mn.htm | 161 ++ .../html/mobile_n/ui_ecore_thread_5_sd_mn.htm | 175 ++ .../html/mobile_n/ui_ecoreevent_sd_mn.htm | 98 + .../html/mobile_n/ui_edc_format_sd_mn.htm | 194 ++ .../html/mobile_n/ui_edc_map_sd_mn.htm | 111 ++ .../html/mobile_n/ui_elmtransit_sd_mn.htm | 90 + .../html/mobile_n/ui_email_sd_mn.htm | 292 +++ .../html/mobile_n/ui_evas_map_mapping_sd_mn.htm | 128 ++ .../html/mobile_n/ui_evas_map_rotation_sd_mn.htm | 123 ++ .../html/mobile_n/ui_evas_map_sd_mn.htm | 143 ++ .../html/mobile_n/ui_evasevent_sd_mn.htm | 98 + .../html/mobile_n/ui_gallery_sd_mn.htm | 337 ++++ .../html/mobile_n/ui_idler_sd_mn.htm | 116 ++ .../html/mobile_n/ui_image_sd_mn.htm | 107 ++ .../html/mobile_n/ui_inlist_sd_mn.htm | 159 ++ .../html/mobile_n/ui_job_sd_mn.htm | 149 ++ .../html/mobile_n/ui_language_change_sd_mn.htm | 351 ++++ .../html/mobile_n/ui_layout_samples_sd_mn.htm | 254 +++ .../html/mobile_n/ui_layout_signal_sd_mn.htm | 280 +++ .../html/mobile_n/ui_list_sd_mn.htm | 151 ++ .../html/mobile_n/ui_message_bubble_sd_mn.htm | 374 ++++ .../html/mobile_n/ui_proxy_object_sd_mn.htm | 102 + .../html/mobile_n/ui_rectangle_sd_mn.htm | 114 ++ .../html/mobile_n/ui_relative_sd_mn.htm | 233 +++ .../html/mobile_n/ui_setting_sd_mn.htm | 212 +++ .../html/mobile_n/ui_sns_sd_mn.htm | 320 ++++ .../html/mobile_n/ui_stringshare_sd_mn.htm | 94 + .../html/mobile_n/ui_theme_extension_sd_mn.htm | 620 ++++++ .../html/mobile_n/ui_timer_sd_mn.htm | 295 +++ .../html/mobile_w/appcalleecaller_mw.htm | 168 ++ .../html/mobile_w/archivemanager_mw.htm | 1158 ++++++++++++ .../html/mobile_w/bluetoothchat_mw.htm | 655 +++++++ .../html/mobile_w/calculator_mw.htm | 987 ++++++++++ .../html/mobile_w/calendar_mw.htm | 311 ++++ .../html/mobile_w/calllog_mw.htm | 469 +++++ .../html/mobile_w/chatter_mw.htm | 555 ++++++ .../html/mobile_w/compass_mw.htm | 191 ++ .../html/mobile_w/contactlist_mw.htm | 149 ++ .../html/mobile_w/contactsexchanger_mw.htm | 478 +++++ .../html/mobile_w/downloadmanager_mw.htm | 244 +++ .../html/mobile_w/eventmanager_mw.htm | 409 ++++ .../html/mobile_w/exerciseplanner_mw.htm | 310 +++ .../html/mobile_w/filemanager_mw.htm | 317 ++++ .../html/mobile_w/hellotizen_mw.htm | 123 ++ .../html/mobile_w/hybridwebapp_mw.htm | 309 +++ .../html/mobile_w/mediacontent_mw.htm | 186 ++ .../html/mobile_w/moneybook_mw.htm | 200 ++ .../mobile_w/multiprocess_hybrid_package_mw.htm | 62 + .../html/mobile_w/piano_mw.htm | 385 ++++ .../html/mobile_w/sd_mw.htm | 284 +++ .../html/mobile_w/selfcamera_mw.htm | 242 +++ .../html/mobile_w/sensorball_mw.htm | 252 +++ .../html/mobile_w/systeminfo_mw.htm | 231 +++ .../html/mobile_w/touchpaint_mw.htm | 207 +++ .../html/mobile_w/winset_mw.htm | 118 ++ .../html/scripts/common.js | 1752 +++++++++++++++++ org.tizen.sampledescriptions/html/scripts/core.js | 899 +++++++++ .../html/scripts/jquery.util.js | 1441 ++++++++++++++ .../html/scripts/jquery.zclip.min.js | 12 + org.tizen.sampledescriptions/html/scripts/navi.js | 192 ++ .../html/scripts/search.js | 168 ++ .../html/scripts/showhide.js | 204 ++ .../html/scripts/snippet.js | 1478 +++++++++++++++ org.tizen.sampledescriptions/html/sd_n.htm | 44 + org.tizen.sampledescriptions/html/sd_w.htm | 44 + .../html/wearable_n/circleemail_sd_wn.htm | 249 +++ .../html/wearable_n/circlesettings_sd_wn.htm | 354 ++++ .../html/wearable_n/circlesettingtime_sd_wn.htm | 214 +++ .../html/wearable_n/circleuicomponents_sd_wn.htm | 198 ++ .../html/wearable_n/rectemail_sd_wn.htm | 199 ++ .../html/wearable_n/rectsettings_sd_wn.htm | 117 ++ .../html/wearable_n/rectuicomponents_sd_wn.htm | 184 ++ .../html/wearable_n/rectuidialer_sd_wn.htm | 192 ++ .../html/wearable_n/sd_wn.htm | 103 + .../html/wearable_w/altimeter_ww.htm | 713 +++++++ .../html/wearable_w/analogwatch_ww.htm | 151 ++ .../html/wearable_w/appcalleecaller_ww.htm | 169 ++ .../html/wearable_w/basicwatch_ww.htm | 208 +++ .../html/wearable_w/calculator_ww.htm | 409 ++++ .../html/wearable_w/calendar_ww.htm | 182 ++ .../html/wearable_w/camera_ww.htm | 723 +++++++ .../html/wearable_w/compass_ww.htm | 105 ++ .../html/wearable_w/digitalwatch_ww.htm | 168 ++ .../html/wearable_w/hellotizen_ww.htm | 124 ++ .../html/wearable_w/minigallery_ww.htm | 174 ++ .../html/wearable_w/moneybook_ww.htm | 214 +++ .../html/wearable_w/newsfeed_ww.htm | 132 ++ .../html/wearable_w/sd_ww.htm | 246 +++ .../html/wearable_w/sensorball_ww.htm | 270 +++ .../html/wearable_w/spinning_arrow_ww.htm | 153 ++ .../html/wearable_w/stopwatch_ww.htm | 508 +++++ .../html/wearable_w/sunburnmonitor_ww.htm | 204 ++ .../html/wearable_w/touchpaint_ww.htm | 224 +++ .../html/wearable_w/voicerecorder_ww.htm | 660 +++++++ .../html/wearable_w/wearableuicomponents_ww.htm | 109 ++ .../html/wearable_w/worldclock_ww.htm | 176 ++ org.tizen.sampledescriptions/index.xml | 139 ++ org.tizen.sampledescriptions/plugin.xml | 8 + org.tizen.tutorials/.project | 2 +- org.tizen.tutorials/html/index.htm | 47 +- .../html/native/account/account_tutorials_n.htm | 70 + .../oauth2_tutorial_n.htm} | 68 +- .../{sync => account}/sync_manager_tutorial_n.htm | 83 +- .../app_framework/app_manager_tutorial_n.htm | 63 +- .../app_framework/application_tutorial_n.htm | 214 ++- .../native/app_framework/bundle_tutorial_n.htm | 6 +- .../app_framework/data_control_tutorial_n.htm | 147 +- .../app_framework/message_port_tutorial_n.htm | 9 +- .../native/app_framework/package_tutorial_n.htm | 10 +- .../html/native/app_framework/watch_tutorial_n.htm | 6 - .../native/app_framework/widget_tutorial_n.htm | 6 +- .../html/native/base/sqlite_tutorial_n.htm | 23 +- .../html/native/content/download_tutorial_n.htm | 6 +- .../native/content/media_content_tutorial_n.htm | 62 +- .../html/native/content/mime_type_tutorial_n.htm | 11 +- .../html/native/location/geofence_tutorial_n.htm | 2 +- .../html/native/location/maps_tutorial_n.htm | 6 +- .../html/native/messaging/email_tutorial_n.htm | 12 +- .../html/native/messaging/push_tutorial_n.htm | 6 +- .../html/native/multimedia/audio_io_tutorial_n.htm | 495 +++-- .../html/native/multimedia/camera_tutorial_n.htm | 12 +- .../native/multimedia/image_util_tutorial_n.htm | 43 +- .../native/multimedia/media_codec_tutorial_n.htm | 433 ++--- .../native/multimedia/media_tools_tutorial_n.htm | 69 +- .../native/multimedia/media_vision_tutorial_n.htm | 432 +++++ .../multimedia/metadata_editor_tutorial_n.htm | 8 +- .../native/multimedia/multimedia_tutorials_n.htm | 1 + .../html/native/multimedia/player_tutorial_n.htm | 93 +- .../multimedia/screen_mirroring_tutorial_n.htm | 18 +- .../native/multimedia/wav_player_tutorial_n.htm | 5 +- .../html/native/network/connection_tutorial_n.htm | 104 +- .../html/native/network/smartcard_tutorial_n.htm | 2 +- .../html/native/security/key_tutorial_n.htm | 10 +- .../html/native/social/account_tutorial_n.htm | 12 +- .../html/native/social/calendar_tutorial_n.htm | 14 +- .../html/native/social/contact_tutorial_n.htm | 65 +- .../native/social/service_adaptor_client_n.html | 330 ---- .../native/social/service_adaptor_tutorial_n.htm | 349 ++++ .../html/native/social/social_tutorials_n.htm | 4 +- .../html/native/sync/sync_adapter_tutorial_n.htm | 136 -- .../html/native/system/media_key_tutorial_n.htm | 2 +- .../html/native/system/system_tutorials_n.htm | 8 +- .../html/native/system/t-trace_tutorial_n.htm | 151 ++ .../phonenumber_util_tutorial_n.htm | 16 +- .../native/telephony/telephony_info_tutorial_n.htm | 498 +++++ .../native/telephony/telephony_tutorials_n.htm | 474 +---- org.tizen.tutorials/html/native/tutorials_n.htm | 11 +- .../ui/animation_event_types_tutorials_n.htm | 8 +- .../html/native/ui/ecore_effects_tutorial_n.htm | 4 +- .../html/native/ui/edje_effects_tutorial_n.htm | 8 +- .../html/native/ui/efl_optimization_tutorial_n.htm | 4 +- .../html/native/ui/efl_tutorial_n.htm | 4 +- .../html/native/ui/elm_transit_tutorial_n.htm | 4 +- .../html/native/ui/eom_tutorial_n.htm | 16 +- .../html/native/ui/font_settings_tutorial_n.htm | 4 +- .../html/native/ui/form_tutorial_mn.htm | 2 +- .../html/native/ui/menu_tutorial_mn.htm | 2 +- .../html/native/ui/multipoint_touch_tutorial_n.htm | 4 +- .../html/native/ui/naviframe_tutorial_mn.htm | 2 +- .../html/native/ui/transit_effect_tutorial_n.htm | 4 +- .../html/native/ui/ui_layout_tutorial_mn.htm | 2 +- .../html/native/ui/ui_tutorials_n.htm | 2 +- .../html/native/uix/ime_tutorial_n.htm | 426 +++++ .../html/native/uix/uix_tutorials_n.htm | 7 +- .../native/uix/voicecontrol_elm_tutorial_n.htm | 386 ++++ .../html/native/uix/voicecontrol_tutorial_n.htm | 652 +++++++ .../voicecontrol_tutorials_n.htm} | 51 +- .../html/native/web/web_tutorials_n.htm | 7 +- .../communication/bluetooth_le_tutorial_w.htm | 487 +++++ .../tizen/communication/bluetooth_tutorial_w.htm | 399 +--- .../web/tizen/communication/comm_tutorials_w.htm | 1 + .../web/tizen/communication/nfc_tutorial_w.htm | 2 +- .../tizen/communication/task_bluetoothchat_w.htm | 6 +- .../web/tizen/communication/task_chatter_w.htm | 4 +- .../communication/task_contactsexchanger_w.htm | 4 +- .../web/tizen/input_output/task_filemanager_w.htm | 2 +- .../html/web/tizen/social/task_calllog_w.htm | 2 +- .../html/web/tizen/social/task_eventmanager_w.htm | 6 +- .../html/web/tizen/system/task_sensorball_w.htm | 2 +- .../html/web/tizen/system/task_systeminfo_w.htm | 2 +- .../html/web/tizen/tutorials_tizen_w.htm | 4 +- .../html/web/tizen/uifw/uifw_tutorial_w.htm | 847 --------- .../html/web/w3c/device/task_touch_paint_mw.htm | 2 +- .../html/web/w3c/dom/basic_ui_tutorial_w.htm | 2 +- .../html/web/w3c/dom/selector_tutorial_w.htm | 2 +- .../html/web/w3c/dom/transition_tutorial_w.htm | 4 +- org.tizen.tutorials/index.xml | 32 +- 684 files changed, 56069 insertions(+), 8024 deletions(-) create mode 100644 org.tizen.devtools/html/images/color_24.png create mode 100644 org.tizen.devtools/html/images/ui_builder_1.png rename org.tizen.devtools/html/{common_tools/t_trace.htm => native_tools/t_trace_n.htm} (94%) delete mode 100644 org.tizen.gettingstarted/html/images/breakpoint_set.png delete mode 100644 org.tizen.gettingstarted/html/images/create_project.png delete mode 100644 org.tizen.gettingstarted/html/images/helloworld_emulator.png delete mode 100644 org.tizen.gettingstarted/html/images/helloworld_helloworld.png delete mode 100644 org.tizen.gettingstarted/html/images/helloworld_js.png delete mode 100644 org.tizen.gettingstarted/html/images/wearable_web_application_project.png delete mode 100644 org.tizen.gettingstarted/html/images/web_application_project.png create mode 100644 org.tizen.guides/html/images/ime_lifecycle.png create mode 100644 org.tizen.guides/html/images/ime_list.png create mode 100644 org.tizen.guides/html/images/ime_selector.png create mode 100644 org.tizen.guides/html/images/mediavision_code_128.png create mode 100644 org.tizen.guides/html/images/mediavision_code_39.png create mode 100644 org.tizen.guides/html/images/mediavision_ean_13.png create mode 100644 org.tizen.guides/html/images/mediavision_ean_8.png create mode 100644 org.tizen.guides/html/images/mediavision_interleaved_2_5.png create mode 100644 org.tizen.guides/html/images/mediavision_qr.png create mode 100644 org.tizen.guides/html/images/mediavision_upc_a.png create mode 100644 org.tizen.guides/html/images/mediavision_upc_e.png delete mode 100644 org.tizen.guides/html/images/service_adaptor_structure.jpg create mode 100644 org.tizen.guides/html/images/service_adaptor_structure.png create mode 100644 org.tizen.guides/html/images/setting_to_clock.png create mode 100644 org.tizen.guides/html/images/trace.png create mode 100644 org.tizen.guides/html/images/voice_control.png create mode 100644 org.tizen.guides/html/images/voice_control_elm.png create mode 100644 org.tizen.guides/html/images/voice_control_elm_screen.png create mode 100644 org.tizen.guides/html/images/watch_app_lifecycle.png create mode 100644 org.tizen.guides/html/images/widget_app_lifecycle.png create mode 100644 org.tizen.guides/html/images/widget_instance_lifecycle.png create mode 100644 org.tizen.guides/html/native/account/account_guide_n.htm rename org.tizen.guides/html/native/{oauth2/oauth2_guide_n.htm => account/oauth2_n.htm} (93%) rename org.tizen.guides/html/native/{sync/sync_guide_n.htm => account/sync_manager_n.htm} (92%) create mode 100644 org.tizen.guides/html/native/multimedia/media_vision_n.htm create mode 100644 org.tizen.guides/html/native/system/t-trace_n.htm rename org.tizen.guides/html/native/{social => telephony}/phonenumber_util_n.htm (87%) create mode 100644 org.tizen.guides/html/native/telephony/telephony_info_n.htm create mode 100644 org.tizen.guides/html/native/uix/ime_n.htm create mode 100644 org.tizen.guides/html/native/uix/voicecontrol_elm_n.htm create mode 100644 org.tizen.guides/html/native/uix/voicecontrol_guide_n.htm create mode 100644 org.tizen.guides/html/native/uix/voicecontrol_n.htm create mode 100644 org.tizen.sampledescriptions/.project create mode 100644 org.tizen.sampledescriptions/META-INF/MANIFEST.MF create mode 100644 org.tizen.sampledescriptions/about.html create mode 100644 org.tizen.sampledescriptions/build.properties create mode 100644 org.tizen.sampledescriptions/html/cover_page.htm create mode 100644 org.tizen.sampledescriptions/html/css/snippet.css create mode 100644 org.tizen.sampledescriptions/html/css/styles.css create mode 100644 org.tizen.sampledescriptions/html/images/DigitalWatch_sd1.png create mode 100644 org.tizen.sampledescriptions/html/images/DigitalWatch_sd2.png create mode 100644 org.tizen.sampledescriptions/html/images/alignment_main.png create mode 100644 org.tizen.sampledescriptions/html/images/alignment_view_contents_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/alignment_view_contents_wireframe.png create mode 100644 org.tizen.sampledescriptions/html/images/altimeter_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/analogwatch_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/animation_main.png create mode 100644 org.tizen.sampledescriptions/html/images/animation_move.png create mode 100644 org.tizen.sampledescriptions/html/images/animation_scale_down.png create mode 100644 org.tizen.sampledescriptions/html/images/animation_view_contents_wire_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/animator_sample.png create mode 100644 org.tizen.sampledescriptions/html/images/appcalleecaller_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/appcalleecaller_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/archivemanager_archive_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/archivemanager_browse_archive_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/archivemanager_browse_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/archivemanager_compress_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/archivemanager_confirm_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/archivemanager_extract_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/archivemanager_input_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/archivemanager_root_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/basicwatch_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bg_util_bar.gif create mode 100644 org.tizen.sampledescriptions/html/images/bluetoothchat.png create mode 100644 org.tizen.sampledescriptions/html/images/box_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/btn_top.gif create mode 100644 org.tizen.sampledescriptions/html/images/bundle_data_sink_layout_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_data_sink_view_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_data_source_basic_view_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_data_source_filled_view_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_data_source_layout_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_edje_layout_data_sink_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_edje_layout_data_source_buttons_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_edje_layout_data_source_edit_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_edje_layout_data_source_list_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_edje_layout_data_source_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_edje_layout_main_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_general_edje_data_sink_structure_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_general_edje_data_source_structure_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_ui_layout_data_sink_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_ui_layout_data_source_buttons_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_ui_layout_data_source_edit_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_ui_layout_data_source_list_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_ui_layout_data_source_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_ui_layout_main_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_workflow_bundle_receive_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_workflow_bundle_send_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_workflow_data_creation_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_workflow_object_structure_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/bundle_workflow_startup_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/calculator_main_view.png create mode 100644 org.tizen.sampledescriptions/html/images/calculator_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/calculator_sd_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/calculator_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/calculator_wire.png create mode 100644 org.tizen.sampledescriptions/html/images/calculator_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/calendar_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/calendar_sd_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/calllog.png create mode 100644 org.tizen.sampledescriptions/html/images/camera_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/chatter.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_email_detail_view.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_email_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_email_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_setting_brightness_view.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_setting_information_view.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_setting_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_setting_time_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_setting_time_set_time_view.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_setting_time_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_setting_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_setting_volume_view.png create mode 100644 org.tizen.sampledescriptions/html/images/circle_ui_components_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/compass.png create mode 100644 org.tizen.sampledescriptions/html/images/compass_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/contactlist_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/contacts.png create mode 100644 org.tizen.sampledescriptions/html/images/contacts_edit.png create mode 100644 org.tizen.sampledescriptions/html/images/contacts_favorites.png create mode 100644 org.tizen.sampledescriptions/html/images/contactsexchanger.png create mode 100644 org.tizen.sampledescriptions/html/images/content_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/digitalwatch_ww1.png create mode 100644 org.tizen.sampledescriptions/html/images/digitalwatch_ww2.png create mode 100644 org.tizen.sampledescriptions/html/images/downloadmanager.png create mode 100644 org.tizen.sampledescriptions/html/images/ecore_thread_1.png create mode 100644 org.tizen.sampledescriptions/html/images/ecore_thread_2.png create mode 100644 org.tizen.sampledescriptions/html/images/ecore_thread_3.png create mode 100644 org.tizen.sampledescriptions/html/images/ecore_thread_4.png create mode 100644 org.tizen.sampledescriptions/html/images/ecore_thread_5.png create mode 100644 org.tizen.sampledescriptions/html/images/edc_format_change_image.png create mode 100644 org.tizen.sampledescriptions/html/images/edc_format_main.png create mode 100644 org.tizen.sampledescriptions/html/images/edc_format_view_contents_wire_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/edc_main_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/edc_map.png create mode 100644 org.tizen.sampledescriptions/html/images/eina_list.png create mode 100644 org.tizen.sampledescriptions/html/images/elmtransit.png create mode 100644 org.tizen.sampledescriptions/html/images/evas_gl_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/evas_map.png create mode 100644 org.tizen.sampledescriptions/html/images/evas_map_mapping.png create mode 100644 org.tizen.sampledescriptions/html/images/evas_map_rotation.png create mode 100644 org.tizen.sampledescriptions/html/images/evasevent.png create mode 100644 org.tizen.sampledescriptions/html/images/evasevent_2.png create mode 100644 org.tizen.sampledescriptions/html/images/eventmanager.png create mode 100644 org.tizen.sampledescriptions/html/images/exerciseplanner.png create mode 100644 org.tizen.sampledescriptions/html/images/filemanager.png create mode 100644 org.tizen.sampledescriptions/html/images/filemanager_functionalities.png create mode 100644 org.tizen.sampledescriptions/html/images/filemanager_main.png create mode 100644 org.tizen.sampledescriptions/html/images/filemanager_main_view.png create mode 100644 org.tizen.sampledescriptions/html/images/filemanager_storage_view.png create mode 100644 org.tizen.sampledescriptions/html/images/filemanager_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/glview11_cube.png create mode 100644 org.tizen.sampledescriptions/html/images/glview_cube.png create mode 100644 org.tizen.sampledescriptions/html/images/glview_shader.png create mode 100644 org.tizen.sampledescriptions/html/images/gps_consumer_inside_boundary_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/gps_consumer_no_service_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/gps_consumer_outside_boundary_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/hellotizen_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/hellotizen_screen.png create mode 100644 org.tizen.sampledescriptions/html/images/hybridwebapp_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ico_arr_hidden.gif create mode 100644 org.tizen.sampledescriptions/html/images/ico_bullet_2_7.gif create mode 100644 org.tizen.sampledescriptions/html/images/idler.png create mode 100644 org.tizen.sampledescriptions/html/images/image_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_audio_recorder.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_camera.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_camplay.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_color_converter.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_equalizer.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_flip_rotate.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_frame_extractor.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_gif_viewer.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_gles.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_image_converter.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_image_resize.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_image_viewer.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_inout.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_main.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_mediaplayer.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_multi.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_tone_player.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_video.png create mode 100644 org.tizen.sampledescriptions/html/images/mediaapp_vidplayer.png create mode 100644 org.tizen.sampledescriptions/html/images/minigallery_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/mn_division.png create mode 100644 org.tizen.sampledescriptions/html/images/mn_icon.png create mode 100644 org.tizen.sampledescriptions/html/images/moneybook_mw.png create mode 100644 org.tizen.sampledescriptions/html/images/moneybook_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/mw_division.png create mode 100644 org.tizen.sampledescriptions/html/images/mw_icon.png create mode 100644 org.tizen.sampledescriptions/html/images/n_division.png create mode 100644 org.tizen.sampledescriptions/html/images/newsfeed_screen.png create mode 100644 org.tizen.sampledescriptions/html/images/notification_manager.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_app_layout.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_app_layout_drawing.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_colorselector.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_conformant.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_draw_area.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_evas.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_frame.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_gui_edc.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_gui_layout.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_gui_layout_main.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_layout.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_mouse_callback_call_order.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_rectangle.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_toolbar.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_win.png create mode 100644 org.tizen.sampledescriptions/html/images/paint_workflow.png create mode 100644 org.tizen.sampledescriptions/html/images/pedometer.png create mode 100644 org.tizen.sampledescriptions/html/images/pedometer_accel_data.png create mode 100644 org.tizen.sampledescriptions/html/images/piano.png create mode 100644 org.tizen.sampledescriptions/html/images/piano_main.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_main_view_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_ui_structure_edje_buttons_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_ui_structure_edje_input_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_ui_structure_edje_main_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_ui_structure_edje_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_ui_structure_elementary_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_ui_view_buttons_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_ui_view_input_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_ui_view_list_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_ui_view_main_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/preference_workflow_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/proxy_object.png create mode 100644 org.tizen.sampledescriptions/html/images/rectangle.png create mode 100644 org.tizen.sampledescriptions/html/images/rectemail2_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/rectemail_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/rectemail_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/rectsettings2_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/rectsettings_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/rectsettings_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/rectuicomponents_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/rectuidialer_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/rectuidialer_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/relative_main.png create mode 100644 org.tizen.sampledescriptions/html/images/relative_view_contents_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/relative_view_contents_wireframe.png create mode 100644 org.tizen.sampledescriptions/html/images/scheduler_add_event.png create mode 100644 org.tizen.sampledescriptions/html/images/scheduler_customize.png create mode 100644 org.tizen.sampledescriptions/html/images/scheduler_edit.png create mode 100644 org.tizen.sampledescriptions/html/images/scheduler_main.png create mode 100644 org.tizen.sampledescriptions/html/images/scroller_index_1.png create mode 100644 org.tizen.sampledescriptions/html/images/scroller_index_2.png create mode 100644 org.tizen.sampledescriptions/html/images/scroller_index_3.png create mode 100644 org.tizen.sampledescriptions/html/images/scroller_index_current_region.png create mode 100644 org.tizen.sampledescriptions/html/images/selfcamera.png create mode 100644 org.tizen.sampledescriptions/html/images/selfcamera_start.png create mode 100644 org.tizen.sampledescriptions/html/images/sensorapp_list.png create mode 100644 org.tizen.sampledescriptions/html/images/sensorapp_piecharts.png create mode 100644 org.tizen.sampledescriptions/html/images/sensorapp_vectorchart.png create mode 100644 org.tizen.sampledescriptions/html/images/sensorball.png create mode 100644 org.tizen.sampledescriptions/html/images/sensorball_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/simple_home_app_info_view_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/simple_home_icons_rearrangement_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/simple_home_main_view_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/simple_home_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/spinningarrow_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/stopwatch_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/sunburn_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/systeminfo_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/taskmanager_after_swipe.png create mode 100644 org.tizen.sampledescriptions/html/images/taskmanager_default.png create mode 100644 org.tizen.sampledescriptions/html/images/taskmanager_swipe.png create mode 100644 org.tizen.sampledescriptions/html/images/touchpaint_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/touchpaint_sd_ww.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_application_store_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_application_store_sd_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_calculator_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_calculator_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_clock_sd_alarm.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_clock_sd_alarm_ls.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_clock_sd_alarm_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_clock_sd_alarm_tree_ls.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_clock_sd_timer.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_clock_sd_timer_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_clock_sd_world_clock.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_clock_sd_world_clock_ls.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_clock_sd_world_clock_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_email_sd_compose_view.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_email_sd_compose_widget_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_email_sd_main_view.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_email_sd_main_view_widget.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_email_sd_main_view_widget2.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_gallery_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_gallery_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_imageviewer_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_imageviewer_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_layout_samples_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_layout_samples_sd_editfield.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_layout_samples_sd_nocontent.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_layout_samples_sd_searchbar.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_layout_signal_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_layout_signal_sd_button_clicked.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_layout_signal_sd_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_messagebubble_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_messagebubble_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_setting_2nd_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_setting_popup_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_setting_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_setting_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_sns_sd_first_view.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_sns_sd_first_widget_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_sns_sd_view.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_sns_sd_widget_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_theme_extension_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_theme_extension_sd_style.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_theme_extension_sd_tree.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_translatable_layout.png create mode 100644 org.tizen.sampledescriptions/html/images/ui_translatable_text.png create mode 100644 org.tizen.sampledescriptions/html/images/uicomponents_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/voicerecorder_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/w_division.png create mode 100644 org.tizen.sampledescriptions/html/images/wearableuicomponents_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/winsets.png create mode 100644 org.tizen.sampledescriptions/html/images/wn_division.png create mode 100644 org.tizen.sampledescriptions/html/images/wn_icon.png create mode 100644 org.tizen.sampledescriptions/html/images/worldclock_sd.png create mode 100644 org.tizen.sampledescriptions/html/images/ww_division.png create mode 100644 org.tizen.sampledescriptions/html/images/ww_icon.png create mode 100644 org.tizen.sampledescriptions/html/index.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/bundle_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/calculator_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/contacts_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/evas_gl_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/file_manager_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/glview11_cube_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/glview_cube_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/glview_shader_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/gps_consumer_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/gps_service_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/hybridservice_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/mediaapp_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/notificationmanager_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/paint_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/pedometer_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/piano_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/preference_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/scheduler_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/scroller_index_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/selfcamera_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/sensorapp_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/simple_home_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/taskmanager_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_alignment_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_animation_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_animator_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_app_store_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_box_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_calculator_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_clock_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_components_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_ecore_thread_1_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_ecore_thread_2_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_ecore_thread_3_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_ecore_thread_4_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_ecore_thread_5_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_ecoreevent_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_edc_format_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_edc_map_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_elmtransit_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_email_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_evas_map_mapping_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_evas_map_rotation_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_evas_map_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_evasevent_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_gallery_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_idler_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_image_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_inlist_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_job_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_language_change_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_layout_samples_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_layout_signal_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_list_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_message_bubble_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_proxy_object_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_rectangle_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_relative_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_setting_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_sns_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_stringshare_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_theme_extension_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_n/ui_timer_sd_mn.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/appcalleecaller_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/archivemanager_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/bluetoothchat_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/calculator_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/calendar_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/calllog_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/chatter_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/compass_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/contactlist_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/contactsexchanger_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/downloadmanager_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/eventmanager_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/exerciseplanner_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/filemanager_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/hellotizen_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/hybridwebapp_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/mediacontent_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/moneybook_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/multiprocess_hybrid_package_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/piano_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/sd_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/selfcamera_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/sensorball_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/systeminfo_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/touchpaint_mw.htm create mode 100644 org.tizen.sampledescriptions/html/mobile_w/winset_mw.htm create mode 100644 org.tizen.sampledescriptions/html/scripts/common.js create mode 100644 org.tizen.sampledescriptions/html/scripts/core.js create mode 100644 org.tizen.sampledescriptions/html/scripts/jquery.util.js create mode 100644 org.tizen.sampledescriptions/html/scripts/jquery.zclip.min.js create mode 100644 org.tizen.sampledescriptions/html/scripts/navi.js create mode 100644 org.tizen.sampledescriptions/html/scripts/search.js create mode 100644 org.tizen.sampledescriptions/html/scripts/showhide.js create mode 100644 org.tizen.sampledescriptions/html/scripts/snippet.js create mode 100644 org.tizen.sampledescriptions/html/sd_n.htm create mode 100644 org.tizen.sampledescriptions/html/sd_w.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_n/circleemail_sd_wn.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_n/circlesettings_sd_wn.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_n/circlesettingtime_sd_wn.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_n/circleuicomponents_sd_wn.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_n/rectemail_sd_wn.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_n/rectsettings_sd_wn.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_n/rectuicomponents_sd_wn.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_n/rectuidialer_sd_wn.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_n/sd_wn.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/altimeter_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/analogwatch_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/appcalleecaller_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/basicwatch_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/calculator_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/calendar_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/camera_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/compass_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/digitalwatch_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/hellotizen_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/minigallery_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/moneybook_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/newsfeed_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/sd_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/sensorball_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/spinning_arrow_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/stopwatch_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/sunburnmonitor_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/touchpaint_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/voicerecorder_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/wearableuicomponents_ww.htm create mode 100644 org.tizen.sampledescriptions/html/wearable_w/worldclock_ww.htm create mode 100644 org.tizen.sampledescriptions/index.xml create mode 100644 org.tizen.sampledescriptions/plugin.xml create mode 100644 org.tizen.tutorials/html/native/account/account_tutorials_n.htm rename org.tizen.tutorials/html/native/{oauth2/oauth2_tutorials_n.htm => account/oauth2_tutorial_n.htm} (89%) rename org.tizen.tutorials/html/native/{sync => account}/sync_manager_tutorial_n.htm (78%) create mode 100644 org.tizen.tutorials/html/native/multimedia/media_vision_tutorial_n.htm delete mode 100644 org.tizen.tutorials/html/native/social/service_adaptor_client_n.html create mode 100644 org.tizen.tutorials/html/native/social/service_adaptor_tutorial_n.htm delete mode 100644 org.tizen.tutorials/html/native/sync/sync_adapter_tutorial_n.htm create mode 100644 org.tizen.tutorials/html/native/system/t-trace_tutorial_n.htm rename org.tizen.tutorials/html/native/{social => telephony}/phonenumber_util_tutorial_n.htm (79%) create mode 100644 org.tizen.tutorials/html/native/telephony/telephony_info_tutorial_n.htm create mode 100644 org.tizen.tutorials/html/native/uix/ime_tutorial_n.htm create mode 100644 org.tizen.tutorials/html/native/uix/voicecontrol_elm_tutorial_n.htm create mode 100644 org.tizen.tutorials/html/native/uix/voicecontrol_tutorial_n.htm rename org.tizen.tutorials/html/native/{sync/sync_tutorials_n.htm => uix/voicecontrol_tutorials_n.htm} (63%) create mode 100644 org.tizen.tutorials/html/web/tizen/communication/bluetooth_le_tutorial_w.htm delete mode 100644 org.tizen.tutorials/html/web/tizen/uifw/uifw_tutorial_w.htm diff --git a/org.tizen.devtools/.project b/org.tizen.devtools/.project index f6fa5d6..a35a122 100644 --- a/org.tizen.devtools/.project +++ b/org.tizen.devtools/.project @@ -1,6 +1,6 @@ - org.tizen.devtools_2.3.0 + org.tizen.devtools_2.4.0 diff --git a/org.tizen.devtools/META-INF/MANIFEST.MF b/org.tizen.devtools/META-INF/MANIFEST.MF index 1f0fb63..bf52ba8 100644 --- a/org.tizen.devtools/META-INF/MANIFEST.MF +++ b/org.tizen.devtools/META-INF/MANIFEST.MF @@ -1,6 +1,6 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 1 -Bundle-Name: Tizen Development Environment and Tools +Bundle-Name: Tizen Tools Bundle-SymbolicName: org.tizen.devtools;singleton=true Bundle-Version: 2.4.0 Bundle-Vendor: The Linux Foundation diff --git a/org.tizen.devtools/html/common_tools/certificate_registration.htm b/org.tizen.devtools/html/common_tools/certificate_registration.htm index b330ed8..b9c60fc 100644 --- a/org.tizen.devtools/html/common_tools/certificate_registration.htm +++ b/org.tizen.devtools/html/common_tools/certificate_registration.htm @@ -26,7 +26,7 @@

Certificate Registration

-

To create packages or launch applications, you must register an author certificate in the Tizen IDE.

+

To build and debug projects, to run projects as applications on an Emulator, dynamic analyzer, or external devices, to create packages, or to launch applications, you must register an author certificate in the Tizen IDE.

To register an author certificate:

  1. In the Tizen IDE, go to Window > Preferences > Tizen SDK > Security Profiles.
  2. @@ -37,9 +37,9 @@

    To change distributor certificates, select a table item and then click Edit in the Distributor Certificate panel.

    The first distributor certificate is required and the default information is filled automatically when a profile is created. The second distributor certificate is optional and is used only for special purposes. In general, you are not required to modify distributor certificates.

    -

    Figure: Author certificate

    +

    Figure: Security Profiles

    -

    Author certificate

    +

    Security Profiles

    diff --git a/org.tizen.devtools/html/common_tools/emulator.htm b/org.tizen.devtools/html/common_tools/emulator.htm index 7b534eb..03b50df 100644 --- a/org.tizen.devtools/html/common_tools/emulator.htm +++ b/org.tizen.devtools/html/common_tools/emulator.htm @@ -360,12 +360,12 @@ $egrep -c '(vmx|svm)' /proc/cpuinfo
    • Emulator name (the top row in the menu) -

      Display the Detailed Info window, showing the following information.

      +

      Display the Detailed Info window, showing the Shortcut Info and VM Info tabs. The Shortcut Info tab lists the Emulator keyboard shortcuts and the VM Info tab defines the virtual machine details.

      - + - + @@ -436,95 +436,7 @@ $egrep -c '(vmx|svm)' /proc/cpuinfo
      Tab: VM InfoTable: VM Info tab
      FeatureFeature Description
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Tab: Shortcut Info
      FunctionKey sequence
      Always on TopCtrl+F2
      CloseF4
      Control PanelCtrl+F6
      Detailed InfoCtrl+F1
      Force CloseCtrl+F4
      Rotate nextCtrl+Num+9
      Rotate prevCtrl+Num+7
      Scale nextCtrl+F10
      Scale prevCtrl+F9
      Screen ShotCtrl+F7
      ShellCtrl+F5
      HomeF1
      MenuF2
      PowerF3
      Volume +Ctrl+Num++
      Volume -Ctrl+Num+-
    • +
    • Always On Top

      Select this option to keep the Emulator window on top of other windows.

      @@ -784,176 +696,19 @@ $egrep -c '(vmx|svm)' /proc/cpuinfo Yes You can make and receive a call through the Call tab. You can also send and receive SMS messages through the SMS tab. - - - + + Memory + Yes + Yes + You can set the low memory status using the radio buttons. + + +
    -

    The ECP supports the following shortcuts:

    -
      -
    • Key shortcuts for Windows® and Ubuntu® (Alt + <Key>) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      CommonMobileWearable
      KeyDeviceKeyDeviceKeyDevice
      DDevice TreeBBatteryBBattery
      NNetworkRRSSIA3-Axis sensor
      UUninstallerA3-Axis sensorILight
      HHDS (Host Directory Sharing)ILightXProximity
      XProximityEPressure
      EPressureVUltraviolet
      VUltravioletMHeart Rate Monitor
      MHeart Rate MonitorGTouch gesture
      KEar JackSUSB
      SUSBOMemory
      DSD Card
      LLocation
      TTelephony
      -
    • -
    • Arrows and tabs in the menu - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      KeyAction
      Up ArrowUpper menu focus movement
      Down ArrowUnderneath menu focus movement
      Left ArrowCollapse tree menu
      Right ArrowExpand tree menu
      TabMove focus to next control
      Shift + TabMove focus to previous control
      EnterMenu selection
      -
    • -
    +

    Various keyboard shortcuts are available to execute ECP tasks.

    +

    Emulator Control Panel CLI

    @@ -969,9 +724,9 @@ $egrep -c '(vmx|svm)' /proc/cpuinfo
    • Session mode

      You can access this mode by running the binary without any parameters. The mode keeps a session until it is exited. You can exit by entering the exit command.

    • Shell mode -

      This mode is used for one-time message handling.

    -

    Figure: Session and shell modes

    -

    Session and shell modes

    +

    This mode is used for one-time message handling.

    +

    Figure: Session and shell modes

    +

    Session and shell modes

    In Linux, the bash-based auto-completion is used with the TAB button.

    @@ -1014,11 +769,11 @@ $egrep -c '(vmx|svm)' /proc/cpuinfo hds hds mount <host path> <guest path> - Enable the host directory sharing feature between the specified <host path> and Emulator's <guest path>. The specified path must be a folder, not a file. + Enable the host directory sharing feature between the specified <host path> and the Emulator's <guest path>. The specified path must be a folder, not a file. hds unmount <id> - Unmount the mounted host directory sharing path. The id is a HDS id and you can get it by hds status. + Unmount the mounted host directory sharing path. The id is the HDS ID and you can get it from the hds status command. hds status @@ -1147,7 +902,7 @@ $egrep -c '(vmx|svm)' /proc/cpuinfo rssi status - SD card + SD card attach Yes No diff --git a/org.tizen.devtools/html/common_tools/emulator_features.htm b/org.tizen.devtools/html/common_tools/emulator_features.htm index 37bb6c6..0afc6e9 100644 --- a/org.tizen.devtools/html/common_tools/emulator_features.htm +++ b/org.tizen.devtools/html/common_tools/emulator_features.htm @@ -105,8 +105,8 @@ style="display: block; text-align: center; margin-left: auto; margin-right: auto
    1. Run the Emulator Manager and click Create New or Modify.
    2. In the File Sharing section of the VM property, enable the Sharing button and select a directory to share.
    3. -
    4. Start the Emulator.
    5. -
    6. The host machine's directory is shown as /mnt/host in the Emulator.
    7. +
    8. Start the Emulator. +

      The host machine's directory is shown as /mnt/host in the Emulator.

    You can also add a shared directory in the Emulator Control Panel:

    @@ -308,6 +308,7 @@ src="../images/emulator_nat_architecture.png"/>

For more information, see Connection from Host OS to Guest OS by option -redir.

+

Bridge (Bridged Network)

@@ -1016,4 +1017,4 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga - + \ No newline at end of file diff --git a/org.tizen.devtools/html/common_tools/keyboard_shortcuts.htm b/org.tizen.devtools/html/common_tools/keyboard_shortcuts.htm index 841dc03..660688f 100644 --- a/org.tizen.devtools/html/common_tools/keyboard_shortcuts.htm +++ b/org.tizen.devtools/html/common_tools/keyboard_shortcuts.htm @@ -35,6 +35,8 @@
  • Dynamic Analyzer
  • Emulator Manager
  • Emulator
  • +
  • Emulator Control Panel (ECP)
  • +
  • Enventor
  • @@ -866,30 +868,30 @@ Always on Top - windows ubuntu mac + windows ubuntu mac Ctrl+F2 - + Close windows ubuntu mac F4 - + Control Panel windows ubuntu mac Ctrl+F6 - + Detailed Info windows ubuntu mac Ctrl+F1 - + Force Close windows ubuntu mac Ctrl+F4 - + Rotate next windows ubuntu mac Ctrl+Num+9 @@ -899,47 +901,47 @@ windows ubuntu mac Ctrl+Num+7 - + Scale next windows ubuntu mac Ctrl+F10 - + Scale prev windows ubuntu mac Ctrl+F9 - + Screen Shot windows ubuntu mac Ctrl+F7 - + Shell windows ubuntu mac Ctrl+F5 - + Home windows ubuntu mac F1 - + Menu windows ubuntu mac F2 - + Power windows ubuntu mac F3 - + Volume + windows ubuntu mac Ctrl+Num++ - + Volume - windows ubuntu mac Ctrl+Num+- @@ -947,6 +949,414 @@ + +

    Emulator Control Panel (ECP)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CommandSupportShortcut
    Common
    Device Treewindows ubuntu macAlt+D
    Networkwindows ubuntu macAlt+N
    Uninstallerwindows ubuntu macAlt+U
    HDS (Host Directory Sharing)windows ubuntu macAlt+H
    Upper menu focus movementwindows ubuntu macUp
    Underneath menu focus movementwindows ubuntu macDown
    Collapse tree menuwindows ubuntu macLeft
    Expand tree menuwindows ubuntu macRight
    Move focus to next controlwindows ubuntu macTab
    Move focus to previous controlwindows ubuntu macShift + Tab
    Menu selectionwindows ubuntu macEnter
    Mobile
    Batterywindows ubuntu macAlt+B
    RSSIwindows ubuntu macAlt+R
    3-Axis sensorwindows ubuntu macAlt+A
    Lightwindows ubuntu macAlt+I
    Proximitywindows ubuntu macAlt+X
    Pressurewindows ubuntu macAlt+E
    Ultravioletwindows ubuntu macAlt+V
    Heart Rate Monitorwindows ubuntu macAlt+M
    Ear Jackwindows ubuntu macAlt+K
    USBwindows ubuntu macAlt+S
    SD Cardwindows ubuntu macAlt+D
    Locationwindows ubuntu macAlt+L
    Telephonywindows ubuntu macAlt+T
    Memorywindows ubuntu macAlt+O
    Wearable
    Batterywindows ubuntu macAlt+B
    3-Axis sensorwindows ubuntu macAlt+A
    Lightwindows ubuntu macAlt+I
    Proximitywindows ubuntu macAlt+X
    Pressurewindows ubuntu macAlt+E
    Ultravioletwindows ubuntu macAlt+V
    Heart Rate Monitorwindows ubuntu macAlt+M
    Touch gesturewindows ubuntu macAlt+G
    USBwindows ubuntu macAlt+S
    Memorywindows ubuntu macAlt+O
    + + +

    Enventor

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CommandSupportShortcut

    Close the menu

    ubuntu

    Esc

    Show shortcut keys

    ubuntu

    F1

    Save the file

    ubuntu

    F3

    Show or hide the line numbers

    ubuntu

    F5

    Show or hide the tool bar

    ubuntu

    F9

    Show or hide the console view

    ubuntu

    F10

    Show or hide the status bar

    ubuntu

    F11

    Show the configuration setting window

    ubuntu

    F12

    Quick save and compile EDC

    ubuntu

    Ctrl+S

    Enable or disable auto indentation

    ubuntu

    Ctrl+I

    Enable or disable auto completion

    ubuntu

    Ctrl+O

    Show or hide virtual images to visualize SWALLOW part objects

    ubuntu

    Ctrl+W

    Enable or disable part object highlighting

    ubuntu

    Ctrl+H

    Enable or disable full text view

    ubuntu

    Ctrl+Left

    Enable or disable full live view

    ubuntu

    Ctrl+Right

    Enable or disable full console view

    ubuntu

    Ctrl+Up

    Enable or disable full live/text view

    ubuntu

    Ctrl+Down

    Insert default template code

    ubuntu

    Ctrl+T

    Enable or disable LiveEdit function

    ubuntu

    Ctrl+E

    View scale up/bigger font size

    ubuntu

    Ctrl+Mouse wheel up

    View scale down/smaller font size

    ubuntu

    Ctrl+Mouse wheel down

    Insert part template code: Textblock

    ubuntu

    Ctrl+Shift+B

    Insert part template code: Image

    ubuntu

    Ctrl+Shift+I

    Insert part template code: Rectangle

    ubuntu

    Ctrl+Shift+R

    Insert part template code: Text

    ubuntu

    Ctrl+Shift+T

    Insert part template code: Spacer

    ubuntu

    Ctrl+Shift+S

    Insert part template code: Swallow

    ubuntu

    Ctrl+Shift+W

    Select all the text

    ubuntu

    Ctrl+A

    Select the word

    ubuntu

    Ctrl+Double-click

    Undo text changes

    ubuntu

    Ctrl+Z

    Redo text changes

    ubuntu

    Ctrl+R

    Copy selected text

    ubuntu

    Ctrl+C

    Paste copied text

    ubuntu

    Ctrl+V

    Cut selected text

    ubuntu

    Ctrl+X

    Delete a current line

    ubuntu

    Ctrl+D

    Find and replace the given word

    ubuntu

    Ctrl+F

    Go to the given line

    ubuntu

    Ctrl+L

    Go to the top line

    ubuntu

    Ctrl+Home

    Go to the bottom line

    ubuntu

    Ctrl+End

    + diff --git a/org.tizen.devtools/html/common_tools/tools_common.htm b/org.tizen.devtools/html/common_tools/tools_common.htm index d8ea900..e043623 100644 --- a/org.tizen.devtools/html/common_tools/tools_common.htm +++ b/org.tizen.devtools/html/common_tools/tools_common.htm @@ -62,7 +62,6 @@
  • Analysis and debugging tools
    • Log view

      Shows the log, debug, and exception messages.

    • -
    • T-trace

      This tools allows you to detect and analyze performance issues.

  • Tips for tool usage
  • @@ -46,7 +45,7 @@
  • Project Wizard
  • Configuration Editor
  • Privilege Checker
  • -
  • REST Viewer
  • +
  • REST Viewer
  • Content Assist
  • HTML Editor
  • HTML Preview
  • @@ -99,6 +98,7 @@
  • Static Analyzer
  • Valgrind
  • +
  • T-trace
  • diff --git a/org.tizen.devtools/html/native_tools/api_privilege_checker_n.htm b/org.tizen.devtools/html/native_tools/api_privilege_checker_n.htm index 5109fa1..542474b 100644 --- a/org.tizen.devtools/html/native_tools/api_privilege_checker_n.htm +++ b/org.tizen.devtools/html/native_tools/api_privilege_checker_n.htm @@ -23,8 +23,8 @@

    API and Privilege Checker

    -

    The IDE provides the API and privilege checker tool to identify potential problems in the application code related to API and privilege usage.

    -

    You can enable the checks during build process or code editing in the project properties. You can also perform the checks manually in the IDE by selecting Project > Check API and Privilege Violations.

    +

    The Tizen IDE provides the API and privilege checker tool to identify potential problems in the application code related to API and privilege usage.

    +

    In project properties, you can enable the checker during the building process or code editing stage. You can also perform the checks manually in the Project Explorer view by choosing a project, opening the context menu, and selecting Check API and Privilege Violations.

    The results of the check are displayed in the Problems view. The following tables define the different alarms that the checks can generate.

    - + diff --git a/org.tizen.devtools/html/native_tools/call_stack_view_n.htm b/org.tizen.devtools/html/native_tools/call_stack_view_n.htm index 3ecd115..779f0e9 100644 --- a/org.tizen.devtools/html/native_tools/call_stack_view_n.htm +++ b/org.tizen.devtools/html/native_tools/call_stack_view_n.htm @@ -31,6 +31,8 @@
  • Call Stack Information: Traces call stack steps to find where the memory block has crashed. If you select a call stack item in the left pane, search result is shown in right pane.
  • Debug Message: Provides the latest debug message and filter function similar to the Log view. You can search with keywords filtered by tag, pid, and message.
  • +

    The Call Stack view shows information only when the application crashes.

    + diff --git a/org.tizen.devtools/html/native_tools/command_line_interface_n.htm b/org.tizen.devtools/html/native_tools/command_line_interface_n.htm index ea667fb..0594042 100644 --- a/org.tizen.devtools/html/native_tools/command_line_interface_n.htm +++ b/org.tizen.devtools/html/native_tools/command_line_interface_n.htm @@ -25,10 +25,10 @@ -

    The native CLI (command line interface) provides the functional tools for developing Tizen native applications without the Tizen IDE. It includes the entire developing process from creating to running and debugging the project. The CLI is located in the $<TIZEN_SDK_HOME>/tools/ide/bin directory. For developing an application using the CLI, set a path to the CLI directory using the following command:

    +

    The native CLI (command line interface) provides the functional tools for developing Tizen native applications without the Tizen IDE. It includes the entire developing process from creating to running and debugging the project. The CLI is located in the $<TIZEN_SDK_HOME>/tools/ide/bin directory. For developing an application using the CLI, add the CLI directory path to $PATH using the following command:

    -export PATH=$<TIZEN_SDK_HOME>/tools/ide/bin
    +export PATH=$PATH:$<TIZEN_SDK_HOME>/tools/ide/bin
     

    The CLI in the IDE provides functional commands for:

    @@ -50,7 +50,7 @@ export PATH=$<TIZEN_SDK_HOME>/tools/ide/bin - +
    @@ -45,7 +45,7 @@
    API version alarmThe application contains a function, enumerator, or constant which is only provided in a later API version than the one the application is using.The application contains a function, enumerator, or constant which is only provided in a higher API version than the one the application is using. {API name} – The API is not supported in API version {version identifier}.

    For example: account_connect - The API is not supported in API version 2.1.0.

    Either upgrade the API version in the manifest file accordingly, or stop using the reported API element. Note
    To use the CLI, you need the Java Runtime Environment 6 or later. To use the CLI, you need the Java Runtime Environment version 6 or higher.
    diff --git a/org.tizen.devtools/html/native_tools/da_checkpoint_n.htm b/org.tizen.devtools/html/native_tools/da_checkpoint_n.htm index 92785b0..34ea149 100644 --- a/org.tizen.devtools/html/native_tools/da_checkpoint_n.htm +++ b/org.tizen.devtools/html/native_tools/da_checkpoint_n.htm @@ -24,7 +24,7 @@

    Content

      -
    • Setting CheckPoint in IDE
    • +
    • Setting the CheckPoint in the IDE
    • CheckPoint Chart
    • CheckPoint List
    • @@ -34,52 +34,54 @@

      CheckPoint Analysis

      -

      The CheckPoint tab of the dynamic analyzer shows actual value of variables at specific point of code (CheckPoint). You can trace changes of value of the variable. This can help you when debugging your application.

      -

      CheckPoint can be set in IDE source editor (See Setting CheckPoint in IDE), and the value of the CheckPoint is shown in the Dynamic Analyzer.

      +

      The CheckPoint tab of the dynamic analyzer shows the actual value of variables at specific points of code (CheckPoint). You can trace the changes in the variable value to help in the application debugging.

      +

      The CheckPoints can be set in the IDE source editor, and the CheckPoint value is shown in the dynamic analyzer.

      Figure: CheckPoint analysis

      -

      +

      CheckPoint analysis

      The tab consists of the following views:

        -
      1. CheckPoint Chart shows values of all variables.
      2. -
      3. CheckPoint List shows values of the selected variable on chart.
      4. +
      5. CheckPoint chart shows the values of all variables.
      6. +
      7. CheckPoint list shows the values of a specific variable selected on the chart.
      - -

      Setting CheckPoint in IDE

      -

      To use CheckPoint Analysis, you must set CheckPoint in IDE source editor first. CheckPoint can be set on a valid point, which is variable in executable line.

      -

      Refer to the following Figure. If you want to trace the value of variable "testString" on line 59, select "testString" and open the context menu.

      -

      Figure: IDE source editor

      -

      -

      To add CheckPoint, click "Add to Checkpoint of Dynamic Analyzer" in context menu. Then you can see a dialog as following Figure. You can get values from two points (Before line execution and After line execution).

      -

      Figure: Add to CheckPoint

      -

      -

      Added-CheckPoints are shown on a vertical ruler and CheckPoint View. You can remove CheckPoints on CheckPoint View. After setting CheckPoint, you can use CheckPoint Analysis using "Profile As > Profile With Dynamic Analyzer". -

      Figure: CheckPoint icon on vertical ruler

      -

      -

      Figure: CheckPoint View

      -

      +

      Setting the CheckPoint in the IDE

      +

      To use the CheckPoint Analysis, you must set a CheckPoint in the IDE source editor. The CheckPoint can be set on any valid point, which is a variable in an executable line:

      + +
      1. To trace, for example, the value of the testString variable on line 59 (as shown in the following figure), select the variable and open the context menu. +

        IDE source editor

      2. +
      3. To add the CheckPoint, click Add to Checkpoint of Dynamic Analyzer in the context menu. +

        The following dialog opens. You can select to get values from 2 points (before and after the line execution).

        +

        Adding the CheckPoint

        +

        The added CheckPoints are shown on a vertical ruler (shown below) and the CheckPoint view.

        +

        CheckPoint on a vertical ruler

        +
      4. +
      5. To remove a CheckPoint, use the CheckPoint view. +

        CheckPoint view

        +
      + +

      After setting the CheckPoint, run the CheckPoint analysis from the project context menu by selecting Profile As > Profile With Dynamic Analyzer.

      + + +

      CheckPoint Chart

      +

      The CheckPoint chart displays values of all variables set in the IDE. Each chart includes information of all CheckPoints. The information is shown with the format:

      +

      Variable type + variable name + (source file name: line number) + Before/After

      +

      Every time a CheckPoint is executed on a target device or the Emulator, a color bar marks the time on the chart and a tooltip shows the detailed value at the time. To see specific CheckPoint values, select the chart. To see all values from a CheckPoint, see the CheckPoint list.

      +

      Figure: CheckPoint chart

      +

      CheckPoint chart

      +

      You can also add a Timeline chart to the tab using the Add button.

      +

      Adding a Timeline chart

      +

      Adding a Timeline chart

      - -

      CheckPoint Chart

      -

      The CheckPoint chart displays values of all variables set in IDE. Each chart includes information of each CheckPoint. An information format is shown with the format : 'Variable type + variable name (source file name: line number) Before/After'.

      -

      Every time CheckPoint is executed on target device or emulator, Color bar marks the time on the chart and a tooltip shows detail value at the time.

      -

      You can see specific CheckPoint values by selecting the chart. All values from the CheckPoint are shown on CheckPoint List. -

      Figure: CheckPoint Chart

      -

      -

      You can also add some of the Timeline chart using Add button. Refer to Chart Configuration. -

      Add Timeline Chart

      -

      -

      CheckPoint List

      -

      When you select one of the CheckPoint, all values from the CheckPoint are shown in list view.

      -

      If the variable is an array type, all element of it are shown in the list. Likewise, if the variable is a structure type, all members of it are shown.

      -

      You can relate a function call with the CheckPoint values of a specific time. If you select a row in the list, the related function call is highlighted in the Call Trace List.

      -

      Figure: CheckPoint List (array)

      -

      -

      Figure: CheckPoint List (structure)

      -

      - +

      When you select a CheckPoint in the CheckPoint chart, all the values from the CheckPoint are shown in a list view.

      +

      If the variable is an array type, all its elements are shown in the list. If the variable is a structure type, all its members are shown.

      + +

      Figure: CheckPoint list (array)

      +

      CheckPoint list (array)

      +

      Figure: CheckPoint list (structure)

      +

      CheckPoint list (structure)

      +

      You can relate a function call with the CheckPoint values of a specific time. If you select a row in the list, the related function call is highlighted in the Call Trace.

      diff --git a/org.tizen.devtools/html/native_tools/da_file_n.htm b/org.tizen.devtools/html/native_tools/da_file_n.htm index b3cfe47..264b526 100644 --- a/org.tizen.devtools/html/native_tools/da_file_n.htm +++ b/org.tizen.devtools/html/native_tools/da_file_n.htm @@ -88,16 +88,17 @@

      File API List view

      The view has the following columns:

        -
      • # shows the sequence number of the API calls.
      • -
      • Start Time is the time when the API was called.
      • -
      • Elapsed Time is the time that elapses while an event occurs.
      • -
      • PID is the name of the API.
      • -
      • TID is the ID of the thread that called the API.
      • -
      • FD is the ID of the file.
      • -
      • API Name is the name of the API.
      • +
      • # (integer) shows the sequence number of the API calls.
      • +
      • Start Time (time) is the time when the API was called.
      • +
      • Elapsed Time (time) is the time that elapses while an event occurs.
      • +
      • PID (integer) is the API process ID.
      • +
      • TID (integer) is the ID of the thread that called the API.
      • +
      • FD (integer) is the ID of the file.
      • +
      • API Name (text) is the name of the API.
      • Parameter shows the input parameters of the API.
      • -
      • Return is the return value of the called API.
      • -
      • Error code shows the value returned by the API. In case of the APIs associated with glibc, the value is the description of the error number.
      • +
      • Return (integer) is the return value of the called API.
      • +
      • Error code (text) shows the value returned by the API. In case of the APIs associated with glibc, the value is the description of the error number.
      • +

      File Details

      diff --git a/org.tizen.devtools/html/native_tools/da_overview_n.htm b/org.tizen.devtools/html/native_tools/da_overview_n.htm index 7132e9d..034da08 100644 --- a/org.tizen.devtools/html/native_tools/da_overview_n.htm +++ b/org.tizen.devtools/html/native_tools/da_overview_n.htm @@ -50,16 +50,16 @@

      The dynamic analyzer can also contain the following tabs and pages:

        +
      • Thread +

        The Thread tab shows information about thread and synchronization.

      • File

        The File tab shows an analysis of file usage.

      • -
      • Thread -

        The Thread tab shows information about thread and synchronization.

      • Network

        The Network tab shows information about the network.

      • -
      • OpenGL -

        The OpenGL tab shows information about OpenGL® 2.0 and EvasGL.

      • -
      • CheckPoint -

        The CheckPoint tab shows information about CheckPoint set via IDE.

      • +
      • OpenGL +

        The OpenGL tab shows information about OpenGL® 2.0 and EvasGL.

      • +
      • CheckPoint +

        The CheckPoint tab shows an analysis of variable values at specific points of code.

      The tabs on the main display can be reordered by dragging and dropping.

      @@ -92,9 +92,8 @@
    • OpenGL: This template shows detailed information of the openGL layer.
    • Energy: This template informs you of power consumption of target device.
    • Custom: This template can be configured by selecting the desired features. If you change a feature in another template, the change effects the custom template.
    • -
    -

    The overall overhead is an accumulation of each selected feature's overhead. Using feature that has a high overhead like OpenGL ES analysis may reduce a processing speed of the application.


    - + +

    The overall overhead is an accumulation of each selected feature's overhead. Using a feature that has a high overhead, such as the OpenGL ES analysis, can reduce the processing speed of the application.

    When you click the Details button in the Features tab, the Feature details dialog appears on the screen.

    Figure: Feature details

    Features tab

    @@ -111,7 +110,8 @@
  • OpenGL® ES analysis: Displays information about the OpenGL® layer.
  • UI Event: Displays UI events that occur on the device.
  • - + +
  • Options

    The configuration settings define the dynamic analyzer configuration.

    Figure: Options tab

    diff --git a/org.tizen.devtools/html/native_tools/da_timeline_n.htm b/org.tizen.devtools/html/native_tools/da_timeline_n.htm index 85d1bf8..34ad6ed 100644 --- a/org.tizen.devtools/html/native_tools/da_timeline_n.htm +++ b/org.tizen.devtools/html/native_tools/da_timeline_n.htm @@ -130,8 +130,8 @@
  • UI Event chart

    Shows UI events that occur on the device.

      -
    • : Touch event

    • -
    • : Gesture event

    • +
    • : Touch event

    • +
    • : Gesture event

    • : Orientation event

  • @@ -184,7 +184,7 @@

    Chart Configuration

    -

    The Edit chart dialog is an editor window for managing the Timeline page chart. The Edit chart dialog can be used to control the order in which the visible charts are shown on the Timeline page in runtime. To change the order, drag the applicable chart to the new location. To change the visibility state of a chart, click the chart. For a detailed description of each chart, see Timeline Chart.

    +

    The Edit chart dialog (activated with the Add button at the top-left corner of the dynamic analyzer) is an editor window for managing the Timeline page chart. The Edit chart dialog can be used to control the order in which the visible charts are shown on the Timeline page in runtime. To change the order, drag the applicable chart to the new location. To change the visibility state of a chart, click the chart. For a detailed description of each chart, see Timeline Chart.

    Figure: Chart Configuration

    Chart Configuration

    The chart classifies the visibility states by color:

    diff --git a/org.tizen.devtools/html/native_tools/da_views_n.htm b/org.tizen.devtools/html/native_tools/da_views_n.htm index 07c7626..a29f9b8 100644 --- a/org.tizen.devtools/html/native_tools/da_views_n.htm +++ b/org.tizen.devtools/html/native_tools/da_views_n.htm @@ -33,7 +33,7 @@

    Other Views

    -

    The dynamic analyzer provides the Callstack, Snapshot, Startup views.

    +

    The dynamic analyzer provides the Callstack, Snapshot, and Startup views.

    Callstack

    The Callstack view shows the callstack of the selected API or item.

    @@ -57,25 +57,25 @@
  • CPU usage

    The bar chart shows the CPU use percentage of the selected point. The chart shows the usage of up to 4 CPUs.

  • Process size

    The circular chart shows the process memory size of the selected point.

  • - +

    Startup

    The Startup view shows the startup information of the application.

    Figure: Startup view

    -

    Snapshot view

    +

    Startup view

    The Startup view contains the following components:

    • PID (integer) is the process ID.
    • -
    • Stage
    • +
    • Stage is the current stage of the application:
      • -
      • library mapping : an linking phase that the linker maps library dependencies of the application.
      • -
      • main : an execution phase from the beginning to ui_app_main() in main().
      • -
      • create : an execution phase of app_create_cb() in ui_app_lifecycle_callback_s struct (This callback function is executed at the start of the application).
      • -
      • service : an execution phase of app_control_cb() in ui_app_lifecycle_callback_s struct (This callback function is executed when another application sends the launch request to the application).
      • +
      • library mapping is a linking phase when the linker maps the library dependencies of the application.
      • +
      • main is an execution phase from the beginning to the ui_app_main() function within the main() function.
      • +
      • create is an execution phase of the app_create_cb() callback within the ui_app_lifecycle_callback_s struct (this callback function is executed at the start of the application).
      • +
      • service is an execution phase of the app_control_cb() callback within the ui_app_lifecycle_callback_s struct (this callback function is executed when another application sends a launch request to the application).
    • Start Time is the start time of the stage.
    • End Time is the end time of the stage.
    - + diff --git a/org.tizen.devtools/html/native_tools/enventor_n.htm b/org.tizen.devtools/html/native_tools/enventor_n.htm index 954d306..ea6e775 100644 --- a/org.tizen.devtools/html/native_tools/enventor_n.htm +++ b/org.tizen.devtools/html/native_tools/enventor_n.htm @@ -36,8 +36,6 @@
  • Tool Functions
  • -
  • Shortcut Keys -
  • Configuration Setting
  • @@ -60,7 +58,6 @@
  • Using the Live View
  • Interactive Feedback
  • Tool Functions
  • -
  • Shortcut Keys
  • Configuration Setting
  • @@ -244,180 +241,7 @@

    About

    About

    -

    Show shortcut keys.

    - - - - -

    Shortcut Keys

    -

    Enventor supports various shortcut keys. The following table shows the shortcut keys and their functions.

    - - - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    Table: Shortcut keys
    Shortcut KeyFunction

    Esc

    Close the menu.

    F1

    Show shortcut keys.

    F3

    Save the file.

    F5

    Show or hide the line numbers.

    F9

    Show or hide the tool bar.

    F10

    Show or hide the console view.

    F11

    Show or hide the status bar.

    F12

    Show the configuration setting window.

    Ctrl + S

    Quick save and compile EDC.

    Ctrl + I

    Enable or disable auto indentation.

    Ctrl + O

    Enable or disable auto completion.

    Ctrl + W

    Show or hide virtual images to visualize SWALLOW part objects.

    Ctrl + H

    Enable or disable part object highlighting.

    Ctrl + Left

    Enable or disable full text view.

    Ctrl + Right

    Enable or disable full live view.

    Ctrl + Up

    Enable or disable full console view.

    Ctrl + Down

    Enable or disable full live/text view.

    Ctrl + T

    Insert default template code.

    Ctrl + E

    Enable or disable LiveEdit function.

    Ctrl + Mouse wheel up

    View scale up/bigger font size.

    Ctrl + Mouse wheel down

    View scale down/smaller font size.

    Ctrl + Shift + B

    Insert part template code: Textblock.

    Ctrl + Shift + I

    Insert part template code: Image.

    Ctrl + Shift + R

    Insert part template code: Rectangle.

    Ctrl + Shift + T

    Insert part template code: Text.

    Ctrl + Shift + S

    Insert part template code: Spacer.

    Ctrl + Shift + W

    Insert part template code: Swallow.

    Ctrl + A

    Select all the text.

    Ctrl + Double Click

    Select the word.

    Ctrl + Z

    Undo text changes.

    Ctrl + R

    Redo text changes.

    Ctrl + C

    Copy selected text.

    Ctrl + V

    Paste copied text.

    Ctrl + X

    Cut selected text.

    Ctrl + D

    Delete a current line.

    Ctrl + F

    Find and replace the given word.

    Ctrl + L

    Go to the given line.

    Ctrl + Home

    Go to the top line.

    Ctrl + End

    Go to the bottom line.

    Show shortcut keys.

    diff --git a/org.tizen.devtools/html/native_tools/manifest_text_editor_n.htm b/org.tizen.devtools/html/native_tools/manifest_text_editor_n.htm index 8bd2a3f..323c291 100644 --- a/org.tizen.devtools/html/native_tools/manifest_text_editor_n.htm +++ b/org.tizen.devtools/html/native_tools/manifest_text_editor_n.htm @@ -33,7 +33,9 @@
  • <privileges> Element
  • <feature> Element
  • <profile> Element
  • -
  • <widget-application> Element
  • +
  • <widget-application> Element
  • +
  • <watch-application> Element
  • +
    @@ -86,10 +88,10 @@    <feature name="http://tizen.org/feature/camera.front.flash"/>    <feature name="http://tizen.org/feature/data.encryption"/>    <profile name="mobile"/> -   <widget-application appid="org.tizen.widget-test" exec="widget-test" main="true" update-period="0"> -      <icon>widget-test.png</icon> -      <label>widget-test</label> -      <support-size preview="widget-test.png">2x2</support-size> +   <widget-application appid="org.tizen.test" exec="test" main="true" update-period="0"> +      <icon>icon.png</icon> +      <label>test</label> +      <support-size preview="preview.png">2x2</support-size>    </widget-application> </manifest> @@ -306,6 +308,24 @@ <support-size> + + + + <watch-application> + + + + + + <icon> + + + + + + <label> + + @@ -441,7 +461,7 @@

    API version number for the application.

    Expected value:

      -
    • Number in the "x.y" format
    • +
    • Number in the "x.y.z" format
    @@ -1420,8 +1440,11 @@

    Expected value:

      -
    • 2x2
    • -
    • 4x4
    • +
    • 2x2 (in mobile and wearable)
    • +
    • 4x1 (in mobile only)
    • +
    • 4x2 (in mobile only)
    • +
    • 4x3 (in mobile only)
    • +
    • 4x4 (in mobile only)
    @@ -1448,7 +1471,7 @@ exec attribute -

    Widget application executable file path.

    +

    Widget application executable file name.

    Expected value:

    • String
    • @@ -1494,7 +1517,7 @@ preview attribute -

      Relative path to the preview image.

      +

      Relative path to the preview image. The image is shown on the home screen when the user tries to select the widget.

      Expected value:

        @@ -1505,12 +1528,151 @@

        For example:

        -<widget-application appid="org.tizen.widget-test" exec="widget-test" main="true" update-period="0">
        -   <icon>widget-test.png</icon>
        -   <label>widget-test</label>
        -   <support-size preview="widget-test.png">2x2</support-size>
        +<widget-application appid="org.tizen.test" exec="test" main="true" update-period="0">
        +   <icon>icon.png</icon>
        +   <label>test</label>
        +   <support-size preview="preview.png">2x2</support-size>
         </widget-application>
         
        + +

        <watch-application> Element

        +

        The <watch-application> element represents the settings for the watch application.

        + + + + + + + + + +
        + <watch-application> element

        Settings for the watch application.

        +

        For more information on the relationship between the elements, see the element hierarchy.

        +

        Occurrences:

        +
          +
        • 1 (optional)
        • +
        +

        Expected children:

        + + + + + + + + + + + + + + +
        Child elementOccurrences
        <icon>1
        <label>1
        +

        Attributes:

        + +
        + + + + + + + + + +
        + <icon> element

        Watch application icon image.

        +

        Occurrences:

        +
          +
        • 1
        • +
        + +

        Expected value:

        +
          +
        • Icon file name
        • +
        +
        + + + + + + + +
        + <label> element

        Watch application text.

        +

        Occurrences:

        +
          +
        • 1
        • +
        + +

        Expected value:

        +
          +
        • Label value in string
        • +
        +
        + + + + + + + + +
        + appid attribute

        Watch application unique ID.

        +

        Expected value:

        +
          +
        • String
        • +
        +
        + + + + + + + + +
        + exec attribute

        Watch application executable file path.

        +

        Expected value:

        +
          +
        • String
        • +
        +
        + + + + + + + + +
        + ambient-support attribute

        Indicates whether the application draws the ambient mode UI itself. If the value is false, the system default ambient mode UI is shown when the devices enters the ambient mode.

        +

        Expected value:

        +
          +
        • true
        • +
        • false
        • +
        +
        + + +

        For example:

        + +
        +<watch-application appid="org.tizen.watchsample" exec="watchsample" ambient-support="true">
        +   <icon>watchsample.png</icon>
        +   <label>watchsample</label>
        +</watch-application>
        +
        + diff --git a/org.tizen.devtools/html/native_tools/po_file_editor_n.htm b/org.tizen.devtools/html/native_tools/po_file_editor_n.htm index 67eee33..28cf0b0 100644 --- a/org.tizen.devtools/html/native_tools/po_file_editor_n.htm +++ b/org.tizen.devtools/html/native_tools/po_file_editor_n.htm @@ -25,14 +25,15 @@

    PO File Editor

    -

    PO file editor is used to edit .po files to generate compiled gettext .mo files, which are used by Tizen native applications to localize the user interface.

    + +

    PO file editor is used to edit .po files to generate compiled gettext .mo files, which are used by Tizen native applications to localize the user interface. gettext is GNU Translation Project, an internationalization and localization (i18n) system commonly used for writing multilingual programs on Unix-like computer OS.

    - diff --git a/org.tizen.devtools/html/native_tools/project_wizard_n.htm b/org.tizen.devtools/html/native_tools/project_wizard_n.htm index 1d12de0..6ffe6b1 100644 --- a/org.tizen.devtools/html/native_tools/project_wizard_n.htm +++ b/org.tizen.devtools/html/native_tools/project_wizard_n.htm @@ -1,159 +1,115 @@ - - - - - - - - - -Project Wizard - + + + + + + + + + + Project Wizard + -
    +
    +
    -
    -
    -
    -
    -

    - Mobile native Wearable native -

    -
    +
    +
    +

    Mobile native Wearable native

    +
    + - -

    Project Wizard

    -

    The Tizen native Project Wizard is an IDE tool that is used - to create a native application project. It allows you to define the - application type and requirements and components.

    -

    The Tizen IDE provides various project templates that make it - easier for you to start coding your application. When you create a - new project, you can select a specific template, which the Tizen - native Project Wizard uses to automatically create basic - functionalities for the native application. The default project - files and folders are also created.

    - -

    On the main page of the Tizen native Project Wizard, you can - set basic properties of a project, such as the project name, - package name, location, sample, and template.

    - -

    Figure: Project Wizard

    -

    - Project Wizard -

    - -

    The options you can set are listed in the following table.

    -
    Note
    There is no specific wizard to create .po files. To create a .po file, go to New > Other > General > File and save the file with the extension .po. +There is no specific wizard to create .po files. To create a .po file, go to New > Other > General > File and save the file with the extension .po in the res/po directory.

    A .po file name usually has the form <ll>_<CC>.po. Here <ll> stands for an ISO 639 2-letter language code, and <CC> stands for an ISO 3166 2-letter country code. For example, for German in Germany, the file name is de_DE.po.

    - - - - - - - - - +

    Project Wizard

    +

    The Tizen native Project Wizard is an IDE tool that is used to create a native application project. + It allows you to define the application type, requirements, and components.

    +

    The Tizen IDE provides various project templates that make it easier for you to start coding your application. When you create a new project, you can select a specific template, which the Tizen native Project Wizard uses to automatically create basic functionalities for the native application. The default project files and folders are also created.

    + + +

    On the main page of the Tizen native Project Wizard, you can set basic properties of a project, such as the project name, package name, location, sample, and template.

    + +

    Figure: Project Wizard

    +

    Project Wizard

    + +

    The options you can set are listed in the following table.

    +
    Table: Project Wizard options
    OptionDescription
    TabYou can create an application based on a template or - sample application.
    + + + + + + + + + + + + + - - - + + + - - - + + + - - - - - - - + + + - + - - - +
    + Table: Project Wizard options +
    OptionDescription
    TabYou can create an application based on a template or sample application.
    Application typeSelect the application type. It can be previewed in the description view on the right.
    Application typeSelect the application type. It can be previewed in the - description view on the right.
    Project nameEnter the name for the project to be created. +

    The project names are restricted to the following regular expression: [a-zA-Z]{1}[a-zA-Z0-9-]{1,24}.

    Project nameEnter the name for the project to be created. -

    The project names are restricted to the following regular - expression: [a-zA-Z]{1}[a-zA-Z0-9-]{1,24}.

    -
    Package nameEnter the name for the package to be created.
    Package nameEnter the name for the package to be created.
    Profileselect the project's profile.
    ProfileSelect the project's profile.
    Versionselect the profile version.Select the profile version.
    Use default location If you check this option, the project is created in the - $<workspace_location>/$<project_name> - directory. + $<workspace_location>/$<project_name> directory.
    LocationManually select the location of the project. If you - check the Use default location checkbox, this - option is disabled. + Manually select the location of the project. If you check the Use default location checkbox, this option is disabled.
    Working setsIf you want to include your project as a specific - working set, select a working set. + If you want to include your project as a specific working set, select a working set.
    + + + +
    - - - - - - - Go to top +Go to top - + - + \ No newline at end of file diff --git a/org.tizen.devtools/html/common_tools/t_trace.htm b/org.tizen.devtools/html/native_tools/t_trace_n.htm similarity index 94% rename from org.tizen.devtools/html/common_tools/t_trace.htm rename to org.tizen.devtools/html/native_tools/t_trace_n.htm index 8822509..2265145 100644 --- a/org.tizen.devtools/html/common_tools/t_trace.htm +++ b/org.tizen.devtools/html/native_tools/t_trace_n.htm @@ -18,7 +18,7 @@
    -

    Mobile Web Wearable Web Mobile native Wearable native

    +

    Mobile native Wearable native

    Content

    @@ -203,10 +203,10 @@ $ python ttrace.py --help Video Shows the workflow of the video and radio system. - + Window manager Shows the state changes of the window system, such as show, hide, resize, and rotation. @@ -219,12 +219,12 @@ $ python ttrace.py --help

    Application life-cycle analysis example:

    -

    You can analyze your application life-cycle using the T-trace in both native and Web applications. The following figure illustrates the various states of a Tizen application. The T-trace shows you the state changes as well as how much time is consumed at each state while the application is launching, running, and terminating.

    +

    You can analyze your application life-cycle using the T-trace in native applications. The following figure illustrates the various states of a Tizen application. The T-trace shows you the state changes as well as how much time is consumed at each state while the application is launching, running, and terminating.

    Figure: Application life-cycle

    Application life-cycle

    -

    To analyze the application life-cycle, run the T-trace with the Application manager tag. For Web applications, enable the Web tag too. When the tracing process is finished, the T-trace generates a report, as shown in the following figure.

    +

    To analyze the application life-cycle, run the T-trace with the Application manager tag. When the tracing process is finished, the T-trace generates a report, as shown in the following figure.

    Figure: Application life-cycle report

    Application life-cycle report

    diff --git a/org.tizen.devtools/html/native_tools/tools_n.htm b/org.tizen.devtools/html/native_tools/tools_n.htm index f0d49d7..03e462a 100644 --- a/org.tizen.devtools/html/native_tools/tools_n.htm +++ b/org.tizen.devtools/html/native_tools/tools_n.htm @@ -82,6 +82,8 @@
  • Static Analyzer

    This tool is used for source code analysis to finds bugs in Tizen applications.

  • Valgrind

    This memory profiling tool can be used to detect memory errors or memory leaks in an application.

  • + +
  • T-trace

    This tools allows you to detect and analyze performance issues.

  • diff --git a/org.tizen.devtools/html/native_tools/uibuilder_n.htm b/org.tizen.devtools/html/native_tools/uibuilder_n.htm index cadc9ce..5bbc6ee 100644 --- a/org.tizen.devtools/html/native_tools/uibuilder_n.htm +++ b/org.tizen.devtools/html/native_tools/uibuilder_n.htm @@ -263,4 +263,4 @@ - + \ No newline at end of file diff --git a/org.tizen.devtools/html/web_tools/code_beautifier_w.htm b/org.tizen.devtools/html/web_tools/code_beautifier_w.htm index 7b939f1..9df8349 100644 --- a/org.tizen.devtools/html/web_tools/code_beautifier_w.htm +++ b/org.tizen.devtools/html/web_tools/code_beautifier_w.htm @@ -25,14 +25,15 @@

    The Code Beautifier is a smart decompression tool that beautifies any HTML, CSS, or JavaScript source by reformatting and re-indenting without breaking the content structure.

    The Code Beautifier has the following features for beautifying HTML, CSS, and JavaScript:

    -
    • Beautifying minified code
    • +
      • Beautifying code to a minified form
      • Inserting indentation
      • Inserting carriage returns

      You can beautify code in 3 ways:

      -
      • In the Project Explorer view, right-click a CSS or JavaScript file in the project and select Code Beautifier. A beautified file with the extension .beaut.<extension> is generated, and a notification dialog is displayed in the lower-right section of the IDE.
      • -
      • In the Editor context menu, select Code Beautifier.
      • +
        • In the Project Explorer view, choose a CSS or JavaScript file in the project, open the context menu, and select Code Beautifier. A beautified file with the extension .beaut.<extension> is generated, and a notification dialog is displayed in the lower-right section of the IDE.
        • +
        • In the Source Editor, open the context menu, and select Code Beautifier.
        • +
        • Use the Ctrl + 6 hotkey.
        diff --git a/org.tizen.devtools/html/web_tools/code_minifier_w.htm b/org.tizen.devtools/html/web_tools/code_minifier_w.htm index de2dc84..9742316 100644 --- a/org.tizen.devtools/html/web_tools/code_minifier_w.htm +++ b/org.tizen.devtools/html/web_tools/code_minifier_w.htm @@ -53,8 +53,8 @@

      You can minify code in 3 ways:

        -
      • In the Project Explorer view, right-click a CSS or JavaScript file in the project and select Code Minifier. A minified (compressed) file with the extension .min.<extension> is generated, and a notification dialog is displayed in the lower-right section of the IDE.
      • -
      • In the Editor context menu, select Code Minifier.
      • +
      • In the Project Explorer view, choose a CSS or JavaScript file in the project, open the context menu, and select Code Minifier. A minified (compressed) file with the extension .min.<extension> is generated, and a notification dialog is displayed in the lower-right section of the IDE.
      • +
      • In the Source Editor, open the context menu, and select Code Minifier.
      • Use the Ctrl + 5 hotkey.
      diff --git a/org.tizen.devtools/html/web_tools/command_line_interface_w.htm b/org.tizen.devtools/html/web_tools/command_line_interface_w.htm index 883dbbf..0cf2534 100644 --- a/org.tizen.devtools/html/web_tools/command_line_interface_w.htm +++ b/org.tizen.devtools/html/web_tools/command_line_interface_w.htm @@ -27,10 +27,10 @@

    Command Line Interface

    -

    The Web CLI (command line interface) provides the functional tools for developing Tizen Web applications without the Tizen IDE. It includes the entire developing process from creating to running and debugging the project. The CLI is located in the $<TIZEN_SDK_HOME>/tools/ide/bin directory. For developing an application using the CLI, set a path to the CLI directory using the following command:

    +

    The Web CLI (command line interface) provides the functional tools for developing Tizen Web applications without the Tizen IDE. It includes the entire developing process from creating to running and debugging the project. The CLI is located in the $<TIZEN_SDK_HOME>/tools/ide/bin directory. For developing an application using the CLI, add the CLI directory path to $PATH using the following command:

    -export PATH=$<TIZEN_SDK_HOME>/tools/ide/bin
    +export PATH=$PATH:$<TIZEN_SDK_HOME>/tools/ide/bin
     

    The CLI in the IDE provides the functional commands for:

    @@ -52,7 +52,7 @@ export PATH=$<TIZEN_SDK_HOME>/tools/ide/bin Note -To use the CLI, you need the Java Runtime Environment 6 or later. +To use the CLI, you need the Java Runtime Environment version 6 or higher. diff --git a/org.tizen.devtools/html/web_tools/content_assist_w.htm b/org.tizen.devtools/html/web_tools/content_assist_w.htm index 13d018a..9068b5e 100644 --- a/org.tizen.devtools/html/web_tools/content_assist_w.htm +++ b/org.tizen.devtools/html/web_tools/content_assist_w.htm @@ -41,7 +41,7 @@ Note - To activate content assist for user-defined and third party APIs, add the WIDL feature in the config.xml file. + To activate content assist for user-defined and third party APIs, add the WIDL (Web Interface Definition Language) feature in the config.xml file.

    In the mobile Web JavaScript editor, you can activate content assist by . (dot). It can be set by checking the Enable auto activation checkbox in Window > Preferences > JavaScript > Editor > Content Assist.

    diff --git a/org.tizen.devtools/html/web_tools/css_editor_w.htm b/org.tizen.devtools/html/web_tools/css_editor_w.htm index d5d9d0c..9048e6d 100644 --- a/org.tizen.devtools/html/web_tools/css_editor_w.htm +++ b/org.tizen.devtools/html/web_tools/css_editor_w.htm @@ -38,7 +38,10 @@

    To check CSS:

    Every error code in the Tizen native API is represented as an integer value.

    diff --git a/org.tizen.gettingstarted/html/native/details/event_handling_n.htm b/org.tizen.gettingstarted/html/native/details/event_handling_n.htm index b6be886..9b822d4 100644 --- a/org.tizen.gettingstarted/html/native/details/event_handling_n.htm +++ b/org.tizen.gettingstarted/html/native/details/event_handling_n.htm @@ -18,14 +18,15 @@ @@ -35,29 +36,31 @@

    The Tizen platform supports event handling for user interactions. To provide a full user experience for your application users, you must handle various events in your application.

    - - - - - - - - - -
    Note
    This feature is supported in mobile applications only.
    +

    All Tizen mobile native devices provide the Menu and Back hardware keys, and the circular wearable devices provide rotary components for emitting rotary events. Both mobile and wearable devices support the media key events. You can use the Efl Extension Event API (in mobile and wearable applications) to handle the Menu key, Back key, and rotary events.

    -

    All Tizen mobile native devices provide the Menu and Back hardware keys, and you can use the Efl Extension Event API to handle the key events. Follow the hardware key guidelines below to ensure predictable and reliable navigation in your application.

    + + + + + + + + + +
    Note
    For more information on using Efl Extension for Menu key, Back key, and rotary events, see the Efl Extension guide.
    - -

    All Tizen devices provide a Menu key, which is used to present users a context-dependent set of options. Pressing the Menu key shows a hierarchical option menu. The following figure illustrates the Menu key position and the option menu.

    +

    Follow the guidelines below to ensure predictable and reliable navigation in your application.

    + + +

    All Tizen mobile devices provide a Menu key, which is used to present users a context-dependent set of options. Pressing the Menu key shows a hierarchical option menu. The following figure illustrates the Menu key position and the option menu.

    Figure: Menu key

    Menu key

    -

    Back Key

    -

    All Tizen devices provide a Back key for backward navigation. A back button in the application UI is not required.

    -

    The Back key must support the following features:

    +

    Back Key Events in Mobile Applications

    +

    All Tizen mobile devices provide a Back key for backward navigation. A back button in the application UI is not required.

    +

    The Back key must support the following features:

    • Hiding the software keyboard
    • Closing windows
    • @@ -66,21 +69,19 @@
    • Handling backward scene transitions
    - - - - - - - - - -
    Note
    More details on using EFL-Extension for Menu key and Back key events, see the Efl Extension guide.
    +

    Rotary Events in Wearable Applications

    + +

    The Tizen platform supports rotary events for user interaction on a wearable rotary device or sensor. The rotary device can rotate clockwise or counter-clockwise, and dispatch an event for each movement. The rotary device has points called detent. If the rotary device detects the detent point while rotating, it dispatches a separate new event about the point. The number of the available detent points depends on the device hardware.

    + +

    You can use the rotary events to change your application state (for example, change the value of the scroller or slider, change selected items, or zoom the image).

    + +

    Figure: Rotary device

    +

    Rotary device

    -

    Media Key

    -

    Tizen also supports handling Media Key events such as play,stop,pause events from media devices (such as Bluetooth remote controller and earjack).

    -

    To handle the Media Key events, use the Media key API.

    +

    Media Key Events

    +

    Tizen supports handling Media key events, such as play, stop, and pause events, from media devices (such as Bluetooth remote controller and earjack).

    +

    To handle the Media key events, use the Media key API (in mobile and wearable applications).

    diff --git a/org.tizen.gettingstarted/html/native/details/io_overview_n.htm b/org.tizen.gettingstarted/html/native/details/io_overview_n.htm index 9e4a2ab..709cb92 100644 --- a/org.tizen.gettingstarted/html/native/details/io_overview_n.htm +++ b/org.tizen.gettingstarted/html/native/details/io_overview_n.htm @@ -63,13 +63,13 @@ data Used to store private data of an application. -

    To get the application data directory path, call the app_get_data_path() of the App Common module.

    +

    To get the application data directory path, call the app_get_data_path() function of the App Common module.

    Owner: Read and Write

    Others: Access denied

    res Used to read resource files that are delivered with the application package. -

    To get the application resource directory path, call the app_get_resource_path() of the App common module.

    +

    To get the application resource directory path, call the app_get_resource_path() function of the App common module.

    Owner: Read

    Others: Access denied

    @@ -81,14 +81,14 @@ shared/data Used to share data with other applications. -

    To get this directory path of your own application, call the app_get_shared_data_path() of the App common module.

    +

    To get this directory path of your own application, call the app_get_shared_data_path() function of the App common module.

    Files stored in the shared/data directory can be read by other applications. Do not store application's private data in the shared/data directory.

    Owner: Read and Write

    Others: Read

    shared/res Used to share resources with other applications. The resource files are delivered with the application package. -

    To get this directory path of your own application, call the app_get_shared_resource_path() of the App common module.

    +

    To get this directory path of your own application, call the app_get_shared_resource_path() function of the App common module.

    Files stored in the shared/res directory can be read by other applications. Do not pack application's private resource files in the shared/res directory.

    Owner: Read

    Others: Read

    @@ -96,14 +96,14 @@ shared/trusted Used to share data with family of trusted applications. The family applications signed with the same certificate can access data in the shared/trusted directory. -

    To get this directory path of your own application, call the app_get_shared_trusted_path() of the App common module.

    +

    To get this directory path of your own application, call the app_get_shared_trusted_path() function of the App common module.

    Owner: Read and Write

    Family: Read and Write

    Others: Access denied

    -

    Every application can access a storage area where media files are stored. This is the media directory. In native applications, to obtain the media directory path, call the storage_get_directory() of Storage module. The following table lists the sub-directories of the media directory.

    +

    Every application can access a storage area where media files are stored. This is the media directory. In native applications, to obtain the media directory path, call the storage_get_directory() function of Storage module. The following table lists the sub-directories of the media directory.

    @@ -156,7 +156,7 @@
    Table: Media directory hierarchy
    -

    Every application can also access the external storage, such as MMC. This is the external storage directory. In native applications, to obtain the external storage directory path, call the storage_get_directory() method of the Storage module. The following table lists the sub-directories of the external storage directory.

    +

    Every application can also access the external storage, such as MMC. This is the external storage directory. In native applications, to obtain the external storage directory path, call the storage_get_directory() function of the Storage module. The following table lists the sub-directories of the external storage directory.

    diff --git a/org.tizen.gettingstarted/html/native/details/sec_privileges_n.htm b/org.tizen.gettingstarted/html/native/details/sec_privileges_n.htm index 0797919..3eff5e9 100644 --- a/org.tizen.gettingstarted/html/native/details/sec_privileges_n.htm +++ b/org.tizen.gettingstarted/html/native/details/sec_privileges_n.htm @@ -32,7 +32,7 @@ tr.partner-level, tr.platform-level { background-color: #cff }

    To effectively protect the device system and user private data, the Tizen security architecture is based on privileges and application signing of the Linux basic security model, which includes process isolation and mandatory access control. Since Tizen, as an open mobile platform, provides a wide range of features and experiences for users with a variety of applications, the users must be able to grant privileges for security-sensitive operations.

    -

    Tizen provides API-level access control for security-sensitive operations which, if not used correctly, can harm user privacy and system stability. Therefore, applications that use such sensitive APIs must declare the required privileges in the manifest.xml file.

    +

    Tizen provides API-level access control for security-sensitive operations which, if not used correctly, can harm user privacy and system stability. Therefore, applications that use such sensitive APIs must declare the required privileges in the manifest.xml file. Privileges have a level according to their hierarchy. The public level is the minimum privilege level, and any application developed by using the SDK can use these privileges. The platform level is the highest privilege level, and an application that needs theses privileges requires a platform-signed certificate.

    If an application invokes a privileged API, the Tizen system checks whether the privilege is present in the manifest.xml file. If the privilege is not present in the file, the system prohibits the application execution.

    The Tizen IDE also provides privilege checker tools to check whether the Tizen application source code contains any privilege violations. For more information, see API and Privilege Checker.

    @@ -44,306 +44,355 @@ tr.partner-level, tr.platform-level { background-color: #cff } + + + + - + + + - + + + + + + - + + - + + - + + - + + - + + - + + - + + - - + + + - + + - + + - + + + + - - - - - - - - - - - + + - + + - - - - - - + + - + + - + + - + + - + + - - - - - - + + - + + - + + - + + - + + - + + - + + - - - + + + + - + + - + + - + + - + + - + + - + + + + + + + + + - + + - + + - + + - + - + + - + + - + + - + + - + + - + + - + + + + + + + + - + + @@ -354,294 +403,273 @@ tr.partner-level, tr.platform-level { background-color: #cff } - + + - - - - - - - - - - - + + - + + - + + - + + - + + - + + - - - - - - - - - - - - - - - - + + - + + - + + - + + - - - - - - - - - - - + + - + + - + + - + + - - - - - - - - - - - + + - + + - - - - - - + + - + + - + + - + + - + + - - - - - - + + - + + - + + - + - + + - + - + + - + + - + + - + + - + + - + + - + + - + + + + + + + + - + + - + + - - - - - - - - - - - + + - + + - + + - - - - - - + + - - - - + + + + + - + + @@ -660,28 +688,40 @@ tr.partner-level, tr.platform-level { background-color: #cff } + - + + - + + +

    If your application does not have this privilege, no file operations into the media storage area succeed and you receive a permission denied error. If you have this privilege, you can read and write directories and files, create new files, and delete files in the storage area.

    - + + - + + + + + + +
    Table: External storage directory hierarchy
    PrivilegeLevel Display name Description

    http://tizen.org/privilege/account.read

    public

    Reading accounts

    The application can read accounts.

    http://tizen.org/privilege/account.write

    public

    Managing accounts

    The application can create, edit, and delete accounts.

    http://tizen.org/privilege/alarm.get

    public

    Retrieving alarms

    The application can read information about the saved alarms.

    http://tizen.org/privilege/alarm.set

    http://tizen.org/privilege/alarm.set

    public

    Setting alarms

    The application can set alarms and wake the device up at scheduled times.

    http://tizen.org/privilege/appmanager.kill

    platform

    Closing applications

    The application can close other applications..

    http://tizen.org/privilege/appmanager.launch

    http://tizen.org/privilege/appmanager.launch

    public

    Launching application

    The application can open other applications.

    http://tizen.org/privilege/bluetooth

    public

    Using unrestricted Bluetooth services

    The application can perform unrestricted actions using Bluetooth, such as scanning for and connecting to other devices.

    http://tizen.org/privilege/bluetooth.admin

    platform

    Changing Bluetooth settings

    The application can change Bluetooth settings, such as turning Bluetooth on or off, set the device name, and enable or disable the AV remote control.

    http://tizen.org/privilege/bookmark.admin

    platform

    Accessing Internet bookmarks

    The application can retrieve, create, edit, and delete Internet bookmarks.

    http://tizen.org/privilege/calendar.read

    public

    Reading calendar

    The application can read events and tasks.

    http://tizen.org/privilege/calendar.write

    http://tizen.org/privilege/calendar.write

    public

    Managing calendar

    The application can create, update, and delete events and tasks.

    http://tizen.org/privilege/call

    http://tizen.org/privilege/call

    public

    Making phone calls

    The application can make phone calls to numbers when they are tapped without further confirmation.

    http://tizen.org/privilege/callhistory.read

    http://tizen.org/privilege/callhistory.read

    public

    Reading call logs

    The application can read call log items.

    http://tizen.org/privilege/callhistory.write

    http://tizen.org/privilege/callhistory.write

    public

    Managing call logs

    The application can create, update, and delete call log items.

    http://tizen.org/privilege/camera

    http://tizen.org/privilege/camera

    public

    Using camera

    The application can take and preview pictures.

    http://tizen.org/privilege/contact.read

    http://tizen.org/privilege/contact.read

    public

    Reading contacts

    The application can read your profile, contacts, and contact history. Contact history can include social network activity.

    http://tizen.org/privilege/contact.write

    http://tizen.org/privilege/contact.write

    public

    Managing contacts

    The application can create, update, and delete your profile, contacts, and any contact history that is related to this application. The contact history can include social network activity.

    http://tizen.org/privilege/content.write

    Managing content

    http://tizen.org/privilege/content.write

    public

    Managing content

    The application can change media information. This information can be used by other applications.

    http://tizen.org/privilege/datasharing

    http://tizen.org/privilege/datasharing

    public

    Sharing data between applications

    The application can share data with other applications.

    http://tizen.org/privilege/display

    http://tizen.org/privilege/display

    public

    Managing display settings

    The application can manage display settings, such as the brightness. This can increase battery consumption.

    http://tizen.org/privilege/download

    http://tizen.org/privilege/download

    public

    Downloading through HTTP

    The application can manage HTTP downloads. This can result in additional charges depending on the user's payment plan.

    http://tizen.org/privilege/email

    public

    Managing email accounts, mailboxes, and emails

    The application can manage your email accounts, including your folders and emails.

    http://tizen.org/privilege/email.admin

    platform

    Managing email configurations

    The application can manage the email application settings.

    http://tizen.org/privilege/externalstorage

    Accessing external storage

    The application can read and write files that are saved to external storage, such as SD cards.

    http://tizen.org/privilege/externalstorage.appdata

    Accessing application data in external storage

    The application can read and write its own files in external storage, such as SD cards.

    http://tizen.org/privilege/haptic

    http://tizen.org/privilege/haptic

    public

    Managing vibration feedback

    The application can control vibration feedback.

    http://tizen.org/privilege/healthinfo

    http://tizen.org/privilege/healthinfo

    public

    Reading health information

    The application can read health information gathered by the device sensors, such as the pedometer and heart rate monitor.

    http://tizen.org/privilege/internet

    Accessing Internet

    The application can access the Internet. This can result in additional charges depending on your payment plan.

    http://tizen.org/privilege/keymanager

    http://tizen.org/privilege/keymanager

    public

    Using secure repository

    The application can save keys, certificates, and data to, and retrieve and delete them from password-protected storage.

    http://tizen.org/privilege/keymanager.admin

    http://tizen.org/privilege/keymanager.admin

    platform

    Locking/unlocking secure repository

    The application can lock and unlock a password-protected storage, and manage password changes for it.

    http://tizen.org/privilege/led

    http://tizen.org/privilege/led

    public

    Managing LEDs

    The application can turn LEDs on or off, such as the LED on the front of the device and the camera flash.

    http://tizen.org/privilege/location

    http://tizen.org/privilege/location

    public

    Using user location

    The application can read your location information.

    http://tizen.org/privilege/location.enable

    http://tizen.org/privilege/location.enable

    platform

    Managing location settings

    The application can control your location service settings.

    http://tizen.org/privilege/mediastorage

    Accessing media folders

    The application can read and write files in media folders.

    http://tizen.org/privilege/message.read

    http://tizen.org/privilege/message.read

    public

    Reading text and multimedia messages and related information

    The application can read text and multimedia messages, and any information related to them.

    http://tizen.org/privilege/message.write

    http://tizen.org/privilege/message.write

    public

    Sending text and multimedia messages and updating their statuses

    The application can write, send, delete, and move text and multimedia messages, and change the settings and statuses of the messages, such as read or unread.

    http://tizen.org/privilege/network.get

    http://tizen.org/privilege/network.get

    public

    Reading network information

    The application can retrieve network information such as the status of each network, its type, and detailed network profile information.

    http://tizen.org/privilege/network.profile

    http://tizen.org/privilege/network.profile

    public

    Managing network profiles

    The application can add, remove, and edit network profiles.

    http://tizen.org/privilege/network.set

    http://tizen.org/privilege/network.set

    public

    Managing network connections

    The application can turn Wi-Fi on and off, and connect to and disconnect from Wi-Fi and mobile networks.

    http://tizen.org/privilege/nfc

    http://tizen.org/privilege/nfc

    public

    Using basic NFC services

    The application can read and write NFC tag information, and send NFC messages to other devices.

    http://tizen.org/privilege/nfc.admin

    http://tizen.org/privilege/nfc.admin

    platform

    Managing NFC general settings

    The application can change NFC settings, such as turning NFC on or off.

    http://tizen.org/privilege/nfc.cardemulation

    Using NFC card emulation mode

    The application can access smart card details, such as credit card details, and allow users to make payments via NFC.

    http://tizen.org/privilege/nfc.cardemulation

    public

    Using NFC card emulation mode

    The application can access smart card details, such as credit card details, and allow users to make payments via NFC.

    http://tizen.org/privilege/notification

    http://tizen.org/privilege/notification

    public

    Providing notifications

    The application can show and hide its own notifications and badges.

    http://tizen.org/privilege/packagemanager.admin

    http://tizen.org/privilege/packagemanager.admin

    platform

    Installing/and uninstalling application packages and clearing caches

    The application can install and uninstall application packages, and clear application caches.

    http://tizen.org/privilege/packagemanager.info

    http://tizen.org/privilege/packagemanager.info

    public

    Retrieving detailed package information

    The application can retrieve detailed application package information.

    http://tizen.org/privilege/power

    http://tizen.org/privilege/power

    public

    Managing power

    The application can control power-related settings, such as dimming the screen.

    http://tizen.org/privilege/push

    http://tizen.org/privilege/push

    public

    Receiving push notifications

    The application can receive notifications from the Internet.

    http://tizen.org/privilege/recorder

    http://tizen.org/privilege/reboot

    platform

    Restarting device

    The application can restart the device.

    http://tizen.org/privilege/recorder

    public

    Recording video and audio

    The application can record video and audio.

    http://tizen.org/privilege/screenshot

    platform

    Capturing device screen

    The application can capture screenshots.

    http://tizen.org/privilege/secureelement

    http://tizen.org/privilege/secureelement

    public

    Accessing secure elements

    The application can access secure smart card chips, such as UICC/SIM, embedded secure elements, and secure SD cards.

    http://tizen.org/privilege/shortcut

    http://tizen.org/privilege/shortcut

    public

    Managing shortcuts

    The application can create and delete shortcuts.

    http://tizen.org/privilege/systemsettings

    http://tizen.org/privilege/systemsettings

    public

    Managing unrestricted system settings

    The application can read and write unrestricted system settings.

    The application can read and write unrestricted system settings. This privilege was deprecated after the Tizen version 2.3.

    http://tizen.org/privilege/systemsettings.admin

    http://tizen.org/privilege/systemsettings.admin

    platform

    Managing all system settings

    The application can read and write all system settings.

    http://tizen.org/privilege/telephony

    http://tizen.org/privilege/telephony

    public

    Accessing telephony information

    The application can retrieve telephony information, such as the network and SIM card used, the IMEI, and the statuses of calls.

    http://tizen.org/privilege/telephony.admin

    http://tizen.org/privilege/telephony.admin

    platform

    Managing telephony settings

    The application can manage telephony settings, such as those for incoming and outgoing calls, forwarding and holding calls, networks, and SIM cards.

    http://tizen.org/privilege/tethering.admin

    http://tizen.org/privilege/tethering.admin

    platform

    Accessing tethering services

    The application can enable and disable tethering services.

    http://tizen.org/privilege/volume.set

    http://tizen.org/privilege/volume.set

    public

    Adjusting volume

    The application can adjust the volume for different features, such as notification alerts, ringtones, and media.

    http://tizen.org/privilege/web-history.admin

    http://tizen.org/privilege/web-history.admin

    platform

    Managing Internet history

    The application can manage your Internet history.

    http://tizen.org/privilege/wifidirect

    http://tizen.org/privilege/widget.viewer

    public

    Showing widgets

    The application can show widgets, and information from their associated applications, on the home screen.

    http://tizen.org/privilege/wifidirect

    public

    Managing Wi-Fi Direct information

    The application can enable and disable Wi-Fi Direct, manage Wi-Fi Direct connections, and change Wi-Fi Direct settings.

    http://tizen.org/privilege/window.priority.set

    http://tizen.org/privilege/window.priority.set

    public

    Displaying windows on top of other applications and screen

    The application can appear on top of other windows and screens, including the lock screen, according to the order of priority of the windows. This may prevent you from interacting with other applications or screens until the window for the application is closed.

    Table: Wearable native API privileges
    PrivilegePrivilegeLevel Display name Description

    http://tizen.org/privilege/account.read

    Reading accounts

    The application can read accounts.

    http://tizen.org/privilege/account.write

    Managing accounts

    The application can create, edit, and delete accounts.

    http://tizen.org/privilege/alarm.get

    http://tizen.org/privilege/alarm.get

    public

    Retrieving alarms

    The application can read information about the saved alarms.

    http://tizen.org/privilege/alarm.set

    http://tizen.org/privilege/alarm.set

    public

    Setting alarms

    The application can set alarms and wake the device up at scheduled times.

    http://tizen.org/privilege/appmanager.kill

    http://tizen.org/privilege/appmanager.kill

    platform

    Closing applications

    The application can close other applications.

    http://tizen.org/privilege/appmanager.launch

    http://tizen.org/privilege/appmanager.launch

    public

    Launching application

    The application can open other applications.

    http://tizen.org/privilege/bluetooth

    http://tizen.org/privilege/bluetooth

    public

    Using unrestricted Bluetooth services

    The application can perform unrestricted actions using Bluetooth, such as scanning for and connecting to other devices.

    http://tizen.org/privilege/bluetooth.admin

    http://tizen.org/privilege/bluetooth.admin

    platform

    Changing Bluetooth settings

    The application can change Bluetooth settings, such as turning Bluetooth on or off, set the device name, and enable or disable the AV remote control.

    http://tizen.org/privilege/bookmark.admin

    Accessing Internet bookmarks

    The application can retrieve, create, edit, and delete Internet bookmarks.

    http://tizen.org/privilege/calendar.read

    Reading calendar

    The application can read events and tasks.

    http://tizen.org/privilege/calendar.write

    Managing calendar

    The application can create, update, and delete events and tasks.

    http://tizen.org/privilege/call

    http://tizen.org/privilege/call

    public

    Making phone calls

    The application can make phone calls to numbers when they are tapped without further confirmation.

    http://tizen.org/privilege/callhistory.read

    http://tizen.org/privilege/callhistory.read

    public

    Reading call logs

    The application can read call log items.

    http://tizen.org/privilege/callhistory.write

    http://tizen.org/privilege/callhistory.write

    public

    Managing call logs

    The application can create, update, and delete call log items.

    http://tizen.org/privilege/camera

    http://tizen.org/privilege/camera

    public

    Using camera

    The application can take and preview pictures.

    http://tizen.org/privilege/contact.read

    Reading contacts

    The application can read your profile, contacts, and contact history. Contact history can include social network activity.

    http://tizen.org/privilege/contact.write

    Managing contacts

    The application can create, update, and delete your profile, contacts, and any contact history that is related to this application. The contact history can include social network activity.

    http://tizen.org/privilege/content.write

    http://tizen.org/privilege/content.write

    public

    Managing content

    The application can change media information. This information can be used by other applications.

    http://tizen.org/privilege/datasharing

    http://tizen.org/privilege/datasharing

    public

    Sharing data between applications

    The application can share data with other applications.

    http://tizen.org/privilege/display

    http://tizen.org/privilege/display

    public

    Managing display settings

    The application can manage display settings, such as the brightness. This can increase battery consumption.

    http://tizen.org/privilege/download

    http://tizen.org/privilege/download

    public

    Downloading through HTTP

    The application can manage HTTP downloads. This can result in additional charges depending on the user's payment plan.

    http://tizen.org/privilege/externalstorage

    Accessing external storage

    The application can read and write files that are saved to external storage, such as SD cards.

    http://tizen.org/privilege/externalstorage.appdata

    Accessing application data in external storage

    The application can read and write its own files in external storage, such as SD cards.

    http://tizen.org/privilege/haptic

    http://tizen.org/privilege/haptic

    public

    Managing vibration feedback

    The application can control vibration feedback.

    http://tizen.org/privilege/healthinfo

    http://tizen.org/privilege/healthinfo

    public

    Reading health information

    The application can read health information gathered by the device sensors, such as the pedometer and heart rate monitor.

    http://tizen.org/privilege/internet

    Accessing Internet

    The application can access the Internet. This can result in additional charges depending on your payment plan.

    http://tizen.org/privilege/keymanager

    http://tizen.org/privilege/keymanager

    public

    Using secure repository

    The application can save keys, certificates, and data to, and retrieve and delete them from password-protected storage.

    http://tizen.org/privilege/keymanager.admin

    http://tizen.org/privilege/keymanager.admin

    platform

    Locking/unlocking secure repository

    The application can lock and unlock a password-protected storage, and manage password changes for it.

    http://tizen.org/privilege/led

    http://tizen.org/privilege/led

    public

    Managing LEDs

    The application can turn LEDs on or off, such as the LED on the front of the device and the camera flash.

    http://tizen.org/privilege/location

    http://tizen.org/privilege/location

    public

    Using user location

    The application can read your location information.

    http://tizen.org/privilege/location.enable

    http://tizen.org/privilege/location.enable

    platform

    Managing location settings

    The application can control your location service settings.

    http://tizen.org/privilege/mediastorage

    Accessing media folders

    The application can read and write files in media folders.

    http://tizen.org/privilege/message.read

    http://tizen.org/privilege/message.read

    public

    Reading text and multimedia messages and related information

    The application can read text and multimedia messages, and any information related to them.

    http://tizen.org/privilege/message.write

    http://tizen.org/privilege/message.write

    public

    Sending text and multimedia messages and updating their statuses

    The application can write, send, delete, and move text and multimedia messages, and change the settings and statuses of the messages, such as read or unread.

    http://tizen.org/privilege/network.get

    http://tizen.org/privilege/network.get

    public

    Reading network information

    The application can retrieve network information such as the status of each network, its type, and detailed network profile information.

    http://tizen.org/privilege/network.profile

    http://tizen.org/privilege/network.profile

    public

    Managing network profiles

    The application can add, remove, and edit network profiles.

    http://tizen.org/privilege/network.set

    http://tizen.org/privilege/network.set

    public

    Managing network connections

    The application can turn Wi-Fi on and off, and connect to and disconnect from Wi-Fi and mobile networks.

    http://tizen.org/privilege/nfc

    http://tizen.org/privilege/nfc

    +

    public

    Using basic NFC services

    The application can read and write NFC tag information, and send NFC messages to other devices.

    http://tizen.org/privilege/nfc.admin

    http://tizen.org/privilege/nfc.admin

    platform

    Managing NFC general settings

    The application can change NFC settings, such as turning NFC on or off.

    http://tizen.org/privilege/nfc.cardemulation

    http://tizen.org/privilege/nfc.cardemulation

    public

    Using NFC card emulation mode

    The application can access smart card details, such as credit card details, and allow users to make payments via NFC.

    http://tizen.org/privilege/notification

    http://tizen.org/privilege/notification

    public

    Providing notifications

    The application can show and hide its own notifications and badges.

    http://tizen.org/privilege/packagemanager.admin

    http://tizen.org/privilege/packagemanager.admin

    platform

    Installing/uninstalling application packages and clearing caches

    The application can install and uninstall application packages, and clear application caches.

    http://tizen.org/privilege/packagemanager.info

    http://tizen.org/privilege/packagemanager.info

    public

    Retrieving detailed package information

    The application can retrieve detailed application package information.

    http://tizen.org/privilege/power

    http://tizen.org/privilege/power

    public

    Managing power

    The application can control power-related settings, such as dimming the screen.

    http://tizen.org/privilege/push

    http://tizen.org/privilege/push

    public

    Receiving push notifications

    The application can receive notifications from the Internet.

    http://tizen.org/privilege/recorder

    http://tizen.org/privilege/reboot

    platform

    Restarting device

    The application can restart the device.

    http://tizen.org/privilege/recorder

    public

    Recording video and audio

    The application can record video and audio.

    http://tizen.org/privilege/screenshot

    http://tizen.org/privilege/screenshot

    platform

    Capturing device screen

    The application can capture screenshots.

    http://tizen.org/privilege/secureelement

    http://tizen.org/privilege/secureelement

    public

    Accessing secure elements

    The application can access secure smart card chips, such as UICC/SIM, embedded secure elements, and secure SD cards.

    http://tizen.org/privilege/shortcut

    Managing shortcuts

    The application can create and delete shortcuts.

    http://tizen.org/privilege/systemsettings

    Managing unrestricted system settings

    The application can read and write unrestricted system settings.

    http://tizen.org/privilege/systemsettings.admin

    http://tizen.org/privilege/systemsettings.admin

    platform

    Managing all system settings

    The application can read and write all system settings.

    http://tizen.org/privilege/telephony

    http://tizen.org/privilege/telephony

    public

    Accessing telephony information

    The application can retrieve telephony information, such as the network and SIM card used, the IMEI, and the statuses of calls.

    http://tizen.org/privilege/telephony.admin

    http://tizen.org/privilege/telephony.admin

    platform

    Managing telephony settings

    The application can manage telephony settings, such as those for incoming and outgoing calls, forwarding and holding calls, networks, and SIM cards.

    http://tizen.org/privilege/tethering.admin

    Accessing tethering services

    The application can enable and disable tethering services.

    http://tizen.org/privilege/volume.set

    http://tizen.org/privilege/volume.set

    public

    Adjusting volume

    The application can adjust the volume for different features, such as notification alerts, ringtones, and media.

    http://tizen.org/privilege/web-history.admin

    Managing Internet history

    The application can manage your Internet history.

    http://tizen.org/privilege/widget.viewer

    public

    Showing widgets

    The application can show widgets, and information from their associated applications, on the home screen.

    http://tizen.org/privilege/window.priority.set

    http://tizen.org/privilege/window.priority.set

    public

    Displaying windows on top of other applications and screen

    The application can appear on top of other windows and screens, including the lock screen, according to the order of priority of the windows. This may prevent you from interacting with other applications or screens until the window for the application is closed.

    PrivilegeLevel Display name Description

    http://tizen.org/privilege/internet

    http://tizen.org/privilege/internet

    public

    Internet

    Most of the mobile and wearable devices use a cellular network for IP communication. However, the cellular network can cause data costs and an application that sends data through the Internet can be crucial for user privacy. Due to the importance of the functionality, a privilege for controlling application Internet access has been added.

    The new privilege is coupled with IP addresses of the destination and source of the IP packets. If your socket is connecting to or listening for any IP address except 127.0.0.1, this privilege is required to communicate properly. If your application does not have this privilege, the connection is blocked in the kernel layer and returns an error in the connect() function as the permission is denied. If you are listening to a socket, you never receive any packets from the outside without errors on the socket functions.

    If you are using the listen() and connect() functions between the local loopback interface (127.0.0.1), you cannot connect to a random application (due to sandboxing) no matter how you add this privilege. However, you can connect between multiple processes of the same application binary.

    http://tizen.org/privilege/mediastorage

    http://tizen.org/privilege/mediastorage

    public

    Media storage

    When you connect the device to a computer (Windows or Mac) through USB, you can access a dedicated media storage area shown as massive media storage. This region of the storage is called media storage and is usually used for multimedia files, such as photos, videos, and music files. Since this storage area is used for user private data, access to it must be protected with a privilege.

    -

    If your application does not have this privilege, no file operations into the media storage area (/opt/usr/media/) succeed and you receive a permission denied error. If you have this privilege, you can read and write directories and files, create new files, and delete files in the storage area.

    http://tizen.org/privilege/externalstorage

    http://tizen.org/privilege/externalstorage

    public

    External storage

    Similar to the media storage, many devices support external storages, such as MicroSD card or USB memory. As with the media storage, the access to an external storage (usually /opt/storage/sdcard) must be protected with a privilege.

    +

    Similar to the media storage, many devices support external storages, such as MicroSD card or USB memory. As with the media storage, the access to an external storage must be protected with a privilege. You can find the absolute path of the external storage with the Storage API functions, such as storage_get_root_directory().

    If your application does not have this privilege, all file operations fail with a permission denied error. If you have this privilege, you have full access to the external storage.

    http://tizen.org/privilege/externalstorage.appdata

    public

    External storage application data

    Many devices support external storages, such as MicroSD card or USB memory. As with the media storage, the access to an external storage must be protected with a privilege.

    +

    If your application does not have this privilege, no file operations with the application data stored in the external storage area succeed and you receive a permission denied error. If you have this privilege, you can store data in the application-specific directory of the external storage. You can find the path for storing data in the external storage with, for example, the app_get_external_data_path(), app_get_external_cache_path(), and app_get_external_shared_data_path() functions.

    diff --git a/org.tizen.gettingstarted/html/native/details/tizen_apis_n.htm b/org.tizen.gettingstarted/html/native/details/tizen_apis_n.htm index 1dd7299..30f3730 100644 --- a/org.tizen.gettingstarted/html/native/details/tizen_apis_n.htm +++ b/org.tizen.gettingstarted/html/native/details/tizen_apis_n.htm @@ -98,7 +98,7 @@ - Widget + Widget Handles Tizen widget application state changes and system events. It is also used to start and exit the main event loop of widget applications. @@ -402,7 +402,7 @@ A library for 2D vector graphics drawing. Vector graphics are advantageous because they have small file sizes and can be scaled to any size without any loss of image quality. -EFL +EFL EFL is a collection of libraries that are independent and can be built on top of each other to provide useful features that complement the existing environment. @@ -532,7 +532,7 @@ - Widget + Widget Handles Tizen widget application state changes and system events. It is also used to start and exit the main event loop of widget applications. @@ -543,8 +543,8 @@
  • Guides: Base
  • Tutorials: Base
  • - C Standard Library - Standard C library. + C++ Standard Library + Standard C++ library. EGlibc @@ -802,7 +802,7 @@ A library for 2D vector graphics drawing. Vector graphics are advantageous because they have small file sizes and can be scaled to any size without any loss of image quality. -EFL +EFL EFL is a collection of libraries that are independent and can be built on top of each other to provide useful features that complement the existing environment. diff --git a/org.tizen.gettingstarted/html/native/first_app/first_app_n.htm b/org.tizen.gettingstarted/html/native/first_app/first_app_n.htm index e1f3d91..d25f912 100644 --- a/org.tizen.gettingstarted/html/native/first_app/first_app_n.htm +++ b/org.tizen.gettingstarted/html/native/first_app/first_app_n.htm @@ -1,134 +1,69 @@ - - - - - - - - - - -Creating Your First Tizen Application + + + + + + + + + + + Creating Your First Tizen Application -
    - -
    -
    -
    -
    -

    - Mobile native Wearable native -

    -
    -

    Creating Your First Tizen Application

    - -

    - Before you get started with developing Tizen applications, you must - download and install the Tizen - SDK (software development kit). For more information about the - installation process, see the Tizen developer site. -

    - -

    - This tutorial demonstrates how you can create a simple HelloWorld - application. Study this tutorial to help familiarize yourself with - the Tizen native - application development process as well as using the Tizen SDK and - installing the created application on the Emulator or target - device. -

    -

    - When you are developing a more complex application, you can take - advantage of the tools - included in the SDK to ease the tasks of creating functionality - and designing the application UI. -

    -

    To Create a HelloWorld - Application

    -
      -
    1. Creating the HelloWorld Project -
        -
      1. Launch the Tizen IDE. -
      2. -
      3. Create - the application project in the IDE. -

        - During the project creation, use the basic Tizen project - template: in the New Tizen Native Project - window, select Template > {Platform} (e.g. - MOBILE-x.x or WEARABLE-x.x) > Basic UI - Application. -

      4. -
      5. Define helloworld as the name of your - project and click Finish. -
      6. -
      - -

      Figure: Creating the helloworld project

      -

      - Creating the helloworld project -

      - - -

      - The new helloworld project is shown in the Project - Explorer view of the IDE, with default content in the tizen-manifest.xml - configuration file as well as in several other project files, - including: -

      -
        -
      • inc - folder: Application header file directory
      • -
      • src - folder: C files directory
      • -
      -
    2. - -
    3. Configuring the Application and Creating the Application - Code -

      To configure the application:

      -
        -
      1. Set - the project properties by modifying the tizen-manifest.xml - file.
      2. -
      3. Implement the application code in the helloworld.c - file. -
      4. -
      - -

      When coding the application, note that the Tizen Native API - follows the basic principles listed below:

      - -
        -
      • Ownership of returned strings -

        All strings returned as pointers should be freed by the - caller unless stated otherwise.

        -

        To not free memory may lead to memory leaks. Insufficient - system memory will trigger a system low memory notification and - some applications may be killed. As a heuristic algorithm - selects the process to be killed, it can destabilize the - system.

        +
        +
        + +
        +
        +

        Mobile native Wearable native

        +
        + +

        Creating Your First Tizen Application

        + +

        Before you get started with developing Tizen applications, you must download and install the Tizen SDK (software development kit). For more information about the installation process, see the Tizen developer site.

        + +

        This tutorial demonstrates how you can create a simple HelloWorld application. Study this tutorial to help familiarize yourself with the Tizen native application development process as well as using the Tizen SDK and installing the created application on the Emulator or target device.

        +

        When you are developing a more complex application, you can take advantage of the tools included in the SDK to ease the tasks of creating functionality and designing the application UI.

        +

        To Create a HelloWorld Application

        +
          +
        1. Creating the HelloWorld Project +
            +
          1. Launch the Tizen IDE.
          2. +
          3. Create the application project in the IDE. +

            During the project creation, use the basic Tizen project template: in the New Tizen Native Project window, select Template > MOBILE|WEARABLE-<version> > Basic UI Application.

          4. +
          5. Define helloworld as the name of your project and click Finish.
          + +

          Figure: Creating the helloworld project

          +

          Creating the helloworld project

          + + +

          The new helloworld project is shown in the Project Explorer view of the IDE, with default content in the tizen-manifest.xml configuration file as well as in several other project files, including:

          +
            +
          • inc folder: Application header file directory
          • +
          • src folder: C files directory
          • +
          +
        2. + +
        3. Configuring the Application and Creating the Application Code +

          To configure the application:

          +
            +
          1. Set the project properties by modifying the tizen-manifest.xml file.
          2. +
          3. Implement the application code in the helloworld.c file.
          4. +
          + +

          When coding the application, note that the Tizen Native API follows the basic principles listed below:

          + +
          • Ownership of returned strings +

            All strings returned as pointers must be freed by the caller unless stated otherwise.

            +

            To not free memory can lead to memory leaks. Insufficient system memory triggers a system low memory notification and some applications can be killed. As a heuristic algorithm selects the process to be killed, it can destabilize the system.

            + +
             char *app_id_string = NULL;
             if (!app_get_id(&app_id_string))
             {
            @@ -136,22 +71,11 @@ if (!app_get_id(&app_id_string))
                if (app_id_string != NULL)
                   free(app_id_string);
             }
            -
            -
          • - -
          • Handles -

            A handle provides means to manage an instance associated - with it. Handles are widely used in Tizen Native API for API - compatibility reasons. Creation and destruction functions - (create/destroy) are provided for each handle type. They do not - create and destroy the handle itself, but they operate on the - instance associated with a given handle. It means that a handle - is not valid until a corresponding create function has been - called and the handle is not valid after a corresponding - destroy function has been called. Also accessor functions - (getters/setters) are provided to access members of the hidden - structure identified by a given handle.

            // Text message is represented by a handle
            +
          • + +
          • Handles +

            A handle provides means to manage an instance associated with it. Handles are widely used in Tizen Native API for API compatibility reasons. Creation and destruction functions (create/destroy) are provided for each handle type. They do not create and destroy the handle itself, but they operate on the instance associated with a given handle. It means that a handle is not valid until a corresponding create function has been called and the handle is not valid after a corresponding destroy function has been called. Also accessor functions (getters/setters) are provided to access members of the hidden structure identified by a given handle.

            +
            // Text message is represented by a handle
             messages_message_h sms_msg;
             
             // Create message and associate it with this handle
            @@ -163,65 +87,45 @@ messages_destroy_message(sms_msg);
             // Change the properties of the text message
             messages_set_text(sms_msg,"Hello, how are you?"); 
             messages_add_address (sms_msg,"01020157919", MESSAGE_RECIPIENT_TO);
            -
            -
          • - -
          • Asynchronous function calls -

            Some of Tizen native API functions are asynchronous.

            -

            An asynchronous function starts the processing and - returns before this processing is finished. However, sometimes - one should know, when this processing is finished. In such - cases, waiting for the processing completion notification must - be properly implemented.

            -
          • -
          • Code assist -

            Tizen IDE provides the API assist and API hover features - to make writing content in the native editor quick and - efficient.

            -

            Press CTRL+SPACE while editing your codes to see - available APIs as follows:

            - -

            Figure: Code assist

            -

            - Code assist -

            -
          • -
          -
        4. - -
        5. Creating the Application UI with EFL -

          - The EFL - is the native graphical toolkit for Tizen. This tutorial is an - introduction to the EFL rather than a full-fledged Tizen - application, as it does not use Appcore. -

          - -

          To create the application UI:

          -
            -
          1. Add an interface - -

            In this tutorial, there are the following exercises:

            -
              -
            • a window to hold everything
            • -
            • a conformant, which shows the virtual keyboard - (required by Tizen guidelines)
            • -
            • a naviframe used for applications, which show multiple - screens through their lives with back and forth transitions - between them (required by Tizen guidelines)
            • -
            • a horizontal box with -
                -
              • a label with several lines of text
              • -
              • a button
              • -
              -
            • -
            -
          2. - -
          3. Add an application skeleton with appcore -

            A pointer to important objects is stored in the following - data structure.

            typedef struct appdata 
            +
          4. + +
          5. Asynchronous function calls +

            Some of Tizen native API functions are asynchronous.

            +

            An asynchronous function starts the processing and returns before this processing is finished. However, sometimes one should know, when this processing is finished. In such cases, waiting for the processing completion notification must be properly implemented.

            +
          6. +
          7. Code assist +

            Tizen IDE provides the API assist and API hover features to make writing content in the native editor quick and efficient.

            +

            Press CTRL+SPACE while editing your codes to see available APIs as follows:

            + +

            Figure: Code assist

            +

            Code assist

            +
      +
    4. + +
    5. Creating the Application UI with EFL +

      The EFL is the native graphical toolkit for Tizen.

      + +

      To create the application UI:

      +
        +
      1. Add an interface + +

        In this tutorial, there are the following exercises:

        +
          +
        • a window to hold everything
        • +
        • a conformant, which shows the virtual keyboard (required by Tizen guidelines)
        • +
        • a naviframe used for applications, which show multiple screens through their lives with back and forth transitions between them (required by Tizen guidelines)
        • +
        • a horizontal box with +
            +
          • a label with several lines of text
          • +
          • a button
          • +
          +
        • +
        +
      2. + +
      3. Add an application skeleton with appcore +

        A pointer to important objects is stored in the following data structure.

        +
        typedef struct appdata 
         {
            // All graphical objects here are pointers to the value of the type Evas_Object
            Evas_Object *win;
        @@ -229,13 +133,9 @@ messages_add_address (sms_msg,"01020157919", MESSAGE_RECIPIENT_TO);
            Evas_Object *naviframe;
         } appdata_s;
         
        -

        - The pointer is created and initialized to contain only zeros in - the main() - function. The same applies for the structure of the app_event_callback_s - type, which holds the app-core related callbacks. -

        static bool
        +

        The pointer is created and initialized to contain only zeros in the main() function. The same applies for the structure of the app_event_callback_s type, which holds the app-core related callbacks.

        + +
        static bool
         app_create(void *data)
         {
            appdata_s *ad = data;
        @@ -270,35 +170,23 @@ main(int argc, char *argv[])
         }
         
        - - - - - - - - - -
        Note
        For more information on Appcore, see - the Handling - the Application Fundamentals. -
        -
      4. -
      5. Create the GUI objects -

        - The GUI is created with the create_gui() - function. It receives a pointer to fill in the "ad" - structure. -

        -

        Create the function and mark it static, since it is - reachable only from the current compilation unit (which allows - the compiler produce faster and smaller code).

        -

        Inside the function, create a window and set its name and - title to "Hello World". Add a callback on the - "delete,request" event (when the window is to be - closed).

        static void
        +   
        +    
        +   
        +    
        +   
        +   
        +    
        +   
        +    
        +  
        Note
        For more information on Appcore, see Handling the Application Fundamentals.
        +
      6. +
      7. Create the GUI objects +

        The GUI is created with the create_gui() function. It receives a pointer to fill in the "ad" structure.

        +

        Create the function and mark it static, since it is reachable only from the current compilation unit (which allows the compiler to produce faster and smaller code).

        +

        Inside the function, create a window and set its name and title to "Hello World". Add a callback on the "delete,request" event (when the window is to be closed).

        + +
        static void
         create_gui(appdata_s *ad)
         {
            // Create the window
        @@ -323,8 +211,8 @@ create_gui(appdata_s *ad)
            // elm_win_autodel_set(ad->win, EINA_TRUE);
         
        -

        The conformant goes inside the window first. Everything - created from now on is inside it.

           // Create the conformant
        +

        The conformant goes inside the window first. Everything created from now on is inside it.

        +
           // Create the conformant
            ad->conformant = elm_conformant_add(ad->win);
         
            // Set the conformant use as much horizontal and vertical space as
        @@ -336,16 +224,14 @@ create_gui(appdata_s *ad)
            // in proportion to each other
            elm_win_resize_object_add(ad->win, ad->conformant);
         
        -   // Show the conformant since all widgets are hidden by default
        +   // Show the conformant since all UI components are hidden by default
            evas_object_show(ad->conformant);
         
        -

        The naviframe is useful for applications showing multiple - screens: it enables displaying a screen, switching to another, - moving back to the first (and doing the same with several - screens).

        -

        Only one screen is built: the naviframe is created and - put inside the conformant.

           // Create the naviframe
        +

        The naviframe is useful for applications showing multiple screens: it enables displaying a screen, switching to another, moving back to the first (and doing the same with several screens).

        +

        Only one screen is built: the naviframe is created and put inside the conformant.

        + +
           // Create the naviframe
            ad->naviframe = elm_naviframe_add(ad->conformant);
            elm_object_content_set(ad->conformant, ad->naviframe);
         
        @@ -353,9 +239,8 @@ create_gui(appdata_s *ad)
            evas_object_show(ad->conformant);
         
        -

        The box is probably the most common container; it - arranges a set of widgets in a vertical or horizontal way.

           // Create the box
        +

        The box is probably the most common container; it arranges a set of UI components in a vertical or horizontal way.

        +
           // Create the box
            Evas_Object *box = elm_box_add(ad->naviframe);
         
            // Set the box vertical
        @@ -374,8 +259,8 @@ create_gui(appdata_s *ad)
            evas_object_show(box);
         
        -

        Labels hold text with formatting and over multiple lines.

        -
           // Create the label
        +

        Labels hold text with formatting and over multiple lines.

        +
           // Create the label
            Evas_Object *label = elm_label_add(box);
            // The label expands when its contents need more space
            evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        @@ -400,8 +285,8 @@ create_gui(appdata_s *ad)
            // Show the label
            evas_object_show(label);
         
        -

        The last widget is the button. It exits the application - when clicked.

           // Create the button
        +

        The last UI component is the button. It exits the application when clicked.

        +
           // Create the button
            Evas_Object *button = elm_button_add(box);
         
            // The box expands when its contents need more space
        @@ -419,7 +304,7 @@ create_gui(appdata_s *ad)
            // the callback is below
            evas_object_smart_callback_add(button, "clicked", clicked_cb, NULL);
         
        -   // Add the widget at the end of the box; since the axis starts in the top left
        +   // Add the UI component at the end of the box; since the axis starts in the top left
            // corner and the box is vertical, the end of the box is below the label
            elm_box_pack_end(box, button);
         
        @@ -427,89 +312,52 @@ create_gui(appdata_s *ad)
            evas_object_show(button);
         
        -

        This is how to set the window displaying everything on - screen at once.

           // Show window after the GUI is set up
        +

        This is how to set the window displaying everything on screen at once.

        +
           // Show window after the GUI is set up
            evas_object_show(ad->win);
         }
        -
        -
      8. -
      9. Exit the GUI - -

        - The clicked_cb() - function exits the Elementary; the prototype of the function is - common to all callbacks given to evas_object_smart_callback_add(). - Put the clicked_cb() - function above the create_gui() - function. -

        -

        - For more details on the callbacks, see the Evas - Smart Object Events guide. -

        static void
        +
        +
      10. +
      11. Exit the GUI + +

        The clicked_cb() function exits the Elementary; the prototype of the function is common to all callbacks given to evas_object_smart_callback_add(). Put the clicked_cb() function above the create_gui() function.

        +

        For more details on the callbacks, see the Evas Smart Object Events guide.

        +
        static void
         clicked_cb(void *user_data, Evas_Object *obj, void *event_info)
         {
            elm_exit();
         }
         
        -
      12. -
      -
    6. - -
    7. Building and Packaging the Application -

      - After you have finished implementing your application, you must build it. -

      - -

      After building, the Tizen IDE automatically packages the - project.

      -
    8. - -
    9. Running and Debugging the Application -

      - You can run the HelloWorld application on the Emulator. -

      - -

      The following figure shows the widget running in the - Emulator.

      -

      Figure: Running the project

      -

      - Running the project -

      -
    10. - -
    - - - -
    -
    -
    - - Go to top - - - - + +
    + +Go to top + + + + - + \ No newline at end of file diff --git a/org.tizen.gettingstarted/html/native/process/setting_properties_n.htm b/org.tizen.gettingstarted/html/native/process/setting_properties_n.htm index 44a9d69..daca313 100644 --- a/org.tizen.gettingstarted/html/native/process/setting_properties_n.htm +++ b/org.tizen.gettingstarted/html/native/process/setting_properties_n.htm @@ -111,7 +111,7 @@
  • Set the package name of the application.

    The package name represents the package identifier of the application

  • Set the application version (x.y.z).

    The application version format has the following constraints: 0 ≤ {x, y} ≤ 255, 0 ≤ z ≤ 65535. You can change the application version in the Version field.

  • Set the application label.

    The application label represents the label of the application.

  • -
  • Set the API version.

    The API version format is "x.y".

  • +
  • Set the API version.

    The API version format is "x.y.z".

  • Add application icon.

    You can add a launcher icon to your application by defining it in the Icon panel. The following table describes the available icons.

    - +
    @@ -208,7 +208,7 @@
  • Define application control.

    You can export the application control functionality of your application. To define an application control used to access the functionality of your application, click Add in the Application Control section of the Advanced tab of the manifest editor.

    Each application control can have multiple operation, mime type, and uri attributes.

  • -
  • Add an account. +
  • Add an account (in mobile applications only).

    Account providers, such as Google and Facebook, represent specific service provider-related information or protocol that provides the user accounts. To add, update, or remove accounts, you must register a specific account provider in your application.

    To register an account provider, define the account provider information by clicking Add in the Account section of the Advanced tab of the manifest editor, as described in the following table.

    @@ -290,12 +290,34 @@ diff --git a/org.tizen.gettingstarted/html/preface.htm b/org.tizen.gettingstarted/html/preface.htm index ff28299..2c43f09 100644 --- a/org.tizen.gettingstarted/html/preface.htm +++ b/org.tizen.gettingstarted/html/preface.htm @@ -92,9 +92,9 @@
  • Getting Started

    The getting started with Tizen documentation provides overall information you need to become familiar with Tizen programming and application model. The documentation also walks you through creating your first Tizen application.

  • -
  • Development Environment and Tools -

    The development environment and tools documentation introduces the Tizen software development kit (SDK) and related tools you can use when developing your Tizen application.

    -
  • +
  • Tutorials

    The Tizen tutorials teach you how to incorporate Tizen features into your application. The tutorials contain detailed code examples to help you write the required code in practice.

  • @@ -107,6 +107,9 @@
  • Sample Descriptions

    The Tizen sample descriptions introduce the sample applications provided in the SDK.

  • +
  • Tools +

    The Tizen tools introduce the Tizen software development kit (SDK) and related tools you can use when developing your Tizen application.

    +
  • diff --git a/org.tizen.gettingstarted/html/web/app_model/application_model_w.htm b/org.tizen.gettingstarted/html/web/app_model/application_model_w.htm index 60bec25..af2c0d9 100644 --- a/org.tizen.gettingstarted/html/web/app_model/application_model_w.htm +++ b/org.tizen.gettingstarted/html/web/app_model/application_model_w.htm @@ -32,10 +32,10 @@

    Tizen Web Application Model

    -

    The Tizen SDK enables you to create Web applications for mobile devices. A Web application comprises HTML, JavaScript, and CSS combined in a package, which can be installed on the Tizen device.

    +

    The Tizen SDK enables you to create Web applications for mobile and wearable devices. A Web application comprises HTML, JavaScript, and CSS combined in a package, which can be installed on the Tizen device.

    A Web application package includes all the support files that are needed by the Web application. Therefore, a Web application can run without any additional external resources or network connectivity after installation.

    The application model supports a rich set of standard W3C/HTML5 features, which include various JavaScript APIs as well as additional HTML markups and CSS features. These features along with the Tizen Device APIs and UI framework support can be used to create rich Web applications in a variety of categories, such as contact, messaging, device information access, multimedia, graphics, and games.

    -

    Tizen supports both Web application packages and hybrid application packages (in mobile applications only), which combine a Web application and 1 or more native service applications.

    +

    Tizen supports both Web application packages and hybrid application packages, which combine a Web application and 1 or more native service applications.

    Applications in the same package follow the same installation life-cycle, handled by the application package manager.

    Application Package Manager

    @@ -151,7 +151,7 @@

    Capability of the account provider.

    Capabilities are defined in the http://<VENDOR_INFORMATION>/accounts/capability/<NAME> IRI format.

    The following predefined capabilities can be used in Tizen:

      -
    • -http://tizen.org/account/capability/contact

      Used when the account is related to the contacts.

      -
    • -
    • -http://tizen.org/account/capability/calendar

      Used when the account is related to the calendar.

      -
    • +
    • + http://tizen.org/account/capability/calendar

      Used when the account is related to a calendar.

      +
    • +
    • + http://tizen.org/account/capability/contact

      Used when the account is related to contacts.

      +
    • +
    • + http://tizen.org/account/capability/document

      Used when the account is related to a document.

      +
    • +
    • + http://tizen.org/account/capability/email

      Used when the account is related to email.

      +
    • +
    • + http://tizen.org/account/capability/game

      Used when the account is related to a game.

      +
    • +
    • + http://tizen.org/account/capability/message

      Used when the account is related to a message.

      +
    • +
    • + http://tizen.org/account/capability/music

      Used when the account is related to music.

      +
    • +
    • + http://tizen.org/account/capability/photo

      Used when the account is related to a photo.

      +
    • +
    • + http://tizen.org/account/capability/video

      Used when the account is related to a video.

      +
    • +

    This is an optional property.

  • -

    Hybrid Application Package in Mobile Applications

    +

    Hybrid Application Package

    A hybrid application package must conform to the following conventions:

    • Package format and file extension diff --git a/org.tizen.gettingstarted/html/web/details/tizen_apis_w.htm b/org.tizen.gettingstarted/html/web/details/tizen_apis_w.htm index b2624ee..b73a16a 100644 --- a/org.tizen.gettingstarted/html/web/details/tizen_apis_w.htm +++ b/org.tizen.gettingstarted/html/web/details/tizen_apis_w.htm @@ -28,7 +28,7 @@

      Using the Tizen Web API modules, you can develop rich Web applications and build great application experiences with well-known Web programming languages: HTML, CSS, and JavaScript. Just like every major browser in the market, the Tizen Web API modules support the latest HTML5 capabilities, such as animation, offline, audio, and video. By utilizing the standard HTML5 capabilities, your Web applications are ready to run across various devices and platforms with minimal customization. In addition to the JavaScript-based Tizen Device API, you can also enable advanced device access from your Web applications, such as Bluetooth and NFC.

      -

      The Tizen platform supports hybrid applications (1 mobile Web application and 1 or more mobile native applications). A hybrid application package is very useful to mobile Web applications that need background processing or monitoring. With a hybrid application package, you can register the included applications in the Tizen Store and install, upgrade, and uninstall them using a single hybrid package. For more information on developing hybrid Web applications with Tizen mobile devices, see Packaging Hybrid Applications.

      +

      The Tizen platform supports hybrid applications (1 Web application and 1 or more native applications). A hybrid application package is very useful to Web applications that need background processing or monitoring. With a hybrid application package, you can register the included applications in the Tizen Store and install, upgrade, and uninstall them using a single hybrid package. For more information on developing hybrid Web applications with Tizen devices, see Packaging Hybrid Applications.

      Tizen provides a wide range of Web API modules that allow you to take full advantage of various Tizen features.

      The following table lists the features provided by the Mobile Web Device API Reference.

      @@ -155,7 +155,7 @@ @@ -273,7 +273,7 @@ diff --git a/org.tizen.gettingstarted/html/web/first_app/first_app_w.htm b/org.tizen.gettingstarted/html/web/first_app/first_app_w.htm index 7096597..16c0852 100644 --- a/org.tizen.gettingstarted/html/web/first_app/first_app_w.htm +++ b/org.tizen.gettingstarted/html/web/first_app/first_app_w.htm @@ -1,423 +1,160 @@ - - - - - - - - - - -Creating Your First Tizen Application + + + + + + + + + + + Creating Your First Tizen Application - - -
      -
      -
      -

      Creating Your First Tizen Application

      - -

      - Before you get started with developing Tizen applications, you must - download and install the Tizen - SDK (software development kit). For more information about the - installation process, see the Tizen developer site. -

      - - -

      Creating Your First Mobile Web - App

      - -

      - This tutorial demonstrates how you can create a simple HelloWorld - application. Study this tutorial to help familiarize yourself with - the Tizen Web - application development process as well as using the Tizen SDK and - installing the created application on the Emulator or target - device. -

      -

      - When you are developing a more complex application, you can take - advantage of the tools - included in the SDK to ease the tasks of creating functionality - and designing the application UI. -

      -

      To Create a HelloWorld - Application

      -
        -
      1. Creating the HelloWorld Project -
          -
        1. Launch the Tizen IDE. -
        2. -
        3. Create - the application project in the IDE. -

          - During the project creation, use the basic Tizen project - template: in the New Tizen Web Project window, - select Template > {Platform} (e.g. MOBILE-x.x) - > Basic Application. -

        4. -
        5. Define helloworld as the name of your - project and click Finish. -
        6. -
        -

        - The new helloworld project is shown in the Project - Explorer view of the IDE, with default content in the config.xml - file as well as in several project folders, including: -

        -
          -
        • css - folder: CSS files directory
        • -
        • js - folder: JavaScript files directory
        • -
        • config.xml - file: Application configuration file
        • -
        • icon.png - file: Icon file
        • -
        • index.html - file: Default HTML file
        • -
        -
      2. -
      3. Configuring the Application and Creating the Application - Code -

        The Web project source files already contain the basic - application functionality.

        -

        The automatically-included code creates an application with - the title "Application Name". To change the title to - HelloWorld, take the following steps (illustrated in the - following figure):

        -
          -
        1. Open index.html - (1). -
        2. -
        3. Locate the title in the code and change - "Application Name" into "HelloWorld" (2).
        4. -
        -

        Figure: HelloWorld project

        -

        - HelloWorld project -

        -

        - You also have various options to set - the application configuration using the config.xml - file and design - the application UI. -

        -
      4. -
      5. Building and Packaging the Application -

        - After you have finished implementing your application, you must build it. -

        -

        - After building, the Tizen IDE automatically packages the project - by creating a .wgt - file. -

        -
      6. -
      7. Running and Debugging the Application on the Emulator -

        - You can run the HelloWorld application on the Emulator, Simulator, - or real - target device. -

        -

        The following figure shows the Web application running in - the Emulator.

        -

        Figure: Running the project

        -

        - Running the project -

        -

        - On a real target device, you can use the Web - Inspector tool to debug - the application. -

        -
      8. -
      - -

      Creating Your First Wearable - Web App

      - -

      - This tutorial demonstrates how you can create a simple Hello - application with the Tizen wearable UI. The tutorial helps you to - familiarize yourself with the Tizen wearable Web application - development process and use the Tizen SDK, installing the created - application on the Emulator or a target device. -

      -

      - When developing a more complex application, you can take advantage - of the tools - included in the SDK to make creating functionality and designing - the application UI easier. -

      - -

      To Create a Hello - Application

      -
        -
      1. Creating the Hello Project -
          -
        1. Launch the Tizen IDE. -
        2. -
        3. Create - the application project in the IDE. -

          - To use the Wearable UI project template, in the New - Tizen Wearable Web Project window, select Template - > {Platform} (e.g. WEARABLE-x.x) > Basic. -

        4. -
        5. Define Hello as the name of your - project and click Finish. -
        6. -
        -

        Figure: Creating the Hello project

        -

        - Creating the Hello project -

        - -

        - The new Hello project is shown in the Project - Explorer view of the IDE, with default content in the config.xml - file as well as in several project folders, including: -

        -
          -
        • css - folder: CSS file directory
        • -
        • js - folder: JavaScript file directory
        • -
        • lib - folder: Tizen wearable UI framework directory -
            -
          • lib/tau/themes/default/tau.min.css: - Release version of the Tizen wearable UI theme
          • -
          • lib/tau/wearable/js/tau.min.js: - Release version of the Tizen wearable UI library
          • -
          • lib/tau/themes/default/tau.css: - Debug version of the Tizen wearable UI theme
          • -
          • lib/tau/wearable/js/tau.js: - Debug version of the Tizen wearable UI library
          • -
        • -
        • config.xml: - Application configuration file
        • -
        • icon.png: - Icon file
        • -
        • index.html: - Default HTML file
        • - -
        -
      2. -
      3. Configuring the Application and Creating the Application - Code -

        The Web project source files already contain the basic - application functionality.

        -
          -
        1. Open the index.html - file (1). -
        2. -
        3. Set the viewport - meta tag (2). -
        4. -
        5. Add the tau.min.css - file (3). -

          - If you created your application project using the Wearable UI - template, the link already exists in the index.html - file. -

        6. -
        7. Add a link to the tau.min.js - file in the script - element (4). -

          - If you created your application project using the Wearable UI - template, the link already exists in the index.html - file. -

        8. -
        - -

        - Figure: index.html - file -

        -

        - index.html file -

        - - -

        - You have various options to set - the application configuration using the config.xml - file and code - the application features. -

        -
      4. - - -
      5. Creating a Layout using the Wearable UI Theme -

        - In the Wearable UI, each scene is named a page. - When you include the ui-page - class attribute in a <div> - element, the attribute applies to the visible Wearable UI theme - and the supporting page navigation features. -

        -

        - For more information about the Tizen wearable UI layout and - components, see Tizen - Wearable Web UI Framework Reference. -

        -
      6. - -
      7. Building and Packaging the Application -

        - When you have finished implementing your application, you must build it. -

        -

        - After building, the Tizen IDE automatically packages the project - by creating a .wgt - package file. -

        -
      8. -
      9. Running and Debugging the Application on the Emulator -

        - You can run the Hello application on the Emulator or a - real target - device. -

        -

        The following figure shows the Web application running in - the Emulator.

        - -

        Figure: Running the project

        -

        - Running the project -

        - -

        - On a real target device, you can use the Web - Inspector tool to debug - the application. -

        -
      10. -
      - - - -
      -
      -
      - - Go to top - - - - + + +
      +

      Creating Your First Tizen Application

      + +

      Before you get started with developing Tizen applications, you must download and install the Tizen SDK (software development kit). For more information about the installation process, see the Tizen developer site.

      + + +

      Creating Your First Mobile Web App

      + +

      This tutorial demonstrates how you can create a simple HelloWorld application. Study this tutorial to help familiarize yourself with the Tizen Web application development process as well as using the Tizen SDK and installing the created application on the Emulator or target device.

      +

      When you are developing a more complex application, you can take advantage of the tools included in the SDK to ease the tasks of creating functionality and designing the application UI.

      +

      To Create a HelloWorld Application

      +
        +
      1. Creating the HelloWorld Project +
          +
        1. Launch the Tizen IDE.
        2. +
        3. Create the application project in the IDE.

          During the project creation, use the basic Tizen project template: in the New Tizen Web Project window, select Template > MOBILE-<version> > Basic Application.

        4. +
        5. Define helloworld as the name of your project and click Finish.
        6. +

        The new helloworld project is shown in the Project Explorer view of the IDE, with default content in the config.xml file as well as in several project folders, including:

        +
          +
        • css folder: CSS files directory
        • +
        • js folder: JavaScript files directory
        • +
        • config.xml file: Application configuration file
        • +
        • icon.png file: Icon file
        • +
        • index.html file: Default HTML file
        • +
      2. +
      3. Configuring the Application and Creating the Application Code +

        The Web project source files already contain the basic application functionality.

        +

        The automatically-included code creates an application with the title "Application Name". To change the title to HelloWorld, take the following steps (illustrated in the following figure):

        +
          +
        1. Open index.html (1).
        2. +
        3. Locate the title in the code and change "Application Name" into "HelloWorld" (2).
        4. +

        Figure: HelloWorld project

        HelloWorld project

        +

        You also have various options to set the application configuration using the config.xml file and design the application UI.

      4. + +
      5. Building and Packaging the Application +

        After you have finished implementing your application, you must build it.

        +

        After building, the Tizen IDE automatically packages the project by creating a .wgt file.

      6. + +
      7. Running and Debugging the Application on the Emulator +

        You can run the HelloWorld application on the Emulator, Simulator, or real target device.

        +

        The following figure shows the Web application running in the Emulator.

        Figure: Running the project

        Running the project

        +

        On a real target device, you can use the Web Inspector tool to debug the application.

      8. +
      + +

      Creating Your First Wearable Web App

      + +

      This tutorial demonstrates how you can create a simple Hello application with the Tizen wearable UI. The tutorial helps you to familiarize yourself with the Tizen wearable Web application development process and use the Tizen SDK, installing the created application on the Emulator or a target device.

      +

      When developing a more complex application, you can take advantage of the tools included in the SDK to make creating functionality and designing the application UI easier.

      + +

      To Create a Hello Application

      +
        +
      1. Creating the Hello Project +
          +
        1. Launch the Tizen IDE.
        2. +
        3. Create the application project in the IDE.

          To use the Wearable UI project template, in the New Tizen Wearable Web Project window, select Template > WEARABLE-<version> > Basic.

        4. +
        5. Define Hello as the name of your project and click Finish.
        6. +
        +

        Figure: Creating the Hello project

        Creating the Hello project

        + +

        The new Hello project is shown in the Project Explorer view of the IDE, with default content in the config.xml file as well as in several project folders, including:

        +
          +
        • css folder: CSS file directory
        • +
        • js folder: JavaScript file directory
        • +
        • lib folder: Tizen wearable UI framework directory +
            +
          • lib/tau/themes/default/tau.min.css: Release version of the Tizen wearable UI theme
          • +
          • lib/tau/wearable/js/tau.min.js: Release version of the Tizen wearable UI library
          • +
          • lib/tau/themes/default/tau.css: Debug version of the Tizen wearable UI theme
          • +
          • lib/tau/wearable/js/tau.js: Debug version of the Tizen wearable UI library
          • +
          +
        • +
        • config.xml: Application configuration file
        • +
        • icon.png: Icon file
        • +
        • index.html: Default HTML file
        • + +
      2. +
      3. Configuring the Application and Creating the Application Code +

        The Web project source files already contain the basic application functionality.

        +
          +
        1. Open the index.html file (1).
        2. +
        3. Set the viewport meta tag (2).
        4. +
        5. Add the tau.min.css file (3). +

          If you created your application project using the Wearable UI template, the link already exists in the index.html file.

        6. +
        7. Add a link to the tau.min.js file in the script element (4). +

          If you created your application project using the Wearable UI template, the link already exists in the index.html file.

        + +

        Figure: index.html file

        index.html file

        + + +

        You have various options to set the application configuration using the config.xml file and code the application features.

      4. + + +
      5. Creating a Layout using the Wearable UI Theme +

        In the Wearable UI, each scene is named a page. When you include the ui-page class attribute in a <div> element, the attribute applies to the visible Wearable UI theme and the supporting page navigation features.

        +

        For more information about the Tizen wearable UI layout and components, see Tizen Advanced UI Framework Reference.

      6. + +
      7. Building and Packaging the Application +

        When you have finished implementing your application, you must build it.

        After building, the Tizen IDE automatically packages the project by creating a .wgt package file.

      8. +
      9. Running and Debugging the Application on the Emulator

        You can run the HelloWorld application on the Emulator or a real target device.

        The following figure shows the Web application running in the Emulator.

        + +

        Figure: Running the project

        Running the project

        + +

        On a real target device, you can use the Web Inspector tool to debug the application.

      10. +
      + + + +
      + +Go to top + + + + diff --git a/org.tizen.gettingstarted/html/web/process/app_dev_process_w.htm b/org.tizen.gettingstarted/html/web/process/app_dev_process_w.htm index fa4edd7..ece17bb 100644 --- a/org.tizen.gettingstarted/html/web/process/app_dev_process_w.htm +++ b/org.tizen.gettingstarted/html/web/process/app_dev_process_w.htm @@ -57,7 +57,7 @@

      Creating the Application Project

      After you have planned and designed your application, you are ready to create the application project in the Tizen IDE.

      -

      When creating the application project, use an applicable project template or sample. Based on the selection, the Tizen Web Project Wizard automatically creates basic functionalities that the application has to implement to be able to run. You can select from a variety of templates and samples. You can also create custom user templates.

      +

      When creating the application project, use an applicable project template or sample. Based on the selection, the Tizen Web Project Wizard automatically creates basic functionalities that the application has to implement to be able to run. You can select from a variety of templates and samples. You can also create custom user templates.

      Setting Project Properties

      @@ -65,7 +65,7 @@

      Designing the Application UI

      -

      You can design the application UI using the widgets defined in the Web UI Framework Reference.

      +

      You can design the application UI using the components defined in the Web UI Framework Reference.

      Coding the Application

      @@ -159,11 +159,11 @@

      The Tizen Web SDK provides the functionality to package a Web application quickly in the required format and to set the package properties.

      -

      You can set the package properties in IDE > Project > Properties > Tizen SDK > Package by selecting the resources to be included in the package. For a Web application, you can set the properties in IDE > Project > Properties > Tizen SDK > Package > Web:

      +

      In the IDE menu, you can set the package properties in Project > Properties > Tizen SDK > Package by selecting the resources to be included in the package. For a Web application, you can set the properties in Project > Properties > Tizen SDK > Package > Web:

      • Set excluding optimization resources

        You can minify your JavaScript, CSS, HTML, and PNG resources and put in an exclude file pattern that you do not want to optimize.

      • -
      • Set hybrid application's main service application (in mobile applications only)
      +
    • Set hybrid application's main service application

    By default, the Web application package is created once. You can view the package content at any point of the application development process by double-clicking the project .wgt file in the Project Explorer view. All the files present in the application project are displayed in a list.

    @@ -176,9 +176,9 @@

    Developing Multiple Projects as a Combined Package

    -

    Tizen supports multi-project applications that combine different types of application templates in hybrid and companion applications.

    +

    Tizen supports multi-project applications that combine different types of application templates in hybrid and companion applications.

    -

    Packaging Hybrid Applications in Mobile Applications

    +

    Packaging Hybrid Applications

    A hybrid application package combines a Web application and 1 or more native service applications.

    To create and run a hybrid application:

    @@ -186,8 +186,7 @@
  • Create a project for a Web UI application and native service application.
  • To establish a project reference between a UI and service application:
      -
    • In the Project Explorer view, right-click the Web UI application.
    • -
    • Select Properties > Project References.
    • +
    • In the Web UI application project context menu, select Properties > Project References.
    • Select the check box for the service application, and click OK.
    In the Project Explorer view, a with <Web UI application> message appears next to the service application project name for each application you have added to the package. diff --git a/org.tizen.gettingstarted/html/web/process/creating_app_project_w.htm b/org.tizen.gettingstarted/html/web/process/creating_app_project_w.htm index 57db4d1..6910f82 100644 --- a/org.tizen.gettingstarted/html/web/process/creating_app_project_w.htm +++ b/org.tizen.gettingstarted/html/web/process/creating_app_project_w.htm @@ -1,321 +1,164 @@ - - - - - - - - - + + + + + + + + + -Creating the Application Project + Creating the Application Project - +
    +

    Creating the Application Project

    +

    You can create a Web application project by selecting from a variety of templates and samples. The following instructions are specific for creating the project with a template.

    +

    To create a Web application project:

    +
      +
    1. In the IDE, select File > New > Tizen Web Project.

      If the project option you want is not visible, make sure that you are using the correct perspective (Tizen Web). To switch perspectives, go to Window > Open Perspective > Other and select the perspective you need.

    2. +
    3. In the New Tizen Web Project window, define the project details: +
        +
      1. Select the project type.
      2. +
      3. Define the name of your project.

        The default location for your application project is defined.

        + + + + + + + + + +
        Note
        The Tizen API names cannot be used as project names. The project name must be more than 2 characters and is restricted to the following regular expression: [a-zA-Z][a-zA-Z0-9-]{2,49}.
      4. +
    4. +
    5. Click Finish.
    6. +
    +

    The new application project is shown in the Project Explorer view of the IDE, with default content in the config.xml file as well as in several project folders.

    +

    Figure: Creating a Tizen mobile Web project

    +

    Creating a Tizen mobile Web project

    -
    -
    -
    -

    Creating the Application Project

    -

    - You can create a Web application project by selecting from a - variety of templates and samples. The - following instructions are specific for creating the project with a - template. -

    -

    To create a Web application project:

    -
      -
    1. In the IDE, select File > New > - Tizen Web Project. -

      - If the project option you want is not visible, make sure that you - are using the correct perspective (Tizen Web). To switch - perspectives, go to Window > Open Perspective - > Other and select the perspective you need. -

    2. -
    3. In the New Tizen Web Project window, - define the project details: -
        -
      1. Select the project type.
      2. -
      3. Define the name of your project. -

        The default location for your application project is - defined.

        - - - - - - - - - -
        Note
        The Tizen API names cannot be used as - project names. The project name must be more than 2 - characters and is restricted to the following regular - expression: [a-zA-Z][a-zA-Z0-9-]{2,49}.
        -
      4. -
      -
    4. -
    5. Click Finish. -
    6. -
    -

    - The new application project is shown in the Project - Explorer view of the IDE, with default content in the config.xml - file as well as in several project folders. -

    -

    Figure: Creating a Tizen mobile Web project

    -

    - Creating a Tizen mobile Web project -

    +

    Figure: Creating a Tizen wearable Web project

    +

    Creating a Tizen wearable Web project

    -

    Figure: Creating a Tizen wearable Web project

    -

    - Creating a Tizen wearable Web project -

    + +

    Importing a Project

    +

    If you have an existing Tizen application project, you can import it into the Tizen IDE:

    +
      +
    1. Select File > Import > Tizen > Tizen Project or Package.
    2. +
    3. Click Browse and select the root directory, which contains your existing project, or Web application package file (with the .wgt extension).
    4. +
    5. Click the selection buttons under To, and select both a profile and a version.
    6. +
    7. Enter a project name.
    8. +
    9. Click Finish.
    10. +
    + -

    Importing a Project

    -

    If you have an existing Tizen application project, you can - import it into the Tizen IDE:

    -
      -
    1. Select File > Import > Tizen > - Tizen Project or Package. -
    2. -
    3. Click Browse and select the root - directory, which contains your existing project, or Web - application package file (with the .wgt - extension). -
    4. -
    5. Click the selection buttons under To, and - select both a profile and a version. -
    6. -
    7. Enter a project name.
    8. -
    9. Click Finish. -
    10. -
    -

    Exporting a Project User Template

    -

    - To export an existing project as a user - template that you can use as a basis for creating other projects: -

    -
      -
    1. Select File > Export > Tizen > - Tizen Web User Template. -
    2. -
    3. In the User Template Export Wizard - window, define the project and user template details: -
        -
      1. Select the source project.
      2. -
      3. Define the name of your user template.
      4. -
      5. Click Browse and select the export - location. -

        - You can add the template to the User Template - tab of the New Tizen Web Project window by - selecting the Import a template to the new - project wizard automatically check box. To select a template - description, preview image, and icon files to be shown in the - Project Wizard, click Next. -

      6. -
      -
    4. -
    5. Click Finish. -
    6. -
    +

    Exporting a Project User Template

    +

    To export an existing project as a user template that you can use as a basis for creating other projects:

    +
      +
    1. Select File > Export > Tizen > Tizen Web User Template.
    2. +
    3. In the User Template Export Wizard window, define the project and user template details: +
        +
      1. Select the source project.
      2. +
      3. Define the name of your user template.
      4. +
      5. Click Browse and select the export location.

        You can add the template to the User Template tab of the New Tizen Web Project window by selecting the Import a template to the new project wizard automatically check box. To select a template description, preview image, and icon files to be shown in the Project Wizard, click Next.

      6. +
    4. +
    5. Click Finish.
    6. +
    + +

    User Template

    +

    You can create custom user templates from existing projects and use these templates to create new projects. The created user templates are located in the <TIZEN_SDK_DATA>/ide/user-templates/web directory and a user-defined directory. When you create a user template, you can define the export location in the User Template Export Wizard.

    +

    Figure: User template export location

    +

    User template export location

    + +

    The <TIZEN_SDK_DATA> directory is different for different platforms:

    +
      +
    • In Windows® XP: C:\tizen-sdk-data (in mobile Web projects) or C:\tizen-wearable-sdk-data (in wearable Web projects)
    • +
    • In Windows® 7: C:\tizen-sdk-data (in mobile Web projects) or C:\tizen-wearable-sdk-data (in wearable Web projects)
    • +
    • In Linux: /home/${USER_NAME}/tizen-sdk-data (in mobile Web projects) or /home/${USER_NAME}/tizen-wearable-sdk-data (in wearable Web projects)
    • -

      User Template

      -

      - You can create custom user templates from - existing projects and then use these templates to create new - projects. The created user templates are located in the <TIZEN_SDK_DATA>/ide/user-templates/web - directory and a user-defined directory. When you create a user - template, you can define the export location in the User Template - Export Wizard. -

      -

      Figure: User template export location

      -

      - User template export location -

      +
    +

    The project folder of a user template consists of project-related files that are copied into new projects created using the user template. You can modify these files in your new project.

    +

    The following table describes the files included in a user template in addition to the project folder content.

    + + + + + + + + + + + + + + + + +
    + Table: User template files +
    FileContents
    description.xml

    This file consists of the following template description information that is displayed in the Project Wizard:

    +
      +
    • <SampleName> tag: Project type name. Several project types can be created using the same user template.
    • +
    • <SampleVersion> tag: Project type version.
    • +
    • <Preview> tag: Preview file name.
    • +
    • <Description> tag: Description title.
    • +
    tizen-app-template.xml

    This file consists of the following template definition information that is displayed in the Project Wizard:

    +
      +
    • <template-name> tag: User template name.
    • +
    • <widget-type> tag: Widget type, which is set as TIZEN by default.
    • +
    • <description-file-name> tag: Description file name, which is set as description.xml by default.
    • +
    • icon64 and icon32 attributes: Icon image file name. The number suffixes refer to the icon size.
    • +
    +

    To create a new user template from an existing user template (instead of an exporting the template from an existing project):

    +
      +
    1. Copy and rename the <TIZEN_SDK_DATA>/ide/user-templates/web folder.

      The folder contains a default template layout.

    2. +
    3. Edit the files within the new folder, or add new files (such as snapshot or icon images and JavaScript and CSS files), as needed.
    4. +
    + + + + +
    -

    - The <TIZEN_SDK_DATA> - directory is different for different platforms: -

    -
      -
    • In Windows® XP: C:\tizen-sdk-data - (in mobile Web projects) or C:\tizen-wearable-sdk-data - (in wearable Web projects) -
    • -
    • In Windows® 7: C:\tizen-sdk-data - (in mobile Web projects) or C:\tizen-wearable-sdk-data - (in wearable Web projects) -
    • -
    • In Linux: /home/${USER_NAME}/tizen-sdk-data - (in mobile Web projects) or /home/${USER_NAME}/tizen-wearable-sdk-data - (in wearable Web projects) -
    • +Go to top -
    -

    - The project - folder of a user template consists of project-related files that - are copied into new projects created using the user template. You - can modify these files in your new project. -

    -

    - The following table describes the files included in a user template - in addition to the project - folder content. -

    - - - - - - - - - - - - - - - - -
    Table: User template files
    FileContents
    description.xml

    This file consists of the following template - description information that is displayed in the Project - Wizard:

    -
      -
    • <SampleName> - tag: Project type name. Several project types can be created - using the same user template.
    • -
    • <SampleVersion> - tag: Project type version.
    • -
    • <Preview> - tag: Preview file name.
    • -
    • <Description> - tag: Description title.
    • -
    tizen-app-template.xml

    This file consists of the following template - definition information that is displayed in the Project Wizard:

    -
      -
    • <template-name> - tag: User template name.
    • -
    • <widget-type> - tag: Widget type, which is set as TIZEN - by default.
    • -
    • <description-file-name> - tag: Description file name, which is set as description.xml - by default.
    • -
    • icon64 - and icon32 - attributes: Icon image file name. The number suffixes refer to - the icon size.
    • -
    -

    To create a new user template from an existing user template - (instead of an exporting the template from an existing project):

    -
      -
    1. Copy and rename the <TIZEN_SDK_DATA>/ide/user-templates/web - folder. -

      The folder contains a default template layout.

    2. -
    3. Edit the files within the new folder, or add new files - (such as snapshot or icon images and JavaScript and CSS files), as - needed.
    4. -
    + - - - -
    -
    -
    - - Go to top - - - - - - - + + + + \ No newline at end of file diff --git a/org.tizen.gettingstarted/html/web/process/run_debug_app_w.htm b/org.tizen.gettingstarted/html/web/process/run_debug_app_w.htm index 4a6d256..0e1954e 100644 --- a/org.tizen.gettingstarted/html/web/process/run_debug_app_w.htm +++ b/org.tizen.gettingstarted/html/web/process/run_debug_app_w.htm @@ -114,7 +114,7 @@

    When the application is launched, the Web Simulator loads the file specified in the Content field of the config.xml file. The mostly commonly specified file is index.html.

    -

    The simulator renders your application on the browser using the WebKit engine. All the Google Chrome™ browser development features are available in the simulator, including the Web Inspector tool, which can be accessed by pressing the F12 keyboard key. You can leverage the advantages of the Web Simulator tool by setting the device screen size and orientation, and by sending events and messages, such as geolocation data and sensor input events, to your application for debugging it.

    +

    The simulator renders your application on the browser using the WebKit engine. All the Google Chrome™ browser development features are available (by pressing the F12 keyboard key) in the simulator, as is the Web Inspector tool. You can leverage the advantages of the Web Simulator tool by setting the device screen size and orientation, and by sending events and messages, such as geolocation data and sensor input events, to your application for debugging it.

    Debugging Web Applications

    Debugging a Web application enables you to understand its flow of control. You can debug a Web application by running it on the target device and debugging its JavaScript code. JavaScript code debugging uses the Web Inspector tool.

    diff --git a/org.tizen.gettingstarted/html/web/process/setting_properties_w.htm b/org.tizen.gettingstarted/html/web/process/setting_properties_w.htm index 672946a..ebfd9cc 100644 --- a/org.tizen.gettingstarted/html/web/process/setting_properties_w.htm +++ b/org.tizen.gettingstarted/html/web/process/setting_properties_w.htm @@ -67,11 +67,11 @@

    Checking API Privileges

    You can check the source code in your project for any violation of API privileges. To enable the privilege check:

      -
    1. In the Properties window, select Project > Properties > Tizen SDK > Web > Privilege.

    2. +
    3. In the Properties window, select Tizen SDK > Web > Privilege.

    4. If you want to exclude JavaScript files in specified folders, you can do so in the Excluded Folder Settings panel.

      This configuration helps to avoid unnecessary analysis for library files like jQuery.

    To perform privilege checks automatically, select the required option in the Mode Settings panel. To check during the build process, select the Run privilege checks with build option.

    -

    You can also perform the checks manually in the IDE by selecting Project > Check Privilege from the context menu. The results are displayed in the Problems view.

    +

    You can also perform the checks manually in the IDE by selecting Check Privilege from the context menu. The results are displayed in the Problems view.

    Setting Build Properties

    You can set build properties for your project. To select the build properties:

    diff --git a/org.tizen.guides/.project b/org.tizen.guides/.project index 5b99a96..70df182 100644 --- a/org.tizen.guides/.project +++ b/org.tizen.guides/.project @@ -1,6 +1,6 @@ - org.tizen.guides_2.3.0 + org.tizen.guides_2.4.0 diff --git a/org.tizen.guides/html/images/ime_lifecycle.png b/org.tizen.guides/html/images/ime_lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..69d5fa0b25d2e96d09a6e8b6b9199ebb877f4cac GIT binary patch literal 22945 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 X>m6BI#!?DAqnN?d)z4*}Q$iB}jEBjv literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/images/ime_list.png b/org.tizen.guides/html/images/ime_list.png new file mode 100644 index 0000000000000000000000000000000000000000..7fcd99fb0872cec81b3dda94ce447be9f3464dff GIT binary patch literal 2954 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 B#~c6v literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/images/mediavision_ean_13.png b/org.tizen.guides/html/images/mediavision_ean_13.png new file mode 100644 index 0000000000000000000000000000000000000000..d02ccfab5a07403d32de63a90782e5ab66b427f6 GIT binary patch literal 2126 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 literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/images/mediavision_ean_8.png b/org.tizen.guides/html/images/mediavision_ean_8.png new file mode 100644 index 0000000000000000000000000000000000000000..b949403c12e91f081645880898fe40de34b10c42 GIT binary patch literal 1682 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 literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/images/mediavision_qr.png b/org.tizen.guides/html/images/mediavision_qr.png new file mode 100644 index 0000000000000000000000000000000000000000..11ee2bca0d101c61d7f58ff670f95260ee8e8fe6 GIT binary patch literal 4415 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 D3Rq=) literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/images/mediavision_upc_e.png b/org.tizen.guides/html/images/mediavision_upc_e.png new file mode 100644 index 0000000000000000000000000000000000000000..f48289a13bcbe8748c7e0ae030dc75c69ef49672 GIT binary patch literal 2682 zcmb`J`9BkmaN`v}W@&zUgSNJZ}4MUF(s-X(WK5}G5CBUcp5 zJ?9MB2t|CnAK!oB`@`$?e7t^m{{Bj}ykW@B24w>P0PMy_dgwEHoyCBK@vNJc%Qery z5Qa9?1=I}-P|n7AUmbHD0HFRc@EF5%wpoLX9Krwqj_&`$@HwdBKOKtGx5wQK^16xz45weUMU0|z8NQ~apt!vV^7@fG-fBFYwAsp=3~nBAY@mMv z7<JLwG}zw)!<6J=k4v? zRU+@%yFT`BxLR@6h>D`(mtys1w~hyYj}9JZWGthG$H&8_2$-Gu<{+5B%e5{b+@%6`!vePklag_5!-xYL*W*WGcry{UT7!NI{XM?DS@NKb}| zd@-TNUEcox8f5$WvJ`WAmj~hh2PYN;5OepJXA0TCq=yd~zgO8*uS;gOd-ZeuNy9FY zUR%KSRAptsgnI|u#rgTnu!SPc=vIZA!oot9rGbpyBxmiWP84T=Z zu+s6vGJ`MBJG%1-YFq0>_H><7&$a!1%3G5hAbKE zxxJa}ZjU+Dj1QP?wL#=D@&*(QJ@j>P5iHzZT&(x#NmB`$d*SInS?AIcDn?$QP^nHX zF6R7Mxw+?6KwQiK9&aC?j~uM5Az@+Hqs(@d{J+1jwzRzXE6C3;E)zoD%K&NPIMkq^{5)=jb9u z?))9$sl7bj5Ec#HfqBhFO;DMkOe~XDq#N-bk1_}Rxj%^4Muou5#x&fpxfw8pGUdA;lsg6VM9(x(9yDt#_0}mCxtc zHZXa`HL2*Fy1To}knZYGS#*82^G`BM7$YH=srv$;E)EWd@2(D2S5+Yph(fjS+h%4U zfdz3q=iW$?ei9HuJf{W{^_VVW7R7Teo7nRLTh5bezGH2r>3uwv)7KE_L!z_%i;C^^ zw79nAh|(YW6GNm(K`bMsl5}ET<+Ds*Om)O_i9dM+~lnM$I$zgJ)zW#=0aLrU1lcN|Q)-nNFNe z=v{kTEK{houHw+Fb%)@zcPQzB&9Mmkw#L5JkSRc9fQf)oKdsw)_q6CfIb6x{$DDn* zaAe!&p^`#-POWm=x8T*R&4o&VX#T9iP}wW=JvKOYS>Wc#0B!%_B!;V$MZY4Z&(F*h zW3!-FmrAFb-_<*L&cMX@am*9AQLi~d;Hdrn0f>9?&C?AQ|u#=<3<6D~BXQA3vr9qbdJEB0F7h<`VDC`x9la(?3Ym-;t ziZ?RHJ()|{N@wBrJ+jF9cs}DJ%Ok44yYpu65o#u@OTY{+mSydXQ?lsQ=#?^NYpX(nzX zc2ZFE_wVYge7GR6={25K>3k08?KA*8taGY0YBzQT#8XkRef9cJ`Xn8kqYRdn=RX~Z z_G1T*9ciR}4Yn4L;T)tIGW;h}zjq0#PCR5WEm})4*Hwf>(SGNDnY6bM?Rz!KE-9Ak zWto^+`42TRRC)NY2Kh#Wr~NI zDA}#_^oU)P;XI%~!}Fi6y7Y##q3P7IK~-GYHhe+*C7SQbdgGjh)m%nzm~B{hZH8x; z4t+E@4`D_Ng3ad^-R3UiXK9hiIl2{nW5bG)9}dh9Xw7mOUSu31Ic}s`z%p5K;lkDk z{Z6cL-=dw8ctGMKlcu{`0|zD@=t@Shw%mDVf6?(YXYBlkzEl=gTLf6_If~};W5sPA zgAcFSEJ+WhWclZp)tA-bYxHU#{7O4^tpuhcs(y*z6NKcKy>fUX)S}-ijwX6iB^c$x zOl|xyRv~_O9gMvL&v6AWUR7}^399*qcgCcCH{*p(&i!syU-Z6RW3Ww4gHFV$%OS1a zH5t2A!L_}A6f$$+2e(Ng*(`#g>{2rtJr_AhG0mlpf#d-K@V+GkV=x+3gIsHOSf_zi zWgLb-)^H=$!LBT@TwUSH>LR2DH@p4{)E-9AQ@l8G3VCrL(FD7$d~$XT0mk|_^y+lo GR6 literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/images/service_adaptor_structure.jpg b/org.tizen.guides/html/images/service_adaptor_structure.jpg deleted file mode 100644 index 5bdd35d1a083a7bf648651ceac7a873a0f635bd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33976 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 NpK|}1=g`x!{{UvvM(O|n diff --git a/org.tizen.guides/html/images/service_adaptor_structure.png b/org.tizen.guides/html/images/service_adaptor_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..a1492c9fbd405bdf245191104c43707f492a0af9 GIT binary patch literal 114660 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Ʊ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ξ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�Bb) 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 aZX;TC!&9Fw=4UX$&#|MH#ubKcQU3xgITLFD literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/images/voice_control_elm.png b/org.tizen.guides/html/images/voice_control_elm.png new file mode 100644 index 0000000000000000000000000000000000000000..13ea3597230947b6b46f2feb744360703eb98c82 GIT binary patch literal 8972 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 literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/images/watch_app_lifecycle.png b/org.tizen.guides/html/images/watch_app_lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..709c4c9d96a2fc88d02cb21ece15f7ebefab4ca8 GIT binary patch literal 28514 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

    KK8=>u}P8P2 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 literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/images/widget_app_lifecycle.png b/org.tizen.guides/html/images/widget_app_lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..d9cb91acfb0012172d032e281fd709da5ebf241b GIT binary patch literal 21221 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�=eqiRsj$}u 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 Ush=?#AG_g7N=TIq?#iuv4<^%BZ~y=R literal 0 HcmV?d00001 diff --git a/org.tizen.guides/html/index.htm b/org.tizen.guides/html/index.htm index 1b5b07b..b6d27ab 100644 --- a/org.tizen.guides/html/index.htm +++ b/org.tizen.guides/html/index.htm @@ -96,7 +96,7 @@

  • Localization
  • -
  • TAU +
  • Tizen Advaced UI Framework (TAU)
  • -
  • OAuth2
  • Security
    • Key Manager
    • @@ -327,12 +333,12 @@
    • Social -
    • +
    • System +
    • +
    • Telephony +
    • -
    • Telephony
    • UI Framework
    • UIX
    • Web
    • -
    • Sync
    • Porting
      • API Comparison
      • diff --git a/org.tizen.guides/html/native/account/account_guide_n.htm b/org.tizen.guides/html/native/account/account_guide_n.htm new file mode 100644 index 0000000..30478be --- /dev/null +++ b/org.tizen.guides/html/native/account/account_guide_n.htm @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + Account + + + + + + +
        +

        Account

        +

        Account features include managing various account information, such as receiving sync operation notifications, and obtaining an access token by using the oauth2 authorization.

        + +

        The main account features are:

        +
          +
        • oauth2

          +

          Enables you to obtain an access token by using the oauth2 authorization.

        • +
        + + + +

        The following guides apply in mobile applications only:

        + +
          +
        • Sync Manager

          +

          Enables you to receive notifications in your application about syncing operations between a server and the device.

        • +
        + + + +
        + +Go to top + + + + + + + + diff --git a/org.tizen.guides/html/native/oauth2/oauth2_guide_n.htm b/org.tizen.guides/html/native/account/oauth2_n.htm similarity index 93% rename from org.tizen.guides/html/native/oauth2/oauth2_guide_n.htm rename to org.tizen.guides/html/native/account/oauth2_n.htm index 174647a..244ba74 100644 --- a/org.tizen.guides/html/native/oauth2/oauth2_guide_n.htm +++ b/org.tizen.guides/html/native/account/oauth2_n.htm @@ -10,7 +10,7 @@ - OAuth2 + oauth2 @@ -22,16 +22,16 @@
        -

        OAuth2

        +

        oauth2

        The OAuth 2.0 authorization framework enables a 3rd party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the 3rd party application to obtain access on its own behalf.

        Figure: Protocol flow

        @@ -45,7 +45,7 @@

        The specification defines the following 4 grant types as well as an extensibility mechanism for defining additional types:

        • Authorization code -

          The authorization code is obtained by using an authorization server as an intermediary between the client and resource owner. Instead of requesting authorization directly from the resource owner, the client directs the resource owner to an authorization server, which in turn directs the resource owner back to the client with the authorization code.

          +

          The authorization code is obtained by using an authorization server as an intermediary between the client and resource owner. Instead of requesting authorization directly from the resource owner, the client directs the resource owner to an authorization server, which in turn directs the resource owner back to the client with the authorization code.

          The authorization code provides some important security benefits, such as the ability to authenticate the client, as well as the transmission of the access token directly to the client without passing it through the resource owner's user-agent and potentially exposing it to others, including the resource owner.

          Figure: Authorization code flow

          @@ -74,7 +74,7 @@

          Client credentials flow

        -

        To request an access token for the implicit, resource owner password credentials, or client credentials grant type, follow the direct access token request instructions.

        +

        To request an access token for the implicit, resource owner password credentials, or client credentials grant type, follow the direct access token request instructions.

        diff --git a/org.tizen.guides/html/native/sync/sync_guide_n.htm b/org.tizen.guides/html/native/account/sync_manager_n.htm similarity index 92% rename from org.tizen.guides/html/native/sync/sync_guide_n.htm rename to org.tizen.guides/html/native/account/sync_manager_n.htm index 8ed398f..48d9861 100644 --- a/org.tizen.guides/html/native/sync/sync_guide_n.htm +++ b/org.tizen.guides/html/native/account/sync_manager_n.htm @@ -11,7 +11,7 @@ - Sync + Sync Manager @@ -25,14 +25,14 @@

        Related Info

        -

        Sync

        +

        Sync Manager

        Tizen provides notifications for a service application to maintain data consistency between a server and the device. You can manage the synchronization schedule for applications.

        @@ -41,50 +41,14 @@ - +
        Note
        The Sync API domain is supported in mobile applications only.The Sync Manager API domain is supported in mobile applications only.

        On the device, you can receive notifications when the data changes in the calendar or contacts. To receive the notifications, you must define the applicable capabilities (http://tizen.org/account/capability/calendar for the calendar changes and http://tizen.org/account/capability/contact for the contact changes). If you use the Bundle API, you can deliver the change data to the callback function in the form of user_data by using a key-value pair.

        -

        The main sync features are:

        - -
        • Sync adapter -

          The Sync Adapter API allows you to:

          -
            -
          • Register callbacks for notifications about the sync job start and cancellation.
          • -
          • Use an app control to start or cancel the sync operation, so that the application daemon does not need to stay awake. - -

            With the app control mechanism, you can use specific operations exported by other Tizen applications. The mechanism allows you to receive notifications when starting or canceling a sync job without using the App Control API separately. When an app control is used, the application does not need to be in the running state to receive the notifications.

            -

            The following table defines the app control operation details related to a sync operation. The applications does not need to know about them, because the operations are set primitively in the daemon.

            - - - - - - - - - - - - - - - - - - - -
            Table: App control operations -
            OperationValueDescription
            APP_CONTROL_OPERATION_START_SYNChttp://tizen.org/appcontrol/operation/start_syncStart a sync operation by invoking the service application callback.
            APP_CONTROL_OPERATION_CANCEL_SYNChttp://tizen.org/appcontrol/operation/cancel_syncCancel a sync operation by invoking the service application callback.
            - -
          • -
        • - -
        • Sync manager -

          The Sync Manager API include allows you to:

          +

          The main Sync Manager API features are:

          • Add and remove the on-demand sync job schedule.
          • Add and remove the periodic sync job schedule.
          • @@ -126,10 +90,43 @@
            • SYNC_OPTION_NO_RETRY

              This sync option defines whether retrying the sync request is allowed. If the option is set to false, the sync operation tries again after the job fails.

            • SYNC_OPTION_EXPEDITED -

              All sync jobs are passed into a sync job queue. If this sync option is set to true, it gives a priority to its job relative to the other queued jobs. Both the on-demand and periodic jobs in the queue are simultaneously influenced by this option.

              +

              All sync jobs are passed into a sync job queue. If this sync option is set to true, it gives a priority to its job relative to the other queued jobs. Both the on-demand and periodic jobs in the queue are simultaneously influenced by this option.

            -
        + +

        Sync Adapter

        +

        The Sync Adapter API allows you to:

        +
          +
        • Register callbacks for notifications about the sync job start and cancellation.
        • +
        • Use an app control to start or cancel the sync operation, so that the application daemon does not need to stay awake. +

          With the app control mechanism, you can use specific operations exported by other Tizen applications. The mechanism allows you to receive notifications when starting or canceling a sync job without using the App Control API separately. When an app control is used, the application does not need to be in the running state to receive the notifications.

          +

          The following table defines the app control operation details related to a sync operation. The applications does not need to know about them, because the operations are set primitively in the daemon.

          + + + + + + + + + + + + + + + + + + + +
          Table: App control operations +
          OperationValueDescription
          APP_CONTROL_OPERATION_START_SYNChttp://tizen.org/appcontrol/operation/start_syncStart a sync operation by invoking the service application callback.
          APP_CONTROL_OPERATION_CANCEL_SYNChttp://tizen.org/appcontrol/operation/cancel_syncCancel a sync operation by invoking the service application callback.
          + +
        • +
        + +
        diff --git a/org.tizen.guides/html/native/app/app_manager_n.htm b/org.tizen.guides/html/native/app/app_manager_n.htm index cab7089..6fd12cb 100644 --- a/org.tizen.guides/html/native/app/app_manager_n.htm +++ b/org.tizen.guides/html/native/app/app_manager_n.htm @@ -32,15 +32,17 @@

        Application Manager

        -

        The Application Manager provides information about installed and running applications. It provides functions for obtaining the application package name and absolute path to specified resources, such as Image, Sound, Video, and UI layout (EDJ). It also provides functions to:

        -
          -
        • Get the current orientation of the device.
        • -
        • Get the internal and external root folders which are shared among all applications.
        • -
        +

        The application manager provides information about installed and running applications. It provides functions for obtaining the application name and absolute path to share files among all applications.

        -

        Iterator functions step through a list of applications. The app_manager_foreach_app_context() function is used in running applications and app_manager_foreach_app_info() function is used in available (installed, but not necessarily running) applications. Each function calls a callback function (app_manager_app_context_cb or app_manager_app_info_cb), passing the package name of each application found. A query function responds whether the application represented by a particular package name is running.

        - +

        The application manager uses 2 types of application handles:

        +
        • app_context_h is related to the running applications. +

          For more information on the functions that use the app_context_h handle, see the Application Context API (in mobile and wearable applications).

        • +
        • app_info_h is related to the available applications (installed, but not necessarily running). +

          For more information on the functions that use the app_info_h handle, see the Application Information API (in mobile and wearable applications).

        + +

        Iterator functions are used to travel through a list of applications. The app_manager_foreach_app_context() function is used in running applications and the app_manager_foreach_app_info() function is used in available applications. Each function calls a callback function (app_manager_app_context_cb() or app_manager_app_info_cb()), passing the handle for each application.

        +
        diff --git a/org.tizen.guides/html/native/app/application_n.htm b/org.tizen.guides/html/native/app/application_n.htm index a5c89dd..070bcb9 100644 --- a/org.tizen.guides/html/native/app/application_n.htm +++ b/org.tizen.guides/html/native/app/application_n.htm @@ -92,41 +92,36 @@

        For more information, see Managing Application States and Transitions.

        -

        The following table lists the system event events.

        +

        To listen to system events, use the ui_app_add_event_handler() function. The system events are triggered with the app_event_cb() callback function. The following table lists the event types.

        - + - - + + - - + + - - + + - - + + - - + +
        - Table: Callbacks for system events + Table: Event types
        CallbackEvent type Description
        app_low_memory_cb()

        Used to take necessary actions in low memory situations.

        -

        Save data in the main memory to a persistent memory or storage, to avoid data loss in case the Tizen platform Low Memory Killer kills your application to get more free memory. Release any cached data in the main memory to secure more free memory.

        APP_EVENT_LOW_MEMORYEvent type for the callback function that is responsible for saving data in the main memory to a persistent memory or storage to avoid data loss in case the Tizen platform Low Memory Killer kills your application to get more free memory. The callback function must also release any cached data in the main memory to secure more free memory.
        app_low_battery_cb()

        Used to take necessary actions in low battery situations.

        -

        Save data in the main memory to a persistent memory or storage, to avoid data loss in case the power goes off completely. Stop heavy CPU consumption or power consumption activities to save the remaining power.

        APP_EVENT_LOW_BATTERYEvent type for the callback function that is responsible for saving data in the main memory to a persistent memory or storage to avoid data loss in case the power goes off completely. The callback function must also stop heavy CPU consumption or power consumption activities to save the remaining power.
        app_device_orientation_cb()Used to take necessary actions for handling a device orientation change. -

        Change the display orientation to match the device orientation.

        APP_EVENT_DEVICE_ORIENTATION_CHANGEDEvent type for the callback function that is responsible for changing the display orientation to match the device orientation.
        app_language_changed_cb()Used to take necessary actions for handling a language change event. -

        Refresh the display into the new language.

        APP_EVENT_LANGUAGE_CHANGEDEvent type for the callback function that is responsible for refreshing the display into the new language.
        app_region_format_changed_cb()Used to take necessary actions for handling a region change event. -

        A region change means a different time zone; updater the time in the application UI to reflect the time zone change.

        APP_EVENT_REGION_FORMAT_CHANGEDEvent type for the callback function that is responsible for refreshing the display into the new time zone.
        @@ -278,21 +273,7 @@ app_control_destroy(app_control);
      • If only one application is matched for the given categories, that application is launched. If multiple matching applications are found, the application selector is shown and the user can select the proper application.
      • Each app control requires a different combination of the 3 categories. For some, only one category is necessary (for example, URI), for others, all 3 can be needed. Check the app control list and required data in the API Reference to determine the needed categories.
      -

      To allow the application launcher framework to find and select matching applications, each application must describe its operation, URI, or MIME type correctly. The application can have multiple combinations of the operation, URI, and MIME type:

      - - -
      -X-SLP-SVC=[operation1]:[URI1]:[MIME1];[operation2]:[URI2]:[MIME2]
      -
      - -

      In the category description:

      - -
        -
      • Each app control description is separated by a semicolon (;).
      • -
      • Blank is not allowed between fields.
      • -
      • Operation is a mandatory field.
      • -
      • URI and MIME field can be NULL.
      • -
      +

      To allow the application launcher framework to find and select matching applications, each application must describe its operation, URI, or MIME type correctly.

      The following code example launches a camera application with the operation and MIME type:

      @@ -758,9 +739,9 @@ msgstr[2] "%d Komentarzy"

      Handling Language Changes at Runtime

      -

      The user can change the system language settings at any time. When that is done, appcore notifies the application, which changed the language used in the Elementary. The UI components receive a "language,changed" signal and reset their text.

      +

      The user can change the system language settings at any time. When that is done, the framework notifies the application, which changes the language used in the Elementary. The UI components receive a "language,changed" signal and reset their text.

      -

      This is how to handle the appcore event:

      +

      This is how to handle the framework event:

       static void
      diff --git a/org.tizen.guides/html/native/app/badge_n.htm b/org.tizen.guides/html/native/app/badge_n.htm
      index 26821fc..59138f2 100644
      --- a/org.tizen.guides/html/native/app/badge_n.htm
      +++ b/org.tizen.guides/html/native/app/badge_n.htm
      @@ -38,7 +38,8 @@
          

      Badge

      -

      To create a badge, use the badge_new() method with a writable application ID on your application. The writable application ID enables another application to control your application to manage the badge. You can also configure your application to handle the badge itself.

      +

      To create a badge, use the badge_new() method. The application that creates the badge can also update and remove it. When applications are signed with the same certificate, they can control each other's badges.

      +

      If an application not signed with the same certificate must be allowed manage a badge, use the badge_new() method with a writable application ID. The writable application ID enables another application to control your application to manage the badge. You can also configure your application to handle the badge itself.

      diff --git a/org.tizen.guides/html/native/app/watch_n.htm b/org.tizen.guides/html/native/app/watch_n.htm index 9c415c5..1f784ec 100644 --- a/org.tizen.guides/html/native/app/watch_n.htm +++ b/org.tizen.guides/html/native/app/watch_n.htm @@ -20,11 +20,16 @@
    @@ -33,35 +38,112 @@

    Watch Application

    Tizen allows you to create a watch application and manage its life-cycle to display the current date and time accurately on the screen.

    - - - - - - - - - -
    Note
    This feature is supported in wearable applications only.
    -

    The main features of the Watch Application API include:

    -
      -
    • Managing the application life-cycle -

      You can create and initialize a watch application with the main() function.

      -

      To start an event loop, use the watch_app_main() function. Before calling this function, set up the watch_app_lifecycle_callback_s structure variable, which contains the required event callbacks.

    • -
    • Managing the time handle and displaying the time -

      To draw an accurate clock in various formats on the screen, use the Watch Application getter APIs with the watch_time_h time handle. You can get the handle with the watch_time_get_current_time() function.

    • -
    • Managing the ambient mode -

      In a low-powered wearable device, an ambient mode is available. In this mode, the watch application shows a limited UI and receives only the ambient tick event every minute to reduce power consumption.

      -

      The details of the limited UI drawn in the ambient mode depend on the device. Usually, when designing the ambient mode UI, draw a black and white UI only, and use less than 20% of the pixels on the screen. If you do not want to draw your own ambient mode UI, set the ambient-support attribute to false in the watch application tizen-manifest.xml file to allow the platform to show a default ambient mode UI:

      -
      -<watch-application appid="org.tizen.watch.app" exec="app" ambient-support="true|false">
      -
      + + + + + + + + + +
      Note
      This feature is supported in wearable applications only.
      + +

      The main features of the Watch Application API include:

      +
        +
      • Managing the application life-cycle +

        You can create and initialize a watch application with the main() function.

        +

        To start an event loop, use the watch_app_main() function. Before calling this function, set up the watch_app_lifecycle_callback_s structure variable, which contains the required event callbacks.

        +

        When initializing the application, edit the manifest file to define the watch application settings.

        +
      • +
      • Managing the time handle and displaying the time +

        To draw an accurate clock in various formats on the screen, use the Watch Application getter APIs with the watch_time_h time handle. You can get the handle with the watch_time_get_current_time() function.

      • +
      • Managing the ambient mode +

        In a low-powered wearable device, an ambient mode is available. In this mode, the watch application shows a limited UI and receives only the ambient tick event every minute to reduce power consumption.

        +

        The details of the limited UI drawn in the ambient mode depend on the device. Usually, when designing the ambient mode UI, draw a black and white UI only, and use less than 20% of the pixels on the screen. If you do not want to draw your own ambient mode UI, set the ambient-support attribute to false in the watch application manifest file to allow the platform to show a default ambient mode UI.

        +

        To use the ambient mode, the user must enable it in the device settings.

        +
      -

      When a watch application is successfully installed on a device, its UI is visible in the clock menu of the watch settings.

      - +

      Application States and Events

      + +

      The following figure illustrates the watch application states during the application life-cycle:

      +
        +
      • Before the main loop of the application starts, the application is in the Created state.
      • +
      • When the application is running, it is in the Running state.
      • +
      • When the application is invisible, it is in the Paused state.
      • +
      • When the application is in the ambient mode, it is in the Ambient state.
      • +
      • When the application exits, it is in the Terminated state.
      • +
      +

      Figure: Watch application life-cycle

      +

      Watch application life-cycle

      + + +

      The following table lists the callbacks you can use as the application state changes.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + Table: Application state change callbacks +
      CallbackDescription
      app_create()Called before the main loop of the application starts. In this callback, you can initialize application resources, such as window creation and data structure.
      app_control()Used to take necessary actions when a service call arrives from another application.
      app_pause()Called when the application is completely obscured by another application and becomes invisible.
      app_resume()Called when the application becomes visible.
      app_terminate()Called when the application main loop exits.
      app_time_tick()Called at least once per second. Watch applications can get the current time from the watch_time_h handle and draw the normal watch.
      app_ambient_tick()Called at least once per minute or when the device enters the ambient mode. Watch applications can get the current time from the watch_time_h handle and draw the ambient mode watch.
      app_ambient_changed()Called when the device enters or exits the ambient mode.
      + + + + +

      The user can change the watch application UI in the Clock menu through the device setting menu.

      +

      When a watch application is successfully installed on a device, its UI is visible in the clock menu of the watch settings.

      + +

      Figure: Clock menu

      +

      + Clock menu +

      + diff --git a/org.tizen.guides/html/native/app/widget_n.htm b/org.tizen.guides/html/native/app/widget_n.htm index 51fe887..3cf3c49 100644 --- a/org.tizen.guides/html/native/app/widget_n.htm +++ b/org.tizen.guides/html/native/app/widget_n.htm @@ -20,11 +20,16 @@ @@ -33,24 +38,130 @@

      Widget

      -

      You can manage the life-cycle of widget applications and show them on the home screen.

      +

      Widget applications are Tizen native applications shown on the home screen. They are launched by the home screen when the user selects them in the Add Widget menu.

      The main features of the Widget API include:

        -
      • Managing the application life-cycle -

        The widget application starts with the main() function, which initializes the application. The widget_app_main() function is used to start the application event loop. Before calling this function, set up the widget_app_lifecycle_callback_s structure variable, which is passed to the function.

        -

        When initializing the application, edit the manifest file to define the widget settings.

        -
      • Managing multiple widget instances -

        Each widget application can create multiple widget instances that can share the same resources.

        -

        To get and set customized widget instances, use the widget_app_context_set_tag() and widget_app_context_get_tag() functions. To get the ID of a widget instance, use the widget_app_get_id() function.

        +

        Each widget application usually has 1 process for maintaining the main loop. Within that process, the application can create multiple widget instances that can share the same resources.

      • +
      • Managing the life-cycle +

        You can manage the widget application and widget instance life-cycles through callbacks that are triggered as the application or instance state changes.

        +

        The widget application starts with the main() function, which initializes the application. The widget_app_main() function is used to start the application event loop. Before calling this function, set up the widget_app_lifecycle_callback_s structure variable, which is passed to the function.

        +

        To ensure that the application runs smoothly, you must edit the application manifest file to define the widget settings.

      • Creating the widget UI -

        The widget application can draw a UI on the home screen. To do this, you must get the window object of the home screen and draw the UI on it.

      • +

        The widget application can draw a UI on the home screen. To do this, you must get the window object of the home screen and attach UI components to it. You can use the widget_app_get_elm_win() function to create an EFL object for widget window.

      -

      When a widget application is successfully installed on a device, you can see it in the widget list in the Add Widget menu.

      - +

      Widget Application States and Events

      + +

      The following figure illustrates the widget application states during the application life-cycle:

      +
        +
      • When the application is launched, it is in the Ready state.
      • +
      • When the application is running on the background, it is in the Running state.
      • +
      • When the application exits, it is in the Terminated state.
      • +
      +

      Figure: Widget application life-cycle

      +

      Widget application life-cycle

      + + +

      The following table lists the callbacks you can use as the application state changes.

      + + + + + + + + + + + + + + + + + +
      + Table: Application state change callbacks +
      CallbackDescription
      widget_app_create_cb()Called before the main loop of the application starts.
      widget_app_terminate_cb()Called after the main loop of the application exits.
      + +

      Widget Instance States and Events

      + +

      The following figure illustrates the widget instance states during the instance life-cycle:

      +
        +
      • When the application is in the Ready state, the instance does not exist.
      • +
      • When the instance is created, it is in the Created state.
      • +
      • When the instance is visible, it is in the Running state.
      • +
      • When the instance is invisible, it is in the Paused state.
      • +
      • When the instance is destroyed, it is in the Destroyed state.
      • +
      +

      Figure: Widget instance life-cycle

      +

      Widget instance life-cycle

      + + +

      The following table lists the callbacks you can use as the instance state changes.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + Table: Instance state change callbacks +
      CallbackDescription
      widget_instance_create_cb()Called after the widget instance is created.
      widget_instance_destroy_cb()Called before the widget instance is destroyed.
      widget_instance_pause_cb()Called when the widget is invisible.
      widget_instance_resume_cb()Called when the widget is visible.
      widget_instance_resize_cb()Called before the widget size is changed.
      widget_instance_update_cb()Called when an event for updating the widget is received.
      + +

      To register widget instance callbacks, use the widget_app_class_create() function within the widget_app_create_cb() callback function:

      + +
      +static widget_class_h
      +widget_app_create(void *user_data)
      +{
      +   widget_instance_lifecycle_callback_s ops = 
      +   {
      +      .create = widget_instance_create,
      +      .destroy = widget_instance_destroy,
      +      .pause = widget_instance_pause,
      +      .resume = widget_instance_resume,
      +      .update = widget_instance_update,
      +      .resize = widget_instance_resize,
      +   };
      +
      +   return widget_app_class_create(ops);
      +}
      +
      + diff --git a/org.tizen.guides/html/native/base/i18n_n.htm b/org.tizen.guides/html/native/base/i18n_n.htm index b794ec0..2e9be3e 100644 --- a/org.tizen.guides/html/native/base/i18n_n.htm +++ b/org.tizen.guides/html/native/base/i18n_n.htm @@ -24,15 +24,18 @@

      Content

      Related Info

      @@ -50,6 +53,19 @@

      You can generate flexible number or date format patterns and format and parse dates and numbers for any locale. The i18n API is implemented by using the ICU library.

      +

      Ubrk

      +

      The Ubrk API (in mobile and wearable applications) is used to find the location of boundaries in text. The i18n_ubreak_iterator_h handle maintains a current position and scans over the text returning the index of characters where the boundaries occur.

      +

      The following boundary analyzing methods are available:

      +
        +
      • Line boundary analysis determines where a text string can be broken when line-wrapping. The mechanism correctly handles punctuation and hyphenated words.
      • +
      • Sentence boundary analysis allows selection with correct interpretation of periods within numbers and abbreviations, and trailing punctuation marks, such as quotation marks and parentheses.
      • +
      • Word boundary analysis is used by search and replace functions, as well as within text editing applications that allow the user to select words with a double-click. Word selection provides correct interpretation of punctuation marks within and following words. Characters that are not part of a word, such as symbols or punctuation marks, have word-breaks on both sides.
      • +
      • Character boundary analysis identifies the boundaries of Extended Grapheme Clusters, which are groupings of codepoints that must be treated as character-like units for many text operations. For additional information on grapheme clusters and guidelines on their use, see Unicode Standard Annex #29, Unicode Text Segmentation.
      • +
      • Title boundary analysis locates all positions, typically starts of words, that must be set to Title Case when title casing the text.
      • +
      • The text boundary positions are found according to the rules described in Unicode Standard Annex #29, Text Boundaries, and Unicode Standard Annex #14, Line Breaking Properties.
      • +
      + +

      Ucalendar

      The Ucalendar API (in mobile and wearable applications) is used for converting between a Udate object and a set of integer fields such as I18N_UCALENDAR_YEAR, I18N_UCALENDAR_MONTH, I18N_UCALENDAR_DAY, and I18N_UCALENDAR_HOUR. A Udate object represents a specific instant in time with one millisecond precision.

      @@ -70,11 +86,11 @@
  • Combinations of the calendar fields
    I18N_UCALENDAR_MONTH + I18N_UCALENDAR_DAY_OF_MONTH

    -I18N_UCALENDAR_MONTH + I18N_UCALENDAR_WEEK_OF_MONTH + I18N_UCALENDAR_DAY_OF_WEEK

    -I18N_UCALENDAR_MONTH + I18N_UCALENDAR_DAY_OF_WEEK_IN_MONTH + I18N_UCALENDAR_DAY_OF_WEEK

    -I18N_UCALENDAR_DAY_OF_YEAR

    -I18N_UCALENDAR_DAY_OF_WEEK + I18N_UCALENDAR_WEEK_OF_YEAR
    I18N_UCALENDAR_MONTH + I18N_UCALENDAR_DAY_OF_MONTH +

    I18N_UCALENDAR_MONTH + I18N_UCALENDAR_WEEK_OF_MONTH + I18N_UCALENDAR_DAY_OF_WEEK

    +

    I18N_UCALENDAR_MONTH + I18N_UCALENDAR_DAY_OF_WEEK_IN_MONTH + I18N_UCALENDAR_DAY_OF_WEEK

    +

    I18N_UCALENDAR_DAY_OF_YEAR

    +

    I18N_UCALENDAR_DAY_OF_WEEK + I18N_UCALENDAR_WEEK_OF_YEAR

    @@ -89,8 +105,8 @@ Combinations of the calendar fields - I18N_UCALENDAR_HOUR_OF_DAY

    -I18N_UCALENDAR_AM_PM + I18N_UCALENDAR_HOUR + I18N_UCALENDAR_HOUR_OF_DAY +

    I18N_UCALENDAR_AM_PM + I18N_UCALENDAR_HOUR

    @@ -146,6 +162,13 @@

    The main method is the i18n_udatepg_get_best_pattern() function, since normally the Udatepg API is pre-built with data from a particular locale. However, generators can be built directly from other data as well.

    +

    Uenumeration

    + +

    The Uenumeration API (in mobile and wearable applications) enables you to create an enumeration object out of a given set of strings. The object can be created out of an array of const char* strings or an array of i18n_uchar* strings.

    +

    The enumeration object enables navigation through the enumeration values, with the use of the i18n_uenumeration_next() or i18n_uenumeration_unext() function (depending on the type used for creating the enumeration object), and with the i18n_uenumeration_reset() function.

    +

    You can get the number of values stored in the enumeration object with the i18n_uenumeration_count() function.

    + +

    Ulocale

    The Ulocale API (in mobile and wearable applications) represents a specific geographical, political, or cultural region. Locale-sensitive operations use the Ulocale functions to tailor information for the user. For example, displaying a number is a locale-sensitive operation. The number must be formatted according to the customs and conventions of the user's native country, region, or culture.

    @@ -160,12 +183,12 @@ Options for creating a locale - newLanguage

    - newLanguage + newCountry

    - newLanguage + newCountry + newVariant - - - + newLanguage +

    newLanguage + newCountry

    +

    newLanguage + newCountry + newVariant

    + + +

    The first option is a valid ISO Language Code. These codes are the lower-case two-letter codes as defined by the ISO-639 standard.

    @@ -189,6 +212,181 @@

    Usearch

    The Usearch API (in mobile and wearable applications) provides language-sensitive text searching based on the comparison rules defined in a Ucollator data struct.

    +

    Uset

    +

    Uset is a mutable set of Unicode characters and multicharacter strings. The sets represent character classes used in regular expressions. A character specifies a subset of the Unicode code points. The legal code points are U+0000 to U+10FFFF, inclusive.

    +

    The set supports 2 functions:

    +
    • The operand function allows the caller to modify the value of the set. The operand function works similarly to the boolean logic: a boolean OR is implemented by add, a boolean AND is implemented by retain, a boolean XOR is implemented by a complement taking an argument, and a boolean NOT is implemented by a complement with no argument. In terms of traditional set theory function names, add is a union, retain is an intersection, remove is an asymmetric difference, and complement with no argument is a set complement with respect to the superset range MIN_VALUE-MAX_VALUE.
    • +
    • The i18n_uset_apply_pattern() or i18n_uset_to_pattern() function. Unlike the functions that add characters or categories, and control the logic of the set, the i18n_uset_apply_pattern() function sets all attributes of a set at once, based on a string pattern.
    + +

    Pattern Syntax

    + +

    Patterns are accepted by the i18n_uset_create_pattern(), i18n_uset_create_pattern_options(), and i18n_uset_apply_pattern() functions and returned by the i18n_uset_to_pattern() function. The patterns follow a syntax similar to that employed by version 8 regular expression character classes.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Table: Examples of simple pattern syntaxes +
    PatternDescription
    []No characters
    [a]Character 'a'
    [ae]Characters 'a' and 'e'
    [a-e]Characters 'a' through 'e' inclusive, in Unicode code point order
    [\u4E01]Character U+4E01
    [a{ab}{ac}]Character 'a' and the multicharacter strings 'ab' and 'ac'
    [\p{Lu}]All characters in the general category 'uppercase letter'
    +

    Any character can be preceded by a backslash in order to remove any special meaning. Whitespace characters are ignored, unless they are escaped.

    +

    Property patterns specify a set of characters having a certain property as defined by the Unicode standard. Both the POSIX-like [:Lu:] and the Perl-like syntax \\p{Lu} are recognized.

    +

    Patterns specify individual characters, ranges of characters, and Unicode property sets. When the elements are concatenated, they specify their union. To complement a set, place a '^' immediately after the opening '['. Property patterns are inverted by modifying their delimiters, [:^foo] and \\P{foo}. In any other location, '^' has no special meaning.

    +

    Ranges are indicated by placing a '-' between 2 characters, as in "a-z". This specifies the range of all characters from the left to the right, in Unicode order. If the left character is greater than or equal to the right character, it is a syntax error. If a '-' occurs as the first character after the opening '[' or '[^', or if it occurs as the last character before the closing ']', it is taken as a literal. This means that [a\-b], [-ab], and [ab-] all indicate the same set of three characters, 'a', 'b', and '-'.

    +

    Sets can be intersected using the '&' operator or the asymmetric set difference can be taken using the '-' operator. For example, [[:L:]&[\\u0000-\\u0FFF]] indicates the set of all Unicode letters with values less than 4096. Operators ('&' and '|') have equal precedence and bind left-to-right. This means that [[:L:]-[a-z]-[\\u0100-\\u01FF]] is equivalent to [[[:L:]-[a-z]]-[\\u0100-\\u01FF]]. This only really matters for difference; intersection is commutative.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Table: Examples of set syntaxes +
    SetDescription
    [a]Set containing 'a'
    [a-z]Set containing 'a' through 'z' and all letters in between, in Unicode order
    [^a-z]Set containing all characters but 'a' through 'z', that is, U+0000 through 'a'-1 and 'z'+1 through U+10FFFF
    [[pat1][pat2]]Union of sets specified by pat1 and pat2
    [[[pat1]&[pat2]]Intersection of sets specified by pat1 and pat2
    [[pat1]-[pat2]]Asymmetric difference of sets specified by pat1 and pat2
    [:Lu:] or \p{Lu}Set of characters having the specified Unicode property, in this case Unicode uppercase letters
    [:^Lu:] or \P{Lu}Set of characters not having the given Unicode property
    + + + + + + + + + + +
    Note
    You cannot add an empty string ("") to a set.
    + + +

    Formal Syntax

    + +

    The following table provide examples of formal syntax patterns.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Table: Formal syntax patterns +
    PatternDescription
    pattern :=('[' '^'? item* ']') | property
    item :=char | (char '-' char) | pattern-expr
    pattern-expr :=pattern | pattern-expr pattern | pattern-expr or pattern
    op :='&' | '-'
    special :='[' | ']' | '-'
    char :=Any character that is not special | ('\' any character) | ('\u' hex hex hex hex)
    property :=Unicode property set pattern
    a := ba can be replaced by b
    a?0 or 1 instance of a
    a*1 or more instances of a
    a | bEither a or b
    'a'Literal string between the quotes
    + + +

    Ustring

    The Ustring API (in mobile and wearable applications) provides general unicode string handling. Some functions are similar in name, signature, and behavior to the ANSI C <string.h> functions, and other functions provide more Unicode-specific functionality.

    The i18n uses 16-bit Unicode (UTF-16) in the form of arrays of i18n_uchar code units. UTF-16 encodes each Unicode code point with either 1 or 2 i18n_uchar code units. This is the default form of Unicode, and a forward-compatible extension of the original, fixed-width form that was known as UCS-2. UTF-16 superseded UCS-2 with Unicode 2.0 in 1996.

    diff --git a/org.tizen.guides/html/native/context/trigger_n.htm b/org.tizen.guides/html/native/context/trigger_n.htm index 9f6fb7d..00c6560 100644 --- a/org.tizen.guides/html/native/context/trigger_n.htm +++ b/org.tizen.guides/html/native/context/trigger_n.htm @@ -212,7 +212,7 @@ context_trigger_rule_entry_destroy(condition); - CONTEXT_TRIGGER_EVENT_POWER_SAVING_MODE +

    CONTEXT_TRIGGER_EVENT_POWER_SAVING_MODE

    CONTEXT_TRIGGER_CONDITION_POWER_SAVING_MODE

    CONTEXT_TRIGGER_IS_ENABLED diff --git a/org.tizen.guides/html/native/guides_n.htm b/org.tizen.guides/html/native/guides_n.htm index 5ec7c7e..e9b2fac 100644 --- a/org.tizen.guides/html/native/guides_n.htm +++ b/org.tizen.guides/html/native/guides_n.htm @@ -38,6 +38,8 @@

    Select the API domain you are interested in and see what Tizen offers for your application:

      +
    • Account +

      Enables you to manage account information, such as receive sync operation notifications, and obtain an access token by using the oauth2 authorization.

    • Application Framework

      Enables you to configure application properties, and manage application data, and runtime environment and behavior.

    • Base @@ -45,7 +47,7 @@
    • Content

      Enables you to manage and store a variety of data types, input and output data, and device content.

    • Context -

      Enables you to recognize actions and gestures.

    • +

      Enables you to recognize actions and gestures, and take advantage of contextual triggers and application usage patterns.

    • Graphics

      Enables you to create and edit various kinds of images, shapes, text, and elements, and recognize specific elements from images and video.

    • Location @@ -55,9 +57,7 @@
    • Multimedia

      Enables you to capture and play various media, download Internet content, and access media streams.

    • Network -

      Enables you to send data to networks and other applications, and receive data back from them.

    • -
    • OAuth2 -

      Enables you to obtain an access token by using the oauth2 authorization.

    • +

      Enables you to send data to networks and other applications, and receive data back from them.

    • Security

      Enables you to increase the security of your application through cryptography, encryption, and request control.

    • Social @@ -72,9 +72,6 @@

      Enables you to handle UI extensions, which include managing sound data, such as voice commands, speech-to-text (STT), and text-to-speech (TTS).

    • Web

      Enables you to access Web content.

    • -
    • Sync in mobile applications only -

      Enables you to receive notifications in your application about syncing operations between a server and the device.

    • -

    For information about features not implemented by a specific API:

    diff --git a/org.tizen.guides/html/native/location/geofence_n.htm b/org.tizen.guides/html/native/location/geofence_n.htm index ad80222..53c48ae 100644 --- a/org.tizen.guides/html/native/location/geofence_n.htm +++ b/org.tizen.guides/html/native/location/geofence_n.htm @@ -28,7 +28,7 @@

    Related Info

    @@ -67,11 +67,11 @@

    If the user revokes a permission to use the location information, the geofence manager state is set to GEOFENCE_MANAGER_PERMISSION_DENIED and the same error is returned back to the application invoking the geofence service.

    -

    Asynchronous geofence-related alerts (in or out) and event callbacks (a fence added or removed) are implemented with callback interfaces. The alerts are received using the GEOFENCE_STATE_UNCERTAIN, GEOFENCE_STATE_IN, and GEOFENCE_STATE_OUT values of the geofence_state_e enumerator.

    +

    Asynchronous geofence-related alerts (in or out) and event callbacks (a fence added or removed) are implemented with callback interfaces. The alerts are received using the GEOFENCE_STATE_UNCERTAIN, GEOFENCE_STATE_IN, and GEOFENCE_STATE_OUT values of the geofence_state_e enumerator.

    Geofence Definition

    The geofence definition defines the parameters of a geofence.

    -

    The 3 types of available geofences are geopoint, Wi-Fi, and Bluetooth. When creating the geofence, the type can be defined using the GEOFENCE_TYPE_GEOPOINT, GEOFENCE_TYPE_WIFI, and GEOFENCE_TYPE_BT values of the geofence_type_e enumerator.

    +

    The 3 types of available geofences are geopoint, Wi-Fi, and Bluetooth. When creating the geofence, the type can be defined using the GEOFENCE_TYPE_GEOPOINT, GEOFENCE_TYPE_WIFI, and GEOFENCE_TYPE_BT values of the geofence_type_e enumerator.

    The geopoint geofences require a geopoint and a radius, and the Wi-Fi and Bluetooth geofences require a MAC address. Based on the defined geofence type, the geofence manager creates the fence for the particular application.

    Geofence Settings

    diff --git a/org.tizen.guides/html/native/location/maps_n.htm b/org.tizen.guides/html/native/location/maps_n.htm index 8308ddf..7427969 100644 --- a/org.tizen.guides/html/native/location/maps_n.htm +++ b/org.tizen.guides/html/native/location/maps_n.htm @@ -23,7 +23,7 @@

    Related Info

    @@ -61,8 +61,8 @@

    The following map providers are supported:

    diff --git a/org.tizen.guides/html/native/multimedia/audio_io_n.htm b/org.tizen.guides/html/native/multimedia/audio_io_n.htm index dae05a1..1464735 100644 --- a/org.tizen.guides/html/native/multimedia/audio_io_n.htm +++ b/org.tizen.guides/html/native/multimedia/audio_io_n.htm @@ -11,25 +11,25 @@ Audio I/O - - + + -
    + @@ -37,73 +37,76 @@

    Audio I/O

    -

    Audio I/O enables your application to manage various media handles.

    -

    The main features of the Audio I/O API include:

    -
      -
    • Recording uncompressed audio -

      Enables you to capture uncompressed PCM data from audio device.

    • +

      Audio I/O enables your application to manage various media handles.

      +

      The main features of the Audio I/O API include:

      + - +

      Enables you to create a multimedia application to play uncompressed PCM data.

      +
    +

    Recording Uncompressed Audio

    The Pulse Code Modulated (PCM) data contains non-compressed audio. The Audio Input API (in mobile and wearable applications) enables your application to record such data from a microphone type input device.

    Audio data is captured periodically, so to receive the audio PCM data from the input device, you must implement the audio input interface to notify the application of audio data events, such as the end of filling audio data.

    Before recording audio, you must define the following PCM data settings:

    • Input device type: -
        +
        • Microphone
      • Audio channels: -
          +
          • Mono (1 channel)
          • Stereo (2 channels)
        • Audio sample type: -
            +
            • Unsigned 8-bit PCM
            • Signed 16-bit little endian PCM
          • Audio sample rate: -
              +
              • 8000 ~ 48000 Hz

            To minimize the overhead of the audio input API, use the optimal channel type, sample type and sampling rate, which can be retrieved using the audio_in_get_channel(), audio_in_get_sample_type() and audio_in_get_sample_rate() functions, respectively.

            +

            The following figures illustrate the general audio input states, and how the state changes when the audio input is interrupted by the system.

            Figure: Audio input states

            Audio input states

            Figure: Audio input states when interrupted by system

            -

            Audio input states when interrupted by system

            +

            Audio input states when interrupted by system

            +

            Playing Uncompressed Audio

            The Pulse Code Modulated (PCM) data contains non-compressed audio. The Audio Output API (in mobile and wearable applications) enables your application to play such data using output devices.

            To play the audio PCM data, the application must call the audio_out_create() function to initialize the audio output handle.

            Before playing audio, your application must define the following PCM data settings:

            • Audio channels: -
                +
                • Mono (1 channel)
                • Stereo (2 channels)
              • Audio sample type: -
                  +
                  • Unsigned 8-bit PCM
                  • Signed 16-bit little endian PCM
                • Audio sample rate: -
                    +
                    • 8000 ~ 48000 Hz
                  - +

                  The following figures illustrate the general audio output states, and how the state changes when the audio output is interrupted by the system.

                  Figure: Audio output states

                  Audio output states

                  Figure: Audio output states when interrupted by system

                  Audio output states when interrupted by system

                  +

                  Using Audio Output

                  For supporting various low-end Tizen devices, the application must follow certain guidelines:

                    @@ -111,17 +114,18 @@

                    Using excessive multiple instances of the Audio Output has a negative effect on the application, because the audio data processing for re-sampling and mixing imposes a heavy burden on the system.

                  • Use device-preferred PCM format.
                      +
                    • To reduce the processing overhead, use the target device-preferred PCM format (for example, use 16-bit little endian, 44.1 kHz, stereo for Wave and Wave M).

                    • Using the preferred format reduces internal operations, such as converting audio samples from mono to stereo or re-sampling audio frequency to fit the target device's input sample rate.

                  • Do not call the Audio Output functions too frequently.
                      -
                    • The Audio Output functions require more time while repeate in the order of audio_out_create > audio_out_prepare > audio_out_unprepare > audio_out_destroy. Therefore, keep the frequency of calling these functions to a minimum. Please note that audio_out_prepare, audio_out_unprepare are much fast than audio_out_create, audio_out_destroy.

                    • -
                  • +
                  • The Audio Output functions require more time while repeated in the order of audio_out_create() > audio_out_prepare() > audio_out_unprepare() > audio_out_destroy(). Therefore, keep the frequency of calling these functions to a minimum. Note that the audio_out_prepare() and audio_out_unprepare() functions are much faster than audio_out_create() and audio_out_destroy().

                  • +
                • Reduce event delay and remove glitches.
                  • The Audio Output API works recursively with events. The smaller the buffer size, the more often are events generated. If you use the Audio Output API with the smallest buffer and other resources (for example, a timer or sensor), the application is negatively influenced by the delay of the event. To prevent problems, set the write buffer size properly based on the other resources you need.

                  • -
                  • To guarantee the working events of the Audio Output API independently, an instance of the Audio Output API needs to be created and worked on the event thread.

                  • +
                  • To guarantee the working events of the Audio Output API independently, an instance of the Audio Output API needs to be created and worked on the event thread.

                • Use double-buffering.
                    diff --git a/org.tizen.guides/html/native/multimedia/media_tools_n.htm b/org.tizen.guides/html/native/multimedia/media_tools_n.htm index e37639e..99b2046 100644 --- a/org.tizen.guides/html/native/multimedia/media_tools_n.htm +++ b/org.tizen.guides/html/native/multimedia/media_tools_n.htm @@ -35,15 +35,15 @@

                    Media tool enables your application to manage various media handles.

                    The main features of the Media Tool API include:

                      -
                    • Creating the media_format handle to specify video or audio information.

                      -

                      You can set and get video or audio information using the media_format handle.

                    • -
                    • Creating the media_packet handle to include metadata (such as pts, dts, and duration) and allocate a buffer to the heap or TBM surface.

                      -

                      You can set and get the metadata using the media_packet handle.

                      +
                    • Creating the media_format_h handle to specify video or audio information.

                      +

                      You can set and get video or audio information using the media_format_h handle.

                    • +
                    • Creating the media_packet_h handle to include metadata (such as pts, dts, and duration) and allocate a buffer to the heap or TBM surface.

                      +

                      You can set and get the metadata using the created media_packet_h handle. Some media_packet_h metadata are NOT filled after creating the media_packet_h handle: pts, dts, duration, extradata, codec data, codec data size, and buffer flags.

                    -

                    The media_format_h handle is created by the caller, who can set and get the video or audio information. The media_format handle creates the media_packet_h handle and allocates the buffer. The caller can set and get the metadata with the media_packet_h handle.

                    +

                    The media_format_h handle is created by the caller, who can set and get the video or audio information. The media_format_h handle creates the media_packet_h handle and allocates the buffer. The caller can set and get the metadata with the media_packet_h handle.

                    The following table describes the reference count design of the media_format_h handle.

                    @@ -63,12 +63,12 @@ media_format_create(&fmt1);
    +

    Create the fmt1 handle and set the media_format_video_mime() or media_format_audio_mime() function.

    - + @@ -83,13 +83,13 @@ - + - + - + @@ -98,7 +98,7 @@ - + @@ -122,7 +122,7 @@ - + diff --git a/org.tizen.guides/html/native/multimedia/media_vision_n.htm b/org.tizen.guides/html/native/multimedia/media_vision_n.htm new file mode 100644 index 0000000..cbd8ba3 --- /dev/null +++ b/org.tizen.guides/html/native/multimedia/media_vision_n.htm @@ -0,0 +1,207 @@ + + + + + + + + + + + + + Media Vision + + + + + +
    + +

    Media Vision

    + +

    You can perceive and understand an image or to extract information from images in ypur application.

    +

    The main features of Media Vision API include:

    + +
      +
    • Handling images +

      You can handle images by creating a source handle and filling it from an image buffer or media packet. Create the source handle with the mv_create_source() function, and fill it with the mv_source_fill_by_buffer() or mv_source_fill_by_media_packet() function.

      +
    • +
    • Detecting barcodes +

      You can detect barcodes in an image or from camera preview streams, and then decrypt them to display messages to the user.

      +

      Before detecting a barcode, you must define the following detection attributes:

      +
        +
      • Barcode detection mode: +
          +
        • Still image
        • +
        • Continuous images (video)
        • +
        +
      • +
      • Barcode detection target: +
          +
        • Detect both 1D and 2D barcodes
        • +
        • Detect 1D barcodes only
        • +
        • Detect 2D barcodes only
        • +
        +
      • +
      +
    • +
    • Generating barcodes +

      You can encrypt a given message, generate a barcode from it, and save it in a memory or as a file.

      +

      Define the barcode type:

      +

      Before generating a barcode, you must define the following generation specifications:

      + +
    • +
    + +

    The following tables provides more information about the barcode generation specifications.

    + +
    fmt1: 1 Define the media_format_h and media_packet_h handles. -

    Create the fmt1 handle.

    media_packet_create(&pkt1, fmt1); fmt1: 2After the media_packet_create() function, you must use the media_format_unref() function.After the media_packet_create() function, you must use the media_format_unref() function, because the media_packet_create() function increases the media_format_h reference count.
    media_format_unref(fmt1);
    media_packet_get_format(pkt1, &tmp); fmt1: 3If you try to call the set_video_info function for fmt1 (tmp), ref_count is bigger than 1, and fmt1 cannot be modified. To modify fmt1 data, call the media_format_make_writable() function.fmt1 ref_count is increased by the media_packet_get_format() function.
    media_format_set_video_info(tmp, ...);media_format_set_video_mime(tmp, ...); fmt1: 3Define the media_format_h and media_packet_h handles. -

    Create the fmt1 handle.

    If you try to modify the fmt1 data (call the media_format_set_video_mime() function) for fmt1 (=tmp), the ref_count is bigger than 1, and fmt1 cannot be modified. +

    To modify the fmt1 data, call the media_format_make_writable() function.

    media_format_make_writable(tmp, &fmt2);If called, the tmp (fmt1) ref_count is decreased. Creates the fmt2 handle and copies the fmt1 data to fmt2.
    media_format_set_video_info(fmt2, ...);media_format_set_video_mime(fmt2, ...); fmt1: 2
    fmt2: 1
    fmt2 ref_count is 1, which means that you can modify the fmt2 data.media_format_unref(fmt2); fmt1: 1
    fmt2: 1
    You must call this function because of the media_packet_set_video(fmt2..) function call.You must call this function because of the media_packet_set_format(pkt2, fmt2) function call.
    media_packet_destroy(pkt1);
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Table: Supported barcode types +
    1D or 2DTypeDescriptionExample
    1-DUPC-AUniversal product code with numeric 12-digit

    UPC-A

    UPC-EUniversal product code with numeric 6-digit

    UPC-E

    EAN-8International article number with numeric 8-digit

    EAN-8

    EAN-13International article number with numeric 13-digit

    EAN-13

    CODE-128Code 128; supports alphanumeric or numeric-only

    CODE-128

    CODE-39Code 39; supports 34 characters consisting of uppercase letters (A to Z), numeric digits (0 to 9), and special characters(-, ., $, /, %, space)

    CODE-39

    INTERLEAVED 2 of 5Interleaved two of five with numeric digits

    UPC-A

    2-DQR codeQuick Response code

    UPC-A

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Table: Supported QR code specifications +
    SpecificationSupport typeDescription
    Error Correction Code (ECC) LevelECC LowRecovery up to 7% damage
    ECC MediumRecovery up to 15% damage
    ECC QuartileRecovery up 25% damage
    ECC HighRecovery up to 30% damage
    Encoding modeNumericNumeric digits ('0', '1', ..., '9')
    AlphanumericAlphanumeric characters: numeric (0, 1, ..., 9), characters (A, B, ..., Z), and punctuation (' ', $, %, *, +, -, '.', /, ':')
    Byte 8-bitRaw 8-bit bytes
    UTF-8Universal character set and Transformation Format 8-bit, encoding characters
    + + + + + +Go to top + + + + + + + \ No newline at end of file diff --git a/org.tizen.guides/html/native/multimedia/metadata_editor_n.htm b/org.tizen.guides/html/native/multimedia/metadata_editor_n.htm index ede1864..64d45a5 100644 --- a/org.tizen.guides/html/native/multimedia/metadata_editor_n.htm +++ b/org.tizen.guides/html/native/multimedia/metadata_editor_n.htm @@ -23,8 +23,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/multimedia/multimedia_guide_n.htm b/org.tizen.guides/html/native/multimedia/multimedia_guide_n.htm index 0171954..5a8c0b4 100644 --- a/org.tizen.guides/html/native/multimedia/multimedia_guide_n.htm +++ b/org.tizen.guides/html/native/multimedia/multimedia_guide_n.htm @@ -42,9 +42,10 @@
  • Media Codec

    Enables you to use codecs to encode and decode video and audio data.

  • Media Controller -

    Enables you to communicate between the media controller server and the media controller client.

  • -
  • Media Tool +

    Enables you to communicate between the media controller server and the media controller client.

  • Media Tool

    Enables you to use media tools to manage various media handles.

  • +
  • Media Vision +

    Enables you to use create and read barcodes.

  • Metadata Editor

    Enables you to edit the metadata of several popular audio formats.

  • Metadata Extractor

    Enables you to extract metadata from the media files.

  • diff --git a/org.tizen.guides/html/native/multimedia/screen_mirroring_n.htm b/org.tizen.guides/html/native/multimedia/screen_mirroring_n.htm index 95c78e1..2cb4135 100755 --- a/org.tizen.guides/html/native/multimedia/screen_mirroring_n.htm +++ b/org.tizen.guides/html/native/multimedia/screen_mirroring_n.htm @@ -23,8 +23,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/multimedia/thumbnail_util_n.htm b/org.tizen.guides/html/native/multimedia/thumbnail_util_n.htm index cc784e8..d3785bd 100644 --- a/org.tizen.guides/html/native/multimedia/thumbnail_util_n.htm +++ b/org.tizen.guides/html/native/multimedia/thumbnail_util_n.htm @@ -23,8 +23,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/network/bluetooth_n.htm b/org.tizen.guides/html/native/network/bluetooth_n.htm index 8944d95..5b4df2b 100644 --- a/org.tizen.guides/html/native/network/bluetooth_n.htm +++ b/org.tizen.guides/html/native/network/bluetooth_n.htm @@ -68,7 +68,7 @@

    You can control the visibility of the BLE device, meaning whether its name appears to others searching for BLE devices. In addition, you discover neighboring BLE devices. This process is asynchronous, so you must build and hold the list of devices in the neighborhood.

  • Controlling remote audio and video devices with Bluetooth AVRCP -

    The Bluetooth AVRCP API (in mobile and wearable applications) provides functions for remotely controlling audio and video devices.

    +

    The Bluetooth AVRCP feature (in mobile and wearable applications) provides functions for remotely controlling audio and video devices.

    Bluetooth AVRCP is used with A2DP. You can handle remote controls (such as play, pause, stop, equalizer, repeat, shuffle, and scan) through AVRCP.

  • diff --git a/org.tizen.guides/html/native/porting/porting_n.htm b/org.tizen.guides/html/native/porting/porting_n.htm index 3c9034e..28435ea 100644 --- a/org.tizen.guides/html/native/porting/porting_n.htm +++ b/org.tizen.guides/html/native/porting/porting_n.htm @@ -163,7 +163,7 @@ data directory.

    UI Applications

    -

    The main difference in creating UI applications is that the whole Tizen::Ui namespace has been replaced with the EFL. To create powerful applications for Tizen, study the EFL documentation.

    +

    The main difference in creating UI applications is that the whole Tizen::Ui namespace has been replaced with the EFL. To create powerful applications for Tizen, study the EFL documentation.

    Service Applications

    The new native API has the same idea of service applications as the 2.2.1 version.

    diff --git a/org.tizen.guides/html/native/social/account_manager_n.htm b/org.tizen.guides/html/native/social/account_manager_n.htm index 287a627..5c02faf 100644 --- a/org.tizen.guides/html/native/social/account_manager_n.htm +++ b/org.tizen.guides/html/native/social/account_manager_n.htm @@ -77,115 +77,118 @@ Account property - Property type + Data type + Mandatory + Description User name - String -

    User name is identity of an account.

    -

    If display name and email address don't register as account member, the user name is shown at an account on accounts screen in the Setting application. -

    This is a mandatory property.

    - + String + Yes + Identity of an account. +

    If the display name and email address are not set for an account, the user name is shown for the account on the Accounts screen in the Setting application.

    + Display name - String -

    Display Name is shown at an account on accounts screen in the Setting application.

    -

    This is a optional property.

    - + String + No + Display name of an account. +

    Display name is shown for the account on the Accounts screen in the Setting application.

    + Email address - String -

    Email address is email address of an account.

    -

    If display name doesn't register as account member, the email address is shown on accounts screen in the Setting application.

    -

    This is an optional property.

    - + String + No + Email address of an account. +

    If the display name is not set for an account, the email address is shown for the account on the Accounts screen in the Setting application.

    + - + Package name - String -

    Package name is one of the an account's package id like app id.

    -

    If package name doesn't register as account member, app id is registerd as package name.

    -

    This is a optional property.

    - - - + String + No + One of an account package IDs, like the app ID. +

    If the package name is not set for an account, the app ID is used as a package name.

    + + + Icon path - String -

    Icon path is icon path of an account.

    -

    Icon is shown through registed icon path as icon of an account on accounts screen in the Setting application.

    -

    This is a optional property.

    - + String + No + Icon path of an account. +

    The icon is shown through the registered icon path as an account icon on the Accounts screen in the Setting application.

    + - + Domain name - String -

    Domain name is domain name of an account.

    -

    This is a optional property.

    - + String + No + Domain name of an account. + - + Access token - String -

    Access token is access token of an account.

    -

    This is a optional property.

    - + String + No + Access token of an account. + - + Auth type - Integer -

    Auth type is authentication type like oauth and xauth.

    -

    This is a optional property.

    - + Integer + No + Authentication type, such as oauth or xauth. + - + Capability - key value string-integer pairs -

    Capability is capability of an account.

    -

    This is a optional property.

    - + Key-value string-integer pairs + No + Capability of an account. + - + Secret - Integer -

    Secret value is used to decide whether the account of accounts list is shown or not on screen of accounts in the Setting application.

    -

    This is a optional property.

    - + Integer + No + The secret value is used to decide whether the account is shown on the Accounts screen in the Setting application. + - - Sync Support - Integer -

    Sync Support is used to show current synchronization status.

    -

    This is a optional property.

    + + Sync support + Integer + No + Current synchronization status. - + Source - String -

    Source is source of an account.

    -

    This is a optional property.

    - + String + No + Source of an account. + - + User text - String -

    User text is string array which application developer freely use.

    -

    This is a optional property.

    - + String + No + String array which you can use freely. + - + User int - Integer -

    User text is integer array which application developer freely use.

    -

    This is a optional property.

    - + Integer + No + Integer array which you can use freely. + - + Custom - key value string pairs -

    Custom is key value pairs which application developer freely use.

    -

    This is a optional property.

    - + Key-value string pairs + No + Key-value pairs which you can use freely. + @@ -201,81 +204,89 @@ Account property Data type - Property type + Mandatory + Description Multiple accounts support bool -

    Indicates whether multiple accounts are supported.

    This is a mandatory property.

    + Yes + Indicates whether multiple accounts are supported. Icon - String -

    File path of the account provider icon.

    The icon size is:

    + String + Yes + File path of the account provider icon. +

    The icon size is:

    • 72 x 72 for Xhigh (HD)
    • 48 x 48 for High (WVGA)
    -

    Since the icon is used in Settings > Accounts, place the icon in a shared directory.

    This is a mandatory property.

    +

    Since the icon is used in Settings > Accounts, place the icon in a shared directory.

    Small icon - String -

    File path of the account provider icon.

    The icon size is:

    + String + Yes + File path of the account provider icon. +

    The icon size is:

    • 45 x 45 for Xhigh (HD)
    • 30 x 30 for High (WVGA)
    -

    Since the small icon is used in other applications, place the icon in a shared directory.

    This is a mandatory property.

    +

    Since the small icon is used in other applications, place the icon in a shared directory.

    Display name - String -

    Display name of the account provider.

    This is a mandatory property.

    + String + Yes + Display name of the account provider. Capabilities String - -

    Capability of the account provider.

    -

    Capability may perfrom a role to liaise between the account application and the other application.

    -

    If An account application registers a capability in the manifest file, other application can be known the account application has the capability

    -

    And if the account application gives an account the capability, other application can be known the account has the capability.

    -

    Several capabilities are defined for the account-manager in Tizen, regarding the related services:

    -
      -
    • ACCOUNT_SUPPORTS_CAPABILITY_CONTACT or "http://tizen.org/account/capability/contact" -

      This is contact capability

      -

      If you register this capability in the manifest file, the user using the contact application can see a list of accounts with the account of your service in the contact application.

      -
    • -
    • ACCOUNT_SUPPORTS_CAPABILITY_CALENDAR or "http://tizen.org/account/capability/calendar" -

      This is calendar capability

      -

      If you register this capability in the manifest file, the user using the calendar application can see a list of accounts with the account of your service in the calendar application.

      -
    • -
    • ACCOUNT_SUPPORTS_CAPABILITY_EMAIL or "http://tizen.org/account/capability/email" -

      This is email capability

      -
    • -
    • ACCOUNT_SUPPORTS_CAPABILITY_PHOTO or "http://tizen.org/account/capability/photo" -

      This is photo capability

      -
    • -
    • ACCOUNT_SUPPORTS_CAPABILITY_VIDEO or "http://tizen.org/account/capability/video" -

      This is video capability

      -
    • -
    • ACCOUNT_SUPPORTS_CAPABILITY_MUSIC or "http://tizen.org/account/capability/music" -

      This is music capability

      -
    • -
    • ACCOUNT_SUPPORTS_CAPABILITY_DOCUMENT or "http://tizen.org/account/capability/document" -

      This is document capability

      -
    • -
    • ACCOUNT_SUPPORTS_CAPABILITY_MESSAGE or "http://tizen.org/account/capability/message" -

      This is message capability

      -
    • -
    • ACCOUNT_SUPPORTS_CAPABILITY_GAME or "http://tizen.org/account/capability/game" -

      This is game capability

      -
    • -

    This is an optional property.

    + No + Capability of the account provider. +

    Capability can be a liaison between an account application and another application. If an account application registers a capability in the manifest file, other applications know that the account application has the capability. And if an account application gives an account a capability, other applications know that the account has the capability.

    +

    Several service-specific capabilities are defined for the Account Manager in Tizen:

    + +
      +
    • Contact capability: +

      ACCOUNT_SUPPORTS_CAPABILITY_CONTACT or "http://tizen.org/account/capability/contact"

      +

      If you register this capability in the manifest file, the user using the contact application can see a list of accounts with the account of your service in the contact application.

      +
    • +
    • Calendar capability: +

      ACCOUNT_SUPPORTS_CAPABILITY_CALENDAR or "http://tizen.org/account/capability/calendar"

      +

      If you register this capability in the manifest file, the user using the calendar application can see a list of accounts with the account of your service in the calendar application.

      +
    • +
    • Email capability: +

      ACCOUNT_SUPPORTS_CAPABILITY_EMAIL or "http://tizen.org/account/capability/email"

      +
    • +
    • Photo capability: +

      ACCOUNT_SUPPORTS_CAPABILITY_PHOTO or "http://tizen.org/account/capability/photo"

      +
    • +
    • Video capability: +

      ACCOUNT_SUPPORTS_CAPABILITY_VIDEO or "http://tizen.org/account/capability/video"

      +
    • +
    • Music capability: +

      ACCOUNT_SUPPORTS_CAPABILITY_MUSIC or "http://tizen.org/account/capability/music"

      +
    • +
    • Document capability: +

      ACCOUNT_SUPPORTS_CAPABILITY_DOCUMENT or "http://tizen.org/account/capability/document"

      +
    • +
    • Message capability: +

      ACCOUNT_SUPPORTS_CAPABILITY_MESSAGE or "http://tizen.org/account/capability/message"

      +
    • +
    • Game capability: +

      ACCOUNT_SUPPORTS_CAPABILITY_GAME or "http://tizen.org/account/capability/game"

      +
    • +
    + +

    If the application has defined the account provider information and implements the appcontrol for the account provider, the account provider is automatically registered when the application is installed.

    Account Application Control

    @@ -285,13 +296,15 @@

    ACCOUNT_OPERATION_SIGNIN Operation

    The http://tizen.org/appcontrol/operation/account/add operation enables the user to add a new account for a specific account provider. With the operation, the login page for the specific account provider can be displayed. In Settings > Accounts, if the account provider is clicked for adding a new account, this operation is launched.

    -

    You have to define the app_control_cb callback and register it to ui_app_lifecycle_callback::app_control.

    + +

    You have to define the app_control_cb() callback and register it to ui_app_lifecycle_callback::app_control.

    +

    The results of the operation are returned in the app_control_get_operation() event handler.

    The following table shows the ACCOUNT_OPERATION_SIGNIN (http://tizen.org/appcontrol/operation/account/add) operation.

    @@ -308,14 +321,13 @@

    ACCOUNT_OPERATION_VIEW Operation

    The http://tizen.org/appcontrol/operation/account/configure operation enables the user to set account information, such as synchronization settings. The delete button must be included for removing accounts.

    In Settings > Accounts, if the specific account is clicked for setting the account information, this operation is launched.

    - -

    You have to define the app_control_cb callback and register it to ui_app_lifecycle_callback::app_control.

    +

    You have to define the app_control_cb() callback and register it to ui_app_lifecycle_callback::app_control.

    The results of the operation are returned in the app_control_get_operation() event handler.

    The following table shows the ACCOUNT_OPERATION_VIEW (http://tizen.org/appcontrol/operation/account/configure) operation.

    - Table: The ACCOUNT_OPERATION_SIGNIN operation -
    @@ -351,4 +363,4 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga - + \ No newline at end of file diff --git a/org.tizen.guides/html/native/social/calendar_n.htm b/org.tizen.guides/html/native/social/calendar_n.htm index ac42b74..daf8dfc 100644 --- a/org.tizen.guides/html/native/social/calendar_n.htm +++ b/org.tizen.guides/html/native/social/calendar_n.htm @@ -548,32 +548,42 @@ calendar_record_add_child_record(event, _calendar_event.calendar_alarm, alarm);<

    UTC Time Usage

    Structures with UTC time are used for non-all-day events. In such cases, you must convert local time to UTC time. The local time zone identifier must be stored in the record, in the corresponding property.

    For example, when setting the start time of an event, the local time zone must be stored in the start_tzid property.

    -

    When converting local time to UTC time, use the function illustrated in the following example. It converts the given date and time to the corresponding UTC time, considering the given time zone (first argument). The function uses UCalendar.

    +

    When converting local time to UTC time, use the function illustrated in the following example. It converts the given date and time to the corresponding UTC time, considering the given time zone (first argument). The function uses the i18n API.

    #define ms2sec(ms) (long long int)(ms / 1000.0)
      
     long long int _time_convert_itol(char *tzid, int y, int mon, int d, int h, int min, int s)
     {
    -   UErrorCode status = U_ZERO_ERROR;
    +   int ret = 0;
    +   i18n_uchar utf16_timezone[64] = {0};
    +   i18n_ustring_copy_ua_n(utf16_timezone, tzid, sizeof(utf16_timezone)/sizeof(i18n_uchar));
     
    -   UChar uft16_timezone[16] = {0};
    -   U_uastrncpy(uft16_timezone, tzid, sizeof(uft16_timezone));
    +   i18n_ucalendar_h ucal = NULL;
    +   char *loc_default = NULL;
     
    -   UCalendar *ucal = NULL;
    -   ucal = ucal_open(uft16_timezone, -1, uloc_getDefault(), UCAL_GREGORIAN, &status); 
    - 
    -   ucal_set(ucal, UCAL_YEAR, y); 
    -   ucal_set(ucal, UCAL_MONTH, mon -1);
    -   ucal_set(ucal, UCAL_DATE, d); 
    -   ucal_set(ucal, UCAL_HOUR, h); 
    -   ucal_set(ucal, UCAL_MINUTE, min);
    -   ucal_set(ucal, UCAL_SECOND, s);
    -
    -   long long int lli = 0;
    -   lli = ms2sec(ucal_getMillis(ucal, &status));
    -   ucal_close(ucal);
    -
    -   return lli;
    +   i18n_ulocale_get_default((const char **)&loc_default);
    +   ret = i18n_ucalendar_create(utf16_timezone, -1, loc_default, I18N_UCALENDAR_GREGORIAN, &ucal);
    +   if (I18N_ERROR_NONE != ret) 
    +   {
    +      dlog_print(DLOG_DEBUG, LOG_TAG, "i18n_ucalendar_create() is failed (%d)\n", ret);
    +
    +      return -1;
    +   }
    +
    +   i18n_ucalendar_set_date_time(ucal, y, mon - 1, d, h, min, s);
    +
    +   i18n_udate date;
    +   ret = i18n_ucalendar_get_milliseconds(ucal, &date);
    +   if (I18N_ERROR_NONE != ret) 
    +   {
    +      dlog_print(DLOG_DEBUG, LOG_TAG, "i18n_ucalendar_create() is failed (%d)\n", ret);
    +      i18n_ucalendar_destroy(ucal);
    +
    +      return -1;
    +   }
    +   i18n_ucalendar_destroy(ucal);
    +
    +   return ms2sec(date);
     }
    diff --git a/org.tizen.guides/html/native/social/service_adaptor_n.htm b/org.tizen.guides/html/native/social/service_adaptor_n.htm index 96abe47..1968cf9 100644 --- a/org.tizen.guides/html/native/social/service_adaptor_n.htm +++ b/org.tizen.guides/html/native/social/service_adaptor_n.htm @@ -23,20 +23,14 @@ @@ -44,166 +38,127 @@

    Service Adaptor

    -Service Adaptor is a set of several adaptors: - - -But main of them are following: - - -Each adaptor is an agent between Service Adaptor Client and according plugins. There exist Auth and Storage Plugins for such services as: Amazon, Box, Dropbox, Googledrive, Onedrive and Sugarsync. This structure illustrates following figure: - -

    Figure: Service Adaptor structure

    -

    Service Adaptor structure

    +

    You can manage adaptors, which function as agents between the Service Adaptor Client and the related plugins, to take advantage of various services. For example, the Auth and Storage adaptors allow you to access the Auth and Service Plugins to use services, such as Amazon, Box, Dropbox, Gogledrive, Onedrive, and Sugarsync.

    -

    The main feature of the Service Adaptor is connecting/disconnecting adaptors to Service Adaptor Client via D-Bus.

    +

    Figure: Service adaptor structure

    +

    Service adaptor structure

    -

    There are two kinds of path type used in Service Adaptor: +

    The main feature of the Service Adaptor API is to connect adaptors to and disconnect them from the Service Adaptor Client though D-Bus. The Service adaptor uses 2 path types:

      -
    • "Logical path" - means path of "root file system".
      - It starts from root path(= '/') and you can use this path like linux, e.g. "/folder1/image1.jpg".

      +
    • Logical path +

      The path of the root file system. It starts from the root path ("/"), and you can use the path like in Linux (for example, "/folder1/image1.jpg").

    • -
    • "Physical path" - means specfic uri that be used for cloud server.
      - Some clouds use same with "Logical path", but some clouds use specfic key or url, e.g. "/" is "ZmNhMWY2MTZlY2M1NDg4OGJmZDY4O", "/folder1" is "2JI32UNJDWQEQWQWEADSSAD".
      +
    • Physical path +

      A specific URI used for the cloud server. Some clouds use a logical path, but others use a specific key or URL (for example, "/" is "ZmNhMWY2MTZlY2M1NDg4OGJmZDY4O" and "/folder1" is "2JI32UNJDWQEQWQWEADSSAD").

    -

    +

    Available Adaptors

    + +

    The following adaptors are provided:

    -

    Auth Adaptor

    -

    This adaptor manages authentication plugins.

    -

    It allows to: +

      +
    • Auth adaptor +

      This adaptor manages authentication plugins. It allows you to:

        -
      • get Auth Plugin List
      • -
      • set Plugin
      • -
      • request Channel Auth, i.e. service name like "com.serviceadaptor.message", app id, service id (0: contact, 1: free message) and mobile station identification number (IMSI)
      • +
      • Get the Auth Plugin list.
      • +
      • Set the Plugin.
      • +
      • Request the Channel Auth, such as the service name ("com.serviceadaptor.message"), app ID, service ID (0: contact, 1: free message), and mobile station identification number (IMSI).
      -

      - -

      Storage Adaptor

      -

      This module handles files transfer to/from cloud.

      -

      It allows to: +

    • +
    • Storage adaptor +

      This adaptor handles files transfers to and from a cloud. It allows you to:

        -
      • download a server/thumbnail file and write it to local file
      • -
      • upload a local file to server path
      • -
      • request file status
      • -
      • cancel/pause/resume file transfer
      • +
      • Download a server or thumbnail file and write it to a local file.
      • +
      • Upload a local file to a server path.
      • +
      • Request the file status.
      • +
      • Cancel, pause, and resume a file transfer.
      -

      - -

      Contact Adaptor

      -

      This adaptor manages contacts information in Contact Server, their profiles and service registration information.

      -

      It allows to: +

    • +
    • Contact adaptor +

      This adaptor manages contact information in the Contact server, including the contact profiles and service registration information. It allows you to:

        -
      • reset contact information in Contact Server and upload native contact information of device to the server
      • -
      • synchronize native contact information of device with Contact Server according to [type] field of each contact
      • -
      • get profiles and service registration information of contacts
      • -
      • set and update device’s profile to server
      • -
      • upload/delete profile image meta to/from File Server and sets my profile image to Profile Server
      • -
      • set/get my profile’s privacy levelthe scope of people to be opened
      • -
      • set my presence ON/OFF information to Presence Server
      • +
      • Reset contact information in the Contact server and upload native contact information of the device to the server.
      • +
      • Synchronize native contact information of the device with the Contact server according to the [type] field of each contact.
      • +
      • Get contact profiles and service registration information.
      • +
      • Set and update device profile in the server.
      • +
      • Upload and delete profile image meta in the File server and set the my profile image to the Profile server.
      • +
      • Set and get my profile privacy level
      • +
      • Set my presence ON/OFF information to the Presence server.
      -

      - -

      Discovery Adaptor

      -

      It is a future development.

      - -

      Message Adaptor

      -

      This module manages chatting and messaging.

      -

      Its main functionality is requesting for: +

    • +
    • Discovery adaptor +

      This adaptor is a future development. Not in use yet.

    • +
    • Message adaptor +

      This adaptor manages chatting and messaging. It allows you to:

        -
      • Creating Chatroom, Inviting to (or Ending) Chat
      • -
      • All Unread Messages
      • -
      • Read or Unseal Message
      • -
      • Forward Online or Unread Message
      • -
      • Save Call Log
      • -
      • Chat ID based on phone number
      • +
      • Create a chatroom, and invite people to (or end) a chat.
      • +
      • Get all unread messages.
      • +
      • Read or unseal a message.
      • +
      • Forward online or unread messages.
      • +
      • Save the call log.
      • +
      • Get the chat ID based on the phone number.
      -

      - -

      Push Adaptor

      -

      It just receives push notifications from push service.

      - -

      Shop Adaptor

      -

      This module makes requests for: +

    • +
    • Push adaptor +

      This adaptor receives push notifications from a push service.

    • +
    • Shop adaptor +

      This adaptor allows you to:

        -
      • List of Items
      • -
      • Item Information for Download
      • -
      • Download of Item
      • -
      • Item Panel URL
      • +
      • Get a list of items.
      • +
      • Get item information for download.
      • +
      • Download an item.
      • +
      • Get the item panel URL.
      -

      +
    • +
    -

    How to start plugin?

    -

    First we need to create service adaptor:

    -
    -int service_adaptor_create(service_adaptor_h *service_adaptor);
    -
    -

    Than for valid service_adaptor handler we need to iterate to all installed plugins:

    -
    -int service_adaptor_foreach_plugin(service_adaptor_h service_adaptor,
    -                                   service_adaptor_plugin_cb callback,
    -                                   void *user_data);
    -
    +

    Starting a Plugin

    -

    Inside callback (which is invoked for each plugin) we get plugin_uri which is then passed to:

    -
    -int service_adaptor_create_plugin(service_adaptor_h service_adaptor,
    -                                  const char *plugin_uri,
    -                                  service_plugin_h *plugin);
    -
    +

    To start a plugin, use the following process:

    -

    And finally we have to request start initialization for service plugin:

    -
    -int service_plugin_start(service_plugin_h handle,
    -                         int service_flag);
    -
    +
    1. Create a Service adaptor with the service_adaptor_create() function.
    2. +
    3. With a valid Service adaptor handler, iterate through all installed plugins with the service_adaptor_foreach_plugin() function.
    4. +
    5. Inside the callback (invoked for each plugin), get the plugin_uri value, which is passed to the service_adaptor_create_plugin() function.
    6. +
    7. Request a start initialization for the service plugin with the service_plugin_start() function.
    -Below example starts all installed Auth and Storage plugins appending each plugin_uri to the list object: +

    The following example starts all installed Auth and Storage plugins appending each plugin_uri to the list object:

     bool _plugin_iterator_cb(char *plugin_uri, int service_mask, void *user_data);
     
     service_adaptor_h service_adaptor = NULL;
    -ret = service_adaptor_create(&service_adaptor);
    +ret = service_adaptor_create(&service_adaptor);
     
     Evas_Object *list;
     ret = service_adaptor_foreach_plugin(service_adaptor, _plugin_iterator_cb, (void *)list);
     
     bool _plugin_iterator_cb(char *plugin_uri, int service_mask, void *user_data)
     {
    -    Evas_Object *list = (Evas_Object *)user_data;
    -
    -    if (!plugin_uri || !list)
    -        return false;
    +   Evas_Object *list = (Evas_Object *)user_data;
     
    -    if ((service_mask & SERVICE_PLUGIN_SERVICE_AUTH) && (service_mask & SERVICE_PLUGIN_SERVICE_STORAGE))
    -    {
    -        elm_list_item_append(list, plugin_uri, NULL, NULL, _show_plugin_view, plugin_uri);
    +   if (!plugin_uri || !list)
    +      return false;
     
    -        service_plugin_h plugin = NULL;
    -        service_adaptor_create_plugin(service_adaptor, plugin_uri, &plugin);
    +   if ((service_mask & SERVICE_PLUGIN_SERVICE_AUTH) && (service_mask & SERVICE_PLUGIN_SERVICE_STORAGE))
    +   {
    +      elm_list_item_append(list, plugin_uri, NULL, NULL, _show_plugin_view, plugin_uri);
     
    -        // This should be hidden using config file or User input, because it is security information
    -        service_plugin_add_property(plugin, SERVICE_PLUGIN_PROPERTY_APP_KEY, "enasvv4l8hdbmhn");
    +      service_plugin_h plugin = NULL;
    +      service_adaptor_create_plugin(service_adaptor, plugin_uri, &plugin);
     
    -        // This should be hidden using config file or User input, because it is security information
    -        service_plugin_add_property(plugin, SERVICE_PLUGIN_PROPERTY_APP_SECRET, "uqhl4pp8mo7hmgn");
    -        service_plugin_start(plugin, (SERVICE_PLUGIN_SERVICE_AUTH | SERVICE_PLUGIN_SERVICE_STORAGE));
    -    }
    +      // Hide this using config file or user input, because it is security information
    +      service_plugin_add_property(plugin, SERVICE_PLUGIN_PROPERTY_APP_KEY, "enasvv4l8hdbmhn");
    +      service_plugin_add_property(plugin, SERVICE_PLUGIN_PROPERTY_APP_SECRET, "uqhl4pp8mo7hmgn");
    +		
    +      service_plugin_start(plugin, (SERVICE_PLUGIN_SERVICE_AUTH | SERVICE_PLUGIN_SERVICE_STORAGE));
    +   }
     
    -    return true;
    +   return true;
     }
     
    +
    diff --git a/org.tizen.guides/html/native/social/social_guide_n.htm b/org.tizen.guides/html/native/social/social_guide_n.htm index 5385b87..df58d54 100644 --- a/org.tizen.guides/html/native/social/social_guide_n.htm +++ b/org.tizen.guides/html/native/social/social_guide_n.htm @@ -38,20 +38,19 @@

    The main social features are:

      -
    • Phonenumber-utils -

      Allows you to parse and format phone numbers.

    • +
    • Service Adaptor +

      Allows you to manage adaptors between the Service Adaptor Client and related plugins.

    - -

    The following guides apply in mobile applications only:

    - + +

    The following guides apply in mobile applications only:

    +
      -
    • Account Manager +
    • Account Manager

      Allows you to work with accounts in your application by creating, managing and removing individual accounts.

    • Calendar

      Allows you to work with personal scheduling data by managing calendars, events, and todos, and setting reminders and recurrence properties. You can also search for calendar book entries and receive calendar book change notifications.

    • Contacts

      Allows you to work with contact information in your application by retrieving and managing individual contact information, searching for contacts, and receiving address book change notifications.

    • -
    • Service Adaptor

      Allows you to work with cloud storages/services as: Amazon, Box, Dropbox, Googledrive, Onedrive and Sugarsync by managing authentication, contacts information and handling file transfer to/from cloud.

    • -
    - + + @@ -73,4 +72,4 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga - + \ No newline at end of file diff --git a/org.tizen.guides/html/native/system/system_guide_n.htm b/org.tizen.guides/html/native/system/system_guide_n.htm index fd85779..d738ce1 100644 --- a/org.tizen.guides/html/native/system/system_guide_n.htm +++ b/org.tizen.guides/html/native/system/system_guide_n.htm @@ -54,6 +54,8 @@

    Enables you to set and get the system configuration related to user preferences.

  • Storage

    Enables you to access parts of the device file system.

  • +
  • T-trace +

    Enables you to insert tracepoints in your application.

  • diff --git a/org.tizen.guides/html/native/system/t-trace_n.htm b/org.tizen.guides/html/native/system/t-trace_n.htm new file mode 100644 index 0000000..ead4889 --- /dev/null +++ b/org.tizen.guides/html/native/system/t-trace_n.htm @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + T-trace + + + + + + +
    +

    T-trace

    + +

    You can insert tracepoints in Tizen native applications to perform trace operations with the T-trace tool. The tracepoints allow the framework to write application traces to the system trace buffer to align them with the T-trace traces from the Tizen platform.

    +

    The following T-trace function types are provided for application-level tracepoints:

    +
      +
    • Synchronous tracing functions: trace_begin() and trace_end()
    • +
    • Asynchronous tracing functions: trace_async_begin() and trace_async_end()
    • +
    • Counter tracking function: trace_update_counter()
    • +
    +

    With the T-trace tool, you can generate the traces and visualize them.

    + + +

    Figure: T-trace architecture

    +

    + T-trace architecture +

    + + + + +
    + +Go to top + + + + + + + + diff --git a/org.tizen.guides/html/native/social/phonenumber_util_n.htm b/org.tizen.guides/html/native/telephony/phonenumber_util_n.htm similarity index 87% rename from org.tizen.guides/html/native/social/phonenumber_util_n.htm rename to org.tizen.guides/html/native/telephony/phonenumber_util_n.htm index d32a4b4..daaeaf9 100644 --- a/org.tizen.guides/html/native/social/phonenumber_util_n.htm +++ b/org.tizen.guides/html/native/telephony/phonenumber_util_n.htm @@ -10,7 +10,7 @@ - Phonenumber-utils + Phonenumber utils @@ -22,19 +22,19 @@
    -

    Phonenumber-utils

    +

    Phonenumber utils

    -

    Tizen enables you to parse and format phone numbers. The Phonenumber-utils APIs are implemented with the libphonenumber opensource library.

    +

    Tizen enables you to parse and format phone numbers. The Phonenumber utils APIs are implemented with the libphonenumber opensource library.

    -

    The main features of the Phonenumber-utils API include:

    +

    The main features of the Phonenumber utils API include:

    • Retrieving the location information

      You can get the location based on the phone number, region, and language using the phone_number_get_location_from_number() function. If the function cannot provide the location with the passed language, it uses English.

    • diff --git a/org.tizen.guides/html/native/telephony/telephony_guide_n.htm b/org.tizen.guides/html/native/telephony/telephony_guide_n.htm index 02f7317..52feb2b 100644 --- a/org.tizen.guides/html/native/telephony/telephony_guide_n.htm +++ b/org.tizen.guides/html/native/telephony/telephony_guide_n.htm @@ -20,13 +20,6 @@
    -

    Content

    -

    Related Info

    • Telephony Tutorial
    • @@ -38,273 +31,16 @@

      Telephony

      -

      Telephony features include call, SIM, network, and modem information using the Telephony Service.

      - - -

      The main telephony features are:

      - -
      • Call information -

        Get the voice and video call states. You can use this information in call-related actions.

      • - -
      • SIM information -

        Extract information stored on a SIM card without changing the information.

      • - -
      • Network information -

        Access (without changing) information about the current cellular network and telephony service.

      • - -
      • Modem information -

        Access (without changing) IMEI information.

      - -

      The following figure illustrates the Telephony Service and APIs.

      - -

      Figure: Telephony API and Telephony Service

      -

      Telephony API and Telephony Service

      - -

      Call Information

      - -

      The Call API (in mobile and wearable applications) provides the following functions:

      - -
        -
      • telephony_call_get_preferred_voice_subscription() -

        Gets the current value for the preferred voice call subscription. It returns one of the telephony_call_preferred_voice_subs_e values.

      • -
      • telephony_call_get_call_list() -

        Gets the list of the current call. It returns the current call count and the call handle.

      • -
      • telephony_call_release_call_list() -

        Releases the list allocated to the call handle. When the call handle is no longer needed, this function must be called to free the handle.

      • -
      • telephony_call_get_handle_id() -

        Gets the call handle ID.

      • -
      • telephony_call_get_number() -

        Gets the call number.

      • -
      • telephony_call_get_type() -

        Gets the call type. It returns one of the telephony_call_type_e values.

      • -
      • telephony_call_get_status() -

        Gets the call status. It returns one of the telephony_call_status_e values.

      • -
      • telephony_call_get_direction() -

        Gets the call direction: MO (Mobile Originated) or MT (Mobile Terminated). It returns one of the telephony_call_direction_e values.

      • -
      • telephony_call_get_conference_status() -

        Determines whether the call is conference call. It returns true for a conference call or false for a single call.

      -
    - -

    To get call state change notifications, the application must register for the notifications with the telephony_set_noti_cb() function, by specifying the notification ID.

    - -

    The following table defines the available notification IDs.

    - -
    - Table: The ACCOUNT_OPERATION_VIEW operation + Table: ACCOUNT_OPERATION_VIEW operation
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Table: Call information notification IDs -
    Change in stateNotification ID
    Voice Status IdleTELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE
    Voice Status ActiveTELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE
    Voice Status HeldTELEPHONY_NOTI_VOICE_CALL_STATUS_HELD
    Voice Status DialingTELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING
    Voice Status AlertingTELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING
    Voice Status IncomingTELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING
    Video Status IdleTELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE
    Video Status ActiveTELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE
    Video Status DialingTELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING
    Video Status AlertingTELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING
    Video Status IncomingTELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING
    Preferred voice subscriptionTELEPHONY_NOTI_CALL_PREFERRED_VOICE_SUBSCRIPTION
    - - -

    SIM Information

    - -

    The SIM API (in mobile and wearable applications) provides the following functions:

    -
    • telephony_sim_get_icc_id() -

      Gets the Integrated Circuit Card IDentification (ICC-ID). You get the ICC-ID as a string, which needs to be freed by the application.

    • -
    • telephony_sim_get_operator() -

      Gets the SIM operator (MCC + MNC). You get the operator information as a string, which needs to be freed by the application.

    • -
    • telephony_sim_get_msin() -

      Gets the Mobile Subscription Identification Number (MSIN) of the SIM provider. You get the MSIN as a string, which needs to be freed by the application.

    • -
    • telephony_sim_get_spn() -

      Gets the Service Provider Name (SPN) of the SIM card. You get the SPN as a string, which needs to be freed by the application.

    • -
    • telephony_sim_get_cphs_operator_name() -

      Gets the Operator Name String (ONS) of the Common PCN Handset Specification (CPHS) in the SIM card. You get the CPHS as a string, which needs to be freed by the application.

    • -
    • telephony_sim_get_subscriber_number() -

      Gets the subscriber number embedded in the SIM card. This value contains the MSISDN related to the subscriber. You get the subscriber number as a string, which needs to be freed by the application.

    • -
    • telephony_sim_get_state() -

      Gets the state of the SIM. It returns one of the telephony_sim_state_e values.

    • -
    • telephony_sim_is_changed() -

      Checks whether the current SIM card differs from the previous SIM card.

    • -
    • telephony_sim_get_application_list() -

      Gets the application list on the UICC. It returns one of the masking (telephony_sim_application_type_e) values.

    • -
    • telephony_sim_get_subscriber_id() -

      Gets the subscriber ID as a string, which needs to be freed by the application.

    • -
    - -

    To get SIM state change notifications, the application must register for the notifications with the telephony_set_noti_cb() function, by specifying the notification ID.

    - -

    The following table defines the available notification IDs.

    - - - - - - - - - - - - - -
    - Table: SIM information notification IDs -
    Change in stateNotification ID
    SIM stateTELEPHONY_NOTI_SIM_STATUS
    - - - - - - - - - - -
    Note
    Before retrieving information from the SIM card, you must retrieve the state of the SIM card. You can get SIM-related information only if the SIM state is TELEPHONY_SIM_STATE_AVAILABLE.
    - - -

    Network Information

    - -

    The Network API (in mobile and wearable applications) provides the following functions:

    -
    • telephony_network_get_lac() -

      Gets the LAC (Location Area Code) of the current network.

    • -
    • telephony_network_get_cell_id() -

      Gets the cell identification number.

    • -
    • telephony_network_get_rssi() -

      Gets the RSSI (Received Signal Strength Indicator).

    • -
    • telephony_network_get_roaming_status() -

      Gets the roaming state (true = roaming and false = not roaming).

    • -
    • telephony_network_get_mcc() -

      Gets the MCC (Mobile Country Code) of the current registered network. You get the MCC as a string, which needs to be freed by the application.

    • -
    • telephony_network_get_mnc() -

      Gets the MNC (Mobile Network Code) of the current registered network. You get the MNC as a string, which needs to be freed by the application.

    • -
    • telephony_network_get_network_name() -

      Gets the name of the current registered network. You get the network name as a string, which needs to be freed by the application.

    • -
    • telephony_network_get_type() -

      Gets the network service type of the current registered network. It returns one of the telephony_network_type_e values.

    • -
    • telephony_network_get_service_state() -

      Gets the current network state of the telephony service. It returns one of the telephony_network_service_state_e values.

    • -
    • telephony_network_get_ps_type() -

      Gets the packet service type of the currently registered network. It returns one of the telephony_network_ps_type_e values.

    • -
    • telephony_network_get_network_name_option() -

      Gets the network name option of the currently registered network. It returns one of the telephony_network_name_option_e values.

    • -
    • telephony_network_get_default_data_subscription() -

      Gets the current default subscription for the data service (packet-switched). It returns one of the telephony_network_default_data_subs_e values.

    • -
    • telephony_network_get_default_subscription() -

      Gets the current default subscription for the voice service (circuit-switched). It returns one of the telephony_network_default_subs_e values.

    • -
    - -

    To get network-related information change notifications, the application must register for the notifications with the telephony_set_noti_cb() function, by specifying the notification ID.

    - -

    The following table defines the available notification IDs.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Table: Network information notification IDs -
    Change in stateNotification ID
    Network service stateTELEPHONY_NOTI_NETWORK_SERVICE_STATE
    Cell IDTELEPHONY_NOTI_NETWORK_CELLID
    Roaming statusTELEPHONY_NOTI_NETWORK_ROAMING_STATUS
    Signal strengthTELEPHONY_NOTI_NETWORK_SIGNALSTRENGTH_LEVEL
    Network nameTELEPHONY_NOTI_NETWORK_NETWORK_NAME
    Packet-switched typeTELEPHONY_NOTI_NETWORK_PS_TYPE
    Default data subscriptionTELEPHONY_NOTI_NETWORK_DEFAULT_DATA_SUBSCRIPTION
    Default subscriptionTELEPHONY_NOTI_NETWORK_DEFAULT_SUBSCRIPTION
    - - - - - - - - - - -
    Note
    Before retrieving information from the network, you must retrieve the network service state. You can get network-related information only if the network service state is TELEPHONY_NETWORK_SERVICE_STATE_IN_SERVICE.
    +

    Telephony features include managing phone numbers and information related to the Telephony Service.

    + +

    The main telephony features are:

    + -

    Modem Information

    - -

    The Modem API (in mobile and wearable applications) provides the following functions:

    -
    • telephony_modem_get_imei() -

      Gets the IMEI (International Mobile Station Equipment Identity) of the mobile phone. You get the IMEI as a string, which needs to be freed by the application.

    • -
    • telephony_modem_get_power_status() -

      Gets the power status of the modem. It returns one of the telephony_modem_power_status_e values.

    • -
    @@ -328,4 +64,4 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga - + \ No newline at end of file diff --git a/org.tizen.guides/html/native/telephony/telephony_info_n.htm b/org.tizen.guides/html/native/telephony/telephony_info_n.htm new file mode 100644 index 0000000..b4303da --- /dev/null +++ b/org.tizen.guides/html/native/telephony/telephony_info_n.htm @@ -0,0 +1,330 @@ + + + + + + + + + + + + + Telephony Information + + + + + +
    +

    Telephony Information

    +

    Telephony information features include call, SIM, network, and modem information using the Telephony Service.

    + + +

    The main telephony information features are:

    + +
    • Call information +

      Get the voice and video call states. You can use this information in call-related actions.

    • + +
    • SIM information +

      Extract information stored on a SIM card without changing the information.

    • + +
    • Network information +

      Access (without changing) information about the current cellular network and telephony service.

    • + +
    • Modem information +

      Access (without changing) IMEI information.

    + +

    The following figure illustrates the Telephony Service and APIs.

    + +

    Figure: Telephony APIs and Telephony Service

    +

    Telephony APIs and Telephony Service

    + +

    Call Information

    + +

    The Call API (in mobile and wearable applications) provides the following functions:

    + +
      +
    • telephony_call_get_preferred_voice_subscription() +

      Gets the current value for the preferred voice call subscription. It returns one of the telephony_call_preferred_voice_subs_e values.

    • +
    • telephony_call_get_call_list() +

      Gets the list of the current call. It returns the current call count and the call handle.

    • +
    • telephony_call_release_call_list() +

      Releases the list allocated to the call handle. When the call handle is no longer needed, this function must be called to free the handle.

    • +
    • telephony_call_get_handle_id() +

      Gets the call handle ID.

    • +
    • telephony_call_get_number() +

      Gets the call number.

    • +
    • telephony_call_get_type() +

      Gets the call type. It returns one of the telephony_call_type_e values.

    • +
    • telephony_call_get_status() +

      Gets the call status. It returns one of the telephony_call_status_e values.

    • +
    • telephony_call_get_direction() +

      Gets the call direction: MO (Mobile Originated) or MT (Mobile Terminated). It returns one of the telephony_call_direction_e values.

    • +
    • telephony_call_get_conference_status() +

      Determines whether the call is conference call. It returns true for a conference call or false for a single call.

    + +

    To get call state change notifications, the application must register for the notifications with the telephony_set_noti_cb() function, by specifying the notification ID.

    + +

    The following table defines the available notification IDs.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Table: Call information notification IDs +
    Change in stateNotification ID
    Voice status idleTELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE
    Voice status activeTELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE
    Voice status heldTELEPHONY_NOTI_VOICE_CALL_STATUS_HELD
    Voice status dialingTELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING
    Voice status alertingTELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING
    Voice status incomingTELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING
    Video status idleTELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE
    Video status activeTELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE
    Video status dialingTELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING
    Video status alertingTELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING
    Video status incomingTELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING
    Preferred voice subscriptionTELEPHONY_NOTI_CALL_PREFERRED_VOICE_SUBSCRIPTION
    + + +

    SIM Information

    + +

    The SIM API (in mobile and wearable applications) provides the following functions:

    +
    • telephony_sim_get_icc_id() +

      Gets the Integrated Circuit Card IDentification (ICC-ID). You get the ICC-ID as a string, which needs to be freed by the application.

    • +
    • telephony_sim_get_operator() +

      Gets the SIM operator (MCC + MNC). You get the operator information as a string, which needs to be freed by the application.

    • +
    • telephony_sim_get_msin() +

      Gets the Mobile Subscription Identification Number (MSIN) of the SIM provider. You get the MSIN as a string, which needs to be freed by the application.

    • +
    • telephony_sim_get_spn() +

      Gets the Service Provider Name (SPN) of the SIM card. You get the SPN as a string, which needs to be freed by the application.

    • +
    • telephony_sim_get_cphs_operator_name() +

      Gets the Operator Name String (ONS) of the Common PCN Handset Specification (CPHS) in the SIM card. You get the CPHS as a string, which needs to be freed by the application.

    • +
    • telephony_sim_get_subscriber_number() +

      Gets the subscriber number embedded in the SIM card. This value contains the MSISDN related to the subscriber. You get the subscriber number as a string, which needs to be freed by the application.

    • +
    • telephony_sim_get_state() +

      Gets the state of the SIM. It returns one of the telephony_sim_state_e values.

    • +
    • telephony_sim_is_changed() +

      Checks whether the current SIM card differs from the previous SIM card.

    • +
    • telephony_sim_get_application_list() +

      Gets the application list on the UICC. It returns one of the masking (telephony_sim_application_type_e) values.

    • +
    • telephony_sim_get_subscriber_id() +

      Gets the subscriber ID as a string, which needs to be freed by the application.

    • +
    + +

    To get SIM state change notifications, the application must register for the notifications with the telephony_set_noti_cb() function, by specifying the notification ID.

    + +

    The following table defines the available notification IDs.

    + + + + + + + + + + + + + +
    + Table: SIM information notification IDs +
    Change in stateNotification ID
    SIM stateTELEPHONY_NOTI_SIM_STATUS
    + + + + + + + + + + +
    Note
    Before retrieving information from the SIM card, you must retrieve the state of the SIM card. You can get SIM-related information only if the SIM state is TELEPHONY_SIM_STATE_AVAILABLE.
    + + +

    Network Information

    + +

    The Network API (in mobile and wearable applications) provides the following functions:

    +
    • telephony_network_get_lac() +

      Gets the LAC (Location Area Code) of the current network.

    • +
    • telephony_network_get_cell_id() +

      Gets the cell identification number.

    • +
    • telephony_network_get_rssi() +

      Gets the RSSI (Received Signal Strength Indicator).

    • +
    • telephony_network_get_roaming_status() +

      Gets the roaming state (true = roaming and false = not roaming).

    • +
    • telephony_network_get_mcc() +

      Gets the MCC (Mobile Country Code) of the current registered network. You get the MCC as a string, which needs to be freed by the application.

    • +
    • telephony_network_get_mnc() +

      Gets the MNC (Mobile Network Code) of the current registered network. You get the MNC as a string, which needs to be freed by the application.

    • +
    • telephony_network_get_network_name() +

      Gets the name of the current registered network. You get the network name as a string, which needs to be freed by the application.

    • +
    • telephony_network_get_type() +

      Gets the network service type of the current registered network. It returns one of the telephony_network_type_e values.

    • +
    • telephony_network_get_service_state() +

      Gets the current network state of the telephony service. It returns one of the telephony_network_service_state_e values.

    • +
    • telephony_network_get_ps_type() +

      Gets the packet service type of the currently registered network. It returns one of the telephony_network_ps_type_e values.

    • +
    • telephony_network_get_network_name_option() +

      Gets the network name option of the currently registered network. It returns one of the telephony_network_name_option_e values.

    • +
    • telephony_network_get_default_data_subscription() +

      Gets the current default subscription for the data service (packet-switched). It returns one of the telephony_network_default_data_subs_e values.

    • +
    • telephony_network_get_default_subscription() +

      Gets the current default subscription for the voice service (circuit-switched). It returns one of the telephony_network_default_subs_e values.

    • +
    + +

    To get network-related information change notifications, the application must register for the notifications with the telephony_set_noti_cb() function, by specifying the notification ID.

    + +

    The following table defines the available notification IDs.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Table: Network information notification IDs +
    Change in stateNotification ID
    Network service stateTELEPHONY_NOTI_NETWORK_SERVICE_STATE
    Cell IDTELEPHONY_NOTI_NETWORK_CELLID
    Roaming statusTELEPHONY_NOTI_NETWORK_ROAMING_STATUS
    Signal strengthTELEPHONY_NOTI_NETWORK_SIGNALSTRENGTH_LEVEL
    Network nameTELEPHONY_NOTI_NETWORK_NETWORK_NAME
    Packet-switched typeTELEPHONY_NOTI_NETWORK_PS_TYPE
    Default data subscriptionTELEPHONY_NOTI_NETWORK_DEFAULT_DATA_SUBSCRIPTION
    Default subscriptionTELEPHONY_NOTI_NETWORK_DEFAULT_SUBSCRIPTION
    + + + + + + + + + + +
    Note
    Before retrieving information from the network, you must retrieve the network service state. You can get network-related information only if the network service state is TELEPHONY_NETWORK_SERVICE_STATE_IN_SERVICE.
    + +

    Modem Information

    + +

    The Modem API (in mobile and wearable applications) provides the following functions:

    +
    • telephony_modem_get_imei() +

      Gets the IMEI (International Mobile Station Equipment Identity) of the mobile phone. You get the IMEI as a string, which needs to be freed by the application.

    • +
    • telephony_modem_get_power_status() +

      Gets the power status of the modem. It returns one of the telephony_modem_power_status_e values.

    • +
    + + + +
    + +Go to top + + + + + + + \ No newline at end of file diff --git a/org.tizen.guides/html/native/ui/animations_effects_n.htm b/org.tizen.guides/html/native/ui/animations_effects_n.htm index b4b03ef..90be4f3 100644 --- a/org.tizen.guides/html/native/ui/animations_effects_n.htm +++ b/org.tizen.guides/html/native/ui/animations_effects_n.htm @@ -30,14 +30,14 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/components_mn.htm b/org.tizen.guides/html/native/ui/components_mn.htm index 357ddc1..33c438e 100644 --- a/org.tizen.guides/html/native/ui/components_mn.htm +++ b/org.tizen.guides/html/native/ui/components_mn.htm @@ -58,8 +58,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/components_wn.htm b/org.tizen.guides/html/native/ui/components_wn.htm index 8d8feb6..b7c8c91 100644 --- a/org.tizen.guides/html/native/ui/components_wn.htm +++ b/org.tizen.guides/html/native/ui/components_wn.htm @@ -48,8 +48,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/containers_mn.htm b/org.tizen.guides/html/native/ui/containers_mn.htm index 8483a8e..5c6155b 100644 --- a/org.tizen.guides/html/native/ui/containers_mn.htm +++ b/org.tizen.guides/html/native/ui/containers_mn.htm @@ -38,8 +38,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/containers_wn.htm b/org.tizen.guides/html/native/ui/containers_wn.htm index d0f02e1..c8d1ccc 100644 --- a/org.tizen.guides/html/native/ui/containers_wn.htm +++ b/org.tizen.guides/html/native/ui/containers_wn.htm @@ -37,8 +37,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/data_types_n.htm b/org.tizen.guides/html/native/ui/data_types_n.htm index 91792ab..a06baab 100644 --- a/org.tizen.guides/html/native/ui/data_types_n.htm +++ b/org.tizen.guides/html/native/ui/data_types_n.htm @@ -16,20 +16,23 @@ @@ -60,37 +63,33 @@

    Iterator Functions

    -

    Eina provides a set of iterators functions to manipulate data types like arrays.

    -

    These functions allow to access elements of a container in a generic way, without knowing which container is used (a bit like iterators in the C++ STL). Iterators only allow sequential access (that is, from one element to the next one). For random access, Eina provides Accessor Functions.

    -

    Getting an iterator to access elements of a given container is done through the functions of that particular container. There is no function to create a generic iterator as iterators absolutely depend on the container. This means you won't find any creation function for iterators in the Iterator chapter of the EFL documentation, those can be found in the documentation of the container type you're using. Although they are created with container specific functions, iterators are always deleted with the same function: eina_iterator_free().

    -

    To get the data and iterate, use eina_iterator_next(). To call a function on every single element of a container, use eina_iterator_foreach().

    -

    Each data type owns a set of macros, these macros provide the iterators like FOREACH or REVERSE_FOREACH

    -

    More details about iterators are provided in section about data types.

    -

    Data Structure

    -

    String Data Types

    -

    Stringshare

    -

    The Eina_Stringshare data type functions allow you to store a single copy of a string, and use in multiple places throughout your program. This way you can save a lot of strings with less memory.

    -

    With this data type you reduce the number of duplicated strings kept in memory. It's pretty common for the same strings to be dynamically allocated repeatedly between applications and libraries, especially in circumstances where you could have multiple copies of a structure that allocates the string.

    -

    So, rather than duplicating and freeing these strings, you request a read-only pointer to an existing string and only incur the overhead of a hash lookup.

    -

    It sounds like micro-optimizing, but profiling has shown this can have a significant impact as the number of copies grows.

    -

    It improves string creation/destruction speed, reduces memory use and decreases memory fragmentation, so an all-around win.

    -

    Eina_Stringshare is quite easy to use. In order create a stringshare, you just have to declare a const char * and call eina_stringshare_add(const char * str)

    +

    Eina provides a set of iterator functions to manipulate data types, such as arrays.

    +

    These functions allow access to container elements in a generic way, without knowing which container is used (similar to iterators in the C++ STL). Iterators only allow sequential access (that is, from one element to the next one). For random access, Eina provides accessor functions.

    +

    Getting an iterator to access elements of a given container is done through the functions of that particular container. There is no function to create a generic iterator as iterators absolutely depend on the container. Note that all iterators, regardless of the container type, are always deleted with the same eina_iterator_free() function.

    +

    To get the data and iterate, use the eina_iterator_next() function. To call a function on every single element of a container, use the eina_iterator_foreach() function.

    +

    In addition to iterator functions, each data type also owns a set of macros that provide the iterators, such as FOREACH or REVERSE_FOREACH.

    + +

    Strings

    + +

    Stringshare

    + +

    The Eina_Stringshare data type functions allow you to store a single copy of a string and use it in multiple places throughout your program. This way you can save a lot of strings with less memory. It improves string creation and destruction speed, reduces memory use, and decreases memory fragmentation.

    +

    With this data type you can reduce the number of duplicated strings kept in memory. It is common for the same strings to be dynamically allocated repeatedly between applications and libraries, especially in circumstances where you can have multiple copies of a structure that allocates the string. Rather than duplicating and freeing these strings, request a read-only pointer to an existing string and only incur the overhead of a hash lookup. This can sound like micro-optimizing, but profiling has shown that this can have a significant impact as the number of copies grows.

    + +

    To manage stringshares:

    +
      +
    1. To create a stringshare, declare a string variable and call the eina_stringshare_add() function:
       const char *mystr;
       const char *prologue = "Enlightenment is not just a window manager for Linux/X11 and others"
       
       mystr = eina_stringshare_add(prologue);
      -
      -

      When you are done with this string, you can delete it using eina_stringshare_del(Eina_Stringshare * string).

      -
      eina_stringshare_del(mystr);
      -

      Eina_Stringshare also provides some useful functions to work with stringshares, such as:

      -
        -
      • eina_stringshare_printf (const char *fmt, ...)
      • -
      • eina_stringshare_replace(Eina_Stringshare **p_str, const char *news)
      • -
      • eina_stringshare_strlen (Eina_Stringshare *str)
      • -
      +
    2. -

      eina_stringshare_printf (const char *fmt, ...) retrieves a string for use in a program from a format string. If you have a "format" string to pass to a function like printf you can store it as a stringshare too.

      +
    3. To retrieve or modify the string data: +
        +
      • Retrieve a string for use in a program from a format string using the eina_stringshare_printf() function. If you have a "format" string to pass to a function like printf, you can store it as a stringshare as well. +

        The following example produces "1 desktop manager to rule them all".

         const char *myfmtstr = "%d desktop manager to rule them all";
         const char *str;
        @@ -99,76 +98,120 @@ str = eina_stringshare_printf(myfmtstr, 1);
         
         print(str)
         
        -

        This example produces "1 desktop manager to rule them all".

        -

        You can replace the value of an Eina_Stringshare using eina_stringshare_replace(Eina_Stringshare **p_str, const char *news). Pass the pointer's address and the new value to this function like this:

        -
        eina_stringshare_replace(&str,"One desktop manager to rule them all");
        +
      • + +
      • Replace the value of a stringshare with the eina_stringshare_replace() function. Pass the pointer address and the new value to the function. +
        +eina_stringshare_replace(&str,"One desktop manager to rule them all");
        +
        +
      • + +
      • Retrieve the length of the stringshare value with the eina_stringshare_strlen() function. +
        +printf("length: %d\n", eina_stringshare_strlen(str));
         
        -

        eina_stringshare_strlen (Eina_Stringshare *str) gives you the length of the stringshare value.

        -
        printf("length: %d\n", eina_stringshare_strlen(str));
        +
      • +
      +
    4. +
    5. When the string is no longer needed, delete it using the eina_stringshare_del() function: +
      +eina_stringshare_del(mystr);
       
      +
    6. +
    + -

    String Buffer

    -

    This data type is designed to be a mutable string, allowing to append, prepend or insert a string to a buffer. By this way, you can easily handle buffers in your applications.

    -

    First you need to initialize the Eina_Strbuf and create the buffer.

    + +

    String Buffer

    +

    The string buffer data type is designed to be a mutable string, allowing you to append, prepend or insert a string to a buffer. It allows easy handling of buffers in your applications.

    +

    To manage string buffers:

    +
      +
    1. Initialize the Eina_Strbuf instance and create the buffer:
       Eina_Strbuf *buf;
       mybuffer = eina_strbuf_new();
       
      - -
      Appending and Prepending Characters to the Buffer
      -

      To append or prepend characters to your buffer you have multiple ways.

      -

      You can simply use eina_strbuf_append(Eina_Strbuf * buf, const char * str)

      -
      eina_strbuf_append(mybuffer, "This is my string. ");
      -

      eina_strbuf_append_char(Eina_Strbuf *buf, char c) just appends one character to your buffer, you also can append a "sized" string to the buffer using eina_strbuf_append_length(Eina_Strbuf * buf, const char * str, size_t length)

      -
      eina_strbuf_append_length(mybuffer, "Buffe", 5);
      +
    2. +
    3. Manage the buffer content: +
        +
      • To append characters to the buffer: +
          +
        • +

          For basic strings, use the eina_strbuf_append() function:

          +
          +eina_strbuf_append(mybuffer, "This is my string.");
          +
          +
        • +
        • To append 1 character to your buffer, use the eina_strbuf_append_char() function. You can also append a sized string to the buffer using the eina_strbuf_append_length() function. +
          +eina_strbuf_append_length(mybuffer, "Buffe", 5);
           eina_strbuf_append_char(mybuffer, 'r');
           
          -

          Eina_Strbuf also handles "printf" format strings, eina_strbuf_append_printf(Eina_Strbuf * buf, const char * fmtmt, ...) adds formatted strings to the buffer.

          -
          eina_strbuf_append_printf(buf, "%s%c", "buffe", 'r');
          +
        • +
        • To handle "printf" format strings, use the eina_strbuf_append_printf() function to add formatted strings to the buffer: +
          +eina_strbuf_append_printf(buf, "%s%c", "buffe", 'r');
           
          +
        • +
        +
      • -
        Removing and Replacing Characters from the Buffer
        -

        To remove characters from a position to another, use eina_strbuf_remove(Eina_Strbuf * buf, size_t started, size_t end) The first parameter is the buffer, the second is the start position of characters you want to delete, and the last the end position.

        +
      • To remove characters from one position to another, use the eina_strbuf_remove() function. The first parameter is the buffer, the second is the start position of the characters you want to delete, and the last the end position.

        This example removes the first 19 characters of the buffer:

        -
        eina_strbuf_remove(buf, 0, 18);
        +
        +eina_strbuf_remove(buf, 0, 18);
         
        +
      • -

        To replace characters, call eina_strbuf_replace (Eina_Strbuf *buf, const char *str, const char *with, unsigned int n) or eina_strbuf_replace_all (Eina_Strbuf *buf, const char *str, const char *with). eina_strbuf_replace replaces the n-th occurrence of given str in the buf with with string. eina_strbuf_replace_all replaces all occurrences of given str in the buf with with string.

        +
      • To replace characters: + +
        • +eina_strbuf_replace() replaces a specific occurrence of a given string in the buffer with another string.
        • +
        • +eina_strbuf_replace_all() replaces all occurrences of a given string in the buffer with another string. +
        • +
         eina_strbuf_append(mybuffer, "buffer buffer buffer");
         
        -// Replace one occurrence of "buffer" by "B-U-F-F-E-R"
        +// Replacing one occurrence of "buffer" by "B-U-F-F-E-R"
         eina_strbuf_replace(mybuffer, "buffer", "B-U-F-F-E-R", 1);
         
        -// Replace all the occurrences of "buffer" by "B-U-F-F-E-R"
        +// Replacing all the occurrences of "buffer" by "B-U-F-F-E-R"
         eina_strbuf_replace_all(mybuffer, "buffer", "B-U-F-F-E-R");
         
        -// Replace all the occurrences of "B-U-F-F-E-R" by "Buffer"
        +// Replacing all the occurrences of "B-U-F-F-E-R" by "Buffer"
         eina_strbuf_replace_all(mybuffer, "B-U-F-F-E-R", "Buffer");
         
        - -
        Inserting Characters in the Buffer
        -

        To insert characters you can use the "insert" function, eina_strbuf_insert(Eina_Strbuf * buf, const char * str, size_t pos) will insert the given str at the position pos. eina_strbuf_insert_printf(Eina_Strbuf * buf, const char * fmt, size_t pos, ...) does the same but with formatted strings.

        -
        eina_strbuf_insert(mybuffer, "More buffer", 10);
        +
      • +
      • To insert a string at the specified position, use the eina_strbuf_insert() function. Use the eina_strbuf_insert_printf() function with formatted strings. +
        +eina_strbuf_insert(mybuffer, "More buffer", 10);
         
         // Using eina_strbuf_length_get to get the buffer length
         eina_strbuf_insert_printf(buf, " %s: %d", 6, "length", eina_strbuf_length_get(buf));
         
        +
      • -
        Counting and Printing the Buffer
        -

        You may want to print or get the length of your buffer. In order to get the complete string, calling eina_strbuf_string_get(Eina_Strbuf *buf) and eina_strbuf_length_get(Eina_Strbuf *buf) will return the buffer length.

        -
        printf("%s : %d\n", eina_strbuf_string_get(mybuffer), eina_strbuf_length_get(buf));
        +
      • To get the complete length of the string and the buffer, use the eina_strbuf_string_get() and eina_strbuf_length_get() functions: +
        +printf("%s : %d\n", eina_strbuf_string_get(mybuffer), eina_strbuf_length_get(buf));
         
        +
      • +
      +
    4. -
      Freeing the Buffer
      -

      When you are done with the buffer don't forget to free the buffer using eina_strbuf_free(Eina_Strbuf * buf). You can also free the content of a Eina_Strbuf without freeing the buffer itself using eina_strbuf_string_free(Eina_Strbuf * buf).

      -
      eina_strbuf_free(mybuffer);
      +
    5. When no longer needed, free the buffer with the eina_strbuf_free() function. You can also free the content of Eina_Strbuf without freeing the buffer itself using the eina_strbuf_string_free() function. +
      +eina_strbuf_free(mybuffer);
       
      +
    6. +
    -

    Arrays

    +

    Arrays

    An array is a data type which describes an ordered collection of values. The values are accessed by their index.

    -
    INDEX | VALUE
    +
    +INDEX | VALUE
     --------------
     0     | value0
     1     | value1
    @@ -179,15 +222,18 @@ eina_strbuf_insert_printf(buf, " %s: %d", 6, "length", eina_
     6     | value6
     7     | value7
     
    -

    Eina provides two types of array: the classic Array and an inline array.

    +

    Eina provides 2 array types: the classic array and an inline array.

    -

    Array Data Type

    +

    Creating and Destroying a Classic Array

    -
    Creating and Destroying the Array
    -

    The eina_array_new(unsigned int step) function creates a new array. You can store strings or "objects" in the created array.

    -

    In this example, we create an array to store "strings":

    +

    The eina_array_new() function creates a new array. You can store strings or objects in the created array. The function returns a new array, or if memory allocation fails, NULL.

    +

    The first parameter of the eina_array_new() function defines the size of the array allocation step. For example, if you set it to 4, the function returns an array of 4 elements and the next time you grow the array it grows by 4 elements. Unless you have pushed 4 elements inside, it does not grow. But once you add the 5th element, it grows again and becomes an array of 8 elements. The allocation step feature is very useful for optimizing performance, and it also reduces memory fragmentation by having a size that fits the array usage. If you set the step to 0, the function sets a default safe value.

    + +

    To create an array to store strings:

    +
      +
    1. Create the array:
      -// The strings we want to store in the array 
      +// Strings to store in the array 
       const char* strings[] = 
       {
          "helo", "hera", "starbuck", "kat", "boomer",
      @@ -205,58 +251,61 @@ array = eina_array_new(20);
       // Inserting elements in the array
       for (i = 0; i < 20; i++)
          eina_array_push(array, strdup(strings[i]));
      -
      -// We have to free the array elements
      +
      +
    2. +
    3. To change the allocation step, use the eina_array_step_set() function: +
      • The first parameter is the array you want to change.
      • +
      • The second parameter is the size of that specific array (retrieved with the sizeof() function).
      • +
      • The last parameter is the new step size.
      +

      In this example, the array step changes from 20 to 30.

      +
      +eina_array_step_set(array, sizeof(*array), 30);
      +
      +
    4. +
    5. When no longer used, use the eina_array_free() function to free the array. It first calls the eina_array_flush() function and frees the memory of the pointer. It does not free the memory allocated for the elements of the array. To free them, use a while statement with the eina_array_pop function. +
      +// Freeing the array elements
       while (eina_array_count(array))
          free(eina_array_pop(array));
       
      -// Free the array itself
      +// Freeing the array itself
       eina_array_free(array);
       
      -

      The first parameter called 'step' defines the size of the allocation step, the array is allocated accordingly to the step. If you set 4 to this parameter, the function will return an array of 4 elements and next time you grow the array it will grow of 4 elements. Unless you have pushed 4 elements inside, it will not grow. But once you add the 5th element, it will grow again and become an array of 8 elements. This is very useful regarding performance issues and reduces also memory fragmentation by having a size that fit the array usage. If you set 0, the function will set a default safe value. This step can be changed using the function eina_array_step_set.

      -

      This function return a valid array on success, or NULL if memory allocation fails.

      -

      In the previous example we use eina_array_free(Eina_Array *array) to free the array. This function frees array. It first calls eina_array_flush() and then free the memory of the pointer. It does not free the memory allocated for the elements of the array. To free them, we use a 'while' statement with eina_array_pop, this function is explained in the "Array push and pop" part of this document.

      -

      Like we said before we can change the step of an array using eina_array_step_set(Eina_Array *array, unsigned int sizeof_eina_array, unsigned int step)

      +
    6. +
    + +

    Modifying Classic Array Content

    + +

    To modify classic array content:

    +
      +
    • To set the data of an element, use the eina_array_data_set() function. The first parameter is the array, the second is the index of the element you want to set, and the last one is the data. You must first get the related pointer if you need to free it, as this function replaces the previously held data. Be careful, as there is no array or index check. If the value is NULL or invalid, the application can crash.
      -Eina_Array *array;
      -array = eina_array_new(10);
      -eina_array_step_set(array, sizeof(*array), 20);
      -eina_array_free(array);
      +free(eina_array_data_get(array, 0));
      +eina_array_data_set(array, 0, strdup(strings[3]);
       
      -

      The first parameter is the array you want to change, the second one is the size of this very array. We use sizeof(*array) to get this size. The last parameter is the new step size. Here we pass from 10 to 20, next time the array grows, it grows of 20 elements.

      - -
      Array Push and Pop Operations
      -

      In the creation example we add elements to the array using eina_array_push(Eina_Array *array, const void *data)

      -
      // Inserting elements in the array
      +
    • +
    • To add elements to the end of the array, use the eina_array_push() function. The function returns EINA_TRUE on success, and EINA_FALSE on failure. The first parameter is the array to store the element, the second one is the data you want to store. If you store strings, remember to allocate the memory first. The example uses the strdup function to duplicate the string contained in strings[]. This function allocates the memory of the returned string, so you do not have to do it yourself. +
       for (i = 0; i < 20; i++)
          eina_array_push(array, strdup(strings[i]));
       
      -

      The first parameter is the array to store the element, the second one is the data you want to store. Be careful if you store strings you will have to allocate the memory first. Here we use strdup to duplicate the string contained in strings[], this function allocates the memory of the returned string, so we don't have to do it by ourselves.

      -

      eina_array_push puts the element at the end of the array and returns EINA_TRUE if everything runs well, EINA_FALSE if it doesn't.

      -

      To remove the last element of an array, we use eina_array_pop(Eina_Array *array), it takes the array as parameter and if the operation succeeds, it will return a pointer to the data of the removed element. That is the reason why we use this method to free the array's elements in this part of the example:

      -
      // We have to free the array elements
      -while (eina_array_count(array))
      -  free(eina_array_pop(array));
      -
      +
    • -
      Getting and Setting Data in an Array
      -

      If you want to access the data in the array, you can use eina_array_data_get(const Eina_Array *array, unsigned int idx), with the array and the index of the element you want to get.

      -
      // Get the data of the first element 
      -char *mydata;
      -mydata = eina_array_data_get(array, 0);
      -
      -

      The function returns a pointer to the data.

      -

      You can also set the data of an element using eina_array_data_set(const Eina_Array *array, unsigned int idx, const void *data) The first parameter is the array, the second the index of the element you want to set, and the last one is the data. This effectively replaces the previously held data. You must therefore get the related pointer if you need to free it. Be careful, for performance reasons, there is no checks of array or idx. If it is NULL or invalid, the program may crash.

      -
      // Get the data of the first element 
      -free(eina_array_data_get(array, 0));
      -eina_array_data_set(array, 0, strdup(strings[3]);
      +
    • To remove the last element of an array, use the eina_array_pop() function. It takes the array as a parameter, and if the operation is successful, returns a pointer to the data of the removed element. +
      +while (eina_array_count(array))
      +   free(eina_array_pop(array));
       
      +
    • -
      Array Removal Operations
      -

      eina_array_remove(Eina_Array *array, Eina_Bool(*keep)(void *data, void *gdata), void *gdata) rebuilds an array by specifying the data to be kept. The first parameter is the array to be changed, the second is the function which selects the data to keep in the rebuild array, the last one is the data to pass to the 'callback' function defined as the second parameter.

      -

      The keep function has to return an Eina_Bool, EINA_TRUE if the element stays and EINA_FALSE if it has to be removed.

      -

      In this example we remove all the elements of the array which has a length greater than 5.

      -
      // The keep function 
      +
    • To rebuild the array by specifying the data to be kept, use the eina_array_remove() function: +
      • The first parameter is the array to be changed.
      • +
      • The second parameter is the function which selects the data to keep in the rebuilt array.
      • +
      • The last parameter is the data to pass to the selector function defined as the second parameter.
      +

      The selector function has to return an Eina_Bool, EINA_TRUE if the element stays, and EINA_FALSE if it has to be removed.

      +

      The following example shows how to remove all the elements of the array that are longer than 5.

      +
      +// Selector function 
       Eina_Bool keep(void *data, void *gdata)
       {
          if (strlen((const char*)data) <= 5)
      @@ -267,72 +316,59 @@ Eina_Bool keep(void *data, void *gdata)
       
       int remove_array()
       {
      -   const char* strs[] = 
      -   {
      -      "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
      -      "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen",
      -      "seventeen", "eighteen", "nineteen", "twenty"
      -   };
      -   const char* strings[] = 
      -   {
      -      "helo", "hera", "starbuck", "kat", "boomer",
      -      "hotdog", "longshot", "jammer", "crashdown", "hardball",
      -      "duck", "racetrack", "apolo", "husker", "freaker",
      -      "skulls", "bulldog", "flat top", "hammerhead", "gonzo"
      -   };
          Eina_Array *array;
          Eina_Array_Iterator iterator;
          const char *item;
          unsigned int i;
       
      -   array = eina_array_new(10);
      -
      -   for (i = 0; i < 20; i++)
      -     eina_array_push(array, strs[i]);
      -
      -   eina_array_clean(array);
      -   for (i = 0; i < 20; i++)
      -     eina_array_push(array, strings[i]);
      -
      -   eina_array_data_set(array, 17, "flattop");
      +   // Creating and populating an array
       
          // Removing the undesired elements 
          eina_array_remove(array, keep, NULL);
       
      -   EINA_ARRAY_ITER_NEXT(array, i, item, iterator)
      -     printf("item #%d: %s\n", i, item);
      -
      -   // Flushing the array
      -   eina_array_flush(array);
      -
      -   // Free the array 
      -   eina_array_free(array);
      +   // Flushing and freeing the array
       
          return 0;
       }
       
      - -
      Array Flush Operation
      -

      To completely wipe an array out, you can use eina_array_flush (Eina_Array *array). This function sets the counting and total members of array to 0, frees and sets to NULL all its data members. For performance issues, there is no check of the array. If it is NULL or invalid, the program may crash. The only parameter of this function is a pointer to the array (Eina_Array *) you want to flush.

      -
      eina_array_flush(array);
      +
    • +
    • To completely wipe an array out, use the eina_array_flush() function. This function sets the count and total members of an array to 0, and frees and sets its data members to NULL. For performance reasons, there is no array check. If the value is NULL or invalid, the program can crash. The only parameter of this function is a pointer to the Eina_Array array you want to flush. +
      +eina_array_flush(array);
      +
      +
    • +
    • To empty an array quickly, use the eina_array_clean() function. This function sets the counting of members in the array to 0. It does not free any space so you have to use it carefully. For performance reasons, there is no array check. If the value is NULL or invalid, the program can crash. +
      +eina_array_clean(array);
       
      +
    • +
    -
    Counting Operations
    -

    To get the number of elements in an array you must use eina_array_count(const Eina_Array *arrays)

    -

    The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new

    -

    The function returns an unsigned int representing to the number of elements.

    -
    unsigned int nb_elm;
    -nb_elm = eina_array_count(array);
    +

    Accessing Classic Array Data

    + +

    To access classic array data:

    +
      +
    • To access the data in the array, use the eina_array_data_get() function with the array and the index of the element you want to get. The function returns a pointer to the data. +
      +// Getting the data of the first element 
      +char *mydata;
      +mydata = eina_array_data_get(array, 0);
       
      +
    • + -
      Array Clean Operation
      -

      If you need to empty an array quickly, you can use eina_array_clean(Eina_Array *array) this function sets the counting of members in the array to 0. It doesn't free any space so you have to use it carefully. For performance reasons, there is no check of array. If it is NULL or invalid, the program may crash.

      -
      eina_array_clean(array);
      +
    • To get the number of elements in an array, use the eina_array_count() function. The first parameter is a pointer to the array variable returned by the eina_array_new() function. +

      The function returns the number of elements.

      +
      +unsigned int nb_elm;
      +nb_elm = eina_array_count(array);
       
      +
    • -
      Iterating in an Array
      -

      We may want to iterate through the array. Eina implements Iterators to give the ability to the programmer of iterating in the data type.

      -

      The Eina_Array has one iterator the ITER_NEXT. You can use it by calling the macro EINA_ARRAY_ITER_NEXT(array, i, item, iterator). It takes the array to iterate as first parameter, an counter for the current index during iteration, and variable of the same type of item data and an Eina_Iterator. So in order to use it, you have to declare an Eina_Iterator, an int counter, and for example an char * item if your array contains 'strings'

      +
    • To iterate through an array, you can use various methods: +
        +
      • Use the Eina_Array iterator called ITER_NEXT. +

        You can use the iterator by calling the macro EINA_ARRAY_ITER_NEXT(). It takes the array to iterate as the first parameter, a counter for the current index during the iteration, and a variable of the same type as the item data and an Eina_Iterator. To use it, declare an Eina_Iterator, an int counter, and, for example, a char * item if your array contains any strings.

         Eina_Array_Iterator iterator;
         const char *item;
        @@ -341,9 +377,12 @@ unsigned int i;
         EINA_ARRAY_ITER_NEXT(array, i, item, iterator)
            printf("item #%d: %s\n", i, item);
         
        -

        Eina also provides a function to iterate over an array, eina_array_foreach(Eina_Array *array, Eina_Each_Cb cb, void *fdata). This function takes as first parameter the array to iterate, the second parameter called "cb" is a callback function which determines if the iteration can continue or not, the last parameter called fdata is the data passed to the callback function.

        -

        In this example we print the data of each element:

        -
        // The callback function 
        +
      • +
      • Use the eina_array_foreach() function to iterate over the array. +

        The first parameter is the array to iterate, the second is a callback function which determines whether the iteration can continue,and the last is the data passed to the callback function.

        +

        To iterate over the array and to print the data of each array element:

        +
        +// Callback function 
         static Eina_Bool
         elm_print(const void *container, void *data, void *fdata)
         {
        @@ -354,41 +393,26 @@ elm_print(const void *container, void *data, void *fdata)
         
         int iterating_array()
         {
        -   const char* strings[] = 
        -   {
        -      "helo", "hera", "starbuck", "kat", "boomer",
        -      "hotdog", "longshot", "jammer", "crashdown", "hardball",
        -      "duck", "racetrack", "apolo", "husker", "freaker",
        -      "skulls", "bulldog", "flat top", "hammerhead", "gonzo"
        -   };
            Eina_Array *array;
            unsigned int i;
         
        -   array = eina_array_new(10);
        -   eina_array_step_set(array, sizeof(*array), 20);
        -
        -   for (i = 0; i < 20; i++)
        -     eina_array_push(array, strdup(strings[i]));
        +   // Creating and populating an array
         
            // Iterating over the array and calling elm_print on each element
            eina_array_foreach(array, elm_print, NULL);
         
        -   // Free the elements data
        -   while (eina_array_count(array))
        -     free(eina_array_pop(array));
        -
        -   // Free the array
        -   eina_array_free(array);
        +   // Freeing the element data and array
         
            return 0;
         }
         
        +
      • -

        eina_array_iterator_new(const Eina_Array *array) function returns a newly allocated iterator associated to array. If array is NULL or the counting of array members is less or equal than 0, this function will return NULL. If the memory cannot be allocated, NULL is returned and EINA_ERROR_OUT_OF_MEMORY is thrown. Otherwise, a valid iterator is returned.*

        -

        Pass to this function the array for which you want to create a new Iterator.

        -

        The iterator is used to run a sequential walk through the array, just like eina_array_foreach.

        -

        In this example we print the data for all elements.

        -
        static Eina_Bool
        +
      • Use the eina_array_iterator_new() function to create an iterator for the array.

        The function returns a newly allocated iterator associated with the array. If the array is NULL or the count of the array members is less than or equal to 0, the function returns NULL. If the memory cannot be allocated, NULL is returned and EINA_ERROR_OUT_OF_MEMORY is thrown. Otherwise, a valid iterator is returned.

        +

        Pass to this function the array for which you want to create a new iterator. The iterator is used to run a sequential walk through the array, just like the eina_array_foreach() function.

        +

        To create an iterator and use it to print the data of each array element:

        +
        +static Eina_Bool
         print_one(const void *container, void *data, void *fdata)
         {
            printf("%s\n", (char*)data);
        @@ -404,17 +428,7 @@ int new_iterator()
            void *uninteresting;
            Eina_Bool rt;
         
        -   array = eina_array_new(4);
        -
        -   const char *strings[] = 
        -   {
        -      "uninteresting string", "husker", "starbuck", "husker"
        -   };
        -
        -   for (i = 0; i < 4; i++)
        -   {
        -      eina_array_push(array, strings[i]);
        -   }
        +   // Creating and populating an array
         
            it = eina_array_iterator_new(array);
         
        @@ -425,137 +439,117 @@ int new_iterator()
            return 0;
         }
         
        - -

        eina_array_accessor_new(const Eina_Array *array) function returns a newly allocated accessor associated to the array. If the array is NULL or the counting of array members is less or equal than 0, this function will return NULL. If the memory cannot be allocated, NULL is returned and EINA_ERROR_OUT_OF_MEMORY is thrown. Otherwise, a valid accessor is returned. The accessors allows random access on the array.

        -

        This example shows how to use accessors for a random access to the array elements.

        -
        int random_access()
        +
      • +
      • Use the eina_array_accessor_new() function to get random access to the array elements. +

        The function returns a newly allocated accessor associated with the array. If the array is NULL or the counting of array members is less than or equal to 0, this function returns NULL. If the memory cannot be allocated, NULL is returned and EINA_ERROR_OUT_OF_MEMORY is thrown. Otherwise, a valid accessor is returned.

        +

        To use the accessor to retrieve and print the data of every other array element:

        +
        +int random_access()
         {
        -   const char *strings[] = 
        -   {
        -      "even", "odd", "even", "odd", "even", "odd", "even", "odd", "even", "odd"
        -   };
        -   const char *more_strings[] = 
        -   {
        -      "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
        -   };
            // Declaration of the array 
            Eina_Array *array;
            // Declaration of the accessor
            Eina_Accessor *acc;
         
        -   // A generic counter
        +   // Generic counter
            unsigned short int i;
         
            // Variable to put the data retrieved from an array element
            void *data;
         
        -   array = eina_array_new(10);
        -
        -   for (i = 0; i < 10; i++)
        -      {
        -         eina_array_push(array, strings[i]);
        -      }
        +   // Creating and populating an array
         
            // Creating the array accessor
            acc = eina_array_accessor_new(array);
         
            // Random access to the data of the array elements
        -   for (i = 1; i < 10; i += 2)
        -      {
        -         // Put the data in the variable 'data'
        -         eina_accessor_data_get(acc, i, &data);
        -         printf("%s\n", (const char *)data);
        -      }
        -
        -   // Free the accessor
        +   for(i = 1; i < 10; i += 2)
        +   {
        +      // Putting the data in the variable 'data'
        +      eina_accessor_data_get(acc, i, &data);
        +      printf("%s\n", (const char *)data);
        +   }
        +
        +   // Freeing the accessor
            eina_accessor_free(acc);
         
        -   // Free the array
        -   eina_array_free(array);
        +   // Freeing the array
         
            return 0;
         }
         
        +
      • +
      +
    • +
    + + +

    Creating and Destroying an Inline Array

    + +

    An inline array is a container that stores the data itself, not the pointers to the data. This means there is no memory fragmentation, and for small data types, such as char, short, and int, it is more memory-efficient. This is because the data is stored in the cache and is faster to access. The bigger the data gets, however, the less likely it is and the less interesting it becomes.

    +

    To create an inline array, use the eina_inarray_new() function:

    +
    • The first parameter is the size of the value. In this example, only the characters are stored, and because of that, only sizeof(char) is passed to the function.
    • +
    • The second parameter defines the size of the array allocation step. For example, if you set it to 4, the function returns an inline array of 4 elements, and the next time you grow the inline array, it grows by 4 elements and becomes an array of 8 elements. If you set the step to 0, the function sets a default safe value. +

      The step can be changed later on using the eina_inarray_step_set() function.

    -

    Inline Arrays

    -

    The inline array is a container that stores the data itself (not the pointers to the data), this means there is no memory fragmentation. Also, for small data types (such as char, short, int, etc.), it's more memory efficient: data will be stored in cache and faster accessible, but the bigger the data gets, the less likely it is and the less interesting it becomes).

    -

    To create an inline array you have to use eina_inarray_new(unsigned int member_size, unsigned int step) like in this example:

    -
    int inline_array() 
    +

    The eina_inarray_new() function returns a pointer to the new Eina_Inarray variable.

    +
    +int inline_array() 
     {
    -   // Declaration of inline array variable of the type Eina_Inarray
    +   // Declare an inline array variable of the type Eina_Inarray
        Eina_Inarray *iarr;
     
    -   // Creation of an Inline array of "char"
    +   // Create an inline array of "char"
        iarr = eina_inarray_new(sizeof(char), 0);
     
    -   // Free the memory
    +   // When no longer needed, free the array memory
        eina_inarray_free(iarr);
     
        return 0;
     }
     
    -

    The first parameter called 'member_size' is the size of the value. In this example we want to store only characters, so we pass sizeof(char) to the function. The second parameter called 'step' defines the size of the allocation step, the inline array is allocated by step. If you set 4 to this parameter, the function will return an inline array of 4 elements, next time you grow the inline array it will grow of 4 elements, so next time you grow the inline array will be a inline array of 8 elements. I you set 0, the function will set a default safe value. This step can be changed using the function eina_inarray_step_set.

    -

    The function will return a pointer to the new Eina_Inarray variable.

    -

    This example only shows the creation of an array, now we will see the following manipulation operations:

    -
      -
    • push and pop
    • -
    • insert and insert sorted
    • -
    • remove and flush
    • -
    • replace
    • -
    • search
    • -
    • sort
    • -
    • count
    • -
    - -

    Push and Pop Operations

    -

    To add data as the last element of the inline array you can use eina_inarray_push(Eina_Inarray *array, const void *data) like in this example:

    -
    iarr = eina_inarray_new(sizeof(char), 0);
    +

    Modifying Inline Array Content

    -// Adding a value to the inline array +

    To modify inline array content:

    +
      +
    • +

      To add data as the last element of the inline array, use the eina_inarray_push() function. The first parameter is a pointer to the array variable returned by the eina_inarray_new() function. The second parameter is the data you want to push to the inline array.

      +

      If everything runs fine, the function returns the index of the new element. If something goes wrong, it returns -1.

      +
       ch = 'a';
       eina_inarray_push(iarr, &ch);
       
      - -

      The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new The second parameter called 'data' is the data you want to push to the inline array

      -

      If everything runs fine the function will return the index of the new element. If something goes wrong it returns -1.

      -

      To remove the last element of the inline array you can use eina_inarray_pop(Eina_Inarray *array) like in this example:

      -
      iarr = eina_inarray_new(sizeof(char), 0);
      -
      -ch = 'a';
      -eina_inarray_push(iarr, &ch);
      -
      -// Removing the last element
      -eina_inarray_pop(iarr);
      -
      - -

      The only parameter of eina_inarray_pop is a pointer to the array variable returned by eina_inarray_new·

      -

      This function returns the data removed from the inline array.

      -

      Insertion Operations

      -

      To insert data on a given position of the inline array, you can use the function eina_inarray_insert_at(Eina_Inarray *array, unsigned int position, const void *data).

      -
      iarr = eina_inarray_new(sizeof(char), 0);
      -
      +
    • +
    • +

      To insert data to a given position of the inline array, use the eina_inarray_insert_at() function:

      +
      • The first parameter is a pointer to the array variable returned by the eina_inarray_new() function.
      • +
      • The second parameter is the index of the element you want to add to the inline array.
      • +
      • The last parameter is a pointer to the content to be added.
      +

      The content of the pointer is copied to the given position in the inline array. All the members from the position to the end of the array are shifted towards the end. If the position is equal to the end of the array, the member is appended. If the position is bigger than the array length, the function fails.

      +
       ch = 'a';
       eina_inarray_push(iarr, &ch);
       ch = 'b';
       eina_inarray_push(iarr, &ch);
       ch = 'd';
       eina_inarray_push(iarr, &ch);
      -ch = 'e';
      -eina_inarray_push(iarr, &ch);
       
       // Adding data on position 3
       ch = 'c';
       eina_inarray_insert_at(iarr, 2, &ch)
       
      - -

      The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new The second parameter called 'position' is the index of the element you want to remove from the inline array.

      -

      The content of pointer is copied at the given position in the inline array. All the members from position to the end of the array are shifted to the end.

      -

      If position is equal to the end of the array, then the member is appended.

      -

      Be careful, if position is bigger than the array length, it will fail.

      -

      If you want to insert data with your own criteria of position you can use eina_inarray_insert(Eina_Inarray *array, const void * data, Eina_Compare_Cb compare). In this example we insert before a greater value.

      +
    • +
    • +

      To insert data with your own position criteria, use the eina_inarray_insert() or eina_inarray_insert_sorted() function. The only difference between these functions is that the eina_inarray_insert_sorted() function assumes that the array is already sorted and consequently optimizes the insertion position by doing a binary search.

      +

      In both functions:

      +
      • The first parameter is a pointer to the array variable returned by the eina_inarray_new() function.
      • +
      • The second parameter is the data you want to push to the inline array.
      • +
      • The last parameter is the callback comparison function. +

        The Eina_Compare_Cb callback function compares data1 and data2. data1 is the value contained in the inline array and data2 is the data you pass to the eina_inarray_insert() or eina_inarray_insert_sorted() function as the second parameter. If data1 is less than data2, -1 must be returned, if it is greater, 1 must be returned, and if they are equal, 0 must be returned.

      +

      The following example shows how to insert a value before a greater value:

      -// Defining the function with our own criteria of position
      +// Defining the comparison function with the position criteria
       Eina_Compare_Cb cmp(const void *a, const void *b)
       {
          return *(int*)a > *(int*)b;
      @@ -567,10 +561,9 @@ int inline_insert()
          char ch, *ch3;
          int a, *b;
       
      -   // Creation of an inline array of ints with step of 4
      -   iarr = eina_inarray_new(sizeof(int), 4);
      +   // Creating an inline array
       
      -   // Adding data to this inline array
      +   // Adding data to the inline array
          a = 97;
          eina_inarray_push(iarr, &a);
          a = 98;
      @@ -578,225 +571,174 @@ int inline_insert()
          a = 100;
          eina_inarray_push(iarr, &a);
       
      -   // Inserting data with our own criteria
      +   // Inserting data with the criteria
          a = 99;
          eina_inarray_insert_sorted(iarr, &a, cmp);
       
          eina_inarray_free(iarr);
       }
       
      +
    • +
    • +

      To remove the last element of the inline array, use the eina_inarray_pop() function. The only parameter is a pointer to the array variable returned by the eina_inarray_new() function. This function returns the data removed from the inline array.

      +
      +eina_inarray_pop(iarr);
      +
      +
    • +
    • +

      To remove specific data from an inline array, use the eina_inarray_remove() function. The first parameter is a pointer to the array variable returned by the eina_inarray_new() function. The second parameter is the data you want to remove from the inline array.

      + +

      The eina_inarray_remove() function finds the data and removes the matching members from the array. The data can be an existing member of an inline array for optimized usage. In other cases, the content is matched using the memcmp() function.

      + -

      The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new The second parameter called 'data' is the data you want to push to the inline array

      -

      The last parameter called 'compare' is the callback comparison function. This "callback" function of type Eina_Compare_Cb compares data1 and data2. data1 is the value contained in the inline array and data2 is the data you pass to eina_inarray_insert_sorted as second parameter. If data1 is 'less' than data2, -1 must be returned, if it is 'greater', 1 must be returned, and if they are equal, 0 must be returned.

      -

      Remove and Flush Operations

      -

      If you want to remove some data from an inline array you can use the function eina_inarray_remove(Eina_Inarray *array, const void *data). It finds the data and removes matching members from the array. The data may be an existing member of inline array for an optimized usage. If it's not the case the contents will be matched using memcmp().

      -
      iarr = eina_inarray_new(sizeof(char), 0);
      +

      The eina_inarray_remove() function returns the index of the removed member, or -1 if failed.

      +
      +iarr = eina_inarray_new(sizeof(char), 0);
       
       ch = 'a';
       eina_inarray_push(iarr, &ch);
      -ch = 'b';
      -eina_inarray_push(iarr, &ch);
      -ch = 'c';
      -eina_inarray_push(iarr, &ch);
      -ch = 'd';
      -eina_inarray_push(iarr, &ch);
      -ch = 'e';
      -eina_inarray_push(iarr, &ch);
       
       // Removing data from the array
       eina_inarray_remove(iarr, &ch);
       
      +
    • -

      The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new The second parameter called 'data' is the data you want to remove from the inline array.

      -

      The function returns the index of the removed member or -1 on errors.

      -

      You can also remove data from a defined position in the array, you must use eina_inarray_remove_at(Eina_Inarray *array, unsigned int position)

      -
      iarr = eina_inarray_new(sizeof(char), 0);
      -
      -ch = 'a';
      -eina_inarray_push(iarr, &ch);
      -ch = 'b';
      -eina_inarray_push(iarr, &ch);
      -ch = 'c';
      -eina_inarray_push(iarr, &ch);
      -ch = 'c';
      -eina_inarray_push(iarr, &ch);
      -ch = 'd';
      -eina_inarray_push(iarr, &ch);
      -ch = 'e';
      -eina_inarray_push(iarr, &ch);
      -
      +
    • +

      To remove data from a defined position in an inline array, use the eina_inarray_remove_at() function. The first parameter is a pointer to the array variable returned by the eina_inarray_new() function. The second parameter is the index of the element you want to remove from the inline array.

      +

      The function returns EINA_TRUE on success and EINA_FALSE if something goes wrong. The member is removed from the inline array and any members after it are moved towards the array's head.

      +
       // Removing data from position 2
       eina_inarray_remove_at(iarr, 2);
       
      - -

      The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new

      -

      The second parameter called 'position' is the index of the element you want to remove from the inline array.

      -

      The function returns EINA_TRUE on success and EINA_FALSE if something goes wrong

      -

      The member is removed from the inline array and any members after it are moved towards the array's head.

      -

      You can also remove all the elements of the array using eina_inarray_flush(Eina_Inarray *array).

      -
      iarr = eina_inarray_new(sizeof(char), 0);
      -
      -ch = 'a';
      -eina_inarray_push(iarr, &ch);
      -ch = 'b';
      -eina_inarray_push(iarr, &ch);
      -ch = 'c';
      -eina_inarray_push(iarr, &ch);
      -ch = 'd';
      -eina_inarray_push(iarr, &ch);
      -ch = 'e';
      -eina_inarray_push(iarr, &ch);
      -
      -// Removing all inline array members 
      +
    • +
    • To remove all the elements of the array, use the eina_inarray_flush() function. The first parameter is a pointer to the array variable returned by the eina_inarray_new() function. The function removes every member from the array.

      +
       eina_inarray_flush(iarr);
       
      +
    • -

      The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new

      -

      The function removes every member from array.

      -

      Replace Operations

      -

      In most of the cases when we use arrays we want to replace some values, you can do it using the function eina_inarray_replace_at(Eina_Inarray *array, unsigned int position, const void *data) This function will copy the data over the given position.

      -
      iarr = eina_inarray_new(sizeof(char), 0);
      -
      -ch = 'a';
      -eina_inarray_push(iarr, &ch);
      -ch = 'b';
      -eina_inarray_push(iarr, &ch);
      -ch = 'c';
      -eina_inarray_push(iarr, &ch);
      -ch = 'c';
      -eina_inarray_push(iarr, &ch);
      -ch = 'e';
      -eina_inarray_push(iarr, &ch);
      -
      -// Removing all inline array members 
      +
    • +

      To replace values in the inline array, use the eina_inarray_replace_at() function, which copies the data over the given position:

      +
      • The first parameter is a pointer to the array variable returned by the eina_inarray_new() function.
      • +
      • The second parameter is the index of the element you want to remove from the inline array.
      • +
      • The last parameter is the data you want to copy in place of the current data.
      +

      The function returns EINA_TRUE on success, and EINA_FALSE on failure. The given pointer content is copied to the given position in the array. The pointer is not referenced, instead its contents are copied to the member's array using the previously defined member_size. If the position does not exist, the function fails.

      +
      +// Replacing the member at position 3 
       ch = 'd';
       eina_inarray_replace_at(iarr, 3, &ch);
       
      +
    • -

      The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new

      -

      The second parameter called 'position' is the index of the element you want to remove from the inline array.

      -

      The last parameter called 'data' is the data you want to be copied in place of the current data.

      -

      eina_inarray_replace_at returns EINA_TRUE on success, EINA_FALSE on failure.

      -

      The given pointer contents is copied at the given position in the array.

      -

      The pointer is not referenced, instead it's contents is copied to the members array using the previously defined member_size.

      -

      If position does not exist, it will fail.

      -

      Searching in the Inline Array

      -

      The function eina_inarray_search(const Eina_Inarray * array, const void * data, Eina_Compare_Cb compare) allows you to search a member in an inline array. It runs a linear walk looking for the given data.

      -
      Eina_Compare_Cb
      -compare(const void *pa, const void *pb)
      +
    • +

      To sort an inline array, use the eina_inarray_sort() function, which applies a quick sorting algorithm to the inline array:

      +
      • The first parameter is a pointer to the array returned by the eina_inarray_new() function.
      • +
      • The last parameter is the Eina_Compare_Cb callback comparison function, which compares data1 and data2. +

        data1 and data2 are values contained in the inline array. If the data matches, the function must return 0, if data1 is less than data2, -1 must be returned and if it is greater, 1 must be returned.

      +
      +static int
      +short_cmp(const void *pa, const void *pb)
       {
          const short *a = pa, *b = pb;
      -   if (*a == *b)
      -   {
      -      return EINA_TRUE;
      -   }
       
      -   return EINA_FALSE;
      +   return *a - *b;
       }
       
      -int search_inline_array()
      +int sorting_inline_array()
       {
          Eina_Inarray *array;
          int i;
      -   int elm_index;
      -   int to_search = 3;
       
      -   array = eina_inarray_new(sizeof(short), 1);
      +   // Creating and populating the inline array
       
      -   for (i = 0; i < numbers_count; i++)
      -   {
      -      short val = i;
      -      eina_inarray_push(array, &val);
      -   }
      -   elm_index = eina_inarray_search(array, &to_search, compare);
      +   eina_inarray_sort(array, short_cmp);
          eina_inarray_free(array);
       }
       
      -

      The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new

      -

      The second parameter called 'data' is the data used by the callback function to run comparison.

      -

      The last parameter called 'compare' is the callback comparison function. This "callback" function of type Eina_Compare_Cb compares data1 and data2. data1 is the value contained in the inline array and data2 is the data you pass to eina_inarray_insert_sorted as second parameter. If data matches function must return 0, if data1 is 'less' than data2, -1 must be returned and if it is 'greater', 1 must be returned.

      -

      The function returns the member index or -1 if not found.

      -

      Be careful the data given to compare function is the pointer to member memory itself, do no change it.

      -

      The function eina_inarray_search_sorted does exactly the same as eina_inarray_search but uses binary search instead for given data as compared by the compare function.

      +

      Be careful, the data given to the compare function is the pointer to the member memory itself. Do not change it.

      +
    • +
    +

    Accessing Inline Array Data

    -

    Sorting and Counting the Inline Array Elements

    -

    To sort and inline array you must use eina_inarray_sort(Eina_Inarray *array, Eina_Compare_Cb compare) this function applies a quick sort algorithm to the inline array.

    -
    static int
    -short_cmp(const void *pa, const void *pb)
    +

    To access inline array data:

    +
      +
    • +

      To search a member in an inline array, use the eina_inarray_search() function that runs a linear walk looking for the given data:

      + +
      • The first parameter is a pointer to the array variable returned by the eina_inarray_new() function.
      • +
      • The second parameter is the data used by the callback function to run the comparison.
      • +
      • The last parameter is the Eina_Compare_Cb callback comparison function, which compares data1 and data2. +

        data1 is the value contained in the inline array and data2 is the data you pass to the eina_inarray_search() function as the second parameter. If the data matches, the function must return 0, if data1 is less than data2, -1 must be returned and if it is greater, 1 must be returned.

      +

      The function returns the member index, or -1 if not found.

      +
      +Eina_Compare_Cb
      +compare(const void *pa, const void *pb)
       {
          const short *a = pa, *b = pb;
      +   if (*a == *b)
      +   {
      +      return EINA_TRUE;
      +   }
       
      -   return *a - *b;
      +   return EINA_FALSE;
       }
       
      -static const short rand_numbers[] = 
      -{
      -   9, 0, 2, 3, 6, 5, 4, 7, 8, 1, 10
      -};
      -
      -int sorting_inline_array()
      +int search_inline_array()
       {
          Eina_Inarray *array;
          int i;
      +   int elm_index;
      +   int to_search = 3;
       
      -   array = eina_inarray_new(sizeof(short), 1);
      +   // Creating and populating the inline array
       
      -   for (i = 0; i < sizeof(rand_numbers)/sizeof(rand_numbers[0]); i++)
      -   {
      -      short val = rand_numbers[i];
      -      eina_inarray_push(array, &val);
      -   }
      -   eina_inarray_sort(array, short_cmp);
      +   elm_index = eina_inarray_search(array, &to_search, compare);
          eina_inarray_free(array);
       }
       
      -

      The first parameter called 'array' is a pointer to the array returned by eina_inarray_new. The last parameter called 'compare' is the callback comparison function. This "callback" function of type Eina_Compare_Cb compares data1 and data2. data1 is the value contained in the inline array and data2 is the data you pass to eina_inarray_insert_sorted as second parameter. If the data matches, the function must return 0, if data1 is 'less' than data2, -1 must be returned and if it is 'greater', 1 must be returned.

      -

      Same as eina_inarray_search, the data given to compare function is the pointer to member memory itself, do no change it.

      -

      To get the number of elements in an inline array you must use eina_inarray_count(const Eina_Inarray *arrays)

      -
      iarr = eina_inarray_new(sizeof(char), 0);
      +

      Be careful, the data given to the compare function is the pointer to the member memory itself. Do not change it.

      +

      The eina_inarray_search_sorted() function does exactly the same as eina_inarray_search(), but uses a binary search for the given data.

      +
    • -ch = 'a'; -eina_inarray_push(iarr, &ch); -ch = 'b'; -eina_inarray_push(iarr, &ch); -ch = 'c'; -eina_inarray_push(iarr, &ch); -ch = 'c'; -eina_inarray_push(iarr, &ch); -ch = 'e'; -eina_inarray_push(iarr, &ch); - -// Printing the number of array elements using eina_inarray_count +
    • +

      To get the number of elements in an inline array, use the eina_inarray_count(). The first parameter is a pointer to the array returned by the eina_inarray_new() function. The function returns an unsigned int, the number of elements.

      +
       printf("Inline array of integers with %d elements:\n", eina_inarray_count(iarr));
       
      +
    • + +
    • To iterate through an inline array, you can use various methods: +
        +
      • You can use the iterator macros for the inline arrays: FOREACH and REVERSE_FOREACH.

      • +
      • +

        To run a linear walk over an array of elements, use the EINA_INARRAY_FOREACH() macro. The first parameter is a pointer to the array variable returned by eina_inarray_new(), and the second parameter is the variable into which the current value is put during the walk. The EINA_INARRAY_REVERSE_FOREACH() macro does the same thing but starts from the last element.

        -

        The first parameter called 'array' is a pointer to the array returned by eina_inarray_new The function returns an unsigned int, the number of elements.

        -

        Iterating over an Inline Array

        -

        When we use datatypes in any language we want to iterate through lists and arrays, Eina implements Iterators to give the ability for the programmer to iterate over the datatype.

        -

        The inline array have two iterators macros: the FOREACH and the REVERSE_FOREACH.

        -

        To run a linear walk over an array of elements, we use the macro EINA_INARRAY_FOREACH(array, itr)

        -
        iarr = eina_inarray_new(sizeof(char), 0);
        +

        The following example illustrates the printing of each element and its pointer:

        +
        +iarr = eina_inarray_new(sizeof(char), 0);
         int a, *b;
         
         a = 97;
         eina_inarray_push(iarr, &a);
         a = 98;
         eina_inarray_push(iarr, &a);
        -a = 100;
        -eina_inarray_push(iarr, &a);
         a = 99;
        +eina_inarray_push(iarr, &a);
        +
         EINA_INARRAY_FOREACH(iarr, b)
           printf("int: %d(pointer: %p)\n", *b, b);
         
        - -

        In this example we print each element and its pointer.

        -

        The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new.

        -

        The second parameter called 'itr' is the variable used to put the current value during the walk.

        -

        The EINA_INARRAY_REVERSE_FOREACH macro does the same thing but starts from the last element.

        -

        You might need to perform some processing on the array's data, to do this you can use eina_inarray_foreach(const Eina_Inarray *array, Eina_Each_Cb function, const void * user_data). It will invoke the given function on each element of the array with the given data.

        +
      • +
      • To process the array data, use the eina_inarray_foreach() function, which invokes the given function on each element of the array with the given data: +
        • The first parameter is a pointer to the array variable returned by eina_inarray_new().
        • +
        • The second parameter is the function to run on each element. +

          The function must return EINA_TRUE as long as you want to continue iterating. By returning EINA_FALSE, you stop the iteration and make the eina_inarray_foreach() function return EINA_FALSE.

          +

          The data given to the function is the pointer to the member itself.

        • +
        • The last parameter is the data passed to the function called on each element.
        +

        The eina_inarray_foreach() function returns EINA_TRUE if it successfully iterates through all items of the array. Call the function for every given data in the array. This is a safe way to iterate over an array.

         static Eina_Bool
         array_foreach(const void *array __UNUSED__, void *p, void *user_data __UNUSED__)
        @@ -829,17 +771,16 @@ int inline_array_foreach()
            return 0;
         }
         
        +
      • -

        The first parameter called 'array' is a pointer to the array variable returned by eina_inarray_new

        -

        The second parameter called 'function' is the function to run on each element.

        -

        The last parameter called 'user_data' is the data passed to the 'function' called on each element.

        -

        The function returns EINA_TRUE if it successfully iterates through all items of the array.

        -

        Call function for every given data in array.

        -

        Safe way to iterate over an array.

        -

        The 'callback' function should return EINA_TRUE as long as you want the function to continue iterating, by returning EINA_FALSE it will stop and return EINA_FALSE as result.

        -

        The data given to the function is the pointer to the member itself.

        -

        If you want to remove some elements based on your own criteria you can use eina_inarray_foreach_remove(Eina_Inarray *array, Eina_Each_Cb match, const void *user_data) to do that. This function walks through the array and if the value matches in the 'callback' function, it removes the element.

        -
        static Eina_Bool
        +
      • To remove some elements based on your own criteria, use the eina_inarray_foreach_remove() function, which walks through the array and, if the value matches in the callback function, removes the element: +
        • The first parameter is a pointer to the array returned by eina_inarray_new() function.
        • +
        • The second parameter is the callback function to run on each element. +

          The callback function returns EINA_TRUE if the value matches, or EINA_FALSE if it does not match.

        • +
        • The last parameter is the data passed to the callback function.
        +

        The function returns the number of removed entries or -1 if something goes wrong.

        +
        +static Eina_Bool
         array_foreach(const void *array __UNUSED__, void *p, void *user_data __UNUSED__)
         {
            short *member = p;
        @@ -873,38 +814,41 @@ int inline_array_foreach_remove()
         }
         
        -

        The first parameter called 'array' is a pointer to the array returned by eina_inarray_new

        -

        The second parameter called 'match' is the function to run on each element.

        -

        The last parameter called 'user_data' is the data passed to the 'function' called on each element.

        -

        The function returns the number of removed entries or -1 if something goes wrong.

        -

        The match function have to return EINA_TRUE if it matches or EINA_FALSE if it doesn't.

        -

        Hash Tables

        -

        Eina_Hash has the same goal as every other hash table implementations. It provides a way to store values in association with a key.

        -

        For example, if you want to store some tuples into a table, you can do it using Eina_Hash.

        -

        The Eina_Hash is implemented using an array of N "buckets", where each bucket is a pointer to a structure that is the head of a red-black tree. This implementation makes it very robust against week key as at worst case you will still depend on an efficient binary tree implementation.

        - -

        First, like for the other data types of Eina, you have to create the "hash -table", you can do it using `eina_hash_new(Eina_Key_Length key_length_cb, Eina_Key_Cmp key_cmp_cb, Eina_Key_Hash key_hash_cb, Eina_Free_Cb data_free_cb, int buckets_power_size)`

        -

        To understand Eina_Hash, we are going to detail the parameters you must pass to this function.

        -
          -
        • key_length_cb is the function called when getting the size of the key.
        • -
        • key_cmp_cb is function called when comparing the keys.
        • -
        • key_hash_cb is the function called when getting the values.
        • -
        • data_free_cb is the function called on each value when the hash table is freed, or when an item is deleted from it. NULL can be passed as callback.
        • -
        • buckets_power_size is the size of the buckets.
        • + +
        +
      -

      So when you create an Eina_Hash, you will have to create 4 callback functions and this can be very long. That's why Eina_Hash offers you pre-defined functions to create a hash table like

      + +

      Hash Tables

      +

      The Eina_Hash provides a way to store values in association with a key. For example, if you want to store some tuples into a table, you can do it using the Eina_Hash.

      +

      The Eina_Hash is implemented using an array of "buckets" where each bucket is a pointer to a structure that is the head of a red-black tree. This implementation makes it very robust against week keys as in the worst case scenario, you can still depend on an efficient binary tree implementation.

      + +

      Creating a Hash Table

      + +

      To create the hash table, use the eina_hash_new() function:

        -
      • eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb) this function creates a new hash table using the djb2 algorithm for strings.
      • -
      • eina_hash_string_superfast_new (Eina_Free_Cb data_free_cb) creates a new hash table for use with strings (better with long strings).
      • -
      • eina_hash_string_small_new (Eina_Free_Cb data_free_cb) which creates a new hash table for use with strings with small bucket size.
      • -
      • eina_hash_int32_new(Eina_Free_Cb data_free_cb) for use with 32bit integers. and eina_hash_int64_new(Eina_Free_Cb data_free_cb) for 64bit integers.
      • +
      • The first parameter is the function called when getting the size of the key.
      • +
      • The second parameter is the function called when comparing the keys.
      • +
      • The third parameter is the function called when getting the values.
      • +
      • The fourth parameter is the function called on each value when the hash table is freed, or when an item is deleted from it. NULL can be passed as the callback.
      • +
      • The last parameter is the size of the buckets.
      -

      With this predefined functions, you only have to manage the function to free the data you store in you hash. Eina_Hash also have pre-defined functions to use white pointers and shared strings, eina_hash_pointer_new(Eina_Free_Cb data_free_cb) and eina_hash_stringshared_new(Eina_Free_Cb data_free_cb).

      -

      In the following example we manage a "small phone book" using eina_hash_string_superfast_new

      -

      First we create the structure of the "phone book" and some static data.

      -
      struct _Phone_Entry 
      +

      When you create an Eina_Hash instance, you have to create 4 potentially long callback functions. To make the functions shorter, Eina_Hash offers some predefined functions to create the following kinds of hash tables:

      +
        +
      • eina_hash_string_djb2_new() creates a new hash table using the djb2 algorithm for strings.
      • +
      • eina_hash_string_superfast_new() creates a new hash table for use with strings (better with long strings).
      • +
      • eina_hash_string_small_new() creates a new hash table for use with strings with a small bucket size.
      • +
      • eina_hash_int32_new() and eina_hash_int64_new() create a new hash table for use with 32-bit and 64-bit integers.
      • +
      • eina_hash_pointer_new() creates a new hash table for use with pointers.
      • +
      • eina_hash_stringshared_new() creates a new hash table for use with shared strings.
      • +
      +

      All these predefined functions require only one parameter, which is the function to free the data you store in the hash table.

      +

      The following example shows how to manage a small phone book using the eina_hash_string_superfast_new() function to create the hash table.

      +
        +
      1. Create the phone book structure and some static data:

        +
        +struct _Phone_Entry 
         {
            const char *name; // Full name
            const char *number; // Phone number
        @@ -921,69 +865,113 @@ static Phone_Entry _start_entries[] =
            { NULL, NULL }
         };
         
        +
      2. -

        Now we create the free callback:

        -
        static void
        +
      3. Create the callback to free the data:

        +
        +static void
         _phone_entry_free_cb(void *data)
         {
            free(data);
         }
         
        +

        The free callback can be changed later using the eina_hash_free_cb_set() function. You need to pass the hash and the new callback function.

        +
      4. -

        And finally we create the Hash and destroy the hash.

        -
        int free_data()
        +
      5. Create and destroy the hash table.

        +

        The eina_hash_free_buckets() function frees all hash table buckets. It empties the hash but does not destroy it, and you can still use it for another purpose. When eina_hash_free() is called, the space allocated for the hash is freed.

        +
        +int free_data()
         {
            Eina_Hash *phone_book = NULL;
            phone_book = eina_hash_string_superfast_new(_phone_entry_free_cb);
        -   // Empty the phone book, but do not destroy it
        +
        +   // Empty the phone book without destroying it
            eina_hash_free_buckets(phone_book);
            eina_hash_free(phone_book);
         }
         
        +
      6. +
      + + -

      eina_hash_free_bucket Free all 'buckets' of the hash table, that empties the hash but don't destroy it so you can still use it for another purpose. When eina_hash_free is called the space allocated for the hash is freed.

      -

      The free callback can be changed using eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb), you need to pass the hash and the new callback function.

      -

      Working with Eina_Hash

      -

      In the example we create a hash but we do nothing with it. We may want to add some data to this hash, to do that we can use the function eina_hash_add(Eina_Hash *hash, const void *key, const void *data). This function takes the hash as first parameter and the key to access to the data as second parameter and finally the data.

      -
      // Add initial entries to our hash
      +
      +

      Modifying Hash Table Content

      + +

      To modify hash table content:

      +
        +
      • +

        To add some data to a hash, use the eina_hash_add() function. This function takes the hash, the key to access the data, and the data as its parameters.

        +

        The following example shows how to add the initial data declared earlier to the hash:

        +
         for (i = 0; _start_entries[i].name != NULL; i++)
         {
            eina_hash_add(phone_book, _start_entries[i].name, strdup(_start_entries[i].number));
         }
         
        -

        Here we add the "initial" data we declared before to the hash.

        -

        Eina_Hash offers lots of methods to add elements to an hash like eina_hash_direct_add(Eina_Hash *hash, const void *key, const void *data) which adds the entry without duplicating the string key. We are storing the key in our struct so we can use this function with eina_stringshare to avoid key data duplication. We develop the usage of Eina_Stringshare in a following chapter. So we could initialize our hash like in this example:

        -
        // Add initial entries to our hash, using direct_add
        +
        +

        The Eina_Hash offers various ways to add elements to a hash, such as the eina_hash_direct_add() function, which adds the entry without duplicating the string key. The key is stored in the struct, so this function can be used with eina_stringshare to avoid key data duplication.

        +
         for (i = 0; _start_entries[i].name != NULL; i++)
         {
        -   // Allocating memory for the "phone entry"
        +   // Allocating memory for the phone entry
            Phone_Entry *e = malloc(sizeof(Phone_Entry));
         
        -   // Creating an eina_stringshare for the Name and the phone number
        +   // Creating an eina_stringshare for the name and the phone number
            e->name = eina_stringshare_add(_start_entries[i].name);
            e->number = eina_stringshare_add(_start_entries[i].number);
         
        -   // Adding entry to the hash 
        +   // Adding the entry to the hash 
            eina_hash_direct_add(phone_book, e->name, e);
         }
         
        - -

        To delete entries of a table we can use eina_hash_del(Eina_Hash *hash, const void *key, const void *data) this function removes the entry identified by a key or a data from the given hash table

        +
      • +
      • +

        To modify an entry, use eina_hash_modify() function passing the hash, the key of the data to change, and the new data. The function returns the old data on success.

        +

        The eina_hash_set() function does the same work as eina_hash_modify(), but if the entry does not exist, the function creates a new one.

        +
        +char *old_phone = NULL;
        +char *phone = NULL;
        +// Replace the phone number of Richard Strauss
        +old_phone = eina_hash_modify(phone_book, "Richard Georg Strauss", strdup("+23 45 111-11111"));
        +phone = eina_hash_set(phone_book, "Philippe de Magalhães", strdup("+33 6 111-11111"));
        +eina_hash_set(phone_book, "Richard Georg Strauss", strdup("+23 45 111-117711"));
        +
        +
      • +
      • +

        To change the key associated with the data without freeing and creating a new entry, use the eina_hash_move() function. You only have to pass the hash, the old key, and the new key. If the operation succeeds, the function returns EINA_TRUE, if not, it returns EINA_FALSE.

        +
        +Eina_Bool res;
        +res = eina_hash_move(phone_book, "Philippe de Magalhães", "Filipe de Magalhães");
        +
        +
      • +
      • +

        To delete entries from a hash table:

        +
        • Use the eina_hash_del() function to remove the entry identified by a key or data from the given hash table:
           Eina_Bool r;
           const char *entry_name = "Heitor Villa-Lobos";
           r = eina_hash_del(phone_book, entry_name, NULL);
          +
        • +
        • Use the eina_hash_del_by_key() function to remove an entry based on the key: +
          +r = eina_hash_del_by_key(phone_book, "Richard Georg Strauss");
           
          -

          You can also use eina_hash_del_by_key(Eina_Hash *hash, const void *key) to remove an entry by key.

          -
          r = eina_hash_del_by_key(phone_book, "Richard Georg Strauss");
          -
          -

          To remove en entry by data you can use eina_hash_del_by_data(Eina_Hash *hash, const void *data) by passing hash and the data of entry to be removed.

          -
          r = eina_hash_del_by_data(phone_book, "+12 34 567-89101");
          +
        • +
        • +

          Use the eina_hash_del_by_data() function to remove an entry based on the data:

          +
          +r = eina_hash_del_by_data(phone_book, "+12 34 567-89101");
           
          +
        • +
      -

      Finding, Modifying, Counting Eina Hash

      -

      The other interesting thing with Hash is the ability to find elements and get data by key name.

      -

      To retrieve an entry by its key you can use eina_hash_find(const Eina_Hash *hash, const void *key) by passing the hash and the key you are looking for.

      +

      Accessing Hash Table Data

      +

      To find hash table elements and get data based on the key name:

      +
        +
      • +

        To retrieve an entry based on its key, use the eina_hash_find() function by passing the hash and the key you are looking for:

         char *phone = NULL;
         const char *entry_name = "Heitor Villa-Lobos";
        @@ -991,35 +979,28 @@ const char *entry_name = "Heitor Villa-Lobos";
         // Look for a specific entry and get its phone number
         phone = eina_hash_find(phone_book, entry_name);
         
        - -

        You can also modify some entry using eina_hash_modify(Eina_Hash *hash, const void *key, const void *data) passing the hash, the key of data to change and the new data, the function will return the old data on success. eina_hash_set(Eina_Hash *hash, const void *key, const void *data) does the same work as eina_hash_modify but if the entry doesn't exist the function will create a new one.

        -
        -char *old_phone = NULL;
        -char *phone = NULL;
        -// Replacing the phone number of Richard Strauss
        -old_phone = eina_hash_modify(phone_book, "Richard Georg Strauss", strdup("+23 45 111-11111"));
        -phone = eina_hash_set(phone_book, "Philippe de Magalhães", strdup("+33 6 111-11111"));
        -eina_hash_set(phone_book, "Richard Georg Strauss", strdup("+23 45 111-117711"));
        -
        - -

        The function eina_hash_move(Eina_Hash *hash, const void *old_key, const void *new_key) changes the key associated with a data without freeing and creating a new entry. You just have to pass the hash, the old key and the new one. If the operation succeeds the function will return EINA_TRUE, if it's not it returns EINA_TRUE.

        -
        -Eina_Bool res;
        -res = eina_hash_move(phone_book, "Philippe de Magalhães", "Filipe de Magalhães");
        -
        - -

        If you need to know the number of entries in a hash you can use eina_hash_population(const Eina_Hash *hash) simply passing the Hash as only argument.

        +
      • +
      • +

        To get the number of entries in a hash, use the eina_hash_population() function. Pass the hash as the only argument.

         unsigned int nb_elm;
         nb_elm = eina_hash_population(phone_book);
         
        +
      • + +
      • To iterate through a hash table, you can use various methods: +
          + +
        • to iterate over the hash table, use the eina_hash_foreach() function: + +
          • The first parameter is the hash.
          • +
          • The second parameter is the callback function called on each iteration. +

            The callback function has to return an Eina_Bool, EINA_TRUE if the iteration has to continue and EINA_FALSE if the iteration has to stop.

          • +
          • The last parameter one is the data passed to the callback function.
          -

          Iterating over Eina Hash Tables

          -

          Like the other "container" data type of Eina library, Eina_Hash provides Iterators. These iterators can be used for calling functions like eina_hash_foreach(const Eina_Hash *hash, Eina_Hash_Foreach func, const void *fdata).

          -

          The first parameter is the hash, the second is the function called on each iteration and the last one is the data passed to the 'callback' function passed as second argument.

          -

          The callback function has to return an Eina_Bool, EINA_TRUE if the iteration has to continue and EINA_FALSE if the iteration has to stop.

          -
          // This callback function prints the key and the data of an hash entry 
          -// here the name and the phone number
          +

          The following example prints the key and the data of the hash entry (the name and the phone number):

          + +
           static Eina_Bool
           pb_foreach_cb(const Eina_Hash *phone_book, const void *key, void *data, void *fdata)
           {
          @@ -1037,12 +1018,13 @@ printf("List of phones:\n");
           eina_hash_foreach(phone_book, pb_foreach_cb, NULL);
           printf("\n");
           
          - -

          You can also use eina_hash_iterator_key_new(const Eina_Hash *hash) just to iterate over the keys. To iterate over the hash data, we can use eina_hash_iterator_data_new (const Eina_Hash *hash) the same way as eina_hash_iterator_key_new.

          -
          // Declaration of the Eina_Iterator
          +
        • +
        • To iterate over the keys, use the eina_hash_iterator_key_new() function: +
          +// Declaration of the Eina_Iterator
           Eina_Iterator *it;
           
          -// Variable to handle current iteration "data"
          +// Variable to handle the current iteration "data"
           void *data;
           
           // Iterate over the keys (names)
          @@ -1050,17 +1032,27 @@ printf("List of names in the phone book:\n");
           
           it = eina_hash_iterator_key_new(phone_book);
           
          -// Using the generic eina_iterator_next()
          +// Use the generic eina_iterator_next()
           while (eina_iterator_next(it, &data))
           {
              const char *name = data;
              printf("%s\n", name);
           }
           
          -// You need to free the iterator
          +// Free the iterator
           eina_iterator_free(it);
          +
          +
        • + +
        • To iterate over the hash data, use the eina_hash_iterator_data_new() function the same way as eina_hash_iterator_key_new(): +
          +// Declaration of the Eina_Iterator
          +Eina_Iterator *it;
           
          -// Iterating over hash data 
          +// Variable to handle the current iteration "data"
          +void *data;
          +
          +// Iterate over hash data 
           printf("List of numbers in the phone book:\n");
           
           it = eina_hash_iterator_data_new(phone_book);
          @@ -1070,14 +1062,16 @@ while (eina_iterator_next(it, &data))
              printf("%s\n", number);
           }
           
          -// You need to free the iterator
          +// Free the iterator
           eina_iterator_free(it);
           
          -

          Using this method you can also iterate over a tuple composed of keys and data like eina_hash_foreach using eina_hash_iterator_tuple_new(const Eina_Hash *hash)

          -
          // Declaration of the Eina_Iterator
          +
        • +
        • To iterate over a tuple composed of keys and data, use the eina_hash_iterator_tuple_new() function: +
          +// Declaration of the Eina_Iterator
           Eina_Iterator *tit;
           
          -// Variable to handle current iteration "data"
          +// Variable to handle the current iteration "data"
           void *tuple;
           
           printf("List of phones:\n");
          @@ -1090,23 +1084,38 @@ while (eina_iterator_next(tit, &tuple))
              printf("%s: %s\n", name, number);
           }
           
          -eina_iterator_free(tit); // Always free the iterator after its use
          +// Always free the iterator after its use
          +eina_iterator_free(tit); 
           
          +
        • +
        +
      • +
      + + +

      Lists

      + +

      The Eina_List is a double-linked list that can store data of any type as void pointers. It provides a set of functions to create and manipulate the list to avoid the access to the struct's fields, similar to a self-made double-link list.

      +

      In addition to the previous and next node and its data, the Eina_List nodes keep a reference to an accounting structure. The accounting structure is used to improve the performance of some functions. The structure is private and must not be modified.

      -

      Lists

      +

      In an Eina_List, everything is a "list": the list itself is a list where each node is a list as well.

      -

      The Eina list (Eina_List) is a double linked list. It can store data of any type as void pointers.

      -

      It provides a set of functions to create and manipulate a list to avoid the access to the struct's fields like in self made double link list.

      -

      In addition of keeping references to the references to the previous and the next node and it's data, the Eina_List nodes keeps a reference to an accounting structure.

      -

      This accounting structure is used to improve the performance of some functions. This structure is private and should not be modified.

      -

      In Eina_List everything is a "list", the list itself is a list where each "node" is a list as well.

      -

      Creating and Destroying an Eina_List

      -

      To use an Eina_List you just have to declare it with NULL as default value and * call eina_list_append(Eina_List * list, const void * data). Pass the list and the data you want to append. This list must be a pointer to the first element of the list (or NULL). It returns a pointer to the list.

      -
      int list()
      +

      Eina provides 2 list types: the classic list (Eina_List) and an inline list (Eina_Inlist).

      + +

      Creating and Destroying a List

      +

      To use an Eina_List:

      + +
      1. Declare the list with NULL as the default value: +
        +int list()
         {
        -   // Declaration of the Eina_List with NULL as default value
        +   // Declaration of the Eina_List with NULL as default value;
            Eina_List *list = NULL;
        +
      2. +
      3. Call the eina_list_append() function with the list and the data you want to append as parameters. +

        The list must be a pointer to the first element of the list (or NULL). The function returns a pointer to the list.

        +
            // Creating the first element of the list 
            list = eina_list_append(list, "watch");
         
        @@ -1114,33 +1123,68 @@ eina_iterator_free(tit); // Always free the iterator after its use
            list = eina_list_append(list, "phone");
            list = eina_list_append(list, "ivi");
            list = eina_list_append(list, "notebook");
        +
      4. +
      5. When you no longer need the list, free it: +
            // Free the Eina_List
            eina_list_free(list);
         
            return 0;
         }
        +
      6. +
      + + +

      Modifying List Content

      + +

      To modify list content:

      +
        +
      • +

        To add data to a list:

        + +
          +
        • To add data at the end of the list, use the eina_list_append() function. To add data at the top of the list, use eina_list_prepend(). The functions work in the same way, only adding the data to different places. +
          +list = eina_list_prepend(list, "set-top box");
          +
          +
        • + +
        • To insert data into the list after a specified data, use the eina_list_append_relative() function. As the last parameter, define the element after which the data is added. +

          For example to append data after the "phone" element:

          +
          +list = eina_list_append_relative(list, "single-board computer", "phone");
           
          +
        • -

          Adding Elements to a List

          -

          eina_list_append as the name says, appends data to the list. You may want to put some data at the top of the list. To do this, you can use eina_list_prepend(Eina_List *list, const void *data) it works in the same way as eina_list_append but puts the new element on top of the list

          -
          list = eina_list_prepend(list, "set-top box");
          +
        • To add a new entry before a specified data, use the eina_list_prepend_relative() function. It is similar to the eina_list_append_relative() function. +
          +list = eina_list_prepend_relative(list, "ultrabook", "ivi");
          +
          +
        • -

          eina_list_append_relative(Eina_List *list, const void *data, const void *relative) inserts the given data into the given linked list after the specified data. In order to append data after the "phone" element of the example, we pass this data as the last parameter of eina_list_append_relative like this:

          -
          list = eina_list_append_relative(list, "single-board computer", "phone");
          +
        • To append a list node to a linked list after a specified member, use the eina_list_append_relative_list() function. To prepend a list node to a linked list before a specified member, use the Eina_List * eina_list_prepend_relative_list() function. +
        • +
        +
      • -

        In order to put a new entry after the "ivi" entry, use eina_list_prepend_relative(Eina_List *list, const void *data, const void *relative) like you used eina_list_append_relative

        -
        list = eina_list_append_relative(list, "ultrabook", "ivi");
        +
      • To set data in a list member, use the eina_list_data_set() function. Pass the "list" (node) as the first argument and the data to set as the second. -

        Eina_List * eina_list_append_relative_list (Eina_List *list, const void *data, Eina_List *relative) Appends a list node to a linked list after the specified member. More...

        -

        Eina_List * eina_list_prepend_relative_list (Eina_List *list, const void *data, Eina_List *relative) Prepends a list node to a linked list before the specified member. More...

        +

        The following example also shows the usage of the eina_list_last() function, which returns the last element of an Eina_List.

        -

        Removing Elements from a List

        -

        To remove a node of the list you can use eina_list_remove(Eina_List *list, const void *data), this function removes the first instance of the specified data from the given list.

        -
        list = eina_list_remove(list, "ultrabook");
        +
        +// Setting new data for the last element
        +eina_list_data_set(eina_list_last(list), eina_stringshare_add("Boris"));
        +
        +
      • -

        You can also remove a "list" (understand a node) from a list using eina_list_remove_list (Eina_List *list, Eina_List *remove_list). Pass the list you want to delete an element from and a 'list' (understand a node) you want to delete.

        -
        Eina_List *app_list = NULL;
        +
      • To remove a node from the list, use the eina_list_remove() function. This function removes the first instance of the specified data from the given list. +
        +list = eina_list_remove(list, "ultrabook");
        +
        +

        You can also remove a "list" (node) from a list using the eina_list_remove_list() function. Pass the list you want to delete an element from and a 'list' (node) you want to delete.

        +
        +Eina_List *app_list = NULL;
         Eina_List *to_remove = NULL;
         
         // Adding some elements to the list (using stringshares)
        @@ -1153,21 +1197,112 @@ app_list = eina_list_append(app_list, eina_stringshare_add("enlightenment&q
         app_list = eina_list_append(app_list, eina_stringshare_add("eyelight"));
         app_list = eina_list_append(app_list, eina_stringshare_add("ephoto"));
         
        -// Finding the "list" we want to remove 
        +// Finding the "list" to remove 
         to_remove = eina_list_data_find_list(list, eina_string_share_add("enlightenment"));
         
         list = eina_list_remove_list(list, to_remove);
         
        +
      • + +
      • To move elements in a list, you can use various function, such as eina_list_promote_list() that promotes an element to the top of the list or eina_list_demote_list() that puts the specified element at the end of the list. Remember that everything is a list so the second parameter represents the "list" (node) you want to move. Use the functions just like the eina_list_remove_list() function. +
        +list = eina_list_promote_list(list, eina_list_data_find_list(list, "ivi"));
        +
        +
      • +
      • To reverse all the elements of a list, use the eina_list_reverse() function. To obtain a reversed copy of the list while keeping the initial list unchanged, use the eina_list_reverse_clone() function. +
        +Eina_List *rev_copy;
        +
        +app_list = eina_list_reverse(app_list);
        +rev_copy = eina_list_reverse_clone(app_list);
        +
        +
      • +
      • To sort a list, use the eina_list_sort() function. This function takes a list which needs to be sorted, the maximum number of elements to be sorted, and a callback function that compares data. To sort all list elements, set the maximum number of elements to 0. +
        +int sort_cb(const void *d1, const void *d2)
        +{
        +   const char *txt = d1;
        +   const char *txt2 = d2;
        +   if(!txt) return(1);
        +   if(!txt2) return(-1);
        +
        +   return(strcmp(txt, txt2));
        +}
        +
        +extern Eina_List *list;
        +list = eina_list_sort(list, 0, sort_cb);
        +
        +
      • +
      • To merge 2 list into 1, use the eina_list_merge() function. The eina_list_sorted_merge() function merges 2 sorted lists according to the ordering function that you pass as the last argument. +
        +int sort_cb(void *d1, void *d2)
        +{
        +   const char *txt = NULL;
        +   const char *txt2 = NULL;
        +   if(!d1) return(1);
        +   if(!d2) return(-1);
        +
        +   return(strcmp((const char*)d1, (const char*)d2));
        +}
        +
        +Eina_List *sorted1;
        +Eina_List *sorted2;
        +Eina_List *newlist;
        +
        +// Insert some values and sort your lists
        +
        +// Simply merge 2 lists without any process
        +newlist = eina_list_merge(sorted1, sorted2);
        +
        +newlist = eina_list_sorted_merge(sorted1, sorted2, sort_cb);
        +
        +
      • +
      • To split a list, use the eina_list_split_list() function: +
        • The first parameter is the list to split.
        • +
        • The second parameter is the "list" (element) after which the list is split.
        • +
        • The last parameter is the head of the second list.
        +
        +// Original list (left list)
        +Eina_List *list = NULL;
        +
        +// New list (right list)
        +Eina_List *other_list = NULL;
        +
        +// Eina_List (element)
        +Eina_List *l;
        +
        +list = eina_list_append(list, "super tux");
        +list = eina_list_append(list, "frozen bubble");
        +list = eina_list_append(list, "lincity-ng");
        +
        +// Sorting the list (just for fun)
        +list = eina_list_sort(list, 0, cmp_func);
        +
        +// Looking for the 'split' element
        +l = eina_list_search_sorted_list(list, cmp_func, "frozen bubble");
        +
        +// Splitting the list
        +list = eina_list_split_list(list, l, &other_list);
        +
        +
      • +
      • To copy a list, use the eina_list_clone() function. The function copies all the elements in the list in the exact same order. +
        +Eina_List *app_list_copy;
        +
        +app_list_copy = eina_list_clone(app_list);
        +
        +
      • + +
      -

      Moving Elements in a List

      -

      Eina_List implements some functions to move elements in a list. For example you can promote an element to the top of the list with eina_list_promote_list (Eina_List *list, Eina_List *move_list). Remember that everything is a list so the 'move_list' parameter represents the "list" (understand node) you want to move, use it just like eina_list_remove_list.

      -
      list = eina_list_promote_list(list, eina_list_data_find_list(list, "ivi"));
      -

      eina_list_demote_list(Eina_List *list, Eina_List *move_list) puts the "element" at the end of the list, use it like eina_list_promote_list.

      -

      Finding Elements in a List

      -

      You will probably need to find some data on your list, eina_list_data_find(const Eina_List *list, const void *data) can help you. Pass the list containing your data as first argument and the data you are looking for as last one. It returns the found member data pointer if found, NULL otherwise.

      -

      eina_list_data_find searches in list from beginning to end for the first member for which data pointer is data. If it is found, data will be returned, otherwise NULL will be returned. The function just compares pointers, that's why using Eina_Stringshare is very useful with lists, because it always returns the same pointer for the same string.

      -
      Eina_List *app_list = NULL;
      +

      Accessing List Data

      +

      To access list data:

      +
        +
      • To find some data on your list, use the eina_list_data_find() function. Pass the list containing your data as the first parameter and the data you are looking for as the last one. The function returns the found member data pointer if found, NULL otherwise. +

        The eina_list_data_find() function searches the list from the beginning to the end for the first member for which the data pointer is data. If it is found, the data is returned, otherwise NULL is returned. The function only compares pointers, which is why using Eina_Stringshare is very useful with lists, because it always returns the same pointer for the same string.

        +
        +Eina_List *app_list = NULL;
         const char *res_str;
         
         // Adding some elements to the list (using stringshares)
        @@ -1180,44 +1315,41 @@ app_list = eina_list_append(app_list, eina_stringshare_add("enlightenment&q
         app_list = eina_list_append(app_list, eina_stringshare_add("eyelight"));
         app_list = eina_list_append(app_list, eina_stringshare_add("ephoto"));
         
        -// Finding the data we need
        +// Finding the data
         res_str = eina_list_data_find(list, eina_string_share_add("enlightenment"));
         if (res_str == eina_stringshare_add("enlightenment"))
            printf("Data is present");
         else
        -  printf("Data not present");
        +   printf("Data not present");
         
        -

        This example will return "Data is present".

        -

        eina_list_data_find_list(const Eina_List *list, const void *data) does the same thing as eina_list_data_find but returns a "Eina_List". You can see an example of this in the eina_list_remove_list paragraph.

        -

        You can access the data or a "list" (understand a node) of a Eina_List, using the eina_list_nth(const Eina_List *list, unsigned int n) and eina_list_nth_list (const Eina_List *list, unsigned int n). The first one will return a pointer to the data of the "n" element and the second a pointer to the "list". So if you want to access to the data of the 3rd element of a Eina_List proceed like this:

        -
        const char *res;
        +

        The above example returns "Data is present".

        +

        The eina_list_data_find_list() function does the same thing as eina_list_data_find(), but returns an Eina_List. For an example, see the eina_list_remove_list() function.

        +

        You can access the data or a "list" (node) of an Eina_List using the eina_list_nth() and eina_list_nth_list() functions. The first one returns a pointer to the data of the "n" element and the second a pointer to the "list". To access the data of the 3rd element of an Eina_List:

        +
        +const char *res;
         Eina_List *res_lst;
         
         res = eina_list_nth(app_list, 2);
         res_lst = eina_list_nth_list(app_list, 2);
         
        -

        The variable res will contain the pointer to the string "calaos". res_lst the list containing "calaos"

        -

        Copying a List

        -

        You can clone a list with eina_list_clone (const Eina_List *list), this function copies all the elements in the list in the exact same order.

        -
        Eina_List *app_list_copy;
        +

        The res variable contains the pointer to the string "calaos". The res_lst variable is the list containing "calaos".

        +
      • -app_list_copy = eina_list_clone(app_list); -
      +
    • To search for data in a list, select your function based on whether the list is sorted or unsorted. +
        +
      • To search in an unsorted list, use the eina_list_search_unsorted() function: +
        • The first parameter is the list.
        • +
        • The second parameter is a callback function for comparison.
        • +
        • The last parameter is the data you are looking for.
        -

        Reversing a List

        -

        To reverse all the elements of a Eina_List, use eina_list_reverse(Eina_List *list). To obtain a reversed copy of the list keeping the initial list unchanged use eina_list_reverse_clone(const Eina_List *list)

        -
        Eina_List *rev_copy;
        +

        The eina_list_search_unsorted_list() function does the same but returns an "Eina_List".

        -app_list = eina_list_reverse(app_list); -rev_copy = eina_list_reverse_clone(app_list); -
        -

        Searching and Sorting Lists

        -

        You will probably need to search for data in a list, especially in large lists. The Eina List API (in mobile and wearable applications) provides functions to run powerful searches.

        -

        If your list is unsorted and you need to get the data you can use eina_list_search_unsorted(const Eina_List *list, Eina_Compare_Cb func, const void *data). This function performs a lookup in unsorted lists, it takes the list as first parameter, a callback function for comparison as second parameter and the data you are looking for. eina_list_search_unsorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data) does the same but returns a "Eina_List".

        -
        int search_list()
        +

        The following example shows 2 searches using both the eina_list_search_unsorted() and eina_list_search_unsorted_list() functions:

        +
        +int search_list()
         {
            // Declaring the list
            Eina_List *list = NULL; 
        @@ -1247,79 +1379,22 @@ rev_copy = eina_list_reverse_clone(app_list);
         }
         
        -

        Here we perform two searches: one with eina_list_search_unsorted and another with eina_list_search_unsorted_list and we compare the result of the two searches.

        -

        You can search in sorted lists with eina_list_search_sorted_list (const Eina_List *list, Eina_Compare_Cb func, const void *data) and eina_list_search_sorted (const Eina_List *list, Eina_Compare_Cb func, const void *data), these functions work just like eina_list_search_unsorted but sorted list.

        -

        You can sort a list using eina_list_sort(Eina_List * list, unsigned int limit, Eina_Compare_Cb func). This function takes a list which needs to be sorted, "limit" is the maximum number of elements to be sorted, you can set this limit to 0 to sort all the list elements. The last parameter is the callback function that compares data.

        -
        int sort_cb(const void *d1, const void *d2)
        -{
        -   const char *txt = d1;
        -   const char *txt2 = d2;
        -   if (!txt) return(1);
        -   if (!txt2) return(-1);
        -
        -   return(strcmp(txt, txt2));
        -}
        -
        -extern Eina_List *list;
        -list = eina_list_sort(list, 0, sort_cb);
        -
        - -

        Merging and Splitting Lists

        -

        Another interesting thing to do with lists is merging, eina_list_merge(Eina_List *left, Eina_List *right) simply merges two lists into a new one. eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func) merges two sorted lists according to the ordering func that you pass as last argument, will return.

        -
        int sort_cb(void *d1, void *d2)
        -{
        -   const char *txt = NULL;
        -   const char *txt2 = NULL;
        -   if (!d1) return(1);
        -   if (!d2) return(-1);
        -
        -   return(strcmp((const char*)d1, (const char*)d2));
        -}
        -
        -Eina_List *sorted1;
        -Eina_List *sorted2;
        -Eina_List *newlist;
        -
        -// Put some values and sort your lists
        -
        -// Simply merge two lists without any process
        -newlist = eina_list_merge(sorted1, sorted2);
        -
        -newlist = eina_list_sorted_merge(sorted1, sorted2, sort_cb);
        -
        - -

        As you can merge, you can also split lists. eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right) will split a list into two lists.

        -

        The first argument is the list to split, the second is the "list" (element) that will be split after and the last is the head of the second list.

        -
        // The origin list (left list)
        -Eina_List *list = NULL;
        -
        -// The new list (right list)
        -Eina_List *other_list = NULL;
        -
        -// An Eina_List (element)
        -Eina_List *l;
        -
        -list = eina_list_append(list, "super tux");
        -list = eina_list_append(list, "frozen bubble");
        -list = eina_list_append(list, "lincity-ng");
        -
        -// Sorting the list (just for fun)
        -list = eina_list_sort(list, 0, cmp_func);
        +
      • +
      • To search in sorted lists, use the eina_list_search_sorted_list() and eina_list_search_sorted() functions. They work similarly as the eina_list_search_unsorted() function. +
      • +
      +
    • -// Looking for the 'split' element -l = eina_list_search_sorted_list(list, cmp_func, "frozen bubble"); -// Splitting the list -list = eina_list_split_list(list, l, &other_list); -
      +
    • To get data from a list element, use the eina_list_data_get() function. The function returns the data contained in the given list. -

      Getting and Setting Data from a List Element

      -

      eina_list_data_get(const Eina_List *list) will return the data contained in the given list.

      -
      int list_data_set()
      +

      The following example uses the eina_list_next() function to move through the list in a statement.

      +
      +int list_data_set()
       {
          // Declaring the list
          Eina_List *list = NULL;
      -   // An Eina_List to place the Elements or lists
      +   // Eina_List in which to place the elements or lists
          Eina_List *l;
       
          void *list_data;
      @@ -1333,7 +1408,7 @@ list = eina_list_split_list(list, l, &other_list);
          list = eina_list_append(list, eina_stringshare_add("Philippe"));
          list = eina_list_append(list, eina_stringshare_add("billiob"));
       
      -   for (l = list; l; l = eina_list_next(l))
      +   for(l = list; l; l = eina_list_next(l))
             // Printing the data returned by eina_list_data_get
             printf("%s\n", (char*)eina_list_data_get(l));
       
      @@ -1343,36 +1418,32 @@ list = eina_list_split_list(list, l, &other_list);
          return 0;
       }
       
      +
    • -

      In this example we also use eina_list_next (const Eina_List *list) to move through the list in a for statement. This function moves to the next element of the linked list.

      -

      To set data in a list member you can use eina_list_data_set(Eina_List *list, const void *data) Pass the "list" (understand node) as first argument and the data to set as second.

      -
      // Setting a new data for the last element
      -eina_list_data_set(eina_list_last(list), eina_stringshare_add("Boris"));
      -

      In this example you can also see the usage of eina_list_last(const Eina_List *list) which returns the last element of a Eina_List.

      - -

      Moving in a List

      -

      The usage of eina_list_last (const Eina_List *list) and eina_list_next (const Eina_List *list) are explained before. The other interesting function that allows movement in the list is eina_list_prev(const Eina_List *list): it gets the previous list node before the specified list node.

      -
      for (l = eina_list_last(list); l; l = eina_list_prev(l))
      -   printf("%s\n", (char*)eina_list_data_get(l));
      +
    • To move in a list, use the eina_list_last(), eina_list_next(), or eina_list_prev() functions to move to the last, next, or previous element in the list. +

      The following example scrolls backwards starting from the end of the list:

      +
      +for(l = eina_list_last(list); l; l = eina_list_prev(l))
      +   printf("%s\n", (char*)eina_list_data_get(l));
       
      -

      In this example, we scroll backwards starting from the end of the list.

      -

      Counting List Elements

      -

      eina_list_count(const Eina_List *list) returns the number of items in a list.

      -
      printf("List size: %d\n", eina_list_count(list));
      -
      +
    • -

      Iterators

      -

      Like the others Eina data types, Eina_List has iterators:

      +
    • To count the list elements, use the eina_list_count() function. The function returns the number of items in a list. +
      +printf("List size: %d\n", eina_list_count(list));
      +
      +
    • +
    • To iterate through an array, you can use various iterators:
        -
      • EINA_LIST_FOREACH(list, l, data)
      • -
      • EINA_LIST_REVERSE_FOREACH(list, l, data)
      • -
      • EINA_LIST_FOREACH_SAFE(list, l, l_next, data)
      • -
      • EINA_LIST_FREEE(list, data)
      • -
      -

      This iterators gives you the possibility of walking through the list from the begin or from the end.

      -

      For example, in order to print the data of each "List" (understand node) of the list you can use EINA_LIST_FOREACH. It takes the list to iterate, a Eina_List * to hold the current "List" (understand node) and a data parameter to receive the current data during the run.

      -
      Eina_List *list = NULL;
      +
    • To iterate over a list from the beginning to the end, use the EINA_LIST_FOREACH macro: +
      • The first parameter is the list to iterate.
      • +
      • The second parameter is an Eina_List * to hold the current "List" (node).
      • +
      • The last parameter receives the current data during the run.
      + +

      The following example prints the data of each "List" (node) of the list:

      +
      +Eina_List *list = NULL;
       Eina_List *l;
       void *list_data;
       
      @@ -1386,10 +1457,12 @@ EINA_LIST_FOREACH(list, l, list_data)
       
       eina_list_free(list);
       
      - -

      EINA_LIST_REVERSE_FOREACH macro works like EINA_LIST_FOREACH, but iterates from the last element of a list to the first. The parameters are also the same.

      -

      EINA_LIST_FOREACH_SAFE macro iterates over list from the first element to the last. It is called safe because it stores the next "List" (understand node) so you can safely remove the current "List" (node) and continue the iteration.

      -
      Eina_List *list;
      +
    • +
    • To iterate from the last element to the first, use the EINA_LIST_REVERSE_FOREACH macro. It works similarly as EINA_LIST_FOREACH(). +
    • +
    • To iterate over a list from the beginning to the end, you can also use the EINA_LIST_FOREACH_SAFE macro. It is called safe, because it stores the next "List" (node), so you can safely remove the current "List" (node) and continue the iteration. +
      +Eina_List *list;
       Eina_List *l;
       Eina_List *l_next;
       char *data;
      @@ -1399,7 +1472,7 @@ list = eina_list_append(list, "tizen");
       list = eina_list_append(list, "tizen");
       list = eina_list_append(list, "tizen");
       
      -// Using EINA_LIST_FOREACH_SAFE to free elements that match "tizen"
      +// Using EINA_LIST_FOREACH_SAFE to free the elements that match "tizen"
       
       EINA_LIST_FOREACH_SAFE(list, l, l_next, data)
          if (strcmp(data, "tizen") == 0) 
      @@ -1408,40 +1481,56 @@ EINA_LIST_FOREACH_SAFE(list, l, l_next, data)
             list = eina_list_remove_list(list, l);
          }
       
      +
    • -

      EINA_LIST_FREE macro removes each list element while having access to node's data. Just pass the list and a pointer to hold the current data.

      -
      Eina_List *list;
      +
      +
    • To remove each list element while having access to the node's data, use the EINA_LIST_FREE macro. Pass the list and a pointer to hold the current data. +
      +Eina_List *list;
       char *data;
       
      -// The list is filled
      +// List is filled
       
      -EINA_LIST_FOREE(list, data)
      +EINA_LIST_FREE(list, data)
          free(data);
       
      +
    • +
    + + + +

    Using an Inline List

    +

    The Eina_Inlist is a special data type drawn to store nodes pointers in the same memory as data. This way the memory is less fragmented, but operations, such as sort and count, are slower. The Eina_Inlist has its own purpose, but if you do not understand what the purpose is, use the regular Eina_List instead.

    + +

    The Eina_Inlist nodes can be part of a regular Eina_List, simply added with the eina_list_append() or eina_list_prepend() functions.

    -

    Inline Lists

    -

    Eina_Inlist are a special datatype drawn to store nodes pointers in the same memory as data.

    -

    This way the memory is less fragmented but operations like 'sort' or 'count' are slower.

    -

    Eina_Inlist nodes can be part of a regular Eina_List, simply added with eina_list_append or eina_list_prepend.

    -

    Eina_Inlist have their own purposes, but if you don't understand what those purposes are, just use the regular Eina_List instead.

    -

    Creating and Adding Items to an Inline List

    -

    Like we said before Eina_Inlist nodes pointers are part of the node's "data". So before creating a list, we need to define the structure of our data.

    -
    struct my_struct 
    +

    To use the inline list:

    +
      +
    1. Define the structure of the data before creating the inline list: +
      +struct my_struct 
       {
          EINA_INLIST;
          int a, b;
       };
       
      -

      Our structure is composed by the EINA_INLIST "type" which is composed by 3 pointers defining the Inline list structure:

      +

      The structure is composed of 2 integers, the real data, and the EINA_INLIST type which is composed of 3 pointers defining the inline list structure:

      +
        -
      • Eina_Inlist * next // The next node
      • -
      • Eina_Inlist * prev // The previous node
      • -
      • Eina_Inlist * last // The last node
      • -
      -

      and two integers, the real "data".

      -

      To create the Inlist nodes, you need to allocate the memory and use eina_inlist_append.

      -
      struct my_struct *d, *cur;
      +
    2. Eina_Inlist * next: next node
    3. +
    4. Eina_Inlist * prev: previous node
    5. +
    6. Eina_Inlist * last: last node
    7. +
    8. + +
    9. +

      To create the inlist nodes, allocate the memory and use the eina_inlist_append() function:

      +
      • The first parameter is the existing list head or NULL to create a new list. +

        The following example passes NULL to create a new list.

      • +
      • The second parameter is the new list node, and it must not be NULL. +

        You must use the EINA_INLIST_GET() macro to get the inlist object of the datastruct.

      +
      +struct my_struct *d, *cur;
       Eina_Inlist *list, *itr, *tmp;
       
       d = malloc(sizeof(*d));
      @@ -1451,32 +1540,40 @@ d->b = 10;
       list = eina_inlist_append(NULL, EINA_INLIST_GET(d));
       
      -

      The first parameter is the existing list head or NULL to create a new list. in the example we pass NULL to create a new list. The second parameter is the new list node, must not be NULL. You have to use EINA_INLIST_GET macro to get the inlist object of the "data" struct.

      -

      You have to repeat this operation for every single new node.

      -
      d = malloc(sizeof(*d));
      +

      Repeat this operation for every new node:

      +
      +d = malloc(sizeof(*d));
       d->a = 2;
       d->b = 20;
       list = eina_inlist_append(list, EINA_INLIST_GET(d));
       
      +
    10. -

      You also can put data at the end of the inline list using eina_inlist_prepend.

      -
      d = malloc(sizeof(*d));
      +
    11. To add data to the inline list: +
      • Put data at the end of the inline list with the eina_inlist_prepend() function: +
        +d = malloc(sizeof(*d));
         d->a = 3;
         d->b = 30;
         list = eina_inlist_prepend(list, EINA_INLIST_GET(d));
         
        +
      • -

        You also can add a node before or after a given node using eina_inlist_prepend_relative and eina_inlist_append_relative.

        +
      • Add a node before or after a given node with the eina_inlist_prepend_relative() and eina_inlist_append_relative() functions. +

        In both functions, the first parameter is the target list, the second is the element you want to add, and the last is the reference element to place data after (in this case). Similarly as in a regular Eina_List, everything is a list, so the last parameter is an Eina_Inlist typed variable.

        d = malloc(sizeof(*d));
         d->a = 4;
         d->b = 40;
         list = eina_inlist_append_relative(list, EINA_INLIST_GET(d), list);
         
        +
    12. + +
    13. To sort and iterate an inline list, to find and move list elements, and to perform other inline list operations, see the Inline List API.
    14. + +
    15. When the inline list is no longer needed, destroy it by looping over the list to free each EINA_INLIST structure and the data using allocated memory. Use the eina_inlist_remove() function on each node. -

      The first parameter is the target list, the second is the element you want to add, and the last is the "reference" element to place data after (in this case). Such as in regular Eina_List, everything is a List, so this last parameter is a Eina_Inlist typed variable.

      +

      In the following example, the EINA_INLIST_CONTAINER_GET() macro returns the container object of an inlist (the EINA_INLIST of my_struc), and the list element is removed and the allocated memory of the container "object" is freed.

      -

      Destroying an Inline List

      -

      To destroy a list you need to loop over the list, to free each EINA_INLIST structure and the data if your data use allocated memory and use eina_inlist_remove on each node.

      while (list)
       {
          struct my_struct *aux = EINA_INLIST_CONTAINER_GET(list, struct my_struct);
      @@ -1486,77 +1583,94 @@ list = eina_inlist_append_relative(list, EINA_INLIST_GET(d), list);
          free(aux);
       }
       
      -

      The EINA_INLIST_CONTAINER_GET macro returns the container object of an inlist. In our case it returns the EINA_INLIST of my_struc. Then we will remove the list element and free the allocated memory of our container "object".

      -

      You've probably realized that this is not really easy to use so if you don't really need this, just use regular Eina_List.

      -

      For sorting, iterating, finding, moving and other operations you can refer to the EFL technical documentation.

      +
    16. -

      Generic Value

      -

      Eina_Value provides is a generic data storage and access. It comes with pre-defined types for numbers, array, list, hash, blob and structs.

      -

      Eina_Value is able to convert between data types, including string. It is meant for simple data types, providing uniform access and release functions, useful to exchange data preserving their types.

      -

      In brief you can store what you want in one single type Eina_Value.

      -

      Eina_Value can handle the following types:

      + +
    + +

    Generic Value

    + +

    The Eina_Value object provides generic data storage and access, allowing you to store what you want in one single type of Eina_Value. It is meant for simple data types, providing uniform access and release functions, useful to exchange data preserving their types. The Eina_Value comes with predefined types for numbers, array, list, hash, blob, and structs, and it can convert between data types, including string.

    + +

    The Eina_Value can handle the following types:

      -
    • EINA_VALUE_TYPE_UCHAR manages unsigned char type,
    • -
    • EINA_VALUE_TYPE_USHORT manages unsigned short type,
    • -
    • EINA_VALUE_TYPE_UINT manages unsigned int type,
    • -
    • EINA_VALUE_TYPE_ULONG manages unsigned long type,
    • -
    • EINA_VALUE_TYPE_TIMESTAMP manages unsigned long type used for timestamps,
    • -
    • EINA_VALUE_TYPE_UINT64 manages unsigned integer of 64 bits type,
    • -
    • EINA_VALUE_TYPE_CHAR manages char type,
    • -
    • EINA_VALUE_TYPE_SHORT manages short type,
    • -
    • EINA_VALUE_TYPE_INT manages int type,
    • -
    • EINA_VALUE_TYPE_LONG manages long type,
    • -
    • EINA_VALUE_TYPE_INT64 manages integer of 64 bits type,
    • -
    • EINA_VALUE_TYPE_FLOAT manages float type,
    • -
    • EINA_VALUE_TYPE_DOUBLE manages double type,
    • -
    • EINA_VALUE_TYPE_STRINGSHARE manages stringshared string type,
    • -
    • EINA_VALUE_TYPE_STRING manages string type,
    • -
    • EINA_VALUE_TYPE_ARRAY manages array type,
    • -
    • EINA_VALUE_TYPE_LIST manages list type,
    • -
    • EINA_VALUE_TYPE_HASH manages hash type,
    • -
    • EINA_VALUE_TYPE_TIMEVAL manages 'struct timeval' type,
    • -
    • EINA_VALUE_TYPE_BLOB manages blob of bytes type,
    • -
    • EINA_VALUE_TYPE_STRUCT manages struct type.
    • +
    • EINA_VALUE_TYPE_UCHAR: unsigned char
    • +
    • EINA_VALUE_TYPE_USHORT: unsigned short
    • +
    • EINA_VALUE_TYPE_UINT: unsigned int
    • +
    • EINA_VALUE_TYPE_ULONG: unsigned long
    • +
    • EINA_VALUE_TYPE_TIMESTAMP: unsigned long used for timestamps
    • +
    • EINA_VALUE_TYPE_UINT64: unsigned integer of 64 bits
    • +
    • EINA_VALUE_TYPE_CHAR: char
    • +
    • EINA_VALUE_TYPE_SHORT: short
    • +
    • EINA_VALUE_TYPE_INT: int
    • +
    • EINA_VALUE_TYPE_LONG: long
    • +
    • EINA_VALUE_TYPE_INT64: integer of 64 bits
    • +
    • EINA_VALUE_TYPE_FLOAT: float
    • +
    • EINA_VALUE_TYPE_DOUBLE: double
    • +
    • EINA_VALUE_TYPE_STRINGSHARE: stringshared string
    • +
    • EINA_VALUE_TYPE_STRING: string
    • +
    • EINA_VALUE_TYPE_ARRAY: array
    • +
    • EINA_VALUE_TYPE_LIST: list
    • +
    • EINA_VALUE_TYPE_HASH: hash
    • +
    • EINA_VALUE_TYPE_TIMEVAL: 'struct timeval'
    • +
    • EINA_VALUE_TYPE_BLOB: blob of bytes
    • +
    • EINA_VALUE_TYPE_STRUCT: struct
    -

    To use Eina_Value you need to do some variable declarations.

    -
    // The Eina_Value itself
    +
    +

    To set up a generic value:

    +
      +
    1. Declare the necessary variables: +
      +// The Eina_Value itself
       Eina_Value v;
       // An integer 
       int i;
       // And a char *
       char *newstr;
       
      +
    2. -

      Now we can start using Eina_Value and setup a Eina_Value for an integer (if you prefer "create" the Eina_Value). Use eina_value_setup(Eina_Value * value, const Eina_Value_Type *value type). First argument is the Eina_Value and second is the type.

      -
      eina_value_setup(&v, EINA_VALUE_TYPE_INT);
      +
    3. To set up an Eina_Value for an integer, use the eina_value_setup() function. The first argument is the Eina_Value and the second is the type. +
      +eina_value_setup(&v, EINA_VALUE_TYPE_INT);
       
      - -

      The Eina_Value is created and can receive a "value", here we set it up for an Integer, so we set an integer using eina_value_set(eina_value_set(Eina_Value *value, ...)

      -
      eina_value_set(&v, 123);
      +
    4. +
    +

    To manage the generic value:

    +
      +
    • To set an integer, use the eina_value_set() function: +
      +eina_value_set(&v, 123);
       
      +
    • -

      We can get the value using eina_value_get(const Eina_Value *v, ...): we pass the Eina_Value as first argument, and a pointer to a variable to "store" the value (the target variable must have the same type as the Eina_Value).

      -
      eina_value_get(&v, &i);
      +
    • To get the value, use the eina_value_get() function. Pass the Eina_Value as the first argument, and a pointer to a variable to store the value (the target variable must have the same type as the Eina_Value). +
      +eina_value_get(&v, &i);
       printf("v=%d\n", i);
       
      +

      The above example prints "v=123".

      +
    • -

      This will print "v=123".

      -

      Here comes the interesting part with Eina_Value, in the above snippet of code we printed an int value. We can however print the value as string. We can use eina_value_to_string(const Eina_Value *v() to convert an Eina_Value to string.

      -
      newstr = eina_value_to_string(&v);
      +
    • To convert an Eina_Value to a string, use the eina_value_to_string() function. The code snippet above printed an int value. It is also possible to print the value as a string. +
      +newstr = eina_value_to_string(&v);
       printf("v as string: %s\n", newstr);
       
       free(newstr);
       
      +
    • -

      Don't forget to free the memory allocated by eina_value_to_string

      -

      When you are done with the Generic Value, don't forget to destroy it using eina_value_flush(cont Eina_Value *v)

      -
      eina_value_flush(&v);
      +
    • To free the memory allocated by eina_value_to_string(), use the eina_value_flush() function: +
      +eina_value_flush(&v);
       
      +
    • -

      Of course we can setup a string, store it, and use it with Eina_Value.

      -

      We now reuse v to store a string, get its value and print it:

      -
      const char *s;
      +
    • To store a string, get its value, and print it: +
      +const char *s;
       
       eina_value_setup(&v, EINA_VALUE_TYPE_STRING);
       eina_value_set(&v, "My string");
      @@ -1564,9 +1678,11 @@ eina_value_get(&v, &s);
       
       printf("v=%s (pointer: %p)\n", s, s);
       
      +
    • -

      we also can use eina_value_to_string with an Eina_Value setup for strings.

      -
      char *newstr; 
      +
    • To set up a string, use the eina_value_to_string() function with an Eina_Value: +
      +char *newstr; 
       
       newstr = eina_value_to_string(&v);
       printf("v as string: %s (pointer: %p)\n", newstr, newstr);
      @@ -1576,9 +1692,12 @@ free(newstr);
       
       eina_value_flush(&v); 
       
      +
    • -

      Another way to convert from one Eina_Value to another is eina_value_convert(Eina_Value *ori, Eina_Value *target). This function put the converted value into another Eina_Value. This function excepts pointers so you have to pass a Eina_Value pointer.

      -
      Eina_Value v;
      +
    • To convert from one Eina_Value to another, use the eina_value_convert() function. +

      The function puts the converted value into another Eina_Value. It accepts pointers, so you have to pass an Eina_Value pointer.

      +
      +Eina_Value v;
       Eina_Value otherv;
       
       // Set up 2 Eina_Values: 1 int and 1 string
      @@ -1601,9 +1720,13 @@ printf("v=%d\n", i);
       eina_value_flush(&otherv);
       eina_value_flush(&v);
       
      +
    • -

      Eina_Value can be used to store an Eina_List, which corresponds to the type EINA_VALUE_TYPE_LIST.

      -

      To Create a Eina_Value_List, you can use eina_value_list_setup(Eina_Value * value, const Eina_Value_Type_Type * subtype) This function initializes a generic value storage of type list. The first parameter is value "object", the second is type (how to manage the stored list members).

      +
    • To store an Eina_List, use the Eina_Value that corresponds to the EINA_VALUE_TYPE_LIST type. +
    • +
    • To create an Eina_Value_List, use the eina_value_list_setup() function. The function initializes a generic value storage of the list type. The first parameter is the "object" value, and the second one is the type (how to manage the stored list members). +
    • +
    diff --git a/org.tizen.guides/html/native/ui/ecore_n.htm b/org.tizen.guides/html/native/ui/ecore_n.htm index a146ace..cfdbba0 100644 --- a/org.tizen.guides/html/native/ui/ecore_n.htm +++ b/org.tizen.guides/html/native/ui/ecore_n.htm @@ -23,8 +23,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/edc_part_block_n.htm b/org.tizen.guides/html/native/ui/edc_part_block_n.htm index ab4205c..0d4faf4 100644 --- a/org.tizen.guides/html/native/ui/edc_part_block_n.htm +++ b/org.tizen.guides/html/native/ui/edc_part_block_n.htm @@ -30,9 +30,9 @@

    Related Info

    @@ -120,7 +120,7 @@ set }
    -

    The set block is used to define an image with different content depending on their size. Besides the document's root, additional set blocks can be included inside other blocks, normally collections, group and part. This makes file list maintenance easier when the theme is split among multiple files.

    +

    The set block is used to define an image with different content depending on their size. Besides the document's root, additional set blocks can be included inside other blocks, normally collections, group, and part. This makes file list maintenance easier when the theme is split among multiple files.

    • name [image name] diff --git a/org.tizen.guides/html/native/ui/edje_n.htm b/org.tizen.guides/html/native/ui/edje_n.htm index 2966660..47cdaf7 100644 --- a/org.tizen.guides/html/native/ui/edje_n.htm +++ b/org.tizen.guides/html/native/ui/edje_n.htm @@ -33,10 +33,10 @@

      Related Info

      diff --git a/org.tizen.guides/html/native/ui/efl_n.htm b/org.tizen.guides/html/native/ui/efl_n.htm index 918ff5d..900677e 100644 --- a/org.tizen.guides/html/native/ui/efl_n.htm +++ b/org.tizen.guides/html/native/ui/efl_n.htm @@ -25,8 +25,8 @@

      Related Info

      @@ -94,7 +94,7 @@
    • Edje is the library used by Elementary to provide a powerful theme. You can also use Edje to create your own objects and use them in your application. You may also want to extend the default theme. You will find more information about Edje and the EDC format in Edje and Customizing UI Components.
    • Ecore is the library which manages the main loop of your application. The main loop is one of the most important concepts you need to know about to develop an application. The main loop is where events are handled, and where you interact with the user through the callback mechanism. The main loop mechanisms are explained in the Main Loop guide.
    • Evas is the canvas engine. Evas is responsible for managing the drawing of your content. All graphical objects that you create are Evas objects. Evas handles the entire state of the window by filling the canvas with objects and manipulating their states. In contrast to other canvas libraries, such as Cairo, OpenGL, and XRender, Evas is not a drawing library but a scene graph library that retains the state of all objects. The Evas concept is explained in Rendering Concept and Method in Evas. Evas objects are created and then manipulated until they are no longer needed, at which point they are deleted. This allows the developer to work in the same terms that a designer thinks in: it is a direct mapping, as opposed to having to convert the concepts into drawing commands in the right order, calculate minimum drawing calls needed to get the job done, and so on.
    • -
    • Eina is the basis of all the EFL libraries. Eina is a toolbox that implements an API for data types in an efficient way. It contains all the functions needed to create lists and hashes, manage shared strings, open shared libraries, and manage errors and memory pools. Eina concepts are explained in Using Data Types.
    • +
    • Eina is the basis of all the EFL libraries. Eina is a toolbox that implements an API for data types in an efficient way. It contains all the functions needed to create lists and hashes, manage shared strings, open shared libraries, and manage errors and memory pools. Eina concepts are explained in Eina.

    The EFL include more than just the above libraries, but the above are the most important libraries to get started with. The other libraries, such as Eet, Embryo, and Emotion, will be explored later in the programming guides and the API Reference.

    diff --git a/org.tizen.guides/html/native/ui/eina_n.htm b/org.tizen.guides/html/native/ui/eina_n.htm index 4f84321..4260be9 100644 --- a/org.tizen.guides/html/native/ui/eina_n.htm +++ b/org.tizen.guides/html/native/ui/eina_n.htm @@ -23,8 +23,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/eina_tools_n.htm b/org.tizen.guides/html/native/ui/eina_tools_n.htm index 1d93570..4a773eb 100644 --- a/org.tizen.guides/html/native/ui/eina_tools_n.htm +++ b/org.tizen.guides/html/native/ui/eina_tools_n.htm @@ -29,8 +29,8 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/elementary_mn.htm b/org.tizen.guides/html/native/ui/elementary_mn.htm index d4e8f04..ea168b8 100644 --- a/org.tizen.guides/html/native/ui/elementary_mn.htm +++ b/org.tizen.guides/html/native/ui/elementary_mn.htm @@ -22,15 +22,16 @@

    Content

    Related Info

    @@ -51,22 +52,28 @@ - -

    Elementary Basics

    + -

    Elementary UI components are built in a hierarchical fashion. The idea is to factorize as much code as possible between UI components that behave in a similar manner, so as to facilitate the creation of new UI components. The Elementary UI components that we will use inherit a lot of their code from the container UI components and the layout component (a container component that takes a standard Edje design file and wraps it very thinly). We can therefore use the container and layout functions on them. We can also use Elementary object functions on them, such as elm_object_part_content_set(), elm_object_part_content_get(), and elm_object_part_content_unset().

    +

    Elementary UI components are built in a hierarchical fashion. The idea is to factorize as much code as possible between UI components that behave in a similar manner to facilitate the creation of new UI components. The Elementary UI components inherit a lot of their code from the container UI components and the layout component (a container component that takes a standard Edje design file and wraps it very thinly). You can use the container and layout functions on the Elementary UI components, as well as the Elementary object functions, such as elm_object_part_content_set(), elm_object_part_content_get(), and elm_object_part_content_unset().

    -

    This programming guide does not describe the container components. More information about containers can be found in Containers.

    +

    Getting Started with the Elementary Library

    -

    Generally, an Elementary UI component can be added with the elm_[UI_component_name]_add() function, which returns an Evas object (Evas_Object*). The Evas object is then be passed to the functions that are used to configure the UI component.

    +

    To use the Elementary library:

    -

    At the end of your application, the elm_shutdown() function takes care of freeing the allocated Elementary objects, so there is no need to separately deallocate UI components.

    +
    1. Initialize the Elementary library with the elm_init() function.
    2. +
    3. Start the Elementary main loop with the elm_run() function. +

      The function does not return, instead, it constantly loops and runs the event and the processing tasks.

    4. +
    5. Add Elementary UI components in the main loop. +

      Generally, an Elementary UI component can be added with the elm_<UI component name>_add() function, which returns an Evas object (Evas_Object*). The Evas object is passed to the functions that are used to configure the UI component.

    6. +
    7. Stop the main loop and return to the main() function with the elm_exit() function.
    8. +
    9. When your application terminates, shut down the Elementary library with the elm_shutdown() function. +

      The function frees the Elementary objects that were allocated in the main loop, so you do not need to separately deallocate them.

    -

    First Use of the Elementary Library

    -

    A minimal Elementary application looks like this:

    +

    The following code snippet shows the main() function of a minimal Elementary application:

    -
    #include <Elementary.h>
    +
    +#include <Elementary.h>
     int main(int argc, char **argv)
     {
        elm_init(argc, argv);
    @@ -76,114 +83,262 @@ int main(int argc, char **argv)
        return 0;
     }
    -

    First of all, before using the Elementary library, it has to be initialized with the elm_init() function. The Elementary main loop can then be started with the elm_run() function, which will not return, and will constantly loop and run the event and processing tasks. A call to the elm_exit() function will tell the main loop to stop and return to the main function. At the end of the application, the elm_shutdown() function will clean up all resources that were allocated with Elementary in the main loop, and finally shut down Elementary.

    - - +
    Note
    An Elementary application should use the ELM_MAIN() macro, which already calls the elm_init() function. The Hello World example shows a basic Elementary application that uses this macro.An Elementary application must use the ELM_MAIN() macro, which calls the elm_init() function. The HelloWorld example shows a basic Elementary application that uses this macro.

    Elementary Objects

    -

    Objects created using Elementary are always of type Evas_Object*. This means that Evas and Elementary functions can be used on an Elementary object. However, use Elementary functions on Elementary objects only when you do not know which API to use.

    +

    All objects created using Elementary are of the Evas_Object* type. This means that both Evas and Elementary functions can be used on an Elementary object. However, use Elementary functions on Elementary objects only when you do not know which API to use.

    -

    Since an Elementary object can take up a lot of memory, the Elm_Object_Item type has been created for situations where you need to use a lot of items, such as in a genlist or gengrid component, and save memory. Using the Elm_Object_Item type, an Elementary UI component can, in theory, contain a lot of items while maintaining a small memory footprint. In practice, Elm_Object_Item is bigger than expected, but it is still a good idea to use it.

    +

    Since an Elementary object can take up a lot of memory, the Elm_Object_Item type has been created for situations where you need to use a lot of items, such as in a genlist or gengrid component, and to save memory. Using the Elm_Object_Item type, an Elementary UI component can, in theory, contain a lot of items while maintaining a small memory footprint. In practice, the Elm_Object_Item instance is bigger than expected, but can still help in saving memory.

    Elementary Callbacks

    -

    Several callbacks can be registered on an Elementary object. The following is an overview of the different callback types and how they differ. For more information about events, see Handling Events. For more information about Evas objects and smart objects, see Rendering Concept and Method in Evas.

    - -

    Evas Event Callback

    - -

    Using the evas_object_event_callback_add() function, this callback can be registered on an Elementary object. It adds a callback for input events (key up, key down, mouse wheel) on an Evas object. In the case of an Elementary object, the callback will be registered on the underlying Evas object without considering the Elementary object infrastructure (no event propagation).

    - -

    Evas Smart Callback

    +

    Several callbacks can be registered to handle Elementary object events:

    -

    Using the evas_object_smart_callback_add() function, this callback can be registered on a "smart event" emitted by an Elementary object. Smart callbacks can only be registered on smart objects, and the "smart event" we want to register must be implemented by the corresponding smart object. Otherwise, the callback will do nothing. The callback has nothing to do with input events (keyboard or mouse)

    - -

    Edje Signal Callbacks

    +
      +
    • Evas event callback +

      Use the evas_object_event_callback_add() function to add a callback for input events (key up, key down, mouse wheel) on an Evas object. In case of an Elementary object, the callback is registered on the underlying Evas object without considering the Elementary object infrastructure (no event propagation).

      +
    • -

      Using the edje_object_signal_callback_add() function, this callback can be registered on a signal coming from an Edje object (a theme object).

      +
    • Evas smart callback +

      Use the evas_object_smart_callback_add() function to add a callback for a smart event emitted by an Elementary object. Smart callbacks can only be registered on smart objects, and the "smart event" to register must be implemented by the corresponding smart object. Otherwise, the callback does nothing. The callback does not apply to input events (keyboard or mouse).

      +
    • -

      Elementary Signal Callback

      +
    • Edje signal callback +

      Use the edje_object_signal_callback_add() function to add a callback for a signal coming from an Edje object (a theme object).

      +
    • -

      Using the elm_object_signal_callback_add() function, this callback can be registered on a signal coming from an Elementary UI component's theme. The callback has nothing to do with input events (keyboard or mouse).

      +
    • Elementary signal callback +

      Use the elm_object_signal_callback_add() function to add a callback for a signal coming from an Elementary UI component's theme. The callback does not apply to input events (keyboard or mouse).

      +
    • -

      Elementary Event Callback

      +
    • Elementary event callback +

      Use the elm_object_event_callback_add() function to add a callback for an input event (keyboard or mouse) coming from an Elementary object. In contrast to the Evas event callback, the Elementary event callback takes the hierarchy of the object into account: the event can be propagated to the parents of the object, and the parents can process the event.

      +
    • +
    -

    Using the elm_object_event_callback_add() function, this callback can be registered on an input event (keyboard or mouse) coming from an Elementary object. In contrast to the Evas event callback, the Elementary event callback takes the hierarchy of the object into account: the event can be propagated to the parents of the object, and the parents can then process the event.

    +

    For more information about events related to Elementary objects, see Handling Events. For more information about Evas objects and smart objects, see Rendering Concept and Method in Evas.

    -

    Elementary Configuration

    -

    An Elementary configuration is composed of a set of options linked to a given Elementary profile. Once loaded, the Elementary profile will configure all these options and affect the look and feel of your entire Elementary application.

    - -

    An Elementary configuration can be used to store the desired set of options that fits your application. Below, we list the different options that can be saved in an Elementary profile.

    - -

    General Functions

    - -

    The elm_config_save() function provides a way to save the current Elementary configuration so that it can be reused in another session:

    +

    Managing Elementary Profiles

    -
    elm_config_save();
    +

    An Elementary profile is a set of preconfigured options that affects the entire look and feel of an application. The options linked to a specific profile form an Elementary configuration, which can be used to store the desired set of options for use in multiple sessions. Once loaded, the Elementary profile configures all the options and sets the look and feel of your Elementary application.

    -

    When a profile is selected, we can ask Elementary to reload its configuration with the saved profile:

    - -
    elm_config_reload();
    - -

    Managing Profiles

    - -

    A profile is a set of preconfigured options that affects the entire look and feel of an application.

    - -

    We can list the existing profiles:

    - -
    Eina_List *list = elm_config_profile_list_get();
    - -

    We can set a particular profile:

    +

    To manage Elementary profiles:

    +
      +
    • List the existing profiles: +
      +Eina_List *list = elm_config_profile_list_get();
      +
      +
    • +
    • Set a particular profile: +
      +elm_config_profile_set("myprofile");
      +
      +
    • +
    • Get the current profile: +
      +char *profile = elm_config_profile_get();
      +
      +
    • +
    • To save the current option values as an Elementary configuration for later use, use the elm_config_save() function: +
      +elm_config_save();
      +
      +
    • +
    • To reload the Elementary configuration saved for the current profile: +
      +elm_config_reload();
      +
      +
    • +
    -
    elm_config_profile_set("myprofile");
    +

    Configuring Elementary Options

    -

    We can get the current profile:

    +

    You can set the following options in the Elementary configuration. In addition, you can customize themes and manage focus.

    +
      -
      char *profile = elm_config_profile_get();
      +
    • To scale UI components: +

      You can configure UI component scaling in terms of both interactive and readable areas.

      +
        +
      • Set the global scaling factor (for example, setting it to 2.0 doubles the size of all scalable UI components): +
        +elm_config_scale_set(2.0);
        +
        +
      • + +
      • Set the finger size: +
        +elm_config_finger_size_set(1.5);
        +
        +
      • +
      +
    • -

      Scaling UI Components

      +
    • To manage caches: +
        +
      • Enable the globally configured cache flush, and set the flush interval (in this example, to 60 seconds): +
        +elm_config_cache_flush_enabled_set(EINA_TRUE);
        +elm_config_cache_flush_interval_set(60);
        +
        +
      • + +
      • Configure the font and image cache sizes (to 500 and 5 000 000 bytes, respectively): +
        +elm_config_cache_font_cache_size_set(500);
        +elm_config_cache_image_cache_size_set(5000000);
        +
        +
      • + +
      • Set the Edje collection and Edje file cache sizes: +
        +elm_config_cache_edje_file_cache_size_set(500);
        +elm_config_cache_edje_collection_cache_size_set(500);
        +
        +
      • +
      +
    • -

      An Elementary configuration allows you to configure UI component scaling both in terms of interactive areas and readable areas. For more information about UI component scaling, see Scaling UI Components.

      -

      Setting the global scaling factor to 2.0 will double the size of all scalable UI components:

      +
    • To configure the gesture layer: +

      You can set the duration of the long tap and double tap events on the gesture layer objects. The following example sets the duration to 500 ms.

      -
      elm_config_scale_set(2.0);
      +
      +elm_config_glayer_long_tap_start_timeout_set(0.5);
      +elm_config_glayer_double_tap_timeout_set(0.5);
      +
      +
    • +
    • To manage scrolling: +
        +
      • Make the scroller bounce when it reaches its viewport's edge during scrolling by using the elm_config_scroll_bounce_enabled_set() function: +
        +elm_config_scroll_bounce_enabled_set(EINA_TRUE);
        +
        +
      • + +
      • Control the inertia of the bounce animation by using the elm_config_scroll_bounce_friction_set() function: +
        +elm_config_scroll_bounce_friction_set(0.5);
        +
        +

        You can also set the friction for a page scroll, include animations, and zoom animations.

        +
      • -

        We can also set the finger size:

        +
      • Set the scroller to be draggable by using the elm_config_scroll_thumbscroll_enabled_set() function. You can configure several drag options, such as friction, sensitivity, acceleration, and momentum. -
        elm_config_finger_size_set(1.5);
        +

        The following example sets the scroller to be draggable, defines that the number of pixels one must travel while dragging the scroller view to actually trigger scrolling is 20 pixels.

        +
        +elm_config_scroll_thumbscroll_enabled_set(EINA_TRUE);
        +elm_config_scroll_thumbscroll_threshold_set(20);
        +
        +
      • +
      +
    • -

      Configuring the Cache

      +
    • To configure long press events: +

      Get the current timeout before a long press event is retrieved, and modify it. The following example increases the timeout by 1 second.

      +
      +double lp_timeout = elm_config_longpress_timeout_get();
      +elm_config_longpress_timeout_set(lp_timeout + 1.0);
      +
      +
    • -

      We can enable the globally configured cache flush, and we can then set the flush interval to 60 seconds:

      +
    • To configure tooltips: +

      Set the duration after which a tooltip is shown. The following example sets the delay to 2 seconds.

      -
      elm_config_cache_flush_enabled_set(EINA_TRUE);
      -elm_config_cache_flush_interval_set(60);
      +
      +elm_config_tooltip_delay_set(2.0);
      +
      +
    • -

      We can configure the font cache size to 500 bytes and the image cache size to 5 000 000 bytes:

      +
    • To configure the password show last feature: +

      The password show last feature enables the user to view the last input entered for a few seconds before it is masked.

      -
      elm_config_cache_font_cache_size_set(500);
      -elm_config_cache_image_cache_size_set(5000000);
      +
        +
      • Enable the password show last feature: +
        +elm_config_password_show_last_set(EINA_TRUE);
        +
        +
      • +
      • Set the visibility timeout (how many seconds the input is visible): +
        +elm_config_password_show_last_timeout_set(5.0);
        +
        +
      • +
      +
    • +
    • To set the Elementary engine: +

      You can define the rendering engine that Elementary uses to draw the windows. The following rendering engines are supported:

      -

      Finally, we can set the Edje collection cache size and the Edje file cache size:

      +
        +
      • "software_x11"
      • +
      • "fb"
      • +
      • "directfb"
      • +
      • "software_16_x11"
      • +
      • "software_8_x11"
      • +
      • "xrender_x11"
      • +
      • "opengl_x11"
      • +
      • "software_gdi"
      • +
      • "software_16_wince_gdi"
      • +
      • "sdl"
      • +
      • "software_16_sdl"
      • +
      • "opengl_sdl"
      • +
      • "buffer"
      • +
      • "ews"
      • +
      • "opengl_cocoa"
      • +
      • "psl1ght"
      • +
      -
      elm_config_cache_edje_file_cache_size_set(500);
      -elm_config_cache_edje_collection_cache_size_set(500);
      +
      +elm_config_engine_set("opengl_x11");
      +
      +
    • + +
    • To activate the access mode: +

      Set the access mode as active, so that information about an Elementary object is read when the object receives an EVAS_CALLBACK_MOUSE_IN event:

      + +
      +elm_config_access_set(EINA_TRUE);
      +
      +
    • + +
    • To configure the selection mode: +

      Set the selection mode so that the selection is cleared when the entry component is unfocused:

      +
      +elm_config_selection_unfocused_clear_set(EINA_TRUE);
      +
      +
    • + +
    • To enable mirroring: +

      Elementary allows UI mirroring both on a single object and on the entire UI. If mirroring is enabled, an Elementary UI component displays as if there was a vertical mirror in the middle of it. Only the controls and the disposition of the UI component are mirrored. Text is not mirrored.

      + +
      +elm_config_mirrored_set(EINA_TRUE);
      +
      +
    • + +
    • To set the frame rate: +

      Define the frames per second (FPS) value for the ecore_animator_frametime and edje_frametime calculations. This example sets the FPS 60.

      + +
      +elm_config_fps_set(60.0);
      +
      +
    • +

    Customizing Themes

    -

    Elementary uses Edje to theme its UI components. Edje provides a default theme for each UI component. This theme can be changed per application using the ELM_THEME environment variable, or it can be modified globally with the elementary_config utility.

    +

    Elementary uses Edje to theme its UI components. Edje provides a default theme for each UI component in an application. You can change the theme using the ELM_THEME environment variable. You can also modify the theme globally with the elementary_config utility.

    -

    When you need custom styles, use extensions. Extensions allow you to write styles for specific UI components. Once set, the extension will completely replace the default theme of the UI component.

    +

    For custom styles, use extensions. Extensions allow you to write styles for specific UI components. Add a new extension to the list of Elementary themes with the elm_theme_extension_add() function, and apply the new style to the UI component with the elm_object_style_set() function. Once set, the extension replaces the default theme of the UI component.

    @@ -191,20 +346,29 @@ elm_config_cache_edje_collection_cache_size_set(500); - +
    Note
    When developing an extension, to respect the signals emitted and the elements that need to be in place, it is important to know how the UI component is themed. If something is missing from the extension, it can break the UI component's behavior.When developing an extension, to respect the signals emitted and the elements that need to be in place, you must know how the UI component is themed. If something is missing from the extension, it can break the UI component's behavior.
    -

    The elm_theme_extension_add() function is used to add the new extension to the list of Elementary themes. The style can then be applied to the UI component with the elm_object_style_set() function.

    +

    To modify Elementary themes, you can also use overlays. An overlay can replace the look of all UI components by overriding the default styles. As with extensions, you must write the correct overlay theme for a UI component. When looking for a theme to apply, Elementary first checks the list of overlays, then the set theme, and finally the list of extensions. To add or remove an overlay, use the elm_theme_overlay_add() and elm_theme_overlay_del() functions.

    -

    Overlay is another solution to modify Elementary themes. It can replace the look of all UI components by overriding the default styles. As with extensions, it is up to you to write the correct overlay theme for a UI component. When looking for a theme to apply, Elementary first checks the list of overlays, then the set theme, and finally the list of extensions. With overlays, it is therefore possible to replace the default view so that every UI component is affected. This is very similar to setting the theme for the whole application, and will probably clash with end user options. It also runs the risk of none-matching styles across the application. Unless you have a very good reason to use them, avoid overlays. An overlay can be added with the elm_theme_overlay_add() function. It can be removed with the elm_theme_overlay_del() function.

    + + + + + + + + + +
    Note
    With overlays, you can replace the default view and affect every UI component. This is very similar to setting the theme for the whole application, and probably clashes with end user options. Using overlays also runs the risk of non-matching styles across the application. Unless you have a very good reason to use them, avoid overlays.
    -

    For more information about UI component theme customization, see Customizing UI Components.

    +

    Managing Focus

    -

    Configuring Focus

    +

    When an Elementary object has the focus, input events are directly passed to that object in the application window. The focused object can also change its decoration to show the user where the focus is. In an Elementary application, only one object can have the focus at a time.

    -

    When an Elementary object has the focus, input events are directly passed to that object in the window of the application. The focused object can also change its decoration to show the user where the focus is. The focus can be set to an Elementary object at any time with the elm_object_focus_set() function. This will take the focus away from the previous focused object and give the focus to the new object. In an Elementary application, only one object can have the focus at a time. It is also possible to make an object unfocusable with the elm_object_focus_allow_set() function, so that the object will never take the focus.

    +

    To set the focus to a new Elementary object and take the focus away from the previous focused object, use the elm_object_focus_set() function. You can make an object unfocusable with the elm_object_focus_allow_set() function.

    @@ -212,14 +376,19 @@ elm_config_cache_edje_collection_cache_size_set(500); - +
    Note
    Only visible objects can be focused.Only visible objects can have the focus.
    -

    Elementary also supports focus chains, which allow you to cycle through all the focusable objects in a window. By default, the focus chain is defined by the order in which the UI components were added to the code. It is also possible to define custom focus chains when needed.

    +

    Elementary supports focus chains that allow you to cycle through all the focusable objects in a window. By default, the focus chain is defined by the order in which the UI components are added to the code. It is also possible to define custom focus chains, when needed.

    + +

    For more information on focus, see Managing UI Component Focus.

    -

    To define a custom focus chain, create an Eina_List, and add the Elementary objects to it in the desired focus order. After you have inserted all the objects to the Eina_List, use the elm_object_focus_custom_chain_set() function to set this list as the custom focus chain of the parent object (here container_object).

    +

    To manage the focus:

    + +
      +
    • To define a custom focus chain, create an Eina_List, and add the Elementary objects to it in the desired focus order. Use the elm_object_focus_custom_chain_set() function to set the final list as the custom focus chain of the parent object (in the following example, container_object is the parent object).
      Eina_List *obj_list = NULL;
       
      @@ -229,132 +398,29 @@ list = eina_list_append(list, obj2);
       list = eina_list_append(list, obj3);
       
       elm_object_focus_custom_chain_set(container_object, list);
      +
    • -

      Use the elm_object_focus_custom_chain_unset() function to remove the custom focus chain and use the default focus chain instead.

      - -

      Use the elm_object_focus_next() function to programmatically cycle through the focus chain.

      +
    • To remove the custom focus chain and use the default focus chain instead, use the elm_object_focus_custom_chain_unset() function. +
    • -

      For detailed information about focus, see Managing UI Component Focus.

      +
    • To programmatically cycle through the focus chain, use the elm_object_focus_next() function. +
    • -

      We can show a highlight on the focused object:

      +
    • To show a highlight on the focused object: -
      elm_config_focus_highlight_enabled_set(EINA_TRUE);
      +
      +elm_config_focus_highlight_enabled_set(EINA_TRUE);
      +
      +
    • -

      We can also activate an animation when the focus shifts from one object to another:

      +
    • To activate an animation when the focus shifts from one object to another: -
      elm_config_focus_highlight_animate_set(EINA_TRUE);
      - -

      Configuring the Gesture Layer

      - -

      We can configure the duration of the long tap and double tap events on gesture layer objects. Here, we set the duration to 500 ms:

      - -
      elm_config_glayer_long_tap_start_timeout_set(0.5);
      -elm_config_glayer_double_tap_timeout_set(0.5);
      - -

      Configuring Scrolling

      - -

      An Elementary configuration provides several functions for configuring scrolling in UI components.

      - -

      You can enable bouncing, which makes the scroller bounce when it reaches its viewport's edge during scrolling:

      - -
      elm_config_scroll_bounce_enabled_set(EINA_TRUE);
      - -

      You can control the inertia of the bounce animation. Here, the inertia is set to 0.5:

      - -
      elm_config_scroll_bounce_friction_set(0.5);
      - -

      You can also set the friction for a page scroll, include animations, and zoom animations.

      - -

      You can use the elm_config_scroll_thumbscroll_enabled_set() function to set the scroller to be draggable. You can configure several drag options, such as friction, sensitivity, acceleration, and momentum.

      - -

      Here, we set the scroller to be draggable, and we set the number of pixels one should travel while dragging the scroller's view to actually trigger scrolling to 20 pixels:

      - -
      // Set the scroller to be draggable
      -elm_config_scroll_thumbscroll_enabled_set(EINA_TRUE);
      -
      -// Set the thumbscroll threshold to 20 pixels
      -elm_config_scroll_thumbscroll_threshold_set(20);
      - -

      Configuring Long Press

      - -

      Long press events can be configured using the Elementary Config API. Here, we get the current timeout before a long press event happens and increase it by 1 second:

      - -
      // Get the long press timeout
      -double lp_timeout = elm_config_longpress_timeout_get();
      -
      -// Increase it by 1 second
      -elm_config_longpress_timeout_set(lp_timeout + 1.0);
      - -

      Configuring Tooltips

      - -

      The duration after which a tooltip is shown can be configured through the Elementary Config API. Here, we set the delay to 2 seconds:

      - -
      elm_config_tooltip_delay_set(2.0);
      - -

      Configuring the Password Show Last Feature

      - -

      The password show last feature enables users to view the last input entered for a few seconds before it is masked. The following functions allow you to set this feature in the password mode of the entry component and to change the duration over which the input has to be visible.

      - -

      First, we enable the password show last feature:

      - -
      elm_config_password_show_last_set(EINA_TRUE);
      - -

      Then, we set the visibility timeout to 5 seconds:

      - -
      elm_config_password_show_last_timeout_set(5.0);
      - -

      Configuring the Elementary Engine

      - -

      We can use the Elementary Config API to set the rendering engine that Elementary will use to draw the windows. The following rendering engines are supported:

      - -
        -
      • "software_x11"
      • -
      • "fb"
      • -
      • "directfb"
      • -
      • "software_16_x11"
      • -
      • "software_8_x11"
      • -
      • "xrender_x11"
      • -
      • "opengl_x11"
      • -
      • "software_gdi"
      • -
      • "software_16_wince_gdi"
      • -
      • "sdl"
      • -
      • "software_16_sdl"
      • -
      • "opengl_sdl"
      • -
      • "buffer"
      • -
      • "ews"
      • -
      • "opengl_cocoa"
      • -
      • "psl1ght"
      • +
        +elm_config_focus_highlight_animate_set(EINA_TRUE);
        +
        +
      -

      Here, we set the engine to "opengl_x11":

      - -
      elm_config_engine_set("opengl_x11");
      - -

      Configuring the Access Mode

      - -

      When the access mode is active, information about an Elementary object is read when the object receives an EVAS_CALLBACK_MOUSE_IN event. Here, we activate the access mode:

      - -
      elm_config_access_set(EINA_TRUE);
      - -

      Configuring Selection

      - -

      Selection behavior can be set to be cleared when the entry component is unfocused:

      - -
      elm_config_selection_unfocused_clear_set(EINA_TRUE);
      - -

      Configuring Mirroring

      - -

      Elementary allows UI mirroring both on a single object and on the entire UI. If activated with the elm_object_mirrored_set() function, an Elementary UI component will display as if there was a vertical mirror in the middle of it. Only the controls and the disposition of the UI component are mirrored. Text is not mirrored.

      - -

      The default mirror mode of UI components can be set with the Elementary Config API. Here, we activate the mirror mode by default:

      - -
      elm_config_mirrored_set(EINA_TRUE);
      - -

      Configuring Frame Rate

      - -

      We can also set the frames per second (FPS) value for ecore_animator_frametime and edje_frametime calculations. Here, we set the FPS to 60:

      - -
      elm_config_fps_set(60.0);
      diff --git a/org.tizen.guides/html/native/ui/elementary_wn.htm b/org.tizen.guides/html/native/ui/elementary_wn.htm index eeac01d..1673f5b 100644 --- a/org.tizen.guides/html/native/ui/elementary_wn.htm +++ b/org.tizen.guides/html/native/ui/elementary_wn.htm @@ -22,15 +22,16 @@

      Content

      Related Info

      @@ -51,22 +52,28 @@ - -

      Elementary Basics

      + -

      Elementary UI components are built in a hierarchical fashion. The idea is to factorize as much code as possible between UI components that behave in a similar manner, so as to facilitate the creation of new UI components. The Elementary UI components that we will use inherit a lot of their code from the container UI components and the layout components (a container component that takes a standard Edje design file and wraps it very thinly). We can therefore use the container and layout functions on them. We can also use Elementary object functions on them, such as elm_object_part_content_set(), elm_object_part_content_get(), and elm_object_part_content_unset().

      +

      Elementary UI components are built in a hierarchical fashion. The idea is to factorize as much code as possible between UI components that behave in a similar manner to facilitate the creation of new UI components. The Elementary UI components inherit a lot of their code from the container UI components and the layout component (a container component that takes a standard Edje design file and wraps it very thinly). You can use the container and layout functions on the Elementary UI components, as well as the Elementary object functions, such as elm_object_part_content_set(), elm_object_part_content_get(), and elm_object_part_content_unset().

      -

      This programming guide does not describe the container components. More information about containers can be found in Containers.

      +

      Getting Started with the Elementary Library

      -

      Generally, an Elementary UI component can be added with the elm_[UI_component_name]_add() function, which returns an Evas object (Evas_Object*). The Evas object is then be passed to the functions that are used to configure the UI component.

      +

      To use the Elementary library:

      -

      At the end of your application, the elm_shutdown() function takes care of freeing the allocated Elementary objects, so there is no need to separately deallocate UI components.

      +
      1. Initialize the Elementary library with the elm_init() function.
      2. +
      3. Start the Elementary main loop with the elm_run() function. +

        The function does not return, instead, it constantly loops and runs the event and the processing tasks.

      4. +
      5. Add Elementary UI components in the main loop. +

        Generally, an Elementary UI component can be added with the elm_<UI component name>_add() function, which returns an Evas object (Evas_Object*). The Evas object is passed to the functions that are used to configure the UI component.

      6. +
      7. Stop the main loop and return to the main() function with the elm_exit() function.
      8. +
      9. When your application terminates, shut down the Elementary library with the elm_shutdown() function. +

        The function frees the Elementary objects that were allocated in the main loop, so you do not need to separately deallocate them.

      -

      First Use of the Elementary Library

      -

      A minimal Elementary application looks like this:

      +

      The following code snippet shows the main() function of a minimal Elementary application:

      -
      #include <Elementary.h>
      +
      +#include <Elementary.h>
       int main(int argc, char **argv)
       {
          elm_init(argc, argv);
      @@ -76,114 +83,262 @@ int main(int argc, char **argv)
          return 0;
       }
      -

      First of all, before using the Elementary library, it has to be initialized with the elm_init() function. The Elementary main loop can then be started with the elm_run() function, which will not return, and will constantly loop and run the event and processing tasks. A call to the elm_exit() function will tell the main loop to stop and return to the main function. At the end of the application, the elm_shutdown() function will clean up all resources that were allocated with Elementary in the main loop, and finally shut down Elementary.

      - - +
      Note
      An Elementary application should use the ELM_MAIN() macro, which already calls the elm_init() function. The Hello World example shows a basic Elementary application that uses this macro.An Elementary application must use the ELM_MAIN() macro, which calls the elm_init() function. The HelloWorld example shows a basic Elementary application that uses this macro.

      Elementary Objects

      -

      Objects created using Elementary are always of type Evas_Object*. This means that Evas and Elementary functions can be used on an Elementary object. However, use Elementary functions on Elementary objects only when you do not know which API to use.

      +

      All objects created using Elementary are of the Evas_Object* type. This means that both Evas and Elementary functions can be used on an Elementary object. However, use Elementary functions on Elementary objects only when you do not know which API to use.

      -

      Since an Elementary object can take up a lot of memory, the Elm_Object_Item type has been created for situations where you need to use a lot of items, such as in a genlist or gengrid component, and save memory. Using the Elm_Object_Item type, an Elementary UI component can, in theory, contain a lot of items while maintaining a small memory footprint. In practice, Elm_Object_Item is bigger than expected, but it is still a good idea to use it.

      +

      Since an Elementary object can take up a lot of memory, the Elm_Object_Item type has been created for situations where you need to use a lot of items, such as in a genlist or gengrid component, and to save memory. Using the Elm_Object_Item type, an Elementary UI component can, in theory, contain a lot of items while maintaining a small memory footprint. In practice, the Elm_Object_Item instance is bigger than expected, but can still help in saving memory.

      Elementary Callbacks

      -

      Several callbacks can be registered on an Elementary object. The following is an overview of the different callback types and how they differ. For more information about events, see Handling Events. For more information about Evas objects and smart objects, see Rendering Concept and Method in Evas.

      - -

      Evas Event Callback

      - -

      Using the evas_object_event_callback_add() function, this callback can be registered on an Elementary object. It adds a callback for input events (key up, key down, mouse wheel) on an Evas object. In the case of an Elementary object, the callback will be registered on the underlying Evas object without considering the Elementary object infrastructure (no event propagation).

      - -

      Evas Smart Callback

      - -

      Using the evas_object_smart_callback_add() function, this callback can be registered on a "smart event" emitted by an Elementary object. Smart callbacks can only be registered on smart objects, and the "smart event" we want to register must be implemented by the corresponding smart object. Otherwise, the callback will do nothing. The callback has nothing to do with input events (keyboard or mouse)

      +

      Several callbacks can be registered to handle Elementary object events:

      -

      Edje Signal Callbacks

      +
        +
      • Evas event callback +

        Use the evas_object_event_callback_add() function to add a callback for input events (key up, key down, mouse wheel) on an Evas object. In case of an Elementary object, the callback is registered on the underlying Evas object without considering the Elementary object infrastructure (no event propagation).

        +
      • -

        Using the edje_object_signal_callback_add() function, this callback can be registered on a signal coming from an Edje object (a theme object).

        +
      • Evas smart callback +

        Use the evas_object_smart_callback_add() function to add a callback for a smart event emitted by an Elementary object. Smart callbacks can only be registered on smart objects, and the "smart event" to register must be implemented by the corresponding smart object. Otherwise, the callback does nothing. The callback does not apply to input events (keyboard or mouse).

        +
      • -

        Elementary Signal Callback

        +
      • Edje signal callback +

        Use the edje_object_signal_callback_add() function to add a callback for a signal coming from an Edje object (a theme object).

        +
      • -

        Using the elm_object_signal_callback_add() function, this callback can be registered on a signal coming from an Elementary UI component's theme. The callback has nothing to do with input events (keyboard or mouse).

        +
      • Elementary signal callback +

        Use the elm_object_signal_callback_add() function to add a callback for a signal coming from an Elementary UI component's theme. The callback does not apply to input events (keyboard or mouse).

        +
      • -

        Elementary Event Callback

        +
      • Elementary event callback +

        Use the elm_object_event_callback_add() function to add a callback for an input event (keyboard or mouse) coming from an Elementary object. In contrast to the Evas event callback, the Elementary event callback takes the hierarchy of the object into account: the event can be propagated to the parents of the object, and the parents can process the event.

        +
      • +
      -

      Using the elm_object_event_callback_add() function, this callback can be registered on an input event (keyboard or mouse) coming from an Elementary object. In contrast to the Evas event callback, the Elementary event callback takes the hierarchy of the object into account: the event can be propagated to the parents of the object, and the parents can then process the event.

      +

      For more information about events related to Elementary objects, see Handling Events. For more information about Evas objects and smart objects, see Rendering Concept and Method in Evas.

      -

      Elementary Configuration

      -

      An Elementary configuration is composed of a set of options linked to a given Elementary profile. Once loaded, the Elementary profile will configure all these options and affect the look and feel of your entire Elementary application.

      - -

      An Elementary configuration can be used to store the desired set of options that fits your application. Below, we list the different options that can be saved in an Elementary profile.

      - -

      General Functions

      - -

      The elm_config_save() function provides a way to save the current Elementary configuration so that it can be reused in another session:

      - -
      elm_config_save();
      +

      Managing Elementary Profiles

      -

      When a profile is selected, we can ask Elementary to reload its configuration with the saved profile:

      +

      An Elementary profile is a set of preconfigured options that affects the entire look and feel of an application. The options linked to a specific profile form an Elementary configuration, which can be used to store the desired set of options for use in multiple sessions. Once loaded, the Elementary profile configures all the options and sets the look and feel of your Elementary application.

      -
      elm_config_reload();
      - -

      Managing Profiles

      - -

      A profile is a set of preconfigured options that affects the entire look and feel of an application.

      - -

      We can list the existing profiles:

      - -
      Eina_List *list = elm_config_profile_list_get();
      - -

      We can set a particular profile:

      +

      To manage Elementary profiles:

      +
        +
      • List the existing profiles: +
        +Eina_List *list = elm_config_profile_list_get();
        +
        +
      • +
      • Set a particular profile: +
        +elm_config_profile_set("myprofile");
        +
        +
      • +
      • Get the current profile: +
        +char *profile = elm_config_profile_get();
        +
        +
      • +
      • To save the current option values as an Elementary configuration for later use, use the elm_config_save() function: +
        +elm_config_save();
        +
        +
      • +
      • To reload the Elementary configuration saved for the current profile: +
        +elm_config_reload();
        +
        +
      • +
      -
      elm_config_profile_set("myprofile");
      +

      Configuring Elementary Options

      -

      We can get the current profile:

      +

      You can set the following options in the Elementary configuration. In addition, you can customize themes and manage focus.

      +
        -
        char *profile = elm_config_profile_get();
        +
      • To scale UI components: +

        You can configure UI component scaling in terms of both interactive and readable areas.

        +
          +
        • Set the global scaling factor (for example, setting it to 2.0 doubles the size of all scalable UI components): +
          +elm_config_scale_set(2.0);
          +
          +
        • + +
        • Set the finger size: +
          +elm_config_finger_size_set(1.5);
          +
          +
        • +
        +
      • -

        Scaling UI Components

        +
      • To manage caches: +
          +
        • Enable the globally configured cache flush, and set the flush interval (in this example, to 60 seconds): +
          +elm_config_cache_flush_enabled_set(EINA_TRUE);
          +elm_config_cache_flush_interval_set(60);
          +
          +
        • + +
        • Configure the font and image cache sizes (to 500 and 5 000 000 bytes, respectively): +
          +elm_config_cache_font_cache_size_set(500);
          +elm_config_cache_image_cache_size_set(5000000);
          +
          +
        • + +
        • Set the Edje collection and Edje file cache sizes: +
          +elm_config_cache_edje_file_cache_size_set(500);
          +elm_config_cache_edje_collection_cache_size_set(500);
          +
          +
        • +
        +
      • -

        An Elementary configuration allows you to configure UI component scaling both in terms of interactive areas and readable areas. For more information about UI component scaling, see Scaling UI Components.

        -

        Setting the global scaling factor to 2.0 will double the size of all scalable UI components:

        +
      • To configure the gesture layer: +

        You can set the duration of the long tap and double tap events on the gesture layer objects. The following example sets the duration to 500 ms.

        -
        elm_config_scale_set(2.0);
        +
        +elm_config_glayer_long_tap_start_timeout_set(0.5);
        +elm_config_glayer_double_tap_timeout_set(0.5);
        +
        +
      • +
      • To manage scrolling: +
          +
        • Make the scroller bounce when it reaches its viewport's edge during scrolling by using the elm_config_scroll_bounce_enabled_set() function: +
          +elm_config_scroll_bounce_enabled_set(EINA_TRUE);
          +
          +
        • + +
        • Control the inertia of the bounce animation by using the elm_config_scroll_bounce_friction_set() function: +
          +elm_config_scroll_bounce_friction_set(0.5);
          +
          +

          You can also set the friction for a page scroll, include animations, and zoom animations.

          +
        • -

          We can also set the finger size:

          +
        • Set the scroller to be draggable by using the elm_config_scroll_thumbscroll_enabled_set() function. You can configure several drag options, such as friction, sensitivity, acceleration, and momentum. -
          elm_config_finger_size_set(1.5);
          +

          The following example sets the scroller to be draggable, defines that the number of pixels one must travel while dragging the scroller view to actually trigger scrolling is 20 pixels.

          +
          +elm_config_scroll_thumbscroll_enabled_set(EINA_TRUE);
          +elm_config_scroll_thumbscroll_threshold_set(20);
          +
          +
        • +
        +
      • -

        Configuring the Cache

        +
      • To configure long press events: +

        Get the current timeout before a long press event is retrieved, and modify it. The following example increases the timeout by 1 second.

        +
        +double lp_timeout = elm_config_longpress_timeout_get();
        +elm_config_longpress_timeout_set(lp_timeout + 1.0);
        +
        +
      • -

        We can enable the globally configured cache flush, and we can then set the flush interval to 60 seconds:

        +
      • To configure tooltips: +

        Set the duration after which a tooltip is shown. The following example sets the delay to 2 seconds.

        -
        elm_config_cache_flush_enabled_set(EINA_TRUE);
        -elm_config_cache_flush_interval_set(60);
        +
        +elm_config_tooltip_delay_set(2.0);
        +
        +
      • -

        We can configure the font cache size to 500 bytes and the image cache size to 5 000 000 bytes:

        +
      • To configure the password show last feature: +

        The password show last feature enables the user to view the last input entered for a few seconds before it is masked.

        -
        elm_config_cache_font_cache_size_set(500);
        -elm_config_cache_image_cache_size_set(5000000);
        +
          +
        • Enable the password show last feature: +
          +elm_config_password_show_last_set(EINA_TRUE);
          +
          +
        • +
        • Set the visibility timeout (how many seconds the input is visible): +
          +elm_config_password_show_last_timeout_set(5.0);
          +
          +
        • +
        +
      • +
      • To set the Elementary engine: +

        You can define the rendering engine that Elementary uses to draw the windows. The following rendering engines are supported:

        -

        Finally, we can set the Edje collection cache size and the Edje file cache size:

        +
          +
        • "software_x11"
        • +
        • "fb"
        • +
        • "directfb"
        • +
        • "software_16_x11"
        • +
        • "software_8_x11"
        • +
        • "xrender_x11"
        • +
        • "opengl_x11"
        • +
        • "software_gdi"
        • +
        • "software_16_wince_gdi"
        • +
        • "sdl"
        • +
        • "software_16_sdl"
        • +
        • "opengl_sdl"
        • +
        • "buffer"
        • +
        • "ews"
        • +
        • "opengl_cocoa"
        • +
        • "psl1ght"
        • +
        -
        elm_config_cache_edje_file_cache_size_set(500);
        -elm_config_cache_edje_collection_cache_size_set(500);
        +
        +elm_config_engine_set("opengl_x11");
        +
        +
      • + +
      • To activate the access mode: +

        Set the access mode as active, so that information about an Elementary object is read when the object receives an EVAS_CALLBACK_MOUSE_IN event:

        + +
        +elm_config_access_set(EINA_TRUE);
        +
        +
      • + +
      • To configure the selection mode: +

        Set the selection mode so that the selection is cleared when the entry component is unfocused:

        +
        +elm_config_selection_unfocused_clear_set(EINA_TRUE);
        +
        +
      • + +
      • To enable mirroring: +

        Elementary allows UI mirroring both on a single object and on the entire UI. If mirroring is enabled, an Elementary UI component displays as if there was a vertical mirror in the middle of it. Only the controls and the disposition of the UI component are mirrored. Text is not mirrored.

        + +
        +elm_config_mirrored_set(EINA_TRUE);
        +
        +
      • + +
      • To set the frame rate: +

        Define the frames per second (FPS) value for the ecore_animator_frametime and edje_frametime calculations. This example sets the FPS 60.

        + +
        +elm_config_fps_set(60.0);
        +
        +
      • +

      Customizing Themes

      -

      Elementary uses Edje to theme its UI components. Edje provides a default theme for each UI component. This theme can be changed per application using the ELM_THEME environment variable, or it can be modified globally with the elementary_config utility.

      +

      Elementary uses Edje to theme its UI components. Edje provides a default theme for each UI component in an application. You can change the theme using the ELM_THEME environment variable. You can also modify the theme globally with the elementary_config utility.

      -

      When you need custom styles, use extensions. Extensions allow you to write styles for specific UI components. Once set, the extension will completely replace the default theme of the UI component.

      +

      For custom styles, use extensions. Extensions allow you to write styles for specific UI components. Add a new extension to the list of Elementary themes with the elm_theme_extension_add() function, and apply the new style to the UI component with the elm_object_style_set() function. Once set, the extension replaces the default theme of the UI component.

      @@ -191,20 +346,29 @@ elm_config_cache_edje_collection_cache_size_set(500); - +
      Note
      When developing an extension, to respect the signals emitted and the elements that need to be in place, it is important to know how the UI component is themed. If something is missing from the extension, it can break the UI component's behavior.When developing an extension, to respect the signals emitted and the elements that need to be in place, you must know how the UI component is themed. If something is missing from the extension, it can break the UI component's behavior.
      -

      The elm_theme_extension_add() function is used to add the new extension to the list of Elementary themes. The style can then be applied to the UI component with the elm_object_style_set() function.

      +

      To modify Elementary themes, you can also use overlays. An overlay can replace the look of all UI components by overriding the default styles. As with extensions, you must write the correct overlay theme for a UI component. When looking for a theme to apply, Elementary first checks the list of overlays, then the set theme, and finally the list of extensions. To add or remove an overlay, use the elm_theme_overlay_add() and elm_theme_overlay_del() functions.

      -

      Overlay is another solution to modify Elementary themes. It can replace the look of all UI components by overriding the default styles. As with extensions, it is up to you to write the correct overlay theme for a UI component. When looking for a theme to apply, Elementary first checks the list of overlays, then the set theme, and finally the list of extensions. With overlays, it is therefore possible to replace the default view so that every UI component is affected. This is very similar to setting the theme for the whole application, and will probably clash with end user options. It also runs the risk of none-matching styles across the application. Unless you have a very good reason to use them, avoid overlays. An overlay can be added with the elm_theme_overlay_add() function. It can be removed with the elm_theme_overlay_del() function.

      + + + + + + + + + +
      Note
      With overlays, you can replace the default view and affect every UI component. This is very similar to setting the theme for the whole application, and probably clashes with end user options. Using overlays also runs the risk of non-matching styles across the application. Unless you have a very good reason to use them, avoid overlays.
      -

      For more information about UI component theme customization, see Customizing UI Components.

      +

      Managing Focus

      -

      Configuring Focus

      +

      When an Elementary object has the focus, input events are directly passed to that object in the application window. The focused object can also change its decoration to show the user where the focus is. In an Elementary application, only one object can have the focus at a time.

      -

      When an Elementary object has the focus, input events are directly passed to that object in the window of the application. The focused object can also change its decoration to show the user where the focus is. The focus can be set to an Elementary object at any time with the elm_object_focus_set() function. This will take the focus away from the previous focused object and give the focus to the new object. In an Elementary application, only one object can have the focus at a time. It is also possible to make an object unfocusable with the elm_object_focus_allow_set() function, so that the object will never take the focus.

      +

      To set the focus to a new Elementary object and take the focus away from the previous focused object, use the elm_object_focus_set() function. You can make an object unfocusable with the elm_object_focus_allow_set() function.

      @@ -212,14 +376,19 @@ elm_config_cache_edje_collection_cache_size_set(500); - +
      Note
      Only visible objects can be focused.Only visible objects can have the focus.
      -

      Elementary also supports focus chains, which allow you to cycle through all the focusable objects in a window. By default, the focus chain is defined by the order in which the UI components were added to the code. It is also possible to define custom focus chains when needed.

      +

      Elementary supports focus chains that allow you to cycle through all the focusable objects in a window. By default, the focus chain is defined by the order in which the UI components are added to the code. It is also possible to define custom focus chains, when needed.

      + +

      For more information on focus, see Managing UI Component Focus.

      + +

      To manage the focus:

      -

      To define a custom focus chain, create an Eina_List, and add the Elementary objects to it in the desired focus order. After you have inserted all the objects to the Eina_List, use the elm_object_focus_custom_chain_set() function to set this list as the custom focus chain of the parent object (here container_object).

      +
        +
      • To define a custom focus chain, create an Eina_List, and add the Elementary objects to it in the desired focus order. Use the elm_object_focus_custom_chain_set() function to set the final list as the custom focus chain of the parent object (in the following example, container_object is the parent object).
        Eina_List *obj_list = NULL;
         
        @@ -229,132 +398,28 @@ list = eina_list_append(list, obj2);
         list = eina_list_append(list, obj3);
         
         elm_object_focus_custom_chain_set(container_object, list);
        +
      • -

        Use the elm_object_focus_custom_chain_unset() function to remove the custom focus chain and use the default focus chain instead.

        - -

        Use the elm_object_focus_next() function to programmatically cycle through the focus chain.

        - -

        For detailed information about focus, see Managing UI Component Focus.

        +
      • To remove the custom focus chain and use the default focus chain instead, use the elm_object_focus_custom_chain_unset() function. +
      • -

        We can show a highlight on the focused object:

        +
      • To programmatically cycle through the focus chain, use the elm_object_focus_next() function. +
      • -
        elm_config_focus_highlight_enabled_set(EINA_TRUE);
        +
      • To show a highlight on the focused object: -

        We can also activate an animation when the focus shifts from one object to another:

        +
        +elm_config_focus_highlight_enabled_set(EINA_TRUE);
        +
        +
      • -
        elm_config_focus_highlight_animate_set(EINA_TRUE);
        +
      • To activate an animation when the focus shifts from one object to another: -

        Configuring the Gesture Layer

        - -

        We can configure the duration of the long tap and double tap events on gesture layer objects. Here, we set the duration to 500 ms:

        - -
        elm_config_glayer_long_tap_start_timeout_set(0.5);
        -elm_config_glayer_double_tap_timeout_set(0.5);
        - -

        Configuring Scrolling

        - -

        An Elementary configuration provides several functions for configuring scrolling in UI components.

        - -

        You can enable bouncing, which makes the scroller bounce when it reaches its viewport's edge during scrolling:

        - -
        elm_config_scroll_bounce_enabled_set(EINA_TRUE);
        - -

        You can control the inertia of the bounce animation. Here, the inertia is set to 0.5:

        - -
        elm_config_scroll_bounce_friction_set(0.5);
        - -

        You can also set the friction for a page scroll, include animations, and zoom animations.

        - -

        You can use the elm_config_scroll_thumbscroll_enabled_set() function to set the scroller to be draggable. You can configure several drag options, such as friction, sensitivity, acceleration, and momentum.

        - -

        Here, we set the scroller to be draggable, and we set the number of pixels one should travel while dragging the scroller's view to actually trigger scrolling to 20 pixels:

        - -
        // Set the scroller to be draggable
        -elm_config_scroll_thumbscroll_enabled_set(EINA_TRUE);
        -
        -// Set the thumbscroll threshold to 20 pixels
        -elm_config_scroll_thumbscroll_threshold_set(20);
        - -

        Configuring Long Press

        - -

        Long press events can be configured using the Elementary Config API. Here, we get the current timeout before a long press event happens and increase it by 1 second:

        - -
        // Get the long press timeout
        -double lp_timeout = elm_config_longpress_timeout_get();
        -
        -// Increase it by 1 second
        -elm_config_longpress_timeout_set(lp_timeout + 1.0);
        - -

        Configuring Tooltips

        - -

        The duration after which a tooltip is shown can be configured through the Elementary Config API. Here, we set the delay to 2 seconds:

        - -
        elm_config_tooltip_delay_set(2.0);
        - -

        Configuring the Password Show Last Feature

        - -

        The password show last feature enables users to view the last input entered for a few seconds before it is masked. The following functions allow you to set this feature in the password mode of the entry component and to change the duration over which the input has to be visible.

        - -

        First, we enable the password show last feature:

        - -
        elm_config_password_show_last_set(EINA_TRUE);
        - -

        Then, we set the visibility timeout to 5 seconds:

        - -
        elm_config_password_show_last_timeout_set(5.0);
        - -

        Configuring the Elementary Engine

        - -

        We can use the Elementary Config API to set the rendering engine that Elementary will use to draw the windows. The following rendering engines are supported:

        - -
          -
        • "software_x11"
        • -
        • "fb"
        • -
        • "directfb"
        • -
        • "software_16_x11"
        • -
        • "software_8_x11"
        • -
        • "xrender_x11"
        • -
        • "opengl_x11"
        • -
        • "software_gdi"
        • -
        • "software_16_wince_gdi"
        • -
        • "sdl"
        • -
        • "software_16_sdl"
        • -
        • "opengl_sdl"
        • -
        • "buffer"
        • -
        • "ews"
        • -
        • "opengl_cocoa"
        • -
        • "psl1ght"
        • +
          +elm_config_focus_highlight_animate_set(EINA_TRUE);
          +
          +
        - -

        Here, we set the engine to "opengl_x11":

        - -
        elm_config_engine_set("opengl_x11");
        - -

        Configuring the Access Mode

        - -

        When the access mode is active, information about an Elementary object is read when the object receives an EVAS_CALLBACK_MOUSE_IN event. Here, we activate the access mode:

        - -
        elm_config_access_set(EINA_TRUE);
        - -

        Configuring Selection

        - -

        Selection behavior can be set to be cleared when the entry component is unfocused:

        - -
        elm_config_selection_unfocused_clear_set(EINA_TRUE);
        - -

        Configuring Mirroring

        - -

        Elementary allows UI mirroring both on a single object and on the entire UI. If activated with the elm_object_mirrored_set() function, an Elementary UI component will display as if there was a vertical mirror in the middle of it. Only the controls and the disposition of the UI component are mirrored. Text is not mirrored.

        - -

        The default mirror mode of UI components can be set with the Elementary Config API. Here, we activate the mirror mode by default:

        - -
        elm_config_mirrored_set(EINA_TRUE);
        - -

        Configuring Frame Rate

        - -

        We can also set the frames per second (FPS) value for ecore_animator_frametime and edje_frametime calculations. Here, we set the FPS to 60:

        - -
        elm_config_fps_set(60.0);
        diff --git a/org.tizen.guides/html/native/ui/eom_n.htm b/org.tizen.guides/html/native/ui/eom_n.htm index 6986aef..facae06 100644 --- a/org.tizen.guides/html/native/ui/eom_n.htm +++ b/org.tizen.guides/html/native/ui/eom_n.htm @@ -10,7 +10,7 @@ - EOM + External Output Manager @@ -22,19 +22,19 @@
      -

      EOM

      +

      External Output Manager

      The External Output Manager (EOM) is a module for controlling the external output devices.

      -

      The main features of the EOM API include:

      +

      The main features of the External Output Manager API include:

      diff --git a/org.tizen.guides/html/native/ui/font_setting_n.htm b/org.tizen.guides/html/native/ui/font_setting_n.htm index 3d1189a..ce1efcb 100644 --- a/org.tizen.guides/html/native/ui/font_setting_n.htm +++ b/org.tizen.guides/html/native/ui/font_setting_n.htm @@ -20,14 +20,17 @@
      @@ -47,7 +50,8 @@
    • Setting the font using EDC
    • Changing the font and text size using the Edje Class: Text API (in mobile and wearable applications) -

      Certain words for text_class are reserved for the system default and used for applying the system setting about font and font size. To change the font on your textblock and text parts in the EDC according to the system setting, you can use the reserved words for the text class:

      +

      In the application, you can set a system-wide font and font size to text(textblock) parts with text classes (except tizen). When the system applies a new system-wide font and font size to the application, the font size of text(textblock) parts with the tizen text class are not affected.

      +

      The following words in the text_class definition are reserved for the system:

      • button
      • @@ -61,7 +65,6 @@
      • tizen
      -

      The tizen class is not affected by the system font settings.

      Set a specific ratio to a given font size for each object through the text class. If you give a negative value as font size, it is used as the percentage of the originally given font size. The following example code show set the font size as 150% of the given font size.

      @@ -71,6 +74,36 @@ elm_config_font_overlay_apply();
       
    +

    Applying System Font Settings

    + +

    Tizen provides a special "Tizen" font name. The "Tizen" font name does not match with any specific font; it is just an alias for a system-defined font (system font). When you create a text(textblock) part with the "Tizen" font name in the application's EDC, the system font is loaded into the user application when those objects are created. Additionally, you can apply the system font to a text or textblock part by using the text class, as described above.

    + +

    The following EDC example shows how to apply the system font to a TEXT or TEXTBLOCK part by using the "Tizen" font name and the tizen text class. As font name is "Tizen" and the font size is set to 36, the system font is loaded in size 36. If the system setting changes, this part loads the new system font. However, its font size is not changed, because the text class is tizen.

    + +
    +description 
    +{
    +   text 
    +   {
    +      font: "Tizen:style=Regular";
    +      font_size: 36;
    +      text_class: "tizen";
    +   }
    +}
    + +

    If the part has a predefined text classes other than tizen, its font size is resized as well.

    + +
    +description 
    +{
    +   text 
    +   {
    +      font: "Tizen:style=Regular";
    +      font_size: 36;
    +      text_class: "label";
    +   }
    +}
    +

    Supported Font Styles

    The font styles supported by the EFL are listed in the following table.

    diff --git a/org.tizen.guides/html/native/ui/main_loop_n.htm b/org.tizen.guides/html/native/ui/main_loop_n.htm index 7598bb6..f3980a9 100644 --- a/org.tizen.guides/html/native/ui/main_loop_n.htm +++ b/org.tizen.guides/html/native/ui/main_loop_n.htm @@ -24,7 +24,7 @@ @@ -32,9 +32,9 @@

    Related Info

    @@ -44,26 +44,26 @@

    Main Loop

    -

    The EFL are event-driven: The application is be polling for data, but listening for events to interact with it.

    +

    The EFL is event-driven. This means that the application polls for data, and listens for events to interact with it.

    -

    Ecore library provides the main loop abstraction. It gets data when data is available and sends the events so that costly polling threads are not needed. Ecore manages polling, timers, events, and file descriptor handling.

    - -

    When there is no ongoing event, it automatically enters an "idle" mode, leading to less power being consumed. It wakes up when needed.

    +

    The Ecore library provides the main loop abstraction. It gets data when data is available and sends the events so that costly polling threads are not needed. Ecore manages polling, timers, events, and file descriptors. When there is no ongoing event, the main loop automatically enters an idle mode, minimizing the power consumption. The loop wakes up when needed.

    Timers

    -

    Ecore provides timers for applications. Timers schedule events that are executed later at a specific time, be it once or even several times with an interval.

    -

    A timer callback prototype looks like Eina_Bool my_timed_cb(void *data). This function receives data from the application, and returns a Boolean value to specify whether it is called again or if it is done. The following macros are also provided:

    +

    Ecore provides timers, which schedule events that are executed later at a specific time. The event can occur once or several times at specific intervals.

    + +

    A timer callback prototype looks like the my_timed_cb() callback function. This function receives data from the application, and returns a Boolean value to specify whether it is called again or completed. The following macros are also provided:

      -
    • ECORE_CALLBACK_RENEW: function is called again after the timeout.
    • -
    • ECORE_CALLBACK_CANCEL: function is not called again, Ecore destroys automatically everything associated with the timer.
    • +
    • ECORE_CALLBACK_RENEW: the function is called again after the timeout.
    • +
    • ECORE_CALLBACK_CANCEL: the function is not called again, Ecore destroys automatically everything associated with the timer.
    -

    Adding a timer is done with ecore_timer_add(interval, function, data). The interval, specified in seconds, indicates when the given function is called, and receives the specified data as a parameter. It returns an Ecore_Timer object.

    - -

    To create a simple timer:

    +

    To create and destroy a timer:

    +
      +
    • To create a timer, use the ecore_timer_add() function. The interval, specified in seconds, indicates when the given function is called, and receives the specified data as a parameter. It returns an Ecore_Timer object. +

      In the following example, the my_timed_cb() function is run after 2 seconds and it receives my_data. It is renewed while its count variable value is under 5, and stops after that.

       Eina_Bool my_timed_cb(void *data)
       {
      @@ -77,37 +77,39 @@ Eina_Bool my_timed_cb(void *data)
       }
       ecore_timer_add(2.0, my_timed_cb, my_data);
       
      +
    • -

      In this example, the function my_timed_cb is run with after two seconds and it receives my_data. It is renewed while its count variable's value is under 5, and stops after that.

      - -

      Use ecore_timer_del(timer) to delete the timer. To delete the timer, it must still be running, that is, it has not returned a false value meaning that it cannot be called any more.

      - -

      Use ecore_timer_interval_set(timer, interval) to change the timer's interval, the interval being specified in seconds. If set during a timer call, this affects the next interval. Use ecore_timer_interval_get(timer) to get a timer's current interval.

      +
    • To delete the timer, use the ecore_timer_del() function. The timer to delete must still be running, that is, it has not returned a false value. If the timer is not running, the function cannot be called.
    • +
    -

    Use ecore_timer_pending_get(timer) to get a timer's pending time.

    +

    To manage a timer:

    +
      +
    • To change the timer's interval, use the ecore_timer_interval_set() function. The interval is specified in seconds. If set during a timer call, this affects the next interval. Use the ecore_timer_interval_get() function to get the timer's current interval.
    • -

      Delay the timer's next occurrence using ecore_timer_delay(timer, time), which adds the specified time to the current interval. It does not change the future occurrences' interval. You can also reset the current interval to its full value by using ecore_timer_reset(timer).

      +
    • To get the timer's pending time, use the ecore_timer_pending_get() function.
    • -

      Use ecore_timer_freeze(timer) to pause the currently running timer. The remaining time is saved and used again when the timer is resumed with ecore_timer_thaw(timer).

      +
    • To delay the timer's next occurrence, use the ecore_timer_delay() function. The function adds the specified time to the current interval. It does not change the future occurrences' interval. You can also reset the current interval to its full value by using the ecore_timer_reset() function.
    • -

      The timer infrastructure has a defined precision. Query its current value by using ecore_timer_precision_get(). A higher delay means that more timers can be run together. It diminishes the need to use system wake ups and thus lowers the power consumption.

      +
    • To pause the currently running timer, use the ecore_timer_freeze() function. The remaining time is saved and used again when the timer is resumed with the ecore_timer_thaw() function.
    • -

      Set the precision using ecore_timer_precision_set(precision). This sets it for all timers. For example, there are two timers, one that expires in a 2.0s and another that expires in 2.1s. The precision is set to 0.1s, then Ecore requests for the next expiration to happen in 2.1s and run both callbacks at once, instead of one at 2.0s and another one 0.1s later. However, if there were not one in 2.1s, the timeout would have been at the minimum interval, 2s.

      +
    • To query the current value of the defined timer infrastructure precision, use the ecore_timer_precision_get() function. A higher delay means that more timers can be run together. It diminishes the need to use system wake-ups and thus lowers the power consumption. +

      To set the precision, use the ecore_timer_precision_set() function. This sets the precision for all timers. For example, there are 2 timers, one that expires in 2.0 seconds and another that expires in 2.1 seconds. If the precision is set to 0.1 seconds, Ecore requests the next expiration to happen in 2.1 seconds and runs both callbacks at once, instead of one at 2.0 seconds and the other one 0.1 seconds later. However, if there is no timer expiring in 2.1 seconds, the timeout is at the minimum interval, 2 seconds.

    • +

    Animators

    -

    Animators are a specific type of timers, specially designed for on-screen animation purposes:

    +

    Animators are a specific type of timer, specially designed for on-screen animation purposes:

    • The time interval is usually known when they are created.
    • -
    • They are called at each screen refresh, however that interval can vary: it may be dependant upon the system load, the target power consumption, and other factors; the exact interval is not really relevant.
    • +
    • They are called at each screen refresh and their interval can vary. The interval can depend on the system load, the target power consumption, and other factors. The exact interval is not relevant.
    -

    Due to that, Ecore provides the Ecore animator subsystem.

    +

    To implement animators, Ecore provides the Ecore animator subsystem.

    Forever-running Animator

    -

    To create an animation which runs for an indefinite time, the prototype is exactly the same as when using Ecore timers:

    +

    To create an animation that runs for an indefinite time:

     Eina_Bool my_anim_cb(void *data)
    @@ -122,16 +124,17 @@ Eina_Bool my_anim_cb(void *data)
     ecore_animator_add(my_anim_cb, my_data);
     
    -

    This example looks the same as the one using an Ecore timer, save for the use of ecore_animator_add instead of ecore_timer_add. ecore_animator_add takes the function to call back and data to pass it, and returns an Ecore_Animator object. However, this time, the function is called at a system-defined interval until it returns ECORE_CALLBACK_CANCEL instead of ECORE_CALLBACK_RENEW.

    +

    This example looks the same as the one using an Ecore timer. The ecore_animator_add() function takes the callback function and data to pass to it, and returns an Ecore_Animator object. The function is called at a system-defined interval until it returns ECORE_CALLBACK_CANCEL instead of ECORE_CALLBACK_RENEW.

    Specific-duration Animator

    -

    An animator callback has a different prototype Eina_Bool my_anim_cb(void *data, double position).

    +

    An animator callback for an animator running a specific time has a different prototype than the forever running animator.

    -

    This function receives data and a position which represents the current time among the full timeline, 0 meaning the beginning of the animation, and 1 meaning the end of the animation, returning ECORE_CALLBACK_CANCEL to abort or ECORE_CALLBACK_RENEW to continue.

    - -

    The animator itself is created using ecore_animator_timeline_add(runtime, function, data). runtime specifies the animator duration, function is the one to call, and data is the data to pass to the function and is optional.

    +

    This callback function receives both data and a position which represents the current time among the full timeline, 0 meaning the beginning of the animation, and 1 meaning the end of the animation, returning ECORE_CALLBACK_CANCEL to abort, or ECORE_CALLBACK_RENEW to continue.

    +

    To create and destroy the animator:

    +
      +
    • To create the animator, use the ecore_animator_timeline_add() function. The first parameter specifies the animator duration, the second parameter is the callback function, and the third parameter is the data to pass to the callback. The data parameter is optional.
       Eina_Bool my_anim_cb(void *data, double position)
       {
      @@ -143,50 +146,50 @@ Eina_Bool my_anim_cb(void *data, double position)
       ecore_animator_timeline_add(5., my_anim_cb, my_data);
       
      -

      In this example, the animator is specified to run for five seconds. The function returns ECORE_CALLBACK_CANCEL as soon as the position among the timeline passed half of the duration, so 2.5s.

      +

      In this example, the animator is specified to run for five seconds. The function returns ECORE_CALLBACK_CANCEL as soon as the position among the timeline passes half of the duration, 2.5 seconds.

      Ecore can generate a virtual position from the original one using ecore_animator_pos_map(position, map, v1, v2). Several maps are available:

        -
      • ECORE_POS_MAP_LINEAR: linear from 0.0 to 1.0
      • -
      • ECORE_POS_MAP_ACCELERATE: start slow, then speed up
      • -
      • ECORE_POS_MAP_DECELERATE: start fast, then slow down
      • -
      • ECORE_POS_MAP_SINUSOIDAL: start slow, speed up, then slow down at end
      • -
      • ECORE_POS_MAP_ACCELERATE_FACTOR: start slow, then speed up, v1 being a power factor: 0.0 is linear, 1.0 is standard acceleration, 2.0 is a much more pronounced acceleration (squared), 3.0 is cubed, etc
      • -
      • ECORE_POS_MAP_DECELERATE_FACTOR: start fast, then slow down, v1 being a power factor: 0.0 is linear, 1.0 is standard deceleration, 2.0 is a much more pronounced deceleration (squared), 3.0 is cubed, etc
      • -
      • ECORE_POS_MAP_SINUSOIDAL_FACTOR: start slow, speed up, then slow down at end, v1 being a power factor: 0.0 is linear, 1.0 is a standard sinusoidal, 2.0 is a much more pronounced sinusoidal (squared), 3.0 is cubed, etc
      • -
      • ECORE_POS_MAP_DIVISOR_INTERP: start at gradient * v1, interpolated via power of v2 curve
      • -
      • ECORE_POS_MAP_BOUNCE: start at 0.0, then drop like a ball bouncing to the ground at 1.0, and bounce v2 times, with a decay factor of v1
      • -
      • ECORE_POS_MAP_SPRING: start at 0.0, then wobble like a spring rest position 1.0, and wobble v2 times, with decay factor of v1
      • +
      • ECORE_POS_MAP_LINEAR: linear from 0.0 to 1.0.
      • +
      • ECORE_POS_MAP_ACCELERATE: start slow, then speed up.
      • +
      • ECORE_POS_MAP_DECELERATE: start fast, then slow down.
      • +
      • ECORE_POS_MAP_SINUSOIDAL: start slow, speed up, then slow down at the end.
      • +
      • ECORE_POS_MAP_ACCELERATE_FACTOR: start slow, then speed up, v1 being a power factor: 0.0 is linear, 1.0 is standard acceleration, 2.0 is a much more pronounced acceleration (squared), and 3.0 is cubed.
      • +
      • ECORE_POS_MAP_DECELERATE_FACTOR: start fast, then slow down, v1 being a power factor: 0.0 is linear, 1.0 is standard deceleration, 2.0 is a much more pronounced deceleration (squared), and 3.0 is cubed.
      • +
      • ECORE_POS_MAP_SINUSOIDAL_FACTOR: start slow, speed up, then slow down at the end, v1 being a power factor: 0.0 is linear, 1.0 is a standard sinusoidal, 2.0 is a much more pronounced sinusoidal (squared), and 3.0 is cubed.
      • +
      • ECORE_POS_MAP_DIVISOR_INTERP: start at gradient * v1, interpolated with the power of v2 curve.
      • +
      • ECORE_POS_MAP_BOUNCE: start at 0.0, then drop like a ball bouncing to the ground at 1.0, and bounce v2 times, with a decay factor of v1.
      • +
      • ECORE_POS_MAP_SPRING: start at 0.0, then wobble like a spring to the rest position 1.0, and wobble v2 times, with a decay factor of v1.

      Figure: Position maps

      Position maps

      +
    • -

      Delete an animator using ecore_animator_del(animator). To delete the animator, it must still be running, that is, it has not returned a false value meaning that it cannot be called any more.

      - -

      Use ecore_animator_freeze(animator) to pause a currently running animator. Note that time continues ticking even if an animator is frozen, and that resuming the animation using ecore_animator_thaw(animator) not actually resumes if the full runtime meanwhile has been passed.

      +
    • To destroy the animator, use the ecore_animator_del() function. The animator to destroy must be running, that is, it has not returned a false value. If the animator is not running, the function cannot be called.
    • +
    -

    Query Ecore for the interval between two animator calls by using ecore_animator_frametime_get(). Use ecore_animator_frametime_set(interval) to change it. Note that too small a value causes performance and power consumption issues, and too high value makes the animation jerky.

    +

    To manage the animator:

    +
      +
    • To pause the currently running animator, use the ecore_animator_freeze() function. Note that time continues ticking even if the animator is frozen, and that resuming the animation using the ecore_animator_thaw() function does not actually resume, if the full runtime has been passed in the meanwhile.
    • -

      Handling File Descriptors

      +
    • To query Ecore for the interval between 2 animator calls, use the ecore_animator_frametime_get() function.
    • -

      Ecore provides infrastructure to handle file descriptors monitoring, so that files do not have to be blocked or polled to read or write on them. Instead monitor sockets, pipes or other streams are used to get a file descriptor.

      +
    • To change the interval, use the ecore_animator_frametime_set(interval) function. Note that too small a value causes performance and power consumption issues, and too high a value makes the animation jerky.
    • +
    -

    Set callback using the following prototype: Eina_Bool _my_cb_func(void *data, Ecore_Fd_Handler *handler). Its first parameter is data passed to it (optional), the second one is the Ecore file descriptor handler. Its return value is, as most Ecore callbacks, ECORE_CALLBACK_RENEW or ECORE_CALLBACK_CANCEL. It tells Ecore whether it wants to be called again or is its treatment finished.

    +

    File Descriptors

    -

    Use ecore_main_fd_handler_add(fd, flags, function, data, buffer_function, buffer_data) to listen the events. Its parameters are defined as follows:

    +

    Ecore provides an infrastructure to monitor file descriptors, so that files do not have to be blocked or polled to read or write on them. Instead, monitor sockets, pipes, or other streams are used to get a file descriptor.

    +

    To manage the file descriptors:

      -
    • fd: this is the file descriptor to monitor.
    • -
    • flags: this indicates what Ecore file descriptor monitors: ECORE_FD_READ is for reading, ECORE_FD_WRITE is for writing, ECORE_FD_ERROR is for errors: define multiple values like ECORE_FD_READ | ECORE_FD_ERROR to monitor for both reading and errors.
    • -
    • function: the function to be called back.
    • -
    • data: some data passed to the function.
    • -
    • buffer_function: the function to call to check whether any data has been buffered and already read from the fd: this is for internal use only and must not be used (give NULL): its description is beyond the current guide's scope.
    • -
    • buffer_data: data to pass to buffer_function.
    • -
    +
  • To set a callback, use the _my_cb_func() function. Its first parameter is the data passed to it (optional), and the second one is the Ecore file descriptor handler. Its return value is, as in most Ecore callbacks, ECORE_CALLBACK_RENEW or ECORE_CALLBACK_CANCEL. It tells Ecore whether it wants to be called again or whether its treatment is finished.
  • + +
  • To listen to events, use the ecore_main_fd_handler_add() function.
  • -

    To wait for incoming data (that is, to read data) on the my_fd file descriptor, passing my_data:

    +
  • To wait for incoming data (that is, to read data) on the my_fd file descriptor, passing my_data:
     Eina_Bool my_fd_cb(void *data, Ecore_Fd_Handler *handler)
    @@ -199,12 +202,13 @@ Eina_Bool my_fd_cb(void *data, Ecore_Fd_Handler *handler)
     }
     ecore_main_fd_handler_add(my_fd, ECORE_FD_READ, my_fd_cb, my_data, NULL, NULL);
     
    +
  • -

    To delete a file descriptor handler, use ecore_main_fd_handler_del(handler). This does not close the file descriptor. Always delete the handlers before closing the actual file descriptors.

    +
  • To delete a file descriptor handler, use the ecore_main_fd_handler_del() function. This does not close the file descriptor. Always delete the handlers before closing the actual file descriptors.
  • -

    Use ecore_main_fd_handler_fd_get(handler) to get a handler's file descriptor.

    +
  • To get the handler's file descriptor, use the ecore_main_fd_handler_fd_get() function.
  • -

    Use ecore_main_fd_handler_active_get(handler, flag) to select whether a flag is active on a handler. For example, the handler is set to monitor both ECORE_FD_READ and ECORE_FD_ERROR. The following example finds out whether the function was called because of an error:

    +
  • To select whether a flag is active on a handler, use the ecore_main_fd_handler_active_get() function. For example, the handler is set to monitor both ECORE_FD_READ and ECORE_FD_ERROR. The following example finds out whether the function was called because of an error:
     Eina_Bool my_fd_cb(void *data, Ecore_Fd_Handler *handler)
    @@ -223,20 +227,26 @@ Eina_Bool my_fd_cb(void *data, Ecore_Fd_Handler *handler)
     }
     ecore_main_fd_handler_add(my_fd, ECORE_FD_READ | ECORE_FD_ERROR, my_fd_cb, my_data, NULL, NULL);
     
    +
  • -

    To change the flags the handler is monitoring, use ecore_main_fd_handler_active_set(handler, flags).

    +
  • To change the flags the handler is monitoring, use the ecore_main_fd_handler_active_set() function.
  • +

    Threads

    -

    EFL is not entirely thread-safe. This means that if some task is running in another thread and, for example, an Evas object shows the status progress of this task, the object cannot be updated from within the thread. This can only be done from the main thread, the one running the main loop.

    +

    EFL is not entirely thread-safe. This means that if a task is running in another thread and, for example, an Evas object shows the status progress of this task, the object cannot be updated from within the thread. Updating can only be done from the main thread that runs the main loop.

    -

    Ecore provides a facility to have tasks be done on separate worker threads. It is not a simple wrapper around standard threads provided by the operating system. It makes it a lot easier to dispatch a worker function to perform some heavy tasks and then get the result once it completes, without blocking the application's UI. In addition, cancelling and rescheduling are easy to use and the several threads can be launched, since Ecore schedules them according to the number of processors the system has and the maximum amount of concurrent threads set for the application.

    +

    Ecore provides a facility to perform tasks on separate worker threads. It is not a simple wrapper around standard threads provided by the operating system. With Ecore threads, it is easier to dispatch a worker function to perform some heavy tasks and get the result once it completes. It does not block the application UI. It is also easy to cancel and reschedule threads. Several threads can be launched simultaneously, since Ecore schedules them according to the number of processors the system has and the maximum amount of concurrent threads set for the application.

    -

    Two kinds of Ecore threads exist: short jobs and feedback jobs. Short jobs are not giving any kind of information on their status to the parent, whereas feedback jobs are. The short jobs are best used for short computing-intensive snippets of code, whereas a typical example for the feedback jobs is an ongoing file download.

    +

    Ecore has 2 kinds of threads:

    +
      +
    • Short jobs do not give any kind of information on their status to the parent. They are best used for short computing-intensive snippets of code.
    • +
    • Feedback jobs give information on their status to the parent. They are best used for longer snippets requiring a feedback loop, such as an ongoing file download.
    • +
    -

    Ecore basically creates a pool of worker threads: the exact count is computed from the number of CPUs, cores, or may be specified by the application itself.

    +

    Ecore creates a pool of worker threads. The exact count is computed from the number of CPUs or cores, or it can be specified by the application itself.

    -

    When a worker thread is idle, it picks a job to execute from the waiting list until there is none left.

    +

    When a worker thread is idle, it picks a job to execute from the waiting list until there is none left. In the following example, there are 2 threads defined by my_short_job() and my_feedback_job(). Both threads take 2 parameters: some data passed to them, and the actual thread running. Call a callback when the jobs end, whether they are cancelled (my_job_cancel()) or end normally (my_job_end()).

     struct feedback_msg
    @@ -283,37 +293,45 @@ void my_job_cancel(void *data, Ecore_Thread *thread)
     }
     
     ecore_thread_run(my_short_job, my_job_end, my_job_cancel, my_data);
    -ecore_thread_feedback_run(my_feedback_job, my_feedback_job_notify, my_job_end, my_job_cancel, my_data, EINA_FALSE);
    +ecore_thread_feedback_run(my_feedback_job, my_feedback_job_notify, my_job_end, 
    +                          my_job_cancel, my_data, EINA_FALSE);
     
    -

    In this example, there are two threads defined by my_short_job and my_feedback_job. Both threads take two parameters: some data passed to them, and the actual thread running. Call a callback when the jobs are ended, whether they are cancelled (my_job_cancel), or ended normally (my_job_end).

    +

    To manage threads:

    -

    Cancelling a thread is done by using ecore_thread_cancel(thread). However, note that this is done cooperatively: the thread continues to run until it exists. Call ecore_thread_check(thread) regularly to check whether the thread as been marked for cancellation and exit if true.

    +
      +
    • To cancel a thread, use the ecore_thread_cancel() function. However, note that this is done cooperatively: the thread continues to run until it exists. Call the ecore_thread_check() function regularly to check whether the thread has been marked for cancellation and exit if true.
    • -

      Run threads that are not accounted for in the worker threads pool. For that, the last parameter of ecore_thread_feedback_run must be set to EINA_TRUE.

      +
    • To run threads that are not accounted for in the worker thread pool, use the ecore_thread_feedback_run() function with the last parameter set to EINA_TRUE. -

      The feedback message a thread sends as notification can basically be any kind of data. Here it is a simple integer, but it can be as complex as needed.

      +

      The feedback message a thread sends as notification can be any kind of data. In the above example, it is a simple integer, but it can be as complex as needed.

      +
    • -

      A thread can ask to be executed later by using ecore_thread_reschedule(thread): it is added to the end of the pending tasks.

      +
    • To execute a thread later, use the ecore_thread_reschedule() function. This function is added to the end of the pending tasks.
    • -

      Get the maximum number of concurrent threads by using ecore_thread_max_get(). If needed, set it by using ecore_thread_max_set(count), or reset the default value using ecore_thread_max_reset().

      +
    • To get the maximum number of concurrent threads, use the ecore_thread_max_get() function. If needed, set it by using the ecore_thread_max_set() function, or reset the default value using the ecore_thread_max_reset() function.
    • -

      Query the number of active threads by using ecore_thread_active_get(), and the number of available worker threads by using ecore_thread_available_get(), which is basically the same as ecore_thread_max_get() - ecore_thread_active_get().

      +
    • To query the number of active threads, use the ecore_thread_active_get() function. To query the number of available worker threads, use the ecore_thread_available_get() function, which is basically the same as the ecore_thread_max_get() - ecore_thread_active_get().
    • +

    Idlers

    -

    When the rendering is done and all work finished, the main loop enters its idle state until the next loop. You can get functions of your application called back before the main loop enters or exits the idle state, or when it is in the idle state. They are respectively called Ecore_Idle_Enterer, Ecore_Idle_Exiter, and Ecore_Idler.

    +

    When the rendering is done and all work is finished, the main loop enters its idle state until the next loop. You can get the functions of your application called back before the main loop enters or exits the idle state, or when it is in the idle state. They are respectively called Ecore_Idle_Enterer, Ecore_Idle_Exiter, and Ecore_Idler.

    Figure: Idle loop

    Idle loop

    -

    Idle enterers, exiters, and idlers have the same prototype: Eina_Bool my_idler(void *data), receiving data, and returning ECORE_CALLBACK_RENEW or ECORE_CALLBACK_CANCEL to tell Ecore whether it wants to be called again or if its treatment is finished.

    +

    The idle enterers, exiters, and idlers all have the same prototype, my_idler(), which receives data and returns ECORE_CALLBACK_RENEW or ECORE_CALLBACK_CANCEL to tell Ecore whether it wants to be called again or is finished.

    -

    Adding an idler is done by using ecore_idler_add(callback, data), and deleting one is done by using ecore_idler_del(idler).

    +

    To manage the idlers:

    +
      +
    • To add an idler, use the ecore_idler_add() function.
    • +
    • To delete an idler, use the ecore_idler_del() function.
    • -

      For idle exiters, use ecore_idle_exiter_add(callback, data) and ecore_idle_exiter_del(exiter).

      +
    • To add and delete idle exiters, use the ecore_idle_exiter_add() and ecore_idle_exiter_del() functions.
    • -

      For idle exiters, use ecore_idle_enterer_add(callback, data) and ecore_idle_enterer_del(enterer). However, also ecore_idle_enterer_before_add(callback, data) is available if you want your function to be added at the top of the list so that it is called before the others.

      +
    • To add and delete idle enterers, use the ecore_idle_enterer_add() and ecore_idle_enterer_del() functions. The ecore_idle_enterer_before_add() function is also available, if you want your function to be added at the top of the list so that it is called before the others.
    • +
     Eina_Bool my_idle_enterer_cb(void *data)
    diff --git a/org.tizen.guides/html/native/ui/multiple_screens_n.htm b/org.tizen.guides/html/native/ui/multiple_screens_n.htm
    index cc63135..844439a 100644
    --- a/org.tizen.guides/html/native/ui/multiple_screens_n.htm
    +++ b/org.tizen.guides/html/native/ui/multiple_screens_n.htm
    @@ -29,10 +29,10 @@
     	

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/preferences_n.htm b/org.tizen.guides/html/native/ui/preferences_n.htm index 0cc628d..c665ef9 100644 --- a/org.tizen.guides/html/native/ui/preferences_n.htm +++ b/org.tizen.guides/html/native/ui/preferences_n.htm @@ -28,12 +28,12 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/scalability_n.htm b/org.tizen.guides/html/native/ui/scalability_n.htm index f908bab..dc46ecd 100644 --- a/org.tizen.guides/html/native/ui/scalability_n.htm +++ b/org.tizen.guides/html/native/ui/scalability_n.htm @@ -30,10 +30,10 @@

    Related Info

    diff --git a/org.tizen.guides/html/native/ui/threads_n.htm b/org.tizen.guides/html/native/ui/threads_n.htm index dfda71c..d28ca10 100644 --- a/org.tizen.guides/html/native/ui/threads_n.htm +++ b/org.tizen.guides/html/native/ui/threads_n.htm @@ -22,22 +22,20 @@ @@ -46,247 +44,117 @@

    Thread Usage

    -

    Threads are light processes: concurrent execution environments that are lighter than full-blown processes because they share some operating system resources.

    -

    They make it possible to do several things at the same time while using less resources and offering simpler synchronization and data exchange compared to processes.

    +

    Threads are concurrent execution environments that are lighter than full-blown processes because they share some operating system resources. Threads make it possible to do several things at the same time while using less resources and offering simpler synchronization and data exchange compared to processes.

    -

    Moving a blocking operation to a separate thread makes it possible to not block the event loop and keep the user interface reactive. Remember that blocking the event loop and using long-running callbacks means the application is be able to update its graphical user interface.

    +

    If you move a blocking operation to a separate thread, it cannot block the event loop and keeps the user interface reactive. Blocking the event loop and using long-running callbacks means the application cannot update its graphical user interface.

    -

    When to Use Threads

    +

    While threads can be useful, they are not always the best choice:

    -

    While threads are useful, the first rule to using them is to avoid them as much as possible: there are often better tools and approaches. For example, to do network transfers, use Ecore_Con which integrates with the event loop to provide an API based on callbacks.

    +
    • The first rule to using threads is to avoid them as much as possible, as there are often better tools and approaches. For example, to do network transfers, use Ecore_Con that integrates with the event loop to use a function based on callbacks. Being able to use such a function means that specific support work has been done in libraries. In some cases, using a function and libraries is impossible, and in those situations threads are required.
    • +
    • Use threads in CPU-intensive tasks and disk IOs. For example, a thread is the appropriate way to apply filters to an image or to a video without blocking the interface.
    • +
    • Use threads to take advantage of multiple available CPU cores, if the workload can be split into several units of work and spread across the cores. A typical example for an image processing application on a quad-core CPU is to process 4 images at once, each on 1 thread. For such tasks, the thread pool helps with the creation and scheduling of the threads, handling all the grunt work.
    -

    Being able to use such an API however means that specific support work has been done in libraries. However, in some cases, it is completely impossible: in those situations, threads are required.

    +

    Thread Safety

    -

    The most common use-cases are therefore CPU-intensive tasks and disk IOs. For example, a thread is the appropriate way to apply filters to an image or to a video without blocking the interface.

    +

    If several strings have to work on the same resources, conflicts can happen as the threads are run in parallel. For example, if thread A modifies several values while thread B is reading them, it is likely that some of the values read by B are outdated. Similar issues can happen if both threads are modifying data concurrently.

    -

    Threads also enable you to take advantage of the numerous CPU cores available if the workload is split into several units of work and spread across cores. A typical example for an image processing application on a quad-core CPU is to process 4 images at once, each on a thread. For such tasks, the thread pool which is presented below helps a lot with the creation and scheduling of threads (all of the grunt work is handled by the thread pool).

    +

    These kinds of conflicts are called race-conditions: depending on which thread is faster, the output changes and can be incorrect. Avoiding such issues is called thread safety. Thread safety involves critical sections, which are blocks of code that operate on shared resources and must not be accessed concurrently by another thread.

    -

    Thread Safety

    +

    The usual solution for ensuring exclusive access to shared resources is mutual exclusion: only 1 thread can operate on the data at any given time. Mutual exclusion is often implemented through locks. Before attempting to operate on a shared resource, the thread waits until it can lock something called a mutex (stands for mutual exclusion), then operates on the resource, and unlocks the mutex. Operating systems guarantee that only 1 thread can lock a mutex at a given time: this ensures that only 1 thread operates on the shared resource at one time.

    + +

    For more information on thread safety, see Low-level Functions.

    -

    If several strings have to work on the same resources, conflicts may happen as the threads are run in parallel. For example, if thread A modifies several values while thread B is reading them, it is likely that some of the values read by B are the old ones while others are the new ones. Similar issues can happen if both are modifying data concurrently.

    +

    Thread Pools

    -

    Such conflicts are called race-conditions: depending on which thread is faster, the output changes and may be incorrect.

    +

    Threads are operating system resources: while much lighter than processes, they still have a cost. Moreover, spawning a thousand threads means that each of them only gets 1/1000th of the total CPU time: each thread is progressed slowly and, in the worst case, the system wastes all of its time switching between threads without doing any actual work.

    -

    Avoiding such issues when threads are involved is called thread-safety. Critical sections are blocks of code that operate on shared resources that must not be accessed concurrently by another thread. The usual solution is mutual-exclusion: only one thread can operate on the data at any given time.

    +

    Thread pools solve this problem. In thread pools, upto a maximum number of threads are created on-demand and used to execute tasks. When the tasks are finished, they are kept alive but sleeping. This avoids the cost of creating and destroying them.

    -

    Mutual exclusion is often implemented through locks. Before attempting to operate on a shared resource, threads wait until they can lock something called a mutex (stands for mutual exclusion), operate on the resource and unlock the mutex. Operating systems guarantee that only one thread can lock a mutex at a given time: this ensures that only one thread operates on the shared resource at once.

    +

    In EFL, the thread pool is controlled by a thread_max parameter, which defines the maximum number of threads running at the same time. Another control feature is the func_end() callback that runs from the main loop thread after a task has completed and is typically used to extract the data from the finished task and make it available to the main loop.

    -

    Thread-safety is a large topic and you should read the low-level functions section if you do not know it or need a refresher. It has links to several online and offline resources on the topic.

    +

    To manage the maximum number of threads:

    -

    Costs of Threads and Use of Thread Pools

    +
      +
    • To retrieve the current value, use the ecore_thread_max_get() function. +
    • + +
    • To set the value, use the ecore_thread_max_set() function. The value has a maximum of 16 times the CPU count. +
    • -

      Threads are operating system resources: while much lighter than processes, they still have a cost. Moreover, spawning thousand threads means that each of them only gets 1/1000th of the total CPU time: each thread is progress slowly and, in the worst case, the system wastes all of its time switching between threads without doing any actual work.

      +
    • To reset the maximum number of threads, use the ecore_thread_max_reset() function. -

      A common solution is to use thread pools: threads, up to a maximum number, are created on-demand and used to execute tasks. When the tasks are finished, they are kept alive but sleeping. This avoids the cost to create and destroy them.

      +
    • -

      In the EFLs, the thread pool is controlled by a thread_max parameter: the maximum number of threads running at the same time. Another aspect is the func_end callback which runs from the mainloop thread after a task has completed and is typically used to extract the data from the just-finished task and make it available to the mainloop.

      +
    • To get the number of available threads in the pool, use the ecore_thread_available_get() function. The function returns the current maximum number of threads minus the number of running threads. The number can be a negative value, if the maximum number of threads has been lowered. +
    • +
    -

    The illustration below shows the occupancy of a hypothetical thread pool: there are several tasks, of which 4 are running (because the thread_max parameter of the pool is 4) and the others are waiting. There is no thread with its func_end currently called.

    +

    The following figures illustrate the thread pool. The first figure shows the occupancy of a hypothetical thread pool. There are several tasks, of which 4 are running. The thread_max parameter of the pool is 4, and the other tasks are waiting. There is no thread with its func_end() callback currently called.

    Figure: Thread pool, step 1

    Thread pool, step 1

    -

    When a task (the sepia filter on image1 for instance) finishes, the corresponding func_end function is invoked from the mainloop.

    +

    When a task, applying the sepia filter on image1, finishes, the corresponding func_end() function is invoked from the main loop.

    Figure: Thread pool, step 2

    Thread pool, step 2

    -

    With the task done, one of the thread from the pool is available again and another can run in it (adding the reverberation effect on audio3 in the example below).

    +

    With the task done, one of the threads from the pool becomes available, and another thread, adding the reverberation effect on audio3, can run in it.

    Figure: Thread pool, step 3

    Thread pool, step 3

    -

    The thread pool continues the same way forever, running tasks in its threads whenever there is one available.

    - -

    Ecore Functions

    - -

    Ecore offers a simplified API for common tasks involving threads in EFL applications. This applies to the typical scenario where the main thread creates another thread which then sends data back to the main one or calls GUI-related functions (which are not thread-safe).

    - -

    Creating Threads with Ecore

    - -

    Threads created through Ecore are integrated with the thread-pool by default and offer simple callback-based ways to interact with the main-loop. New threads are created as needed to run these functions until the maximum capacity of the thread pool is reached.

    - -

    Only Returning a Final Value to the Main Thread

    - -

    The basic API to create and run a thread is ecore_thread_run; it runs a function inside a thread from the thread pool and takes care of all the low-level work. Its prototype is as follows:

    - -
    -Ecore_Thread* ecore_thread_run(Ecore_Thread_Cb func_blocking,
    -                               Ecore_Thread_Cb func_end,
    -                               Ecore_Thread_Cb func_cancel,
    -                               const void * data)
    -
    - -

    The parameters are:

    - -
      -
    • func_blocking: the function that runs in the other thread
    • -
    • func_end: the function that calls from the main-loop when func_blocking finishes (optional, may be NULL)
    • -
    • func_cancel: the function that calls from the main loop when the thread is cancelled or fails to start (optional, may be NULL)
    • -
    • data: the pointer for additional data that is given as argument to the func_blocking, func_end, and func_cancel: the callbacks (optional, may be NULL)
    • -
    - -

    It returns the corresponding thread handler or NULL on failure.

    - -

    The type for the func_blocking, func_end and func_cancel callbacks is Ecore_Thread_Cb:

    - -
    -void (* Ecore_Thread_Cb)(void *data, Ecore_Thread *thread)
    -
    +

    As long as there are tasks to be done, the thread pool continues the same way, running tasks in its threads whenever a thread is available.

    -

    Therefore, the declaration of a matching function is:

    -
    -void f(void *data, Ecore_Thread *thread)
    -
    +

    Thread Management with Ecore

    -
      -
    • data: same as the data which was given as parameter to ecore_thread_run()
    • -
    • thread: a handle to the thread in which the function is running
    • -
    -

    The most common way to return data from one thread to the main one is to put a pointer to it in data. When the thread is aborted or finishes, one of func_cancel or func_end are called from the main-loop. The functions are running in the simpler context of a single thread running at once and therefore avoid race-conditions.

    +

    Ecore offers a simplified API for managing threads in EFL applications. The Ecore API applies to a typical scenario where the main thread creates another thread, which in turn sends data back to the main thread or calls GUI-related functions. GUI-related functions are not thread-safe.

    -

    This approach to returning data to the main thread is limited to the case where the data is shared between the main-loop thread and only another one. This does not prevent you from using the func_end callback to merge the results into a single data structure. For example, it is perfectly reasonable to add all the values computed by the threads to an Eina_List since all the operations on the list happen from a single thread and therefore one after the other and not concurrently.

    +

    Creating Threads with Ecore

    -

    Returning Values to the Main Thread

    +

    The threads created with Ecore are by default integrated with the thread pool and offer simple callback-based ways to interact with the main loop. New threads are created as needed until the maximum capacity of the thread pool is reached.

    -

    The ecore_thread_feedback_run function has more parameters in order to send intermediate feedback from the thread to the main-loop. Its prototype is shown below:

    +
    • To return values to the main thread: +

      Use the ecore_thread_feedback_run() function to send intermediate feedback from the thread to the main loop.

    • -
      -Ecore_Thread* ecore_thread_feedback_run(Ecore_Thread_Cb func_blocking,
      -                                        Ecore_Thread_Notify_Cb func_notify,
      -                                        Ecore_Thread_Cb func_end,
      -                                        Ecore_Thread_Cb func_cancel,
      -                                        const void * data,
      -                                        Eina_Bool try_no_queue)
      -
      +
    • To return only the final value to the main thread: +

      To create and run a thread, use the ecore_thread_run() function. It runs a function inside a thread from the thread pool and takes care of all the low-level work. It returns the corresponding thread handler or NULL on failure.

      -

      The parameters are:

      -
        -
      • func_blocking: same as in ecore_thread_run()
      • -
      • func_end: same as in ecore_thread_run()
      • -
      • func_cancel: same as in ecore_thread_run()
      • -
      • data: same as in ecore_thread_run()
      • -
      • func_notify: a callback to run from the main-loop whenever func_blocking calls in ecore_thread_feedback() is called
      • -
      • try_no_queue: a Boolean: if true, Ecore attempts to spawn a new thread regardless of the thread pool status, and only attempts to use the thread pool if this fails
      • -
      +

      The most common way to return data from one thread to the main thread is to put a pointer to it in the data. When the thread is aborted or finishes, either func_cancel() or func_end() is called from the main loop. The functions are running in the simpler context of a single thread running at once and therefore avoid race-conditions.

      -

      The type for the func_notify callback is given below:

      +

      The data pointer approach can only be used when the data is shared between the one thread and the main thread only. However, this does not prevent you from using the func_end() callback to merge the results into a single data structure. For example, you can add all the values computed by the threads to an Eina_List, as all the operations on the list happen from a single thread and therefore one after the other and not concurrently.

    -
    -void (* Ecore_Thread_Notify_Cb) (void *data, Ecore_Thread *thread, void *msg_data)
    -
    -

    Therefore, the declaration of a matching function is:

    +

    Running Callbacks from the Main Loop

    -
    -void notify_callback (void *data, Ecore_Thread *thread, void *msg_data)
    -
    +

    If you are performing operations in another thread and want to update a progress bar, the update operation must be done from the main thread. The simplest way is to use the ecore_main_loop_thread_safe_call_async() function, which takes a function and some data as parameters and instructs the main loop to execute the given function with the given data.

    +

    Depending on the kind of thread the function is called from, the process differs:

      -
    • data: same as the data which was given as parameter to ecore_thread_feedback_run()
    • -
    • thread: a handle to the thread in which the function is running
    • -
    • msg_data: the pointer given to ecore_thread_feedback()
    • -
    - -

    The prototype of the ecore_thread_feedback() function is shown below:

    - -
    -Eina_Bool ecore_thread_feedback(Ecore_Thread *thread,
    -                                const void *msg_data)
    -
    - -
      -
    • thread: the thread handle for the current thread; it is given to the various callbacks mentioned above
    • -
    • msg_data: a pointer to the data to send to the func_notify callback that runs from the main-loop
    • -
    +
  • If the function is called from a thread that is not the main one, the function sends a message to the main loop and returns quickly. The message is processed in order, similarly to others.
  • -

    Running Callbacks from the Mainloop

    - -

    If you are doing operations in an another thread and want to update a progress bar, the operation must be done from the main thread. The simplest way to do so is to use ecore_main_loop_thread_safe_call_async(). It takes a function and some data as parameter and instructs the main-loop to execute the given function with the given data.

    - -
    -void ecore_main_loop_thread_safe_call_async(Ecore_Cb callback, void *data)
    -
    - -

    This function takes two arguments and returns nothing. The arguments are:

    -
      -
    • callback: function to execute from the main-loop
    • -
    • data: data to pass to the callback when calling it
    • +
    • If the function is called from the main thread, the function is called immediately as if it were a direct call.
    -

    The declaration of Ecore_Cb is given below:

    - -
    -typedef void(* Ecore_Cb)(void *data)
    -
    - -

    Therefore the prototype for such a function is:

    - -
    -void _some_function(void *data);
    -
    - -

    If it is called from a thread that is not the main one, it sends a message to the main-loop and returns quickly. The message is processed similarly to others, i.e. in order.

    - -

    If it is called from the main thread, the function is called immediately as if it were a direct call.

    - -

    If you wish to wait until the callback is called and returns, use the ecore_main_loop_thread_safe_call_sync() function which is similar but synchronous:

    - -
    -void * ecore_main_loop_thread_safe_call_sync(Ecore_Data_Cb callback, void *data)
    -
    - -

    Also, since it is synchronous, it is able to return the value returned by the callback. This can be seen in the type of the callback which returns a void *:

    - -
    -typedef void * (* Ecore_Cb)(void *data)
    -
    - -

    Maximum Number of Threads in the Pool

    - -

    The maximum number of threads in Ecore's pool is governed by the thread_max parameter.

    - -

    Retrieve the current value with ecore_thread_max_get():

    - -
    -int ecore_thread_max_get(void)
    -
    - -

    Set the value with ecore_thread_max_set() (up to a maximum of 16 × CPU count):

    - -
    -void ecore_thread_max_set(int maximum)
    -
    - -

    If needed, reset the maximum number of threads:

    - -
    -int ecore_thread_max_reset(void)
    -
    - -

    A function related to these is ecore_thread_available_get(): it returns the number of running threads less the current maximum number of threads and may be negative if the maximum number of threads has been lowered.

    - -
    -int ecore_thread_available_get(void)
    -
    +

    If you want to wait until the callback is called and returns, use the ecore_main_loop_thread_safe_call_sync() function, which is similar but synchronous. Since it is synchronous, it can also return the value returned by the callback.

    Low-level Functions

    -

    Eina offers low-level APIs that are portable across operating system: locks, conditions, semaphores, barriers, spinlocks, etc. The API follows closely pthreads.

    +

    Eina offers low-level functions that are portable across the operating system, such as locks, conditions, semaphores, barriers, and spinlocks. The functions follow closely the logic of pthreads.

    -

    While these are useful, they are building blocks and are not usually useful to EFL applications considering the higher-level functions that are available in Ecore.

    +

    While these functions are useful, they are building blocks and not usually useful in EFL applications considering the higher-level functions that are available in Ecore.

    -

    A detailed presentation of threads is too large for this guide. The links below are good introductions to threads and pthreads in particular.

    +

    For an introduction to threads and pthreads in particular, see:

    -

    If you are already familiar with threads, refer to a standard pthreads documentation and the Eina reference documentation or to the API list below; remember that it is a very close mapping of the pthreads API.

    +

    If you are already familiar with threads, see the standard pthreads documentation and the Eina reference documentation, or the following function lists. Remember that the Eina functions map very closely to the pthreads functions.

    @@ -296,32 +164,32 @@ int ecore_thread_available_get(void) - - + + - - + + - - + + - - + + - - + + - - + + - - + +
    Locks (mutual exclusions)
    pthreads API Eina equivalent pthreads functionEina equivalent

    pthread_mutex_new()

    Eina_Bool eina_lock_new (Eina_Lock *mutex)

    pthread_mutex_new()eina_lock_new()

    pthread_mutex_destroy()

    void eina_lock_free (Eina_Lock *mutex)

    pthread_mutex_destroy()eina_lock_free()

    pthread_mutex_lock()

    Eina_Lock_Result eina_lock_take (Eina_Lock *mutex)

    pthread_mutex_lock()eina_lock_take()

    pthread_mutex_trylock()

    Eina_Lock_Result eina_lock_take_try (Eina_Lock *mutex)

    pthread_mutex_trylock()eina_lock_take_try()

    pthread_mutex_unlock()

    Eina_Lock_Result eina_lock_release (Eina_Lock *mutex)

    pthread_mutex_unlock()eina_lock_release()

    none (prints debug information on the lock)

    void eina_lock_debug (const Eina_Lock *mutex)

    none (prints debug information on the lock)eina_lock_debug()
    @@ -334,66 +202,70 @@ int ecore_thread_available_get(void) -pthreads API -Eina equivalent +pthreads function +Eina equivalent -

    pthread_cond_init()

    -

    Eina_Bool eina_condition_new (Eina_Condition *cond, Eina_Lock *mutex)

    +pthread_cond_init() +eina_condition_new() -

    pthread_cond_destroy

    -

    void eina_condition_free (Eina_Condition *cond)

    +pthread_cond_destroy +eina_condition_free() -

    pthread_cond_wait()

    -

    Eina_Bool eina_condition_wait (Eina_Condition *cond)

    +pthread_cond_wait() +eina_condition_wait() -

    pthread_cond_timedwait()

    -

    Eina_Bool eina_condition_timedwait (Eina_Condition *cond, double t)

    +pthread_cond_timedwait() +eina_condition_timedwait() -

    pthread_cond_broadcast()

    -

    Eina_Bool eina_condition_broadcast (Eina_Condition *cond)

    +pthread_cond_broadcast() +eina_condition_broadcast() -

    pthread_cond_signal()

    -

    Eina_Bool eina_condition_signal (Eina_Condition *cond)

    +pthread_cond_signal() +eina_condition_signal() - + - - + + - - + + - - + + - - + + - - + + - - + +
    RWLocks (Read-Write Locks, for multiple-readers/single-writer scenarios)RWLocks (Read-write locks, for multiple-readers/single-writer scenarios)
    pthreads API Eina equivalent pthreads functionEina equivalent

    pthread_rwlock_init()

    Eina_Bool eina_rwlock_new (Eina_RWLock *mutex)

    pthread_rwlock_init() +eina_rwlock_new()

    pthread_rwlock_destroy()

    void eina_rwlock_free (Eina_RWLock *mutex)

    pthread_rwlock_destroy()eina_rwlock_free()

    pthread_rwlock_rwlock_rdlock()

    Eina_Lock_Result eina_rwlock_take_read (Eina_RWLock *mutex)

    pthread_rwlock_rwlock_rdlock() +eina_rwlock_take_read()

    pthread_rwlock_rwlock_wrlock()

    Eina_Lock_Result eina_rwlock_take_write (Eina_RWLock *mutex)

    pthread_rwlock_rwlock_wrlock() +eina_rwlock_take_write()

    pthread_rwlock_unlock()

    Eina_Lock_Result eina_rwlock_release (Eina_RWLock *mutex)

    pthread_rwlock_unlock() +eina_rwlock_release()
    @@ -406,91 +278,93 @@ int ecore_thread_available_get(void) -pthreads API -Eina equivalent +pthreads function +Eina equivalent -

    pthread_key_create()

    -

    Eina_Bool eina_tls_new (Eina_TLS *key)

    +pthread_key_create() +eina_tls_new() -

    pthread_key_delete()

    -

    void eina_tls_free (Eina_TLS key)

    +pthread_key_delete() +eina_tls_free() -

    pthread_getspecific()

    -

    void * eina_tls_get (Eina_TLS key)

    +pthread_getspecific() +eina_tls_get() -

    pthread_setspecific

    -

    Eina_Bool eina_tls_set (Eina_TLS key, const void *data)

    +pthread_setspecific +eina_tls_set() - + - - + + - - + + - - + + - - + + - - + +
    Semaphores (access restrictions for set of resources)Semaphores (access restrictions for a set of resources)
    pthreads API Eina equivalent pthreads functionEina equivalent

    sem_init()

    Eina_Bool eina_semaphore_new (Eina_Semaphore *sem, int count_init)

    sem_init()eina_semaphore_new()

    sem_destroy()

    Eina_Bool eina_semaphore_free (Eina_Semaphore *sem)

    sem_destroy()eina_semaphore_free()

    sem_wait()

    Eina_Bool eina_semaphore_lock (Eina_Semaphore *sem)

    sem_wait()eina_semaphore_lock()

    sem_post()

    Eina_Bool eina_semaphore_release (Eina_Semaphore *sem, int count_release)

    sem_post()eina_semaphore_release()
    - + - - + + - - + + - - + + - - + +
    TLS (Thread-Local Storage)Barriers
    pthreads API Eina equivalent pthreads functionEina equivalent

    pthread_barrier_init()

    Eina_Bool eina_barrier_new (Eina_Barrier *barrier, int needed)

    pthread_barrier_init()eina_barrier_new()

    pthread_barrier_destroy()

    void eina_barrier_free (Eina_Barrier *barrier)

    pthread_barrier_destroy()eina_barrier_free()

    pthread_barrier_wait()

    Eina_Bool eina_barrier_wait (Eina_Barrier *barrier)

    pthread_barrier_wait()eina_barrier_wait()
    -

    Examples

    +

    Thread Use Examples

    + +

    The following examples display a window with a label. An auxiliary thread semi-regularly changes the text of the label. If you want to display a regular animation, use the Ecore animators described in the Main Loop guide.

    -

    The two examples below display a window with only a label. An auxiliary thread semi-regularly changes the text of the label. Note that if you want to do a regular animation, use Ecore animators which are described in the Main Loop guide.

    +

    To use the ecore_thread_feedback() function:

    -

    Using ecore_thread_feedback()

    +
      -

      The first example uses ecore_thread_feedback() to call the GUI functions from the main thread. The function that is used to handle the feedback simply sets the text of a label:

      +
    1. Implement the GUI function that sets the text of a label and can be called from the main thread.
       static void
      @@ -502,8 +376,8 @@ _set_label_text(void *data, Ecore_Thread *thread __UNUSED__, void *msgdata)
          elm_object_text_set(ad->label, buf);
       }
       
      - -

      The feedback is sent from the function shown below; it does nothing besides sleeping and sending feedback.

      +
    2. +
    3. Send the feedback from the other thread using the ecore_thread_feedback() function. The following function does nothing besides sending the feedback and sleeping.
       static void
      @@ -511,20 +385,21 @@ _long_function(void *data __UNUSED__, Ecore_Thread *thread)
       {
          int iteration;
          // Change the text roughly every 1 second. This is only an example; if you
      -   // want to do that, use ecore animators!
      +   // want regular animations, use Ecore animators!
          for (iteration = 0; ; iteration++) 
          {
      -      // Since we are running from another thread, we need to take special
      +      // Since you are running from another thread, you need to take special
             // care and instead send data to the main thread and have it run the
      -      // feedback function given when creating the thread.
      +      // feedback function given when creating the thread
             ecore_thread_feedback(thread, (void*)(uintptr_t)iteration);
      -      // Sleep for roughly one second.
      +      // Sleep for roughly one second
             sleep(1);
          }
       }
       
      +
    4. -

      Create a function that is called when the thread exits. In the example, this is called only right before the application exits but if the blocking function was more complex, it can trigger it.

      +
    5. Create an end function that is called when the thread exits. In this example, the end function is called only right before the application exits. However, if the blocking function is more complex, it can trigger the end function.
       static void
      @@ -534,18 +409,20 @@ _end_func(void *data, Ecore_Thread *thread __UNUSED__)
          elm_object_text_set(ad->label, "Ticks over");
       }
       
      +
    6. -

      The final bit is a call to ecore_thread_feedback_run() which starts the thread.

      +
    7. Call the ecore_thread_feedback_run() function to start the thread:
       ecore_thread_feedback_run(_long_function, _set_label_text, _end_func, NULL, ad, EINA_FALSE);
       
      +
    8. +
    -

    Using ecore_main_loop_thread_safe_call_sync()

    +

    To use the ecore_main_loop_thread_safe_call_sync() function:

    -

    The second example is very similar to the first one except that it uses ecore_main_loop_thread_safe_call_sync() to do its GUI operations.

    - -

    The callback receives data as a structure and alternatively displays "Tick d" or "Tock d".

    +
      +
    1. Implement the GUI function that sets the text of a label and can be called from the main thread. The function receives data as a structure and alternatively displays "Tick d" or "Tock d".
       struct thd 
      @@ -559,17 +436,15 @@ _set_label_text_tick_tock(void *data)
       {
          char buf[64];
          struct thd *thd = data;
      -   snprintf(buf, sizeof(buf),
      -   "%s %d",
      -   (thd->tick_not_tock ? "Tick" : "Tock"),
      -   thd->iteration);
      +   snprintf(buf, sizeof(buf), "%s %d", (thd->tick_not_tock ? "Tick" : "Tock"), thd->iteration);
          elm_object_text_set(thd->ad->label, buf);
       
          return NULL;
       }
       
      +
    2. -

      The function in the thread is also slightly larger since it needs to differentiate between ticks and tocks:

      +
    3. Use the ecore_main_loop_thread_safe_call_sync() function call the GUI function. Differentiate between the ticks and the tocks:
       static void
      @@ -589,13 +464,15 @@ _long_function_tick_tock(void *data, Ecore_Thread *thread __UNUSED__)
          free(thd);
       }
       
      +
    4. -

      Finally, starting the thread is done through ecore_thread_run() and is therefore very similar to the previous example.

      +
    5. Start the thread through the ecore_thread_run() function:
       ecore_thread_run(_long_function_tick_tock, _end_func, NULL, ad);
       
      - +
    6. +
    diff --git a/org.tizen.guides/html/native/ui/ui_component_mn.htm b/org.tizen.guides/html/native/ui/ui_component_mn.htm index 459bb15..1e99b22 100644 --- a/org.tizen.guides/html/native/ui/ui_component_mn.htm +++ b/org.tizen.guides/html/native/ui/ui_component_mn.htm @@ -29,7 +29,7 @@

    Related Info

    @@ -308,13 +308,13 @@ parts

    In this chapter, we explain how UI components are built in a hierarchical manner, how to build a minimal Elementary application, and what the differences are between the callbacks that can be registered for UI components.

    -

    Elementary Basics

    +

    Elementary

    Elementary Configuration

    -

    Elementary can be configured using profiles. This chapter details some configuration items that can be modified to tweak the use of Elementary.

    +

    Elementary can be configured using profiles. These chapters detail some configuration items that can be modified to tweak the use of Elementary.

    -

    Elementary Configuration

    +

    Managing Elementary Profiles and Configuring Elementary Options

    Components

    diff --git a/org.tizen.guides/html/native/ui/ui_component_wn.htm b/org.tizen.guides/html/native/ui/ui_component_wn.htm index 2becada..2a66324 100644 --- a/org.tizen.guides/html/native/ui/ui_component_wn.htm +++ b/org.tizen.guides/html/native/ui/ui_component_wn.htm @@ -29,7 +29,7 @@

    Related Info

    @@ -308,13 +308,13 @@ parts

    In this chapter, we explain how UI components are built in a hierarchical manner, how to build a minimal Elementary application, and what the differences are between the callbacks that can be registered for UI components.

    -

    Elementary Basics

    +

    Elementary

    Elementary Configuration

    -

    Elementary can be configured using profiles. This chapter details some configuration items that can be modified to tweak the use of Elementary.

    +

    Elementary can be configured using profiles. These chapters detail some configuration items that can be modified to tweak the use of Elementary.

    -

    Elementary Configuration

    +

    Managing Elementary Profiles and Configuring Elementary Options

    Components

    diff --git a/org.tizen.guides/html/native/ui/ui_guide_n.htm b/org.tizen.guides/html/native/ui/ui_guide_n.htm index 41076bc..63b3622 100644 --- a/org.tizen.guides/html/native/ui/ui_guide_n.htm +++ b/org.tizen.guides/html/native/ui/ui_guide_n.htm @@ -47,7 +47,7 @@
  • EFL UTIL

    Enables you to manage notification window levels.

  • Multiple Screen Support

    Enables you to design applications for different kinds of screens.

  • Scalability Support

    Enables you to design applications so that their UI can be scaled for diverse devices without problems.

  • -
  • EOM

    Enables you to handle external output devices.

  • +
  • External Output Manager

    Enables you to handle external output devices.

  • diff --git a/org.tizen.guides/html/native/uix/ime_n.htm b/org.tizen.guides/html/native/uix/ime_n.htm new file mode 100644 index 0000000..e947a7b --- /dev/null +++ b/org.tizen.guides/html/native/uix/ime_n.htm @@ -0,0 +1,112 @@ + + + + + + + + + + + + + Input Method + + + + + +
    + +

    Input Method

    + +

    The input method editor (IME) is an input panel (keyboard) that lets the user input text and the platform receive the entered data. The user can select an IME as their default keyboard in the device Settings application.

    + +

    You can create a Tizen native IME application that provides a new IME. You can start the IME application life-cycle, interact with the current IME UI state, and retrieve attributes and events.

    + +

    The main features of the Input Method API include:

    + +
      +
    • Managing the IME life-cycle +

      The system can have multiple keyboards, and the user can choose which one to use as the default keyboard. The IME application starts its life-cycle when it is selected as the default keyboard. The following figure shows the IME application life-cycle.

      + +

      Figure: IME application life-cycle

      +

      IME application life-cycle

      + +

      The IME application runs as follows:

      +
        +
      1. Once the IME application is started, the create() callback function is called.
      2. +
      3. When a text input UI control gets the focus, the show() callback function is called. +

        The IME application can call Input Method APIs to interact with the UI control. The event callback functions are called when the UI control state changes. When the text input UI control loses the focus, the hide() callback function is called.

      4. +
      5. When the IME application is finished, the terminate() callback function is called.
      +
    • + +
    • Managing the main loop and event callback functions +

      The IME application must implement the ime_app_main() function. It is the main entry point, in which you can register event callback functions and call the ime_run() function to start the main loop.

      +

      During its life-cycle, the IME application can receive a number of events from the Tizen input service framework through the callback functions. You must register the mandatory create(), terminate(), show(), and hide() callbacks. Other callbacks can be registered as required by the specific IME application.

    • + +
    • Showing and hiding the keyboard +

      When an associated text input UI control has the focus, the active keyboard is requested to be shown. When the text input UI control loses the focus, the keyboard is requested to be hidden.

      +

      The show() and hide() callback functions are used to manage the keyboard visibility, and the IME application must register both of them when starting the IME main loop.

      +

      The client application can set various configurations for each text input UI control, such as the cursor position, key layout type, return key type, and flags of predictive text. The configurations are delivered to the IME application though the show() callback function, to allow the keyboard to show the correct look to the user.

    • + +
    • Using the keyboard option menu +

      Each keyboard can offer its own option menu to allow the user to manage the keyboard settings. Nowadays, most platforms provide the keyboard option menu from the device Settings application or from the keyboard directly.

      +

      You can register callback functions that are called when the keyboard option menu opens or closes. These callback functions can be registered before the ime_run() function call in the ime_app_main() function.

      +

      The device Settings application triggers the callback function to open the keyboard option menu. The keyboard itself can also trigger the callback function to open its option menu.

    + +

    Input Method Manager

    +

    The Input Method Manager (in mobile and wearable applications) is a module used to manage the installed IMEs. You can use it to open the installed IME list or selector menu after your IME application is installed, and guide the user to select the installed IME:

    + +
      +
    • Showing the IME list +

      You can request the installed IME list menu to be opened. If a new IME has been installed, the user can see its name in the IME list, and can use the toggle button to enable the keyboard they want. All keyboards enabled in the IME list are shown in the IME selector to allow the user to select them as the default keyboard.

      +

      Figure: IME list

      +

      IME list

      +
    • +
    • Showing the IME selector +

      You can request the IME selector menu to be opened. When the user opens the IME selector menu, it shows all the keyboards enabled in the IME list. The user can change the default keyboard by selecting a new one. By clicking Select keyboard, the user can return to the IME list menu to enable a new IME.

      +

      Figure: IME selector

      +

      IME selector

      +
    • +
    • Checking the IME status +

      You can check whether a specific IME is enabled or disabled in the system keyboard setting. You can also check which IME is currently selected as the default keyboard. These features are useful when the user installs a new keyboard.

    • +
    + + + + +
    + +Go to top + + + + + + + diff --git a/org.tizen.guides/html/native/uix/uix_guide_n.htm b/org.tizen.guides/html/native/uix/uix_guide_n.htm index 5d260b8..1389874 100644 --- a/org.tizen.guides/html/native/uix/uix_guide_n.htm +++ b/org.tizen.guides/html/native/uix/uix_guide_n.htm @@ -39,8 +39,10 @@

    The main UIX features are:

      -
    • TTS

      Synthesize text into sound data and play it.

    • -
    • STT

      Recognize sound data recorded by the user and send the result as text.

    • +
    • TTS

      Enables you to synthesize text into sound data and play it.

    • +
    • STT

      Enables you to recognize sound data recorded by the user and send the result as text.

    • +
    • Voice Control

      Enables you to let the user control the device through voice commands.

    • +
    • Input Method

      Enables you to create an IME application that provides a new keyboard for the user.

    diff --git a/org.tizen.guides/html/native/uix/voicecontrol_elm_n.htm b/org.tizen.guides/html/native/uix/voicecontrol_elm_n.htm new file mode 100644 index 0000000..5689bbd --- /dev/null +++ b/org.tizen.guides/html/native/uix/voicecontrol_elm_n.htm @@ -0,0 +1,228 @@ + + + + + + + + + + + + + Voice control elementary + + + + + +
    + +

    Voice control elementary

    + +

    You can register voice commands for EFL-supported UI components to allow the user to interact with visible UI components inside the application using their voice. The Voice control elementary library recognizes spoken commands from registered UI components.

    + +

    The following figure illustrates the application screen when the Voice control elementary features are enabled. When the screen is updated, any UI components that have a registered command and hint are shown with a tooltip (hint). When the user speaks the hint, the callback function of the action related to the UI component is executed.

    +

    Figure: Voice command hints on the screen

    +

    Voice command hints on the screen

    + +

    You have no need to consider how to recognize voice commands or start and stop the recognition process. A preloaded voice application handles the process automatically. You just need to set the command and hint on every EFL elementary component on which you want to use the voice command.

    + +

    When the user speaks a command corresponding to a visible EFL elementary component on the screen, the recognized command is sent to the Voice control elementary library from the Voice control service, and the action mapped to the component is executed. For example, if the component is a button, the action can be a button click.

    + + +

    Figure: Voice command process

    +

    Voice command process

    + + + + + + + + + + +
    Note
    The detailed implementation of the preloaded voice application (how to trigger and recognize the user speaking) can differ according to the device (mobile, wearable, or TV).
    + + +

    The main features of the Voice control elementary API include:

    +
      +
    • Managing commands and hints +

      You can set commands and hints for visible UI components on the application screen. The hint message shows the user which command must be spoken to interact with that UI component. When the user speaks a command, the command is executed.

    • +
    • Retrieving information +

      You can get various information from the Voice control elementary API:

      +
      • Default language +

        You can start the recognition with any language you want. However, if you do not set a specific language, the Voice control elementary library start recognizing voice commands with the default language.

      • +
      • Supported language +

        You can retrieve a list of supported languages to check whether the language that you want is supported.

      • +
      • Supported UI components, actions, and commands +

        You can retrieve a list of supported UI components that can be interacted with using the voice commands. You can also retrieve a list of supported actions and their commands for each UI component type.

      +
    • +
    + + +

    The following table lists the EFL UI components that support voice commands, and the actions supported by each component and already defined in the configuration file. Note that the label component only supports the hint without any action command.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table: UI components and their actions
    UI componentAction/command
    click/()up/updown/downleft/leftright/right
    ButtonYesNoNoNoNo
    CheckYesNoNoNoNo
    CtxpopupYesNoNoNoNo
    EntryYesNoNoNoNo
    GengridNoYesYesYesYes
    GenlistNoYesYesNoNo
    LabelNoNoNoNoNo
    RadioYesNoNoNoNo
    SliderNoYesYesYesYes
    SpinnerNoYesYesYesYes
    ToolbarNoYesYesYesYes
    + + + +

    To use the voice commands:

    + +
    1. Initialize the Voice control elementary library and create a handle. +

      The Voice control elementary handle is used to set user-defined commands and hints for the corresponding UI component in the application.

    2. +
    3. Set commands and hints. +

      With a handle related to the individual UI component in the application screen, you can specify a command used to distinguish that component from others.

      +

      Along with the command, you can set a hint message. The command and hint can be different, but consistency tends to create a better user experience. You can also set a hint without a command simply to provide information to the user.

      +
    4. +
    5. When no longer needed, destroy the handle and deinitialize the Voice control elementary library.
    + + + + + + + + + + +
    Note
    Set the commands and hints on visible EFL elementary UI components only. When the visible components on the screen change, the commands and hints must also change.
    + + + +
    + +Go to top + + + + + + + diff --git a/org.tizen.guides/html/native/uix/voicecontrol_guide_n.htm b/org.tizen.guides/html/native/uix/voicecontrol_guide_n.htm new file mode 100644 index 0000000..e75ac8b --- /dev/null +++ b/org.tizen.guides/html/native/uix/voicecontrol_guide_n.htm @@ -0,0 +1,65 @@ + + + + + + + + + + + + + Voice Control + + + + + +
    + +

    Voice Control

    +

    Voice control features allow the user to control the device through voice commands.

    +

    The main voice control features are:

    +
      +
    • Voice control

      Enables you to register voice commands, which trigger a callback when the user speaks them.

    • +
    • Voice control elementary

      Enables you to register voice commands for EFL-supported UI components to perform component-related actions, such as button clicks.

    • +
    + + + + +
    + +Go to top + + + + + + + \ No newline at end of file diff --git a/org.tizen.guides/html/native/uix/voicecontrol_n.htm b/org.tizen.guides/html/native/uix/voicecontrol_n.htm new file mode 100644 index 0000000..9845ecd --- /dev/null +++ b/org.tizen.guides/html/native/uix/voicecontrol_n.htm @@ -0,0 +1,98 @@ + + + + + + + + + + + + + Voice control + + + + + +
    + +

    Voice control

    + +

    You can recognize the sound data recorded by the user and send the result as a predefined command using the Voice control service.

    + +

    The main features of the Voice control API include:

    +
      +
    • Managing commands +

      You can use the Voice control service to register commands as foreground or background type. When the user speaks a registered command, the callback function returns the recognition result.

    • +
    • Retrieving information +

      You can get various information from the voice control:

      +
      • Voice control state +

        The state is changed by functions and applied as a precondition of each API.

      • +
      • Voice control service state +

        The user controls the state by starting and stopping command recognition.

      • +
      • Current language +

        A command is valid only when the command language is the same as the current language. The current language can be changed by changing the application or display language in the device.

        +

        You can get a notification of the language change in a callback. If the display language is changed to a non-supported one, the voice control language changed to English.

      • +
      • Supported language +

        You can retrieve a list of supported languages to check whether the language that you want is supported.

      +
    • +
    + + +

    To use the voice control:

    +
    1. Initialize the voice control and register callback functions. +

      The initialization allows the voice control to distinguish your application from any other applications also using voice control. The registered callbacks allow you to receive notifications about changes in the service state, language, and recognition result, and about any errors.

    2. +
    3. Prepare the voice control. +

      The preparation connects the Voice control service for background work, such as recording and recognizing the user voice.

      +

      When the application initializes and prepares the voice control, the Voice control daemon is invoked and connected for background work. The daemon and the application communicate as server and client.

      +
    4. +
    5. Set commands. +

      You can create a command list, and add or remove individual commands in the list. When creating an individual command, set the command text and type for each command handle. When all commands are created and added to the command list, set the command list to the voice control for recognition.

    6. +
    7. Get the recognition result. +

      The recognition result is sent through a registered callback function.

      +

      If the registered command is duplicated or the user speaks multiple commands, the recognition result can contain multiple results. If you set duplicated commands, the Voice control service can reject the command. The rejection is shown in the result event.

    8. +
    9. When no longer needed, unprepare and deinitialize the voice control. +

      You must disconnect the voice control service and deinitialize the voice control using the vc_unprepare() and vc_deinitialize() functions.

    + + +

    Figure: Voice control (left) and Voice control service (right) life-cycle states

    +

    Voice control and Voice control service life-cycle states

    + + + +
    + +Go to top + + + + + + + diff --git a/org.tizen.guides/html/native/web/web_guide_n.htm b/org.tizen.guides/html/native/web/web_guide_n.htm index 2a97c80..d813da7 100644 --- a/org.tizen.guides/html/native/web/web_guide_n.htm +++ b/org.tizen.guides/html/native/web/web_guide_n.htm @@ -40,7 +40,7 @@
    • WebView

      Enables you to access the Web pages and Web content.

      -

      The WebView API implements the EFL WebKit (EWK), which covers various features for Web browsing, such as loading and displaying Web pages and navigating through the browsing history. EFL APIs (in mobile and wearable applications), such as evas_*, elm_*, and eina_*, are used to build up a complete application supporting Web browsing.

      +

      The WebView API implements the EFL WebKit (EWK), which covers various features for Web browsing, such as loading and displaying Web pages and navigating through the browsing history. EFL APIs (in mobile and wearable applications), such as evas_*, elm_*, and eina_*, are used to build up a complete application supporting Web browsing.

    diff --git a/org.tizen.guides/html/web/tizen/communication/bluetooth_w.htm b/org.tizen.guides/html/web/tizen/communication/bluetooth_w.htm index 4fa69f4..51fe243 100755 --- a/org.tizen.guides/html/web/tizen/communication/bluetooth_w.htm +++ b/org.tizen.guides/html/web/tizen/communication/bluetooth_w.htm @@ -23,6 +23,7 @@

    Related Info

    @@ -46,7 +47,7 @@ -

    The main features of Bluetooth API include:

    +

    The main features of the Bluetooth API include:

    • Managing the local Bluetooth adapter

      You can manage the local Bluetooth adapter using the system-provided service through the ApplicationControl interface (in mobile and wearable applications).

      To use the Bluetooth functionality of the device, you must switch the Bluetooth adapter on.

    • Discovering devices

      You can discover other Bluetooth devices.

      The device discovery process can retrieve multiple types of Bluetooth devices, such as printers, mobile phones, and headphones. To find the kind of devices you want to communicate with, the BluetoothClass interface (in mobile and wearable applications) is used to define characteristics and capabilities of a Bluetooth device. The BluetoothClassDeviceMajor interface (in mobile and wearable applications) and BluetoothClassDeviceMinor interface (in mobile and wearable applications) specify the identifiers for major and minor Class of Device (CoD).

      In addition, you can retrieve the known devices which were bonded or found in a prior discovery process.

    • @@ -54,31 +55,30 @@
    • Connecting to and exchanging data with a Bluetooth device

      You can connect to and exchange data with a remote Bluetooth device. When you attempt to open a connection to another device, a Service Discovery Protocol (SDP) look-up is performed on the device, and the protocol and channel to be used for the connection are determined. If a connection is established and the socket is opened successfully, a BluetoothSocket instance (in mobile and wearable applications) with an open state is returned. The socket is subsequently used for exchanging data between the connected devices.

      If a device allows other devices to use its functionalities through this kind of connection, it is said to provide a service.

    • Communicating with a health source device

      The Health Device Profile defines the requirements for the Bluetooth health device implementation. In the profile, there are 2 device type: one device is a source, such as a blood pressure monitor or pulse oximeter, while the other is a sink, such as a mobile phone or laptop. You can use your device as a sink and communicate with a health source device.

    -

    The main features of Bluetooth (4.0) Low Energy API include:

    + +

    The main Bluetooth (4.0) Low Energy features include:

    - +

    The Bluetooth adapter management is performed the same way as in the regular Bluetooth API.

    +
  • Discovering Bluetooth Low Energy devices +

    You can discover Bluetooth Low Energy devices in range. Through the discovery process, you can obtain basic information about available remote devices, such as their names and provided services.

  • +
  • Managing the advertising options +

    You can manage advertising to control how your device announces itself to other Bluetooth Low Energy devices to be discovered.

  • +
  • Connecting to a Bluetooth Low Energy device +

    You can connect to a remote Bluetooth Low Energy device. When connected, you can access services and characteristics of the remote device.

  • +
  • Receiving notifications on connection state changes +

    You can monitor the connection state to detect when the connection to the remote device is lost.

  • +
  • Retrieving Bluetooth GATT services +

    You can retrieve information about Bluetooth GATT services provided by the remote device.

    +

    Every GATT service defines characteristics it includes. By knowing the service, you know what features the Bluetooth device exposes.

  • +
  • Accessing the Bluetooth GATT characteristic value +

    You can read and write the Bluetooth GATT characteristic value.

    +

    Characteristics allows you to monitor and sometimes control remote Bluetooth Low Energy devices. For example, a sensor reading can be exposed by the sensor device as a Bluetooth GATT characteristic.

  • +
  • Receiving notifications on characteristic value changes +

    You can monitor a characteristic value to detect any changes, for example, in sensor readings and battery level.

  • +
  • Accessing the Bluetooth GATT descriptor value +

    You can read and write the Bluetooth GATT descriptor value.

  • + diff --git a/org.tizen.guides/html/web/tizen/communication/nfc_w.htm b/org.tizen.guides/html/web/tizen/communication/nfc_w.htm index d8747c2..8cdbfa1 100644 --- a/org.tizen.guides/html/web/tizen/communication/nfc_w.htm +++ b/org.tizen.guides/html/web/tizen/communication/nfc_w.htm @@ -192,4 +192,4 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga - + \ No newline at end of file diff --git a/org.tizen.guides/html/web/tizen/guides_tizen_w.htm b/org.tizen.guides/html/web/tizen/guides_tizen_w.htm index 68547fa..47529cb 100644 --- a/org.tizen.guides/html/web/tizen/guides_tizen_w.htm +++ b/org.tizen.guides/html/web/tizen/guides_tizen_w.htm @@ -74,7 +74,7 @@

    In addition to the Tizen Web Device API guides above, you can study the following features:

    @@ -45,163 +38,123 @@

    Service Adaptor

    -Service Adaptor is a set of several adaptors: - - -But main of them are following: - - -Each adaptor is an agent between Service Adaptor Client and according plugins. There exist Auth and Storage Plugins for such services as: Amazon, Box, Dropbox, Gogledrive, Onedrive and Sugarsync. This structure illustrates following figure: +

    You can manage adaptors, which function as agents between the Service Adaptor Client and the related plugins, to take advantage of various services. For example, the Auth and Storage adaptors allow you to access the Auth and Service Plugins to use services, such as Amazon, Box, Dropbox, Gogledrive, Onedrive, and Sugarsync.

    -

    Figure: Service Adaptor structure

    -

    Service Adaptor structure

    +

    Figure: Service adaptor structure

    +

    Service adaptor structure

    -

    The main feature of the Service Adaptor is connecting/disconnecting adaptors to Service Adaptor Client via D-Bus.

    - -

    There are two kinds of path type used in Service Adaptor: +

    The main feature of the Service Adaptor API is to connect adaptors to and disconnect them from the Service Adaptor Client though D-Bus. The Service adaptor uses 2 path types:

      -
    • "Logical path" - means path of "root file system".
      - It starts from root path(= '/') and you can use this path like linux, e.g. "/folder1/image1.jpg".

      +
    • Logical path +

      The path of the root file system. It starts from the root path ("/"), and you can use the path like in Linux (for example, "/folder1/image1.jpg").

    • -
    • "Physical path" - means specfic uri that be used for cloud server.
      - Some clouds use same with "Logical path", but some clouds use specfic key or url, e.g. "/" is "ZmNhMWY2MTZlY2M1NDg4OGJmZDY4O", "/folder1" is "2JI32UNJDWQEQWQWEADSSAD".
      +
    • Physical path +

      A specific URI used for the cloud server. Some clouds use a logical path, but others use a specific key or URL (for example, "/" is "ZmNhMWY2MTZlY2M1NDg4OGJmZDY4O" and "/folder1" is "2JI32UNJDWQEQWQWEADSSAD").

    -

    +

    Available Adaptors

    + +

    The following adaptors are provided:

    -

    Auth Adaptor

    -

    This adaptor manages authentication plugins.

    -

    It allows to: +

      +
    • Auth adaptor +

      This adaptor manages authentication plugins. It allows you to:

        -
      • get Auth Plugin List
      • -
      • set Plugin
      • -
      • request Channel Auth, i.e. service name like "com.serviceadaptor.message", app id, service id (0: contact, 1: free message) and mobile station identification number (IMSI)
      • +
      • Get the Auth Plugin list.
      • +
      • Set the Plugin.
      • +
      • Request the Channel Auth, such as the service name ("com.serviceadaptor.message"), app ID, service ID (0: contact, 1: free message), and mobile station identification number (IMSI).
      -

      - -

      Storage Adaptor

      -

      This module handles files transfer to/from cloud.

      -

      It allows to: +

    • +
    • Storage adaptor +

      This adaptor handles files transfers to and from a cloud. It allows you to:

        -
      • download a server/thumbnail file and write it to local file
      • -
      • upload a local file to server path
      • -
      • request file status
      • -
      • cancel/pause/resume file transfer
      • +
      • Download a server or thumbnail file and write it to a local file.
      • +
      • Upload a local file to a server path.
      • +
      • Request the file status.
      • +
      • Cancel, pause, and resume a file transfer.
      -

      - -

      Contact Adaptor

      -

      This adaptor manages contacts information in Contact Server, their profiles and service registration information.

      -

      It allows to: +

    • +
    • Contact adaptor +

      This adaptor manages contact information in the Contact server, including the contact profiles and service registration information. It allows you to:

        -
      • reset contact information in Contact Server and upload native contact information of device to the server
      • -
      • synchronize native contact information of device with Contact Server according to [type] field of each contact
      • -
      • get profiles and service registration information of contacts
      • -
      • set and update device’s profile to server
      • -
      • upload/delete profile image meta to/from File Server and sets my profile image to Profile Server
      • -
      • set/get my profile’s privacy levelthe scope of people to be opened
      • -
      • set my presence ON/OFF information to Presence Server
      • +
      • Reset contact information in the Contact server and upload native contact information of the device to the server.
      • +
      • Synchronize native contact information of the device with the Contact server according to the [type] field of each contact.
      • +
      • Get contact profiles and service registration information.
      • +
      • Set and update device profile in the server.
      • +
      • Upload and delete profile image meta in the File server and set the my profile image to the Profile server.
      • +
      • Set and get my profile privacy level
      • +
      • Set my presence ON/OFF information to the Presence server.
      -

      - -

      Discovery Adaptor

      -

      It is a future development.

      - -

      Message Adaptor

      -

      This module manages chatting and messaging.

      -

      Its main functionality is requesting for: +

    • +
    • Discovery adaptor +

      This adaptor is a future development. Not in use yet.

    • +
    • Message adaptor +

      This adaptor manages chatting and messaging. It allows you to:

        -
      • Creating Chatroom, Inviting to (or Ending) Chat
      • -
      • All Unread Messages
      • -
      • Read or Unseal Message
      • -
      • Forward Online or Unread Message
      • -
      • Save Call Log
      • -
      • Chat ID based on phone number
      • +
      • Create a chatroom, and invite people to (or end) a chat.
      • +
      • Get all unread messages.
      • +
      • Read or unseal a message.
      • +
      • Forward online or unread messages.
      • +
      • Save the call log.
      • +
      • Get the chat ID based on the phone number.
      -

      - -

      Push Adaptor

      -

      It just receives push notifications from push service.

      - -

      Shop Adaptor

      -

      This module makes requests for: +

    • +
    • Push adaptor +

      This adaptor receives push notifications from a push service.

    • +
    • Shop adaptor +

      This adaptor allows you to:

        -
      • List of Items
      • -
      • Item Information for Download
      • -
      • Download of Item
      • -
      • Item Panel URL
      • +
      • Get a list of items.
      • +
      • Get item information for download.
      • +
      • Download an item.
      • +
      • Get the item panel URL.
      -

      +
    • +
    -

    How to start plugin?

    -

    First we need to create service adaptor:

    -
    -int service_adaptor_create(service_adaptor_h *service_adaptor);
    -
    -

    Than for valid service_adaptor handler we need to iterate to all installed plugins:

    -
    -int service_adaptor_foreach_plugin(service_adaptor_h service_adaptor,
    -                                   service_adaptor_plugin_cb callback,
    -                                   void *user_data);
    -
    +

    Starting a Plugin

    -

    Inside callback (which is invoked for each plugin) we get plugin_uri which is then passed to:

    -
    -int service_adaptor_create_plugin(service_adaptor_h service_adaptor,
    -                                  const char *plugin_uri,
    -                                  service_plugin_h *plugin);
    -
    +

    To start a plugin, use the following process:

    -

    And finally we have to request start initialization for service plugin:

    -
    -int service_plugin_start(service_plugin_h handle,
    -                         int service_flag);
    -
    +
    1. Create a Service adaptor with the service_adaptor_create() function.
    2. +
    3. With a valid Service adaptor handler, iterate through all installed plugins with the service_adaptor_foreach_plugin() function.
    4. +
    5. Inside the callback (invoked for each plugin), get the plugin_uri value, which is passed to the service_adaptor_create_plugin() function.
    6. +
    7. Request a start initialization for the service plugin with the service_plugin_start() function.
    -Below example starts all installed Auth and Storage plugins appending each plugin_uri to the list object: +

    The following example starts all installed Auth and Storage plugins appending each plugin_uri to the list object:

     bool _plugin_iterator_cb(char *plugin_uri, int service_mask, void *user_data);
     
     service_adaptor_h service_adaptor = NULL;
    -ret = service_adaptor_create(&service_adaptor);
    +ret = service_adaptor_create(&service_adaptor);
     
     Evas_Object *list;
     ret = service_adaptor_foreach_plugin(service_adaptor, _plugin_iterator_cb, (void *)list);
     
     bool _plugin_iterator_cb(char *plugin_uri, int service_mask, void *user_data)
     {
    -    Evas_Object *list = (Evas_Object *)user_data;
    -
    -    if (!plugin_uri || !list)
    -        return false;
    +   Evas_Object *list = (Evas_Object *)user_data;
     
    -    if ((service_mask & SERVICE_PLUGIN_SERVICE_AUTH) && (service_mask & SERVICE_PLUGIN_SERVICE_STORAGE))
    -    {
    -        elm_list_item_append(list, plugin_uri, NULL, NULL, _show_plugin_view, plugin_uri);
    +   if (!plugin_uri || !list)
    +      return false;
     
    -        service_plugin_h plugin = NULL;
    -        service_adaptor_create_plugin(service_adaptor, plugin_uri, &plugin);
    +   if ((service_mask & SERVICE_PLUGIN_SERVICE_AUTH) && (service_mask & SERVICE_PLUGIN_SERVICE_STORAGE))
    +   {
    +      elm_list_item_append(list, plugin_uri, NULL, NULL, _show_plugin_view, plugin_uri);
     
    -        // This should be hidden using config file or User input, because it is security information
    -        service_plugin_add_property(plugin, SERVICE_PLUGIN_PROPERTY_APP_KEY, "enasvv4l8hdbmhn");
    +      service_plugin_h plugin = NULL;
    +      service_adaptor_create_plugin(service_adaptor, plugin_uri, &plugin);
     
    -        // This should be hidden using config file or User input, because it is security information
    -        service_plugin_add_property(plugin, SERVICE_PLUGIN_PROPERTY_APP_SECRET, "uqhl4pp8mo7hmgn");
    -        service_plugin_start(plugin, (SERVICE_PLUGIN_SERVICE_AUTH | SERVICE_PLUGIN_SERVICE_STORAGE));
    -    }
    +      // Hide this using config file or user input, because it is security information
    +      service_plugin_add_property(plugin, SERVICE_PLUGIN_PROPERTY_APP_KEY, "enasvv4l8hdbmhn");
    +      service_plugin_add_property(plugin, SERVICE_PLUGIN_PROPERTY_APP_SECRET, "uqhl4pp8mo7hmgn");
    +		
    +      service_plugin_start(plugin, (SERVICE_PLUGIN_SERVICE_AUTH | SERVICE_PLUGIN_SERVICE_STORAGE));
    +   }
     
    -    return true;
    +   return true;
     }
     
    diff --git a/org.tizen.guides/html/web/tizen/social/social_guide_w.htm b/org.tizen.guides/html/web/tizen/social/social_guide_w.htm index aef61e5..4fcd87c 100644 --- a/org.tizen.guides/html/web/tizen/social/social_guide_w.htm +++ b/org.tizen.guides/html/web/tizen/social/social_guide_w.htm @@ -78,4 +78,4 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga - + \ No newline at end of file diff --git a/org.tizen.guides/html/web/w3c/dom/transform_w.htm b/org.tizen.guides/html/web/w3c/dom/transform_w.htm index ce59678..8de381d 100644 --- a/org.tizen.guides/html/web/w3c/dom/transform_w.htm +++ b/org.tizen.guides/html/web/w3c/dom/transform_w.htm @@ -65,7 +65,7 @@

    This property defines whether the backface of the transformed element is expressed.

    -
    +
     <head>
        <style type="text/css">
           .box 
    diff --git a/org.tizen.guides/html/web/w3c/useful/html_priority_w.htm b/org.tizen.guides/html/web/w3c/useful/html_priority_w.htm
    index 874d46f..51eac0e 100644
    --- a/org.tizen.guides/html/web/w3c/useful/html_priority_w.htm
    +++ b/org.tizen.guides/html/web/w3c/useful/html_priority_w.htm
    @@ -165,7 +165,7 @@ p {color: blue}
     
  • Element = 1
  • -
    <body>
    +
    <body>
        <p id="target" class="target">Hello World</p>
     </body>
     
    @@ -178,7 +178,7 @@ p {color: blue}
     <!--Red color is applied-->
  • When the !important attribute is used, it has the highest priority: -
    <body>
    +
    <body>
        <p id="target" class="target">Hello World</p>
     </body>
     
    @@ -335,11 +335,11 @@ p: after {content: " : linked in head"}
     
     

    The following example shows the use of a simple event:

    -
    <!--HTML-->
    +
    <!--HTML-->
     <body onload="touchEventHandler()">
     
    -/* JavaScript */
     <script>
    +   /* JavaScript */
        /* Directly assigning */  
        window.onload = touchEventHandler; /* Assigns the name of the subject method */
         
    diff --git a/org.tizen.guides/html/web/w3c/useful/multiple_screens_w.htm b/org.tizen.guides/html/web/w3c/useful/multiple_screens_w.htm
    index c3afc43..0a262e3 100644
    --- a/org.tizen.guides/html/web/w3c/useful/multiple_screens_w.htm
    +++ b/org.tizen.guides/html/web/w3c/useful/multiple_screens_w.htm
    @@ -235,7 +235,7 @@
     
     

    You can use the sprite image technique (grouping multiple images as one and showing the only desired images defined with the background-position property) to noticeably reduce the page loading speed without any loss in quality of the image, as the following example shows.

    -
    .prev_icon, .next_icon
    +
    .prev_icon, .next_icon
     {
        background-size: 20px auto; <!--Full HD Display-->
        background-image: url(../images/page_navi_arrow.png);
    diff --git a/org.tizen.guides/index.xml b/org.tizen.guides/index.xml
    index 89cbc93..34b8882 100644
    --- a/org.tizen.guides/index.xml
    +++ b/org.tizen.guides/index.xml
    @@ -56,9 +56,21 @@
     			
     			
     								
    +			
     				
     		
     		
    +		
    +			
    +			
    +			
    +			
    +			
    +			
    +			
    +			
    +			
    +				
     		
     				
     	
    @@ -148,6 +160,10 @@
     	
     
     		
    +		
    +			
    +				      
    +	
     				
     		
     		
    @@ -199,7 +215,8 @@
     		
     		
     		
    -		
    +				
    +				
     		
     		
     		
    @@ -219,13 +236,12 @@
     		
     				
     	
    -	
     				
     		
     					
     	
    -				
    -		
    +		
    +		
     		
     		
     					
    @@ -238,9 +254,13 @@
     		
     		
     		
    -					
    +		
    +			
    +	
    +	
    +		
    +		
     	
    -	
     		
     			
     		
    @@ -282,14 +302,18 @@
     		
     		
     		
    -		
    +		
     	
     				
     		
    -					
    +		
    +		
    +			
    +			
    +		
    +		
     	
     		
    -	
     				
     		
     		
    diff --git a/org.tizen.sampledescriptions/.project b/org.tizen.sampledescriptions/.project
    new file mode 100644
    index 0000000..bed8d0a
    --- /dev/null
    +++ b/org.tizen.sampledescriptions/.project
    @@ -0,0 +1,22 @@
    +
    +
    +	org.tizen.sampledescriptions_2.4.0
    +	
    +	
    +	
    +	
    +		
    +			org.eclipse.pde.ManifestBuilder
    +			
    +			
    +		
    +		
    +			org.eclipse.pde.SchemaBuilder
    +			
    +			
    +		
    +	
    +	
    +		org.eclipse.pde.PluginNature
    +	
    +
    diff --git a/org.tizen.sampledescriptions/META-INF/MANIFEST.MF b/org.tizen.sampledescriptions/META-INF/MANIFEST.MF
    new file mode 100644
    index 0000000..e984c7e
    --- /dev/null
    +++ b/org.tizen.sampledescriptions/META-INF/MANIFEST.MF
    @@ -0,0 +1,7 @@
    +Manifest-Version: 1.0
    +Bundle-ManifestVersion: 1
    +Bundle-Name: Tizen Sample Applications
    +Bundle-SymbolicName: org.tizen.sampledescriptions;singleton=true
    +Bundle-Version: 2.4.0
    +Bundle-Vendor: The Linux Foundation
    +
    diff --git a/org.tizen.sampledescriptions/about.html b/org.tizen.sampledescriptions/about.html
    new file mode 100644
    index 0000000..814330e
    --- /dev/null
    +++ b/org.tizen.sampledescriptions/about.html
    @@ -0,0 +1,18 @@
    +
    +
    +  
    +   
    +   
    +   
    +   
    +  About This Content 
    +  
    +  
    + 
    +  

    About This Content

    +

    Tizen 2.4.0

    + +

    License

    +

    Except as noted, this content - excluding the Code Examples - is licensed under Creative Commons Attribution 3.0 and all of the Code Examples contained herein are licensed under BSD-3-Clause.
    For details, see the Content License.

    + + \ No newline at end of file diff --git a/org.tizen.sampledescriptions/build.properties b/org.tizen.sampledescriptions/build.properties new file mode 100644 index 0000000..b84ff38 --- /dev/null +++ b/org.tizen.sampledescriptions/build.properties @@ -0,0 +1,8 @@ +bin.includes = plugin.xml,\ + META-INF/,\ + html/,\ + build.properties,\ + .project,\ + about.html,\ + index.xml + diff --git a/org.tizen.sampledescriptions/html/cover_page.htm b/org.tizen.sampledescriptions/html/cover_page.htm new file mode 100644 index 0000000..8a97391 --- /dev/null +++ b/org.tizen.sampledescriptions/html/cover_page.htm @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + Tizen Sample Descriptions + + + + +
    +
    + +
    +
    +

    Mobile Web Wearable Web Mobile native Wearable native

    +
    + +

    Tizen
    + Sample Descriptions

    + +

    The Tizen platform provides sample applications, which are included in the Tizen SDK. The sample applications demonstrate the powerful features of Tizen and speed up the learning curve for a new developer.

    +

    Since you can execute the samples directly in the Tizen SDK, you can use them as a ready library of code for your applications.

    + +

    For a detailed list of available samples, see:

    + + +

    Creating Sample Applications

    +

    You can create Tizen sample applications with the IDE.

    +

    To create a sample application:

    +
      +
    1. In the IDE, select File > New > Tizen Web Project (for Web applications) or File > New > Tizen Native Project (for native applications).

    2. +
    3. In the new window, select the Sample option from the top.

    4. +
    5. In the left pane, select the mobile or wearable sample type, and then select the actual sample from the middle pane.

    6. +
    7. Define the name of your project, and click Finish.

    8. +
    + + + +
    + +Go to top + + + + + + + \ No newline at end of file diff --git a/org.tizen.sampledescriptions/html/css/snippet.css b/org.tizen.sampledescriptions/html/css/snippet.css new file mode 100644 index 0000000..f880409 --- /dev/null +++ b/org.tizen.sampledescriptions/html/css/snippet.css @@ -0,0 +1,52 @@ +/* Pretty printing styles. Used with prettify.js. */ + +/* SPAN elements with the classes below are added by prettyprint. */ +.pln { color: #000 } /* plain text */ + +@media screen { + .str { color: #793AFF } /* string content */ + .kwd { color: #7F0055 } /* a keyword */ + .com { color: green} /* a comment */ + .typ { color: #1C1C1C } /* a type name */ + .lit { color: black } /* a literal value */ + /* punctuation, lisp open bracket, lisp close bracket */ + .pun, .opn, .clo { color: #1C1C1C} + .tag { color: #008 } /* a markup tag name */ + .atn { color: #606 } /* a markup attribute name */ + .atv { color: #080 } /* a markup attribute value */ + .dec, .var { color: #606 } /* a declaration; a variable name */ + .fun { color: red } /* a function name */ +} + +/* Use higher contrast and text-weight for printable form. */ +@media print, projection { + .str { color: #060 } + .kwd { color: #006; font-weight: bold } + .com { color: #600; font-style: italic } + .typ { color: #404; font-weight: bold } + .lit { color: #044 } + .pun, .opn, .clo { color: #440 } + .tag { color: #006; font-weight: bold } + .atn { color: #404 } + .atv { color: #060 } +} + +/* Put a border around prettyprinted code snippets. */ +pre.prettyprint { overflow: auto; padding: 2px; border: 1px solid #888 } + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */ +li.L0, +li.L1, +li.L2, +li.L3, +li.L5, +li.L6, +li.L7, +li.L8 { list-style-type: none } +/* Alternate shading for lines */ +li.L1, +li.L3, +li.L5, +li.L7, +li.L9 { background: #eee } diff --git a/org.tizen.sampledescriptions/html/css/styles.css b/org.tizen.sampledescriptions/html/css/styles.css new file mode 100644 index 0000000..4c8f5a8 --- /dev/null +++ b/org.tizen.sampledescriptions/html/css/styles.css @@ -0,0 +1,756 @@ +@charset "utf-8"; + +body { + background: white; + color: #1C1C1C; + margin-right: 20px; + margin-left: 20px; + font-size: 9pt; + font-weight: normal; + font-family: Arial, Helvetica, sans-serif; +} + +h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ol, dl, dd, dt, footer { + font-family: Arial, Verdana, Helvetica, sans-serif + } + +/* Set default font to 9 pt */ +table, div, p, dl, td, caption, th, ul, ol, li, dd, dt, pre, code { + font-size: 9pt; +} + +pre, code { + font-family: "Courier New", Courier, monospace; + border: 1px solid #719cc7; + margin: 6px 1.5px; + padding: 1px 1px 1px 1px; + font-weight: normal; + font-style: normal; +} + +h1 {font-size: 24pt; color: #0E437D;} +h2 {font-size: 18pt; color: #0E437D;} +h3 {font-size: 14pt; color: #1C1C1C;} +h4 {font-size: 12pt; color: #1C1C1C;} +h5 {font-size: 10pt; color: #1C1C1C;} + +h1, h2, h3, h4, h5 { + font-weight: bold; + font-style: normal; + line-height: normal; + margin-top: 16pt; +} + +caption, p.caption { + font-size: 9pt; + color: #1C1C1C; + font-weight: bold; + text-align: left; + margin-top: 20px; + margin-bottom: 0px; +} + +ol { + margin-bottom: 20px; +} + +ul ul , ol ul, ul ol, ol ol{ + margin-top: 10px; +} + +ul li, ol li { + margin-bottom: 10px; +} + +ol.tutorstep li { + border-top: 2px solid #719cc7; + list-style-position: inside; + font-weight: bold; + margin-top: 30px; + margin-left: -20px; + padding-top: 3px; + font-size: 12pt; +} + +ol.tutorstep li p{ + font-size: 9pt; + font-weight: normal; + margin-top: 10px; +} + +ol.tutorstep ol li, ol.tutorstep li ol li, ol.tutorstep li ul li { + font-size: 9pt; + list-style-position: outside; + margin-left: 0px; + font-weight: normal; +} + +ol.tutorstep ol li p, ol.tutorstep ul li p { + font-size: 9pt; + font-weight: normal; + margin-top: 5px; +} + +ol li p, ul li p { + font-size: 9pt; + font-weight: normal; + margin-bottom: 2px; + margin-top: 2px; +} + +ol ol , ol.tutorstep ol{ + font-size: 9pt; + font-weight: normal; + list-style-type: lower-alpha; + color: #1C1C1C; + border-style: none; + margin-top: 10px; +} + +ol.tutorstep ul { + margin-top: 10px; + font-size: 9pt; +} + +ol ol li, ol ul li, ol.tutorstep ol li, ol.tutorstep ul li { + border-style: none; + margin-top: 5px; + font-size: 9pt; +} + +ul { + font-size: 9pt; + font-weight: normal; + color: #1C1C1C; +} + + +/* End of font face declarations */ + +/* Set table borders and heading row background */ +table { + border: 0px; + border-collapse: collapse; + width: 100%; + margin-top: 20px; + margin-bottom: 20px; + background: white; +} + +th { + border-top: 2px solid #719cc7; + border-right: 1px solid #c6d9f1; + border-left: 1px solid #c6d9f1; + background-color: #f3f7fb; + padding: 4px; + color: #719cc7; + font-size: 9pt; + font-weight: bold; +} + +td { + border: 1px solid #c6d9f1; + vertical-align:top; + padding: 3px 20px 5px 20px; + } + +td.middle { + border: 1px solid #c6d9f1; + vertical-align:middle; + padding: 3px 20px 5px 20px; + } + +/* Notes stand out using a light top & bottom borders with yellow background */ +table.note { + border-top: 2px solid #719cc7; + border-left: 0px; + border-right: 0px; + width: 100%; +} + +tr.note { + text-align: left; +} + +th.note { + text-align: left; + background-color: #ddd9c3; + background-image: note.gif; + border-top: 2px solid #719cc7; + border-bottom:1px solid #719cc7; + border-right: none; + +} + +td.note, p.note { + background-color: #eeece1; + color: #1C1C1C; + padding: 5px; + margin-top:12px; + margin-bottom:12px; + border: none; +} + +/* Figure titles are centered and bolded */ +p.figure , ol.tutorstep li p.figure, ol.tutorstep ol li p.figure, ol.tutorstep ul li p.figure { + text-align: center; + font-weight: bold; +} + +/* Red background and white text for things that need fixing before release */ +.fix { + background-color: red; + font-weight: bold; + color: white; + } + +/* Classes for creating collapsible content */ +#banner { + padding: 8px 4px 8px 4px; + /* top right bottom left */ + border: 1px solid #7f7f7f; + width: 100%; + background-image: url("banner.png"); + text-align: left; + font-weight: bold; + font-size: 9pt; + color: #ffffff; +} + +#toc-navigation {width: 20%; position: fixed; right: 17px; top: 0; bottom: 51px; /* overflow: auto; *//* min-width: 200px; *//* background: white; */z-index: 100;padding-top: 10px;/* padding-bottom: 88px; */margin-bottom: 89px;} +#toc {padding: 0px 20px 5px 20px; /* border: 2px solid #567a9c; */ border-radius: 15px;position: absolute;top: 78px;bottom: 9px;overflow: auto;/* margin-bottom: 5px; */padding-bottom: 5px;border-bottom: 3px transparent solid;margin-left: 5px;} +#main {width: 75%; height: 90%;} +#container {width:100%;} +#container #contents {padding:0px 0 20px; overflow: auto;position: fixed;top: 0;bottom: 0;margin-bottom: 64px;right: 200px;left: 20px;} +body.no-toc #container #contents {right: 0;padding-right:30px;} +body.no-toc #toc-navigation {width: auto;} +body.no-toc .top {right: 19px; /* float:none; */ width: 28px;} +body.no-toc #profile {float: right;right: -32px;} +body.no-toc #profile p {padding: 0; margin: 0;} +#container #contents:after {content: "."; display: block; height: 20px; clear: both; visibility: hidden;} + #container #contents>.content {/* width:75%; */min-width: 600px;/* right: 300px; *//* position: fixed; */padding-right: 5px;} + #container #contents>.content>.cont { margin-bottom:80px; padding-bottom:80px; } + +.devicespecs-util {float:right; margin-top:25px;} + .devicespecs-util ul.dutil {margin:0; padding-bottom:0; height: 11px; list-style-type:none;} + .devicespecs-util ul.dutil:after {content: "."; display: block; height: 0px; clear: both; visibility: hidden;} + .devicespecs-util ul.dutil li {float:left; margin-right:8px; padding-right:8px; background:url('../images/bg_util_bar.gif') no-repeat right center; color:#666;} + .devicespecs-util ul.dutil li.none {margin-right:0; padding-right:0; background-image:none;} + .devicespecs-util ul.dutil li a { font-size:11px; color:#666; line-height: 11px;} + .devicespecs-util ul.dutil li a:hover { color:#222; } + .devicespecs-util ul.dutil li a:active { color:#222; } + +ul.devicespecifications {clear:both; width:100%; margin:0; padding: 0;} +ul.devicespecifications > li { width:100%; margin-top:0; padding-left:0; list-style-type:none; border:1px solid #799cd3; padding: 5px 0px 5px 0px;} +ul.devicespecifications li div.devicespec-con {width:90%; margin:10px 0 20px 0; padding:0 14px; font-size: 13px;} +ul.devicespecifications li div.devicespec-tit {/*height:22px;*/ padding-right: 71px; background-color:#ffffff; position: relative;} + ul.devicespecifications li div.devicespec-tit .items-tit { /*float:left;*/ margin:0 0 0 14px; padding:0; color:#567a9c; line-height: 22px; font-size: 14px; font-style:normal; font-weight: bold;} + + ul.devicespecifications li div.devicespec-tit .items-tit-h2 { /*float:left;*/ margin: 0px 0px 0px 14px; padding:0; line-height: 22px; font-size: 18pt; color: #0E437D; font-style:normal; font-weight: bold;} + ul.devicespecifications li div.devicespec-tit .items-tit-h3 { /*float:left;*/ margin:0 0 0 14px; padding:0; line-height: 22px; font-size: 14pt; color: #1C1C1C; font-style:normal; font-weight: bold;} + ul.devicespecifications li div.devicespec-tit .items-tit-h4 { /*float:left;*/ margin:0 0 0 14px; padding:0; line-height: 22px; font-size: 12pt; color: #1C1C1C; font-style:normal; font-weight: bold;} + + ul.devicespecifications li div.devicespec-tit > span {position: absolute; top: 0; right:0;background:#416cbb; display:block; height:22px; margin-right:0; border-left: solid 1px #7a9bd4; } + ul.devicespecifications li div.devicespec-tit > span a.bt-arr {display:block; width: 55px; height:15px; margin-left:0; padding-top:5px; padding-left: 14px; text-align:left; background: url('../images/ico_arr_hidden.gif') 46px 9px no-repeat;} + ul.devicespecifications li div.devicespec-tit > span a.bt-arr em {display:inline-block; height: 14px; line-height:11px; font-size:11px; color:#fff; font-style:normal; margin-right: 8px;} + ul.devicespecifications li div.devicespec-tit > span * {vertical-align:middle;} + + ul.devicespecifications li div.devicespec-con ul.con-list { width:100%; } + ul.devicespecifications li div.devicespec-con ul.con-list li {line-height: 18px; margin:0; padding:0 0 0 7px; background: url("../images/ico_bullet_2_7.gif") 0 8px no-repeat; } + +.ul.ul, .ul.ul li {margin-bottom: 10px; list-style-type: disc; border: none;} +.ul.ul ul, .ul.ul ul li, .ol.ol ul, .ol.ol ul li {list-style-type: circle;} +.ol.ol, .ol.ol li {list-style-type: decimal; border: none;} +.ol.ol ol, .ol.ol ol li, .ul.ul ol, .ul.ul ol li {list-style-type: lower-alpha;} + +.static-cont {width:100%; margin-bottom:40px;} + +.top {text-align: right;} +.toc, ul.toc{ + margin: 10px 0px 0px 0px; + padding-left: 13px; + list-style: disc; + font-size: 9pt; + line-height: 115%; + } + +.toc-title { + font-size: 12pt; + color: #0E437D; + font-weight: bold; + font-style: normal; + line-height: normal; + margin-top: 16pt; +} + +a.top { + display:block; + float: right; + position:fixed; + width: 28px; + height:89px; + bottom:50px; + z-index: 101; + right: 19%; + } + +a img {border: 0;} + +/* Footer includes space and a gray line above */ +#footer { + position: fixed; + /* width: 100%; */ + bottom: 0px; + text-align: center; + border-top: 1px solid #CCCCCC; + background-color: #FFFFFF; + left: 21px; right: 21px; +} + +.footer {font-size: 8pt;} + +caption { + font-size: 9pt; + color: #1C1C1C; + font-weight: bold; + text-align: center; + margin-top: 20px; + margin-bottom: 0px; +} + +div.qindex, div.navpath, div.navtab{ + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a:link { + color: #719cc7; + text-decoration: underline; + font-weight: bold; +} + +a:hover { + color: #0e437d; +} + +a:visited { + text-decoration: underline; + color: #719cc7; + font-weight: bold; +} + +a.qindex { + font-weight: bold; + padding: 2px; +} + +a.qindex:hover { + text-decoration: underline; + color: #0e437d; + padding: 2px; +} + +a.qindex:visited { + text-decoration: underline; + font-weight: bold; + color: #719cc7; + padding: 2px; +} + +a.qindexHL { + text-decoration: underline; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + padding: 2px 6px; + border: 1px double #9295C2; +} + +a.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; + padding: 2px 6px; +} + +dl.el { + margin-left: -1cm +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + padding: 4px 6px; + margin: 4px 8px 4px 2px; +} + +div.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + padding: 6px; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px +} + +td.md { + background-color: #f5f5f5; + font-weight: bold; +} + +td.mdname1 { + background-color: #f5f5f5; + font-weight: bold; + color: #602020; +} + +td.mdname { + background-color: #f5f5f5; + font-weight: bold; + color: #602020; + width: 600px; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +td.indexkey { + background-color: #eeeeff; + font-weight: bold; + border: 1px solid #CCCCCC; + margin: 2px 0px 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #eeeeff; + border: 1px solid #CCCCCC; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #f0f0f0; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { +} + +img.formulaInl { + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { color: #008000 } +span.keywordtype { color: #604020 } +span.keywordflow { color: #e08000 } +span.comment { color: #800000 } +span.preprocessor { color: #806020 } +span.stringliteral { color: #002080 } +span.charliteral { color: #008080 } +span.vhdldigit { color: #ff00ff } +span.vhdlchar { color: #000000 } +span.vhdlkeyword { color: #700070 } +span.vhdllogic { color: #ff0000 } + +.mdTable { + border: 1px solid #868686; + background-color: #F4F4FB; +} + +.mdRow { + padding: 8px 10px; +} + +/* @group Member Descriptions */ + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F4F4F4A; + border: none; + margin: 4px; + padding: 3px 8px 4px 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #DBDBDB; +} + +.memTemplParams { + color: #606060; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; + margin-left: 3px; +} + +.memnav { + background-color: #eeeeff; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.memitem { + padding: 0; +} + +.memname { + white-space: nowrap; + font-weight: bold; +} + +.memproto, .memdoc { + border: 1px solid #9BBCDD; +} + +.memproto { + padding: 0; + background-color: #D5E2EF; + font-weight: bold; + -webkit-border-top-left-radius: 8px; + -webkit-border-top-right-radius: 8px; + -moz-border-radius-topleft: 8px; + -moz-border-radius-topright: 8px; +} + +.memdoc { + padding: 2px 5px; + background-color: #eef3f5; + border-top-width: 0; + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; +} + +.memdoc p, .memdoc dl, .memdoc ul { + margin: 6px 0; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #853E0E; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +/* @end */ + +.search { color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #eeeeff; +} + +td.tiny { + font-size: 75%; +} + +.highlight { + background-color:#E2E2FF; +} + +/*---------- ide-eclipse Styles ---------*/ +.sh_ide-eclipse{font-family: "Courier New", Courier, monospace; + margin: 0px 0px; + padding: -30px -30px -30px -30px; + font-weight: normal; + font-style: normal;} +.sh_ide-eclipse .sh_sourceCode{background-color:#fff;color:#000;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_keyword{color:#7f0055;font-weight:bold;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_type{color:#7f0055;font-weight:bold;font-style:normal;} +/*.sh_ide-eclipse .sh_sourceCode .sh_string{color:#00f;font-weight:normal;font-style:normal;}*/ +.sh_ide-eclipse .sh_sourceCode .sh_string{color:#2A00FF;font-weight:normal;font-style:normal;} + +.sh_ide-eclipse .sh_sourceCode .sh_regexp{color:#00f;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_specialchar{color:#00f;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_comment{color:#238E23;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_number{color:#000;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_preproc{color:#3f5fbf;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_function{color:#000;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_url{color:#00f;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_date{color:#7f0055;font-weight:bold;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_time{color:#7f0055;font-weight:bold;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_file{color:#7f0055;font-weight:bold;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_ip{color:#00f;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_name{color:#00f;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_variable{color:#7f0055;font-weight:bold;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_oldfile{color:#00f;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_newfile{color:#00f;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_difflines{color:#7f0055;font-weight:bold;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_selector{color:#7f0055;font-weight:bold;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_property{color:#7f0055;font-weight:bold;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_value{color:#00f;font-weight:normal;font-style:normal;} +.sh_ide-eclipse .sh_sourceCode .sh_unknown{font-family: "Courier New", Courier, monospace;} + +/*------------- STYLE FOR NAMES FROM XML FILE -------------*/ +.sh_styleFromXML{color:#800000;font-weight:bold;} +/*-------------------------------------------------------*/ + +/*-------- Snippet Base Styles ----------*/ +.snippet-wrap {position:relative;} +*:first-child+html .snippet-wrap {display:inline-block;} +* html .snippet-wrap {display:inline-block;} +.snippet-reveal{text-decoration:underline;} +.snippet-wrap .snippet-menu, .snippet-wrap .snippet-hide {position:absolute; top:-99999px; right:15px; font-size:.9em;z-index:1;background-color:transparent;} +.snippet-wrap .snippet-hide {top:auto; bottom:1px;} +*:first-child+html .snippet-wrap .snippet-hide {bottom:1px;} +* html .snippet-wrap .snippet-hide {bottom:1px;} +.snippet-wrap .snippet-menu pre, .snippet-wrap .snippet-hide pre {background-color:transparent; margin:1; padding:0;} +.snippet-wrap .snippet-menu a, .snippet-wrap .snippet-hide a {padding:1px; text-decoration:underline;} +.snippet-wrap pre.sh_sourceCode{padding:1px;line-height:120%;overflow:auto;position:relative; +-moz-border-radius:0px; +-webkit-border-radius:0px; +border-radius:0px; +box-shadow: 1px 1px px #000; +-moz-box-shadow: 2px 2px 1px #000; +-webkit-box-shadow: 1px 1px 1px #000;} +.snippet-wrap pre.snippet-textonly {padding:1em;} +*:first-child+html .snippet-wrap pre.snippet-formatted {padding:0.5em 0.5em;} +* html .snippet-wrap pre.snippet-formatted {padding:0em 0.3em;} +.snippet-reveal pre.sh_sourceCode {padding:0em 0em; text-align:right;} +.snippet-wrap .snippet-num li{padding-left:2px;} +.snippet-wrap .snippet-no-num{list-style:none; padding:0em 0em; margin:0;} +.snippet-wrap .snippet-no-num li {list-style:none; padding-left:0;} +.snippet-wrap .snippet-num {margin:1em 0 1em 1em; padding-left:2px;} +.snippet-wrap .snippet-num li {list-style:decimal-leading-zero outside none;} +.snippet-wrap .snippet-no-num li.box {padding:0 6px; margin-left:-6px;} +.snippet-wrap .snippet-num li.box {border:1px solid; list-style-position:inside; margin-left:0px; padding-left:2px;} +*:first-child+html .snippet-wrap .snippet-num li.box {margin-left:-2px;} +* html .snippet-wrap .snippet-num li.box {margin-left:-2px;} +.snippet-wrap li.box-top {border-width:0px 0px 0 !important;} +.snippet-wrap li.box-bot {border-width:0 0px 0px !important;} +.snippet-wrap li.box-mid {border-width:0 0px !important;} +.snippet-wrap .snippet-num li .box-sp {width:10px; display:inline-block;} +*:first-child+html .snippet-wrap .snippet-num li .box-sp {width:20px;} +* html .snippet-wrap .snippet-num li .box-sp {width:2px;} +.snippet-wrap .snippet-no-num li.box {border:1px solid;} +.snippet-wrap .snippet-no-num li .box-sp {display:none;} + +/* Layout fixing */ +.clfix:after {content: "."; display: block; height: 0px; clear: both; visibility: hidden;} +.clfix {display: inline-block;} +.clfix {display: block;} +* html .clfix {height: 1%;} /* Hides from IE-mac */ +.clfix {zoom:1;} /*for IE 5.5-7*/ + +.fl {float:left !important;} +.fr {float:right !important;} +.cl {clear:both;} +.rel {position:relative;} +.abs {position:absolute;} +.ac {text-align:center !important;} +.ar {text-align:right !important;} +.al {text-align:left !important;} +.at {vertical-align:top !important;} +.am {vertical-align:middle !important;} +.ab {vertical-align:bottom;} +.hand {cursor:pointer;} +.bgnone {background:none !important;} +.brnone {border:none !important;} +.b {font-weight:bold !important;} +.n {font-weight:normal !important;} +.invisible{display:block; overflow:hidden; visibility:hidden; width:0; height:0; margin:0; font-size:0; line-height:0;} +.mt5 {margin-top:5px !important;} +/* //Layout fixing */ + +@media print { .hide, .show { display: none; }} + +div#profile { + position: relative; +} +#profile p { + text-align: right; +} + +div#toc_border { + border: 2px solid rgb(86, 122, 156); border-top-left-radius: 15px; border-top-right-radius: 15px; border-bottom-right-radius: 15px; border-bottom-left-radius: 15px; height: 565px; +} + +#contents li { + padding-top: 3px; + margin-top: 5px; + /* overflow: auto; */ +} + +p { + /* overflow: auto; */ +} + +div.table { + /* overflow: auto; */ +} \ No newline at end of file diff --git a/org.tizen.sampledescriptions/html/images/DigitalWatch_sd1.png b/org.tizen.sampledescriptions/html/images/DigitalWatch_sd1.png new file mode 100644 index 0000000000000000000000000000000000000000..a35c9dabc8981fb08570e6a1b433fe0b33ca54b6 GIT binary patch literal 11378 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

    ?ad0NaW;p zviQMEy1(O2ky`}IT{yzy4b9ypOv6%bKlGc6DZCd=+L(iKUoiPJGsZe22rUgFmATo) zr4rh5x(rV3TL=PtE{%y7r8DFAk@C|w6=59gYPO#yH;{Fhcs&{~bu9_^il;@A(FiH!Uu41zt1kAF;RX@dk5Np~sKjiUpyV30y{BE`_t&+X0{ z(E)=E(`SvId6bP_dDjzbjcvvPiN=9A|y5xP!Q&`b5BIbz2mayo%DFeiQw^ zdAt+lvI?XvoI*h#>q2vM#=^*n7bM|c00g2#1UKUY`QN1$r^}^e!mRxe?wsB?`cbKm zn30gY`*dCm?<{!lNHI}gT)vXF)e=-5>1cH1NJ#&cPIx++l3hxUWWOjR5bROZzg2Zs zuPS|Hmg9i$xfoTCR}x97Y20|J!6~&yM;; zICKhANRaK9FdzG`j_8th-l$7612(kXjQtj8S#SqMv^Nn3TZ-*O+-4cr#RN*U^iocD zi|Qws6tI{;_({)kmzZcsMw(c5u$5qXV4{M!zfyl2Z1UuZHE+&HBqJ#+*xIhh`22#{u) zv5$Ee8onv&WKq)4=EXf#!0VRB{CoC+FicDy;vSx$Anxu6J$(y>xmF)n>?^XK(En?5 z7Q3KrLWOQUc2?O!4xRKan=Po!9^)6+AO9jLR2r_koQxjdtd4zm8sUT8zI1-p+TBD5 zA)(KJzVm3|=Zr_{AnhZPZEdbsi{q1UC&7`kZM z*tTg50>b%%5T~B8Q+V4$#WQNsOFP3Y&kxDHzOZJSzN@dh^tb^x0W?-b$X$gw@Q!Dh zJD3ogwC{#>KGu)B+)vgQnWn7hs|m2}>(<#jXUD`4-A8jYQ)8o;OH|53=VyTxYR{Or zo`99f#BPPzA3J1AOf!S10F&#EJ*bmZYi@vAPG%K8(O>BzPFJLKardX;v=;Nesik*m%>?>xP+iZqWk*&u3 z?4db#@LpRBvAJE8=&7mwe|v{BULwl>o#?TMT}?HH0FO3G8d0r%=pe@LA)eUzMot25 z98m)@8tEOOZx*Ib&t4s}7l}C6B+0rCe2h~N$m;zJt5e%^AU}{PF*K$0yVj)9e@KV4 zfettxGtq%{XXvTk@>zGAC{yN;-vnfIvOf4>wIWvI) zPy}4-eodQ&)&Z;*hROOF-)%PBYnUyIx*8YlC~Kr|4jnZsz0#?nj~B|%Q_lnd*Y$0j zv}5A7NvYI{ZaYu3>US}1(a)ix#9CAqW~xDwD3AdtwXe^Ly*?g{FR*~12~(^yc8Bm(7nw=uC;nI*7od(ogd@I=a!=uCS82$ql}lYXw6X7ygAhhBs#wXPJ%w zNMob=-s94CbR#Zg>C;$;xjrTg43? zKQ;jm8FL%dL6ajgJz*Q8bZST{*I0VLp2WcPF=IW03mC#!>QhiU$6@l zT7vZoU0mBb5zKcBk1?A6(guyyb*UYQ8I)v;*xI(LNC6S?2!do)sXIA8{y8<@y+Elb z*;zkVLnwZ_{?F?*`z=A|JGawQq1rZi z@8?4wZ&jy#FUigt+|dy_OXjFd?^<#iGPXW`Um(P)u=!{RbAJ_F1H{-xo_32CxHZSs z_^qr!OX8;NqAet}LTnX$-71x%mJja^xj$!|^)dOipY)TwD_SSS8!90_#AUWM<*%5u zSgF^L&-L?GqDO?celUm<>NVBmHXk=0^cL76RWk1F531&6@c#P}pF^Lh%=^GHE%jmm z8sUvS_#+O{rgjtU{fR4cr1H#+H;b>Ygp2s?Cvs~ux|0(*`0bRQnlpGi6YjkpVWJs( z#-U(jqOv?5WKI&(Ca{a>k(K2CuM4;HTQ7*7IC>UT8T|6_yTl065(?rKpA7^55B!=8 Ad;kCd literal 0 HcmV?d00001 diff --git a/org.tizen.sampledescriptions/html/images/DigitalWatch_sd2.png b/org.tizen.sampledescriptions/html/images/DigitalWatch_sd2.png new file mode 100644 index 0000000000000000000000000000000000000000..0f073cdd135a1be2f3e9dda0060632d242c30814 GIT binary patch literal 12052 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 LlNYTNHVpb7U37CW literal 0 HcmV?d00001 diff --git a/org.tizen.sampledescriptions/html/images/alignment_main.png b/org.tizen.sampledescriptions/html/images/alignment_main.png new file mode 100644 index 0000000000000000000000000000000000000000..67228c2f4e7d5d6037f09b911d7c6fb0909b4493 GIT binary patch literal 7687 zcmeHMX;hO}w?;)NDtd(?%3J|K89!!)fGA)r(^pYuh!iQaVF)uxDtv-~3E)6vOp5|# zh=64h0x=@9fCz*kKrj&~gfK(q}O$TAtY3jafsu+U+`Tt6zCcu zBy{A}$7heE+P6OnCQm@DTp*6%A0W}*;l4tl-T}8DTDN>5iuzhQT6*{9Q2!JXlDl)o z(&Ac-7j269V0eFAXBhuq*RC?X)yojwr^|wU9SL4Bn8dV1OXSu~Q=vN+$Nxh(^4QwU zUB#I@FUe_*cRRbjIeQj$>aIsoQJ0EQn~vVg$v03)bd#SvVqmmGzi)dZgcXZhWO~QR zj)9$_>qiXK@{M?=$liiJs?@Lh{b#9+~oQ>CS`(%UtTVRH2&YBo4~nPErk&;2R$g!kkIP zO)~p#Hz>3;D&ezA(x%oNLP%aNUJ7tmr`m?5f2{p#=!B95xJvPV!n}Zi22&X#7lcIT z!f7`r+};T{5V8-qo(B8)R&HGjo3`Q`2fx4VQW?JUXTPY$D9Uz>RYk_(=2_%PFt#Ch5Y*%u13QH;O|#y{{m^r0rKJJF`_ZhSats>S zSNV+tW=w|9bhck!bBOLoz(bcRj8X<%#(6kVwOtfTnbwxn62EnxpIv)uflZ27Q>*hz z>d2$^eald+t~6H*k6Ty=2Cz}BTU}Oq=I5WsGxgf$Ljw4g8x?IP?Gjjeo9m^ygh^hG z3pe{@0|^w$$$P{tbdwJhM8Dx$xbNk}2CV6=9=05bkHG3_ts(Ae zAC!-ec|S@+ry49JEcCzMa9gxlZka30Am9?Xj_Banxu$q24Ve+2;hJQ|z(L`x8(O3G zC71$U10}Zv*;oW3rP#>$xRW?T1zdPTj5`@sQEIc=T}4`$*tne(S(E#uS!ByLL8)ka zW}>%hxvox`*GpdaV?{za80er2asF49*I0ZPi`-HFyf2#GxRiY|k2nDrSNw7JuWgDV zX)bH?;}u8S&HXi|m~R_hRcL&})od%u=t_nE`L#aAymK92%X2B+NHw9lS%ZhqGWeCX zMU7s0GBhe_8%L+U20u5DgeQPGj@)H0Mr;^+w8PCII9K1-DU+cgH}T=Mp<^_J_!^$({LzQrHX~zJ}CmiZ5LTKx{kcn*SL9e9)Z) z;hWR*Cfm@O2ppDi{P#Ef2Gp4+e~QB0k(;%|qz8_R&jZ84+QMSRlrJTolM?Jf_wh`9 zxhl9Ryu05qhjTQOcm(X(P?gAk&78FUT_X7jQ)(Jpe9_C-nxf8}@&ns(_B=L@&brax zE{H_EE1~Z{xP$wsC|s~RnWRuYj!OV~y_(!oSwq>W(gCJE3-8PwnhdnTugFzow5uVl z1I?XssCwbe=%8r!sZdt}_+&rSN;>~Zc6rfdv{$45w2#kRr8*bFdvix!UdC8a8@xE^ z(nd~AB7+R)DX$o)_7mJy1ECu{l}p-%5=u4KWGRzYJGQuLyV~87u8_-Gj{cdb zL;pEIL4JYJ7~H$$Es;%-pBP@~P(9yDRfLBPHjwTz0tcU7mg+{kjbrJL_9XEkD4T!W^ zDV-*fjt6o5!w0ZPVY-~BZDPa`(K(NNTX&nSc)Z<+UdMC-zt$>UN>anES=}wtpHToP z?Q_L49!Vu{Dm-U~dU6*eWGggbtIO05^M;tUAZ;<6&&#wa14NlJ4PVA^NNg^SGg4E2yKLFnkE+%Kct|-YZV)QCq zHsM+K`v*A&xZ1^E@evy-9udQ=IXprY1_$!5)fO+iu%(;{s<7Z%O!4N;>zxXOX(!Nk zPD8xQ$2xO+9Uew=E;c{s#JDR<2bn!$C}^B_a&~leBFZ9a3)Cu>7~l2P&8j-61WplL zB>1_M5jpdH{a2J9M}!Fo_^|lln+J9_r-c7XZWk35e9-7K+Ph*KznLm!v(o*Cj(1@N z&i+A=vd)TXsi~=*J$qm3rE5i5*-3L47ORNQe;~-k$|tr3LTevMB3Y1BV@-4FtrNWk zR4?yPg2}ouri9P$6o@UTGzQZbsim3^q+Xsp^?8oLK-s`e<_u!P>W|Mt z0=J+D2w_!1c1o8q(M;qw`^H!#p34yMOusJPAjOb0OkM0R&~AzES4GrGD)DtTLmkOd zwZ3SrE_hssqt7fy^imUKIbl{3h2vh2)IUySy`nif%in`rJjKMkdTj0_XRg0l-wRuB zFn_^H<~3&+slWn_FZ`}UMWlY@G*7uOjm`3?Z+IHcdyEaB_I@8?H;^HX-SnSgl^G%8 zygdcbW5%-Jl&N@WcQaVg2G?f$HT=d?T30oXD{h_*+RqlyUXHUS~Nz*Oy zd`?3_)T3dil^7a}6Z>c+rQ=?~TMu_*#;ZKTXwI4CtZe3!Wv#K%3yH@r@2)?Kzn*uC zmJf0vN(X4kL#Eo-ggc*@2HhM`(L0cl#}ClIYF143jWBv>=~Lq$(f68{G zSkRPRlP*}+utpMO_v{AOKcDM&K zHj><%n~|V<3jXr$F{R5#deE%J%a|;G>R=y~4Uvl)=t_0$gs`FUi9W?j@gBP2lOL2G z(co?-vOoj;1+A=)CO1BgsI6Dw>1+etgKRuFR_^Yd=z6clnwg_;FCx!7F~P!y8jWU7 zXJo=9FkC$hiHiYt#VVhW7g%3kBLA9xTzPo{3kom?Os+|t*wdYLBSv|Mz)KTF)*E8n zHaRju^mVlBOy|!0JDXKMBK;YuDT#6whX5@F`acBIAADN!&L)(XG$2TP_XIy#tw6E# z%*wmMZAyaUpjTpw`FVGGcl z5TGD`19gHkXOyqm4w;DOr~SU}fT;b&cKsG5eA!oD#6AM~e*{SXy%_dhhxj=o*pw@Y z^OEleoYw{7NY#QXwBRJCh|jS|bo`kFcKK|`H;VYOw<|`KpN@fsz|bEuXRiH5mmzf5 z8i*g3Q8v~ChMwJIi%~xZ=SgK_NftLb@}slJs1b1i^qRof_mZOhhsE;`a$#-fKb{@; zW!t`>l6$pRWJmqFS{?0bJon=`G?i3Tfyq(W4U2#f$4-=$+akRxf8>P?iZP#J4;mgL ztSx*n%Z;Kb?I#wk_nZ;W|D!4qta142`np@}F?#!wnS^tc@OFAbY1D#2ZS`rMcOUf$ zSneOO0U_~Dy;0D(YKl_6{9kq?xMA10K-%6km$c%jtE$?O3N=41>yIF64Z*}0>hE|C zROHH3Q|adG+nOQ{gicWXh@5*v_-xP7QH83IKsA$EU*|Ao-Z&vQB+m>JbR~g12*~R- zG3z<^XNZo(gx#d`n>L^Kr>4tPl4?3ha~ zXQv=Ff&<*g3ugf8g^iV$aU$Z&FUV+Z7uPXk@Eb8=+M<&=dv&$uQileka#+MCmlE}ogi9~(I@8RL3O1pReIGdL*)$F9iS_lW1NIf!q#T=5(&sogR`5h8z&Tc` zZ71G2R_#$xt0T1HSd8HAD{$evP*>j=q zZx{9atGuM%-xLq%&^i+Y=PqSFdq5hW{yMeYP3E}6Z$lKGRFC>uGMdCA*yQzylZLsi z1`*a<%P@R=d>%z1TDfuVZF0qV5NmmKO(AS^wsabk+P;`(hFc^QN)*Cyn7Zxuc;4HP zw=dHa_|EG6zJIYOV=>8DHT@(JY1Hv8F4OseYL)pa7gSV#3r^oULqo&2lB!?~lZcUa zBFKet#fRM~Vx%z^`jaltV&lET1pIXbTGCmCXAwl}VGh8f^w&%x4dR_NWBhEe%ol0G zegdAj1H*ZLs*YA${0ZX!?RXV%(x1ZATL~lF$-Xa!>g(s@hYFc0d*ia{!PTV!9tXHH znknI*6GC$8g@bKP`JX9cNfPMog4+1Z2rYZh9HxdBeyr{a_W!H1AbWfEf2Nb|gHLrT zdt*PnNub^9_Seag=XP$DiuiH$%vaS~^Pj0Ee!n2k&+c44lZ5@M{zghyKhy7*fglHc z0pSY>JExJqgC_u0@st5d}P zxd5aM_W&Zc>6h9{A9Ll$8!@^enk~Zn`~-;nxsLc>mK%%j&qPuQk^6Y%Ua_;1IZ~o? z`5()@D)eBUzsKIP3V{`>Dwk{Wh9EcZ{J_*gOh*vb1t zi{%f^N#zscsXN^ugs_syZU-vs#!c1ThKu?JZw$T(LH5?Orw~tgQrGw1))RTaxF~4a P3SF_Xw|sW-M&iE#-A3`4 literal 0 HcmV?d00001 diff --git a/org.tizen.sampledescriptions/html/images/alignment_view_contents_tree.png b/org.tizen.sampledescriptions/html/images/alignment_view_contents_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..cab86543847820c19208083e3e91f6631d70bd30 GIT binary patch literal 23349 zcmeFYWmH^Gvo8z;2@oK-LvRZaJPfW05C$0rcXxLW1a}WIKp-$U!5ue!{{a!$3elz>@nct%`u~iVXg{ z`85)}Eu1ZLhkqekNGM7mAXLR+J{qCG|D!v8)^b5W!2a{k2a%9jJ`mnX;wq!*3UV-a z^)PZaLvS>*vUlaMH*h&!lF0-GlEptICs%zcbym)W#v0umBHcA^E}y$f zd9p8~U9vA*b6iGUo_dfG0&Ttn+zuTP_Ql_8{tC2RMi~Er2th*N$kS=C-!?!Pr&-_I zV|qaf#KzhuKybv(1&O1*a>ZE36^9}OMj=3u03^8}gg68M3W6^3KEZe=yvq}LoCRT> zRva3Ljk-_pn=TNDh(L@8Kym#5zljRb6$7F1^*BpzFud#UYxv#2W#AN)Z^l^yKf&)t z;6QT4*f)fC2_yaAWEt*0S4^!G7j8v?EzkU}OLy4fXk?0av~Mpt!6^IP-+fbwa}W*K z6_vCT_HW)N6(AK3G#O?zvEGIPAQ!7V<|U>)>wzgru==6DxNk(Y9R+Dc@K^)?mqN{T z0HKeS3Y4bQz94}`7rp#FCr?ehd}xOJ?~U^=qIA?3NhsA(Y@+C8VQb`@dZB+W8|R@K zIN^qHW+pR6ta?E?723afP~-)-k-gO24c%+p^?7C(k`E?OzF+ z&a2em-Ko6WbBa*@`oF9e$z4t~QS|az$|uyLuZqxT#%z2MoN&hY%S-% zc{d!WHHSrDd_7mB<(^bYGrp&Vs9b(jx~k&+b>7d?DgCvx-_tjGSyE;v`jahDF;4WG zG>}iFC(~ORWc66Zw~*1l9radskLPrKqse;EJm&$rmPXp6;`?!Q?X#$Xtnk*~LW?a8 z_#xI}_p;K}M{14b+HS&0=~tWEoe*jJ6roP9vr00`j)yZV9img=ctkr*oT5QjpSYkO&J!NuRIpYX>@oHy+F6Y!bF##GaSn3UaZyn1Sk z#TE}U#1xnO_mjJ>~L}ShXo{@OEJvSLiWa7zNe2xSFyi^Qr(&vqA95A zlQ_nvTx>ohy~+Zl5N^2727YP3t3r+|WI|hV0I56OKax}1k^ft8PbZ6Wqn0?E?+riZ zEZ0fE#)H2tNBUaSWd}26c`9|)@T7+raM)`#TowlC3sTw{a&QH#j$+<2iZ)!cg)7)L z!UP*4zw#c1O>9a;&WR=HaHX$?2Cc9Fc>#2Ee@=pCF%lR`<{*B)?eu9HlTU9#mBg;v zvxfUkWyJ)VVEcEa0-nVd>Pkc%=b~sbHAl%0K+&(S9DWVUteukBXR)@eofo5Jui39X z%9%jrSA63}kQv36xr`%@cYE&Z9a{bLMFbXT?kXb>`npw6vA8se6}W$%Rtk!b!CBy-1Z#+TBkem=SrQ_%rjNL2aiJY$H8CR*u&eQQK+R z2LjOLHGml39u@cq?Utc2+e@X}8>~v~d zy2_ts)EU~HhW9z&f4`j31k4_j*S%YI?uwq!j*Bd=HQ1k4O7de7F!L^H{-wB~g2{t9 zsJX>epf3NUPUe%hRSJUQwT@OOPr1JNT=X;Hu0!znDNPR=YS(rSBeq)_e zA2%u$=P$N`xB||ScYJu4tKmr=M=%eoEo$Wg5C*u(jZuziz)ofN@Hj#ea!hMd^`P{zXvCn1?M)H`_Q?AtjkSbwLqOd)eQS{L zV^-jjvwX&lXo1>WBgUr+K*#ZpAtTSII#}MhK~GhbEkt|W+xFqUOGy{do2O(xQmhWjF!WfDkEjz9C>ufh&t0og9x7aS*W&iDH-3a6eZN#XG<&!S2%#8) zOg0^DG<-4l{xu;RxzUyDn=G_(ok*o;V>9l<(AuDXYI0?3qJ#WVY2Q!Rll&~`&Ih=q^>ar` zuokh6if1@n;w1OghELe>q+WK9mYZCNgGM2D0GL6ZlSp;=_hTW_Ka<6iw>Ql~(_@W( zUD#Fnkc)-6N((5kZ1OEc=;7K=~`yWL2~LtJ|$viF;Cn6 z9}@KfwpFBQ4rpox`iSPl04aBy-RgXLOVqacAg}XT8*NqS=2?kcakh7omTFCub;eK7 z8TOl#rkM!4b1y6h-j++N<|+=9yg?<0Wo2AlXk<-R{TJN!eaQKx(}(JgY<1}Va_3l6 z8{BpIpWa8~XDIiv2JCy&5)Y<~D&`ht^mgwk1LMPo{ec?-ls)ERyEUIb3?XL9ofZ}_ z1FOw3GBQ?q^o|0W=J6{pIh2?IL*W@J&gLU?igxj$cdK$PcmWn*U8rS`zkqv%zQ?T} zo*?ax#Yf`|Ip%YL8s>S|l-9+92Ekjh!mR!l9q6-hb*1n{)j6#fq0JeIHDLv*ncOMk z1s(iBzgH>2i0sF`$r3{;g@g3L@#*nFoI3X@K(mj`R|oCqMl{)yY+oMExtM7w$4HI2 z8aj>##t)A)v#v!LaKxT@)5?P$kH$WkZP*O5Id=$A6Om2ZP*u5?@ZMzXB83Fs4ftbNI5{6Gf%{BA`TA#Qv98)@W7D*=u%lfs0w6o|&1MPI9u;YFQgDTLgKLuEq`k9rtq zD?!W;4L-ZcW;VPrO4+^Ft_Ob-k_eg>*iOTYspe<_J@4;NU5&;7GAkhHsBy~&0Wpiq zbw6SC=So)$tNBzE6ZL~kgT~`W7XJOy=a+8+i(!R^JA3U7!nuvI=kHW9?m}vaS7K*;Y^{t5_w)eC!o=Zw4@bp+B z;!AUMM$~;k`p+$l|SXY>~{ac$aB}tBf>>+9}m8*Zj z-+Ii1Zc7Ee=%Ba6w)k%va?A2EB3Ql67Umjar6Vn*%^%Uw$U8hQ_DTnxC0ox&gy|xS z!NYkC4~(xVFHD|BL0Z*0QC*b2T^6_~q&X|g!Fa`=CEGikE~1$Kya=V32G~3t<{+{w zTwCmXBBw8ySJ|!fzJH~_5^))@PL%YzVY{b;jhBX%(zW#^q|-wwm`jq2xZty+DOJ}C@*(dX?nO& z@OF1ypR!ox5}es#dU#tvqmTSE=@pP2hqLyOCs3%6+&GdJ}G% zHnxzW=?Xq*AqSAdBb73j=U*fLR>(y?DB0`aY*)W70{pnFoHV35WV3;}?cNCeKZHe1 z-&Qp_>o$=^Klb1&V|HXMG+%XZS=xU;kovbT9uNuaSz=WLeO!uEI!=6Zskl`yb}Nrc z{zc;ZCCd`iwlUqevx%zwPsddco%LBQ!CTfJw5;dKKN?rWWBxlTX*7T)p4w4z*}e_n zbep5KhDmGMh_eqcFkX4-o7V$%3u+>Q<) z*FJc@QVgu-RQ@BEuB;me7n)c%{MwTGKX=%0F|%qM1hUuvjRK%-5g&cTK7U@4a;g5=7`Rbo`zyF^tWE}NhZNfj{V=mS|kz6j_D|lQe4j%{JenN!@eu4Z5 z|Fp4h;E^4I9l}2?B`JIw2#W~+v;gjZhOR~Y|C9kB7HDNPfcYcO?Umweb zA|hClOcg3VJUYHFOGc%jE`X|0e825d?>39kG_ANe6bKS$07jl2Th1O=L z0s=`r$Y3aizVN!AE=R<^45e|J-YONsLunE3t9P%25daIL5TPW*Y}3vllp@&f-d>VX zwlo+Fi#rX{M*oRas-(7qBDAIla=045-2e;Y3j3PR!@PI?OnS*0KN5Gb`zK#D*Xmz_;zt&t1DLUS!? z3Isagv&5-~zn(*tG`vf-# zfF7GbAdNWm5ZSdPJrKx8G+w-m1n3b71fG-Sf?kgo1K>k2=7M5S{(lz#uNDd}p(v=R zqTW|Ujg8;o((u21Vb9tf{!anoTNC5s?;gmc%IPTknz5ze5tjX>i?S) zT2^LjY02z#ZgY^_)O4386V>lanb7g_OfJIHj}TX7+!J|owpMdQFy?Od3JqJD*y#T1 z!1Q~AR*Soxkr9nGPMz!E@89B@n%{?!c>{k)h2^>PxgDx;zj;g?$rO0ubKdTk&OLua z&L7>VU~{16?tZ=56E*Nf{HVt7!CgQ=U~_YBvKU;d?&awje-{|r^ZfKcNkK91X5Af* zYfARJ>oqz$T+M!5D=R?FN3-q@rkJ?#5o&q&4=(5aZgdUoqVl3%$$ox3uK~)*%i{&S zvI|U2oxR)}i|BwqP;~ScO-&L~1OQQAEM-kYgT)*RA|fI!`np-+m-NK+^oZx80?^Dk z!Z_LA^YgDjKHPB@4n)^T0l3A2i#LWPF;iXLMRrDS;cs@(#Q40WmOMScE~_HY-IOyhb6+t<6$CmKFGPk8`-fOIKkR3*5vr4rwb8a;X6nQ>&h39 zyVInLz7e*#e-v^M)eMl(at?2+u`qQ<_gM8BnJj*DV^Xt&?E@vcFt5C@I8gg@6g5dO zqOn$;KAa_B;bF_?Kk?1KK$v~AXm{3R)MzBJIbbEVr9?z#q+4*1 zZU<^#cn*cLKwA%mLnS*hwb^!X?zXC7+76#JA{C-mJIgWh>4lC<&J)m{oz%Ds!Tnwy zes_ycqifuaH6Ez&SI=Gs>QQl*6^cFyavACmPYqFo;+6lryZbg`GLS5b0D!TP)K1@M z+??^;eV3K}Fr|AVAFhR5D+BE>1j#k1;~cR1-lI{vmi*vVh7MkcS`DEe&4(n$CO%90 z6n9&_)VoEzcgW}CHm{8G*J`Wnj^lU!gJ)i0pbZtGL4@2#G_q~JT*cRZp$(>ZOaP>8 zIaF({UYX5u8c>lmp>qmgzLZ)JPiuE=ear<>rV`B-KPo|IIp$5Tn^OvH=3PrlK8T2N z)a9b%yXS&Bf>a0}Bn`CX@4ytKozWdE6Xio3H}#ET|Ijhh(Qpvv@K_3pL*Ft8p25>$ zTKDD&8{dQ!d_0y;7wbW5EU`A9u+##+D?FIhl;jZ=Knr)$)N2p%NnH<_N-(B2HzzTU zjzyn8L*!k+>D;!tQlHsb;Dw6J7p;W8H~ADW%+Y+ zv-a}va0Z<3EEX;Kohmt{DtSWKw-FXqwP6J0ng~fP_(pc3!sB({tFNP$OPs)J41OZ0 z#B_&vmkZQp_VT!vrb0uhmrA`iBf5$SUC{7)lz-jc8y+O5wN=djUF}Atoinki|LoHo zz|Hp6U@0luj60ZfD4J4Q+93cuC1)x&lSCq6zPEH!5&`*iw6B)jlgDxEgr(!s|JCo@ zk`NZPK_QGHwaCpIp~>+#dNQPP3O-+I{gBDN_k4`lrz-~m0Z$xp}BgvUtM#SDP*+>c53f zc>}1k1n)HVIm))O;d>-W{8B-J3;4k5kjYm24 z)L%i|^~zvX+-BNR86@YBQ?NOW4Mtq$S(de3a*#ejJUzA$S7ell~yTrfx2K5^CjpS@C zTj;)Y=Kti@dpDZ{Z^lK;!*!;+x$zw;D5OoPMWv2ubR_dFogjG{$)ck5)-_EhSnPKb z^AqPI0_a6W#>t@&NDNvZ8|BkmCH`y;A0OD#P2_Fnz@s@!L*Vh=j zdq0L^8LPncM0Bf>I`ZXN)4(rZ!NbcN7>nMjY~^_gv1$Zf*{M1CwQB;n zrDu_OP$5)o(w|#jQ&duqJ*DO3j(XF|3fVl4qJduEIN(n2T09lI@9hE(?d?YNFY&X5 zPr<*`)l)AH#zzUGh$^cbAHL{jd)kC_zIuTC<)}PMNzsG0x}v%l3d^{uWs{lzq~Z2j zp4AamnYZ_g!#bFfd*t?_6$?I?uGpcCn)@z>Gte~`*S)4rGTm`gHFxWuuN%ASllhtc zLz~Ctjan1Ag2ir!XpL1bQB9>)cZ3&pZ%$opBy|JdHX|G4DK&OY;Jm>M^^)9c#^T zUjP6GKMxqs&zi?QVs`8#h&Vp0a8-U7>HZyv2xyQtl471GuB4L(jYt3_{(rc3O1| zoBInIZs|?RCyJMuE%qL=Rl2+Og1?GazI>5X@fm!+mWNdLE>cewB4@h!5l6~n&A@st zUK-0-_?@-}a_Nsv*)S-<-dCBP1PVq(-wc$AbUctMkM3=WMFMy_P7s!fH*g6Nws+-=IQ>AhLMb***TMQO4vlOI(g6U=RIXGg9D9`*} z`P`TtsF^JX!={*CAG>q(-D7LZ-;NNrJ(E5p0l6%_^ix}Q<*mGYd)WC7Ru3garn4fC zeC)X_?^f{Y7=p`f? z@CIyGKo3HSOb-35m`ngLAERCGi6@fhKn?DzZF_8KMk^3LFW z;j%Wb@yw?DsKL2& zhJ1~i^;M&YQqrK7TPF3LHFVP&G#8F%-ku-1ejB_Bp21{{5`*aT1WY)%m2_OAad$u3 zcepfHTS?2Jt00$ib3UG6cBl9y21Q-B16jn=unyF6&JS11gq|-6tq>&+G84MPlCQRN zA28(Q`R6~VwI?m^8(|3GYe{YQ7~#yZoK`)5pWo)h)%L3998ztbvjzn`YJG}7sQ1y{ zBNUie2|P%CbWIPwFB=K36$uV5aU59~_lFt3A9@Koo{in+ZYloOvjVkbN z16q4%v_!38R#?_H@;tjNuB{LCj^qB@MP-64ciJbz&>+_BPer?TT4KM|AY#(8;nEiO z`Fu!MK3Dw-2ptTzKhbX<9T)l$=+^QfQuXnsT+eEon|ma{iUpvJ|y9rdOACQTg$THjOku zLs3_M%ltE-u9;li4+d>%-YmUteCaQ4$ClXJ{#lzfug^^`4fp%%W8SQNv*Vb-PI&tA z$?@5!gZ8)qfvge~eKp=^ZKI)g8M{Sb2GX(o7owT_+b+QwJJ)0xO}f^r*fuBXwhM zsMK;buXtMYe>J;Yo=r1)Bhuk`@C-fIoOuU1cr{D;artALr15zK(?-GYuc=F9Gpyx2L81r(FA7~@x##0F$?7MKp8C5v#-cbx5nj4%DlCwDAKDYR@3YpWdg0spJr6psE>>$eb3eb|g<@d9y zt_GiQcfYDo*|EqRs#QTJ5}O{VO$lqrl+0pV?$oOm0X_XOUTq-t;bEAMTTYhyr;4Rx z5UlNjh#vJ=r(ym|i{65Iv_I-*fsNB?mOX=AbVbGM_$P#8KbH%VQR&SV{fJHAGqogS zwlxzs-#NpzpplaH_VfY6#=$)DspY-!W$oTzijnCX5foAR5u)ykY4l!*J!${WI0JWOjVTn zmpNxh*0>#Zti&bFGmi3zQLjl(v=GN@Y*&FC$KCso>g{=Zy=xk$9o(!p?heCLLi^4G zcChgm2_7zz2L_(Put{jID~Ksst2?xzsQs(I^>H0lDLl|QL`YSoSCh01mccCFfG8AH z0=CE1D@=-CGm{ZW zWWA?!I;(emJK}}6n{`9=xyf{2Lboo_QQMWaA29eJxjHdh5#hlfGmANCH|IVG_*mL^ z!WJrvimJ&#N>(Bl)9F?sJbU&dd)c=M@(`nxkBo#!2zO#O{d2hM)yeKGcZ3I1#_6rUUf$d5xzA~1?gSWe0pQD;vZ%ayucR}ZzRdo=Rm+9-6oyRuy)$qR6ak%oQs5p$C%~zi( zzTeX!Zxh~5SS_qWt(zq`od@l{@3@7G7lXrE6VGu~rsvXjSNN6Z?GM80D1i{xp;#Xy zm+g6)r{LSVIZe^sGk}}?@vwj`?`t}-ZhfnyRK3s64438ZFZ%gE>jrpaELmbmS^cg} zSP#V$fG{1Ww)Qz5q%Y8Kd{n)r;0^*Vm;6x>vrn1t1fTpxUG>L&4^14Q4q+}FijRQmE0L$ArN& zD3uialpQ4Rt(4#IZ92}n9Lt#|w(+$I1quWcSah@pOyBk+=Cz$9Qmtv-+ET)0gh+iV z#Y=hGUHe`dlzw&0>j0CQSF^Yz=-gq_?@ONKg8XSIH28Xu+2lVqbWDPKeJ zhFM3cU7XTj&?ggf*ZY&B-1yvtE-gpIk($c)OBuI>f$9h4CGM6(sbQz5#wz!Ts}OP= zDw#2Qimfj49->MvU+L%rz8Lc(f<0ANYvaK7`|Bj7E(Q5E-cNN|K(n?55wFc_1su9_ z|My*6-5sUad=gN44}&%nlcCxb2MHFHsZ$_SmzIBxvnoYEsREZ#i=b5YijI^}-(5oj*UupNlZD4#sE`$lWY z@hVbDtiTvHuMFALjnq$|^4FC*iI;Lz(f`ZEk}%R&dBxH|r|jcWrh>Au1Ver&pr?rdqMmGC7cg{M+J1+Uqg0-_XzO}lC(Li8p%w3~ z;z0?2YX>yIo72VB3EVS5pO}!TJv?1#ssnFzs~i<_Z17y){(YMJOSbvZw3<~^;G50! zh#9l>6+Zb)hYl$L<>8r~E)-a+HRFToswGDbpv4Lfpj1p&+Gb2w-VQJt>h4*LnJ&&_ zO6D@bZvDe_p%bc}eLPf?c$V*&Wb%vU_NTH%laSXpV0jYUiQ_Kcwg1vo?_Ja%(E!t1 zCYmaaNgT9TQMJj&E>P-lBGx__t&xx3^E%$ zV|pl}Y2Yj1RSJX7x_&cDSCJ*-?#t@Pvze_2$V3JBxNPyq?BRB3l61j+HnucN?FWmR z)m4%!`luO`IbDpRL9YN!Z%D$_9Bpfo$%n+zf!H$mtXjV}Sg2!VJ3nI9Y+m}c?X&1U!{_+n-!id%h3@60no;?c8s^`ZMLoj3wR<+YDio~(Sg2^ovCVKfvsVVSF*1NoH` zE+szzGHjTwCPnot7io(o{YMos%Pod<7QLzDqKLC6#JyvT3vwsAb2=b3$hOsQF4Km-E}87&u&Drl{QEIQYtv2IHgq&Ni*bHR z$uR`TH6%$HlUg}&lj41Zo|xok73UrST=C$106OODdJ( zhD`T*l)F?{+Cx}f)hQW^&SIJwX(J$^htokjeaivKzaHC|pPo+nRQs}}CnpVxl+yTM zBky`YMe>Lq>vQOqgOH<_nZtrHj0gGAhq>3LN?(>NAX#Hx2K;ew5#`>H$#)a^8-gngFL?d0>oLCu2aJl%{1+NsPgp36VQ0N-^i~#mh%;C1{VUyp-pK zbjp%Lz+2UIAKO3SUs=a42Gg$^TgXZo*|en14Oy7|#p43P>p&G1qGJB>W3$qw1tP?H z;h#?E*v3sue-3{|lk?iXOZ6fr7j-bK?35TfnwB&gPzi0n70IExPzFn@-8{EYJX)!d z84E*SnA3;0Ep%~j+~1S1d5F>y8gMBnJiE#{wdYAO+aQ!o22ZvfP1@|ca21{Ay(HWBW5 zcHwsVyc*W`<$LZODg={#QdPxwnTRdV;X+V2qeGy{eXz5WNie;Y>|BE(Y(V#uVkviz z%}Ys$bD#cOg*n^>eRHB!3gd~l+Ey&yR`Cg>a z`A`{00f!}u%G}N1mv{l}Xr}BQxq8|9ecEvhf6aq_MSYh?I?}N#z6@UfH#=sC?pOf@ zAn^13R;XMSR@a(ZvB5I%{k_A`)4Q_OS7T8zhYvRfm}C{8;YlUN7Z`QLb0DlVNrj^q z`z#`^lDq`O{RgwpvSlwNZ?bgoqLNifr)}xpM~krL5VFx-)padgT9mhS9_$lMKL^xn zTn9xqz*CR=6SyHG7W(;67q4l`JFBEQ-McUC=S1|4Vm^Nlg&3J*LWEo+Rd7$LTxL3= zu8s#PUGPql)x$?=+#=OC?f7LZTbB#sFus{Nf`)B8CcHPs|o^lJKpLNN<>n%^%}d}9_KCvoV@h(jY>|3!1OK6-AWl2_`NWsj$c4YpgzF)|gK5bELLV zJR4}ce#a82FvRmari5Vo+4l7w}1*RB`O_87{#!ko&((97RHiw7=lSOOutO4p>V z;jWWZg3%oY9sa?x@2A{8Gsaj*p6%y#TcL5fT*eryk!zw3iq!%=h3h5#h#u|oZukFeZmcFj6Bfa@EV-aEMCRQN>?OTWk9AuB0paUM+tKXCzS%)f$06xyGwrkxy zt(zlupZ+riZ4H=3tHN zn?C}lVvg6i4S9GMSxcJGaTqi;R9}^Vx~uv56>rY3*aGao1MPMeIV(IwnLHF@YdX`s zt+{Uk6n?6hKvFCeN#=>!6efkoVc{PuK(5x~>=A-n=kSM!gkUrI@8GmxKlc%j61?*m z5!?A&dT5`&QJV<-kq?Y*rCF)LadLc`&3;PMmR57LgGj=T^3IjU+MhyW^flHjX5V6m1hu4<+v`QV7KX!>YGt!-3W z7n^0sd2C5c<$Y+uI64~!K>9-?m7viI zi}?4T#Fy_-xDl{QLSOy?vaBhYL>6F=Sda=QOXYp}Zr%|w&2n7G^5`vPe*59r_W|cV z&Uxnff@2}a6@xE%@S>-$?|^7)+m29a zzD}sP??YD{OE>FpRHf^a7V2AN1IuIaTET#q2zdGPy* z99{*e_M*X}FqRI${v2^s(U-iDb2h=IfGKhlM;((AOd{$(6%$9Oco$zAYJNb_d8GjeR`cGtaDmZvOtm2s<`Y1sEi1u0lo zYEUgn->*nhknddaM}ZrL80jXxRvNCJ4mWD2J3O9;{)sA0S{Q5Q_ys>BiwdnkQX%vA zn}<}-!pgAHbM##_DblMjN@IItAwHvLEqQ^!vO6 zyvh9w;p4NO+KMdbxo4=o2+G*N^9Dzbfz!P*IsC%e zxsibt7YgSMwvC2W$pu+1M%(U%;Y5wS$ww&Rb;Fky@qZ zjnSzyET^b##zb=!Ys14?iM=xpPqprM>~ffgYBfe`;N(Z&Aybzl_NmX7J2H0*+k#d7 zqwIy%%^n>2e6Ep8xf&@m6EehZ(buw2BI51%y>42zmUxQh9er&TD7P@smZt@FQGnLl zr2{A_oy+*xV^s6gXl{Eam3?Qs$b^imt)yH;MJ3Badh+!cG|aHQ8c)&4gSI8kGqbCAfV5`1iS4845ubzWWJ zUy#qnkD4L>GGL&+@z2EHie*zxh~Bi0Xaq<#9jO+@zhIEY8Zx z(r@!lNDrKaT8w2=QBigGR2G12<|>}{asv8&#ru%JwfXsUEkFqk)OX%Dr!lKmDn4*1 z7aaG+f2K_Z^??rZ{XXC-zK7BMcGUw(pKbEA#pO2CFHK&J11U#>U!!#AAx z0fcdkT-0mgiP1pD%NjUvt7i;enP@xjhJi4Drv*jG1^*XFB+4`z9F5frM`IC>vz)@g zVsmg{>mj@X($eI=AS4lC@M^|du3XRvifg0~94y8M2Y}tfX%|WU3t&>*4-OWyd$X_R z0tbsx!NFo!Z~&MnoR%N;zu+g8so`KT@>hTvT{u__ZJb3P&awyxP8;)oFg-Y$7b5DH zAzzSagkbouc?Ohg*IBcUzqyAUg}GY)`G#&vVkjjo-Mz8`v9-z4)X^Es6o?z1lYESk zLPel5TyAvA{}h+aZH7T={t9MWP*7lM^AO>7G@Ec2h>dZW+Tw8rL|se`czL>kk7x>d zKc>3SUC?e=vNU@E_Mm{{iaLh6DU^+x~e8nEwH{vy}OdtN$YV7fz4xA3PuY z>OW-v0{Hzm8KhAGDp@h$Ab60V5Q>1!txv{AA}q%w6@VI$3fw_iT_`A_XM$dS{E--q zL~`}(lWgA^8gbHw7%Im^@zvWtx<2;R-ktIOa9R8v-}&{~Fj{V8-k`|VZ)oa!)U9#Q zL|i*~v97};DnLd7-EA?y%&7sGmTc!1;%6t8nY8Mga~PzEBamRfP} zGmToZzfk^rpId!Q5??RvZZ1VvP*}>p=L{x1vS46uoqjYk6(j|5c8nLdu3wTDG&D9; zDR%3yeaUd=Nq#dURhYE<`1Ma%5QfeT%^Sdsa#8x&m+Mo&)rX32(Uu53XO*gjY*hE( zHO19vVGn!-cdBvi8(;7Hed`>~DJb`%BN^j_Yl*7%qycgI7D*DQM>JCk8qO8y5?O!T4^g&k3dv07?cs!FN<6#Z0AsS1)*jK@_&X2Hk*!KeA-~Hjs$kkN+})?9!GZNf)meQm%ZVpQYsP`GA_`F z-!a+o6=IsSSl0?T{v5Go!C9dF_JBFj4P*Z-l9eo`*B!%C7%?9}RqzY@>sMd=7F1>| zhP)O0i8>lL3^T?k@dqOzv1uLkw2@|e*+?{temnkWf-F(rZFQZtEL zW>sMQxeEn(8ud!>^q;ppRVq{VD08)8+J>1Vh0(wuApC zuniuBa=JFeN4ze3%;8{0V#|r%bHu(ry7VEnLS?T26%qYyApoN`!~SAwyG+b;zJen} zFW=ewr2-k!z&Y-2ZS-Pm=V#y9=Q?%?=K`MOAl_NvG1#YHbK-6io_CzQ&*UvT+R_~Q zqA?jSr?c1#GY_lX>u8^dRHtwZ8EOP*Mk}H%`T5u@E3qUzhHrHyUuxd&q9m3pTi=H_HE*KmL zomm?R^!wQ682tKc@cR>g3b_r9#>GoqySW9S*1Tu>J6h3H1N{-5RH&rwzpZ7@ z!q0(gNy8!DlpfXb%3qkB|I^Cjb+O-&a^ZwjbD1!_?)UW?POx_3<7V|}q#*vUU=q$> z2agXwCEqjbJ!GC>{COD5o>151RE+=q=7Jd~zwV3VDPJFE~V-5Yv-Sn=C)crNp2iN890m=Ic{ZAGcG33kn zLt;oKA>a5(+V1rG=5U>;EcnA?j+g3O48Ec#g?uxI{OuYXi}P|-)idVTZ;y|E_d-_6 z>Et3`gm#juk!*iA4{1kc3?rjAYT`B0_(w8=GERS5 z;avd6XlsTBI)5f!IZ)l>b(hog+J9@jp0SvaF%@Y(-RIuu*SY!>`%-6S+e}z=LT#7Kl#loU0kJp%9sv?X!Pcyqd9< zD_E;_Y=oWd9QlXJqYX!|DQJS9kfF)J4yM80o7p^m+QKDxE5S90xka5bp~;=uh!Seo ze#I5iD5(9FXs+1Dx{atPU7Lg%6SMq-+rw#zSUp+~E-~tKMZ4ya10j`SR%PhPry)0A z2>cjSN@oL5;5e`ooA9mwO)~SmLtwL=tO_`BO%YZQ^tjS|Mahq?7eGVjV9Y6o@2Ks& z8haFXMv+L|D^Jb&!JzNJgxhPyvS%T|18Xj7w9MW)(t{Qsv-JDGnZ1KSuS$Dn=QbD8 zW1II)AGXU}`E3^W^tZ|OwrN~^`g%&XcV>=rJYSEA)2YY8M^t$_{4$OQ&5x^}vlDS| zt`m{0qwxC_b(+uX9VR&oBk=76;EAP;hpvZOq}dZ78IMi*^Gx72UTQW$ABvzIQ}a8T zA6!yDmD*o_X6pi!4^Fn$B(wNX`O2iLQlF7GJpN7!d_Xh*l0(bub(Ng1!@fq8GDUZ4 zpO!^8UNg1!B>ROZ{XiWM?-ETMRsb_K=J8YK7;a+!M|Ds^4R5f`$@Te+JqG7l(ui$=}6(1ynvCw;4i)^*dB6Mb7Efjh^ ze4v`?;P;1z$lsk;k3a9_JwN1-Xo{J{p0qN66R2qPCZSM-+}@AoRUH9 z;dqjoZO7Gd^8R=(^?q;XmW+m0JJV`gq^c-nk+u5bcX>aBZ7#`Fam3_<`;y6}rPhW8 zGcCwtC48)>FWyG+x~Ea^Jd(X@tysau&z=3d%cIpBfIT(@P^Y|ZkYaO9UB%>B)^f2) zgOAfL;m6TdvYnE0?;H}Gt#Vr<*mqXcZHZpv=n94B>y58A*@>t(oddXzf)1wXoksjD z#5ONELJV?j24V>Xe6v+U^>V6}g~(~Yru!H*d#-r zjhT525;mO48fYJ!yh39Vs8klj{~n$;W-7a^C!k~)`JDOXN&t=)B4)Fl_QBKpCKhBx z!=HgSS!#>qa#-pLKVknL)tvQP6K)sAMZT1%h#)Q9sUjewL_vDQ=n0eV?pBcQ24OUe z?i4meY3X!yH^Rg*HtL;!#{0|j^SQ3)zRvYL=f2N})m{#_jT}5zxzu>xv{AKa zM^w5jg4m%#d3&4PCk}fz>d~NO+OS^&VPej|KCj@XD zEyN`265j!(McEPAE4zz+jovgNX<;2!b%FjB{u$-@hd*MGcZ@}J{>Vg}=3?0rVw{vb zGjZFxa{K1L)ayFOY&p=-!CNOR1sx-yD!H-^Y$iCSyFUy)OUFUnxSo^AQQQWR9p*rc^CijDVg=OPua;~ zcefMI0dlP*(X+XqdyFQz`}Ov;X#6TpgF+-DQY$u9DhRwN3e-JYkfDDv~RfD3R|KaDx) z?Ea?R@l!dB^$p&~mbzfg3M8E;ECU6eRiEy%$}d=qHcYoHd8nbPhIrKV5t%| z3dVYk*0F9$RiB8jkQ$Wj98z;g;gHTo$ebH`$77M(>%#EO`6U$&Py2;HxXr4X;cuN} zMjN0}so!iH0z%y5Y2O>Ti80!8C8(@W#yq{pIJ%TH%=sPyuq-Tu2n&$WdyNo6hhiyk zmehs*TN8X0Pg~9SdU@&o`0o-nJsAmVQ1T%3I*2+I%zn#4CiXqLn|sA?OMXrW#ISGX z#*y&-+UT)Hx;)Xo}E&E)R#G_=*UG|24CT8*qe#XIzY8wMdn<*qtjpY7gGCq znC7lYDb{)5r8J9QZ8(N;2n3^_g2i^^bj(?x#`VMe&kAw;i6@W#h~_ez6Yng-1VrVBuK`?ux2P*0b5;^BD_Sm`x>iV@%26f%pX}(1Ik;&ux_1A&XXSu&?1|WJ z#`S_@;prI3q>-L4EvMb%;qya^K8P^iIW*u!SExQ1W_{?p=5p7ttheBr!D0NXqFK1O z7L1yfmtKmye(Wx#xA*!?`h5M@9^U(Yt~*g|bN&Y7S2q3Pk%HDc9>pzc8Arj?8H-y( zw*N$q=Dth_IZm%SLxU`csE*|jI0&essMg#UMvj`?VMc47ylGGGP=y}jt zdK5RBvEC9=SFl#Iaz$p}f~)?O$*;x>3o6orMQENwEtXA2Mhv)bYXDo>X^ArIl3oV` z(;Npm8Fu-8Ye!eVhI*V&{D%OZ2hHuLrZ!i{WE?%-L68Q~RerlZIm^|H%>C|Wx}V&>~vwafY)A6jM|q2?1Ct8{hAI>CC&DXzo$zaQng3&!DF_!kO9+5F2N z8!y2oF$?sGI7IgkPgToql3FFs3Id#J+K)uJCzf(Z>E_k*fj*|6Uu8`$eWbUY-I)PQ zV?&7RL=MrY0oE|!nRJKldAXE$($s4xK)6MHF?*90a(ukx2cz(Bi$b+cq$B-KkCsUc ze{{af?%{D~`!vKm7ULyd+Z7l+cu&#~>)|rY-;l${)AO!ud<_|kbotZ}atmJ~VC-`6 zGd63iYinPbwht+F`TKu+A@JRp6$e5P*T+$J}5^b-wLB#3##MIZmT z8eiSiT~6m}{Q82O?!?boa@z+Wb~dPVKK_#Zx5{XdVUSwgV0&95`Kqku*zbPK-Z$Aa z*i29n#ItM_gv7ZExM6pz zCNjbBPzLtm>3qfT(cYQ^LoBVZ5q}&0epNqE0Tlm<*vYGMqvrQs&mve2_I)e{XcD|s zmo)aYDMSzZ1-Ee><;H=EPs%znXfZqD;64jMA-g6Q9bd%OPS&@%8QftUKmcG>0)k8@+ zaG;$Ax{A)C#9lTSlwQ!VLBAL5z=9J=A0lcbJ*y{1gnS7OrC14k^5p?}OD%L!85WFdJXtKYnwD7A5V&#kXgjD)70=f}Jprp*mt)P}!=9;%7XOeV zA%QGTc@6$Y8L!lh?Mcr6Hx^vbhh>pT7{u>&UmA_lGLtbcW~hIed;!qIo_`)3wBq@0 zcxm;iFLAQ@r$~*TEvG*eT-$o0XDL36)WQ$ES^`!MsPa@UbcC(_r=Jad3WBeBj zWri@L^;V^iAt&VLbq_hJC4gGui9>x0+G+F!PvXnX&+(UB$m#7MvQaze3M7i1| z;wubvdCHlSyly36`!t1afA$~V3qQl;QJR0 ze~BM_5~b+rG$GdrNC{?7Ws1MPJ9o7nZLb!1cKE!W6ZJ^%HnCCjWA zNk~4tF6xf_-jjVwun-7!!eRUxhEp-^+1+-%7c}mY-L-D{Uu$E|LD7=eD;rws4}i{b znw(HofAYf_z~lpN%~X5b+-GvN%TcL)B@xo5UtP1`aBm;(r;^c@_!}HjleMsJBUCX2 zfKQg~h5sxWr)p3f|2Sa~?r%nWoP)OA6+E_6ftbR0;trHwxdkl3X^lo8ytwI_|GN|` zjyNxpeiy`ak1LqmH6-SG_rBp3-6vUU8$65bY}6xikf{cYK(^0btHSo2D`hSnI@gqX zNu>nDExzq6cKGh@w%34ngS~2?l}a!z2#sx%$7IS=5kw<#9{fRuN#9(w*c;gA@XULA zRNff$r=5_{smvcK4ILU^7w1B7${Q<~S+ntwQ0R?BtfAC)Mcpm&_}ECWhrVUYCvc!J zK*YGDFLWiWnYoGkQK-`W{$Ir3b*V<)Ir7N;xbPrHLF4brpv; zh3=-R%SigqFFXs4vq_+oLLr!Lv3H5Z4zrQO^4jsc>sx=*Gk+Jz!dnB@Tf_Hf7}k;3 zvrrv!tt?YTc#B=sOa`Oe!L5wAI!vE*{IF?LQudQc3ToLEY58P&_ac)R93Fs~ z{=@p>*4LU-)~o^>Nw+aH%?dUDoO|Wd)!rb7@={#>Pz?G`$TLI-<>uj9Wzaaf9H+54 z66Ss2{_M&puM$L>u@T#Md*b4Ftc!$cGK)Y`{F8lcG&GY%llQU&$Yn(MMN$?|o{ky^ z-59&<&jL)J8Gja^=Ck%&0To*nmtYXMgw=&;jJ}H6hz%shG#~g}HlGs8@3y6(T|?jn zybC15oyhwgaz~5yW!vt@Qrf|A>K+6A1eS8!)Re@B&4qwI-zu5aW1fdS2$kka^+Wg$hn3rNlbO&{;xL z+8&=<_~wHOf`9tPFGUd8C`PI=lh@2uxEkoik75W>D<69b2HsPhtkejY4_3=a91A;U z6y&0RerIvTuct-~f#>(qQg^bRSeImIlbhxy9f!6WSB~RCcWmf9{ja>T36^i=vHoL8 zGXYA01seSny_=ohPo-8*-8jS0#w%W{5&9~kVYYl^OmDRreZFfux2VPBV$FB~qR z#ZOY{hk%R&jLSOmi1wUhl)3NlX4#+AsYPu!tE%dOEYfBx2c;g{O)=+w znV|Iw^`gz1YNoPyT!eeUbH0|mP12%RpHsve{Rj{PzuxU?OFT9&I2Na6i#91{6xIE&ZOE8(C6`4yr#yutTZ9|BW>hfdYlo6QFa5Rn)kcc5 zd1gJ{GD@-l@2pQUVd>+VZ3bGCwpm+~U0&75#~!9#pWmqc&DZN5hs(TZsEeS&o+)#= z`Jna59`T6X+A0?wj*UUj1I&=-kUUfFwplj87Gv1mF~Rf?cJv(I0#nvrJ61tOPNM*% z(wz$Gn2c-WF$lHMdE@h6cZ&*L+>(Ly;pfvA&%C9JQ-vOeQMv+cskLuB1aqnE9eW!{TaI-&MiDZqgZ|(v{`#SNcrTMv=1@xE@V{$xeOTY<#(X7A{obPCB{rHa=B zMM0i10$9J}85jIPJ>hEn9>xH)>M4#7yi$@&l3&@{Z2@)RSv)RNb9ijvA!a8)78`1k z$KrdE)c(02KA}5?PU_~q&DkYa3IHx$Zw}^LUrrBQZ5>^Flop_og^(M`EnnD7vUygX z4uC0a8o3SI5z*?qxvE!B(TBS06srbu>9;tru^ae+IxHENuq44qpwi7GyJ^3m4#PV^ zB`5M?n_sfc4ERJz#v52eMk@+S;5;G#MwZ8iSBk;T>^xW4)X1&%#?$*ik&@Oz;ACtQ zhs;pW{2E>8b)Xp@Zi4p$T7XYJ%g6@nPA9!~NW_W9Zzd3AZ&6f;C5_zaWZWssHSGKh zs}H$_RLS0Gi&A8xmSwx+t(!Q=N$Qmb|lxbOKD#H^&Lz!M#4t&wItL>&R zouC@wd~S-&@a3wD+{V_Kimt71om&Wp`f_x#6C<8vl+*mf64JlR0|X|#(hQR8YrLIc zndtdAgs|stvXeP9|U|u0V;uM!hq1P{{ zLF#*O2CqkvCj#!^c`qtbb$B+iINsL_m`rfMV~_C+nSY#_{~Jp>wHqI_SSGt;9Ek^n zEw{Uc;d23d`}ycZ41sAn%cr56zuZ5fa~LJtKInHeISlDqNN@rTjk`l|w?KlsySux?c78iE z=giK`+1cHH_K!ZV>vdPXx>fgG`RcpjDoQd~=%nayaBx_1vXW}B>k1qkeC!(p*f%9= zIa$~R$wCY$1_xIagYjg73~Qq~$m%%5!D0XY_kky5ln;R2BzBSd;-YSE?&5CZWCrJ8 zVrA#TYG>v`&Be;j${D!>QGtV#EtQiL)9^4nPIv!8s1UTb`}}<4{kXC?Z|}A;a&(gZ zi}Q8_Yo&Cyj22l{g+MMojvN_{MovsrGzgv$NlZoTXIa2j+T{CP7iG6^FK+ zR~dMeFd;IT9f^npKb&ShWhQ%>=R0*kX;&nEo|sb1a6N9#X}KtPWkp@ zhZg$#&y6SBM1k-9ht$W52#vh984pVMT^CklbqoNXx~JK2o`5Y*T4@_h3Qpfb=x#cN2M2oJ6x0v>rl%3DC_p1rd}OkoJ@)Q zv6QX-dCi?y+N~~Ksas3jFgN~``9Q(rI(od;#0vq7vA%`%@o-ucTl1sRh+p*e4bc1c zUcm|Pu|BBD4pJjzeY{WCMDe;mnIG+2X|swD$;oKVieU%oAKbH&O^MZ8zy92So|Wp% z^53FaH6NYB8h3i@GI*b$^Pj_|XO!fU4=$HxZ+4V*`hIYycG+nq;L*P-=wp!TFk7o8 zT!>1%=UC8VAZ5U-GMZ0s(GC%|Xrteme)`<51XR1rXZEbD(4)V}MkB+Ko(64@B@RCc zQe4}d5Y_DCznulbmdnh=4r_dl2EKu3`E`uLN-Ap5eaK%YryzFp+`R>l>crzWZQ77& z62rqsSve{pTa^$7gmB`#BxW_IH5I$6Z8Oz({`VrUSGPv__GULf=6;6G0`l`?UUN=m zzFsu-tSkJj7^Q6Krw}P|*cMIvC>JK!XU`S+Jxo!kKSKAr_DLrZDq;bgA$GJd1 zyC_PcAw0f{Qpz$2nS#O+g(G+*tr;3Ir!QxV9ZybA@;2#V3ZuRUUK@?IS5?6#eBJu( z4r{(y=4%Q##~2e6GOWnvHGk|8MmQ^X)GKRTB|!3e->au7+$CK1b5YB3OB<=#Vl?j; zjMf{kRHfQ3*5~O&pbR%1J#Ep*A%Z0i{MqFD$W`>sW!FDNf0Nv5vs45CPaU-d5z*tP zMBk#{s~?jP#VAlg)G>jTn}IZnu_?7ATcvX>>?QQ3zrdqn%TQIQY!B0!D%Rius?n9G z)L5OKm3sQTg<^2wJdLpFlHC4cKKO!n1d6U&mzDkwdwZ1=g9&sdRa>QoNH;2XQ&yR1 zE{1yHMPX$g$@WFXdc>tRvRabHuKo}$Ra+=63&DS-wpmD4z9fpPvjKP8~> z<%?N2PjFFp-RP2i$00H}1D!P?kE`{pHF1RrP2uj#aPGTNI)f2Zw~lvi!+A?ne2g(k zvtt8j9gPRlq%LWVV!K1UgT-x`Yi{q_9c$Q8Qf^NAz~ zWBN$?fJSUxh^(d$>{!~Di%WuFSAHUA(7!0FkFCHcIpwo3MC528w4G>J8;gu!{yWjM z2nzl&m3HJ~bwu2~g}6R%Wp_a}wH4DsDR5EXh`vQ|rh`cj>CK4-swQ>Bhe6+OXBlpR zJobz{qc?-g5Znf^YLd+nR4!wsxG2)90@6=RDRodw>T!I;frC=uBq>9Hr$%7y5sfh8 z=>*F1#beeHH}2Z-RT`w)CjW+%LZdX(7_G6!j_3vsz-NO3k?5ZN%g6-1t)okyY>_ex zJ`yKQsi)&aHZ}ytS=N7&Ih{b3kocfpqnFq=Dfn=e%S@D57gbi#=wa|;;t3Et9`j$+ zz0awSi;MFWH{nsK&Rwg5qKA>*_wHUIEjft{`xdfFC1KXe%$*3i_D@axUEG*rm?rpT zCAT7tt}AVxRPQ&_OT@MJJNyBp=?ZXA#5n9Mc&ldA-+iiy5bOCt7>nw5XuA-fG;rUR z=E6AOM@B|PTwMLia33c651gqdx$dr+h2OGz^E+z(|N`zB{EJ>R8gc%V97d=88Gz_+use@-VrjpZeq zvSl1Us*mZl)%5Cnmvuk31TW%xR0&&;M^ToYMdGKx=uct|9I4Yks3h}JyP!f+Ufpxe=)NKpRD>*qaw@`{Qmu0 zUS3P6W5@HuuGSlnx<`7F=Hy&7l&7~Ee6WC;^ZpGe*b01F`o}dljxP%uTaNla_38iJ z@c(nS|DSNupoG4CqgY&&lJu=aQG~#LX0UWp;Z@i6*>9;!YJ1_lz=Q6a+wr~;Ge`-a z8mZ&c49(lXG8y}JsSktd1SJ$n4Ofr40(p$;-3wBOdS&omjsA=#byQ^#O%; z(+L@@`CVtj>b!HG~q&W%|G}I z+pfzG`$bUl1(&_;4-4@2@06TJa+UV<>s#Fyr6)gycO`pKf+{`KUiL_GHv&nrRoE9U zm2LydT5~Si8XAwhrTt%4U#(9$?q%}vm-Z=nm|ZNtkeB=2 z5L*Q;%1zb3Z1S0d?^UE|{EkhX8@?&gr%KR(QZjE-lI?108z%(*yhB3ql{&3ylQ>x1^MtGh)e)EWUc?NUDAGImfJ!s%ViHq)Yot1Yx<=L_A7FB*`t^|w~9VrOifY|$y`)NTNYVWHJ!l|HI&Qk2W!Um_8r<PmYg(E5Y@Tl+}q0(3lbo}0JI=@){ zv_e~x8kB|7^+oG1d)v>44-mnWDz_3dv&nkDN}0L_1(1EKe%;kip#tQvE>@2KRdGIH zz8Yecw4>1`w zphG0TQrDS}wG^9b+PMprZnZ>Y%)xfmql>7_)BaDeow#Z+$+QZqsvglQ2EY&#&W7o zkwj1LPX5zyquizI?9Himv!(q(8Gjk0S`GEM`v)V7a5jzf00TyCd^SCLZ@w98(@I@6 zcUsmjSlAMJ^58U4U9HR7#-)00(AILl>_g9VP_k4>`jSNyPWiS-jzW93j;IukixRCZ z#|QI>&N^*YfR5nIYcN-d;%9(9~ErH{uea55T>p3djT~hBmY6t0V_9?kPA}yKW z_Pk~LF)X=Ec!YNf-ey;C=4vsG(tUf)G;3K`s}@kFXs@+TYOs+>3iMXeHF(j4CAz6W z$$#zSu7yG5h>y@%V5khb+B084Mzpj$zY4HSg6^uvqP4WRST5@F=j@y0c@C@_c~L-B zjB#sCJ+6wO#JrnAfiLp^kRtqF%t;gfw(g+??`XWB;CU zQoZ0c4+elM&?!S4rbXyaH9eRzCaxsaIji3;{~E#lUD>G25j%EC_R%cSvHg8h%TA?; zLLj&zV*iC@b}Z5uXPE=t;=}Y&J--7u83Do6-9_l)cil;nqAd53cowu&ywid+S)V?g z1~(!AD$kR1r12AEhC_yA=6r|n_6PBHHp8b6rLLcjBKA|dQlyk$*}s=;U$s@t@AC_O zG>!Wnbd0qPGBacIyoyhzfiG+kRyvOTSr)J5MkYKYcaQUWXcV0;n6NDNRVA66KBZd* zry2t`Ig+fM6=%Omn+#dWCey5Rg=DKpE*?*nF8qkONmumVm>UJ?7T+G?wg?6L@AvK1 ztIbR@km$gZO_gII_m0T(8^up8#t13Q8=Sr7d>CNh8x7}U7Mn4Q6FyKOP z^7hbrl{WXshMHbcy-^z1Lq^}68Odpak-I^vXhu?mx`F^@hJ=(hsauV-jQ7fe7>xw{ zMc-RK-7sUuxgTfwy#3F3g612=`Pp7t>sgPJ^4!XO83%6dwBEY=Wp%R>AKJF33Bvn? z=pGI%ekP6@PMz6M$4Zfd-6AJb@GVA5$UwD9;gYqn3LP05?a8Y^e2dj-QNS#r7Nod( zg4dM@$8ZLxXor6+lOjQFa%N?P_-lm;UMxUBCx`7a@TZdH0R(PZpJ)!tvzRGhA}J(+ zUbG$M|AFWHU%R&dUH|J72NkDG88TL5Izmq1<19dBB{52Um|7ydc2rWO!zet^OLAZv zrgPRY3GCmw!caOd75T*NIW)KV&cAEm$p|h~%*;_o1AV7G3b?5-1;T=)JQkuFG|ktq zd2fCW>nFL-e4-gV*+(&V&3em$`BnY*VMNTX@p(P(5?}joS}XizPx}Gs91#pDz!}POCB}y?eSo!BfF_ff|LW%cP&#J9ufBX1@( zD8cAKXHZtIzmHtOwg8Ul?9`5bDV$4-*YhgNtea)MVxFnkG*mDi3elL}#Hs`Y<4Lg8 z=I2EhKXjN~BEfQbI)SYz4yNKwndeDwKA&}3R*6H{9LW#uA!%O9I`Z;{lQzkH?`L{W z9((;?dfid$?CDqpS#k=hbmUq`<(P^QA9&0y$>UUbbx9bQKlncN^fMs0QOBr=jyC!d zrkxGvX$h+hWmuDb%u0S(skHJLQ{GUF8JaNv9;ajC&TJ%rIdG{x-k1)LaCKghTQD0U z?gmXAc)pd@oJsZHjTulv$o|E$7Zf>d3RRIj8HR8)ju4?k$^mRo<9yX&pYVoj^Iyx> z1U}@5)T(*tz!DPF4Kt-2^?tGAqIij0Iugs^y~`E7SymSYtm?Hshp0hOMS! zfs&Baoj1kHU?R3yA~vRIHt&ns?!UvE1aV>Stg~-^HQKk*8;vL?iO}Xb8#3J7p;cdrZNNC!yHFoCY+&JREV6v@n zsdvaAk(!qg)W{P-$)h$qkR?aNRb}`<((mAu@{8~%J+IE?e(h4v-HBkDJW|o=Jhy%F zsnZ;qRATkE&jnuryQD6ZX8P0fIJGW=C02fozKTm(oG4hg)_|)-t3G~3M9sLL>w~CV z;P6bf1i4?l9#!O)7`PW3=|e_toTzx8qD~Tn9zsVy@$gwAej`9f)+(@&jg(54&f2L; zJ*8c5FN1^hMU-_i$6;CCI=WxtM=GOcMQXVg7M zLLVc4Gi6Z_U6fGGuMXH0M?1sPP-HwwaX;U!X|jG`ruHPA2^`-T0xlqt?Pj72LJi{T z$x!hRvk&K~#Vo`KnL0nnC3*`8@!<~bCAI3)UiL4uX*|5}3z^{n$q@<1VAab<*9_{| z1444THs*ftKVV~H`}qZm?D^{g|GIP|->cgN#`FzIao%`YzxJOO@XXC_R7=}%sF7hM z{js#x3;xOcj(b!d7meP5DRg_f?Sr}}g8BFE{RG{lO0t5cZbG*Ll$#rD?1BQns-~>J zx@}N@ZSMAyode@?`=bkwpF@P>(x;94sVM@yU-SeXq}Sw@MvM5=-qskY_MUpKPqgps zn+m_IU~Ai4McMxFF1B$h&4?Hv^hRYf$~1CK3-B2V|DLL(g!#Nmy67}=5VWI_<+fPZ%{Y0*at1Inlu^}BY(gjJn{FH=1>z6P}I zw8O{c>0ho!-Vum$K*+(ju=)8Z0)14NP0Y;;7O(S`(lN=Q4_09~wVGYOG=f}Z2YP`| z&79+j-jvHFAv5kB18<+;@uCi=bW=z%~PI=pNEM%dWgoACF^c{9^7Wx z&5CVKeeZvDm@!R5e(KcA)as6lB@*0uukq)3JJxNx6LW4oJZ|9mDMLp;BJBl`ce10n z%E?Ei%Ehjg>9Xd9*Z0)97i%}?Jyt#2V_EkUJXQ{*Y0&cI!-hpaC|@0FjVpTq%(=pq?{2&$af28?*P zh)U#s)Skr}jA7M0-U4E%;1bk#)c&Tp=wB&@CuNAP%>tnvhJK1NCl~08nJtF?I(mfe z!$)#$je+mn7@GNdwfs~jM<yOtQ1iwY>+7x@Iri|@7{3rV|a@TD_?}Kaouf9;-ildWCti0 zj_;NIsrm6HMDg7Z237>bWm-@TvFy*`)RuG>0)_yN_&j3-6pDLAengVyPay45w7$_% z|Fg9~T0udlU2-V->goE6AXVUm;2r(EODxH%aj0!N9_c8^Xd zm4WNGp=VyJPZmxpz@jyg$O z41jQfqQ7ct5QniSV{qQQ5mk4`%37QAp|-v)VIn~9qJw`$rlq9~F!%NGS(=>0Uv9OA z^G!}kA>j(5bE|}^tE)#xN1K?K#J8l*RvOvc*}1v8CfY311-wMo)d93J+;xU3?8drc zTWe}AFSZBYzI{taM+adwsIIOSZ#c$|Pe{nk%^iR9H^3M87BW~~UXHBxaxuvEczY_N z?ha3mEn{SqDgAh-BupOw&Iu?uhPgsm#ANA1#Lmv{uscG*6(r2*IrDXs&MU*Kl zV>S;E16*EQsHv%qy`c{T+o2F^Ob!nIkkq|OCZ7p_wZEu4dwDHPOyEU6jq(2HAIWO! zj06vNcN&_S*^Xrh(@U7_`SfwJwe|HVK{@~RhPkJw=hv?^q+RSP!^3a_;GlttfdMc` zvigOk;NN5BRBH+gd#9%fAItgRN}5QFWrpYG=0--8xPol6psDcEQv`32xVgC%cXEg( zI0jEN)%#3uag=cjr5AJs=!;pnT}#@^>s)bt-=@k?*dx2RsKzp(#Ljk0KeUMbUPH1n zCeV>mr`=MI437(Y)pkK$P>1KNBt+ck2hcLr5GedG^!iDM8?>* zflr=I36)S;njITSA0IC-FPk0!C)HM^=eMQD=2>x3`Ml9>f4)P6X7Hv|%y4CBAOQ~N zcHRRay>w3yRFHDCv(wnitDF8**WRrGN>uSak=A}j{U&tmGp)t5FI_P4dFz6r&q0kv zocr^uSHD4Dx`RNeN|Z$)2tC`YBl<_IfTzK__vkN+091FIPp#ut>`90iU~C*5Z*TA1 zxMMgCe9@-DMmDV{-7?AH{S2G@5A*^Z>;5zE4ybzNOO-&4zQN0<%lNl_TX5P z>3}p9S0b-s%)2`Xs;a8GXno9AL~mRSy=#^^h-MS5Wu4i`9BssqDuc|Ruk_1C$D_{p zPr+gFGmlIEJraX2VqvNo24H=$ALApBhC&y#fN-Cb&ZNVkP-n4XdZJj97)6;uapSqii=EugU z?;Cd+1SkLc^(!rnoU0lS2n6o!+5-H+5SjKR-**KX44z+hXnV9t8!(niNhBhLj?vX6<~D zIpTTU^tX`#biwug`GXu)h79Za>jeC{UtNPAS%jUPE6C#f8v<($tH@qV$Ney_i8wXE zc}hYqR}M!?e_FMNHvc^cw_V(Or_ zz^dqEd%sJv{(QX8y(QgC(9BatdUBZu**82fx2p=x77 zwyxML*bC`{yONDKv3bEJCRJlo0Qi4%G8q0l6}zOgC1tpC^lPvi33pAEfdJ>ZA^Xzy zqbL1Ya|mqDPD{}<=eWv>(Ihq0)e{)6xB3&bD-Go)Iszz4>2oXf*Qewh=maHBN|(e8 z4Lo-26LGiS=lfbid-wbNJ$4$Ws?>Fx3``M>J0(lYBk=ls?q|sOjo9@l%1>NQOCI=& zKRhlQHptDuJ!2kL>@eIv`2zon=I7)HG6u<5-Zcd@P;Yw%Ob;?D7c1}-Hl|hNyrEMu zM2@n5d6ZExoB^diBb&v}cRmtEF;LG4tG9TK%Bds&oCQ=#RY%-e-1!9C+1LmQ3o8{) z?iO~Le@@BbPP8!)VlL|6t#561ylea!Uoq`Vlurc69g6cJ{2|JNn$EnQZ}YIVX-z+& zrpADYh=v(0+euLr#^@wWzioto8&P(O!>> z8S)3+1aFezHd^@o=D{G*Q{-;rKJ$>;ib&?ZZ4*1Pa0lgeZ)=d-Dy# zyE+`M_^#e?7RMa3zPtXAvbxd`T}rPAS$Q24t}#SckR%<`7Fpp7Z&iFE5w0}1w6wIc zV!{sn5gCazUR=zipfCu9lJ?I`UwQ%xp{tBKLNrd2f&;NtOARp*q5Cl8opPp>40(HF z>%M4Za358`o#>$%*$n8~I_Vw`4~dgHX!iMC{o{Q^Ln23GCSrxP@`*1A4v6n?^j8Hq z+QKURIwxF!&(t*>b-4%357r8sZDK`lm}77y)wc>LsBrX_=~`cX1?nJ&XNdT}n2a;3 zTz*rJ04+S~y$fB4o$!k;*LJ3nxr`Lh)L%LO&XaY37#KQ2N{96M%}?R_1$V`_Oe-N6 zuP;Xawzh2i7mpoG!-=fyv&$ILO1EzR98R*S^6<2EdawxS?= znVmJ_R%LWg+VE@o@yCaGdVQZ{GaYTf{qVaBep9YIGw?9x++nrsZ~=k+aR52CQ;V)B z9mlsP?qG?+mL5%HNcYwS@>hU*Ljv^a-4A?SkB@3AH)R4M0y*HMh-n+S+vy8m=5`^r z*m!={HFshP!D-=WK^ypi!F3E=KqY-81eyiq;^Kng3jXICA&H68L>+lIo`6(!-wJ6S z$B?XYdep-g!9w#lYQ|kZAy?~n2adP|=yQtn4V%8P&|R|gi+u#raQOBD51go>a#eNO z65sv8BH#I?rKQ=yb)s1*uv35Tdi2MS&BnPfmJ?zl?Qx2G9vg9BV~q?~;NKNLaD=35 zc*FR`io?QYt1OV!?5Jw+-kD$4^Y!K!Crh8=R2;-g9MqWbnDF+aweK`6r15`TT#cp@ zp`@gI0Vq`X7{dBo)$j9N5AI-(WQ;tlvZ<-lLhY1hC)7AOc^c~545kH!bCrZ$TRf!6 ze$Ku4i4$7(HmCvPRNhGcfK!oyN&*6r0*$*oq#0vv(wSRg*`hD#B;c|G*hG0)7OY9M zH1J(II==um4|!eoa7iDy_F+06(A&N(YvD`lw?PB6Nn>+W#%iFsKMW=s;bn6jg%83 zeQcwyJ+(9vBxzjz0Sw9+NNqe^7jM@oXXcUr{P{E9`*OLKIv~w;{UKm=kIxr5vl0Mb znv&Mt*$IdBse5;t_J%uusy-M)|K_i<{IvT6hJ8jwgsWBp*97_fnJ{%BmQKH?gpTU4 z>-r@YKU$184XeG@;qE}o_$@$tRJ#NXdbQI~B^#L8M$gHkHgs)2#`Bh?s7c-}7MhBx z;f$OG)kFS&bE#JWW(TY;jQ=KjV}W|$#XzD0goB-^=@rq(04F)xde+V`o@0!ZkH3Qv zU>+Y9ViT$i6V9msP!~%rlJ#-dY8dOvC8#ASPFV*=N7?MZqJN_*WipP21ef36H=2MR zg5#nO&^}&3(S1uAY~Se6eDBSfa={MjbP@&d1XE<0H#a2tQ+_sm*M5>ey!qM9=p;me z^$#E_C9dM3-JYaO3OqpdG;@|Slza8}?}5*uv&BYfVQD7cviQ3Ny!Pw($8ud_s=kHT zwWmf|r!(b$;k{b`bn@7qu%d@uDo0ZJy0yLkC)oiy%Iwlx7D8-G>`@lA%hA`{S6!ix zNk@Huq%3uW(+`+cFM;o>P>z+;v|u@mzuHgNT{XAeNZL_`f6>1{b|n*SNQotZTasRp z$J_a%Lhgt4=>$a%7VglN#+j#X7{RM_e2*-CY2*vVWH0&5)U`Uj{iW$N)l{uyQHl($ zPKF!F!%{%5Xq`Y4+#Kc?W^= zfO(y2@nmp2)Jg0VC4@%I;%J*nIb{l1{jF9@;r_Y#?RBPqIXo;EIl_ctoMN_g*J7*} zJ9Nfbg5wzPzlIGGo$)e}*f;vD8_!QZjgYWoZj5e-$Cdl>+4iw~fP-)PbYO*!>PaZ` zC5>R3x9&HFwSd-ert$%dvfM&U<};6{Y`wkl=LgL4?#cKudEXp~Nl=}${=H5sum8}D(G|PfCVnmSt=_nEj3^ur=WPfHhP`z>)YENguv*eYuZ6}UnpRl z;5{o_+UMuzz1{MV>gvxb#oAh0@;Mz(7e8o!AyFM?`nk_l<3^Q>y5CM9lXV0TPLmT8 zi;CF)LuCjF2}Ox`cp5~W_myE0J2mohy@{ZIqV95|OH!!WwEpV0`rzQ8|J^z&Gc&W1 z(dyxBrMHL2w~&y)9@~boT|6WN80);#9%juR9=zlREJ&|_=28HNXts(d9Vs#K9t?Zk z+5%ZyKTax(1ePEzx5n9Q546LQW?fy~m6etL{(f@o&_7>Y-Q0vdFTN=zwK{efz!QFI zjFpL@1aNWvYz=4uP9t@5U|{?xRL+c!imIBo88Z%IEaG+KC5M`Rn3o5Lxs%oIWFezr zV=KwZewoZMPDa+apP89~rP9VvKhx7c=}`MW&Ok5WD2|Vh3kwSqfBqDu3o5Xq)oZ1E zfXTDk=H0vPB!=;(f=2r9cO%3-uF&t_gWy!~^~D7QTIT2Hk1Nde^vD?dhK3YjD**Xa zc8+XQ1>M}-gh5)JvXn9I%9vvW%k^0Bu9J;py-}i~`RQph zSPraHyY~Ee+tkz)e-&l^V;aOxTv1UG?}%eLCiaJflCs@b@8<6A?!MV5hkotmc+psc z8O@&0S`%L*0fyRKa&`wdn}R@+cq^9mUw{sTFw|f-bc-67gv4`qB;6Lgdv8hQL5dakxb$EEV%YXdtU7!I#Y*|M`0|}*7;{bi~`fGx1$KG#Kzu5Xr1d0ur%GMb*FEqCTc1zC57Yj z=YzvTiOo6V#UeCId;5m!YEm*XSlhg%2yMX;rceJchG>%d1Sp&!C64Y*AUx>VAhPDu z6jC`XizB(y8s|-#GY2C)JU(h_YF5oW_+Z{l(~ zHhW_kAbrCA$w|Ax!nvngG!)JO%WkEWgn}X}#5&+DpvxV>O8|!NEDkDkMyug>?q0$$ zGQ&2nx)l2=A3T;Kxxz^yLBRlsrH@|KRM?1JJ6+>lQi_)ni;d_(-RvT`^hukw{!|gxTZypx+73WW-n zRm~h8K+Jc4W8-3HIQ961&N#Fb4erw;%nUp~JrQG~Kx>(7+M)4of-ut%-xcSZ|p8hTlU%g#2H~qfQCjU=gcXWo0EyD;K_nt8>c$*XS&J6A}{K z)qI&u++mvK#?8gG)a+`V`x@Vb21cMjL_pZs*l^2$1Q-++AW<`tF0ga!0<%mtG&DRs zcu7|sVK6&SAQsG8+{4acFc@4`JYjJ_M3g%I6vX{>WqBrHr4prRM|ypKKm7YlDv$jN z%)8)59qDI5$^QHmikG2JaCZ<8#`&*B8vl)fbp!(JCkW*mBv^ttCJ~28bebgpLU8D% z9qxtje-uD^8wjyS*vG?QRKc7VE0k10t+CIM^yMM_BO3)>%0s`0EL0;(`0ID(pMjv> zVx}#IUddTNtH0`uP%IIPw*VE;=#Br}{9IO>{kLJ$VWknDd8+Rdt%R9BS)f+OiHCuE z7gEke^et3A8iIo1gLAtCp|HU(yom(yNQH$3X1)xHX|lOY%M!qweT{67B7%EF5&!~) z-Jg;Q^`yUhKT9o3?r~C21QsXb;wVFqU*!d2QpiZjPmF+ zRWF4xY(CnO7@Umq`p_3QHX~|le_4vm-1~S;ERo^6qwF5o_IZ`)x`Ch}YN7}1#a*Xe zSdf>ec^iOfYO8}H;$!O1lkaD#$NG9L=jLRD4?{$K56o}!irOkGXV*T8 zo!v!DEEx?hlfCp#-~71Umlhh;KCdiHPknr#T%eqs_&jWLQ0n8XKF*DB1#j4R zm8BJox*3XG8Cbfl(z@=th`F~zpZ00)Pdj)%bHg)I%oFJ=8TtlixbLcYII_KoJ7PMha<2HvrCUEw=gK-_$MX5%(`y^!aL+ z$>+q00`8=l6@`IN)Tw7$K#AmVk_J@+QM_l@Jzs{5Dq!~kDj_$c0{nJdRG=c-k?%go z)0Qeqy=4K~NLfM#b03m-j0ti5UB9G!)IZMtWFX}s1&~YkEF>8I==Fwz(DOiEHdyI^ zmDhEku`G2=M>8w`sSp{9pJ74zFKaV;nlx~~C7NSE!>m^B%X$3jpI-2U^ub8RnAfV< zo>du_z-_PDRNgn{(~guSX^_p0z%W^_l2$^5y^=jarHu@oq)52O)!ul^1f`_xgQ%a~ z2P1u3z*d_F9)vxRtqHurmgM^OZs)09bxVo{rMRV$v`MqaG=4Iow6j7;vtKB|CHC{o z6*l?3=fPur#MX!-tr-F&3g)01v}uD?F`Ui!fcbaK<|FhyQo%s`m5oM(8--ow{crgI z?ilXGv_1u>k9tQ@zTzTs(3z2_^<%>qLW_|S~xjDCq`BIeF~_3svOjy%4tC%^rQX;>)yjC zr`VYia?RNv=;&PUrkWy40@GjFm&pHbiKi&dsm%RpY#mj7*+5OV@K=6h9b}c^{IfY1 zl-*nroroqYmRa`TC#H+RWUyz;=sEuC!N<4pC~Pggt=^;=0yvFp@jQ9cw11{)qFN@|1WF zoKAkqG&KCFqU#(<{6<4LIk%+3T}?{hqTyiv#VeMtp*3Sz;^t((2oZk7#Yp|u!53|g zsllDp_e(hML^OFrYse=8w0m-W>seVN3CHd=@o*SsB8}599T@q?HeP05lFJ9<;w_z~ zMwP?Wd{@rW(!q@1xrFoY@ru8#OG{5s$_iPo1+AZ}pMS<*Z81L(EQY6-7ySBgSPwmx zAjj6$OcEAb@3@+2eyPQi%x%N0q;m-4DcD z$xE`yH*afpFS;a@a8^E4Vme#cG5WcWWAYW%-M@|2oUqoZG}@mSab=_+cG?0HmtfWlm#JSyXwUf52{r;YR(J={@d}!~Ol8 zKT0@w@f0vqySIaM)qCHu?Q^ie6*bKsRDoo^UL!h>@)$_HMYm`T{Zbb9@H5kfrgJp3 zHznfpH=DzK|3n-w(QQka?j^c?b5~v7>~S zbUs-m{jM2U`dkH_J|FpxQ&Oa;G+kp&A5$W_^Ts>HpEo}cn5pHQv~v6RvgrHq8ExO< z#pjavx>l(F!%gqp1m%S!_m>U2o6=3PYx%GcbPBQj|2IxOoL*&)5HN7WMpprzZdZ@ zm)cfz&al!XmD!2%GAq&HR8t**83^Qw+gG4sXlSUW7WAKLrGbHg|5Pg#my`s7#eco| zA0pZRCf=gx@P7M2pcOsoy#AeyuB#pnsSW^vwY0rlol!D3718Qfy>H}SQ?-u={JfS6 z;Psk)fHm8WbPd+jP_rj5bs<$$8Oi$u@voP#V&m*6S8{GwqkPkZ##yWU=}`nqCFQ8J z&vn}vT5~ZHh1DMM)R{^JWj}q9OM=Wk8P%#vL-W}9fw@+tA;K%JQ&$f}uSws?OYB8G zbk;BP7C5-9gyzn{@&AR!RagBEz-N`QJCQ&|g7j`Oyi_&e^5G!lm%JSEteNK-SH?$d zKPEiDcpvG#JRqfKCDom>&C{biPE;&mCb(Q9VU%`y?Ln86`Jja%MEpg?+Sbm_PSv*~ z@8i1SZGfeT)G^s@u)-7p`d#|*@wdQ&AgE!5>_5a2PDg>1xCl#8U(CLxdX`GsP;kd9=iVfFxQRigcfKDuzxxFYtW^|rsw;LbgG3VP}nk zyIwrGb?%YNMh=F9O?lW5!p(eV&M3OI0#v;@q>gR?58+R3rA;ylzh`gJk9Obs-nr2( z1IvG}f2>GP3NL}0D7#TT@1JUAGXWDlczGgqxdMW`; zl&c$DRlYiNvJSmm)kFlYZ1nbGQjL#I>Y(TB%p2J~&~tAb1PueqG687wAQ5Z2jvf?! z(_vc-z^i+AWXg(wm(z%&Ynv&pkAKqN7#ZhM-Ed4p&u{sTqNLcN3f{)nxUm>qvJU(Y zHGhY}{l5Bfu?N9nmYx;%Clw z%2(AGzKGF2y(cc>$G<>qXkkzb><5%~yWi7y2WifVHiXr(s+DTc)KrC))iw~(djiE} zRe{HkINEXP+A_3`0%{|No*LY16DNA9NZYK>iDmeDWjn(6sR`6QDGu@Xi*yRw0m0=D zbdNt>E6;m}{ zB6f4{l|8q%gCkJeMbn@dlz{hf%$hI*Luu!ZGX=s$3KKF+yh_lZiL z_9#G6i^h0~3mjS`JooYWIjbdcXx`&=QRiFXQ~Qx-%!!@b?<#CO)u%D7{)IZ_3Vxzu zgOclb8cJ*wv;hK4WSgX zS* z_>Ln9XExO7dadP@k3L3bG2X5^#CqPM3BD3WDF-P}%LBE&dFy9LJ+sv;+0H0v&w&5= zW=yu5p5=@tD-rwb%|vmb?$HE;?P2a@Gks~wFQ*;9S6YxQcq)%Y#iz~+l1;m_4jPML z3wK#X+{Pj&J#xC}TJMT;8Y;Nl)-IeN6syDg*sXQ=8;C!&iC9k@0ljd+Y0U!B;oDCN zH>3r?@9F%c3+{(60-z=%K4Mgqwvk)A7VvC3e2^0eggB1f zQIkoXjKa(&^QTc`<@XI$;eEh;+6vWRLt($=c`X_#gn!7A@1nz%EA}!*?Pyq4^REM6 z8d8#Q{9txq_BvwAhH)2SEv+070{1KaQ-ep9j1E^ouE#5w=%WgnI5)qzP4O|M% zy=V%I+lXL``A*->lbw-9lZJ)jZ(uTUe>1%*IJFQ8B|F@VP3qFjYFS&D!I_l&q=6xQ zu4`+^o{!X}A3t)459L?K?>2;GB4`;&K@Syj;SA;{iiUNEcR(EUt;#*K%UpLsFBPg7 zeQ7@WWL~Okf=U7~>bU%XOwha0eVuG1J_7h(iD}Y6(B(?EQ9s9-ud>eZdpX#;xu}~FK^5y=N>xTxv~!ZRi{mF zTEDK694)Wo+Zq1agV_^Gj^V)SUtTVYSKS$@1F3k$xRL+5I% zNA(e9183wr+7nInA$(~<%ekeiy){yf5d*MHpn&lZywCf~l{A#Rk@H~Ay=G3*Q!tOx z`T*2ZAs$!?SD+us*4iqok?$Z^GwdJNE{lk1tF-h_1b*hAEt^N(q)JPw!bDT>l{R=l zfaqebz|#~fqKNrbYZG%^A{0vH$=vaF1RDi|1~2pAYR1{?(N8@(m6Zr~e~ zrKo}^7+CE$#Ajn@;AeP8866ieFqED@pWr{@Y)^n+;=4*}yQ(=@xPCTvHV0ESwzhX= zQj}CDac5`ZWMXAuxpvM213N91l@L|;`1tz;TK)Yf2pS2MWrzeaYU}j0S{9D<^i*th zO>uSY&qp}@MKBnv$$qBSsn71yLi6j*Yg;RQ!mtR&0k14c3D=~_jk=bghCxSL_S!rZ zTazk_Y4Nw09OZ+1g({$<4F!sLdH^)rfCwO zL-W2x}0S>SPhCLxR+K_L_dCYk>;$!8ki@lk))z*n8hifO_J zN%m(FK9VFtKHpSe4Syy%RR$i9_s<&iSxu?>Tw(f{Gcwt;Btqg^80D!|OjmUYOh+*g zlG*7!k2}r1%PzazHWm;3)!h&7AL^1;hoig#5nfgQ%+f0UD`kvS-He#d8SY7dRi5Gs zec0P=mNQhNX}vJlH2Adq(sYR<`mpjb(l|jjEOCzUjpgqW3>%nl*x_Jce60s*pC!0H zlDT~!DifGhqKQ)up8m$21zszGsW)OA9lKI~XbEvU%o+E2nUlW=|7r*0d+n_|j)_UozLE-iD{+ z?Nlt`pZ8H6>W%NvoYM|ppBHAJC77x$w1f|)--Y1vBsV--<4fod$zuL6s-L-7uj|N_ z+J6I3$;ot;-ag6;^!F%@oz!4Tw+QCbd`n+5F)sx7@kl~Yamz)%cGG2j-fPzNneAgo z7mi*vsr*@<0jo}Cdm@&51ak0YIUjoiQF4>BQ?_%zjMMhA(TL-#Mwd%vHJY<&#F`r= zjn%Fkjq`y#ezjCy@GG>(%Xlmd7n_!<6TX`^HmNsHIhqjAby#2>f{W`laH_8{Eg>#+yjEq)|#xR)&zgyrGI>Zy7unbm-_9<=lYxC%2nl0o7h9x zLh){B_0xtMr>|IAvMlu%s+1fyU5BFcDj7qS{s!LzT+9ZBkZ&vr>!T|rzgo##g1`dM zew9dYhT4HDev3uv7aULU%$V$QT3d0(U2eM~I`E~rMajE)6FDV;bN%Av`{V^O|7`s8 zp`;>u&0;I*UbdT*9aJ`q)ZFfZ3#I=AAB~g!sd3NZP3;ZditYYPy%cNw-&3_XCQK4+ zJd5c1Lio_JvYt{NJfKeR0#Us?a!lAP5NZ$k!VpxxMNPpuBk3-xybs^8$EoAG-s0?K zpmAL!SRp&D?PM|HZPGe+&|cqN;w$WYqnUtG;M{LE}yLn#Ec35Qd2mBaC*1|B36y} zLEAnFHY006LsgPy^OmA>-Rd^guD1%+hwtL8C~CRtNIa1!7eXymnQm#&J(Odg-*}8g zu+eUR&>O-sJPS87rq43jB$Iug@t@aT?)L;Trcf=i-c^6DrTW zC2hOk$JW**H1psP_$1N#i?1CzubuY|pfS2!x84)QR%hY)dUS-lYLKM)s6fY+P8zPb z%|(WffE|B7B5W3_=HI3nj!+#6k|JZb*%2&=3op{Vj>-clz{>Pj964`jo;2V9X4Cu z266b;v=vr+u_OrKauF!f;IZP;Dj+1MVCKRl)?1oLe%AF0f0~NS4qN9fZpPASLH7x* zE5)f&y(h?D4o-fh$Z`PNu=_YL>@#imKBH=Jm0^DDg4vD_GCzhiScXslou3fGgyCe> z2crT2TGFgOtSS;4ld5<=591{6&l;nwEGV_u%Zb^f?!GER7FPDA+dHOb#HMBLlKCGz zB3-QV$L3KLD+xQY#4!whs{MW@qh#|Enj=+C1A%Be#IlB=i{Cx@<02NZXQt9;PGd|i zA=UhlFWL0q-;m*v275~7Jv6nzVFE4dE_?An4dkiP^K+NPLM2M7O?&tr$L^b=DGVsx ziz9xx?Y-TQ*a~R z*DaN-;zDFyYjkaBw}Bw^($$L3Wt=BQL7pY5uuSB< z=(T7?iQpFN!>m~)iy3YWzn*84!fFx*=fd74NG?p^w&cAOhh;VG&!_(2FM7kc@*g47 zBZfLlotQluFHFO#MV4t-zvtJmPvQN7NY|)juVQ-?5VgS-|5d^JImqXo8uiCFD%v@QWE@eVexiK4yuc!ojc@D?CJ14|B%5V zTLj^@#63Zj&MH>xX0}drb+3eeoTy-zL3N@O~Z*cKyS)VOB8u^T8yY*&Qg$b@W_N0xmuFMT92$x?O zL57|C4+PmNt}g;9iDkTA>T}%c#t^O>{AwpzzyPS`LB^sJXa zQdde^1kGzgMJ)k*Jnd^9b8w1M?wJxhRL>PbB6}92OzhxypTNUth6dq-xfjDZf@Kkt z5NFT>I7H{P%hi9tdiHCH+leE*lI!RF0ANl@RbhvlC4p?S=bM+h`HuA5be zq|y@VkJgAh;`^oF7fkui7!KOmyJnlHvzi1$A_K$rMys!dE=7s-3@Mys2*1D6E!izU zhU2}lcz@J-XP#m($u9lLzFw$#eT=+HbM3d^V^_J-lDWiOMpqwo(QD>5kdfv+rXN6R zs3gJ7YmQ3z>Kb^9xhIcp%lud9<^1-Zt9FNyqq#_G&A2q*zop%Yn>Vd^7-DN^Q8*#l z^4oW(y#-Jme}6z{YxwB3GDf|tRyvFAcu(sVW>4Vw*cDf`J7VirO!)izu1XC#aoxZt zht6lY0%%KoW&u=cMosuvaDhG>^v)%>w)b0so`8dXZy{j@v&ILQR91Ww-80q+f3)+8?^I6=66J-L(lsx zrL|6&7<9K1;?uecGy&KGK6~GtmE4>m5P9)v)cWA7RoAX@G<=)LoY3Ga2{nuA=h*tE z*Zcv*$@wg&ACtAhzhYNo2Pa8-8=&>2q%(JL`J|h4-5|rHMm4zcC-|f5(KGoQ^*uWt z@3T(0Rx9{#z+xEAk@qFZpwk$s>bK>)dt6~8K4Iz&p^u@d2*`rDa3soTtQ&{R%1xrZ z>VBgNCu1Xx)L!-^0g*u>U-GT^YI~d$u`^{8tJW9Qi4jO6TUg9BKNs9EX$Y#k!3q+0F0!(T|5rY zGc#~YSW1BaTf+0N)RbPqy~DkeGySU(Z8GSl#<;OqQTYZi0>)=Jt5@tKW)CLRhBf9U znewRcN4yDV^~424#Ucy}B2ZkStT^6~#IhJ#tA|!;^Y&K(8X1IZx0gm!cOyn2zIxPo z)~I#z@!aCn5WeTf@j4DdsUYIwJ&_A(JAl>PBHDE~C{}DxPV_zpHc$ellYJH+nA}%y zC9u_$uXAc&g2KF7a2v_Rdmfgw|yi%s5tL;|Ui>*MS))!9E{ zt4W$RWQUar|B9w_m=ReY;!betzVX(282^=Mo^Pe3iNs|r9ey(&>OBhHIb-MGdk-#U zSS|ck7%1D0WQV2_wcVz*+YX!7>-;!9h7mS!X$4D>IW8y|0&0iMJASBv$nj6;>XpA& z(PH&~s-Y8Q`OMtl5Y(KAoJC1IMx_FVY zm&x5yGJQ?6&gYdOMkzC#8P{oOI3C}sS}%c2*X5VYRX9qwFpzjQHhp!Ijvwq7rdTy! zH%lVQU&!$v4&P)udgL%1rz|x>Yqn2Q5d1;5P1mX^S|w1w_+D^-9>P7_8Pp zc2a0H3@;&lBYN5r^>y~fU7z6&3>b^f>1dYl^JkfgX^#3NJ^gRIrK63yO|{ZuPtkX6 zr#=you=~P0BxG#I+XmT`@IL_9bX&WMhttd?mtBKQM5T-HL8En7LqY_QH7_2mM#{{mB|g6U%mP*zYJQY(P#e3M9tp;7k42D z=I;BjHU>QMRy*W8RBm1f-74FnjYHD}O>(O7>Z_Q)M1p+fd^NiDIgHj&luX&RnW*}| z_R}=ifZ#yK4DMg;i!bh~0%I1n>JJApc}Pmf{5+r8P%?2Xj%H@?S-4s0Q-uFxnt%Om z!v}j9aOqw~4m_MvAxy`PJ<($*4m>%sgkD1;wdSkpz|bqjxX9RLCJL8pi#{1QRW*r% zCW2FoGY?JEnd~FX&rVHkR}+ENUWOvK=-|yfun-e`?Jy=pg&G+*EjgC!lK3rmMUu)I z!6&aJuk^Kx-eg0rTxgp5-SdYbOPPF*&=HNRf>H`NhC}PG!EijK@@WocVG%D8{se+S zUhWt&39e1G6yRa?ae%vEM{bMBXmw1u0bsaY+_28AJoYODyqV zcdvx~V+_cm-e?-0VJWyf+GsC&QGYGa=s(;oY346?n@gpef&f{qWihqoH0!z*jJK{f z9XmVSZn(d!eGJ=32shbf66uEKBD_`Uo)7Z3<#^*L`-Vhvk2aP}RghN+JF%7qv@vqaJ;iOcpZH`yfZv+ljtr2|Ll#_(I8TgJ=b0Qsk< zK>rT}4VMZ2dSbl-ezxz>9SNyf!At(hyxT_!We}8|)>D>ix9w9?HGl*nF`N8(Hbj`r zMqI0Brvt4o_g16}acXjVE5HUhi1@>OyUf4dxrQ@jRTkcPAc%OOd#d$ z0A4r_mSaUVJ9vpLph^eOu+RvGD)5HrrB2Y8jp67P6ouB|=g|kEisab!+AspG90Qkn zll?RmwbA<75P&->yAuObtT}`#K1P+2{3Au^Tr{!E-rS@rKMjj7ZJ3hrRRfVB+*j*g z+F=^y73EdL@z=lRq`C@VI`n$3Il^?;xi1u{(1B8Cy_2~vU#l1l$hY{w9BGh0=B?%i zz1q{vNqs_E8zwMLEzuqKq12r;8Yk6 zcCEjf74VZzTK7XZ7(UR~!w%b>;H`R7K<1?Ir4kkI&GF`1%3-@zC$xL z7!5pmIa={9QehMPh@i^Jr28T~9?1i^AHP3&DkSg3hH>Q0yz7L3(x-sR?4xztyaaCV zXvs(6xCp{LOeEJjXL2(6y@Vx8beXM1D-zGI(PPxb$7A4@ulx-++VOa7h)6r^D_`_r z%w1P6fAn8gNEoq#-@O11|FacEIjJ{U{u194DOCjHa9d>`9F{)Pm29Q4`B?y1F?@cw zHbppF=dmqwAULE|AX^hr}Xl8!@W3 zAoLhZ(ALIE;pS^e9y|V42Xej*{22V9rTf$SW29k_l0ndMI7G;FoChwzJ zlaj40+sYSMPJ$k&)jO_#B(r36m-pL>RB37M9(lO?{^8)7xTeD%`fqaL--d3=fIBG+ z|6_9ukQjet4IjhkyK6OQvzT>#3-Cp!$e})PHuQXi>dcA;_M33-8~KLla>6MyIM18h zIlz5^!R>OJkGq>0V_hRX zBNNPQEFGPzLG53YuFfJgPE`&I`Iy4_V5wmW=Mz9)=Pm@^@;8c=icISQ)^gBs8>)(Qnhv_O{(0BY>v&on-L|;UsWAw5VN;?n>-kwEw-szO}!A9=aR^$dCo zX~I_!i(6H~TSVj4t8SNCbq37QL?3bH7h+G9#m>ZX;kIPO*Hhgli_p@5?u!L;-i%`ZDmebhs3uY-FN!$%XejCT1mj zF3YK}o3b1*LB*Y4{jwXs!~>oMfzb2Fn+8!+%x~J?IyHS<1kOE<)^HCkNEdg8NeKkM^GB_1pM;~^YK zK6kvYHBHAZdQ~mU+ua0}jS;2Rds$JtC>ccQA`VH4-Hjhz5GS0zhzA!(YgrvnlQ@EM zcg-}Fu*?84<$BU|#_36bg6W9=Z)6?@`Um8SePn%mpmPbq)Ew4_MB~RI>Tzxs=@YmV z$tfC}nOGAd8K9;4xOeo8B=`-`sqA`QeYj;oB_RG))e{6%?GTAdF_^6c#C$GAA;+(| zLobPVACkBxI&XbdVgfGUhUIFMRg?A1sa%wwByzDEm42jE5eDL=EDxSujfLOcf0HY^ z%`R2h3+dAIz(5gls+-wR z?ys}<1eUTK-2Xz(8v7B}`rmr=vKS$8a6##S7bh@uY=Cses!B{g`k0kE_mD;Htnl1@ zJ4o+Uib$>zwVy7mK@%|gYJ_|(jb`&`aHq^<)Jtg1*2VU=GpB_*_w_Ha^)+&32<=XD zh>`?D%z~5>8&Pk{*D&oP)Wu5GU`5|N7Z0EB zygP4pLyTdWJy6FCOw}0vq-A!sqD>%LI2lmr;?=U3rkl4594PhoQnh?E#vmEbGE;Gz zl3}w9;#x|Wbcg07MqhS{rzIxQ5JjGT=%lcj54$e zEZfh1n%F3^Fih;MmzU6&Bbw_3&NfMu%xsc;@HyVTOzh=T!%=Ubq$Av!2LJ{&;CnDw z2_np9H*Zaed@(uX0zZehqA7e@dnSZ5eTlcNBcVg$^W_+D3Ud19bhh%hWJ&6vxH?$& zquDv}JAw&Zh1t%mhQ!^HhYvz6f?plB`LLj)ap8|fSa<`)I5R9iT5KXCnLfHtZ&M&^+13(Wp3=xOlfLo_+c1>)03D08v`s^^j|<&&zEMafKeb*@ zJn9RoKi%n~g0uot&7(Z`Kl=VPF1(SZw?j77O!FdVCh*-AxhrK_kSr|&IeM{+zZC)P zZVs1+B!H+1PmCz`Y^n0?0ltMA?<Ydpy~>f>tq} zy13%T+g=wQ`j?DvplQk~GbA&Oq1A3yc|6mzzI;gQG6QNh^|y-6J~cx(HOQaGz13tJ z{#1O=YmiDgT*v+E-)29ZRh&M3T|&w<0#r0XW##+(Ruu=zif7IjkehGpVJwJfv`yf~M*5Hu4!ULG zeOFwqObE{HRT{eMujPOYdWBT56J?5wJ2o-=0n*67NSU$fQI*ep?)_^Zo~myrfQ(+$f%r14MF4SQTFJJ6W(e>UAjF`EAw z`Cm;p;8bj!oW=w4#Q$g4O=^008td%fKLux?>jnY|A|^nTc?xLX$=$`n4GshhsZvB3 zn7mwI+M~b#QB)T2!CdA)4K7ocNJwI$Kx4}sG-QynG8H_8TTgc`Y^uNM6waU5wetKQ z!)SmB0$PoXrXc0JSq~8ZaJB}4{~kv24tPxw0~VG8aH>t*Yv@0nI=a~bqW?7v4FOnd zE)y>9H5jHN(qkZ?bzvDNyZ>_MdeKc0;`n z>dXZik3>h=S^hKZKkFbef`}0{{NLsO@9F<<@c-}K|6l0)9}xb38~FqLg8kVa;2xhG z`ae7C1&I8E;WhWAj&qOZG9UiQGvciNMEzG>A)_wWD780y;ReVein=fa14FWqhV zzPyvJA?s7OW6ZNySlC^~{y$Gy+1N0?_Ji6Gy4f&l5k@&GNV>l@`T2kT`o=M+6#$BR zZ~!kaR`etKo6@k5)7MHAz(jt6_xuh_*s=#-XUDectb(jV;>SUv_l z$+ByRgv<9!b*0M6_c;@kRU`!EeAAM!aB|C@DQ45o)?Tx~4$c%*oC9nrtclA)+iu_t2`O*Ux8c z_#-2XdcWUQjg9}FmvcaEjum+;J)c@Cm2m`a5us^(n4~orkle|c-Xk={c_hQXPrA~b^qh6EQaJ*~+mAR$mV1K_X1%{asnI$O|7F-M3n8=Rxl z>+aOr+PV}6kFGQd6K@6d#zxgto51Jc5jqe`sS#13$}UuZ{d$axVM@OU7p0KY_DI$h z6XuW}G1fCIEWp4U>KAv?k`T~5IYsDx6-teffOXK;OycP) zpLv(HW6Z#2Zn%6!@ruQ%rIjicYz`WlUWrl2ACi|VP6F8rhV$$3`q1TQuB^AWSF7e@ z$5ij}VhypdZ@cMW%;U}R6(&o=k}%QVeT6z7k)=xDbXfO(dA#AaU-cLcxZEc1PAE~z zA>wl_b=jY2k1E*hLfQd;etw2QC5j6CMkE-BNjP~AFSg#|VmV)~kwmAl^>ylU1HxHX zSJ(ab(#83&pOe{wK`uv$kiKN-H)KIcNg9W1$;9CjambP?(UPnRlG9zm#^NUF5&0S6 zWCUNy2z+|*U3lZFv@aY$i!aigq_!Vs(+cl5j0*=$Cj6rEKC)2PkplY_gD@=U`xcMP z+;rzjF9_R!{Ls})Z}KGp8+rByK1i>+hfi{(W!iuw(+i9c;%#|zUzm)H?DlNKP+cAB zCY0pyJ8rgsXK&a%G$MAXdU+)7Q77y_*OBIKlR1LRcH#HIbb&-;hj&^^inO%~658Wr zj&K+YsNPaZTN~HoGU-Y7`$A8T@%6!Uv;CSFx+5w_K};lglGuQ#gF+@xZK4UHr?r+Z)fw;{VLY$EW#2`A$&e54uS{glaQ1)z${s z>~ktdY<2R)BD+GAiBvIP^i55%(9s{2dYQk1sbiY4R3EMj}2*P;&(D z-ns6L;oUDBeKBE=T_pqyvH$ z5DE^b;I44bu#mMQi;H(#{a=|4I}7uo#C?5*w(u~}L(y9r_a)Je&_ow&3?0nPHS*40 zU-kZdTNvD}-Ceiig{r_nh!HSF$zRkzE^bfsV!_`;lYlsznI{hDyV{>@YimoPiHKdQ zHfZ~Nwr<_<4tsN_|0~XUnW(XG-ozMQUEaXqYzcwS12_ZEAn!n}>7c9Phun9fcFOpN z{xOacj{qp>>+8$eIX*y9Z??w|rCObg{r_&Y67*J%1es2=Jz+0Jw2{86#Hygn-WYK9 z{H_O6zyUm5?Qe8=;W#Dk-IxA)ygU2GLwz4`YzX=m$*;aiS@ zE{tYmy1B_|;<0yYbTj}k4NP_9)I z(>Q1F0E6i`77Wxo$9$84>K`$hQ&nZ!)$`~Ar6#WyA+fm}JxxO-bFoUm8at?2h zW>D|8OJIf7%tRLd!(xaP|DaNlYKz~SFGu_&QtoCbGQsyIG5KEL1pfON9>Mb}oOegU z1Je(i+uPd-xb3|UMFl9DZ06-$dJsi8fOw0_%32eCQ2f&anac#c{f3XXHxqE$M%`c^ zFRY-Hos6pFiuk;4E2Rz~r^GR-6&V!i3e7An4O^TkIXSUL``N7^Z3#H6luK{IueS%k zCZ=|^2f*`Kh(!Zmghx~T zXCb{Q07$H}NQUUXOr%wd{b&*#Dwi;9Hu#NraV+pWfgbC?WcCj1AJM!^U{b5ilyZgX zu%Uh=P(!l#(MAyS3dkttqsdtNSOVhsU%q_tjc^8u5M|Pd;9oXxUHDs;@>S-i@oesI z_5?LXL=RMI*YOT0Gr@djJ}c*<4D31rMtfNRhr| zfZuEVRrW}@)t+HlxC48;H3*3{jO!=X`x*INEOT_nSlVK`xUx%rgtD5{qM#x9 zmyYt#l^UM?#e8tSLze3Z3C6m6X}MTp+D%`kyVN9ZQwT*=5|faSkhK;U>8qnKARfNr zF!S;9`s}Xh(r7f>8ypBIWQu35clz)L>OXvQ*?|8CXr6V!Wbrv|3K=&^qBLthz9eb+ zCc=>53NRS7s(aZWj{*QNrD>skdwt#Ryc@aqLSp1$Z*TAD_}!h0&`3i=&xGZ@rLT@+NZAt+ofrI#j4}hF4!KSR2Ym!^_ofvrI04{J)SaR zp+oXTZ42@zSlI$T6TLs^8r>?IzBjw0;Bq>BDOgx0yYkBpeKLkP-FN<`!^=Unc@0LU zS*6?9U`hM2-J{m`l$R8#T!PM7%GfKZT&z z?Of;k2OxrggiKawpmp2-RZ4vYVjeY|fzJ3c<&$I{Z+_*YL5?5^{J zR`pxp6&Dv5wNm!nDp5E4^M~f~B>F_%?ucD0*TMNprT?Mj7)Q&Ex^lJ=pCE86^dJ|-bfWNC2HxG2H9y{KBFCC zH?(M1&^5f^f`<{&Q{J5u3s#N`#$TG3pBK}{SYztn*omu)xbG zo`uOi0cBL0@>R>p_p#-Dk@bzlVa~o(i-PCL+k{@-8BX9-!JbBOit%G*9#_WzZa4!2 z1DE}3Dd9fJ9veIRs9)xj;=daTVHKO23TIFhrz0R#?0NIRGLwGerVr$lxXF66plQaU&oL}Tg{T@s&;@y&{F$!yUX?S!xw zQ=<_h5~&dArG-PJ!?m}=FdcKn%$$>D%t+lXrD4p-vsHqb;liZYAZ>A4yuu|;6cEU$ ztOdxaIg;Ifi%RYUmL*jCZyVr^{(`E)il`)0tw%sa=p@^ulFuT?&`GBgG_w~iq*sok zLbc&YCO_>>3JGF9Bs1Gw(VspUg!?h$h{~VdCJroPP~uQ@Hf~Ve{N%mS$vYAIY)Ij+ zSID7(Ac263^?UPP!L*?nl|5{`!)}$+*@;~bF^AD@+3 z=l33P-mWHPafPcFVwpVgjhc$VMKq&MsPEV|hkw?t4J}~VamTmBHx9`PdUNaqt4d@D z^X@mn2?n{Yqqa)Qm!b&sxWm2u(n-LxZRCet2?;eO;H3SNV=xhf^sDq+RQdI>-o0!1 zv~qj=E3$1~VayLZff?={7M4bMMC2LNUr@jjk+CKs@ekcT1W$9@>VppvyGWu>-GExc z!oqSpTNfM`wCM)Kj2ltzFX&Z(=5q3(_Q4FpBH^C9`CdZ9BI6e-{N@JeHv#wQG4v>; z9Q7vBrwVSno2COd-RRJ`vU%Zlzmzpwk`7Qf>soK8?FQ*~@tAzgy5n)o+M>g%z?WyU zpUGJ=o1zUYYV&rh7O(MGvKq%sA3O1#_g5bf1s_ql#dIXl6|mZ6f1|AzPo(F#99||> zEXHK7|Io1-yemSwqk=rJn3=&HS1Y8k236?^vS9@Ef`6y`JSApU3?YFkmu! zGL6HBNq<_#p}2an{pUy{K^CNmjEGnUBjFy2dwIs%bci4aBTH;Wr*WTTeQdAY?S1x*|qU@35*Z+ON7VWyL;>PK>i?5HJ6vp^k?LTCGB^i!Tv&3f5Iou?m z#aNLjSqx4nojXdbC@z<(;;+$f1C+EbMUxwRq+XMafz3@QPc8}}ulwb-PW z5Q@Bp?#t>YvqxK;PxzjjPgV&A(N$tKQA}F+-(7v5#`JX9S-M6tXtgmIRTMlFEi5}8 z1W1P%IJl*mS%c{y%1J~6khputaY;coaTp)gP3(YA8#sB+%g)ezsN8guRGxSuD2w#efha3#mGm}*XjFW(|ulR zW-r2zq|J-3%fnz$%O(7_d;mYocZ17fIw3ZD9& zq4qOwR}Stwk!%b?R`<)N&kpGI8I5OrW_>)r+sOwNX$*qGV>mRC@L5miM^j!|4=Em< zNo`*CJ}p)oN(*2{R0_lM&_H6wKN$MGc6yJ8x@UPgthQqAV*-F|4XU=4g<#qmYq?t5 z2p@qAjlpLzn@bq{Ho3o3Dkvrsi#bZSXm{EE{rtQZa~$N3ce!%UEm?!ZWMDpYm(f%a zX(cSuofPP01c9;#T(_FFA1$_bLQ`OEv?P3t+;>dDzE4a(t#^chkiKWH;>mQ(WC|P; z<0oeJJDmvUeG+?enmT;AD?i@zxb6%@>tWw^D&G>e-uc}%S>3z56s-mLZNG$q>A}lZ%#Z;C* z255%cbJ{RKm>MlN5fBhuv(*{Vho)NHY)^DWep7x(j^*9IdD~j_&exA!kuqh95HL6r)bbfuhJG)$bA8s@^cXt1Lj#N}li6J)qC*_t?Ki46 zx?b;nP6n!^hN2qD=si3xui>|PEEC8u8pi~87EV^`_m~6DCAonAwt_WOOQJsdG(|_y z<9yYWl`N;UC6T}0;`O%dvOj)4J48iS1;epb3O^e@fFT=4TC7@?uT=vR{azZxkbFnP zf#KDUql=c8g6a4{tBT*}_I=B{3dT)|y^qGSlb4qk%-V7$--mkD_nJQKXK!qD+0HZ} zI#pXUMqxVcyD)Wnd`#6WKp!FVb8dt=$m~>3CZl&rS{zohoI>TA0DlH43c|Mgs3pd# zq%_E_Xh=2?lWfZMcP#t8JPa0B@h2UasbLj{1{D2FN7nn^Hq1U+xI(FM%oWA~+$4fu zB?G(^;dv*q8&o11VU*?=<_`J6c7bE~d|&d1x>qS#ZZ8U?KWJ5R1~-ux)?LFXbmy}8 zT_C8&#Z?+t{I;CTE;8dJ>GS6{g+>YB|9tubX26$fbL?b%?jzbGk0r@m2p&C!`#MG= zPNo^BT?l*f*cV0`%0B1J6{GvB2pRB@=logwjZVlwPMg_~wwWV;q|Muv{6!$gzQbEK zfsAJOP5PT@N1tqV7_`VeK1WyMSh})Xv6xpd6rxVPJg0NTI>ZOv7midJ8j}`YK*d^5 z#Dy#k&S!a_DqHB4P+^P*ffDbuy+GK9b;PN`3)?4xZHg0{%mS{(8bCswB=_w-Z$7%C zvV)P^MG6Q9mJNxJ@A_n=*;^FM$^P6Z6AAc33uPRv_qmw2zN5*EtmQ^5g$wau-FObOrad-XoZ)o-gq!S8n<0+6?l-Cc7=#|+3_>M8Vy5- z({=+nfQ6?Mp;u#&2y(s4D?^7^OnZd4AzEfwEVFd69ddj!qbR6$&ibUdN{L9gdbS}e zF8ZsCnfNs}ck^_qneC2)}R2zN#fXK^JMHUU~5VxUydVmv>hw(b?K!rfH=_`thj}HQY{@7Me zMeuNLw6vQm&D-yH(qsGyguHoX(){V^OTQu@mQu>l{C=!97`_St9U+Tjt1sq?27T9D zqLg{3UNK*xRTEk|qv=4x7`lOBcn)4SZ1rOPrJ8b6& zj*@@wjVLTachr&SmJN+b_jnmlXw>3?zda{UmM+ndo@eZIL|wf(<^~Q>lpD&TJe|v{ zXZZ>T$xh#f%U(@eo5l2WOK}b865_7>kV7g68zlm#-{Fhd;-;i0t1j`h4pHs8nj!Rg zy78DhJpC7ELM;Rz46F4nD4MV>&OVIlc*g6z<%)MuF_UfH0uHGSV0KT{9VLo6oN;YG ze=TISxiEd?fIde0M2dN~vj_5&j(y+~>XJbqL{%Ze)x%S#t@00&ougaKl^oR+waxB` zovk`Uvz0d7y48c25auHsR0K$HcxRt(OsfkHqjadRxU^|o>kUErn#*RNwaX@6WP-(P zYThTg8yKE+lJ~6Pd1b`wU7u!)xbeT$6WS4`+0JE3=CGQO^f-X+1w{4w(nFB_ODy@`%K#Wu(AAQDsl`;<2L>xdi5%{AG`DJhO6w*l(cQj zoe?9&DGt7VFC^cz(~ligK2onztal@5?(}+sxmXz(&hZNe?}=}h+9~i4vLl0-pvIsb z)vV(8-AYV5Vh0Zs(biVZy+oo{=@!LIq}Uvjj>_`hJ>sO4yMUO`MvsfXxjvk&f%~C? zSv-RrkXBALp6Ycf7L!*+5B1*UDmsIk*`Ng>M+-1%y?5ynPZM>nh8g96Msmj0jAoww z8S~5Mv%weWB-BpPtSS5b-(nL*ShifTumOz@K|y#+9A{H6CmD-9@ObV*=+Mv)1=Nbv z{2=Xs5Wr}UALgQw6sng2l`8B5UJvx32CYhW^n2k(GjLcF^8Qt!MqM8?)JU6+9`f7R zP#DdAX#Fl@(<$F*e@F)}BwVQ$>C$5sub!FxNyJ)}loo}yFDH-vA5xqqL{8mivu8qe zmc+vX_6c%-B2^A3WJlyJurt6L>|@|&c-=8|4Ej%wjsFa2t#AyyQ0a~fe5P~e<$s*W z(x=*_<3LlZs;YV$_)sbyibTtr`-=IuDAEsg`=g`dN7g&vl8Y z=U~|rTG1$yOBzjK{)y@~QpP=X16=L@kF&Q5t1H{Oc7sE3cXt9IxVyVM!9sA?;O-J6 zK=6d%PH>mt?(Po3A-J58s{fp4@9+Ds&P`p_Q^i_q&M|v$?QLy7rhCaz5q?QdO#St|aMM);MX$BFCfcX8rOgCF}dB|L~J@p7E`#X#N5i8}WA(cd4d zN?{q4oN3VNEt2(>lFJvlo3)X#$1svLA*9>9#rrN${|o!QcUQ+`Jl#8SL@_;6>!g+6 zPt9D%&3`Z>hSO?}Rdf8E&!Pek3D_)Quamndv0})5<3t$6F42}4c_L=5*QGPaK1orj zLC{t$)wu2zv6)91iXPAZ5ZX@jI_nEVmYCF4Sj@pUYzUS$pcFNmUdKstLe{JHz3imy z8)tJ&vK9$)+h1K9T-4dc87B0|4sSg*_hl&bv4_y&JrU`6-{LKCLLv{7fuFkObIoYK z{3R79+nw*4;|3*mED5erg^`hq%e}u40nOAtDpIwY0OKBiF%Utb!th?IKqVq5^UY6^ zciu?*B6e$7I_x$J2-wsgXMc3RtI6c_g3wPQTNmbWg80(%03{_7BWe3>Bm5JFO!168 z!pX;JTS;q{$^ZxG)LIz*v4CHe*unD`;1Ua9tzL^a@`85T7jY(MWYGs&#cZfW!Z*t|r2K(wbWZd* zOns+u!7T+!18OMp9U9tXWZleO}Ug5k|AQ>st-63Sw53R2w@?M?&j2-^LlCIz*e7rC-ZA=C+E-oIZns<;a8bns1#iM_(LioYQjjc`8t;= zc;6Oa>zH`2K0WNZ+T^7GFsxWM|%3O)ELBuLZ^#sog zzsKiiIaHQy{g&X!2C0us>pBPcp1_WCR5LSPn591J9Z65GKc>J;JnLP7|4j0(#`S67 z{M5eclwnw#)W3c}cWRYbn*sFb(%D^+^K0$ZuNtrJUJ63Du4+tyVzmptwp zn+nu&35?agelIBZ32#h#Y`?*9n_1{h!lu!+bS0cD54>-7L^L&o`y$HLf9yDT;EcPo zBS2kWKKVm(vKUh_HQYp!1PamXS%nIUo4g()t^R2Ga_!|lXqmhZT0aDabT6`9aywls z?Y3XQa+2ye;&pcmFt#W&5gL95HWezb^PrKEW+x{8U=xEa3ZC*uA?76udiAGwO>wT- z-TqeOTbS5k+SdH}R^P8*zuFbq+H89aDJQEad-v=y`S|$s^g4_^fN>{{>xR09`b!HY zBcAbx-Q~;uO?!B-=&LD`pU5`NSNIq0FHfW=z64PSQ@btno<4VjGmA00VcnWtK#6ZT zopvT`ywqh3^Y=P`ybF4`S#tf2iW~mV^jD;J+q@jniW!HM{K6* z7T!sRuIZWFuCP>RVda51>?#yQf?mmC4Ov+_%w<-Y#LYLImsOYrpCGhq?Jnmk3}$VX zaUw_hCwUtI6q*n#YsBT62p*2l@I)DBKgw z{>t>lb}Nls-D~-_&4*l;>6$-OqOMnFZ5K5IaZ1Cl-^1t^HFCL6T>R#;r@y_aJHzk3 z7_3ce@qIe%KTjOdb5|@|tyC#dl+!FfX1nDQ4c#34C7rBY`*#2Q;h}z;!^xZEYbt?| z-^&@w3uPkfRLRU*lQZhqxGtqenIkN_P9WsJf+(J|CP_)FH979x3xNUh9oePxBIKz0 z0cLz)Z!{iXqi*Z&pY%GtMmx$cq<1dq0kug%r;Ug_Ko{+T#4 z=MKS=ba9#ehxlTNwo9A$>wHtWZvDYZIt4r94^2!W##UIQwHn(3DGSKO$0CE(N^*>5 zATJt;IXOEIyoY|&!PLc0cDXrO$&gF=&0$AKq{Y*GLl*6B&1u6DFc}ieQPYEut~g9) z{A;VE=4gKFu=Y3iupgmN2tq?7A~Y5B&?fVR?Nt8A+*Zcd<~+;i$GgRNLX&cxYO}v? zVbEU|IVuwB9UNbiZmktyH6T4|IBeB-RT<4W?bp3IJAM&w2s&o2f$-Exa7AAe(7`T9DE zc!SH%;1P@*8rwG~u-FpudTs(mmAv?5wUx{07LR50Vn9BWC;-CIq~9Jh7EJZ0&pub9 zrFT(f$3B7*`m4j!ZmZ~eb*G|zYkp_z6I*@C!P~pm&R+5HEkH6#d21LUKag`iqt4;b zJ^!OmY2i*BL&(gE5N=IoYIl1#=fbP-<5*kJ_MM2JrekM=N{LOd%#pfyU&NFdDlv!S z(x`xGQ_na}qplCP)HH3nWxi$uER#;v?s;P0I{Fu#sMwYBcHgMj>GWPIH-?I{Cpgp_ zLSC!IqmY{h&TJlca_q>&F-sY{I_sIDy&gHOeo1ux2Jbsr+1mT2a)ulqAqXwc6PfA$ zy3=)Zy*Xj0n1nIm$T!u8_5R^6^T#(pn_S6N*h^?8PLSTMb3T1`2gWfZ9DB;2kz<9A zc2HrTTRkpul!`ylDxoJ>tOlAD%U4Y7KZZnsb#JuQ%f53mY2^W#@6$G(2V4bb{m5}? zCX{CB!mC|O6CqERt=+P6A6UXp1VtnHq;n0cY(Xy+Z!sn?uKr&3I*b26+s~(rR0eK6 zpb(9>d997<+T|zkz{#ibpvH6=NooIC?@YFBwz)$Mu=r^?ES)^_Z3hUOjt=C(aXWCQT&d28AIUvU^4n%@@a3{g+9ndN1x!dc+K-PhMg8RUP* z;M-&e)U=AI6~(YGzzUsTTucr%@I-QMi(Y<9%|u61R2^iGl>yzW`LkxPO`vCF5`SQMc-mllbE|K-_q97)5^n3;&=-sg zzjW^zko`i0!(qLa-c+Qz(;cv&l+N zJE^K1KOk_Awv7m6K+QM!!{#$6tqlF3`^ebGkR6WY!e@%Mz|2n`MaY`Yz-7M_f(d&; z#qmOhf+Xk&Ym)QIRuqF(*od3TO0`*rMm7V=h{=QX)lsd>D`VLPO*zxV#6>=$Km;oC z6t(Y=B2a<_2zT&!ldY7hpWb#xkZa0ho@F~Iojj*@LnVm;YkK zd;o2WD%A6j`!x!jtM}#QfW3*fjrF=G0+aTlR?sXvJ)IB}Q|&*mk@=p~)YNfX z7*bLL*l&p)832vAyS*iYDwJ?eA$Y7gX>i=CnIW_q7#a%7AYe0#PEFN0SP01g?t2$P zsANaLHjp89&2KI8O*$CZKLDt2(LE$^JFn5>q+m-Am4&RAEYwnpF-GKv5jJfP*?PHt zW4;3_`9^23_vMvZ{AbA6mN!X$73m9mT8gen968)S(GdzYI3o9Jg7du}5q{~48>+&1 zeE(hGGNN0P%;_KHmKGkX(UbWLf%Wp>_9c(=vZUtnx9NJ+2WK?Kc(^1hEp^9ZKEwul z=g(_BrfHXmgGdMY^YqJb@^UUASVye!A$ksvzV(K?4s5|i%n z;YPX6>ZvbUZqudS}e zq;a`*jyO6x0_(n2Nj(ry19Sn^(5^z2lSpxM>&)aaTm27M)dp zEB-k!y$NgwxoB8eROa2Dq`l=je5M*I*`1#^t>^6GxXQ_4_f6j=yC1OO`N%@+N8na| z)ldei$%$9`v<#y&Vzdlul#F4U=M!mryHd$S+;VMEV%cU|NKmGdxU`GsF^w%E;_JGT zWwE!5I6_rL;l0oqB*NOS;o-sMBWYkjLRwYnurr9Qr8QR}&RAM(*xu&mBF?>5^&w1~ z5yxTUXzu?IKP2N<04iFlv-NtqudVa^H6{^-Ba^4v$p8nlwYj;DoV&Sl;cU+>X0g)5 zG3&eIk|Qph*VxdY-{2s^CWA!p);_PL=IXC8F)`8D*qFwKSp#7;Gci&1n4S740BJY- zNIh5Xr_iypCxmDYd4gLV`F5SLAGiFPm|tK0>hP(#9w^5Y*`5y^SIG9Eb;x=j#hP0E z9VjP0Cl{y+sSfKV>)tL>9=qG?FgA>_e77T1K>MGue+n@0DClm z-(p-K=0<&y|A`-|v~`}|02#uh-Fnv=;!(fNn>acs)vIGT6^P0ja3>mC(rUV%EbBD)1A=E3kd9_%nwl_oTi@&b6BAOA>ep}Mf{{Kn zdPSrdO|NdC)6Xy-`3&~-;F|fRXt+Soy0TWf#VVFeFq%C#lx@X{@d zS#jCw73g?f)DdHrouX*D0BT5x%mSH&Uz>K6$)E-AfLgJDd}U&Sg_c%|O()O+2fYWp?8B-y;Na;b&h7{Vae#U?bNyBkqNWqW?* z_LyE9?*%9{%ZUJz)3e zL?SIvuzmG6Z}7+t;==ojnQqZ0#xi(*XqLdVT>Vag_?Iffd%OZN^GZ#@dy%ip%gg)w z7Fo3YY6NE}9P0&ZHA4KT!lJgTEvYZv3>V`GYmlePP&I=~OAo+KN?U^Zw%suU>?v$o z&Pd8CF#Z7uB#jWtfo#1Y9DJOtcA`yt3>F05OmRF6Ir$fz>p$1tmTzS3cWk|0 z-ac?Z>o?X`j7$0{YX0+`JItj;Yn5t$pD=~j4gUs!lC9HVvGAQsBmDls!AVUoVHK4L z`}U_$jh>)=A-I2u&=3AlySuwy*GCgsnSo!^Sw6syMNW#DOCr-FARxrazB)~A4>!z{ z#TN8C5E1Z&#*1Q$1a_HK)F@!8E;djK6vB_&FS>{T6YnUUYsLiF0`} zUfvh)O@H&L3ZkmZg}TKD$dl%@;Fgs*Mt@Ek*$YrCgf?{VaFN0Sz%AGuEkJD>7-Z3e zLoyq*aC_grn;aP)M%zH^`pBvSK0Y9tg2=+odd+`b#1L`;x_R*B{puR_|NFtoeSLkw zk2g7N1~LB!I7USLpU(Q@DZj7F1py?_^V27ba-)k&1As8k&T9Wf$3xS>`8fVv%(BYf zc)7t5ps&=`4%ykF9Uj`+^Q~St>?6BMieMqtYIXx>7-H7Erl#hf-*aOF0~5&w+&Gm1 z`1tq^q5ymKCWSD!0}>pc+r@ChV68aKYqdP{Uz!Ws)}O-#cHREyxe>8iLEb@ktvL;$ zixNBvlcgc5N}C>$8+Zv|RI%v|5Xa9JK;P za+oURAFGvhg@uLSMu2zXt-8#H{TB;m0Z{8lva%X#L5o)rmjId`&u14NZGXO(dq^T$ zM@ptu%(%VSqQztvmOT)7*%Nxi>M3jGq-N?oN)EfB_jUp3FM8-uId0RLDD+4(~(H zW8NFGh8cqmKPBj&F3O(4nq^BFEumL(r%(@(_=_lbEY}JXzvF@#npor+OLQylvfKSE zfFGGEI%S|ifH~BBO?>fuoQ_$bNXqTa4(zXHR2jG((GDFR*gg%J0W0BEr6Kx)G5JHP zFE4MZz z&tSA$)+@ziJrvJXr&O)Y7>@Fr`s)9{XJlmbO|t}*gdbi+k`fON+9sS+d?Ho)1*UD}KLc zBCF^r`z8~_*Taj8o?w7jXBZiQAPnsFpMQnpQimwj38Y#_af>wFXB8X>bD7;S7YPhW z?|#-?Yr`oP74ckC0iXLCg}qe@DC>yD66e#-m_-*F4|xrsYBYErHx05yw-MLe_K+!H zbut{+YSSR!K1vjs=p-#FL>aUePt_13ST3Ia*`axq)pR{GvQyH>AMivW3LwVE)04Sj z5%}N%=mf-zOTwBXasJCYxo8J(iA9B42ehT8zlg(pgc{9jR7yhgs^w#~rE#i+cIZao zr!Aqw$yrQg)W9@*MU+pqR6t2c^Oe zlH@9KnUBoxn|=bw$4Nmgti(aX#FaWN-y?0&WkAf6V?{?8}7_ z@COuxOE3QX5pX-g6V1F9my39H9%p;L*%Kc7au!v<|8Ih$?-dsTyTw^1G|?zTTed%x za^{a8Ti_g7Yx8+fFrkF{dAv~Fx3ba-S;X}X3vx6xibZlA5E<2n}(`C8-wgu?Z(M^$sbi~CTeiuOGcosc-uN~|ID z)@W=JDq^9=J6Lw%oZU8!5Ul6GqJD}ZtJbc-z~QEm@k@5%)%B@ml!=swNARqKd_iKI zO}LqRGkomRuT?2-_Wl8-=lLPQKWJ}JVUaw&F_TM+W7+C`Nzb*D9$?n&NzVoRVbmI& z0=@NW?JyS{Mv&#_c_~x1PZS07gC!~2>!QWzpUZCY8G>h&){uW)rxleEJ@pslRlbKW zNrQb9e<+7UAq*#>fIGIf?-=Qi8aMUoR)xfxa|NXCTtWRyo5##tq&d(Tb%DZWWGQ$$%w3y8{%@} zWbtH;+mFP1v3&fN9Mbw3>nZ3GuFbFV^@_=k!|ncgk~LSt2cm^rmrL6x*p&K# z4>aq~f@CHu&BXGas7&QF}k|eu3 zI|1`}oUY+9+0q~z#lb3{E%?4j9Rzv&cvlYofsF)=fb?d%?vzagHz1fivgIsxBJxQm%=ZXhWKnxQOiPU*>I<;qLj!gbuDo-&@(EQ~)B@Zq$ zWg10LkUiBV4%O%xOQKQ+@6-PIR#4by+m)(xeO=K{oGQ6m_Las%*Fa(WoXx-D+~HsY z8M9!<&_4pWflPsH=j+Fi@>bYCq=LHuSTn?Mz-w7_J7zQ5-@oMHDf9%$#rE&Q7J2bX zuKJR-mS5$q4-;%~sHEVoCR~vGpyMq`OtsqP45#Y)E1B4u%gzxw78id}*Z_%G;2fMX z7V}w8aC&Y>ih^%rLv?rvjP-gI564>#rM;8#-pnN^eRV&UN;75rEK^eD`9x#$P{g(u z`pB8(-GvRI*IXpj(^lfora`S$(*E(GobLHg^*(hG=Dqo7AT?{f(a$@KT4!NKI`wKt zLQLyD;D?s2wLAfUY(EbOwlh}Kq2c5f=xQ1!GfjX6h%8Ze-fij8_PRgvK$}-TAZLyD z3Zwn;0eF#~K!7Y;axYt}VIte5L~i&wLs++3eY&2xtdHh8RhJ3i-~jlb@%Uz#Cr)5R zg*-J_pF&)udKc!5b+1WnVQI+g{`puko7wJwehi!}XEZC8WSCy{w0E}G&p}3isB5ft zTc{O%C$@#hQv)!Es$vjR%AC$(Fz{u`*WaDE9P(7&_;1WF1J^b>?cK=h0nH(RlQfoDXrdgri z*fmxoQUw8T4<<8S5PN8{tK8)+zv+B%13MMFCZ%Q z{rmScdcA!nWsB}`^f*KIL^2{iH=E8t7(;Z2SNpGXb90BYg@kBn;Y4H1IZ&m)fQ6|` z#>$EzI}xXZ`!?CX+T~rHTUPt0o{|)1Kukf3gjxh7x)vq2$HzJ{;W^bnm9U}pUK z&J`zkcT(f`YAb!$Zru2rD$JqfZ_3Oc_yE@9bbSAvvajh1A4$uSg8*lHk5tGt|9y(! z7R{LW5V=%%;GJ>3sm}nor7(vm)vBNGFF#LU7GO%I7K0^qeBtHpCL8FdiI(rfnk$nSgtNwt`>Q(``5C@M%>k!s7TrcpcrUqDxHw-%a^TL0;; z|6EPM<~??-FWPUALx{=bMy6$YGiU30Q&;#>Ik9Y`S>?f9#a|*a)D`#`Bo*uWn~l49 zu0ui3ecEmj#S6z`e3k{ib=4gi z6;fKoO$WLWE~ojxV6DlS2%|f4WDs76UGvL2#J1qHvFOesHxC51R;j_~#cD4kZijto z5fNX=CKXczk9wDxMG)Q+Ei{JeQ_Lb)@hr}Oip}DV2y$6JV|nj|+T=`&%U*Yh#I%8N zImQZ}PIlovCeZK1b(EBp=o&d~7hS;P2CR4>=_K}P%N_~xc|(b5-~S(f;sW`|4o%Dt zs{mOY_k96e8^sE{FiBR^Tkz5xe0-qi0j*eXuKc}TosACI9jPv?<+h56HUYmPJ)864 zbG^O6oaHP@KyY&;m6)=KKZ}}IBW#Zo?sqEgH-NZxF!Q^eM-ZcLH2A@^4pa!TKgngf zeTdu{3oj29Lg=5QJ1}*miM`S70lEG${|pUZyZ(3)j({3a7_8JZDv5}~v!lR#-Mtpf zbwgjkN7i%oe8{JxsO60qr?7OYy${cy0Wv=qv{$O$8DMzO@)*$&C3Y=1#f6PU0^G$} z(;|`Y&Ys^t*gbLE?~dETf4VtYV^-`|> z0FiCAv6Hbv2_Ste2bLHau0W$2q}}KCm7gC{ipt(BD3~mSjx3Gs=~H2*nlUs4cDKhl z$D<+Hxng}Snp8jVxF6;jO=mJL)fP0p5M00LL!=aN!Bg^&4~9-*Rq zz(*TEl9x1tB6L!PE|$yeuwu==iJx&ztAn}(sdEaC8kmd#g|Pri5<%~MC`bCA{{CLq zjHv9FNDA8rF|~AG4XRmYyUa)PPg=Y;YZ#`qfDD`!l- zzH8d*JJeM=9m7t3>e5&UKUdp;*xq|g->`w!<8s*MPB8TP?VAJYH+{ZExbePYXE&WJ z^hJv*B(VyWchB)7QwtL=nkz&Z2 zPLx}(0Y`JZSWPLXR~a3Wfr4~1G9YGIfU4Z-xQ3yY?}k8IJ5DK|h0LV;rz{7dSjUXb zbeg!J*itd*mc4s;00yeVL!TrSMoDW|wxG{sz8tB=w*|!Hgu;qznoh!WBO^BJ=gpRu z0xN7?uR-6M)2jsCF zOoRM6MTWj}KcEtd)xCd+i23I#?2I<0>{If2ysa|V#`w}bKfuOiyVU4Cau3cs6A=A5 z1vH2GI{PcHm<$Q&?_WiVr>&4Di@Cb#J9lmQ2HvvOlz|9IGnf5g{l2t&jy9+F(Y9W_ z{ZxfqYO&ey`!CM%TV<9As4UvNx0yU%zRw9srq41toGPD$kINP+L$1KLoTGh$ffePJ zAj2&!dAu1~7qjHzahLId&y6%YT%e@KD#Kp5CSZox^NN{nJ?kq(N@-?0#kxZ!m|J4# zglu9XR8L4A_cwk3EG8!<1JdLh?#+pi_}hcP4R6Fw;rQwCS!@h8juH{i5y|q^KYtDN z&qNRN3$?F8{HWqJw=-Y#9dJnTc|9p;aRuAW%!{v3lvZn8`+~wyot;k&+C6>)=%ipY zL+w*Ag{F^0heCSw`s7YYHpxBakXkW^fAAocnngma!2RByP?U7}H9d~*eEPsj=riZ@ z^)cT#7ndFR?J9l$7%h1!JU34b0knQuudOtCRg2mfgtCgV1QXwt#abEZ;&|&?C1B;{ zzj6|8yf$(9wR^mMPf5CjWD7ut=zTd+8x{zyBF#kev*lbS+vt$iVEKs5tY(MQ{&Cm@ zNINf7f(71YTn4L^qB($Vw|Jko$gOq4dnxOxcaZC*GiVrWfJ74kny9r2CN7DVKP-Mfa$eCq_Q7ESy7Q#8f~riLTO3&a;N7_)R$m#>pYQK zyuooW@o=j3JY8!oT51uve_7x70rE`06#Guv=wp@oL|3jRS99MwZ#;}f2JljJL-KfzKUNY3xsl5?9s#E7F;5iIPqO4w} z%$OY|xY7t#j*<<)2ssw!;G9)felr3niD^>mp!~4}4AH)6jsr?G$O`RVuXs7$uG_qx zE&lKstO;FZnM%;;AuVIs)}UzY3)KHtO9uY0R91OX`yiwRi$p4Bh6v8vZp8x}?-S9{ zoi|#)IqkNH6V^|NSv+?6>DaLDn*0IBx)G8gx6MmQ${e#3-li-H_J~mbpvS(E5P=OCG|+sk@l*93&6^la6hKX5X9R62HcH0;L{)Pu1Qy?hN~hWqdafTnrA z>9GMI%UXt}SQPR(bL8A?1a8bc;PQ%cG-4}Z>c|ih0Ub>&|4X>Pv&2%}@v`l=)IBt? zmc$i@ABPteLWaWF3;`%p#u0CAI@@GTuOqdHym&khvtX?DGPVOHM!xI>Kl$ovAn|P5 z3hf>&Pm~E=9lY;oh`k)vI)5eoB=`i=(*)ORw^--gm-Qs63;DKIQY;2A)NTpF5au~9 zsIl$tr@lhR1Dtl|0h4cLZN{-3@?{Gj+4e>g&3Qnx|CjLM&L1=_K9>aMQWouDN~S>e zs=^*wy1C8wAM(1dF}OsbU=b)n8(INejWh`*M?R$8_AULkC!G@82MKLajSRBR_f}>C z72thLkc!xx_Dd48;QbdLfXT=|x5T*q|_Z^kkq6 z=i-xtTLXgKa9VvZrh^@tL-?ZUYB(;q+-eSy*IIq1%Jqcw8k?`{zTwxz3r)1u`-?H- zzrlH{=XyIIF}u(TBp^mt6tpGoY$|d6uG$LzpOD*EbL}IyQ zOMn)XV_vVcZhO1F%WNQmh1Zx9`QFX>WOGN{?EGOu9zc(SBO}z81_T;#lwlFJZWSWH z8gfJl?_7PXiL{y`1gkbIR3oQe18fgE#M}lU??nF$;h?Zk;OsaIPf{Tx>xO+SX!+oy3?xY)@-yL^ zpI*qpk${(`JfN_4&fDw!)dymr7b9|oTLq){V}^cir(9SQ;rg%`I^=&?qq2uhvzOgxN9Pfh%xSoMH+ZYBVF9ADyLXI%*ynRCF z^bpGv;anKLYHz+$wl)qJ%0_Kz&4Kqp-;mIV+g(tX!HSF~6*EA*&q%@-S1=527GOwRQ8S!BZng}{I!UQl$V_7@#dqfi?)6@w@n1U@{a^+Bw zrE(xqh_t`beA7R)jpjZehO}Jwje7C;QRli9hGU@sj!Ro(EV{t%)=C!AI0`}z^=I_1|9U}&n&^-zo2Dx4nm-9Yp zu)-ZYa2W!A0c~)xUa`ij2}!7=0#rQ%=mBcDG9Uxe8C-1itxh&5Vkf{cN#uK*m}LC$ z_Pk1**;hIuD3b;+d?{<~mByR(o6}WJyN4LLLa?FY;^6q}Vo^(vKE%Y_kC=P=g&_MaTd8DXbx@$QnA@&078iFkjDb_oCK^_HvGxK zYh{!^ba%1h>-;DE|8X@iL73;eUB|RI{UP|G)7oqM&FLrDbRd7pfL?@Na5H{yg``wv zwdPm=OcD5D#ta(@uc#p3vew>%RLXJlwZtobe?G5geiiZz|8!Po--!|}cjwc(-?Loo zb(8)ZA6DBukQF4m(&IreLL^+tSSD5d?-nw+3|#MM&Rq2}LL9@7N89-DW)+5QHuDVW zT8Z&RI)$EpMWGU|*FhJUL!r@WXB9%e+0CCkX3}CX!EL#iKLkL=hCYJa>nvjj*T?OH zVh)1d0*$rGj}Mn!qU^hJDaw~wf+J&NQt;98g{lQAzkhStCG6=9Kt)?sO*?M<)PQgL zKrs8v?@p;wlxWWatoZY$_gMG!$lr{f*ky28e5C+c?Bt z{66=lAewDwD*?iY&yQQbz`0g^$ga>|I92(v4}`s(wZ?r9 z3Y0zAG@3B(d|yCpvEr>yC|awinKs|!pNh3kh_ym>15^%>a^`JV8)xw~mWk1G;deY7 z25_xjof^bkq3a%K8Ooot%0+h==R!RZ@;ASg;)+dshb?b6Q>0~foKMCXACU&D&Hc51 z1%;U0oW{sEFD(X{i5QYXja0zX<#4#MbW!1nB4Nqx7%HH_?vhhYvB8f4G02xy?Q<48 z@iG46Qt(-D^#1f=kYsF7K0Bw@@v8eP7f9!>O@_~D+{ZvL9XD23a^Hek2I?aU2~RI# zgP@qCz|hcTjC@EOWVYj`x^^6DDt3}Kwtkb#-Qam*LGCt;D{H^3MFmTuxiUl;XZXi5 zz8jI3E4+7*Pg6CnoYQB`^%CkGGDk>xic9XN0FBf96Ixa>ZAFpH8`7--$;PbTGM!^P zcRN^H;uyv+ZRcP1aKK!#0fL*MPOtv43qk8?M?Eyru=WOFe2d4!D3EJco83`6w>mZ` zw|R@ITE^Db&<0L~KKY~ZS+8ya#fF&QTm6J2Fb*?88Eo8yAWhvP)83eQ1Jqvg5kpZB z$c*&MsMK5g4z$NWC2nzOj*Xz~svHfsv68uRxCAa%?=NaJgZniE=3{&O9{14L#DZ=) zz}*63N%2yt0J_IEI@}HQn_1Co5leJ(3$l><=U!D13w~&+mlqdqrvmHfX~K`+ zIx%Wvf=;*boylp&QNb%5hy^{DCzxOV?2tdM1<_0DAuTlsxUk;Hv)tj<2UPMKaPGzV zP5jhwBO%W zpND&fxCResw@SA}m|f#VwrHQos*pOpkJgc~)%=}ZQ7o=^89OX2=(HOBz1hCjkj zqhhU$E>pieYDCQRMDf3pg38+6ITmsWw%}u5l1D!2r1cmguAyfJ;!&BpfiuqAAZV&5 z=RFjx?IRenUC*C5@@&amHZurBy|96M+in6-*8So{7D`!y5AQ3*|#@wx4^_7K(<{LSk#R5-Ik4+ zMhNH|oLCF?TEkXlB=V+qTkTGoPW62ORTq1h0T$vkqQlcJhoXnUuaIdaS+xj!Ke1`Z zWVDwfx%o*dzH4yWL+}Wuf|E5)XQ;0kWTK(dX@hw!r23lPeIdJuJrmUM_ z`V#H4oUrldx%K8B(w6SLo#40HNCF(9G#g=i6BNa!_gZx*+ff_+6#0aT$;dU0kBR(Y z`!vf#ewq^A(Z2I72PP|AwNrQ7uaj9t@xFxmhI22{_oj-1A2&#oLJg>KpXD`ro!l=X zIZBgw@!#|-ZnsGc?WFJ;+jo(p54MOo^NmA%ta|u{Ysne2QIHqp{z+Bd6B&$>5WZc} z*hYbVF1+yaC-#)=x3{)j#9|c2KSWP(h>~=PB~Mshi3xM6}+E zh`fXICLXb<(+@RvFID?lPL{cb?jG>mI(;~hg+bbB|Abgc3lL=|U(4$@~ zBUorvEUI&uafxbALXN=QR;gJXu+P$7$WFAvjZbOVPGQhGfcXx*hBB9Il z4-%0SwpwS*Zs|SRdPIYD5k#Lr+~SjWzC$QMFvdtH8piH~+Itutdj_c1&% zp)ET`9J9@>oDsKLs4T?U&NGyIPc7WfsVCXGIx_kGOEw+D(mKDZeexR= z3ue^ft7lroSC*}wArOPD2{Ya0Rq(klz|4ZIAVv?uzP~ z#uNJi5?@(7@%!yFHHy%wn5;y3DUHepY4LhWs7DKoyQlt?$%W57$RzzF+tQG_R#qZx zajFz0@i`07`>rE2XXPF8T^_NCi$q(Q-)z&cR@XP=o}k2D`;l4OlPzBmhBJ)s+S_e? z2AxTGgAo6SX@9G(^KcwM1NS^CXu0}&fCq}JcV7Ji*!){_{S|?OX8r3E<9`n-pr4xU zJGi~7vp@d#0t`j!P%lA^rEH91t6sV}3Y=M@6Be?&|A6QEY4ho_}cI!2-ap?<`>P`DW zx;&kExE>9=$+|ZlTQ%1u?1QE>vhhhlTAx&{G=qYpd7bKwF3`)I{^Z0ME`dLn4(>mj z!{rN~j3A^|HS!HwoJIf^)W5e#WwnBo$HI+11SYzRm*+9Rp4>SqQu3JrWrD&owAqN|@X!{rs4O2wTJ1W^D)e^2p+b(sfXEoi$l6C0XeXQx} z(Soh^RL{|_k3hh%ohmXnwbGP~k<@cP@gW+LadQ?Z+l+1kK=e?$O$p091NB%l-L zHyZb=O9;J*!0J|{O#NOKl?Qc$&LpOX0aIo4YlSK}P&0NrFeL zRo67<%e)8SdO^QaZ;M1WG*MnQ)2ANC;Vk_=s=NlJ49DdMab0QNQjQHl6GVo{VLFuo z2396oR*keJkHphzV|=?i4YS}w8d=nfqBkE-*kCibXkRP_-8Khh54QnfnORF%zwhNo zQmqO)`TpZ-46sMwR?`5(6cEP2fubZzADGzavsCUwqnOU*dVwjUZlX5__#q;0@2lmz z3?DdDrR?T@fv>(x(;b6V9uFq~1mXt4D6lqw$)>AoiTNXt8AMuB>4<$O%!l8*+#lTm zw}-=G6#{yw(Iw)q$|qK&mOk1F7Je6?z<>q>knKZD{b;;a)c0ze%1}8(Ht0>|=;Zf* zyL{Mxy2(^5d;&km6=D81p<1!*3}Kl;{Q+=?X%#b5IlTfh-MQ&OBhOhx#yi_lVB9Na z^Kbzvr&bG($16Zg^=!+VE%-bw8GTh}lgB!AjHg@Vv5co8;l zs*Nxiy9TpP<2Beiwgsu;HEw*x*4pSr&j`6qj*jl+;tZNC`7Xki;p1C4SC9IqKR_sg$O=vYT^s9I}F=Cfo7B=$3%1eX5X!o6)*6|(?E`j zTN)V)86Vm>*nlY}(+h>$`>6Y}s|$>T;uKSWMteE+dnv#e#gFE0lQ~kRIz5;IvsXA0 zBd{~h>k8?p$b*y@wE>p1Hpgsew^m&N1}!nkn6=s)VHZzihouE(@bzbasS$;Q#jd~q z{O)cHeC-xR7Zi~SQ_}lF@gK`*Y#pQ5rN7UxJgolrqkUZuQjzg=y!8b@pIr&81Iw_` z%Y6@VHt&NfTb#$9L3kzJ5+S~^U)^#G!{V5TjI~ClzYx)w%WjbIgdh>x`1E#Q3J!&s zh>5F568CaIPQI=P()+@AmF3#dw3 zXM4v6(#8s^=G13${Zhp=EMhZ$UOyB|KWYs-RzoN#0Y_Y$~ z_q08TglDa|+s+A^ig z!0$v9r7>xwqsf_+VjU99eT1B5lOSDAehcra!t7p!eP{bV2zZlx&Z{Qz{nAuFaUvMc z{Q$1DEy*P<@J8xHTiNwD*A-}i;sFlsCo4nZl; z=WO1fjM?ipDl}alCJ++^oh$H#3X3jwvu%36aEPT8zCIuBM1dG^Li4Drm9ZxJ-_PvK zXPx4Y$b$>YUBs~P!oiZMm{}b+`Yd}iYrpDtd>;e4AUG|jLiXkX`v)i=FI}KWS%s3@xt`BY2%7Ps+QR_pNrIzQ;>^Hp6ae+AaqvwgS?%0W=T6 zj_`tKRIBAuIX4s!XyO8WFHFRb;h}75Jhu`6OpVr0mO%Wz%8n}k?tfn3!r}huJoYTu z4phDF)rD(w#uT9SSOt+phDSV2oS7$%}GiJEZhh`niI6`CN3~Z$Jc9?tJ zFPVIx#W{G9vNq_>L_*#(=H==1Wt|a*;9O0|OsM0(A3|RwJN^XuQ@VR!g7|);OOGzY z`mp+T7moV~mS&l66o^trr}N5D{RGg_#t*5_k3XhBgoo%UhdavcEQYGW%OCTLsJa;! zl7B%f1Udb4E^}Jy?xUSVW_mF+C{U^L18>6nQEUxg|ip9??`!kS(%wD zE{7~eos$~ktML)WQj~IiF?w!Tt-hcn+BT&_`~E7rs>QnfJ2)_5dNg_) z!%~-Rx9W&JJe2g@4i7Msu`<&*T&AHiBPg%n*uqYwJB86j|R4k0s&{fX;;ra9jezI-H7BNZl&OVy$&;B)$Ie4lYMQgQ5Q0 zot!4W_tn`+tJkd`?Twmzv z`+-IgByFTXwcY=i>hMgGiUwC{S@U$CK!yd%+MH5PD^)KJba#MvZqCkd(7mm)TFD*u z9EGT&lBf8&=#V{0p)xYT#z;?H0>Szzm?n*GSq3eMH+AWbj$c&f+sDJQ&A*=GJH=o0 z{GuIiopAF(a>+fhG0-cmqA7llu;o``XH{@?6Hvi>o$8fx6LTWtWGXk#CIb^Qq}=a9 zf$3zG`%#MCHuRU0l)^Ysr+x7q78u$M;W&h`9Z3J0vl6JLK z9VavaPQU-T{RxA1wIoW9Tg4B%*Hk+NC1HL)zh4ggO0ZhFvQLXaTyTfw%x!o!G%$yZ zUHD5f{pWfL23}QK%)GEn_uxgojK`bT;1Iz?Crd^|M{Ca&K}cPSKV{b8^;W@7E#5cp zcA10$+u6=R~392}xoHUY9;7`1uAPyN@HJTHfW#~FDbf%3oh+P~*l zX}J8zU)dD+trei9=&3hmNUP$Q?^6R9SYM|IUpO&lKE4Q7yQq7F^k|eTExQ}%r(5ON)Tqz1J__m?-Qv`U%h$Z`xKzeHYZ zJEZ8iPS%!*6aPpI&pv~Clhw#h-;z{ZI(v~qP(j~gKJI2h1=<7kj71>6prwvX=3c^T znH_pWY3aAPq$3U|Rs%SiaqR&^(mJA0>`Ay|^V@H6V@t94cN}NSiv@PqxaDT(`R;R2uDBH>(H( zKYHinT|(ju5>Ga!hjP^RmWGfj&L69!JRX&J$^pw94IE$PsNG2NH4MR^2vJjE@n~p0 zXbA~|Q_u-Ri*uH!4;v!r%%b8M=PL}%4wXhgN>V^Nq`NyMltvn)ySp2t zyHUDJSeJ9I_dVXV_jm2TV9%eN$2_JyJoj~vYs5J|=f{0u*(=!oB;hk-ZX+u&JJHwG zDXZCWCT#oT=fxtnnsKf^LY$mL6Us1kgm21gP_7Wy9l6Q{N1BIi_k6!4 z>0It7b$?pri$k|^kMZaCxahC?L%FF&woL8$yGv4jBXHw_g6n;?;hU@bmtkGLMib5q zm1-Wcpu<~Xo!ln%=@dN*53CFUJ#YBiqCPKt`D22w0$yV|;MO1)aW+~!gj?O9D7dF} zw&^?rn;mb5N@X3Wd)4tWRm}R9rD-vWw=Dg>E`gkLOs}RCY~ZWs5HSOA7MJa$!*hz0 z>gU-R{$5Ae)b z{SyKxXVcjpK2yHfi66rLQ}b$wdcENl`6v3<2y1eMNnbDUaef%&SJmAtv{=u9W4rrO zo7Z4|pUmSLh$&X`ZYVjc^L`+)kdAC01EJ6GXe+ZLS`M)yOQw+VF<3!5jVYqVelJz< zuHEPP2?%RtqcWjEJq=gH7VxuUppqB%c{NR`je*48kkXDyzH_KZY+7@4?v47^3BIG<= z^e~v7C96%X3xLYAW>>qD$}QDxKHJ=3269A_daDn$HVGJ5cC$cy47y5yOq%{DBuc-^ z^D|HfOqA!>mC=oK8xp7&UjZbt<(%y!ugy@?=#tG!)1UpxtwF9mERYgbeLh`jGQJrm z7~gv-H6F9jcmw6$29!)vb-xNZ!WKK(egRT|n%PUtzY9f#-unagHIJv0Tjo0TZIYt$ zzotOf?;mr9|9RzLGOhC;Ijm1if|@m+IRKuw75>ll@looxsHIRT)wqEnF(W?X^pw59S&ThFG{)# z=y*L~9EbF1Qq56F$9qf4NEY8q7bGZfRah+NUsSiWfDxAz!LJdIY--~jP=J7`uldG$ zgef;aWAzgtT+;L_&?h@pM#0Yle9`Sz_d}m`^F-7Xla19@73h92&y@+@NyqJeE&4d3 zbD7!xl*aFcKB*I2<=rjweXp9hj=DCY6m|6ITb!=xkgKxG&h$DqF-%&CD!|7f80UFA0*@c`B^LD&dD?>K`2o&5A37>JF|zC^SH za9%h)Q;QQxeH$}_05o;?z+id}w20T~A}&}`sW4Kxeo>mPQ{A#LVC(-aF7`JQg9McV zqD7bxld#t20-coZP0=tTj25m9|!g>+$%(IV89iPv;~{3L0a40=jH z^|1oQ^jb&mYjI0g!UtS@0B8tw4$c1I^LDW$dAwjGEo2jPB&+w>td^Ss8aB;NP_481 z!3@zIjW~PhLI8SffR~dFB|QusH%vsIg01zxd{q8Nb`06zvZH?;>;d&)jUS(FjF?XBm=AXDq^r zExE0vVbio$YxFb``Ok5SuX%J=vjFC0UhAKKEt=|B{JTfed_zw8C#z9>qT?f&EdGT8 zDN&h|Bl{6C7th!r^Can4W8EOaVHwu3`X!g^(qV8AE(+YrWOqu+D%{Ro-~)U%2`5XS z2=COQDLWaYUpOdy%xa;i;8=ty>OXyz+2DB=U89GTeyuhqQulvjU9xj@Nx=0NHnZ`C} znP08cMw|6q1~57?y&=W?nnHw~#QkZrW~u(90Zt9#0*=}fO`ob4*x&uJgvz5qK)L?* zOE4#2Vg2ZmGl1es%}(#J1m+~pyZO+s_c+X)gWVaR$l3q#8C$R@K~x}V1d(_?D+q|> zPD+GFkurH%!P3?bt?G?xJ@~(wNx9+wIkkaB;s@BDfhyyeCqVj@1tB=#8}5v8*uoVZ6yKPFGFN(in(#lB!-(Q{e=b%O%2?#Z@YBI z*SLOkjZ%Fds=auymsm@Dp29F^HSh2j+Fq#gnH|T}$$b>8Lw<`|jBS$+FPfTUy9Wie ziM9%h?D$%XTZGW-oC7y5L6YPSaJ1iMh-lXDeFZg)<^MTq@&hp2_NT}6mf!D8286Q= ztgUvm>fb+fb@_u(@S4n%3PtK;u{86n*x5WFf;OLzsw-<>X*;d&&MziWS{ek`fx&wl zAUjsQ`wdKQB=nCU@`m~TA)xYi%tWSKl%v%U(_ztTyatOGOykO-uLc+k^PVJSaVmp^ zmbK-?YN}yDX@VG9Fm3j-0^N&$p2qW3r zBX1mRaxPJon!NVVb4QYnnj;5DxEt6=37Nru^4T5*Mb<}83G5dCO_|8lbFfIYZEamR z+_kE8>;zrAFl{>VX5G4={6uB1Jccl$hA&h2sgENiXL z5?1$P>n>Y{=nLd996MzP%(pPXF;NO-yI9|D7r?45x8dR;IHHRROT7hiHJ>jN7Cpco z6|q3Ab3z@u2$p=}C-PU`*b3+9Z)lbL%!j;LR&D3^!IcRpyxUlWI^}L5I`t_z$T)zQ*d({7NdZR>8F+Fu_yWr zjL8DZ^?|vCb0zGYu^OlU*+a@`a1HAZ( z&;7?O1#bJym-9eIRjEQ(L-EmuO{GC8vlSEjbQRzMk5@=|-8X>-wO~wN3^t9f@lm_c zIpN|JL1oPP5y)ymQ_|rQ{l$f&KpE|)T9;dZGLwnQlz~kPY7L7T-rTX&Z+CyMrFFY> zTa*jg=SWxm02(0wsWAZvE-LQx4^oQ{Qm4;}CgN|oA7gtX2p=JL{ zq;J<*EWe_5+*d{KhlSZbbH+Cow{{J#xO%=v@d!(IQT^EZ<sa4mwRcuXY>kNOPMzSpGuX+nHiaXceT;s5FXpkQ4uO_SQ)E*b$YAz+`T!t7Z* zPlx?$?DSw?>EnOO)^CZp0R9`uT5rgOsz96Cp`Oy=rRqZ~$^YdiWI7@xF8?q!f0H4U zIPc}o?f1U-Kc3PASklOqOO45YdqUo!zBm!R)abwhudlCHB$D3C3_#Cw zWN2t;p4y#TADN&~=;`UX-=RD@8@~MWM>5OeU6{fYLND1T-q`ZEe20nE0`4H1z8|^6H#vaLQ*v7<0{RTC) zXP-8>zU2FOXZSMPY`;=IR#8Y`6B-^Y)dk2rP*-~SKtc>>z(?%wf5E^oFgzSV@$R5$ z+|N*em9-3b!XgK4{`R}J4gCJy7$7|Y0wg6Qpp$BUOXsw=i?-ui%UtXuqlY5P^~+@A zD%_8)H>3Z|D<}vF43wjd--IYp?C+EC*VoowU0ht8o{EV|NlRNmQ?)C#wzf{bx{awQ zu2zcc92!E-tI%Ld^sY|-M||T6DFje>;?a%_rph8>vA8Tvof`9v?d?nB{g67pU;A`? zeD&+=>lGF33awf}V{@cDa+B2|&-lJnP~VW@n;IIv$PgwX&C492bylesp&}xR>Ftxo zDm43SJ2aM;v)%VkPvg9tJfO%mX#dXQK0Y;dp87}42A1>&8htLSVc<)tZ;I2oys~kl zoHh$d^|>*~7a!hV|A8ZgpLM_bl`iDwa4?kzmQ$B23}JH6eeTPIYXhDMBW?~CroYQ# zAkvI7>GK*sN^h?#^>A=sZ1Hr&3=_`s-0?^X;ost#^eKtJq@7wqTmz8bH#+RpSug#X zE05XD%gsHNR>qI>21w0^o0AW9Rtq4pc=0yHm%XS6u7k4Qp4I@5y7+=ii_>C0>dq1Am&GpVy-ObQ9Cu`~bXx71Q`tid5+y z1INq%-JNBFdS~|WqrdksxUJf~g}))w4cT(8z4BZ-U0YrC2G}CW5OnE*xns#Ov;%z+ z(Wi@am{UPAGXGkEJ07=N^tlSGgGC~+{_k}-UkQFc41f;V9*FZKZwpD~wRZnC!+6Oa z{cSXrPgX|e)2EHj8+P88G&C@xZuM&z^W5h7fU=W?LGV&LP$T=hGF!W!=Zn*Y+vqN( zQBK|u(^LaRgBX->Za}~WjNe`)494aRvK#e;(#S?T9nRa&6sqhqk3o(yfv0D-kDY6d zV}%)ri|B5?BPjSRVmF&Ln4%jO%nS(7ioa;9D!}~h;93tXQZ;L8DW3wqx}gzFy7+;iU`A}L zuT@=L-D&WqGIm*6nbs~za1~P`vZSa44JVs!L&fVvCct-FU0of35sjtClrJ3X??)KI zhQMS1mcT~;=qQ>SrUNz(P8^!st=7{Y-(R0*3jIRiiUN})w}1;`w!WE}nF!21ns8(p z6y{=gS63_oBe2Lb7Y#RVo>M94rLa1dPuRwT8B|veD&0JbOfm0888RXtQ2-Acmn!P%~ zdx`O!U`rx^{3sq`@TT&m`6~f5oj|x6OavBm`EBv%ES7uZ$gbVf9JG}nHGhH6zt&%n zLhqLlaeZ88fgaw63@iiR9nv3<$CAjiU80}T`0Y1=cQ=d&1c6aI;z|6aTshb> z=X)q%fkuBl9PiQnLs7t1Bbpi|WPH_H=XG@j!SD(|n7aVyB}L);f;sb4IIIx@@~Vdd!WCCME5H7Fj=u|YU~UpRz`uB-k+0@ z(*)6-a0;0U^QEjn9r|nHl?c0Lqh4f|@ozjR2biAV_i6*4t{`0e{#k;scZ&23bcx5) z1sM3mz}^+q{|nV-C-apsHj{qyF}GpwpsvY~sj+FIqbWqm^%m=GKePpz>jR`)rC9wo z%D;AoC}KaAKkk!GDaRFp$hnW{MDIk%OF>ozXzjET27c^d&7ogk##Sut%%meactFe> z6X{XveIZ27EfIv*^ zNQZ#kI#jv2n>$o@Fd9sA1ypY^4j1C<377(Iz=I4}?b=QW8G~p98`{U(mxR|Cc^4-@y3UEiN_gkSiPBFa%c(ukjekEo4O5 zftO-9ymXNH>5d?X^2Kb|?F+&I*_=aZYDVvSseHoq7mo%%283wahEj9pfY}zkQt|oM zuYa9b!H};C2%<2%?QDbr@~4NqhdmUPmRjE^v>$q#Aow%tEdQO%TWRF3pFqp!rWb_O z0swV{YrqD44VZwNSWf1^jTKiSzqm(C<39mb&jS7wQY5)ZIdDc?u&^fhoHPU3Xs0o% z4E|ct%HdfNr&(BbfP6F%R>)2}ze8MAteAQSTqdE>S}3oA%==wXOdvJ%*jOTy zN5F0wkXib?#gPS&$s*twum|{AI$p7{VLD;)SNeMMJMCizBKC{|*kzW=H(qPx!3a1h zr^ELHlru&a7K{mlQ`6IvdRjsLn4zM29e$c-V`<_Q{Wd|`J4*rH6Nln<*wEb84va*t!G@`RP2w8i&dV1sOf*}c*B5~Qz2!hQz3nGg7E7jZU0Aur4_|!Bsosb%eqfTCbrg=|0D?kohe?g4u*UPN9zYe^r zt>~l8GsgKxeeXjgaeLgzRM$Vytl!>A?@L@lVP{V%W8vFHZm~<*^7Hd&sUnKcgm%NO z_zRQ{m9&eMSP zLnh#0b#bi+EaLcrTq<#u@IJgbPRaclrk=Dxu}7 zvb0tA-1TO~@$+{=?w79j%Rz@UX#XR8CcV_5egxarL@JmC2XdVgkq|QD-@r2Yg~GQ$ zN6WxIU;%Ru%_=1H2(m1Y+VpCp&MFhe!i9#ClaoIxquXNY@WaU(C@LzJY5X7-?GCy1 zQz0+dnm`LBlH1tgfJO>-b?x?%`Ve_8hrkVuu7ZCKR|%1(v~;yq{#c-xF5$G$>cPhp z*cQ2LSB3U1yo>XN5P?zsFFyki2x8FflN! zQz!?rgeve;VW17>wn(7>K(F!@0juslKrZYf5Q}YycVr{DzTyFH>AFi*#Vz&S3&&IFZ+a9;^s= zCU#zq$nQkv)3&#@1p}Xx1Ez0!?cQX9SY9Z-PmX*caZ2J4P>hcgL6tjHFo#fOV710aBbu^4D1aGEUtPG$px+!t}p z;t4-LOu$k58AWmT1@34y-$zwU1SQ9AXsWSTD^k{A&M@Z{qPz-=WycC z=vX3HF<9hIu%z%_+%R`KwV#5xJW&6HelrhHE!sYrgv5TusGq0Sp8)TB$gB}FWiTaU zL$LBGG&)LQdV52ph!pJ3oP_`BkE`=@e_zWb;0%IHl(kf$((J`yrn zZz}Oe#Ig4Ays?uJ)XB^T=Kvb(-FD9t6YKhID^&3XG>C7`=2T4tP>>4b-pXVu_X>Qs zTk?C2J39orQ6fJ2{2raym5DT8rMW6> z=9wO1FisXf|BkQ+ji%GZD-vLtORs6r_zq~*SQrLuXPT-9CS*+Vf%JBI;o?;vGR8gK z=SRN!-}9}{sX3ZpcNsBNvP`TqE?Z|ems;|27&NdU}IxG^iTvsBb$dZ zOVo;er-XcmUq8TUB;te%h@l6Nv7ke-ojuC+tS&56T^MmaQxg-)o$vJ%kWhrk;+Pl= zn{03>G4F-g*`4O~C>?;)01OiJXyCv$+n>48_c#JD^)W}V(D2s#vS z0-r(A?YHjd6Uc1Bfr=SUNXqY5)wx3p>0g`Vv0mgxw85Rg7eLw)0@WPg^L~d{8yAdu z-^UBDh&c`#vRgE|{Ls-i&Or82R8%xk8wvm+T~N(rPDnAEJeIR*f-dL+u1AZtk9uCp zUkMq6;8kR@z)S|)I9j|Laos+Iu`6ug{1i_%s9DEFdyhL}pcW!0OJNRzBbV9?xo<)H0h_v*~4K)oEnC zm^}*rOl9$A^jkZj|DoVb(x#dzU5R*LUYY<5KHfLmg~}Jqg3S_SN~HkT4#ddvue?6~ z3^obKcFJ>K1rXVkc9WpfD5}~Hqr8&wwEEi*KF>TZDn=YL6DQoBW3&+28UkxTL13jB zr+P!h20ia+{4#h(44p*OTL@p*9EBDp#qdYSj3lJwrG_W1iq&Xb_w5U%{wR`=C_&K( z1tH>1mM^k*=R2UyghfUcrKUBzQ4MYp2AbNems3cpa8u)d6LhN5T@@7-A+H=R-HuLj z5h?~@A)yIOcSLJ@`~zfdG@hxbtdQSeg4N{2=z!!CJpS`%tsOX*!&GV#*c+>mrv(98 zAw4-i6&Z#PQJVAP2q7rT)6me-cMovB;tlfC z(!!c%U{T@UEo}+79HU_W9Zfx{X` z$z$N_4;q1)aFH)%2m``o(K26K1P&)MBmB%E-010%Vzm!ks-fV@PB z3-s#>fQ}JF<&?pQVMAqOu}2Bz5Q+mCkG`c=Wg@?Ce7LOK-5(;F#*yJVu(jd)rW+oOL-#SR>!gd= zfxr&NxUb#qPm}bX*q5NWwkR)0)- zn`6lCZxZ426VYe$1-g0VrarKahR~}>$oKg=(Q+=rTj#r1jDEZK;{;DG#lyP4-H$#p z_eWsGh4e9^|!2X}z0iN~ zA1;O_WcNZ0AR|H1pBx|WFBJHCav*7at~crwy1etls@Y|y1FG9s5{ABnoA(vidfCAk zoP1&$pm;_ePhOTG);h-I!M?4K^D22)f}gAU@gqGfCb~2YGbW8ZffT_k)d^FKfV}8g z>W-P)GaNGquKiracH-@DcR(@(mA-siWFt1SYsb|O0YfyX{d62bR-|j*FHO`(f3ZGG z|2!!fD}&1nU51}++#Vm%buE`f$_H0(^J-bF$#Pb;5aBjU9xYF8N^1ifYUoj$S+nfz zn>SlZ2M|?ZzFjz^^Fin=tiP$k*+!=92JdX_3&;&IutAi=wu?xZT^<`MRv#ZeRoDSy zkPH#WB(J9#+V!+u7OiW5l0_cN2&Og#ZbmofpcR_%an@qyFIn{})yaJB`yAk3erl{w z<9$K(ps3imNPbvdXs%V`d7G8;40zVfdM;L8X;QX5<4LsZq1Q&)i2P`X!?g^GbZokhBhoIb;PQN%nB*32^Ttf8z< z5VGn0)V}x2jK?Y-?0J*x6_>%1E-p9Tf9^p`7A?E*C`yu}i%=ic0RRp0GOUq%y%^DX zI$rYFs2ztVgKj$L#(?NBVtLDmCP&UL0`R;ipf@ZhCzr_d&f&;VA5QlT3Pf|~p$~jh z8n*KeFZOH>exWVke5?o&uSB-wvu;jL)GH2-$d*dXG5wUECQxnmydlnkQ>HiWJ5!=u zuX3F(7+~~*^wrZASbj3>*3LfCOl%64(rwL{Y|wML&MBTj*xZxHwv+OhT!kJxUQhk} zl-60`Uk}%_8SW!I)vLE1c;&a& zSHYrrd7^+Wn0vB5^tqL|{_>UQ<2KMLrG7p&zV;8vC;PJsfbta2_skCSTGxx_XW=w2 z#%|Z1uQFX6j;qQ;19Ah1gpvz6fd&xtpV7mK#=VIXxtGlp|309~3Ru!v4VHdzG&Um` z(V3CgWQW?3#j6yK~Q42ySwv#ni=@{6Yt~sJHjM9CiVU0#_Hr`0`$sH z-CWP_X@`5$4UjTUhZ31@ew+%fLG}Fr^CFN5^f8X$TCo>gxD9AP zE>xN3+3$woC+yHXCgDcfBPWpwItP9gg6IVN^KDMR-up^LQ^ujEr=?+vuAzu-^)ai6 z)!Vl}w%LWRm8YH>Uz}?WPLdi=)miJH68JpOJk@>rS!_C-G_{WHrusw`95k#6 z{CNN{@k*DmS4balsa^HKZQ}D>?$aNg$*LdWLFt|GPl|#f-C;=dL$e$} zi+u8&GIet?#r7}tholOYVG(&yRxDIHNOlmJ@sti4HQOf%Y$cACj|>QE4t^fsX@NQv8k5E{hIQv*YhG@lJ=jLH2mbqA0(OFHUNiMq9H9@;d*9-h>l8+3_gfd1FLooV#soQtgL}t zb}H6O(6;D^Jhe>-)>x`CMPb4q6X<uHC(u2huEjY8v-P9rJ z;h)zwbHWWDoDkaC3$$%s-@VKK2nOr5%i0wb!wyE|6Lm>C!{?ugE9bQ6xC*oj?XRu6 zg<{{$$Z!9-D#!;#evKv5QQzaPyLm!Y`1N$969~1^+ zqi4PRw?u^qEJIW7Q8S_G0-Tlx29%Dp>PA0qaJ^p?gUOxNa<=KP+MV!Y?@`H-$H_eb6)!FB85~0;s=g(Qw`C* z{vt+)>rA(ij6`Xf`{8-U_n-Hu0{W74B|0WX6gVDS;`QUuzg=H@gW8Cs0L2xEIhJ2g zaBhC}fB+olT>(ktPyF&FkUpg$D~oba z)vm8CXt-?+CL~qbT)g}0Xo-)5Bkl&d3i~Vo+6K)5q5}IyiqV9~C!X+!>n*Tk>VQJ_ zwMDY~5ULf4q|VY+4vd_Z34I`uOp%p%eqZhEB{F=obwDy330_OW5zwcnX2~w#FfHty zvOnLJ$H2hg?SZZ^6w^JE+aljS>&xtt&FbnN`N{>VE?qFf^2fB3%3+f4z&es%LgDu{ zYlx$fb%1E*NQM1fkjuR4S#)3TfILbQY1LVQo3BEE#!`ZH01pazV`Br1uv5SQ3(R?A z*(_&Ek+^1PhP&{dH^^+>R=}gG^oHZz94+<3>6)12ULNA&qWa(?`}!_{jwOLz%R4ZR zRtX^5=D9_23yh3Fl7*~ieoGZ95^TvsHYVJ zOl!hGnJ%Sp$aH~HGAyZWVr* zc)h0&W(Qzpx`+U0I z39b~wpx$iVj_iCe(uy@#hVq0NO+EnrNZjHO-^P)3acNm+|CwTWc{* zFD#t?9EtbkIG*l}a>siHgGfX9jb@)9OYC!GDS|p!zyeqWAs!qPEZ&Taj1=g@i8|Z0 z=yunZi_FP@NJ-x_vt5IZ&OJCm1jbd$b70pIG71lk{iz&uRVw`QT!nf5`ztcXfP^?P zv<3$yx&zI?8uCe1S2j3Di<>7iMQS*K6mWZrv1%$Z-P_wHxKR6H0|Rm<3Nr@dqs+CM zpP;ia?Lp!pFc})pKk1kVH#y>6ss43sg9)e z1qBQI1g7NZ3%D3B##JaQbnsRIubD?Mas*vj3EWNG$h#eNap>s66RB@p01`W?P5*m!Cz|BMP&k80~ZKAL#_^|9TXfa!3xv|FvB;% z$?23&K!CXU0z@Bkwpm#7Qg9gZf%Zc)pFLNZiBL6?+=13-9P<~LT6=BwAUzQ?pi>>9 zlLC8;0Lj9nj*bp6&&?tKkp-6x4SGlc?}IzR^wXY6NXT=(!VnY(!&mZ*|Mk5&>`!Ea z39AHTf2IgWiqHrN^2&0SWtm0ODjt1n5)q5t`B2LnaU_KUM$sTr1Bf6_f!Pa~TRoqD z1I~KDr`6CCyvw@vHhS*Z#|ge0pTLg*XTalf-|uuwhabeI8CY0YgZ$f6hL7VJ=@}X1 z`1rgg1DHbB95gWSs2#bK?%**X(2Z`P`D37SWZy>o`RhdRh2o<^OUnOv3ALcnBP>87 zR7v{AlDTRHB$QOdlrt6hjwGeSe`m)K>`w6N$YU8v2&4&oW_tF`1?dLoKA6_tzMxVL zn;`)nvazx3Zs#TkFZWWC!oHEunc@y3`Y9}j0NLpz;zde)I~*$ zqRKcP#DBQlcmeJ*SE4fZR1kStRdQglnVc}bVA7jzbOo8i!8pJB{cmynO$-49CWyE% zbQi`ioVYrp-f)oYif5c3Z?Mslby%}Y#ad#TJz~=M{(z%}wxNLVdfhv5hv0}fDf=O| zgD|p@lr7XCDM9YH;qTi`BLLh9X(AWI(dzI)ecG21WxJt_gNxfkv0KqIy~ce3l;Qs$Ro=ogbl{7S61F1w=z%&x|@zd618ZD^1F->J2aY`IL&GW?m9agia+Ig zo2?ncyI$pdc$FZ<+WF)R2Bt7dBlx%kC5UWgfq1yE<%r86WE1=Lpks(RNrcQiHFFpC z&9&=sKO68yvqbj)LSrBW~ zSlH$u>qz02Pv@q{-sFtlGbmxDUdwD#diTH`Op8|*NQVn6>~dZEZeA^6hTUa@#3{>8 zn)X)~<@&cvrq}AG7j3~HNf~)Ffa{Gx z7b{Fa4q7qcixiJMus6z`pEiLY@}p!*ZN5+eO*rKSYV6Okuxa#+VV~k*)6nEA3;tHg z&1(PufBXObUMiH~(mI<9I)ARMW963KAaXXq<611Mso44~GKLWo!x@XQ>wZimq^lQm zi&{AlgN`<0i+PkV!cgXSGN<QnYZ=8*%8CVraP(TWhjd8ZHo_4TUk*t7@f?S_c7M{%F{L2? z_@N$AcKuAvbm^*m#zL$zAOD9_+|^NL8wsNj1i@af&bntOGS!Stk8MGS^f!9RB`WJe z)p+l3KDBAKWSKmUFeB!oZ%kSOgG;Q{23oiBxFs2~6aG;i&wp-CHWKhR&N{FYD@+#} zPNWv|EVbu$X2pEH9(;ec$sXPJ4Q$!Gm%qum_Dpp@87b4tqy_0F8!cU) z=GvbI21bgP-6$ih3>Wn3_ihg^G;?W(>ImkoQNH(>$EbfBr+xk3K?Xei5SqSr(`^&E zvNe&GX4j+SfFd*7)wYZ4s}l6dX%5C^nM#t4>c%^Rp~e!v6yK6H;|`4BOcA$VWFo7l zUVL-0D!>qjkh~r_BPiI2`3;le2KIT0uUubSx0$t|L$OAE_B`XDk{_~hf8IZlY{#x= zQ@K)adl!b$=kZ?T;kdQCU}{{qAzWFv#f^d&N;R-zKDOQgZJ*nQ9r&nR4*TtGOFEWyMl$&L!O{KG!F32 z6(UZ()$rL?t1t?>Uc4+;<}Y_!U<{+Tn)li}{sXoxUUmgQnjp|QDyNGp{fg<$BMF6= zYpwn=5n$h{r@K|SGW7_?`N#}PwTb%2v9!pWf4d+3Vg#V00eg_uH zI;-PR$MmEuj%_@*Xi&3uHxOcI5M6Ks>!}HsgI?!sz&jb?ncjMM~c-0zbl{ZD{*V8QP!p0AmU{$B8Of7D$VSZlf@L;2WdgTK3K>C`Mf zJzvGx8>T~N$qKWw67yH6+ z*hO{qwfQ`_Z%!!$e@p*ZwtT&L=LmYdEMc3aI_nh;i9l*4nDVXdW_uiz@}%VT*xh=| zf=&ywFiIIhD>uf(U!K6`)xF~TKqO^;HdhdXLG*a;zkFj%@S|U>axWy14?iWoP*yqY zW9!_B@EMqxt@QgWX2xHGX%Tp3@Gp>iX=FDh@|`Fl2;lC%hzJ)J+nDeR&1T&ts@gFa z0)*#fk0_3r-(%d|@kCD&BuL}>>PMUm<|8c!@;X#i-}Bi@COE?BMBi5GcDTXL{o>92 zefk~*J6So&4q@*{!ajXr*-@>^&t01eX#Pfb-(iqQOxFynDX#?3GdSE9K0Zo2hW3UQ zz1b~Y;PAML&f+*beBUb58H$q$QPVsT@Si74s9^Q6~^m^}` zK)TeH?tXD~`#&bwcC1f`grx45#G_r3n05!6oW&35(P?emHlt$`_Q0sRFVMA*wP`7I zVa&UG*d>&ho6CO0|1+K-`fah>NgYfPE99F44m!?S8n)the!gxev9|TUc}tJ zqIM{vnI!=^8M*k&d!=u6p2LUl1O+heAP>k+I^bjXcH!G~;ocjcL`#JldYzt5e%VQ- zihbXzLrK3rTB50jQ&0HIg>U94{O8_T!iz*fw9X%=6*?-NXJtu=~pC?E#NrXNZgKADOY2 zsD@O=|NWBQ(V_6?4!Zks*y^_jVjJ1Mm~q+gd?O=diZVd&ftDuVj4$e11LRF+AZdVG!J)il$e*Ca;MW4SVN7GFMt)zg=A4AyWL{Fz*J|SO)ZuX}G}sHpdh1ldyY6MoL>q(C8c(Z=O{gD=Ui*NW3-{*({RF z5b?UoA-!svgqB~=Bn^;eOSZ!@Q+JozLaRE>!4hZo87CLT$9U+SOP!j+ja+P$E05iM4VVWG{O?b5}M|tcYMvJ|&I>8KE8TR|aUBLTiKJ}L_jAzLB(?vaoXz6@7 zO7_w;b^;Y_>Q$=NfZ(`)9vLiY=ub!qQhxFHcCRO7bI|y%E+BT~HnrxD@>HGVZG_%R z8joPCMB1O=lLwBYg^RrqrM!9yemvl0I-ybX0lU@p550yV?D6L4LuEqYhM=p(xi_tf z$tb5aO+`6bwE-D9R4G#5bg!uW64fD-mg37E&8qXSQjFI%a+L*xo_*w5cKc#dyy0nW zhgZV{hhJZ6UMWR#s$6;1pC8e*{}zCSpsKWa{uaN+4V8@z_Vsw&9&8fsPZ0>=E??pS z;XUSLRV>i(4VRG3&$V_h(%Wu_x^6?Z8TgCKNOZ9guRX59&of{8V=|>iwff@EZdM+Y zbdVvM<36w#vlDAR>W{V*t04WeDxCHEIrA%UU!wfA1R4H42?I*_-_b=^A`BK)U@Jsp z_$zb0VcEM`J4Bw)+(o@`K9mv=*+!#Pl;2=_@-(A~zx{;RK$m*c>ULG7GEbP+r3m8} z=X`KqW?X<(2=1AF=gq~@rMFQ(Ptc9)^pP~hX}6eo1Y}0_nlCh*6-_h!SVUSSqSIfs z@7*fF^Z8sWD%@m^BB)NJHU3z_V_D4I8!Z*Iw{!+fti*GC(m?0GcLG_CnWyVRzUemY z7Zn=X7_qms*nPV&qBa7jTS)<;IZ%ycoU9Nm7-9766~pxzkTU`f<0P5RxWsK~vt9y2 zJRLj&$!w{hOR}}FFYUK@ZzPKBbN{zk(CBSRx&khM0qURYB91zDflfycT`Jfx5;zT!YEO9u`M%YRk&d(yGyD^U`;`;_zok36lzA4h9>SW> zDZ61ed0_Ysv3{U19|bXw@vChDjCPO{ntfcmBX`tOdedRJlz9EDxD5` zTC>A z&PXJ>Xrq@QYV_Vl4HAsr#zZGXbb~0PGXxVs5W*xOoSpZ5&wKsOmvjDsGoSV~dq4Yn zuC@2t&%N%oo^``cetg^9%LCK+#I@S$1+!iK>|3LATF@^w^c*n@p*^|%C8u*};v2^u zhJAJ^67toEEF>!R!#lbO2!8!oBUrP4EX0j>=fLvSW^k z{3;+}P{idV?gXq3gsyzl2YojGu9AP)1pvy%4f_KsWEXp_)af%hOuGT*3UL%qx!{k_ z_d|+90s-o~7n^etvq%dX`qZGaUSD!Xr2urpA;w1X3&>tQbIs0) z*L|Suv(UPk+kJ{VgWNO1S)v+{2%q_{9a&x{d$%^=z;lw-S!g4f@T%6N^Y>pVq3n4V zM$Yy{DljOsQPOAr05#fXGj^mz(9wp}eKtW7d59R`-j|cI?UY;Ch9z) zLK1}HByLrwdA9)OBXc)2`AIKg5~0%DPE1i$_#KNL^Cze160yGPg!}~xhzne%vKj;Z@&b5%~^IUti=>YV*->GNC4Rf zS#!MB7khX+)h<>gV3f6-H+BD~%#2W`2Ya)3@$n%W<=szunV6%qJUF1j_nf|Af4jMk z*H6oNFM$N5+QaRDfZ7(LVAQ46VArSNF67T_&^~jGJpv|ADY9JOb1}!7;!o#k^=J8- zr%uSZ_PQ##f6#`i(dbEcdY<2Bv0L;FM_##swM3N~77D><-&bH147KFZN3^~`q}}gM z(y-b!o+&6qo8tFd!&=a2S{%VEq#%%lJ^^-@e{Q(+{`N~x;cmtx z-wTf}ej)+LZI`c{jO$edI(v;Kqdb2)aRhxiY~%4pl`{XjN2y39Mz4u{04RKk z79Qdz%tm4wft{GeN@4JhNzU@(s3YMyX;l09$Am%>l~{!MR2`bh>(q3!s57Nd{b);Q z{g&Ip$ze}eY7xx7ax;UvBly1RrRz!Ji*fM`sEW6Ib?n)cb9ctv*4ZVoEnu<8JyibWtM-Q+9uVjM z!-x&p(l&hLF5&_l{?}e>s%D9CwmUm}tII}=;>Ve8ev!&0=U$+xf4$|8jIW)XnT7Z{S`7@n&5oesSu z3W7|Php0O80iTevxWua!zs}3c-M1iZp?>k!M#el zs~;O)#8v_VWxNn4j{XRMv1GIC@|p}02#YbIC`kM0`lN5Fc%tXUw@(0)bxVzibEofe zz8V2+GuYqoplhSir6M8+1ftzA&W7|;IqkfH#p=V6o_9h=8hNJm@$0M7h!@PcYA%Fm zA3Jy^)Zx1sExOr!h~<6n+N*ND%h}0mco%;^Hsa<3jUD$zN%{Z_Em2N`-sHL6P!r{<;3`U&47`Sm5pac)kv3PX}4A-xkp?{_*__bQlr;@LU; zaBBd7M~(C9EC>OE3O@dZCBLm2$8O1xRa-2pQb@g6zV!E+89PRh?Lt&EfXzqRuh!=Z zSu0x`7H8_YuE#gVlb=E&(*DdGAZJK}9J&hKL4&t`x z6ieheBR;iHejY3{=)jv1|Mdgv{u?cL0f+aMw*mO9GQ_tpe`#C?QKg`~V8$_p?W3S) zPTA+O84)+#RNOyL&6tJ|BV+@p-I(NluAo@}dIsEslT~=# zx^vU^*zt_*O=|$am`zIt$%|~`wk_UfhWpS1bPcde&8Sz73?R$20J#MZxxVr~sWO$J zN&s}_xQxG3Oe7a6gHP9;o8s6|Pk&&GWhFx&lhD}@Vgwx67j#NQctBPYAdYiu?VH6B z4$C;FwKB7XGe*$?=C^*-A{ed=xNcT-h2p}y;pfzwF7KxHTSvNsn;NpMSt`OC3Svvm zO^CL8*PLvWWq=<^>VRX=! zEHGGh%ON!3%7HSv!8@%Ggp@X878l*JV;y~#{At&q$ak@pR3$9{HN|oH_w+Y22Ck(_ zt3`^a^e@V&rz-?*IjW%IVvWEQH%{i~wzF?Im>UvH-4hPJ?%AiDWO1@4FZj?-mc{9E8CGWblmX=8-@4A~Nkf8cgN?iE==l*ZI#Pj|tbdr>L zrd?9ai|3>Y5R4gwtWyVnXL{n)*zECBJ{y*hrQciay!DMtXqs0SnjomAADZ!>1hNiS z`j4uAhtLzTP6-vnu;jjg#g&A%29iCk;?L z@z0^ee;h76>@AF!d~5YvMS;c|tjcNeshC-=jhr}$f=1~+y`$%)F~@q;MYwIR5SdAD ze5!9uu9R&dbJ`-aCvR!O1PaL*2uCO z#a))d#B9L}4)3e33p`fth?IW*tHBu<_d{-zJXw-QH^4?RK;CYhgTPhQz#3maPV#n? zXBn-2cHz{0RVu|+`rK;|Q@#eN;F)<^do8upX^nd}(yDLY56If)vOo81>WaK{U3%9_ zlp-!YC}N`&KqZ?=L^)m%t}k7_##o|rjg;oKgvJAnH98Be)if|j3K@gy+gaXe2O63Xiu6Pcn}i3Lu0fS| zT8?Arah!#>$ntq8$Z4m+aMe7zr#7H8KV3KoSM&JEm~UZJ`xC zxq5or`R6l2}Hza%bT3PVzAtZ?GR>= z6(rQdEo1zxp~2j-j_@--Pw%WD9ue<)*}2gt-6Vuv?MX@e$A@OZ;+n0!FGwFk`Cjji zZmERlspgT2BO?Q!cEmB+6Em+4uOhop?xu=J%S<~ylLAe1!m_42IwP&K)TTO}D!chN zQW)fnIHG5Y*GZbyQ;iHAM_xY{6hBF%?^D!H1Ly1doH#q)mdk-CqmPl13#PEOf@*I{ z%W+zDc+&(b+0zIcHLp!<>j9{C*F(C(4KkLHP4+_K1>mZu0~8>;FX|>@0#*;6Hd0VP z`O<-x1$Pu1_0g-8&-edWmN)9w;bQ30fL=M2!qyH%Hhn) zL-Q6#4LtGnyV7pdlHX9HtCGql!jrYl#=>^%MIMuBB$NwL>8S!ezof<>xg1rCmD%G3 z@pbggWR-UerD=Xwg7ZzQiDT`Z&0kZS$!}<;mp&(Yk-!12GkNPK&Q_h{9-7K;5g6@! zpkyixC$F*$HB0Mo5z(~DKDBbcHM?J%ETPMoB2sn$&T;)}M!Avf2UZ zINdy6c>DESe^-PHHChNQE{I;biEZV@Lk~`j{JPEb_!grHNq>T{4$sDLm)ZE6rN+Eg z+aL7zn=Gp;j|A_V2ygZvj9WT1=uk_EM$PW?y$@8>XR1N5>SOo&<_)bfsbYD|;ufwS;AUr*VLTGcRl2e6?KG zxuAWn*tkwPM2n9;sXNopBvjr*resMa3JObzfN3KwPiu5=1Nx*_26k?CE|3GD<04?2 zruKWZmC`{*UM?=&9wJQn!6v63W;JFL-LR@>yDdZl>rpy+gV!_?#6~A|nvWxSp*8Qs z`1QaL-_`alOve25OK-X})ne{Zs7{Dl7<3Yj-%2xC^Xl%2BWWg=HouHY;R-3Il*D^W zI2Ntwew>;iz6hS6I6h8+w1hI5cLFV35BY>#YIx6qYd%Ew!E+ zwHM^j;z3Owmsk%`ZkyxHUK9Y%;^Xen0fyGG67jEJ3k_x+gyiko+P3WyZ^>}pBm|4) z3!!99thCT%u|R;aG|JXAlR?cxNU$CIoPKo}jdTH{ktHW&&t+^RIy++EZ#NN+&K|=D zTDw_Q6SUkK60|l7c~1WtsM=v>z%4M9n{Z5=2jq~J8t+M9B%sIR#Ed`wnrLfHEtk0f z6{XJI*1i&d4J>6`Y$D{--qDq;5QVB2$Y&JxZcmWQk|_z2t7`8$f-3Zq6CCT1cW3>w z*?nDwqhhoR|ET*mBL@%cGbMK)g|1ua)du?xzh}#>E=$h>Yw6oJC!A`7u9;ly?ZH+u z3bD=VIwy&@YQueASfI2c9>jj`l0iiCMOahP=K<)%IxHorDmwMjZ<>i^2U7f66+P^>`yr$E&t#!0F zC?!vR{gr$4I`I7?C#{>fOj>eLffRAg78?K5hS>k&zarMS*{^YkrEPjZ@1tyA+C9i;Nv1%9;deO(M4PmZ_1?@ zT?-7o*5V!~@(4GO0wLoQE%yl_qjW7W{R6u;A`1&))@y08jL_spm~jNGjUWQkPg8ua zAq?L$-@KL;hhQRq@mc|4BaZkysQX3{q0fh)uzK`e6fwz-;CrZNrGhB0L9`5z;D15j z5+L}VybimA!16_yb+fQ|Awp9S6iNqr68m>cN!Gbwq*A^})Uk>x1{vaVyWr^Q@i1@> zJfylyA!LqW{!xaf%{%25e~=*Y!eJi*krj6np7!wEYk;V9U_dCkn#h!Uvl;vHwuQy= z#p+rYhzmP(D`a?6tiRN zrlwX`Rwh-y%Nd&g(DT2rZZmDsJGVz6CD12F3r$O`LHx!+%2=lhZGC^$^5_QRZ-iRR zuEi*$Yw$18^dq;wKeVXR=b~7CLgo^!@bT>-f8Om#x%fLBY(FobFU{XO!<3qTfGD?> zy5<|lU0`g9dHjfjMBlw-=>&l|sCQ}|<;2Adv<9!TeEcIR`j9A|ic zIX#yd@2CvDV9OJm@C0Wfp0=m8M3T*Prtrq@kXB|8kZ_1 z?3B4x1&b_-m8s`7#gp5Q;vT5n*LtJF^i+lZK++XMG{Q*fTby_|f8GO>%f`LJR6!LQmV}<^=XPIkMBm?Iy4xMLlD^WuBCtZc!hB$emu?~B z^53cU5~tP=Th&{uB&&j}*e^ct%RbHhs5MuRtwZ`C#z3wlyIQO4Nkjp;;H!_K{UMYO zALW(gB#zM7P}!WkEc@;LjdU)NK|Og$?`Q9Z^6%u|n14M92*YoNbiKCbyp>9gLv4M_ zle+AK+NWD1QMbBu_=N9oeOON+PH}pw&sELkcQft>UZQFudm=3tuTEjnr=nj)_)ia? z_UgnGnrQo%Dm@j@UM{>bnpFI>C|z?)n^xPpP`n_b$hyEuNBTeHv-3#oXYFe38uI@= z$*M42Zs=sfx4c#9b&uJOusHlx(1Y*n75!6w9$fVw>u;B#R2OMdbxl1@tPl4&Pfz z<1Bx0IZbm{zp>7lpL~dX^NV8l&e9#)Pl9T7_g@&<6(uDn=@+XMKPgt;Y7{En&QJf; zs968(EQm<9OO?ZjL)kiJ;ClMH_LTNqK3+cMV@a{2Ql28aJlgDf1zq6M%Rf>k(8sPMV8xyx7@(Huc;MnBLC@PYv;RcixLrm*&pgpQ zc`-DuZdf9BOzE8x@!OZ3M$4?r4xJ92x$M~N%Gsu?LQGfe*T;dh9cllLzeyXs*7}1agOdWw)#SZ*zQ0V@P90IU zrn0Vc3psop75ON*mnT_@CzZByuDfwX)&0oDc+uzQQF>}+YTI_fOxcdm&dZ&M*~~t{ z%sUy+1l)$&yX6<2tPV@#XD0I5&3{H}$ZG^ySFN+~TJpx}l}wb^;^$^~|(SxTU7MrdOlgDZ?~uUOs^3^7*CDYknNf^W@M0TkRis|sgECX zbF{SB%!}hMQ`@p{v+87T%Eknj1h2N1Fxzzhi7jD1S^qE)H}H}uOcVKgd7{zLmmbfP?5r9zJOP4npO!-%EyCH!Syst>%~#?Ic^18sl9@+k{>$nJ?H z$*8?n7kR%YOTtw^`IhZ~+>vzL-u|G@HzNzMN7}F@;)=Mr$HnRIX zwhJ<8{Sn++b9kTeBj1!#%uprY44CAc^;)Hk zaQe}lGW-5(Ve$96=Yv*1tv1$vac3A3B^4#FB@;OkPECI$oY(!jeRQli!<*dCIa41} zEnk=0EK%F=BEM&#UtC(}Kb^li|8#_Qe$G{yPnEki0u@`3#&ni!(OCyUmPLs|Yj7!uVT(-L~e`22Fun<*G)QyhO|CH3xiW$GVrA*Yt z*mRM;>&ZtKO69z)DX^*$QpBHgP7(M8%>3MDCJ|28jO4a^& zW@usfO`}h0czpAh4_bMKkvL6I;+ePVp-#`s>5br#1nYyrx9N%L{zx9wtl3OXwePy+ zz`QN7)9yDC_r;%zmr?8D4dMev2es}8UuIUx^=kD#mWi1sHxJXIm#j zQ;(OxeUrbsXWOlwv!3+3x%0#tD}GD?oR>DJiX-iz{Ii5x2?>{2m>&+&mIB-}fH#>e zRkR)>5I$@OL|_O4fx3jhHxP(dd!^Z+;rz~3GFNGEmu1m`bTu0%8x0{HzCcpX}u6|go;?B*@jjJMQnJDns$Zn)Ls3381EPnp?aCmrl zrK@<%Hg~vt(V6ZfuGXm3q-?@QaD_KAIyyt}C7IvHSTu<))BXGRA3PWM8KpfxZGC-xEiE}$iE#5*uU@&hxClGWGI>9I^aww5u%@9a zm-9^yZt(Z--!%($@WO(bRJ^@KgP9&ae7LYpfGuxn$r8+@lsjxAc-$OmQntIf`9<~5 z#KeT*gGYshg)ne4UtZuF@x`Klg)A*C_4TP8tSFQGS6a#=C6z&dx2U z=lm&ZV(CP+4*y2n?aHTV6rMO+Yd^-ijAVMPTRdhXNb^pqc&tc=D^d0O08Kw@020~s zR4l;2V7kfwY{52Y<%H|+-@g)mr+jQ|tK%hxti14?q8@*!)795q>jJm$QAYJV$GHCM z_Fy_Te2o-!(*rZ=Pw>gM4<_;d{rh)tcxY#9+dVG;Z(nSWkd&1C-+gDVWyZzb=e!z` zi1tO-IwTS)md+z8>dnbN`!Y+D6F#=XViAdxu1-ZmGd(epugUpdbu}vqV-&@VlEgGi zG+h0`!^4AIisWeew|O_Db?CC$UT9`;Fs5tSMTBmaV|~D$BbR;;63H?^2}$E;`@Q_L$y| zQ<K#X06M7{EiLtSohK7$WiZF4Ax>sGZ9-N+? zVaCur)U~8uqr1@Nr10IJ|D(I0L7{k#zPjY(~i~Mq&g7 zqMvYv-ZG1gdB;cdE-WkzpNfYy;6_CIO9zJ+75Wtw6}RKMN0WDY#}iao-@JPVKZ6aX z%f`-aR9l{v)ncK7f%P68-GMq>hgHTvM>jh>EX(&6rc*SAv0GMO|Fxij+0~V$lzZ(P z!sVZtib{9ElU$FT*&F#p@$=V*Yy_!zP11y&e*J3n({T35OU^KPk8-NEl+7LgRq zZDD0Sy@}7yDrJ&rA3BTBu_xRii#+v{dfp^3e)r7*%FkK1&7z{)^uzo2f^KVS#b3yn zQU18LRX&#&=f!$u?DCdEsoYmfyF$KqO_l%)ZjO|cnKEk1UMPjz@@R8xKHyUF?e)+V zMiNCuMW|+*qlMplc_bv#R=$KdbBfSK>)#_HCKf)#{b)Y@^(A&lc0mE|05$7nAglm* z9PfV{`P@I;%12?%eAW_SrX!?`x(OTTQWFtiTdZ3$-RLW9FNfJ9jcaRb`=hs)F#zo{ zLZuu{cZ=rg!h5+pU?`)aqGDt7yE~5Mv8m}d_l`0e(>!hpJWx3jM?we&7(LyaDK7Q&0yK!hC_}19*nG~#KJ*CF= zllI43Wz81@;=2U2LIkq0icyrZ0ZpkPs(HcF%I)EVzU%3pCIRQKgi;&rCU~ex5j`4| z?qZTsQWtZc^Zk8&-)}I|(WNCOjs@%u*;&PfmMNZ2?I|U&KW;O;k;C~hB?YxpzuVc> zHL~GeTjU>yHa9oNr@Y4`jr{Tcj=1NJQG?h0kXF94i9b`7vP$3ZCu+#ex{Nzh#93mx z;BJ$qwg|8-_m?{0rD^;x@KE*K`sD~}|5$VeVVzM%LPA1DhPu*AzoRidQ}5NptSqJ| zOn9Qc6oKsT&KiAbqHau{u!e{3mNgvwxLX$Z=FWE&4UNH`p19uCSTqB1nB0C3M`pub z8~%4fzFH$kXhYiCS;FPPce$lce0KnA|kAn#z?*?67?dAL7e6tB^@0dHTCNpo0l&)LU4#*ui+~u-+N~9L%!g+ z-e?=jW)u}KyGNIl-)Z^h&jgCYEiEkz3uaMs37QoC@FW_UQrj%toqipQp1+5fDHPAB zenB;6W@h$U;tn@gj$vT?^h`}nO;r_7r*aPG&Ye383gKq+60R$_7y2n`RCk?=7}V@jEriA#;ao-PQ+Sau?@#3w3NYH8r8xr-=CMEwuKh3P8xfzTadXlMd8?_s7d4@h53~4+4 zgfUORp`JEmTlGDOc}Fr_sM*fpqKm=TK8q*}VNi1XJ(8UA@_I0aC>>Floc9H4{qk)7 z@}G`EpwsH1X}w2Db+r%^Q(%V$sq;hjgmmcu z2x+m$ka~sZumfntJ?`y)2oA=GI*+@D7Y;L(Sv0UPwZefa;G}pX!?bXS5(()3+-4eZ zegrl5dyVl|o48vXi%%F^Oa6FS!~AJ9-Lkc_+nuemETLy6!Bs)3Ys}w~_<#lgc8Ok> z#>BwDo*NF6%XSD8j;0fp`*TJ}OdK(VTymH{UPku3%m7S^B1 z3Kn*DY^e7(_V#^)g8^sTHD_Hj%Lv5<2dN}G2M7AEnk#73p?Q3BLaRju_N!W>W@KYY zNq_Yj3`w@8il)ch;Nb3d&AgP)UmE~Wtj%`L|Nd@#`SPWqK_Y4}vV9T0h2TE%$!MWA zW&Mwjr6DgzKFP|7k&k?O%rd!8iuHt(LjLn6F~+rfTyNFb1$cSOzJC4tcVk3z+mo#c zwU+wn((=3bXO=pY-^r zdF%S2w?xK9ln&P`fL@OuKQ_^1`o7!~V?Ie`>KByr`*2V?M!GWS*nVcOm$#YZZmb}U z!vz`@n>5f04;x8%P+eVpSFdz(YrEEnX9wdyO-|m%zhrN6O#Sx5sC2OYhUZE(nq0!Z zC1jNHTkA{F;d;Qtloh~rL2{C8*%eJ1bL)XE1%n8|qR98IuGGZeTQTs{spJ%RKt8@$ z)x3c;Q2~DbgWMRYFOyOv@$(Nfxe{lp9qK){KguvUD-WB0~OElvuIATy?agy$`&)BWWeH*R2w zKXP{73%x;ZZ^NSa3yZBV-v${1uypGPpd319%vSHSzATy&U?f1^4R^70_1s}<_*X0R zS_16$@Q0O7v4imTJuYL+jX)V?H-$8^MAa9SQvmZ!H0zt2EKBYb>(!bN(Zm0LBD=a>#=NTwzwDLHq4Uv&ObS&8!wp8@Z! zQZC><0DD(3q%Ea0{|b;+`TP5S`oWhBfa3~p8u3hI$C!1#z4cvvwyCK}z{_V!aw3a-Q- z{^&lRMicggpfpkVKC8+)Bc7P9%3kK;J96^!I3+({{rmg!ozils6XCb;ljCEub${PL z;tmJtTPZD2hF+e$QhFO7PqxG`_&iOEHCw9?Q0La><_^@rp`oFvsX`sDx#Q3q?RchRPRh&6D=QmZj(-16 z$*XdJ93p{WF*yQnz~<;vRGJJMxLaj(S9TM2-aEI54LZ z1-zO;GYYdc%Vm2lzZ3rX^XGV}vE6Vh(O3U^2{}6#z(KNZ9j>mf-8zv%m3OA6r;Cb; zHn+CwzkO?H&kJRGt)34LUQ||AR$A)lZ@vMCPqg`$HzT9JmTG-TD^Ed8lk@B{tap{6_S@B#yUx~ z)2j0F;-vY|tHJY^ch{&iUXRn9D{3Kx_&=?UByL0W`T4%&SXG}gi2{3q@i+HKuRf?v zkA1b8OStN(tA z8ax~yL4s=D$|o$@@{6lu;!Erc^DZs9Wf?NwB566Tv6QBhHuAFtfqVLGa7 zYJ8Q|U(aQaYy>K2<>q2`_W@5Km)_~@?3}4_61Q=yk+sj_RLvbmqE@LiQrrfaq{HL@ zyX+(hg_uu5t&cn*&DJcK*n;&0#>JrRsqPepj3_@f!FQw-K|8>!xyLQQ4^k7gRgk?4 z<U{bWyD#I4@qjpuEhR*uuxdyMTr{F*YVUZCHODZs`Iw7{GJy9-Yb)uDf@APxrEE zkzO?K*6xH!;`9VKM@YVHUqqAXQFlbSTQIhUT|iu<&(hs9cRX zwA;VS_xKJ3Qq=qyUuhh$;PN|63pQjtfApvqfB@`LW~c4fz|^fXys@34k-!^ra&AXG z_aKLt=IC%4BS)3{9Bb770BAWb>Ri=~7)rdW$FBCFRTv>I`j+L@FRVFGq-^{5V zK&g#W(J?gKvg`kqMx3qrAvShsZ0tcSt0yBgRqAdRroGcWFA1Skhj}{91H;5#IwVl- znF>o~S6BYl&J9u%?cCwXsVVR6=?C3@95T1#D5$7BJv@9uiEk=C!B{tSbv=lt7dM*x z+mR>~;OB=fE^9K-)vb1#mlD{1-EX!0DtGqTL9tFzbTpBd`z~1mA1f=|bbaLt4zH~s zjleoAci*)XYbZ%l7pIoWI&`deP{x1umYqcgr7zLt=Is|yy%r;%xr@>NNgj`9RD6=H zIXO1AigjQ~Jw7(ZmfXusY>XQuLqbiBn-M(|&!{8TBG8(Xn``R3U3GS{8-Q9(j#fWC zL^xf3eK~>z+{q~BUXYa)sG8?0LPs)a$&Ko;*taWdJU*H*)qDC>^gUWEy%btW{uh^7 zN@)9Vzv}t*0;u~0FqYUM%p4r+ksKM5uxH$~$Rw5vc*Vs2bx@hkHu=}9=H)rDT(uY0T-V(ajOEWzM@P^uI-DK1ud1M2+GglvA=DqlVM)YQhnt?4ELX=&+( z@*3KB#&*6E-K~{So)~6nk+EG3QCd2rpVTGXgT15U#l_j~KCg&E731>^FP93!UA}9< zAtACa32U^@NE5mlt-nRg{VgcF89q?j3@KScyKvpOz zDcMQm>9?quT}R9qcRQVE`Dh?&+q(b0_qZsIe@0}ZFVSI#l`sFP9$(!9*oS*ZD%kNyUT~b zgJa1)8Ety}s()M-iM)V;oG3Gm$q$Qdrp#FJwLG3AQUY5t|sMNXkEFvmaoyC3O`~~IWKwGpEoQZPf6_ypoizj1J=vYV+{n*t32wnW1yIxYNrN)<)^B$o6&2hjvNXoUh)ZCX zew&5)u#ZTwyievloqjdE{1F9rcJyfr;N-6L|3Ro{Zq};dgb9ECq7TrVo{-Rn^fh8 z2RkZ7ZLKW~-@5SVrKzC=?2yx3av>?}d#B8yq&l$SPwBbHI58Q=#c35nVMA!p)` zhK2?Z$Lpy=TQt2=w)E!W>%9Y&v zfSLfF(j>yeh=)oOwEUQN?~LnQU#O`O?5~RkT%chdtWFBucn`X|x|&aZ`9AmAHKW!w zGV$0xmkk5M29WTxQe4BNoCbG^xd3EG;EwgpX$oLx=kN^#!-0n6&L%7fnp zSfNG=Kbxp%%HVp49`F|E!m6sO|I>6gqz|p?JEyDca6XcNe7U?&r;KEXNlr~oO-Xqe zt^g1Sq=)*sM?Q5=HXQN7zW5y3#v9jgQv3j&VdUpekRQDdRvs#|%7K1P(s%}>(bLm2 zL=GQNguRe26Jb9^t!M1uIt~`rhcCuVBm~pd*E4aPMO#&7Rk2tE1O$3}dxH#~3t28m zVGXkYYr66oLZ|Fsu(GiQ^+pggIw~P6^a=j1T)eWnL!qjqgsqaU^7ygjtIhY%8pZ55 z$mb&|c}?C1kiJvGB$FW{BLgi`{o+EvNvIu*{B}YQRFy{C_SEe}a3)fPofuHHuP7At z%1q8rnlI;4_Pf>DE&H1>i%2@?KV+$Um9+3-gmcAc;4@@ zB?uFSx%l&ELH{JX@z1g(|CN`M@CxEeyvLmLn{V=`WT7h5*#x~5Odx1yhg-7^-fmd~ zrofV{%I-b;vNEC}U1ctBZ)5X8#N~EG`?U_D$D(hGKea~?^WM30zmbcJ3r{5dikYp$qp0a>B>Y;JdHdAa19<~_lwG}t)t*FUHwSKR>u1FS#X z9EX@eFt=2PYn!(ZM-H?<%NR+I{Ut?OhHIy6Vq(+p(H0fd$w6M&SVYdZ=YZ_Ylcpyn zVOOhT$@25_YiVouck^Be!tMmQ)=j|MY#l=wh7*W^Fs6=?HGXWHEPEStOzS39{WZ$T~3W z+rTvxmh+2?do7SiU*9uuH(zZ>x zd|jlpv{6hdV2*{GgGzoouAq5kcRnVq)hy5`5`vqHo8R=B z@vXReLuEWaJMs1LaW-xd3JjOP4F(Cf^W`-?gOYI_;R+8~_-;$MPwh`?@Q+RRZ!F5u z_LJqUqus7n)iDX(#NV4zdi+c;uEAU97fhR+;ds#Kjh&(m_tr&D=VKAv!SlmuwRg798zHy_qvPhHS zI`$=$shzocYb9j)V>9aU`2`$_X18@B=RnLwX^%hpsSn)Dh>ON-XYDD-%LXo?386>rBW`p?|6eoqZ` z5kL>?esFNG?q_}TkUvm*3JW)8oSLsk{J@Os5Ph)xM;AaZt8m-h&34Pw=cJq?pTJ?WC0_;acNtq$(JFZs7UYSbst`lshUrqkLt-;s9x~aCc zg13Rx0sd|zIR}VpVncmDR$XZaI`Q!E;A6pR$OnyLMknLuU0nd;DQe@=h)%V`ulgc3 zOw2 z1J+ARk?)eH6u4-zvaMO{98$zqgXz7i10NsQLFtE{0;A}tZ~FFi?PWQn4@9tLFJMB}8DJbA{zD+_(TH%Ls6&UV+&JQE-SfI9t z7l9><{Vs;T9RSfib$X~~y}gy=r(NP*A8rc?2?+~N81z!qgu~v$S$J6WLm6ABwV;-r|BjL0lj^Tu?-_ps83NvywDJ^`;b+gDb;k}K;|h*J)%$E* zF9gk*n|pg8U7VE{OH3lQAKSPTHnmpacfB#FQ&xQ+uGwEJ=LK2qgF||47{=G|3uv;csPi_1uQfGbYrX^r0_f50vP6}< zpBWhpK{A1iy~095OTS`aY;3Cxz?vl^!)WlgvdC1*ea9e4!-+bl*8>~n)~#C*8i8gw z?s(25qWZsm9j|UwFJCqR(k^(w>U>O2 zJ{dQ30(u2pB6U*GxXDixS-n1l5l_WqL@nv_Rg)9U%QsK0F0YnrP7WBsfnSBwj{#P3 zu(A>`O3hk$X=rJY;o>xS?OR;hT!x2-|NZMuq1g3~_5|Ro;gRvqd^2%c9H1m|_usL_ zq0L%_z|pQ;ND2yy=OJQ%{_Tsr;+u#5+$_eB~35?=>?DD13!fiQ@|ZO{=-=qc$f48^-4c7>uU&CoR#j4Nqi8b z5bivcqF7=9AZZ1xVQR3}&cK7%n-RT!rvB&=?Qhq0orZwDg&@M9|DXVX{d^9iiL;bG z8zfcAEdA?cD%w%mndk(}$nBXLLt3gU3ASDWTj2Z>jJu%?cUob`uhes-6cku^q2mzT z867<(Ls)pM^38w**>dP|E8OqeETpKC-5DN}hP)cV5Xo%MB`;5}S5 zAIae?u+6?gVc01U6n! z<_z{<4t(b>u^sWBbgIbu`9s)L(5pb#2l+FkTGGbRQ3{E!4GHCD!1xMGt@83shebh%E|(WKxqm@D*T+8!S|U?-9#fm zAi)d6nC(~l1C5(fB*$sKNph(FE*BT5Tj~-QKEBqjqMwk1c4u*4;t%0|^cmen~ zPYYlvCMM=~hO=xSWKdu=6MYLP9NUB*41`o9=kMJ&Inns1E~7d*oSRHXYWXASQvN=$ zXtGABTDw7Cns(WamBk%`vJ9z!&DUwpw0$~u+ww+Zy8&cD=F}HCis_dCv9Y$_f(GI2 z0w8W0`xXc}SBgQu@H`}rNZQK-A^x`K9H$bRQ=rCvhFZ@|A6W%j4>HOG7Uo-}W!`4= z7cdJ!YZfo~UHOz_Rds0n_}r{g(BSCrjvRdmoa906SG!eB%8+ zhE-8+4{>#8Utb?Uq*=io)v}4^<7qp2USD-GFiDWBiFy}@nU^0Z%_8=QLL(vqz`Xx- z@qTA#M?Qk+YHfYZNM7y+C9eO-&sYZ8K%7Dj4HPsc=+7D89ed4#_fQ$^9Ia$zGz*q6 zG=K=^Pg`=e%olqR(g0z_G$bj)H{EDrEA7X>>YZ++RSWWsUr$} z9pGyC7>enU;2?oC02L+f#L#7I!eB?kL?0Hj^fAc!46bC@j`xEI?0`t4i6#A9`K>0l616LwfyYcw| zhqOwcJM+H&y>SS7l*f!RGvQ zjavSMbox5@XjQlMN_3kqFV5hpqMrsb84=|U|IR}A9@NJuK6ZoG0;0oyIiY)ZLr4Vz zV^UUq)S5cYAVt+)UDQ~=uB9_FPbh}S6wR=sNU>Z>CWX&+u9OLY^1u8~jFlr!!wp*!Sh}QSV`b$P z|6N^OHH&h+fdWasO3{q&4PeFCxj$d!m2o42yOx7$wUT4!&G_CjNcsQ|fDH+SfRl%( zw4i{A=$dnQe@xDApxZvazBAL)-6w-z#8LJ2_37H^w-TQoryc{^-f1V6#yYQNlAsZ! z>HpfEnE=wczKsoMOjmJfDSP2BvBAZNE%Zu{lX3)frHX9l*W`TAdz;a#yjK>L1E=G) zMMs!1cdhn+sV>iI8XE=_@FFhZ=|r+pJa^l|H31&VyMFuH3$8;9nBe3wqUy_<#~05>3bz&~g$mx<60};Z{89p$+qd5*RU5EM4Zil!DS8b zhFZ6V;SV-;?;3>6yHRNZQM^(Z&D*hQi;Uz?@1eF8g$JeFT(gf~@V-w>Yy_nXN{cIS z;pgvhTFv;p{!Le6qKpd;XJ&hF?Zbo) zyT?J!vAnz-GB9v$Zf?R?q?$a?IZ#$s&j0j@9U4wY$9?Lz-@b{Jlj`W{fvY`>xuJFd z)=a(UvI}>u(GFA$aE7lckk>3}xRV?c$p;~JXBu!7EGzU`l-|CMiHV7df*>iRbOYld zyN7kIPOAL;=tfxE>Adslp81eb4{8NIxwQX_GnS3uG~}7umiML5d-CfOOkw5b%|hFB ztAb!F#iyk;xNrRYHg8s8^|oEx=W(&ScmmqBZuV}}N;c=e2x&BEri&2WI^rMeJd?>E zIX^!)mP7J?%eK_^iTLfs9hh6g_Avq2ReyuO6);Qd=y-}r#veKo(gL&chJ z!B_oVOLdZh=30&yOSP3m7FXHTXs$2P(pA?=&?M(HSpZ z)KTJvS@b4xLtoXs7HrkL#nxQhy&DqGn9O(iZ=%`2z~C41%t0!X_}Th$QNdv0xz!!Q zCTtQ6cfh?M&@zT2S|4l}#xq(qFyXp_-9tTysccR!soJ55# zyjX=bN0SqDa!{1uf(Qwa2Vlg(hM#+{$ps!99E8f5LpC6dgz-IEJ74`~RLAW&PQL$L zpq;mugXs$rTnt&$p` z4rVu*k_(48f#fgry*HV~L&DyMXqcW}GH7R;oAD~FUTnC^tA`<*#?V&6&9w?CcpgN3 z`~{0yOk7<0?2mxWtvXx$Y889sgiNz~Pm?G|4#bjty}{p+}@NGBF)owJ?= zpsoP@!!hbU zX}MB$Mnr=ZpXH$F!AtP*@%KrXh$6^ASS29=8;S&L_$rI~wWQ>6o>uDy4c>2ev6wFT zG~dw(5^O55%{0dNd2R3&KO`r60{#R-rKGGJ)vnmkiU4Bzwx{w3 z;-P4W-((z5AxJR(8`m7`2z)XT=21g#MRaC`STwbQCSj&dz3X*RjoonQWb{Y z<6U7ig$|IfzMeu#%qaEsL)Ml08H~Y6p$a`M?Y^mgn&!b776t}J3orO7*P8`}giIjR zAeXI{D#Q($GuhbDQJpNwk4I?{d%6U27og}yl_e)8w)T&OfN|Z*3k7B&`EY&kgY=Dav=ldY9&8N1~p>xCYL3p0}oPY>qi5Mho_Fw5;e}~zAQ%cAV z>~NXFOUTgx%*2v~R_d}d3lScE%T5BmPmPWAj0Dzw)g2pL?<|=zpqn73(M?2fE}+}g zzyPnCk(?YTBu&&OBMl8=c$~n9!t>H;BT0H_k203F_V)L9cy^?-YHEZb{jZv5K@DOB zwsjvBCC68kKZa`Fm#V6pXcIWz0Lt;~EQFzseEi+q4#DSwMr|jS-UJLST^)xQ<^Q54 zc(JjGC0XemO;{%C866+oU!2NU5bh2RTtzI$+m_pWv!{3Ow(xxh&R17AwG`aKr-Cn0n-LN0dO*1(wB08 z`r!xNFDJN@>PUk2G!4a=R8wKBSasasKwRlcYXfa zG7zQKzZZVE<{y6}et!Kwa@-@#o%5jZTkkqSDga)e^%Mdlau>vJWb2oFh*8F5mc%{M z3eI&#Oj)D04_qFATCD%CpfF2`Rv)9gr1g6ApEhH zzgST{K4;w3zda(Kh2?PGTNZXd0LCAG%ZZN~Y8=eXb&CmzMiFAmD=XuqJvXu6N8%Da7AEN9ZpVE^6>{^gMFcguow&qCFqJxZG?`k~pK&4)2W~tsHrD^ z{**(%#+fSp>*KGjouGJUk*mjvQkOuMfsP1=FF?~Nvm?>@WXE{n4xG_oBB53<>?K4- z2}0ZwVoo8STC$y!{Bf`<{8>?^CMJ$Q0w8;7J?56Y8r!`~wn*ILB(Rq=$J*$R*%Od; z1NJ8=i;~Pmy(TmL?Q4=62f3Vh#Au`2sB7+G#&GCnLHbP&;1y^hp#u~e1QI6_J;Y(n z{rD8$j|t<@BA2b+khTOtSIT5_zJvhD%K>4-i09Rma16xCDO2$Rlz*J{OK<`GQ!Yyl zVx{trS%wyO#nR{BUV85Sf^3V--*j-9s7Ypl0m8!E6m&!U>NhuJB!IG=qUvoA%sVEPC8ASzdabW#JN1 zPE`in2Zl^cO~W!F^A3bafC#w3eAEOgFArKQ&*0OC8vV~9<_9uk$e}bFTZiW ztq8V8`ytde&#`~nB^WUA^HRx%uY?OwGcw479>41S=7t8kQC*yW(vEgscmLGlmfWtD=^sCSjEyCsqUti^1Lz5SQR(HDu60H&0V|ipI0sU=SQsOFQu%p*EvP#!DwN(*lQJ?g zQc+PcGL{Y7AlQKKp%z*(`KPZvJJ86G5WRn&bhfdoYV0o;iT$o0Aj+R3BbbIKaoHBO zwp_tXkgbAds_v^@whm}VAj%F<>^r60mk(+2!pJBovET3iA3&Z-K!3N~%T?z{Foo`# z^d;mrD=XIf`8XBU#KgpbS$F4))No8MLJ>Nm)P9c}DDLsS@^N0X2sfmjD4Nu3LHT3o z!2Q#HSkSPETYA7XrIYj#jOsY}6ba|FN`36=V+ShTEFpv0w?|7+TQi7?uKD%L#Ay|7 z>hN!sHRC~jdCn(%Pt%w{dCRkI8J=XA1;hkFLXVod`Z1Azf7pDRiF+l~o&uC_3j0gX z@+o_!ED$|jx43X$PT3y=?r03W(=b)zyfGrRWZ@0EA;U^j~wotLsnC#r@$l{{;&itxjVRbgfL5r7@C z*tYC{!q!ZP7wPZ-owdhtBcJVXDiAzV?F$YL4qvQG`kKCOl9{H?D*tZcH^Rya3bjI` zR2it0){+K)N|dRd9?m#HOc(6~+xMx`vM~8_*U8(l3bQJFKK^(VdBO^c1ULh5e6Onuw2Xj&OHhUZPE9xnJTSJ|#;o8a ziv$M=)IWD{be5JZB;2QkCgaDH^GCYCeSx$n97lwh45;_;OU*}!GTW83&rKJ+a1gPb z)zmL9no*iTmLy$W&&cS{0OJEeK|vlKA_;{QweSecZ#N5cxNOvHXsiTm3>Yk$KTARH zzMzOyfa7|g8OO!Nfj0pT4)pfo4t~O8jSWE8;G^H+;c0?^;H4`~*0+pD-5S}NI$Sp? zE)Y=Wq5R2^C~zf$PBzgm?Olm^iU|3nL0R)?x zp57!lAhyLPnK*X7LOieyG*4M@$)K~7k_IuUXlsvv?KyXe3HTDMyOR}Zo?~N0WTS~w zdy$8iRP!w(bqR68ZSC&vUbkSpwe*BBXl?f^wiP7wp`wC}CRDN+m!9r_{O6fb#NQX`^W?o& z!otEMHebPuNxSqCi9G~cJ2gH1JRpZm5mNR_F%13(D?I=t#dA*L6rXG|X-_{9N^}#v z1T1!?Qo%_Mt0TVxolUnv$@Sj&`E=Om3lJ6sRO^m|YKByZzyxM$zX=?d0`(q*hwVCx z`6uy=eiji*XP^PDudT7Ou@MR~!Ko=YHLF)@wC@5!1hEvOgco=KLHYepP5y(-YRK}> z3tS>1soSi*fE_=ZQVIACR_Gh+Eo0W`|7-IcbL9zdEyhq8P%}twybgv#j zFbjg6RG(NBTwMGN zq)-{BivBh0$|)GMQwV0-Ps)PA1>v@QNZb>&|G(0%`=9DP{v#CGDKk`(B#}*-iDVpm z6A9UyjLan6LMVIWmPl8&29gw&5RpAPu3TG@ll6U`zTf}g+Yj}4l(RnP{dtY&3MWdx zO8_vRfB=PR5*iA4OD!k2rb%C*6$b2Zomp48u%46b{>Vyz=#SXS3dXXMjO0P&jZXy$ z1F!v$!MqK%0&!F)khs7I;lzXK%PD80H3_N=GLisxvF3nj#|3fg=l;d{`4l=_*I@51 zg&;$|sA3*>jhUsT>yPJ47T|)CwWxa!#Mwjo0-}?wJ{bR5QdBers}MHz*Xlo8Q|yYm zmq;659-E=CLY>wCGiRL8(5FM&XeAt?<{+^N=H|iwe&kA8+^L;osj&rcv?w=3L`dju z+!6AI2_zaa>-1rZqV98oY<7e#sMO%&h+KRYIL9qmSxw&vxb|4!m^%Zgz#4Z8U*8JG zU$AHnHAY0(*yNZH-DO z5f)F8mX?0C5hYN(2vPNpy#bwTyy#kR@Rhe_4a5uSPeCSPxedbo_QN?-(D= z+b}RN&{y94sluB2=F#KFinuT^6RQ2=%DJWi8TFXl(ity13yTcH;@DClFR^j1gMgwo z__(-8AVS`@wDd0q!cQ<7{%e13<(EkrMcO1Qc`~Bg#5`@KBr@v(v`x0N7L;7SaH5hrP!DcvJBjc zuXrwLmM@%zlsC4`5hj)=menFsQay2H2G-UaP(Y0j5(%vU(=|Z>r2Up$S%vWOAzAVIhMq@~p^3=~VCLIgl5rb{ zA+`pj|MKeQbC5j?dS{Bd!R{^jnJq+KHU=QDfaU{k@c6wCQ3KU3UH4&$LG^{~J>z!@ zm|^_m2DgrLaDNlqpU9Ujvo&|s!) z_0rZ@XkJQDD1^L%&F;WAAg_jNrxs01UQ4OcT+~ZsYHDoL1sL4$v~~W|Y!{Tg z??JkBrhovC^-DDw3Spyw*{>2w%5GBJWi~HN4Gp93e~0_~Wf}>l%vW@mf+FdLp4zJe zxg>pQaPHu9KBlC1wGopXj0}tlrBzkrc@K7FKmVhEla+Zs%M97gTJ`+;8FE^VB+E#k z+r1l-VA!Buz8vyjL}3MYbp3Y*Q^P?vg~ z71QpdsQYaOAjWKE2ie4sl($!v1@peSxl6Ns!MmiqHb*=y8OMjZsKVT)2o5KFn;1s? zE?s&cSwunf4W``Q>G2^0Bor^NXqvVz&swCkv&0XMM|7X;QkiJ3H#eoMX2)TWfV^p8 z_(k7Dp*-q@v2hR9KVLsT4>{2)u20@;1;PrLanSCeC4l>)8oGMn1aNJB=%*JVn=Z&f z2aKTsUDNu$Bh}VS+Ji=~2Dm z*aNrI{6hycFJy4Fp2OM&1X$L=4u*C*b^3hdud?O5rp9{X3>4LT+#Bje-BF#8Up+La zkNDl4w`g6A+Iga3jVg$eDstQMV-VGe=T8sShr^=U+C!9VRw;_CDZn)aA9g}S#1f)s zn4IJ6p`@Wbbx->Ne3lA+|9*t7uShqmCiIu5rsDSg^JHs4M~39iFssU(Qiw)j{>B&E zh^855KR;#yY#k*7@Oo}*MECRXhr2O8r?xx&AZ=icf%6)O8rX%NpV|B$Uuwwju=RJL z3v{;3Q5g)no-_rV7hAbbwwwf%qkoO#DuIm7M6LV1G6VBf0Q}kdhqv(*P-@X?pCEw@ z`08GB*}d^wAZ4W@^Ut%w330KpWMi9k*I?9uFA5{?y+u&tc`_aYDCgDq5HE9BSr+ys zzG%8>OIXitcN(0nks3TPTOEFZGZ4ybjLw#Th|wrv!qK!6z8$cJVjeG0&d@Agd2Ldy zdi19qgs3va{dI}NS~-XsbMgM5p2m3rpBS;fPG0o4Vv}HS$N_Qh3-&)gSCkES(L-b9 zEsN>_*Bi6Yc7Er~%0mN|+eU4rA+fKvf_}mY+^GsaX{%tJiH%3yf+Q9-v!3_OM0bcjayyr8TfMMLG-O>=o2PP)Ia^ut?Agp) zj^*a~27;}Vj=Y8*ik3NV4~6SW-NwbbT&zl6r}w)@Zu9xPzjZVGf#JEADbe$B51SnE z4VsCh0ZMjyCJYrGWq8G@@?EwO?)QuJb$j>& znWP$;bxAUqfsrTPiVDb9KsIN#IKUqXe(-H&x_)6795)uCcSB7jPIBLx_e&!7gl(zv z^JKO2Rh=)ZUnWPcWGt=eBQm9{YdrU#1*m_L@&jjjkH3mY){?@#zP1+JE%_2yHLAS% ztl-qtRIOv%9ctH8^mKIhTmtQVr;9_{^%KGP+3@5xD6}88j1Am%H<~z=mhyu zj%l)y5ov;cSzm2cRZm}^tdtbP`>?T-*q4JL6>^rq5I%AC)*$p%cwjh;l>)auAJ0BC zKbG6p-ad?_0HajTmoE>35j$ar{Lf^3qss}Y10?k zKQ3}UG%QA@1+IyV*9f+p8K&jt7FXqXnId>nA~qy!^}yyvIZvC)H1=0>#utwy_(RU@m4RpXKO)jzAd?U~etZ*lp5(iC z|JC+NemoM4iViq>9rK^4LLM-^H0^+GM?>U;aB)qmoe+>aNE!Mv@#j z0lvB7%}cM8rwqUUg~ie50Uu^E_}ST0)6;ipzhwL`IOy4cmlStsXegcV+iy!KV&AA9 z4L|a)JxaUzS|zpr*z*z9X|6F-e}zrvh_xNpn=vMS3>poe(#dKGdKs=Gnqz|GiMzR7GZPk74+x)h@O_DKy1ZRG};R6c!sZas`srFeLzJQ$%7IdNiKR zXMjD!bautzUlj8xKnWk(+8}cXQ;NWkei|C`cu`rL(s4TKImxKj<>a%yR6BO)_T5(z z2!_CvJkSkVGF#o;GT5|@!_A1!PhP7ZHq=8T^_*1P0KeaMtZ?SK@>QT@_l0x)COnY| z;TiGH(cOI(SjmU?@5z}(?*gc0S5~j&5jp6uVU0lm)l7sSQ%JpKDdij!@-6rb=;&AC z1At2o`SIVneVcYmX1C@}s|ret*1yz6A?R>B9#j4A^Zd9O=qgf%4z)n}Pegxw(0+fri2I(deGb{Cs?T zJUoxPr$JT6>n>rkt+V2O)O2An-+5euma6Dc>%Hk9LnWnWcGD5pAZ!l9GSXurX013thM7~jU>(!oy9r5UM@l0L(KAO zKoY`A$Z4OR*zTm999`a+d}9&xIB&`vf2bD2)X2yP znb%Lu?wVO~I_;dD2;%fyiV*9c1PY%?X3)bhN;|xX2PVbikfBo_?wPyOLrDJ0Dce8u zlHr*%)IK-QR9l|zq)oU8bV|(YFbrEuhr&U)HSOewuK+5Bx+_JJ09~~N2e5I#FQK%( z;aAx*=euu3gQnEw5y1XLjNYVwB%p=J=|FWvjNO8@i%Ua{~!sP z%_1BX@daWHku{mfST#D60n+o;4CR4N{xO|2HBe zW+Hm*$6)VFNkKtDMTIY3nEK*AF>7->yF|D6z}Yrg!V57nHYD$})`p6Q@p!tX|L#1` zxaP+&>#dZjMw_Ixw7tB%I^rs2eas@oTG8!JesbCPI7z&{gM*I=!YU6AiKNjJ>Ei4? zC;mfacbCcfFo~dq?jsHyY^bM#f`TmRmKZvqh?P2iZk~{2uS7y*gV!PKd5D|wQfD%V zq4_dP=S^C^1gXSm`>r(_xVx^YQJ%hnI4~&9Z?=4%_80rP8kKn-Sr#1~%t0y&6QXBD z(roKP($;nX{_Mw><{QoDD8;=#NXp%nctn|{CUX0>r_ilD5oYRV)>pxpYr6HE;zMd0 zLRNqQOL5~KGik)eBPYg`3Cxj`AwTgcLZ`0B=-0KB2Cq*5QNtp1XfZFQ^(H)`bSFoz zx9Z1js|T$if$Wl_BTFL6^wM2*J_MC7R2q&{a48mM>V2guRP%$tvr_eQAE(s870r5JTj}@zmGy0^O(N(9JZdt zUlqH(<_3qhfYQP!_d|2`ZdKE4f z=*H8?l)$f@ zN8oRfA21;SRkFHQ7vt}W^ql<;oU2gaB03MrULYUX5E%j#3U9mid!&g-8ru!W_=bMy z;#l7eg4~A2p3e7k26>(LDdVAyk$4jsQE$tf`Oada54x1X`}eVe9w6Doq^GAt!s{{G zkdtp*V_SysN149Qw{P4yr>lFI4`GeprJa>?sZIu(!iv)#&>+RlSpF3#DP9*YfDkxU z1sivFe*L=E*SJM~7tE5}x4?$WI8xpz{`>_4yR9u#|MxI>&aTTvAwIBT{HuxBJ-k6? zOG(@-@I#E`6b98>&mGA-iP;Afy-D&@C`#eOelz$Ud#?bq%{3@y_83ViD1;DN+GnEz z0|JtR_J)Q;Nc9Bu(sxd3ouzzgUaFe-3mUX>BO9M#MgTtm;@@0^Pf+Ww7T8zd^pMI1 z39+mcPonoS((d5eL%!m53^y&Gz~sWCgs^EgU~` z$`R0s%F2|nb3h$%y;w*81G=iB>~B5Yx^=eHt9dpKFu&JMKqRQx+QBy52Bx5fa@ z#_9#TXZXaM8;GT(D>r`$qmaH5iMm-F^Icb$L{fmPOT4+W^AvE8oXUnAZ|8S&C-uH^ zm03Si8{*B#|73<77~p1lMJUH9`brj+PK-Xs1GTOuQX^6UZVe`0xkW5@+2>)@+T47O zCbL6&yvYYZ6>~|(^e}1&61xQWB*7N|C+IeN#YKQ%rr`ndpuR&?3kPpWxOxoELL#g% z$W4Tjd|);JSvS4Cahg6+-%d|h0jxAJGgI$<#@u>}wfk=!WG#~Ilx7jIaX`I;$Ehuc zG6Q{2`J-DAySYuHhSU&vGW4-f1K}Gp4XNkjTX=RrFI!Hv^yam=I8Y1!t^5Y55PfmO z=0zZM@3*)l5p%^Oz_JVWt>u41(Ma;ON#7>Man2zKtjVgI!#?@z{H!oH`3f+5 zs;jHp+Kyn>ZFvTzHCJ>^og{_bmP z5}U)bM@~k*7@XjY=4kiS*b>^@)_8a)v4zdX=>*%x<&XlCZ#%>7qCYfs09LG2umhe0 z3|1Lc*{j#$z*es?mHp-SL|+obbx7x2@{S}!p1Q$f2K*!|d4*kMksEYibwNVP$`QyU z3v8Q>b8RdW5EY%h#$k)IyuLaIy_k)K1y`IsyjD?et?l+w+<5y5_K?!_BjJLKXCbNK z_3jg(dYamzT$PV*%y~s1oMvt59siOU^hN!{!?!rRc#L-h#SVD+{C%kBs^b_{Zg0sZ zQF`@2$>!P#?FT2t#XEaiQnIoXVY`G!fu&@Vu*@8dTat-KW)@V3lU_d3RKT`fagcQ9 zk3!@S%pM5a$?*Gyf5o^1QQ0*k>Nb69k+k2yHNuf!xG!ZJKt5zQ{re~`uD6Z8R}D;2 zD{z6&4{1Z`DMepg8#h-6r*cC-?Jk*DT~=g4E>!A=$>5;|4VUTxyc~Rtgl}{T8?B@7 z=hyEU7P~_=?&fw#uLWOJg0)zlyq}Quc+$q*rf*B8khKDIIT>RjVuG9&(1l2@qJ8q4 z%HA%LY7YL_SG8lRippLUkK))6>RiktmxAssc%@gbyTWt$6CvnX%R1Fq}q z@4x&||FTpj9)}s5{}UTh-(DfbQ!ht>P{JH%k3$L24_B^l(X3J%3UXs4T6Cipd@lUM@HZe3_oQ-@h4ad^SqfE z_JxCo4n6T5Luji5uvT&Zop(n2k>lv)3Qk{M-YBF^&;)^& z2RwmhJNTRq7DDX@(C?yRfYt){iB~}zAchBn`hoJnJ4dB$!2^bUjJn`6h$qfzYiB}r zj$H+S^5TE~fDfSI>vw0mj(o0kMBKJP)2g?n03*r|9@zO1(e(I>6Hhl79|HUFW5*6% z=}1UOKwn3*PSzTWMnW+kyc-zJ%+sjY`T5bSM(uJ;A=gQJ|1%z1Qna6^9Qf@|dfj3k zSZ~YbCKoAK{QfUu+46}gqC~3k$N96A#bsrX#~;#1ilw=wWhUrtgwAqc#xR@S0N<8k zau3>)yi-^1{2leA%LVM;T3CYx*PZRkc>?<)xm+5HR5yNOX%+{EcqbEAr$yJb?apCb z5(K&mDo2EeZvt5_{rw*H9INO4M+KGf)Z;MT;a(L`&Q&YG)05XN1Zc;{b3O``{xk)# z|3(X>ulPSjrcM?JbF;FlZv8+WRRd@#)13XO_wHFu&RyrE&u{KHhZxXukuOI?MIrud zbv(Izj~uPY?J39Z9~88cmi7)m@&<5aOr~W+>Kh(Bp!sK?*44Z?jhH-6wSvw9B8D&1 zWPX<|tYM3n)t1#k=YwEjT1l}wMv6*f<>1(vCsajF>NYV+t4=$@dz|DUu#Ii(iSHg2 zm1T7S2ph^>PhD?DtZpyueoLC9$X8C4=kB(vvk;+{=zXZHqEgNOS^>-yvE;wsCkSrd+t2?#?0eZEKtMpa z`TMiy_fuCM^BW}s&2ILB-YI+(9A$;fulo`wW(w;!*ZbyN z{n=O@^4kk>k`eU}N05EF=QKoNCmbJ1TcOSsCXISEmv*W=mX1(H#{GepxIw7WY88iS zJ_WX?t3$f0pTdI7=jv9I{RNf4Uh??P6c&b4G?aUV$Ce}WTk7?VceP$RtcDhl8V0leqptk zPg^2Jnrrc)G~;LOSOe;~BhUy9ezoi@WTC1Th_7%bjHei9o;_r&I?=)$D|(BGGpo=> z{cFBa4uAqb7Nx|#FTCb>gOv=M{)&}d;3jDFn~o2@<| zW-q7m$qHS6m7{toHavF`^P6+Zl5tigoY6A&XBI$EK`Xga`H>gLM1q`Gw>RB#W9F{q z&~nAwVzgct=;M&KM_0kOj%Mox@+_$kC=57tI*qddo{>>Wp$qa=!{n<503SK&W`#{P zvcAG?08rFeNQfk9(2*|7}T>gU3~vDiyT{;qCfswi?& z<51Ay&$;T5;7-nv8_pQj_;-#;o^2?#s@CQ z|F9Y3Rk=|kGy|Rx?E@E4nthR3fGcJ%$<8LX*<_ zBr)yAz3?@Ho%cXj&S*ZzThhEIVeH$|UX~GOV=k|RGBurG%oU8snvl2?m)}h6XqY3|i+zj)IMZol@MmXQvc>RE(J7OWbp;RovAwt!Bo9 zBIxV9BijFP=y0e3sN zbh=@1iTa@{t6#)g;L3lT(7(Z{ioR^=J{%KXseIJd%HBRn#;Wrp@v<;aQwvw1Zmhb2 zpXw3}6SMIQb-%yHDagc>9To}Duw4oG0;iL*eANt5rskv=UDtzLw;4jjCGRkAVd$Bs z!20Wa&j3TM3bSZ^sHr};tKvZCCY8GSw|D2?G0`0Wry8HHmlSbK-Yn-G(y?6=l}DZp z5lp=%OX93cGJdb?;4ufG)`7Bkgz1&__jW`hPG1)=MK!}Xzju;0LqGjb@hO>siO(r5 zg{mV}IC+)n9u6#It0kl}#nKB7!_=6P9O`|zx!NKLj&K88yZ4@RMX{-X4DBjpk!}yw zylZI{2Y^|E>(>?rvpK6zVF{VUAwxgk!PNGy4JgvqP4ly_h6$?Y3IBu*Cy~C>No8`7 z#$~nW%YXQ52Zdly(o_3M*Pl+wLBB4y$q^Lqp>RZ9QNsWf4PxC0|MSq70qYazL(T1i zK8Bp27`WPL}?sDnF zefwxPQ4MjkVTw3v!#3`(l?qL&hmTM0!G=`=Hy7nsT3VwwfM*56WmZY(FjM!n$_e)f zcAlWya5|zL-cqGQYW&03wqKB^!$Vm#;d1U|{~k~OX!o^8qhnC(;qvf%IkJ6NQBkQ$~xbcQZR@y;<`XXnh=MT(d8@27tL zJ&V*c{U-Gl(Ja6r_#rI^X-SMXgX#ClkS|X&S^8MHro2BIo|gi~Sbjv=Ubvlop9+3G zquoe_n<+OIefGLBMW0epWuFG-%SXqM5~AR~~I$aHOR)k0uF z;mQ<~cxQ8>tUX@Zcz9!)rkrm*--tp*9v;<99A>3(EHs3x^oy z;@ebPrr0X(e5!Y#PZ{5cWa0OY-^#PY*sGtV#9Dpdsu(#+NSdJX7&G%l_qS~aV2b)6 zL5W@B|9lFR;A<{R9U{co@5)CHpI7TD*eN;sS`(E(6)!oB1Iw{|>|61D34wx~qZjPi zRM_eE8^tkkeQWfIey~)z*iPF#+rD6l4R|m}iYt*n|FVLEGOzmhVxEwc-%;YFU}8@C z953Ch(+VRyOQH1;LCg;jaqbmtN!}t2BuOQ@0XY6 zbLPPZNVCz$7PHB@TYVZ&itt;An=BIDXDnF)y(rnL*D5~toyWEy(Q#YSsX(yo;QQ{X z*0ooR%KB^1MVfj)d>!jJd-XHOWrecPdj>Fi{nYslvz9Ujm8XSYH%ZLe_%>o}BqMQO z=7%oJ0C?*0Ba2_4qs{zd2puYNl^~~Y7SzBEniP!#oGSkUQ85dM8HAq%*;*`L`DwZJ zj@C-pGewQd7qH*V`%OHD$7d{?*->Ft9$pyP2+D9b`!y4C7#O%vN4>d5AMCQe(^ElK zUVpI?1k6Lr_#U zp+96>51MpLf-g?Gh;)wzr*p8ry8qpdySG#eQek%Px$vEqiukm&pP_mNVA)B~O^dk= zuB^y6-a_x$QLQ}w2K8)CV=!$KrhRgtw+NZ=%xuc#*p8T@10@p?KgfjVt zQ@(A{d-;pm7nYvH-xXk(4{l@S2;Z9Tq}4>R!}st(qtZJd3RZi}&hvH~mZAtA;BTb# znj;?`0+iUYFI5btErMGSrcwNYdF>ad2 zy^ZXfeS)PH=A2Fm-Dl#rgs(lW+HCxA&}eFB_Kbxr+=U!W2i zIyj(s%Z^}^h;!S>f|VDe9sKToTNI|@l&MK(2`g|s<6=4Nm0(Ni3&OKkb94Qv<*5icIArvDJR{3CR;7t+{}B} z$B&g~_0ifuWa!uWpoJ8z2-%0&^Qth53=h1XlS`;CqVj;HoD^33n3@ZjSyQ zt8Y_kV^U5dO>`5zDX1}-aIk+}uEtZ-?J7QV>#&wvnklyr?K)FD(T#hn>u3{n5+4%M ziwrtpuuAuiR4wXMpxQT*9*xdVN96DxxNg4cwxEx0fO0~LS5Cj*zeDycTYxmVq@q#}xGLZRQz!#|*(~UM~Hz9NNjV9L{%C{7|wPimG zfnDNYA$B%QGHmch_j{WVY#BEU`(QdmkAC-1uJq31|P}B=n;;!k;yY zou|K@9Jl|-(*KXzktLd&!5qv$5${N~FF=YV-O<;Pfnj4m_n$;o1_ow^ z0G|-o{|pTO6B7Q{*YDr|_5b|&2M>Ndbm;4mBVSLR{Br8lmosO+T)Xz=)~zph?tH#~ z|MTO=pPxMW{OsB17cV})e*FmuzI^%g?c1mS|AEGgg3%BddLgj%Y|nI{t2qliB8wRq z_zr)EGo$gaPF3NIoqTAi1ewUz{vw!~2&r%HbT=JcHhdFaX<;|N<)E+tCgA#mH!SsnF4fE@HN{ei|jML zk>5EUtuZuDy{p`@`PiK)rTq%$q(&u2L?B$5zWjN&P2~4_P|ROBU0NCsO+d@#|Cdgb zuTLsE1x(2+*Na0KR7}!0u0QQN!73r63`}dR+e+*I{*#~n^Iy1IJJ2ODjiqz{!p9(=uT7Rbc7?^{78{@7LjaOwZUK>h1~d&RuI zcc=31^+!?PpY40SPwM(E^YYm5Uw2&FyYu<3{3Bc6ot3>_tG%u?|J_2p`hWjkF9yl9 z@2dY02-28+w;ZI=@AW=$pvLc!-|vE?Pw#qv9H`Ou+Fu2b#trY>3)fZ`x0l*et6Ty` z95_Yojrg8aw;Nan-rlwU@2AhHb%{k?z@kPp;`-kzMYZM7IJOrAmOBGeR-#5Z4GZN_ ni)dNpK|Z*T9vyZI}EajD@>P?N>e)z4*}Q$iB}M@Brn literal 0 HcmV?d00001 diff --git a/org.tizen.sampledescriptions/html/images/animation_scale_down.png b/org.tizen.sampledescriptions/html/images/animation_scale_down.png new file mode 100644 index 0000000000000000000000000000000000000000..dee5ef8cf9dea49909b62a4f643501aed8a0fccc GIT binary patch literal 3479 zcmeAS@N?(olHy`uVBq!ia0y~yU_1@P{v6Ce5z)V*yMYu-x}&cn1H;CC?mvmF3=GT+ z0X`wFRaHO#Gcf#5Ncdl0zkmPN|MTY`Joxp{p|3}dd_8&c%jwf!&Ybyj?b??+cRs&( z@%i=ZPeAbH%cpPOKK=g>)He!7Ltto!fRbX73eX3f1s;*b3=DjSK$uZf!>a)(C{f}X zQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXWa8_dH@3h7pJF-V@O5Z+nWbBsfL%j2DYSf zHX5q_`Tw8GjCse>UF$dcg}B+Aw^%%RZqMBr+MA~CKmB9A^Zqmr!Gu{e1sI)JW~8aP zGzc&*o5?At;L?zp=EO28H5wYDX@iLDAoKfm`QrzMicCJn!jCRYxBq{={PT1DJ~<(! z1183be6>HH9-qH&vV8r{=pKlsP3XKd*l+{~mk~WM0jizYszBYWt^mKM5P1J$}z0 zqGKaLC7{$o|41bxN$vadarylHljr}d*nR|@Qr|<8;w%0CfA9V|dNLSXeH>Z2zs}un z9wgN>wQztEF#|YLC^>X60Fx|-060U8N{xobXxgAbcKA{M{(Ag>Hkrf1OCGw`Yyq{0 NJzf1=);T3K0RUac>jwY; literal 0 HcmV?d00001 diff --git a/org.tizen.sampledescriptions/html/images/animation_view_contents_wire_tree.png b/org.tizen.sampledescriptions/html/images/animation_view_contents_wire_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..c787c23af6925d2565840f7d3747a50212f6da60 GIT binary patch literal 6644 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 literal 0 HcmV?d00001 diff --git a/org.tizen.sampledescriptions/html/images/appcalleecaller_mw.png b/org.tizen.sampledescriptions/html/images/appcalleecaller_mw.png new file mode 100644 index 0000000000000000000000000000000000000000..3ebc9a6fcacb3faea0eccedf16ffc5d1060d580c GIT binary patch literal 104059 zcmY(qWmFtp6eZdO2ofx~ySuwP!QI{6U4y#^Ynf+{XW$R!G0QjuusatEPA7cwWY~6~> zM~9@#JF8*Ald6fwgbF^{Pj=R=+MZ{9<%6o zL`oL`8ho<_nfn_B6yPyPP>_MVAFdYw<+Jbw9?-7{>}Ms6`anGq&o+Px35V+UNa2-- z55WY8`X!2&0Ys&tLh`bx)d7Vt0Fy~`vt57+6TpNf_+SALlJ}VH4+YRqC&Pj&OaYK$ zSVl_%YyH@~b=u4sJL!4C;s%R^q@OWMO#^t}Ukt#~=SXp+k?ktBUTLD47#~!(K`rBc4h(Of~;u@pqf?1zLEU3(#OE4CSA~RAFcieJ@Xg zrsL87_W=O7?s6Vjq=knLu?gFm_5QdNd6Oxm0)$w}rMdzDMv|1w8WYVTqwoNLWZ`%E z1~G!$0bIuZ&x8Z88v|cnO}N9wDTjWEqlqJ0gb=!!(A9*B(?(7=5Yd~kEQ%6w_N&@N zrn#Un|I%zn5pqF&Hige0pzZ#S03$XAk6}u-9t~v{t3#0pkCPqoNH!n~gC0joIv$Ow zN-m$mCCjE3t3j$MOLQ&d_K7dbK)N$UU<|+>`Wo3S!5~HmBN4RhtLk_IWBZK0Nyo?BG=97)&HAvMX z_zhY$&|NWi=Ch67FzDZ<`VqKcyv0dPiN$1f6m*nUWh+PtDLKEcBk&+VhpYagAy2E2 zZ=vq|`ZR=V#?BU{Bg;s!jGlzSg61DBF~mcO9wWg{(~!!yptNmF=Hi= zQx=~hZG7Frz6p*mospDbEMhNjZ*Y%ek6@4NS|2gbOw{$~qxxT3wF$d#c>8Gkoco_G zv)IKnOLEjUD~dF}awX}B*A{`)>Q$pEFgQJP_@=|K<>X6ii+?QO+u+zd*w!C;bbj6Z zL9CSdTYG-;Smr462>R9=2{{rgY&6=M77vIEhii@Jja#3kP=>bVb9AnjGr8l?aO&)tXg# zDyQlM>eiJ46;V~z70wzWKZA7NVm|8*Dhw)1{8TM$G~VqVA^l>G*X+YcW{+GQ>G_>& zh`MolEx?PuE9;G@D^94YvWQQD;~R%|v)WC%l?dE!mg{4#hZ4deZF%NRQ0x}wCEZ^- zf-+8p4mL{z`>Kr044rD(YSn6)(;n`+^YXm19;q(fm+vTIqu*!@Xk@IDW?=IU)z{QF z%Mr`56@~ck>X@tSO9_g)B)$8b$}h6=dyPW!6`aere0vU`2?JT)G~OJa%kN~6bUrsD zQGNy^&EN_SbGbST60wYeuT&)r2Sp`HO@EkX?u4gw%n6n(Nhe67#@mh<>{9MJjyR5# zP=BT-qn1}ZQM|}eQ|u_CD-%!)a?|Z$ERDWqp4@uEM1#dOSRlp+g1LxyhABXsXBkzda&UNG!Ck4!)w@I z{S2-HIf4RBt<7+(+lK1~FVcF_0y_f}-h|+gqt;NWiS&qq+*{l*`L+1Ba%OTbL;{Cz zGmcrTb!O3KS2=b;7?X5Ewt4En1sQ7`>kjv@o9MV0`Orz`Okrjq!N}%V&)zqWJ6FRU zzxlg7U^DR7c?G!sg8RbuB5I>xinD+&UzfxE_u!bsAJzRikuL>5SnaoKf|MnczgxE+ zQm~k_q-fW!G_;j^S3Q_s;t1ahyA|vT?+Ws4v2W=bPx17(jkQfG4?5=?M{G+3Q+!x_ z_!5 zdpOLRNtv-liBJhTTK)}ZdSDti7=%O<5fz~wDU#?Ct%Ee;?XZprPFI>fJC%Dej$=N9~!fd5GwWO1$Bj+Gb$j3}y$L-|MyZw586ZJRm@0VSF zoGg|xLl@tonP0aN<=BRWtRzOzR1oG!&=XjAivJ3I|u!W_jB)f`N zktwEutWT^Dth^>`EF+rUhn?cuScreXjoUXT*TCvBA%euqjx_XWSLorItSz;z`le$h z_%f>V8K%#tnkT@?Jh_(zALr=5(05WnrIGU5Ohh^dJvDZGO@gkzV8mT4ScXWg&ozSW zu^@WKCFSaK?aaEM9%?^D`|m~r6QKjGQ1+)^G!geB0#7$q&JC4ySai2rO`jw42!yd> zV(T!$IGI?%tF#+F`vg(W6Mfkm=`EGjLmd{gR`XWJ2U|?}`Y0JynFpCDPRMKPEy&wi zE$4UlQec+MXIoW?Dc*B^(i+y#Mu_dVy? z5?H_c;Z1nF7pw`TskmgdWcecZ()=J&7gKfonDOFhSgYjddOiw05B&y5fdX3TSX?5S z7t&BmT4p$vK^Z0Keb2k}WAQFQfUx~QjLg6874KiO1GhlpMPyCH zVke$+og)oY&w0@|)9+NC5}sQ=+46gp0h6HSatiADe!I~aw_QIDT}ZROo{i7@krx=m z{Ip>LE(ZA@n$K+8p*ml7qIvAhOMS#03Umw17+kk|TsMLDF|^yYbL#nx9Zx(?1mDvZ zlt;UAyK?F}4D35D{CZmbtsagE@_A-9Z+m>Nus@cU^7(`|dv5%kABG?9wy`&Z+-Tlr zCcD6EZIg?-U}cNrv0#aYP?hbUH+1WmzMSc1D$pA zYRK0G>V|*JA*{lNA6sF#!Phvj6}b=TzfiX#iAQnVh7U zhR^z0o@Xx6(%NXBwN+iM70;T(#%7Ed{KbVzVY~Xe8q_y=Te|cNwcXOvVR>6uZ}|pF z$>=T`U=3y0+GdS0knfUYc515&yGSq8t%fp9>;-LM5_D1n1m+luBWTV%|^atDg;| z3(1F-ix_!j?W4&Xcq<`=KRUPP&=Ms2f5GRd)h%1vd=u?=czAGT**OEmCcZ4p6>?3m zs+=1ymWJtfMF%`LJw;4d{fZpg8na5}{**!ubbO}HccAO)bqK0#s`O%8^kxBerDGTi z_bFZ5(zihKXV?gsgkncphTQMpoKhELsQInLHS34IZXhYBt9CTY?djRG|AO+v+A|Tz zDRvZ)qa=F1o1!7)q^ozbur^$%lYeA779^5qwNTMc#N94%`E4;WU(2Wi!U|=Ip$YNg zT+0?i$rVg?`R#D^5>KUHQDrMWn&!bYwR0o~eKbb}gtedW`B+G>DOHL5#g44R=ZBf+ zP64BUkznPni%h~oUtGx+*`#pYG?*LkihEGYXnGgv7GJnjjPyNZfUo>)^jZ;%(NI0I zY0CLQ(oP_`MWDBzRRyZ~Tu3i18;_i@WmT7CI1zl#q&AL{pRz=>34r`Cjr z0DH8?KrlLo=~z#e?QsOANK*M-Y-SD3<*91S&2?lGIuO?B_89aA52t9wygBh}e;DmV zhr3(>UzFBn$Fu0O74zCRPe%;;TI0N*5<%ri)X0|uXZyp8OEQh0sA-6}QknVibjrw@ zI%*^F;^LyYM^rQ9%FkG7NO*F58RT`F8;RChkY@OO2^qLG8ywELjkz7+(7mF7^0i20 z80TYFkqkgCqOmfyE(5~Ar&s=QYekChg~REt(Bm`kX84HbPU_foo6@dpN;QT1lZPt` z!nK>&{d2!@ckf9^Wa>i+mAZE1G+0BFR*{G`#_Cyw!n<=>7lb#5niTh6Pf{glw~PiQ z>RAr%P_<0Mp|{P*7I8rb4xx884jHI}*OFcr<(2_Dme?~#5`E#>;3_+0c|!JvaAG!-#|AGcCoPw$2e+*eL1 z9imKl`=NRAWO+^0)KsHPX`e9pZ<%x^Q@*S2j zk4A8}yY@^jo_5$au2zvU7`H+v-tQ5MF_hU&HCUVkoe_5mV{Gv`B{6g&#ds~|eq$b{ zSq{H$FSx5@taaaG?pdRADkkQx7JL`F@v+|e9Q(~%4UAddOSff(zIEzWI%$>ZpwxF& zX|+bkUXcuD76?~bGu?Xgz?kI8xH*+aEo<*ij55|AvhQ^;Tg?%u7l|y$?GgdgpF&1P zXoY037BzS%4>dR(QJ438>_8xxub^t3I>&7M0O4*Am|s*?g@T2|DN^urdXT4J=r{_= z@{9_#(L;)DAf6O;(*u1cSz|PVjwFUALnnR4!9k z!JJ{O``~X_`@^$&$8IAYqhTl3kGu1X=_?9l{pi;?-<~=<{_)(zvxRGM{gD_ia}*d=@nqGF!SD z?q`FC!?v|fTeyL#WR?PBj;9T#n1pb~R0Lp6JZXpSj@42-q7LJ>&OjVV-QNa;H+UWD z5;)B3-}Z48mA1uAWeAMh%UTSwlw6tHclfj2U4#NoHw$s)*HQLKdw060IxX$duDj1} z3s35gH|p*>4K5fdDj`45U9J^p8!SBO%DNWp-6ED+kS=^L)GvJPxCQL-`A)M`1-(ag zyYI*Oje`8?EFxJ$x(afq^B($=Vqx$WOE4}!-pDVWu3U5dHv3!&71?b$x}9-?T-V4p zu2-6y*hABdBuS&BV{ zQh-9X{7jZ$E#N&&laRZYq$p&3^?QWi>$+K$J$_|{?XBg)4@G1H-v^-J+l<;-`!q5R z$i0St`lMs6}HiA_G?-*LT;3K?&PoMm1`zt z7B}${k@NNbG!FVDn1tT_qMtIx?du%yzklTUJYIJ=kJCWKsq|A4HnbloJ74|knq;LA zOAjs6K_`cTU`ph*tw+tLW!^>@)C~`G9%Elx&pTI#F3a-O#IPbvsL7w|TJRyyBfNOo zWbZELDKMWh&ZPTFRla?z&Y_R8+^A3E)$p|B2zrbOVc&H8z6~&{68A^`e$@dN=vS^!x=9 zKg*P0)#&R^P&hLl{9)^XtclO~yK=6h;ZR1PvaY{F`rm zIESm)(&*|z2%4$E=et@@BkbH4>X8gWDO+`C~- z1OI0j6rz==RH9ZJnPBj=-_I0@3_@f+{J-2Q`P{_FjJj>eZoj(O&5;9Vx-$=jbr5y{ zDajF*xVheov`%lwt_B_llx#&_tJe zanD}tlY@t26weqh$j^~bXZ#O}t>Bb!8`~8*Gbph$KZ>s?=X8p7D?}I=TUgvyLIe9v-}LMfBp_^ zxMsl6^c3`sTXFDD?x4)So71G7*9B^{aimxW`jvRV<3nxv)$#_i;NyunJGoXhEWaW* z!ET|6&i2e=ds8K*q&U?3Wk*LhhqHOJgOSHX5FvLRYUaihy{j=dm=v=C9{+Q&-};Yf z#uUY+8Cje)1<2eVOqA`u&hG!)cPIIw%vn?@*U!mkCLZkcJlAO8`;Li-*fhK*|8)K2 znXX*jV@TN_=bbk^Nm5^0)f@Bkyu~+#9r+u*o$q4;6{Ta8CXgYT%0bJaiWI#?$5<_) z*7J)@lru-JO=$cSn)lltZ;;C}Wl+FnSIwqM;#ZVEyedt#(n$S3$WvM>?c?1qQYd0Z z)8Yx%^9u640W|Nobg^wKg^bX74Nou1iMwYMk>+@x%U{p%xNEXR1TsU4;t5W9FC z9)H~vcyZqiT+nF_5|HK%Iky32TuADErj?ravWcf|KYC=N{L5|r8RvT82IbElK|xtd zF?J5RLGT(`Jibc*xQK6RP~bKAR#|X|)zU(lS@;2%xwTX**l zZ%%d42mWdPo3QuC86`7c5E9S3Ie+zv1I1wGG>RpMt$^VBvKnNeCUy5_DQ7r3k^uqc za5(G`)I+x=m{94r7>}H#2KEL7A@4Q+L_D`S0shVPTy?QKEk-)uj?ib}%Tk9>wYUr% z3Cg4YNg2VQmY4LRKz{YCg0-uZ$fEx+!TA{biI8<*u4cpF`>yO`^6X&Ukv%G`l6h{5 zMCa91p7lbxJ&N_)Up^xrZ#;T*^m9cu@n{=ZY0CciQhhxC@i5FE=ixS??{8nS9{%mW z?sQT-U9jY1=ud=?43B@#@VoIB;wT{e5i&ahT8(EaZUj_J0j&5eXz)-(Y8Vgwf+j>ezU zJG(FJek$4ur4_4dV^V#A5g*;XxbwNb?BYZYn({D0ReqpmhS821R_8O2%o#0JY*@bHeXX3F}`Qj z2dyOAM5`tj47UUu4240M=X<7L_^u5Eovp5IOE1Y4)vp%Mt^du-*jH4=UEHrOs36MF zQ74{A{btu`auOI-#FL$04rnmp@I-EOesh|Sp~B;@NXC0Go_J2R8!_+^0rH%ST1HT= ze`6eP|0)C|>cXyLB+F@`t4fM3cejdGga|snXGA3-A6zRdcmaC0qh+V{0X?wkL5(NU z@j|x9#~<9S{0@{_G6upw5JZb{^^=CD$%g@pMTAXTA=u83y|J(qdW)fa1bXAyyp|-R zpdskOKz|nMw7A+dm*HrTp~25V&x#zv)%f}A6E#2lxaDPOEpQosP(|?lbivnh1i#8& z2zi#-VnKyB((Kn*K7_YXowm83y+b!RPQ%4B;if}$@g948SYbAyM@SdvVw9# zK^P7WN%nk;!7@YyXFLQoRZ!ZCkxsvevta&=VbhxK%HIFl&o*XB;9$~89xb#Mq|gjG zURvTnL@7#()~{PNQ)oS12WYIwAcuM?+y>SkVaE^V&C(aW1WJV#GDK-CzG!wOXb6P_ zW=Adnhw`C-3A+uO@HsQIy$Ad#7?WrLMWl@iYmvU80w=1j-+{_J4$o5HIU6! z@6-%@X!iU#gmLNb+9V+A&}u_fgXgNii3bP%Ti**2Oh0IU_8=4V7xV^W>e&k$8cy`* z=ZP{z-j16O9}pGe*@*doQByD)?wJ7~o1$F5AjUG0{~ttW$kSDpXlTwJC@ zk^OAI3BEa}CQtMkom7DnpT>&JKuD&r(V$EmC>al>kVuh}S!`Y2YjG|MTWcCblpCIq z=0VA*-+!jUodz0I{&*~7074n#>JK!_eJps&?AT1da#O z?Jp#CR>Nh85baU3)fD#AtD?qM9O_4_A}1V^CtMB|8mjyxYei*JQ*Bee&#$u1vab~X z&Z#BVLC0EIlPMU_S2NuS2Hxv1pR$V%I*y-Ewbc!@HqTZywRBO-#+~c=jxKcVY#MVI{7v;i@IS9QjtZr)K8s4!Ah_Z{>AC z4YF3)N3&T=#SqrR1UM4YriUhBW6hPwW3L#yn8X<$*3eqnyJ96GP=W1#QiM_W`R^}X)6v_wo^Lw44Z^BFK1soSZ9wu`-2UAc-UkV~yzTnau?A9#BbgZ^zdkSLkpW~#ZtKZM&$@uBa zqJF&tsg!Fk`c+%M3d!YPCLeT#^ zd>}m*3$vyQrZjCLzgW-qAkFBXLP^UcDk~F~E(Xc%t*Fplk}rt`muA{)uRI1m4c`V< zb8AnGObj}$Ay)z7sqeb1yPO4k38lW3PC3`xp0#kCdZn zK$VWyuToa9H3PZ%uY6~4bmdDg^?!B$>o!W+EbzbL|F1x<=KoYc{>0qPrvcWk5i0!z=YFvY9KHI}}DuU`+=h++R7}sg}=!fXVO>*l*{Xu+6ghjte=Ya}>e*T=DqX?E(&9fvol!xUP+C9Yh+u;-mK_NJ zc5O<+-?LITvnHA*-Bn!+Hp28-6qT&)YXK7BdomkNeBQvnrnkrQc{w9~#6BOe#WA>% z&vraOR{^=q8iPbazU-pS7t>a~ZP1EFlg$nOfwNvmlzbC41unTjuAHNJ*rJg=`2gBl zio%Jx;(N$Hxijq$9YT~mT1pg?4OZMm0&WM#0$jU1{`m#Hmi9=ykE~gJk92g$crO6e z%B5FI{6Mx$QIKCs0CT+}dEkm! z_4&_}#%iLnU0EUIeG>oY#{i3)KUd-=P}E7GK|&^{p!*n8`?W=Kr}N3OmwIw49wI|9 zeu66Rz33uKeR_g%AjOpa79$X{DllXUGioJ*TSzsRH-FICmQOTQU+S%_rFCqk>+YWY2ZsjWeUQGUF`wHuFo%?$?o0T-l zz!cd2=X3qax_T;f#DyMp97J~kj&AGV0|y=IGFT@(uRG$=w`nGOkB;D^DJp!?V7IvGf>NX7yW90)P-#$C=YLO~GA)biIrW{ru1#C) zfw^LkrkKR9kt#+rI-ZW|8e2X(H!_q?|G|Z|_3Mp;4s=GmI{2%;D>#FV1jSRq3PbJ) z41Ko{Csl`CEB*2Qm28=Gd;hTiai_tfR*)w@`9)l;u|t`1ctof>j?ctfmU6#OR`wvn zMqz>w5kxg&l!vqr!f>p=+1cgjcO{g5AdXjyh3v6w4tG4THM~5i#!)7i+^f0F^ly7G zTrD8cOLkT6lU8B&gk7!N>bTX*`cHEV&S5ypdI~cBR_Y7|6TA^?(3R%~KP367jz{Ux)iFcV zitzh2s9@}w(rcDe=p`xgUC4Be{}#i!_@a|Ikr$BfqfQ;{oDwsvdPsyCr6jriL3m3m zn&-*saSTJXe`LM={o$}9oE_=~S;8=g|9Ka-!3_FjUftA%q{1=e;jpN{M*@5H{_F)^ zZjml(LcG~A3T-uq-}RrYaqdAant&jt0)7ntvnVc~Xl@I={SfEhah_pahK5WDQv4{f z9#x!tm=d_SW^iP!nyuX zsV@bD7kH%Jp3jHTg^e^cSx|uO==pq(csuvKir9!P$1^+`H@Xqk@oYHpir~wWvc&^i zVzTYAUHc2!kQg!3IurJXrwp32Y{(PWW~f;`B>c*`FKa5m+TF((;%z_!Dh1O^O>)?w*)5W`SpEVR zjNL`#nVz97_8T?zFD=H6fQ(Vw&p7$KUI+Uu$h4TOK9g0yAg8%00>5Bs7Vj%W6{&f- zT~VGCtA|T!X$;Qr65P!Ba{qD2){+Qpz|_$rN3$Km`lNhT3;D1Ase3OKcAGH zhr`nK-;l5;`3r=%R?VZkgT$?!-UL}gFLwkJ(fQE0Yxbm6OIXvC%U*Qb@@L-dDM>1+=51cT5JKn7vyYA~C$l8utNje${atN##e3dz=GGtZQ6r%oq+ zUj#lq#IID?I;`$`&FPurezraj=9K8XgDM17eiw`A!GmBD^IG1c$*>?HXI`^A-d2eS z?3%AdR5=>rSZ#iYky4B)Vf~dC@(WbdUHZi|op6VmBg`xBW;0IzO4Q@dmJ;;Aj^r@xur?qD&dD zxixwa9;L&=K3)5s9~c6m+d=iuML6M%EP6~|z(Ip5-tVH=vvlTC96#@M5LGh^sA2Ax zQ0E?AwG&19+!;^c4vXr9352}yG*)6GJLHMGIljD&22Yy#K7Xw!FpBSdW+Wr^yz5=a zO6p0Qu6uGBgIN=t(PO+X2wF4Rx~(m4L}E=hb0BfGGf?gR9-e0*btNr*OW0pw z1fAXL#U=-K62@-Z+`SI5yjuU2q}%5B1wmju{C$wm>J}4)m^*)|6i8b~j}r=1KyP3a z-fRz5=BX91C zCa{T>(bdI+-JZ7>@?L^BUyHimswpUNC{%@S zhr8ZGVy(oVDiM`n?Rjhk(#YTfqIry84E>s}*6p+;O7zmRX$)-Nopuh@iXPr6e3Lxo zbLL|-Mzy&Ga)dXWi+pPljsf8-^q5dF8ZC7DoCNnEX|@&*;PHuaW)n})|9R^`4_jjW zGmUq&CNH^)LYPV3#Z*e~`MQk>?%|MTCEfE}C-gP4`aEUGoIgjZwhXdT0YuWtujR69DG6ZL zMp~W%B7*G8;xFmUi>z1fE!_{qeLmD};s+A*j)H|5VA_?vap#O7zJZ+5*bFr(B>x?^ zSu(5i54@C)Io%9?1!~P|_4e96G~prsqKVt-@HQP)T7&PqNAPfn|ZM zdKNhQ9ahLTUPf27>FXq`jv*-fB$EHS*$qNX(!w{jq}x_BIGhI&@y%5Kj>B*)Gg`Sz z(M75u9dET|pV33I#)CAc87ivUiu0~Inw>Enrc;V z@jeTjcwO&IJZUVRQ`*w3X{b&(JO~N#W0}yqC#|R~u;R`^zAYiC)$1>dMK_CqDR43v zUw4$EEyexaN;BTl+Sd(=&BO`lk383>TUV8ySGq`P2G+;CfyC|MVS$PWHnG3Pqhc`9 z)l~H146jw96huYtzv=tWhfu|(shOqesiRVXhl@)5#U`h;BU9WkRlj+;pT<_3 zlUJajZ|?CY?pvJ)rNq$`T0@;|?C$GuvB)?$_n5z`n9PDlTqT?F5#rvqXX|a~x_vvY zoxMKqSx!=mhIL;3%}_<@?9AEQIO`E$zT26!>i;%=a8D$@E=W^RrAIp^LDWt1T-gTB zoR*bMyd4y46xr-VmPQFR+9X~3#!a!4?qHW-)bZ7`A6H|W_~;(qj{KP4^|RDxFCGvE z!q}vkp&OzCKI~IRG4e$&xCVL4ov8-d@LKAi*fr+TL4e)bMy*VlPnR8M-{N}-6_O4) z-3lMS<$Ln>_$}O|g5UddG*o=L3N#iG-$h81tS5H1b9=kidu9(@lc#4;qj$!OxY@!1Kg{CkB3RyL%tJz~Nu0X+;v7$60C{4qxsl%c;VZlt{$*{PWq zZ;7r$4?CQ~7bKC98fCKwm@D3Rd`9j%fDBOx|49gFg(xt@#_ry#c)MgX=bQR@ONNVt ztgCKE@{sG`pVlPr+Pv`@$+w+Rba_yPg2QGi3Lz{0*k-fIDHG%qgGC+j7U1qDG7Cfd z#-3Kjr*Tfo)h--yBuVpAn>m#1cd?Kpp&!#QNXImwN&pRUDF0QmmxViG_w7LbI4}>J z+$qznQf&n!W1=X*9R>CpJ8)Yh^>H7m;|bqMwqNFu96P;67MJeA2>{(AWK|{{54_C% zjc%r+riSKfMT7q-`?l!HRPZ$+=2dGY=>7;^xVP11!>1C$(_jiAgU-x<^pktV_r72W zxwXp>IZp_wfGPzh*UI(Bspl8IhE@qFLoVpf`=8oDWKaw1rES6UjeK5Hm?(sT*fRDI zJ}{4&q?Vkva>d_My^pcvP!6syw2o5&$_dCBszY-rrs6G>R}06y#e-$_Wvfl2@dmn@ z7yj1p7azC(qr_d+$6n}|TxV9=>Q`8AD!eK z;p$*NFZT_eOxI<|bmcJe99S47+B9--{Pq?krN++B1mT!Xeev8I9L*<9ktE{NRj}iB z_+jp?3_h{JGo~T=Br!amI&8o0MDB_2J3S%$b>#eqqh+&{gYF(JaiN3EOVir#@ccGH zt`?G$vA4O|UIx6*Zr6Ibh?98~!uA5R)nfKr)XP+M&XGSE43wSyTN75Ej_!+?Z)qX} zWvS`hD{%`OxL66!j40B$fj2@8e(EO{BVEiX|4O1BACV@lQ^g|Qj#4*c%6!rzfGaJe zse1M!kp1h$8@40#ax+&I!E~R5&*No>FNo~mDPbt!N0xW*1Z1x3v4@;J*eK|$ibV`O zJL<0m|Do;lJo(j-|E6ou5-H1?i;b<9=AlRgiKf|tCX}Gve~(iuYYmPJ5R`52mEgPV z-!);WC{v5oVHYzOls2MP&=-z^1!{do2;acBZ^3@~BQ%Y9Fi6u_+rkba%p~Dgja*D~ zj^!Q({xO`dlt#sNel;&EJY=-xOXk>z&wG|$Q_KsDXT-M@FtMzDY$_^z)mCST8y&z< zfs0Skp4QvwRhOcLuMdQwAwt~bFLC-Heojh?aV#v^e|mc^EK8K=dsqD?uz>sHpD^vX z__9$({pJ9t)Iy6*tB=325Bf6?Dm)uE($SVwi{QRy@w9FOItnnn^AF|iI(cIk2XbS_ z7dWck@_mAemsJd`BnpC(L7KRL*9T-DSAL5~bxLd%=ndLWGDM`iEP)Y7I&Sl7^$|n) zo-L~>TFd=a33SL*?KBAM3HE2Q8VPjf`kE$G{`Pm5!&HHUj}C%w!<%T%(XL-`@J|<_lm=`(5zT1Bbj1IPT1RnY{|<%$oVMX$ z$Pa;ey1KF8%<7Ne7%W@cU_E5iW1jKa`s(gd8OUenhA2&1-7Se zYz?#2o1QWChh|HXZ8Ck)g3x=`x=WP|CtVp$iCTiMWTFri$B6gP+VI~NkET)?jZb^5 z!&+*vs9p6fQ$9deJhF9HNs}&f(B{c3{d{68)87!3YE$T4MEC^#yn_=lR7x^;cb@qC z;2eP&DUtepjD1+na_;25H9dn)iLOl~qa|MtmAeTid3d?xQKoaX^ zHH9WOr)x;DmLT||IlH{Fa4cOEWV8dwU!jG3uUaiu}r;z-L;Em9C4YRST-Lh}5 zE4pzz3;U3_HTqNAe|rnjyV^&giV6h)<6qYO$fm-cMXg{q`QXZC)2{lqSs$lc8%pp! z$HF!6k3+Ik6P7Uq>Du3pgp9cZ&k|6^T#s^>D)~GXC;ldc*O+{%Ev`h;`r%-9lI-d+ zd9KjMETm)9UG(%o>}%Nm+OV*yVIw@LYs`Nl&~72<(=2Kr0-~c>-hgFXk|D^+AH>j5?e%Z_&yG1R>&>zzj#3w+9pT45`_XD1ODW(`<@Ro#fBCJ zzjMcGu-C*_vRH^&Nus!#{5}P0rKh?iA zUYuSOWI9cs-@>|7wuQcy#eco|j7qhS&ib|stD=|qKG;WjI|EfBMe*{N^LB=Rak#wr z7n!TtobCF0na@N~=~I^t{poB~!V$rHXy-N3xbWhNkkzIZ-50NZm~(2;_MO>^>KXLE z>(#89ml4$w$uBb$!d?u(Vp|Ov5>osXyf}-rH9hVyF@z}ZwPSK1TzrJ}meQLM2zmq= zqxfhX9K0QZQx>DZHLSLxwIr@ZeezdbZCepYLAJjN+c610IQr$c$a_h6V-BkUw>R+# z!4Bl~%%O+yVf%s8z>WTdas~8|r+btgr-G9kev%$`fA&l$bCS=@Qrq_>%4Fc%Ez3t@ z=ZV7HSSMR)%!tW5;v6<4H@Q+A?8b6Eb)I(Uhz2HiXt<1KP7d1oQ@vn$e{+CM&w*1JP`#UJtYD<&AdSyV&TwapUUJIi-41-EqV*{eH=f;3|mtE zODyb;Dp;DBvY-%m8sD@6>Ay81HAkpt?$)Ptt+;6uxhGs$yzFSGOtdmBiEpKPy~O<} z*{A)@zF*N;jDL4(|EIlDT!$n`j&Kl3LVWqGMlqX`vy+V`*t6Awp!38FVdY2Ke(E|R z-||LUi6D!VRi@J4D-uLe#}YyuzwGu;8H^?!Yv>sjbz&__c&1l{AR@Z7<)&mf#<>l@ zMlN8VeA&FVUk=+OW_hiWu9286#bUy_cp+N`<_la1(A$(526w4eb;T`Z8`rEm(@dZ$sm@&-jOf|8C?&)`kw_ z^|2JZEfY|r{Y&IsrmMal)M*^$(?EV!|IkK*Z(yfbQXM&v>#k{FL+jWH9-7=*s4Esp zdnFdxQ7bZwXb6Ly#)i^NOj?IKUEox*_u6e}3)HJR1=Wp_UY0d>UnpE$Tj!igiv;$P z?ebyANf>_%dmg(X$Qi=!bBL1Ey0XLwvE$4u7uj$!-?*BW=nW|QS_e57gqkGJkX6BP zbl_PFS1 zf!4!ry*&+u(hXR4$QT}F7nu2GnbVYo{bRgK(f#t*i4SEf$Ov2XJOj+BXIJ@)OtW8iv*a}3aW&7u zNiHodk=r*C{nxRfbxTuBZPky}8Y6=h!*MHes5q_CTr_BZu`|J^)h0#Gy6GlckVh6G z9F>NStuOtaks#RvF0-jt^uhn&?5%>@>ff;4w}s+X+-cC#;!e@x?oM%+0L7)a7k76r z?heJZXz=3h7M#Fd{m(ahzJ0pSI3SY@$y#}S&wX7tOHOZZj`UmE@iwVeD=4=FO-6`Y zhp5&ne=0=h~}4^J01pwNcwiR)o~H z8Bx2G>>)gwn@?L`;eJ zW`WjKcDHHIlPKgXaHbgbj#l|;NvR;pzx*Q#m^CRCOqSgamkpzeD?AZt)OY{5q)Zu) z&b>DHR>w45NZXFZ!MY7B2pP#*TuY2lo?~<{Xa9Pelg(Ocn-?vw&1UDG$hddZom-K4 z-`^Y5l$cm*E@*qzDs!MArRC^xb$;(|chuDw(_UoxVA;UPy_Y@KSsNNBgeD{s7Bh(% z!seQ>U2x+fU2j;pXsoJJcVHU767~JbLgGgt&$Iaa#YGs>W6nc z?IuLqR5yBYhXp8n%1AoEOx1s4Hj=JqLl&4Uw&4EE$y;ncQMkXoBGCD?T*Hi=Y^0*1 z-ZNBApt7nIS{ot!8p3Azb11dTm|TWFeTx-sm!i@4cxY;^1bj7J_fB5>gTVQ^p4ATq z)y!tDq?SWwZ!i$h8<2*hOL6!eI_=s|YBUzua3@KPYxP-@!2St`Iec<`g|_<`z!uEt zqe;rLRuS&BdnBgD1mXwNcRzrKuhZW8hFB&GwyL?5#i|^))<#+J+goq4q|182$)N?me(SfRreYeH zlsz?yrCsmxb(5Aojk;WY zeuE$386NoXUw_c*Rqj4WBgS)e-L8YLBf}cxIc|3u?TC>OdpL4gZ*L%Rt~njqC827j1~QLiE1#|m-^!xZuF~3Km!Ez= zlI1(*&xkA}CvUmE)_0Hv4j0i#cmu{OudkbcIPwg zz(JjW1)PR%kC?ghEf_;W4T2&snoZPrnXE7omWe*ILMk5`SLp-2fVEIU993LhbjoK|A-krwTQbZE{&ur0#*pC zo_L8GxfJd%*JUQEXwey;PCaK0K4jnjK+fZqgdJH!8(J?W=t^~~{1{iJCOhgaT%@S; zfH;PZAkX)eMQy&2>ytbygww+RG?&8jvi#7E!T<%WPxxW^mie6w{rIF)!AXKv8k)K} z{FmKPyXQ<3qdpBSP54pa4BDMtB-Thevzg|KWE~>OvEH!w;5q?+06Phfokx>Cx)ArXb(@P3B5Ka?9&%@hx zI6&O;B0D#t%)QapNbgkOnWq)VX2#MQcE6l2RT7Y&x7{uee=lTYtlz%1R<3SnvhL*3 zE^a6}Z8)ut&YmU=W(`y>p$P9feorskmaG8Rsx9Kje~n(71pEqnXmwlRKvSUx;f%jLws z?#-Vuf5BD5T?woGhtJcx%{{qmWlfr&=6r~uf6bH{7&#UA(F^jH>CAOxg)DWfL0KBh zYJHaURMAgar^6AQY&;mykACEOyN|${CbNj~X(}NL%4T&c__>l)n&gXF0h16J?1WEA z6;URSpxQsng>iSJX=NVNnYqTdGTWd-o0wc+!7TkAT+NTd;+iLJXJ=4Ql-wu)zTD_y zachk{e-YR%>}5~0>M9{)Y&)GW%L90ul=yn+m)k=oQ~twI6HgDF3>_=6LGM4O3l2HQ zy8Vy$UlJCTuwajp7rh+QZD@xPKHtCaUxu7?@tKXe)V47Ac(FqeYpAsHG}X-_EWBVMr3e@ElBPVOpYPl zzGp7YYkg$&Y-nj2MvlB{UkYh2WhmlRqz(?--IwV; zU8Fyc9Q?qo`&g7eDnQ=cEl?k1B@7mL3=taJJGmGs&0rRNy|*g`!}B4RkbzEdBO(}h zqM_~0t?p+69tywX1rIYnn{>2cE1&BP9$%Ab{ZLW~ZGX&%$N4eP)K{FXerxL^#Cl_^ESnhBzuf4pOfEYDS z^UxZbLsiJL>|Z9$Mh~_jzREn(c_76Qp{DdLId@>ERPh<269>L=@3A>+g97OPEPw)ORL1!Zxt=WMt3auVzd0)t`Y0B z-Z4ro9_YRx=r-lqb?VR#50>&%2@!Y?1+uu&M-l}*u3{RQ)XM!1eyDMzdYlN=QD{R~ z1{C$)QqaNi>wjtQA%8SclvlJ7v+AaOVayfl0c}r1Y)cjrxxm@IzPmT>sX&2;kO9@@ z&k~Cb>*LG5l5eLnhahG*Qr}~qk4qGTSXHt5>+M%n4PDhV?&5Aq-T3TtsoECWrY4ff!ASuwzR!Uk?|x-8OnSXoaF+1E)qQF zIHhz~pQy)m7`)B+V&6-^Zl6R5+576W<~Z~1AItwHyq8#Yq=5ob1fQD-K)iHZvI1xK z&5Lj>jJz&ia=DB^pFOa4gDw?u0@VxEZOT4?dk8`K`LCJ2d7@Y=89>o}-%1uR@xBXz ziW@xX@?081+@gaSSAwQ)&k$m|Y0uxJwox1n5g-vEBN)mOJzCs_4SHW;LC$?X+}#{} zTHYc;?O{>U%s~%Tj1LxKM)bZjVew*>BLv+<4Vtl@FTky3!N7cd*lF`t={HJPz0zUr zg@V`;tIlPSm46vn2|Tt<;=C;S z4NmNGi}aC6V4;#m7K}$t=U+9%_6~Vv zr+vMCnbf7qiNw5xOji3-}fb?wD3IHQh%%}-^&6wvQnWJtsM@d zi1Et5VUMSn8woV|e>6}4Htoyy$HN5gp7&Ejg26{2I!$wGz%sUq*JH%n5Zr-yZx?0|1$@iDWa81*+C#)~7f5C32LqeE7ZtfLj{txA*|9qn+ z{GwWOLy{nD72;<1c2*3wuK>{=0!9smu>8Ca$-=K^??DC8fsYHP4uf$Qp}r&i-}HlD zPDMpRd>qJuk4i3chd6ET2^tjjyr+UjDK*A(hr84SQ%vYVqkP^WX1sv4<=&J~fYAGf zOiB5aJVG2qEc$wNUgJ}~_(t#sk>`QM9cl*b(*aOWWc}G!B$pBd`pYz}Db%SIjcETw zM@o}H>t}SGI01Z9OdEJRf3vz0}=WL9YH=YReB!kK%!E@ z^sYM&8IWSDA&P|WVPHXLDZY;&!+q&CaB zcQu!xaqPn=&v~ zQIAP=*f@c!gn+|m2Ca7#<2KzwI9x}e>q!r1y}E@RcYmpAang(+G$r}=tpv&TetmR+ zB_ZILON|ol12sFWE(fC2EfnYjcY&t82$>L`ekLu~zz_ukSbP2cw1)Gp_J1c?RPIVj zIx1AZWXt=Sb@#0?%7X?b}z_hL@UiMXYm zKp)6wMMvBOAm~ET{)XSKrYhe$wZo?7PxC!id^z|Z%vadjTuqODf6o{Hw8kV>+Q9Ep z$X&{v=@VqRw}q^>uV6VOZAE#~&`q|W&@4-ic0dzN9ZpS%@VMlr{Q6u(D!&{}8ZoI$ zD+ZQKDt|w2SH>v)6P>aEQMxtcCKSvE1Z7`SG{bMLfD5UZSNmccb=O;(L_IcUtqCr< z0?#5krMM63A=1L$YqjYR>$S&7P^r#OPhIa+1zp&g79nib9G!k%so&^LFoa_9&fBkI zkP+qCARZlU?ud%5n5B!T)w8K^c~?Fms1#F-%_FleYcUiquo+1SS#@g)VKdq?U}VVd zbotR|#GnrtS9dfaak`fB&_x|Er@xLA4B%4Ijd4a1egZ!}d(o48OWC-W%8{01ZFD~s zJ-k-b{OzWQ%O3eCLDX!?d$e9B&s8SRn%d4FKHrc`8Zgbnpbe)w7+{qjF{a#!YW9Or z=F$6-co?aG!WZ3T#}wr35>*%OZC^F4VD;{?GVLF9o8w-9cj%gh2}X2*;@&%S*}^;3 znPy+vj%wQal|6-{5u_A6-Uu&nhh?=F6iujSBgflR#bzNRMoGS26UBup{pbB!UpjOa z+gi|}qadOGBE0h}UuQ3kT(3ua-iH?*uG5_TC>K_Ex|V}@J|3c=T~*0om|9wZ5nJ14 z*$6S4H(tseOvryHX#TU|{8mP7{fy1NaVeJP>aTL(j= zWzmLXBin#76$P<3tTC3ZN;1C5cCz@;UiH$zTb#Ng&d0bEr6KvG?VBtYks}P!&&89ZO<>cFi(!ofy};%64d5E4*D<{-Bh zb0W9&?4LMWSD4vOqDW-q{s8CfjdL_krA&~8HrW;7a}}kg&45D*ayCPU4=iiz->P~2 z2$^IOW!9xDq2tx24{f}~#i;76_+lGxIfhQN<7I*zNfM%8`*o+EL&Zs>ebRc);4)~~ zLLu3=mOZfyZ7Y^&nmfs5DPgCJHn~mjIn5X#+`lJ0Q#n)` zxQp;kC6O#K-^ezEhrgxKeVvyz&{CyaKe|a^a(fH-WX?5pJ<7cOMz^PoboX@vfhTqM(fBjFRJ22)Vwm zNPq7l7sa{wmc_&)Ql!GRC$odh*yTZ@ylE`Pxv@x!*Xy85NA8a#KX>o%Uo57$pNW9K z$JqOWJr$zRf5}O@aTP(6kjD>NcsXA5)*C_S61OlI4zO@k-t%pJ=W$>N3Op!3^V5By zHG1f16>c>t$&=>T3VcL5TuR4(_&}Vn4n_nZ<6+slz1g8p4ga6ISFC~)@DH0Be-EQ}{E=TWGUTn^T)}K}P{zeby8zDVZ+X#2_ z!g*gZPiwCGcO7xFfH8pQM7WJ_&CQdRx~dw@S~CcILK$IRVp`sHGcUj(iurQ+0V_tP2k|gQEyCHX{8-)YsRSTQuVqLKy`B5)Y7hfW1Bti zsBWa?!p5&F)V0EvV`q%~iCro7JD#do=v6Ixg$q}4)a0{xQpWWIe9rXl$lla4dTsDR z{-or2;*AD4-BUw_vRw#Td)3CJc~fHB3MsC=Q03&wa8vqf5%XUk7}VzSxp51kg`{jF zMZfYE3v3!f*6ot_BS~nZ?OL^sXIqQpq?Y{j5BAq>+H1^%^!{*_VF_y!GZ)#jCo-aGUhFIMJ;`9XxF~TWXa%kGap-QkH#+% zW(KAMVYf~z1TYE1Bd^RjK|YE8r;ROH;!zzww;Ts z22W(+lny&DH4a6?h8~SrkTC^<>%y45lD!1?x3GQ^Y(8}&CA~m^9|HO5Hiw(@vd4b` zfB)M`hiz>mvfXH-O6qb2IxvC_R5co4g2tkzA=2S_Q;J=n=!))^Z~4TLWN*)Z1n74V zySyM@bUG<{w~alw8jJq2=Lb7bQ@ex>0>2yl*yC|ff%YAVj2jntNPnJSbWv^NM z-#_J|t}6rpWD%TC2kID)Z-4eCtEH%}Kz{oLkW-Uo0GF0_jTIhT`>i$k(1Ug>DT^h? ze|mL%wH@vPpJlilwI<+kS&Hv+&GWtgF2X&Wk8@jviI1QK!xWwaj9#o4Uz*F@ubezH zZD?x%1E>3O5F)0h0otJ@mJjY)`bIev#CdaZ`4+@N^j@n$Myi}(Yk-aBdFCg2ozjmw z__a(Bs>p~dBpk8tvGU+g5nG;g`=BqZHxI45Dg|^me^0;+rEZ50f?8%5vxQD2Ot zpH6$))hUx{F^@mOSqxG}Y)TH#YMh@L%#h9dVDNa^$%|cFRt&n)A4_y){FLDOom5-N zhNR!8wc*=iQ=asZiayPacB?Y}X4HT&=EFmOgYDy=;$XMtm#YOh+Gn)IX8v!u*x+2& zPi&h5Sm;`%%LpLfD(_MinL$fcTs#z+75i%Jq5N7=<-W(Bc+P_%gM#2CMXPtV>;A;- z@Qt0=urs>Sqc2)b7%u&$!edHgYZS0~Io|iI=u5d|?C%;KsjQ)fiLU*Z)~d+xaHWRA zd&Mrg)SeP9m64T4I;j8xS<(HMKrw7~HXuo9J&0ICzX0fsmV8&2%#SBo)WZHA0sGk#Mw>A{*;f*Gij2*G4(| z?L|=Oc#RmmG$x}(tIio7iP96gB>HjavNqke+Y5@?Z!vU|4|`JAnm@;{OF;0`r$Y(SadB+GX##VdP z$M(ED)yCfZ?F6a#B`!}2y1r1gAN$eBOlFaR;8vCMnsMvHxAj-`R^Z_|{;vLw*$fpV zJX^pM`}r-`2jV}^QJ;yH3z&K1nkF;=p7OCbCavCw-ep=s=GW--Z$Mq3FZ)yiT%v%- zqNHumH~15q7M*aK_Dc^ysn-C5JY&*|7Qo7kwq>b7G}xQYu|zcdvd~>BR-1w^VIkZZ zgaEQfV?{?a)5$#6R7FJ>FP+1*sy9)t-C~6YAXC&-_YVn+%gZ|E6Y0_t=WoY1nxE9B zIONo>AQaXGU5D4+j;cC?Oj);jEF0txts`%gurP)>rB?)I=F1!eE0IMQ&IV-~RER|? zmG55Ak}D-&cfU_Nz<(pD(0VI@A-4M94ISuCe8*u})az3Qbqqszx1vC%SCTT)KIi~8 z0k@mMIyPY8rlUSH5v3W#NI<4?hC*$SNHy@E~AJ ziZUuO@N_bOhS3h*NLr6j+u+I9zBxJK2itmq_vhY&^!{9mH!4_d+csn9L*Xk|-Bavh zVYwvT3r}kibSIruq|Y6+v7byHMYD8$4@o`DXkxo3;}(NRG8Rc}vgxC^Upks>BV}?@ z%|8t~{Ek1@tG?Ouv1L4#uT?uyne3YXuGHO$ag^R)F0>;5Wizb``bi81+s9TeEafmG zI9{^#^gfQt6Jt}?x0g$k__Xrvcf7|~J>A`-0CqAjC|N4*-eF3^8Fj39qsA_r$k6&hDCH)R^Pf8#-7&hLu51hv*lnTK}%PozX9*M<#xDUCw9@2a!{y5U~;

    OH+N2JRAmSQdIywS)8^gmm?vcUmYy2tP+c?}L+Ym{SlqY!;}nyfvo#1}Ms zm0KSmAyyo+E^R7P5{NHe@z8wqTK?=Mc{->3pi9-ske+H+zyfuZLPR zX};VZE$go|Ruxz<#p@%^28As-Ry3p#*B6|3M>&P=lUj)DG=YyVbJczsbW$D9o5;?- z+{;ls9hTZBZtuyZv^3H3kCGv#84>XvZYv(E&3D`m#&YZHrj&JFI2_jfH6Cw_zi~h` zq3r}OkH@sZT<03p&`MXw6HXiLB@kVt*WJZ#3o$$=If~a@@-TeZ(WU3we`IA=Jy=R7TL0w)Mcv%eKH-0qg ztairVe0a=K6suoI7faiUETr(v10O9g*U3FOwx1rm)G|ONQK>t$f5%8|6nHxyLxMkJ z@9V|!ujbu@?KjHxqM*! zqEnJt+XcSwSeY5>3N#cxfz1BVnc4S$l&FnC54}YvdZqo~EePYUxAe$+$oAp;Gd>;~ zb34u3j$_@34>XlxY~5RNX_ zWe%z>PwEBOx}n;@|0`k6yNHP2tzc}+MV9mnC^yc?%5L6DWI+JmP#E56^joGK9J zN&_<2*vm3DkJsJZQ32IKnZNUeo%W3-^KAP!hZrT~24n#dAio**s9X0;#5^h zXV)t)a$bSoI2uHeN$mAhI$S2V(elt%vj8h10^eA(Neft01mJAeNFUtj0_->=8AW_k z;ut&O9oturbn4w=!mFxlQVs^yEfbw$Q-;TD-@jsSsz5ELEt6{4X}`z(k{VQ(2KlQW z9wi`{6M|;ZoA`Q6%dY`ep2dY)|VF2PUx9iIv@v_feI;IdPtAJPk zZm0*9zSO>*BDpH*MF0Fx9GbiKsVSPZ-efdViCcW4PZmL0kC(!+oG01bbVRD-gH=2! zjn!DkM&s^{Z|tM{d)y8NH=ty;Ck}44W&A54uhh{lSZnr)vr~vnGM|V?;nUln0E(vi z4^TIvqIJE0+VL-Vmbj8WVaiQ3Z7=&vpRRlwrqP3{Xrdio!Zcvpr_O%lfl|BejA0ENPo;_ams|DLiuQQ34s_dsucbr2n31@=rW#Y6AV92;Ln1R#D>c z*WZne96)`jJzZP@8Q;oi2RJa!R`#PVj+F50MwMEHQQ?oEx0GXKQQekuVJ6fJH<5HZ z#?8rX5j?%Ic2PR;O>$!dbN*Jg$ z!2BScUBT5=CFkgI8g09ywYI_J-Amh(&ZdjK#1pjE>NbtF?ck+|AQ}bN64Epi{`iw^ z667M>%^C{G>zK%tqQw&@Wi1oEGLZkl9)~VwoDcN<+OFiF_2)n5Zw}y;EXbk&gQS$t zPOSTum4gEa5~bzPn7$AtS0?ZT)xygWMjzdIgLDD4$=AD^n$`03lvFVn2)di>M1`IM zNLBBc5_2D#;6xv#C4Qj~#Jf3`iNahEFu#&$4eO?CUKy*(;n&Wyu4 zvga;%y$O<>XjZ4;w* z2yL|3x?^?hASpL(Zb4CWICUgZWZMIZ_7nq7x-mA9u@ikHc~IK}8z{e3d#WBw5V-le zJol8&#>Bp~-Qyzr`QDk78tBu*b90lp&gc7H(E)iaTfRrFC?lNrkZ3$0F?0o6lF~+r z!FEIrhvHB3^D-Kx6y)pJl^1g0hDaAPcZAoU;2HF{$^9j1L^WT@0rHNTen__-_ymv0 zG@7DEQoPA>+E}`qdV}L~q9(2VG%R~@uDRJxm#@I1)yqT1g-i*8cI*3F=)9X>IBBJq z)ea_cTE@*MMJqfxTcNo^=Gp$379sNW<62196RULCRHn{K$eEt0?cK?zLgzI$D8(x} zdQ|C(FLj0=Q&xX}S;brL{k|Gw0aBog=%{{Lc0LS&j}HfS_2lsCgoTzrA)sJ-!Tc(1 zRjCP%m#@yFK7}qx%HG!v(n13#`^G3vJWU*DK&3Vl$*tfah45+EAqpWY7LdyVr233Ur+ycm@iu}up2+G*w=HDI)b)UqK4^1IgjJ>>&z=_m`&iw^(zPu;A( z1~8f#AA6o%0t|tUby%BQ9RH=b86$zOsDGfTaNC1pY9}GgS5YRUa2@vFO#vXm+;=9H zt8zX5NxRrAVe!B{s-oy&KL_-@T+Ir}RVSRsTg1XjxMWLbIXLfGgY+1OIr)^|$!x6? z-<5>g(f-B#DX=5o=CPa02ar`n)Ya)iPa7rFo+AFwT%~5u*4z}XsP{Ra!!4`G!My!f zpla)Af+Cl>Rh{jC2mzjP=^4VA|N7Dpd2A@GfG;yP-Mr3BeY2II%-k8%b;t}{kT@!L zN0N@l>=hKA4`1#dUh|lEkX>%HJG|6#@Nt+qT~xWd&{2i*eiT+mB%45Hh1 zQJ}%iVf?qp{yGgP-ec>AuhXTUCxn5$6s?lCS6HUFNj@*$?WWy)LY>F`iYnWrz6<`5 zMM~a2gKU~~BTrsko;_x5sIL+6W3W{zg*SoAO5?%#U+T%zSu%Cin65kNv=W$F-MSn) zgQ3lz{4JNn#Kc^*oZmh~EQyr$2B46e(~0?;n-8^TrseyLl6v0wre?Xf6mT@VrEo(i zAmSMU*tw>7`-bJA+K}|Ank}6RJU$Bz=hi&fFzujGS1D9MY8PE`@|MGe)cFtMm|q}m zZnK>v8J~KXGXrR0zTHX=co)BzGk-l5LV-QEQ*LI+n6gI0Z$=S03@SSYrN}ktkm`|4 zf?%dbKX&0jtCuZ>d+H&U=8F7c!-ZC(#&JY(CbQ5lUM}Ao7eWiedT8M<95-g=+}N_?3KLgDtCns0Mf= zUc#RU5!bQzPk0Oh!o=I6Nm&#e3 zuk<;sOzXXy*Obw77}hw`gbW+TiH@6vsU!8<6dDRvQB9dpv?y^_%BRl99kUh^Q@@}e zQkiii7WR5O6)$cI-hMjTPeDy{BO8HU&r&zu{gQWhR)f4xn7-C5PJD9;GR$Ak`3&Ya z{@^J~baWxjHrcSBi?8_m-bm$c_Zaj!K)(&&WrOEny?#kU@AVFy6>;Q`b=uO@5O-Mr zr+lC-#(b*tiKRQD+thMJ!lrxf&KsMgCdfSvJyRG2$1^4JDyJ4@xGF={d^M#Lf_ zoo@+$!H`$ShG$PYic~OULqq^jug*a(R&( z(S7GB+Tx7KH6`Qnb{E~z?*rde%D`YcM)?X7@NXNc7%W6MyL9aWGtWP_k7LKalOAIc zSer#RH<{BNEW(w2)=LUw&Uu1e{X`lOhccANb1ot}ozA_>?@x^+2v;*vzEGRfXTxc# zs&#Bv3y`d(hrev7@~%o1g8vi!Iz8{zR7MmRZPM>a)Rj1$o=}{IT_{c~^`z;w-aa`e z^g;#r!l~?PPuiU`?=k$%0HR2Cu<|sFK4?GFa>bZL(C*_=^s%8AO&d@_pb(+w^=%Ra zabl<}b6fe4ID-{BTbBy-gvCySLaxo5NYbD#s0MEv zzb6W*Z%wRO6oVg;k#-FmRT-98$eVJm-nayDlD1A2TYtJJT=|9Uvn_sXJ{wjbMiqlo zRi>GooJ@NC*&L`+df7L{tdR1AK}sjtG}lPR{IgBnm!1ZU4}|9-pzYkQe}xy&c+M+W zS*Ualcm5QF(_dRR=SsglNu=-8j_&2u4r%x_f$VpfuArgxk;l#X1U_y}w+Ni{J z?v$S%qv$EZ-&<2jsKJ)j@!#v7l3XTzoJid&-sR;cByy+8(I^}wGA_(y*k-F@ zxa_7-c z@^VX^>5gQ*H5|P%sZ`_A9=0fy9oNc(9q+gtEyn)82F;xQCP?YwK)LdQF99s&RoDa< zs5Pr)g{`ROk05EWr6DjZ@HL}w;YSFpRtx|!LP9tft`u1mU$iCPOru{de5OyK`!usI z^W8^n7}SO$|K-Aja8b4)jaM6>%RUbU;YfyUkMiXVQ{qL0_XRgQPzb*Fp2Vr+(GH1K zu+JMql5K6W3oKd3Ztp4E-r?odKH#GWNFwP!G=brVr^gcEUn2=m>I4DWYNAn?XsDz$ z6-e6@n51v+a{7QGM_jG-FrQN@51)@8Pxq}X(^vW}TQ3k9psxb{0A#HE+9fK7E2o;- zi(et~dL#&pg%ZHQ7LdEA737INZ-!t?gANb<55SUZ6d2OJ;Od}!HVAW7?91ciah=D- z+Z7U&d{!vjWPx29{4QAmIhV98!ZGphBieH*+B^$QNMN_f>%;d{t`ZpOg2$wC&Y}0Eo#t#q1)B@cHI~^`#Jf5P1VvwV`DV<_FoT%0Fun-erg)rMAn*G zcmZz(>ut&O{U1))@L4kmIvP3$d|8yWO>q0a5AYB36P z3uJ>@Z5S>?chd<%BD<#Ht1s2Bap|*i*CcuVH_hEZLF%^WgaP`>D;M7S5L{nIaZtw6 zH(K)N4}})TT=%BZNA4b8NvY%z?vWFAU$Y}5#~WJY&_>Vt#WDoB+G&PQIOvfi*UD^X z@EZV9`fx3W$)L*7MFWVjX<78Ht;`BIQGd4PE`B?S1dv62G5@u=QTaLk-R64r@9_Z< z2CyW4C;EU$i_9m(Q+$wFghm7-c;N@ge0E=2V4o==*wl-L|0Wq?Vv`1Og5ggq?E|mh z$fJ?pL^h58wcx?-ph_Vh`EjT|-wFl6&;tAm%%Iw!pr6qowP_2>VE^E9Y7Q;_H?N-Jl!6U*3t}qS^|o0-Xv@te>Rd4M+1_?t--qKjI6e}gW}EkK{{1-pZYSE%AK4u!%E(iSQ>`3&H3otM(Fd zml|8LPgD$(Ko8-^hYshgA6#f^zp=fJ#IW%qWWSj#C`-R%jH|CevhM$n{ut;?oWm4@ z<8R0j!>4DI1bp)f`T*ho@Q}y$AoVLvt89!0m`R+aKzSuT^MoxMz2n7*F>qE*O7kb? z{f`t8xTC}cpUA2CL@!oMYJb{2U4ZL!N4K6(iK_+jy%Gv!JoVDz)Wr~?Cvu>kNbCji z?kgGF8=wr$I+mn$WAZgw$uq77+J|_p#Cd~_N6n22Oyxqa+2dqm^Ld{5`2k;nNLe{b zxz?!4UM%fjS=R0-Qh0)mI43YNv7tl4`~l}_pCQRYJGr6nIY}hBd#|h-Ji9S*bL~63 zW-poPHM*cF2uP%~SXzBzG>Wi1uA_`D{AI0tyB}J!iSG*O=WXpnBm}*T?43PT;1=xu z%w`7#)D0;tmL=95hPB-_OiZ2y!``IwVBeINPZRuotIoHoRoY`-SMmZ?z07}w_0g}e zoQM6LE^GTpv%`WbH%CRR$V=~Wx8(Zko4+5{wUSgmwfm$~Lt>B9&ILzKbn?K$tZ--m zea4KXTo-Cdvvj@*pAgU_>3Lfc5+~D+e3fBAfmfrFeo{C~3fDlS-`N>l<>KoC!Mqe3 z&8{hM9U#NZ6aF;P-xcw{=xc@JCQei1?Sp~6dUCS7lnL%2rli277xEDFnS%&*I@RV5 z?3d-d`#Zi%k$QQ3D&*}|M~&B&ar>KRDo`tTn)5cY4tX7Z8v@Deybld8+U>BE+6cC$1p~4h zQI@H$sOz)kxuFzUeSlA0X%uOb`Ai*roXmD_`PF*+y+VREo)k%nf0OI<;RPvbXX^)8 zy;ZRwiN@$*{f&K|;b`9H)jiHW`5|I8#^c%PmSao)k{DlmTd&E>>?NHw9icvwr?}YR zZVTV#UhTO~A@;2%UB2tk&Cwjqb*N`Um1b#{t3)Gsdt7R4miS!Y&%%T8Mjy~tjh{@h ze9Hd8u*f)xYhamNJv0DV%Hhk4FUG_jZ0jN|M5}b)f=JoksK?T|E>`<|92&12+0exM zD#H1CK1M&eCb-b4|8J0|k)f-}{}~Idef1#wWh2J^sD1QgHuul&6%~Vv&bPe%cvj6YiZco zDqw8=PrnVnsr904|IBD}9hbMRCfGHAbh<~K&wF;xG_Hj$&AsuukeEx8VBAOiNTFax zNtQZjxtvbyt$y*yh82r0$FM2kauMG6uk`!Fr#)`}e?MUJM2o@QU!%usPdE|UTFNX1 z4C0g?Pl%H_PxS*x@`PUWBbM;rc;{z~z!YzY)s6Cy6Oj^tCZ-73b?hS;e2HMg`cy zv{R<5k8C%yz@uNv5wAdB3buT7(Or$}h_Fc+=;bHSQ?R%hzu;klJh z_G**-%&fqQ>(iwDdF$GB2XqZ!r0T<|Xdc2vjP>pq5?g-%Plf(pUHT8k+(Z(#33-+c zo-O#p_aMm#0SkWrmu@=4T?F2cGj*htOiJ>z><3|fC9EwNEducrql%|e(r7ft(OE^nK_csEJ z-V+)?2U08wv-?@JRv<0T_l6byV%XDF;#Y@E>t^p3xX+zeXDuh|P3uxwYTHIgtE2Da zpJcA^qF`iHcrjg4G^xx(F_G+QwNDjB=3>T1UWKbs&9eFmI;k94N4hbK5+-Ff|N7#$ zQT^<3fDZVWNrLRO-{6IO3NLXL?*0AVH-Xf7;-a`1IYD0>NC6p01a?>wKljVt4U#75 zZzkhf);b2%TY~z*?!FMcg}y1D8h~+G38hw+^t5aT7LL)vdfv&ge@wAqz0Lroj(q2` zDec%@U?fE`@_e^HL{l3w?=a;KF)Kl-EiX-WZ_1Dbw!h!DL}N&))0*t=QGpV1K({cy z24Kv>#6N#TVD}=!f5d=LD)kG-zt+}G9A(K9W}-@LX`TlqX*e5gm5@+iijx#T*GZm=_4?`G0Y!fKE5?#=m1_s?DFf+3(v-5G(km;oo&5c(C^FCIK~1 z6=RX>vFPyP;ByzO8?#})l$qW*c-wqmb#xKjfiB5M4bI5L6Sk4>RRC%T>9e*U4CMRH+imA%O8DLv57B*g*em#sHl?Hl_b60d-~-jGZ3aim6qhRpPTBtvGw|iESPlbxaFCAxiW0X$h|ie-G^yL4Y_2p% zk9Ma?(Jhsq7zWV=Ix6Y%`hdyy^~?yW-YhDL1Blc;#n_-!KG*#9RR5P_-=P18rLzo* zqm8mK?(XjH?h-t>2X}Xu;I6^l-4a}bd$8aHcY-?%5M*Hc+uc7?HC4!T_uKE>zW1Ex zym`-rZ*NIM3j^GDz^GH?t2rs)L3#FgEz#gCN%Hy-0*)#%$xQ@4VTl1g<>UO%Wa*7c zSOYER<}_U5x&9aUm-bh){t}>Hi-+p{1hpEB<9DS2stbI#C9Ss z%696ZDr&f`vk}tu=qPZ=0X!%mLl(8P3R1=fS-`!#hz~fBm#~RL(rFg|!O6oC(()J_&!3 z&Q+rrSQV2(gbg#X@BIIS1ScCu&_zY6^>Q=7+CrRI3vMMbLcgG{QBdagax`hu)WFYKbGh~*{;y;IDi5i4jc z2Hn)y0s}qyL=gOA)O>iPYyBFE(fvGts+RvGQMma!Lx1xN1<}Te;h$;WlEo$mD0h0U z=7>}~-FvGnrtCWut6KM$%e(+o5%_O|Wui##)2NBCKhxOv!t+iAP^TjWS>dOt$ z*#HqW;r+CzJkgj2elesA4#a(3-n>}H8a5cHIghdI7-h2^3e+Y~;`ClbV#R{5*+Fhy z>8Iiiir=@X=@rjT%BltwuN8C8RkO;-eT|zNSdHid=YL=rX|S#D4hF903jX`IOkuZy zb9ChKY*sbT+|P{o8qY~BPlNrR?f@BGDCI|@KsYm+cmXrIc(_zlLRQnJ#G2oc&mj<4 zurGjCz||u7^^G#3mOYDQ-8(fjvRA-z)i=F#w43xY8F%t;I$|^s?-;yC9O{A<-~siY z0OB1%x6zh2-<9JV0Y!WLhaaKWt}f_XWNC#_uV9Aq6tyLpAhK=^XhDCWw83*&R~ly|W#8qQ^7))v#nukQ)8BhK8yEo*dI;1j406r{`s#kEZR$~^Z! zFcl;BeJ(zrNmM|at}y{udnAnxQ=6$`q9Ean=jWu(MC-xDXmypJ*ERFw2h^oNHOSG= zxXTv(76!zGqlsJri0kJCR`|PCPPN+E`9q_HQrGZkBd!E;tMpHoJCQNyFhX_DDfqkqAJ$Y4`R?Q#@FxXYs z%JvJ80(!?K!7)j7LapT(?o{|gEG<=G;`k17;V)jvWa0WsCm+&B?^qNYcsiRT&mqmeA|wLDcFFlUYOb5+7G5$FGT z9(J6g)Wa8a^jAEG@w)Yr+waV0e_?AJ&vf3s{xV-xhZR0oD}yV+cGhE6Y&`?;`te^% z8vdbzF5>(S`WjqNOvpdDNyaGospBOg1ATqgNC2r-?pv*)eI5}<`Vf!uBRNl8+`2s+ z-XooG{$Ofpn`14*pjsS|@RX7T*l==8b)SN?_?J0-z+9yh0+k90%<$3Faw?UrU12uI zebHtF1Ptw8oTV5eYf%1M0po?x|IyysJ>Ze~>SzitvT@cEmAz@w10iA9ZOuiKS-e@e9$!T3Ch#E|PFFVaJ`7Bi%3$UG6H98Z-3c5LaQFOM72=M<6n7t7W`VEoFm+uB+=tXz-y+uaT?q`In2jba?)L#KHVNC>M8W;)1Nv+uYY+~D4J1D1-ML!1ldXZxtVCq4p=NN%oPC=I{TofYPd zIGRpd6Y!%r|0H$`o1rwS*Z<}QI&wpO!qxMImDE!9lF>OwCpbi8|NDry- zIT$4oaOPNyDGj=j0AR_T9CsE#HeSj}RtDUrfFda!5F@D@8;k<_B>{(zGPP=J4f?T5 zLeM0;<=~NaD#~JOqf%NiE`_Q7>bjYlnG4r2ros>AY#vh>`fs8!mhhC@t;;aA5XYpx zB!KjZVM}iiP+Yj3G$QhhT9AmoKmc6X%+xca7hKTaeCWhMHCc}wfZPQvJnQ`sOdOpo z?B+0(Yr&B60}g;T&$4K4piCQ$S~R{lOb>YC78(?NDpAO!hMFdjAQpaL9~<^es(X+J6ONPF0}927;w54vkAyc1_$2Mi1;j1t?E);cl__b{(<3aX_(e; zAk78X?Xl3`Ln7agJ*pjMWea>nx~ft59C1^L&<0;vPl!L_gsy#KqYd;a*LQOL7{_X5 z+yniLe%Nc!%-dGfp~3?rEKuNVF79k*a0+2rIm7tIXe8|`nodZUnqb0=XX3uj! zVBL-c+w@JGH7f&27IEa{A4V_USHGg}_N_Hzt_r%;)D5Ohn?11Qv9?gZ808ROy`4j(lW*SzUWbNCs=aVFSo{j7?Kbv@C*!X-|ebgs=ipQp~s2$=hI3X(8@1}6T|pYAPS%DZADey1_j6~sdh4$Vv$ z*#C3#%xuWzRLQfgKMbs>qJYIe+e~_`%FvRT0!>@)4YoaL-rr}o!T*)ymQ4ZIc6|~E zuf*Iy&7JP8L}PT1!0Lo@SKnc+@D(aEViyT^kZayYjA0fbGQjDAA4gtTe)g>%NM29? z5<-CUnv6SBOhKQtU4Xo%Ym5>xr+;7@-FW`hL`(12z>qPPy@G?|*dUKmSSZB9yzF;k zd&b`r7F$3Fml9^4?wH#+Ld1rsx9U2dRM*pCa>;>P>mmu`AkS~>*Olem)lHzI{wV~x zvM{Cuhmtu&1MWFT5cqnxkR=~bFMEWKkgk$L<3I`b$(r6vzm0Yuj>T^(^`&lEVK1q# zNdYwWt^>vM0HZF%PF^rwqUAg%4A=l1S=a{$DX~y^u`T{Da%@bjq|&V*T|_y5S<<`q zvqAziz0mNW#HP<|pRUkmCIrNaB}=f*w*6kZx5Uj1=BAds z2_MXy{ep12>OkeRF+IkQ)PBIxx5EMKm#fWX-%Ke!0r@C`DN1x8 z;u(PBoY&w*lCYdxZjnYh1BCdPZ=~ure22%)JV*$_3E4;EV44RlG)_ zp!OG%jgc{axJ2)h^psJc=y*0gtWq-I%(9z0;&OU66f^7$0qEF^g3S0EO`Pea6y4as zIY}-Udk>dwDz$``ACq-ZmSs?Kmc@fegHNOaXr@}~VHrnSr^U~%f1m)t^GFIcJvL$# zpnXSSxfuN$N{y(G2RT&=ls&p!Dh+S-Fts7Xi^7HzY4R7gJUts|xNO5{; zc^A}%+eyX_?qY^$g~p+7cU?@1D7;#BUXn(fbEgr4E?(-81b3^y2~cK94yi0OIH9AnxAmaHON>q=X4gF4PmiT!8D=7%#&6%L3 z2=fK5OqX4DCXeDyNjS}^+ROAbAEAH)C^yNv+I-sfn6}2=u@98{Kf{gPH4kKyG}EWA z4$?#B{kT32@-8L`f3Mn=5Ch(|dHXcnzpeZ|vPg>15L^*QCs1e=Rc;ED3s1q!e7}ME z9<0r=B~XB>Y_ijp8^!W6KU)|41Qp6B_Ye96!e8nK|ENHUn_t;=1es&jO;b{6aerOGZ_w zv_RlMC7g;#VJS#5$i-?;eBS>6!)FUC9xf;$!q`O6AWk0SD`w~hXXu|8@V@O+>_7$> z`BMcVZ*`~q^GaQh=Bqzm^(HCzrevuQMZ1cxz&Qdwf2~W%K3KnzQb|9yP_V7}mM3yf z48D(Fnv+`#n>;8{_ke-!7I-Y+Q7DLwSyJh)|Klo}b@H)uS=#|oI(YXdI~}UE1&)dk zj@J%*M6$!BwM8=+cL(Tz?+`Im#Qd`0p*43JPuGa6l>YY1_uGffbLzT@n3u`{i;Rf{#E&ci_3a8mu_SLA$6D2t)6XWgw{K)T{zGjr<0G(oo%uC z=NDhDa~d5DcPtF#kPS8r#)ZB*E+Rd&(mC}Sc^>;Wp`>j~)~iNu7+~zv%ynIRKx{Mv zKf-tIXl~;pw?mU~q7B{N-qBcBW`z$yOlo7`f=}$@TvgYBJjF9C2?tjvS^&bk%Qh2+ z3G%fp2-tBWj*`%{VHOth0g~d*|K3VYNcy|*>(R6O?HaOgJsYD87k4CAm36#Yp_`Vi zz6#QyeiwoMqg`6vyAO4XYS>MvW;+#;i)3a%imp~-_LGwEXOei5ac@&L2!qgG zYvze9>(a=461k~;kEN@pKhID}>NYmf3Sg%>ky%BCl zkX_k1_S&|zJC#d2dodoTSn?9u7m8;T#l`WvcVpJ{_1wUv+8gDBU9Y}eT%qs0BdFi0 z<{#;O=_khp$(&V3lhp3e8HZQUe}+u^^(inRyTWCaE~j+@<{LxScX7beYO2@NR~<>B2j8nV zkxa^u#pjsicZ3N|0x2@D-kpFOJ_zQMh(T116i=UTO`}oTe|ZD!U;IYEFaB!?FOR zql)*%IsE|znrRBw)9Z1-ZSn6bZ(f|~pQlJ%GIi#hNnv5j-cO2KPmW|=eia`|&_r?) z9{z5<0VUb;1qz>(EAo>9Bz~{ZC#87&bf-SSIFUOP@%PZk3wjp138NCe{OK-|!{fNh zG)2xW(Pz@%=39V4cJNPqAsBP~w~P}KNb?-m?CY>;W^Aj=9!Pwj&d{X>2=M4*_Ha-0-m3rH)_>yip2k}cQUFJ zqv6g$L()zt{y#8Q8`T%Dy`w)Y+s)QVkd7p7J+^e2mXZW4Qy6n;3J4JLv@g2+UWYPJ z`sd#%bTFi@E5H2wE4c()Rl0MlEdbVCl54;TQO}HO%bVYMtK;ZVkf^7qJkBbDFW7=o zcz5G}LGKval&@~+Gl5W`qlGx?#67uwhrIi`PU?=|l&#M7w&$cH-g=tGH&?CId! zE~-W}s3o0kdZ(Y~ZUp>D59=QD{F{)hq^{d~)%PkA!FR7}u4)ZmBh#Vl>XTV6RX^0= z5HhSZXlv?)V1~Y~sSe2oeqaxc>sZ2MyR5SnR`!`#T6(|=)=wFSz7MG$u8t*yrFd1V znnb?Oo0L1+INp%Sk+_Xe=4T$G+3jDyiUo}WhmmTVei zcLKy;&KiovZOG?(Hl94 z+(pI&tPOhYgTyAzZHq_~V<8+SH$PF8?rFtRNr$ZYx6WKGX7j-Jk4E`~Z=s!N6Q-jv&mu


    PbtX|jCT$8o%SU*8A)n(RpJ(~;?=^%7!B z1h1GKU(cbW+1@=Y@HSH2#}GhTP7BW!0ko;ix$1k>jL^BfnJfi0muHrjxY-c$;`$!l zjp;_Lsj;X7fyh**zb`Lvv#geE)3;W#rVt zS_~ED5X55=aOTjc_nAn*f0>By?Gv(e_xfPsADhL2bDq?lUq(}UJUzjK1LZyq-*O+m z#<@Rl6=Zlh8dMe)>CNV^)91@LncPj=+Y2GEdBA*!?Gt9$mpe z3TZ3>vDJHX*0P)XGzhvi13!AY8AwdIdC(J_$9yFl*HF>Xqk z#^OBI98qKR6X_uid+Y95s1JuV1K;*OtR_dEgSoBr^?q z^jBw>(f+&F13%KBRH*UR+D%XOQ*`rrh>3u1(`z@x<$?A1vwmCCco^LUhhAN)>hODg z{U>GOq+C(l_V)2&+O9-}S9Yk{?s$BmkN-PmBbZ~9aOOU-5(A%@5NBCZ>|STV1YXab z9M+bcZdKo*RI+K?{sh11`0mzVjATF{%x2l`pD73g;j!pS$kz#(g?0PwE|tNGI6Dz- zu5R!|deyOn=V(SiUQNpj%PtRon<%XTkBaZ!!pf|KGRU)}WuAVWWnb$LJ3LqOsFbJD zGN>jN4XSKx2;VCkbWOGz%AHR2<*~|doGN5zu}t^n!}x?6S(S>I-65^Jiryo?Y|^dw z$;-~f(J3mEZ%Nn$nYd#RdNyVm^j#5_MK;#g>(7vBhfnB1iHbNI%**qjgwar#({yQ4 z?-Sz^zc|hDTC*wm3n(inD(E!}cC%2R+cwRL$b6=+j_@IIWvCs`*OUwdDyF%whSUCH z+#Ij(SjtQAESID6ynGF+{VGs{X-+y;?X(=CxJ57}ODj3}{2^!6Bb<=n^pJh^*hw0hVZeABvU1N#1o9%9|3BhCB$YS~4S! z`_M8wtQo)ek8p0Dc7V|exf%qf(ma753VG!GMJfE#Ty*oD;Y^r3qdmbTf)Owuy-75o z1$32fcV8nn#?=li)KG1#&O@uRMf_ls3O@E($ePfYtD-RZ#BLD%QlwM%;YALzoS$v@ z)C<;-hf>sSbmo40gLvI+ozs@E=1GaS;5=-vl=Z)kQ8^Hi{;2$?XC-worxmtnjkoy2_q1oxgmU0x91R-fj;C)IWYh;}|?gDm!On-tzJ{OpivxG0$HxiX@KUM={KLuSf^W_ zl7}3NIYOqdeF^AkTxjiS_JgfoQ+{pxdqQ&|p#mPCQx-XUNM%8Dk>fbtm&_6sA*7&} zj`y{v^oxcXZ8!u~*3^#V~DbsGcDCL1Gizs}cWYd` z&oo^p-eY~O^VRypY@p9>v`In0n@yNEba%~Y>DF#PLvy2M&H9i>MO|mYnu6ct!`ICX|@{w z6}4v&H0B54@oKsGhi1-xS|`ynfR&KfGthRl8TWmBK-K3dt6wP^ys&_5a~wm*Ucri` z+D&@l)pyzDls%rnsr&viiodsZcv7@Q0p=bjfL+M~S7^3qbKvf_a`h97LKmVFS6gDeEz=J2O%4y!O$Q ztGkOyDt7dFAjwR-4Y4&hg_DLaFH}+>Tps@xO{2u2W)misBY`&?v9dXcIoM5z$RL0d zl;EioQd60O?_qc;kadR=&fjnUZ6tACuh#wX$kHNStxO9Ofoj=Db)%lSjayFm{ezDi zI*~Gipq$kD<5K!^8396}>V@5;D{y%A;k8;^;gxRvN-eNd3zG(YQ)Q_^iqxX@!_im) zRwuLUBVc29BR+A8Yfu6IiL()%N{!z(4^A+1P>dUu0~@>{pmhRyOzGLl@J>$Z(EK;p zD1Uv0_Lz(NGr0}ig?PqAurq+qs_@QG9&rn)=IZwale1vrBE-_t{_pqMD=(U|l%lW_ z)XPglym2Xb_bU|m)gTVVfrK{D0@(NF&}Z@OB;HCB4os8!^iblKt!v7^;mIyf?%FIS z8Wlma%fN)<@G#EC{H9g8i>C&vJ%I=bN6UVmd~}atjIq!vyeW`Zx(M7*NOqL1O$L^7 z#dbKK>;@@8knM&SLr;7dgj#oS&PL^ljKs@Tg*hs9!ymQnIh!$F$3RT7Y|QW&DZW;? z#nkV%7IJY)qi$yJ8lYhE&?}ZR(T3;=i#hU-ZDj6ecq(_;C0d)IdAVY7P+f_Q(0&Yc zBJ@20qRIB1ECaZkz&@)&VpP+fGv;zC?ny+RjYvhrjG!cucWLM`${L(uRr*095ZSZA zMS-E`D+n zdw&ksg*`3^1IXSY{TTL4>eqnidr|MrkQIM2!a=i~k}Iq5_m zRy#@n6>Cs2{ECen=IINrOkUS`*6MvRKZDp0g@)lU<{e^%*2@Za25|`bO`n>~e$YQq z$n_i67Fg|))o7(Xu5f(bCMwlCCrY4aq(hk`8bb|L4Tb<_FY<>Zh5eqzzD3kduI;xQ z7mBy30rZt8&Kpj*ra4-*jAy7vTeWE z^fw?!`65^B7J33Bn6lUDC+fo>^9a*vaIndej-S}K?{eVlu{o3XoK+W6rLJy@0C`z? zx%%jrUjPn|1rI-3>1?<6%>C<<16u^PO^G&;-lbR!L`=_Jkby-RmFK;@e>GHBiploWWQ!qFZh~s{OmVy^ zYPI(oU-_V}vHZ;RTsBr+8&}4=q^nsxeAiD#m|^i^*4wwRhi7ssg6tw|pp15-x4n7% z3yef?U|Jtze?-7P{3O|Q;I0X zU4}1fs7X^K*}B@zq8m&#rMT_G_i;`nC>(N*+KlnI313AUPEZZjpDG!rU?tp&^rxoU zsi?u7rm$U7akL-@O|4K?cT)tYXOi*;7O7=M#j-vS8K}VpXR0Y8q3^WMyrLy^OzcMA zRrHxfVVuyHY~S}(sz!~gJnnauo<`v8?e2I}^#}OpY7HTh@sk2*tRESX_#veu#<{(Z zX!}M1B-cj`E7kXb$SAq627O!<_r6VT_D7a6_!}O?%Mr3nu(*pICczQ%z7!bvrH&@6 z!PBu)@!LSp`jA{c$cLJa_={7gtYUh;As3fS!XlquJg+ron9qsdqxlPx-hU^J!ZkEO zK5Qk$8wbiU8@h$AA{Yl_e{)H{Zof{yo)yOhC!CwTsw|<4F$zK$iQZHq&zU?6vKVUy zTroug1=!!9DdB}m7h`lEvBa($PoO2ylyE*Vw81U|baOU+p9U%CfzBwJekAKdvW+)V zw0;+XyfF2NX}Nt>Cfnph>d0{M5?8Ahi5e339}52xn9Z~O8>d2 z?{=k8-b@Up(Z!SOd*KHHo)V5Y4t%k+m}aBp)O1KEo7+^o-n*a0ugBx9Cv~6wxA1cI zn^CfPBvxZtr!~GZL(yYq6aDiU#H}o^SLhL;{z7Mx%%@aD!Op0#OzdkUx9hcx^R<}W zgr5C(7t`7oO$SU<-lcKBx&j$i>*9*@pn|A?<J$> z${RC%&)>o$2D~X4s>>FY!;Bu~o)_(Sx2_LTjDs=yr^g8!rZ#eJ{tzvdlS@Z;4|h~b zwDFhOLh6Z5i;wSCI+}>tJn}(+!TTb`X~ON95}VH|KYum`l1t02Tk{vvYfC_&+jo8h zct~~ic;3ADfwo#~`!45Y)z|lUEe11kdX5k@LFhDg+4J zM15Z?8XZ|*pm(68O5Q=JOBwiO{U7uo|311Ey&=i18zX@O-%k9hZ&JaJY5STY))9t9 zF21zsRr3uWIITXVeQ(A~!p8B19XtVL3cL~zgZw4IKFDtm-kp6vn5|@K?4%6vUvf<* zMPJ($%SnOGARW*Ve3k@N1v88Rt(%|++Mj0{{}yI<6&oUF$UyM@w8fwcY_*;D>h!om z0is`t$=Ay+8IMQEt`AmR=dORUO6cQXX2#Tj#t=jR4+I2gC5SaJd3so9JKk^jNBNxG zNk?tJFDXw)nb-^7(x^?bOCNjRc*T&586ZD%G8qK z|Mp<}-{?2pKY)}Sk)_uinB#n!g|J)&GrdAxh_UHUfv2L){XNv|(f&n5Zv;x%54RnN z=Zk94d3ke1;HE|@lOXgLQ4@Su$J}a{K)?wI?Rp*#p2j2bB3tqNRvPPnZ;CH)}o)s%B_ zTft+RC1Eyv!O#N*!A%dC1V)MBu(t^KYGCL~4hM24Z5E{ADcwP{QwPOQxk$+;=NsXCp*=c`+^D|M1sb_R+N1 z>NmO1wQ1xWtwiJZ7!qIH|GwpT2G~5dIZ;?7MTm&=zJKL=UO%Rsi2_#bTs!Q8rk(v$A6-*{tiC*UFTZrh8L6p9Ma%>$2Yd)a zk*vO*7Hj?hQgivL3hBA6WgVFm_a6b8m)1@<5_=`bAuK#6Y1E!0T&{$t-GKS347%Na zeOh}jzqL=qci6O>zB5N8DALaRh`;m-YQ~1|0{n;MOn5+nvvN|GOeDE`xsn81=vdPT+Jy zgi)>tUf|(zaTzhti7eR;?8FJLu9Fmh6bU%@p+b(~`ktX>wb;I1h@|iCkj4C4@Dng+_$D~uJN}@>{v>715a&LKDpKSI zQF!p43!;axpELtG=e+n^ixTcJafJ@617;E9HWc2aY%nlo($5MVYCtaZvu%_;T5V7C-#M|BYr4urTLzPS zlm?|R5zO45c;gOSF8R)@%-T?X69|`11n_e6HKU^J6ODMi&E4@>+NWZ5 zjf|NS_By{DlOVT?VAm7#(hxr(fiTwJYQ%&x#C$5_&AG4Rjbz!6@k^Ac!atSFm^D|2 z^z12xtF1Z<2bg{}r7=y^{YqL}lY$$8Gh23Wpcm;{{UYCT#$WUo54GPNVTG5;hMEA$oZ?M&8p*KSFWzVyRe_$2XCbEbx@u$gyh;Se zH%9)5801k-abMDkC3Ak{F#{r*TF~>|N2DSBVdYXK)`ekdKvSiUmLaz@Q-}HKRin_{ z3y;oDnRZ*vI3oX0dhXkX_*jiu1G`z2JWppzuYI*HqN!wmq~D@R9=*3(SW-0Fwl&rZ zZ=9x;uF?hUCX8k|dquWVe#gU02gztXGZ&2gUN(Gybn2)eYtFOH&YJ;lu8>+5e6aV3f_~+R12UVTE7RL!rkaWt z^S2|lld*OnIZe;`%5g17CMSIySmReIv<_93iYw#XENNjIWD*}w zm`lpyAv*aHLDq<8|8iWP4(68Vo@Dg8R^h}$ZWG)KJ`USmA1$utGQBz7;}0ODLqg+a z;-KW3GX(8fHP>Y0M2aQ9EQ`S;DPl&2@l{5=F@5ecZqbN5pNT(o%;wQhjugYoYDn zqh%2yF|U>33GR=`i3A=eb*z+ID6;l>MP_rUFtxFq*7+yV1iwEuP;g0kq3>JM;6c}V zh^+irzw7h)4lx8)(r}JHW{j(S{Lz`38X4_Nb&oxx2mIhF!)R~|0 zBTu!`ODYqvU-N;zXr*`bKy`KW;ROzwjAywd=uS_!6$!kF#F@q3Ypa0WKy{M@R$)vy@GS245{Ub-vfjL?uV=UgLMXuf2yCHyZkp(JToAd z1z!rgtA5cQf0SJ=?fYPquXY!yZjcpk`UIzbpH&+4!AppcNJyDlVDiDtqDazQD*nQK zwx~1lNf3b|O)?nNJu3Yh0TYj8zS%}n^zqt7BJirkDXu{KOhKem|q+S zm}^_8CrsP(>G-_x$BkRfBp?fgh}vP`tD@Pdy}+yV(np|XySR7x=b!H&6FoXJc`QAD z{4;bDd}V)`?B7JRrJ3#g*9ePFdS;UL0f@gi1NNfj^|e7<@u(za%X6QZF)&O?QwO}B zSn43wVaQta#vI#1otAEU3V(6YEy&QN6OEX97k#>b^cTya1ZI!HbN&6e58rx=3r;Z_pr>r(W?7omNkqLW%)mOY-xM7@4f=;WsO=D5+P7&^Zj~0D1Sk zAM*=nXwe%zhNrnsn;2jcCII>Nk(32|5~;aC{w=L54{_hDuaULr7Gv1FHyI|ZXM{)J zV^ZhgkXN!S88+}(9ppM18_S4ao>bY`#g7Y6tO#{`n?}?>Aur}DmClH%XIH;bXfGp# zUNt{dcNl-GXGsIoVsj-6UVT2f!tHKRbNC(ci|XDvlBloHah_V2vFT#H2iohU>12Zp z6T@SjvsBKoyP{uFqF-#0me$(pOt76;XaJM$@RZ${zH2U&#Zicn2o%A(Vx*I#)Ilz; zICCw2jd!z>Cl`FtU3zZZXG{>d5w@%%-ru0t$lA;JFfpDmfD0B4T;OfHv7{jAIn%cHSo>8hX$lpLq^c_w*>dG0};k}}0| zEbb}<0cZQP*PkNc?_*o;1yxw?Ui4Yf(DMH6o2~&e89drQ=<5PoAX%L7J zs1p#FSB7)OhAoh#XEWs$#XY^J`icxA`fkYtuNZQ|F(R}xC#K$a(2M_jz&Umq9LnHu z3PYiIe{F2F;4pQ{ySoF#7fE8Qu`1kj_;o+;V9lcY9xziB^11QBD;qNA9N)=MpdXr; z%?1(o)i|2bzy&+_)2oXUrH9(S+n|D^663F2XIUmVnRa)&psxS_6<8O|*+H$8*Os?o8F@t=}&#PRGhW*N(r|sIc zN7e>hKMmT{ukfeN#3B5gJI4dlDIJdnJc<-z@B%zE-6)(5ps1*Y#V|s;ER`{rDzTvI zb!ypX!la+-oF*tP_nu{B`Ju}6@p~QB-Gejr$EOW6@-G`N-=Sruum;}7-}b+a#62wV z8|1yE^mZ z5*A%bC26A!TRs2{cGS6y7}IAJPAmGuOHF zGJ8Dvu9Ii4{S1v&400{kDjQwgzY0Dc@j+HO72HvMwe9P%oa8R0e7|?v1DRyQJX~;@ z)pz?@t+!Md87pn+t@$`aJ2rGG8<(TcFcbB#o3PWJclLzLXcNmE=)CN6qX@#^XCc~} zG~+pU>11C%7^vHj!1pBu`8BoPnmi4VCPhN)qadBd z&yku!RKTt-y|>VFFMJg>kaRh;U-^hfLpK!McDs_E zDY4Ro!p-*$#d?Zwp;m}#xOTNm6cq$z%>8N%bm!8Cn1THQs7@QDc1n@Oqi&Jv2@3U< zX)+kOK9)jVtxI;GuNa_}{7OJFmaC6nl>#2ZmlawI1>PkRN)v_+y^&nDUWfk)%t#6Md$zbX|{W6J;ZXk>424zFO_1uD5?eBI{_| zS6(pxm04hP2qubiclFJ@b4%&_s!NS!6HN8NBprO_9~RLd88_jHhzoA}u57g3n81UaFv z^L{ti$`-Cu)%eXRL_bM4uqp-2o49HQJIoB+XQmdqGY7u46DsFaPQQPfAGnm^-NW|& zxJ35~1U*=-;%D-DM*ds~w2N~}czot6xQny+d4flJ);_IkK{RGY3JHhCmvHeH2;~0U zhN;GGur{zA74im?(0V6JW-5r?S#+=}!79JGn(2_-xX-pa*65_$EyHx}xXt@OUi>Hl0`eGfd&!i_?=c~X36(XXF1#5lp+ctepfsy3b&PW%U z10l{~0xC|9>><2*4X4eqTal_N3ycwOL(Z54V5DgLMcvhOpWv3%`8tdqf5L|PyqxQc zO_G-HMvoNBwzX;slIIV;sCLbEn)ih7S%)Z6Soj@0v2?E>i@kq28ftrQnj`b&Wd;L| zKNt~f66w7Ie~ z7}?DZsmL;{Z#VkBGS_81LL0Z!FkdDUAuryEI84(@2CPJW3Hqg?K(m6)TLDmd@Vac4>Vu_ZwCsVc^xA%)Yn9$ zSu4&*rX9xwKSVh#Z2R=Ufv0x{4v@_j2$p=rm`uC6b$Hs3iC6>qnIq+xVjo5m%LP*<1Y&D{>Y@zpDmYKC7gfn^%K?xA8ceCP8V9Fl0?6IMFyZK3GEyYyXq=QEd#5It z$CTgM50b}mWO_J6G@@kmeyi#Yuv;xn))k2R9{%5>qRve^sGR0kdWLwh43IK>mv~c$Vw_GB(AY}|Lt#g5VQg3gr}U(iQ-$S{=}iFn-UQLqNcEqN zwGfbkF5a3-74^UUFlK#aXu;r#liQSvDL)=x>OC$Fc+*_c+=<8%P*}<40tZgk@SgHi zbMZpaT_C$9=DweO_o7;jeOmSo>wHgl_7(L#nn}N_=nAS~fmvD<@MgJ`zC&-nhzH2M zLs`dS6Tba^P-!`qp&q<5^NEZ8SbHQf9)ZUEi^Bz`d+Fh#{3yubS<6$^Z(p>MAcvD- zQDfspD^`5--3f`lF?Fo}{?t<|gE?dfZle2weB)$%L{k)aceu`5Yz6pjGm&2ar>0d4 z;wu`SIVHp&mWVWZt;+s3bYZ0Wo#1aGAH>@vpFTn{6=7X;&pXZ%<=%hoj6L&p|Mc7B zpAUf|ivskUbU-caRD)U5MYe8&8Jy}u=hOfBK5tQB=>p2KQ0=B%%k;q&3!oza4a7s} zk`u3!Q;&O3+dEw(4h=CG-2c0;`-7S&Pes$ee;g7A*XKWZA94SFN|%k-9}?YtT{L4m zrrb@1YJ;qvN;Pga^^1tXc&{NT@=Z41Z4GkWl?*pz4N(7zUQ99w7zUP=Y5f{N4Yil2 z`d0R1;M1XkH#X4bl*`U`b%MZfYMLK#Lng4L zn>0NCdd;I+MCbcS#0Xe_Zd-!cDj#|{ORwrLJ==GLfNPl{Y3iDe{rVJzGt*>=3^;AR zVMW<2f;$ywOGE!pwZ_~|-P36s1O_CVD*N)Iz6I>^h1eH!kUfiFKvu6JzkP(Y*&?Zc zGea!tjA7|IBkkZQW~RVuGoAINd-vNb!EkjkUx;5I`zYm!eI*$8HYjFrSSd$0G9oAw z;ZnE&Bv!yD1-{*+ihk?vse1L7^kfu+T(e?G`$@YNg8O^Mf)l&4{Fe2lQ~DRl|3uOM z{RNL5nMh&a4<90vp6)|v@EYSl`w^0d0-_Y79}tsX(6jplW$4$9IsfA-fZsQ`3Y5~$ znSX^^M6{(vaw5gS(Frl9mHY98KtKbTQmI@hAR5uUgD?PxEC~T8Fe0j%AroY5!vY_j zjX{Z3RdTtZ={M#^@-5;)*RmSg^^EPvnSwS4=NHjZVJn4b#^|Kwj!*Lr2@PHo>gFOd z+Vmf#O{Cx(CQW9OSD0TRAOHJ+#;8)1Jbe8braur36M|xg+Lo@)y)S4#*hRJRgl!Wx z?Gkq!RIE5}yO3SMCLrk16YOrJ;~%7BK`e`Smqc13JQz1zcCq=IW*%B*?K&7bayi9GN(QQC7ALr1Y+zhDD;| z^x&T_BklLBM+!Cke_CE7;=oqiV~4$#Kjk;6onsr)oBoMru@K~i&hA+)jNcbp8AOfC zMRy}>3JuxGG!|D%B%joX^$U)yV5Bp>xyTyJ_3%^`5gL-(SI(Pe1al$2SJLDpd9?5*i_mtglx^G)6(fBUi?SDu{OOS%Ih^*85_o<^{8?6#X)gt+eW| zl%chm!WLIb&NGH-q>W%h-oSZt2SPk7u(;i2_{{8PsrYl=v(C{=rI@|QP_Xvus>V#O+#rUN}(8`wWaDNo%*n3#q z{6JtYRZjCa9?wX+pH3-jSTx&5#%vKz|0NJ8vLa{0hfTe9vx@Lfp2|YTbj@eY9epZg zl$oY&C);>`XY$rNmEaW|yopP7ZE9U0-Y26%8daVbe4uCKWcE}1?Mr+Hh23ss^9X43 zQC6f7agqAF*VrEc=PD4c1xH@mAV{G5wkh5*)?Z9%C#-I4gN(>HRCmEkn1 zwS}H)M^iKm@WvGuixP&NKR{3mypvpc$-mi$+$LW-+D}K@#P|4`5JG0d!?FUc1t!xnEC)4|;OUyD|WdeVwW?xiuQ;&IrzBo+~SbxT0@y=LnC$_4LTMcVi zT{7VPvJI8a=g`5~u8K0@EFu9LOE%3C5`F0O?R|3$^Hb4Ak&+9%vb*hwUGx0k3)r** zxa~APhsiP4Y?kI+AVNg=Ee+G52M3!h3QwLI*qfF;5cc4*&n;@DhA(;I@ApWxTw}IHS|2aS zQP{B}L1?#tRj|HIAG5uZM#l2bZ)xlg!jJgi8KMe0ss9KrJ4WE<|IIW6tm_}rOLc!B z;6HusMVJ$ScVQRNWz%s8{vRBq@5QR;l^8hsrS)WI8^S|~ip16E0MY5lxdOEZexu7s zjZokp!;4Qq=)Pqk@UD2-UKO!KiOZ+`{G3fUat-+np<(}(@Z(}5Q#3q#HZITx2m zcG-v7m3<5N>jQySO|QJ_4@Ng(^hVS1><_wjJl*Nj6J6P9fdsNi{u5WUg?UfY@19tn zT)*}GzS5xrIvAn>pNcmilSJ#De;Ax{FB-2gf*DAbd~0)}tRM0c%99eC-#Ka@HcZRQ@OKV>xzV zC;XcqNCte4+}8LKi`Vcu_~I_>5%DL}lvrmvqE&}E#+(8w!GsWuEv_rR*s(nkE!qm?Sm@;>HF9Z zgac{enG2wr_H}okaOe7SczdJ=cHeKtUz`%Xvk1G=3>G3>tvAGy>kwKR+}NomXQloy zARYdo5AB6AJ~^5Rx;rWY_%P79a3nxupOHI)4~u;Ml?0G7(f&Qv6QD`w*exz{i-}$I z=|ulBoi7&f#D5ZTJe=ZuQ#U!k(?Rt9qF5O4-~l{kxK?$Em3EG=TnvWsA9L;Vj_(35 z$-;rrGl7-+VcIRSM0jPmAH>0RXEGqMyE)>gaF%JyT#}f|{UV`TuC+e&_qh5Zpr;RN zuZzetFs6`)e1GhoyY9n!-|rtdpF!6i5vddhR0?h%Y#_@3xJ&(${7=aDWkczHI!egU z2ZyzlU_J*J(2#7SKnvx>)B{5QcQVo!jd|eheUwfTHI8>{@H0{fGQSd3;`o{sM=8CL zC*Mm0& z_*ZLV1Qoij({78Y(#~6h9HECR0CMKa-6`Us=TQ<{C@FMg%f4#Yy z41<>|7oR-yzS(83cP9SIGyhFB#`oVP3Ka*M$6spA&5BKrFz??7JGp*UFOL@C2G7PP*8D z?sTl#I6H9l9}>vSgAh#ohsc)!oMldb zhYqnDV}9OL0wSCnHp3$gx^dNYTdNN>&_XZ8UdG`L(K;anTD3NMo5k8xRlhXN#5TAi z>b>j0`OcHhW&r8QU;1nRcL;?EEw)pb5}eiYI5(JtD_YHNO#f(@028jZ^5eQU93HfFxs3F z8BtTSI|tQxN+HmyR00l&o+w}a8`C^bx6@>b%Hpth@vNQ}1B}E8&tCIGq3P!kHHJ>U z?ByCwqQkBDPBxD8Uj<=}9~~%(kOo>wX2$UJq4mlKr)u=Y zWcqmwdw@L}wqEvsK-?`GilR2hQ!PQhkN;z&-rkb1WWYcrq_Ht_NN?7IMqAl_C&u&T z(T6iSoMAPiVhK(D*~7cA-sVc5$uYWhOS#f(;rqnGLALw`Hib10c?45MuT4IiYyN&n zT$flnh9*wQcw*{?*O@lgS>l1Tk;}=t7E#x!b)F%}loJ`8rBwBI8MrN1h{{R+hkQ$_ zv~GB4JwG-BO6GDV5xGfAYUJ)j`1~s zwM$WW35%K`ky2cQ6(SeEUDSj5jIcgv8Gkp(a##L1TFCPh&za+Q$!m!GYU&3(1g~(2 zb@=);5+5E+-iN=kXnI?<8!whJ?;nB^;8 zw+ezdg)JnnX5I#+^VC>L9+!ehyYZzmv+QKE=~{y=Xb0wYq+1%l)%olTePSg z@PsGO2}i{>^kNV2U$CW0!Y>>L|B~dEvLP4I6c?qvU2q#cHmfoJ+y#Lk?X+Z|4S{4w+W&9_|3B1_jsdF$lEifsjA#j05D&lJ~?uSKDMQ z6->SP0ikZWI0;+cHg){4ZT)Uspwaih6Gt#PYQI4Ig(ePXI~Ct-rwo3U5jD43-dJ;c z;Sd?9JHKYMtC=C`W{ZdLIa)jaF|loCK=;}dYS)Xaua??aUO=H=mHpI$0hkBpv;)cGsN3#C0@wV)35UkklZ*IuEz4xKLlE~;9XYh0|y}Tx(_KS_Q!I7GnFf44}IWpeDj| z%rvL7|ve4Sc0Cxp1CtOBb?R z{N|PJCyp=JDRx|0L^A=S5~)vImU!#OhiMRqhY&`Fn9&e69vy|7k+dFv9KEsvFS}8N zhC!W7x)^0gEfd~U`ypotRp4j%KnMlF)QZKmd~Zg$nRH0zWUUL)R_yk#5ZexFz{ShD z-X05)TU-K4PAstFc+&FJ>CC`(-Gh!5>;STJPLV4!;jri<_~SJ;Zrlx8#8RcHwqjR= zPaUdYy~l1A>G9BeVWz^bGZ<{CqQ58@x{@>r;h(WEwVgJzCe9o+^eO5l9hUjes!&`> zJA8SuQ4XUQeKUnbePn&{L z#1YpwgM^f7JZewnsU7`*4GN<0lK1k!j?CJXc&(#D-(m`BUDf<+o*MY{zV1(aAv2xg z;bCGf^R)*f177|bE1J;5^2ET_G{d{T%1`3B$}VT@MDsBT_xMZbhAuSD(^kQ(IW+or z0y1fXQ}KUjY3N8JFyb!3Do1S`&omHTiHvH*CGAlp9u3x3BXch^R@q;^$7&5MxN9BN zO(Ji#vld(`+4;EEgtRit*w8`eL$;&alS9OPso;(sOpi@#WOzOWE;+Vf&n!;wL1UT- zb;YJ@`bZbY`Y#mg{faPG%yA*d25!g=kf1dJxeEzyjDiUX>gYS|3D$zi@FNNvF+At2L-w~ViAydM2UiD-WeK54Mi7aNW+Q!*$k( z3t#-Vx763rvwn{?qp%;CqNxt^^BnfMpff56d^W~gr;Yw<8UOiTVU`_$68PEL*!OI#7sKlV+ zCJGsMtuE0E^ko~uTNl0JFcl}ds$dMyV3(M!+S>*7e??a4OZ5P|jD>_D~4h0Q)Pllcr6RMWI;p`E< zg%v%I{b-^&>9^U-7xaLtXRUropMzq$b^xUiA-Y@jp0&hjv?TgylMOsCD?=Zowryp} z*CC4VT0>XSjtLNChk9VIr^; zxRH=p`GM_ROJi7=Ix5^o=;p%Twelt5C{=D7b(sonbVP=jq-HbXw~q9&b0x z>AnbbTzvwCitq(nVOs%-loezZBk3_q93{ z8@_a^-|ZPOe)7!b`}*Fiy07|@EH}6ZZm7gR@4c76-MW-Xn``wY>c-6``zL=pwudk0 zYiR$qX*k?DlLD+t_tij++NdYzk&U z=hR}UBPWn(b?q)aP*SASRKzrH7g-lh!5Xo(`qjNI)e^15mv44E=CO+Kgbo`)GJxeN z*h*xauZ)VPG<8=#yKrz_aLrc~%=RzG!-Cs73`pAE#SkOLf9jlQ&aO$JRo3a&Jy??y zes^otdP%7%L9i(I&m{NIl*4*jGxxF5{i*wXjYBZE<2S`?FJ(VWAO^Oap^V?Q;&xL) z1}&=xB%mF)<8X!TzVzJ&fnT2Mqc*3uJ$27D!>6>F5C$napF8|;xd5!+$*5k}Jb2Z- z;j#`1|5HV@Z+wIKPuIi>4Hj);jD@&1k(t^zSUDAUQWF}>>v>9)J~O%MFfpudUWn~2C= z=MQB=PwcY|)PZiM229$hMcfM6+7s4AS!>$*Os zjN5~4!0S@@BRLB%Phk)FZXzmMF|u^bfu6I?U}VFbe>kBDWzJ-OZ2v2JBbG2jjJ@6m z!Qu|4i#7f;obhCy*ZSB1QVY`37u){W;a80ZE5Y4JqhKDytVsTxg3~EiBIX5Tf_k2) z`-}qL>{_sXnM8e!7`K>iKgo%5TG}BQ`&%&hq0peY?)(ovR9=#7zR=bOJPDcO%uGX3 zw8n(`Lo1f>z84HAuWleQjBmt`2857ZXlW26oQK}C_gaqO81ekcNYeg3s6pNx<;bg#`7e#i6IJ2P+`$Aq+G zw?W*4zjchjOt-M3bWCB7$h`p~^3|_y=%kS_tQy zAFvR}y>V9rG{yoE(s!Hei>kK~P2CQ0J7RlV@>_9p;l87+>QzgEJ$%`Q!oGsbg?uQ| zuM@rc?arsL6&Ds%ili(AG=l0+v~80&u@sQ2^$mL_Lbtf0^IEz56^ykg!SLZ`9KSMN zlR}xH9!3&rY6C4^)$7*3sd}dCht|@b8?$3r$i9Eq9)kk;(AuNI+m4e=;<1_tD(;V^D)HK-4yn-4ABDkXk#T)brbo6P6Tk>lM0w#F#` zH@&M_9|$ZdIQM4pB3RNKj>FOxb}__Jr&h0AkX~OYBm7&-H@8tuP2X3)9_-oBl}8|@ z&MSvU9#FqVf@NGri)3XP-{S1r`?PR%5h(ucL9mEGhu?U`3_M|SHF{F)55S@PCgh3_CTDH?rxI*(bRAC%Mu~#rF-cG1>o+wi0=}6xPFyzYS^NP#M{H zb8FjmmJ*atgF&7t(9L=JJN8dGnp?H)s7jtMO2c79;^jA{1INDWqFyIm_rSgeX;5Qr z4C(s)OVWdg4Kad;}EY5;pCdV?KHlcSDEBZn>}~jHB1v(i#_KWooN_B zI+(^+#(&WNnb{mqrT(jpMLs$Iga*w2%BMvA4rIVBGdW@$0$=kbKi{rh7KCnvA&~S@ zC)kzpBm)ky8=TYw+T6vF&$?y-O%9}1BN3Az{{7V|ywX&O(JdZ`yH3jQh_13Hb#nM8 zAE-S5arzQ4enY04P^#zoQWh%}aCq$W()gb_*?V5SXn}d=V%!%e{vs5he05X)`P+lo zGZ{>IHX@1*K&Jw(s8y6mA)3la!Q7`Uz&$2c#e`5fF)JJc)C^oJDa`Ipmd z2s)TMZ~G>@Ims+~WfU#)CB@5?aAzsK(IIn0s?VAxg_13BU=gZYv@INBm~BYs5O0Tg zm(tc6q|Iour^e!eh?8ool(8mp4RTL04aY21CvM<;g0WsBrJFA0_-71IH*<+`w3rCTa-M*Y(! zLRfQF4EJrOg*gSk@FkOYHq)#^=w#boZ)F>t8B?W^rGS0LN+x_P$^6GuX}Z%&7L=}@ zLb#W}R}cNcTXtfHHr5bPFDL0e9pl`-ANEs$Ha4I0wi&^kpbrubI-}A^ivtXgMfIhj zPazdTxcsIIBT^<-@{18$?)1`}JT|Tz%Ab-cG3;MdUr)O80`aesqLdxGaop~00Thtx z4yTgh#e;izp_Rpy?aVSi0&sd!lz>@r5CzPMC`3>1uEl{i2#CM_G+>XO(rEt9XzDxA zL5ljgHQalUg3?=77o~~>MCDKG$SRfRrhph~SN?y#b2lDJ{oOF{*RXqOujWxgnKXD$ zhAvb+XKEnWK2pqjg{;_@59;}74Qc+#g#?eeohRgr3lU%+uUO5E{@AFGCgCz3ZgM*T z@{Hl;c0NsMu;-e#Hl~emiY|LWb{$uaDzSF9=r7#?Xk2%yj#7RXGXHt#al32d0e*#h znIkS+0F#;H1|jf3u(bNS?`tIZQUXT!T)Y5myD;7I@PF$mv%0kZjkE+!b#(AkFZko> zu>@irK;QjN5J1JV512}G`Ok$di+6LvFVQS(K>GoFRt!__=l*~In4iS;ltxdLz(nG& zM7SI6Hc`#?$qjp675EV8SZfv9X1Ep^V)3>iTB{YivqJ7`c5~OPjWh92bHOkNr@1k= zi#+3{0(5XesrJxMIHTCIaK_Do_El4PB)*$No!7nZJ^c6zw5YEH{ahewN(H({SW|tQgytYi)^$Dgp6)&RQW_7+U7u zo}e7Onx^45JmkrHZ|!15BRnG|$u#n1s=T>oR%a75{)PX zr->soKQtH+ zP#ZpKCL`aa&qNy+Z9x`3$^IZuAO?WHo8P|1iu9AanUoD?$TX2sPU%*F@H(lPY9_(v2az;=&$Zfy&>=#MKsZk#V+x$kJ8Ks*g z5iUh97mEG|#ZWcpJSK<3V6Z)%f3-1lbR=+EGG5tS?Rn=_Orx0nK2Vv;qSaBAjeoT{ z7*6OVC&ubwL8+E_1B)O2AikU+*o15kL$gX^jX$M3KZ1a-oR~=4RL@`8z=^Fa{ng za2R-(I49EDjl7!~xLb~zAqp@c1?%GDJ%l$0baLDRw1*bU*zNRrgO>&R+VeWF9p!F@ zVotkvMcg1w(3&eha@Liis=osD(F6i-+Y=U%J6QI-HWelph~5D$2ouEvGXkR9#WO>T zV-0gKs1?qKb~h!>#sHGvh3h&a^6(A;EO1p!a z-xLJ4O(WNQqKXI3ZpzK=ImBcmpGrCjE0j{IEc`^l(OyWbOQQY4=bJ1g91_F`O~K&m z)83FV-}L+~AZ@WNYPlo)D;`~xBSfjVDIk3V+)NQY1mpg!kojqJ)mi^mq$S}TiV~F> z7b@n0)|u#eFe~gt=Cs6nnUM-glF=je)G+j7UQ!1jeK|8QW{Mc3$5N{J)E`BhZibblSck{Xye;C(mHL+XW#lw^E2bdTGM!X8>1V(T$t}u;q~EMwkO?j|&JutY|d6LLl7d%-&Y&Ia!ToeeK%0f12Ck-sSryzb~y7 z1#~02t=zbGK3^rz=R^W8ElZdEO7tM|bZ#A?$pWS!n82_Nvj*mY6=5I!NtvlDQcB?=JV%!>3Ooi+}cS zmlhNp{7b^{iS3HWOkDc~9^B2<0lM#n zy-zU-YnS*Y4ukZ_ow;aMI#gZNMlSb^VNEL2oJ+OmTtAgy6(x7iV%ALP2Ko?_@fGZm zRN9&eFm}vc?4=;-7Vp!BfX{QdWJ!0nD6Tf8_}BoYw%0iU%06bh?Wyq-$4?ah4^&S( z(Ey|36gf=~S6Q;vsqqFQ2{=9V#M+DT2{kWSe2#Y1D}9@+28(1X+wz!HdrALNbUfp! z@AD}iFOu`AlA8c_m#h%wuuANt$!HkQXN^^&0wi^6LN}KU{cG*1=pMP>O(`}862$gC z4!NAQaI~`8xT!Ds_IY^A5^gU|UHQ8u_S zdY0k*S4*tQ0oZa~iW%Xr4Vh;I4>c^|%Sb}ps0i%V#f?Lk(@Nx?yQapN%5>4fV;D~b zmWm6AfjhUI$G-YX+V+l{7??jE>o{NA26GkL7q%~r@r)@OZnb|ug+OMA>~TDZWX7xS zH&6Q5Bsdqcab`9W`LT6^v6=P^_KLvfaVsWPp|Vs9f;ukxUe`w(H#08m25>xwT2r#r zWr*91G+>R=pof0J3_IBaKXeXX8i>GX$ZMc9bfmw8g-yD0p%eU4x}7sKkyizxZn(dH zUD#ku>dlu%RQjQZqy3+C)kxzm$ke>*qf!FG9Ra21LtyCyWZB5uUOFc3h#M?3vTBh_%Uv1?1KovbyOnGXP(-BI0o+K6`4}Z$^khKa2~uY zQ%#U7_SCNcCA2A&ApZM&xufKhM7xe#?z zplMv_v#dEjG&YkDbX6a4+ddtOx>|v+?WmeiUhOdqd<6twth;&C&~twtSiCnp0Zk6% zEF(6HuonXl(TnLP;w+<--xZ81(E@iHll zEiGxnz02V$ptSRZ=4v@_*rkvbPYDAXdOIggT+e6dt4$MYJ^TWg7DobO~i+btb%@B$Xzn`rwc28Y)b6nj~2JVP?xje&u54ug~ekN91+aZoH zTkP@AK1{@6 z=s*dLtQDrDj&D|ehO`O(bb+g!OEqulCUh)-4uT=aEU??w%sstYC~56nb)>9oAK zd*HyKm2dh(y<^&n&Ps`Hpa(oU9C5AB)H{SqR72@?G1Y7% z;J1%^WVc28FQG!=Tv>&M<2loGT+=qrcw0mUmLuy@&f8sDJnPYFHEHM}E?9$C@be$M z+B1?7{#=`=Lhv*Je|xYn&SFH=*&M+vY?k_PyvFc5dC2XCwMnCmRG(Z$MDso1?Ra$t z2W{#eJf+u4INGOmgSfc|n^S{+c3|=%1D#!R6_} z1@z0VZF$L>W!vYvD5TYeP0J6h)e+Ct+ZOxlBTd&9g>0{rcI~$*JZm=^wDD&kiiVQ3 zU=8$I`vi>tE=2FNT@`-Z4kGq<`*)iUy#Ra2h(q&67x5>vc5m~G6NA-c!bCc2VOdVI zLJdV~Ax|y#Po{@8Ys{D`*+8t*LFMF0UM~%R^1}cxM95fDnptvXME}}~O{L!z)~4KwC11&S4R$5MQ)hci6u4v*No%Cv|_A-W~WYJwN>GDQ|IEF zOR;2#%hZ{m|C0D81sF< zo+_DM)e!KzG&0QnF;WV<{eDUt?R=$Sah!g?IvhSLYcAri9!26vl%~4Bp}sWbOp||v zg7_1fKo!(7jsZK30D$J?Y`X-J>x0-715K=l zl3;2%_>>v+OE^=?68De(LVpji@DA0I~pW%F^%!7~bU<&&w6#Q_O0H z-*Qg48a0Pv7C8}3_r}(U<&Y9Ze}?H+yH9?SOAng0#>T={T3!?i*0IQg8v}DFJslR1 zs*21rQN5ic9VWHa=yDm6*yD98_@uK1oF3HOA*aEw1iFKe_hIaYac=xhKVT%QD4Y?Z zq!oOo$S7W1>R*a>e}ABh5d=VeSA~CepwT}wTG8O+%Nu<8cG+jB8UnIyiN{{(x`MBW zHx=$-;l#mPPW@I}jXK*uI!1kMO`}zT>9#g@DMINx2Vn+__vB+hySsGK6WLyblG}VE zSAT6@tqhKy`)AGqfT4GbW~Pb$nxgSg$X zwz>YN2)TJw0sqb5|GeEkTN_H9+X4u>O$Fg_2WL_!PP9ZbL@<%(AY5m@S=y`FB$O1A z8Z`0Q7XQG?fD|by9Auxnq^%&t`&9+5f?rue5OloPStc*G=LrrD4&PitB8tZAi)8Yy zE_3yiHSZ>ELvQzS?}P}=UBF;&qT94>XYkQ~0fITJMu!TLw9eqI%<-b{dfL9+R6>|g zp$b>Q*b3AmHBz$=ZqF5tG8>{n!Q${+h|=G{Xpn`7amS?FU-Xnlb)&{wdzOoe3xiiN z6|jkC1U0XoNr8BWM%x&_t5~sB@;8cXZwZ`AqFz>$1(rgA#v=8Hv4Yqt?lvkP_~FAB z5Imy}enCij1`e&WX*vw#gIx_TZJsQ?37iz#{qJG>?Aar#}J`7R6v5028 zRcvx3k0@Q-Hi=d&0tTJZNeN&*0j&d8Z2WUMrRi~~S($tiUrcekG6gm78}jX(df$9| zku{xzcS~j|zPIP$t(%^=#&81CIgv1jeF$f^&+~EsH)~l>Ts2dD37_dcJ@WH+cXk{j zj-M!Wa|tb&jyyl0EN3b$PRk6qE`BRJK`clo)0!^ia1{xqvS;y@E9EbRyJ?BW$Rrb zEN$b6*T!NXhNaM8{ATMdA;`Ib&TOoCIpI%VP%xm}m|~PMG-edK^X(fy&jb-(g8Fkw z+0nRAz9=PXeP4af)djbafpe(rYw&RN(?VU5OPpBKAhEYo6q#6@a?7HOI+6)0P6DS# zaeU0c<>dW(W=n*S|M1UhqmkPoRAFez`q&8_C^tbRT^M_FG=){4I5K0}3u*l|P9m%1 zfo;EaZCYhpkyzOMZs!&CheusxjM1MAz!yko&h+wSNCmH&e7!u99XZT+;DIZGKW}{; zo}CUykgRo9WQ7Hzum1TCG8<>p2gy-EU%_NuCV2li=n&A36wF=JkE`bet!D;)5%i03 zMN9ijsGn|j1ag5}HyK8v-}UMe#-Vg2Q*r{eAjIVv1U+!**wU`r2D*FbM~FywFOiVL z%nmSUd1APWmW2gVB_>=_OYsz7_6=W++Zk>lD&aBLmnaMwvGavXx~)SLnMMTf;c7y} zIxOZD=(7P8&sw=4AJ2wHzLp`n?2{|(W9UoTiP3I~D#$G+H_z_~5Y7e_+1Wdgiu%($ zS=vLtLatb9o>t-k>f(WD+B&8uayxT~`I;-7m~VjwxvsP_d%qYR-o`Y-)l|+D(1wX$lejTg@TyhO9)BYCe~61sFK+AwW&-dzBa8HU29W z64I9W*!}^1gJJ;Oat;o`0kly&a-HAoA>>yR4vBhl~%7X)fha`@g4?jS>vW`Ps;NMkj}C< zz$}V@G%NgW6~R}J`3bF5`GBd>E9Gqwck$LV92~n`S7cWvR^;tj3iU4HVlMKGk>2JN z5m7SWfpJfLEFFIvZe}cdeJHscRg2me4EukG?*pTNgozLCbECeI6$sFGoXn8TRkao1 zW7S>leLP<>7_1H-TE-i_WFTo(DKZrZPXD_Xe7g&x!m7J0WHY@zTf}P^y%!Pl2&ke( zGb-V-bT=0eo3n7IY~WYHkOckpfw@oR!p_qg+acN-3~m*CyN$E&+5bDQm3Ee|)|SnJ z9M**CA<&rnthnjxFqO@!)Ugo;1$AD&Z=G(o7(SSsDkpCug*(CdTIHN7DRi9N@c7~U z7JM%#$7s~JiATVImvzwQ;%(WIMn=Y<+E`kdycz&{CE$Ft6Y#jUEvHVRz3M)F+L*^-F>te3GB+Y6R@z+2u?^U`1G_fXV3+^&{Mg}BMH8Ql7m4mfkvRZCMW-C*UZ7HFiRj(gg$5By0SJd@kgI8^Q{jtXj8f+`q z2bGy6I~7N0w_Uf?{l15=UD5)&+QhFNuh%3Hn#x>%$hS`tH*F#hR|*kKAV(^G_((6k zbo0a_`FGMx{8km?)=wGvAF;{<63d2|QqiURt#B&B`##z8BIN4!EQg!Fhxo~!s7q|S zS4o*G&|Vd7ndb4ZT*V?UVIMYq`lHJ05*K-CnZkY9O)?QqNw%thlJ=u4q;(SEdu?@* z$BIHv3I(=T-qAAk>i%mMP))jzcmQ2NjpAl(x>CRQX|db zYWG)^DK8yww{T!AR-0T)rpR;W;9zU{@0uFYoi%p2Mey~Sc*3Sejo)goL4Tl^@WO{! zFgLERJ-W{q^~G$zws!ei(bGd$86|0}iye>a4q}&wnGNk$RNila<}Q7YA=7VP9s?q+ ze;i%SyX|$NMCW(q2YkHgtS}gkRx1#RNpz~G2;dZ8sRx<<)U+dD{xA?%zHYz7?3jxq z;}lf1uuZ!N7ULeLzbSmFfY6YlcYaNTVO7mV>$L)abQo^S{@!5w6$UU zKJo*$Ue! zZQHi(sitnHoZ5E#p4a_++xGp0Bgvj4Sy@?uG-IKt;k2Zd%>uOACYv;912(tpecAhp$JFWaU#My@^{1Ch z6#iAF%o`shO)M~Z^G&&Nmzy7SF?8)XWOFo_UM;=R`QQ6<)a#I`H`7jYUu2#i%v}Pt zmnzTDMBs&vHoX)rs6piU1iZXQNB`-*)1l9$hgLgS0BKeh(Oj{M*aJc%faeomsRf}= zsJQh;=mTpgES!veu<9+u#INj2@8+yjm^zOW2AruIb=DHnk~L+opf=nTT65+dJo`~Y z1UWr>3e$dMhhO1t~clAyYeELvi0ty@*pG zEcA87W@LE!X7tt@yE)(TR7Ht70PPz50{jv3OE|!hqma(@{xw;Fz_VR`&|NgSxiyT? zDtilm)qZAi=kUIYQ{Ko--^B?j2TI9ynh8U*k4Z}nN1drElQX*gfg?EiUvtt5^qfF< zwr;_r5{w4l3zzH(f2cX7bUACOjF6qcmMC$-*oz(=Z;(CZ89i7oe?>GYMe2S}k$twU z5#KgZJs5K&ez|e!@Nmia4cYn@iyknQuBy8MrTtI+*bN(Em9@(i4NU@lV(o5=^&MuP zAR(ZWP;bHW5J=}KZ5<7&ky3+<_0dPv(790s(WC#H`3jl#P6p8g*vg)W@oC%wHjlw^ z!gVp5a5qT>+K{@*`u%RkQf{UA<>z@z3A%jl5?f*OVh5vRoocJ}G-|cUupXGQ*hhOAFh3_>Te8r{#ivbgI^|Al9sn^imc}EZ-m599)W`J z6TiCi+AL5+=@d=SMx+6{pstl0?BsMy!RcxU+%1eIu;T+EnZNiyp_&M9s=FrP_(E80OjdF3yFlIHwIs3W8wI0~QP zp?9|2(!X9nn!YLJ;iDwF0kaz9K(7iVW`F^HHBd_Bwn9~3lt1X@-D}rwWDdf1o7_Im zHw)JVJ|lO3#m>0q{(YcT7~_{l3#OHR5Um+^@K{o<)ma{K>;XB$lDV9Da9V|4%#1JR zVQf38llg-WZy(jSlxxFF)Y6zwbhgM}0e(e8R|fF5@_PD^>I^Tle3*T8Bh6<0#Q7V} z1U#3AH~Ed%lhyPRg#i*&%(oT4jlVo#li49KSlDYpR_8?2sR=P~L4CbMubT0^@Gzbx zxYla{RQrmm`WS68_U<{RZgruM5THm= z(67~oZ{$c_ar_PKmfHr-c=%|ooEGd$Txee*YF-vrM3lnvVUh`Vr1zB&69Psh$>Qeho1x5m;+fNYF6iS*(Dy?q?R>3a}G>$#cB4TS0T)b|%9j z$UB6L@DSic(TAEw=IP%eTh)*PCD_Al+A(f9q#m;n(Y|yA{@hR5QfiASmZ6O`b7>$ z6J&Rw8|B4C-GfQTExBx5xK~yitLJI_wZk1Xq*5O1Oh-B+$@ka!3(vkHB>T_@B!pO z#wv*$ab8XM8Rn~GTcze<=QxQI6X>~LV7gtE7(axYI zCH&CaXq6i23)aI_3q}-s{%r>m-6&~0M8OTK0-$@HTK?Q=fi;fkKUV*3!cCA5WeoJtSe_6p^i8FJ-m z=J32Tz`{qP6k|1ITQ|fnwe;arg6(cRgDzQ3j>6t;BJ&(DZqe%CD=AaE>B9DMu+uH! zOA#j^k}BAdYUSnpVJR@Ryxl1EnuEm9a`!I%R~&qD3uRC%DHuf zoi`ELVjRJJ(AMlMoQ6s~t(Ri1BpK+)Cf?oB;svuH+JjMzh;c)>Z7dmfHHOxqUkaA1 zO84Btq2SU;*;NAZ5=p%sa2Z*pa*!D_IKtfS?%GG20@VVM-bVNZYks&e%$z(YW1THM zIguOaYE{Yfxk1{NvprQDA;J)qfdT-|;c--+O_3l-p`$Es^U=}50g!J~RA#|c745U7Vq6|?+KYB$xa z>nlV4m$>pEoEHDnRm(Wp(#U~CLb|r^LEt#NM-lQ_D55|QSqV9Dv$FgAf=$&6OG2pR z>qr@W1>sjrJG@5Icou3(Pj zo}tjMZFi_IE?{BZ_W$~}|LM40H4&HJzxa%IKBK=TX6I9K&kgCS2!HgV`2*Aho(D#S zc%wJ}JdjDggS~}V^5}jfR>D^1=o)?KW6yr^W33hg4sywloOwy)CXLj?-Qv3gy#j}Y z1t?|3{{L!52pbDnkcrrT;z4x(I2jz& zZvp~bsnFCoS!Cv$77dx)TAg5j!O0@NIf`IYm2p$R_QuE#h#B?27v6hGl6bBO7Q*L5 zI#Zc(@Ku^578YnS9J~aG2%gCI8a31pmHrv_9*SRBO{05dFlC5#yS9Y62I6m68PJZ; zr#i-e?ya&fEnv;z1`ISlq5=C-S}Q}sW5dsFj6gMXh5NC1IX~(GpVA)rkHQwUk|Wq& zG?o}j(HUZxzKu`*{|764!Fu#6v1QyXvLmQ{wk~{%@G9kz zKqe5)q^vz$Q_L69S= zcoxL$1-uqjIOzmYq-fVbj^4eR5v6GN>lBrD+lT|Cp$)-X2GQGvv3n<|l`(J?O4zP& zP`#1>kOfBvJVeV+r+6;Wl-3Q?B{+{4QJWVsBWNJ=5TdVK;F`W{6pA>^m2{WJScaHI zdkRF6@vM+)05o9XLS-3bE*8%!{vx3jxQyp8Xu#q|k|PK6EauRxO_d$rK`owy$l%rx zpAo0s?@3lyGfpkWYP`B7qamG%37W6n$Z9Equ8fi0Pv!6 zj2w7le@{L7j{fT!FJu(2#&^>P=C6TmZ}_%Zt8Mul-Vc*J-<=M_O)&=<&)eJuk5M1`UY*9!mg(Q2e}%#H}v#u z`p&MKTomF?*uaBxUPprN+(D4ho8%ue@s!mE86K-}l|+r^8UQz36U1(poY@$r|2b?q zZQ@=IwuzNI4_om=-jnNsFbE3?kbpg|B>*0;2L?Y31NK^{pwR~q#la*!iU{z6bTpq2 z))nc6m;=lpk2mTnbujgwhV5|{G}+Lg7N1i$J?NO%83&=mDh#qUyDn@{qP{8BA@@$u0Wua&67lDz z4{mgFOB{mI{t@8g`Q(9TK(lUxk*uzML~n^$YG6zUv3!4NQD426mgQZz|eM^Uuz!2o_C1U3@ zo5)_}1^(kjyAfcmFI%(6aZipmHT*ioV=sR}#=Prkc+b5ODoY2jem77b={X;RINN zmKEo0k)VwdtukMKknWGw%N}UM{+}R_sCCNcz3vZo2b!TxO#(@6d-hdX4bJPMP!A$a zDyJL!jtAhY6pHHy(eG4m2!Ht?0IpC>i;uz+<=@0QiL>afFncgyfqVShRLrsqQy_Ml z9l)x#7PJJ_C>wvi!W2|^BI}~&YQQ$Pjio$)Mwqlw0(L9t&AZOxt>Qo>agT)X3?Eiv z$$t(R!nMVbX-;7WTVw$Tt>z1!=`i{9iM29+L7AjkBl1zB#iw*2&0}KTb~;yrMCvRA zY?1%{qf|B%7G?0>suA3p;5#deQwA`?1X;SMDSnn0gXMx&^VklZK6+$0uZHmr}PRFXrQ9P zJyG^i$*;zaC$sB1CxX0;=8Foc7H5tWU)Q45GJKv1FFd^b{YqUB+x+q+oW&$U zTuAZXD$XFd-?4&QLzIpZz4szN*k>PL#>!fQ{)e?m4!E@3J}`WzR(mzL9&qjtW=u9J{V*depHn83{|fe|AEl7h`wv$vdsnl{twS7k2CKp%nTEW7_bG5 zIxA?NW7rP8QMpH$ia#*QQDrptsUE7?uSpl3xgvq~yh0;D=S0Gw$Xi=9g_D(G7R?DI zrec)E*n0ytTU_X^5HwAS@4dR&Dp*izSr?a~ij|(~tr2dqOxu!a?I+dLI2I2~T7>Ox zkp2`67tF&b94$4^0KLhz1({G zFTq3+Khz`oUrJ78t5b1wxy$CS+elih)3d*)s9Va4%Y95n%Yj8_Jm$OxT_O88>+R>J z^>V7hj|cE<`4zurIR1Y9Q;<_-wwDVZe%(o_o$2shm$-EMOak=?--VV? z<@{6O+SgC!K@V}cBU1o z3Urt?iyKKe%#%yd-XuT8AtdFh9*PtZ2NE3CVYE*Q-AuE3Z9TTNH~-gV-|G8U(>&X6 zsq}wI^f_O?0wIf47ngo>JG)=?mi&w#$(hD4rLcXWl+^Y3MaxOzYGfi%bh2P83ihYC z^-gwm`xq1QR3oViHm45Z0C$~b6gkkp ziA0IZJNwFA2xG&!9CG^3J4Groj*(Vk@5R9J3 zgI9rTXeH?bH4maX?8UG*kglD{`Tv0MDVC&$ndco}#u(GE&@TP^MRlo|K#nDyt2@%R5X{xl4$Jqgd|CU zwgj8LA5R@}i1$k*=Q9H7wZE7fysDHahZXK*sJ-s6{~V%(eTm1x+HthP>w)U|i=MLF zjC8@d;B&Lch&Ua14Vf$6=%YrPz|%ie6X9qQ9lf2r)6Sm4lbrd5JdJ~_7-QgpG-e~9 zc5){lWb5VVbqVxqd%!$2p|>QAmUE>z{g`>ib%^E@6{zGEyiDCxEgJ?(@nAhT1M&EE z*l*&L@JXwWYAz0Qxv860n8e0dHnMwF4IN|fg-x@zX8$vdI+eo=HX7h}zDD!V6OTAo zx5`<@-iDMTd}d$r1^sY0&&bV{$aLD*%aei00lzar z?LHImfIG?nk%#6jCEXvAKrM9%4#UuD{rQTY5~e- z*8V^pM86@d`=oIs6U+n3$Z{f+RPoeG>i+$#CLKuFUX#@<-H}*ECIKyF(cj}Pw>KTa zMLSlFhvA#@LzYX9`_s+2!Rx2Eo5x(C>mAt;5_?njnTvGARR|n)!Os-yK41@whLWF) z^AJP6MIwD0n#VFivQYu2bN7TVPzNhjZqB*lVzgmLTvEi!(e&S>p742PlMW%nL%8)=}IsWngcGPE`qs+cw9(nFHqVN^A_QGIPmGDHd zhUPPTXxJ4P|C&ccP0-ToHM6V(#pJSiHCEp$Dm!XKUZwAwFBLM zuOwK|)sy3^?D|K&?G*knvTy3GrU@dpj=B~P9F=Yshw=4u%dZbE-mCXx$y>nF6!tC@ zK0m)2=E94nDaAkwxD=J+s*agKKWASMaN#jTSMqI}U-IpXP*;S{r0AR`GmU$+J^RhC zQhiI@cxAGd85Vf>b#k2ja(j2g(D%57s*Ky|l&NN|_T*QC!0fWFp zSHO@n-u3%&$GY41*ypUze1v8{(+59)kTxr@u5F=FL`*LR;NBII@-&Nx9QsZwR?DAu zv|O-vxuYxfO0OPYiXdXeSd~l#r1Ma3H`rswZ+xDdqAG-zBlOo7AEbb%i@i6eS1jX7 zn@U#+oxP5eb$78O#u@H3R8u&ek7YKt7ONwi?w9LgCJq_$_LA4njlg{!b@D z#T&en?6|hxpG}I*oEl3#bEVDRW41~a2(??HiC|gI)#hH(xr(0$Cd1wvEZlTTD}AyM z23^tXT$qvtl!m5AO+zuNC}iMC4huX6t+a!QofV8)7RD;oT7PvzL(qN_^p4l6txaZ# zd-AYU5LI&H78YDK{7lIDFpSqW^J#gnP{H{q4js{#MN`jwNj{8`HD&}nKB$BAYVksu zttK3V0T(nwYZd4W8M5IZP{<(z-MZm9PgnZj*}vpoqtDq+Noycd&@s7brK`9QwVaQA z74+aJ)FWBL9Sv}%WOt2DN++|GB9Z)>Zf-yi69tl=k9kfXPk%aI5JW`j;Sxezx36i^ zjIH2oR1#z7`x$d0n&_6ziI`1+C5pgE4;SSK#Tsf3&^=a1{9e0UW+u=k-f%9i(VOM#M_E*q_q49L@&x`Q>bI0Edj@u~REf87JquCRh zHeh`fw&m{6&kr8Y{S~~k&NvtJ;*!AAgxNd_O^^oe1P``ilErZ(cd`LrOU$!Wbf$dr zMtf$j{=wJdP-I=9TP^BxJEU}^&qtpvWgIi3FZfF|d2=bBMEBrh)QPy7rR)hYv|^Lr zoj_F@<**}k`rG1k7^H?&Ds&jyE$@5_VMJ|0n?oNb5!y|5r1hpLj2P5uGqwCTe7DVo zUxOY_pVZFI#DNz|4Lu^q`%Dz9Zhg|~2z5nz%%i3xu{r^`qL)xrHd`A=CZhNaANis6 z=^H?>3!7Yi8d+74`9r>U1Wxu;K9O4uA-s+-*B{TOnGODk#SCaOkqHBs4!vLmThVW8 z4XoB$Xak?hS_358&qZ^4wd4!+#i^CI`76mi?Km<9K+Q65V#UnqwHs0-Y5OZzx>#p| z;fE4T5CG@+dcIL*(6vRzQuV)OD$b^@$A>6Ki}n~uP!k3T$xIcmTv(lJ&F+7FB$76` zYlc-TdXSvY|4@D#hXjwzYPG2>*tv+mIVVf=M$Tp5@omBEwe>WN2AP7pkc-Xk8&HhNTK1~6u^3wiJy;7-CKRw z+wH(XX;&<-Pb$0MP^QM%xSK7psFS3PHj ztoMD1h+1wpY88>08X}$Od`YTs&O5vD7a#Ij(>RsNP#%|H@FDCxt9DeoUAq4A{YkPH zBXv-st~1cx>FSr$*DGoblp~jt&xBr67pyH{n3qmX0eQx!zDVm0lC%1Bp zyxpn6>GD>E*U75dl5`dL`EnARzr>@|R6DgfYU4O_`U~E+?QBk3Pg+3_xg-?FnL!SZ zC0W9f2IOJ6V=i=PMDc725IHINwKEj48vv;S)EybHN6=WkqCO*zcr!@gnXdS?o^U&r z@FSIIpg}M!=o_%Y%lpz7RkPx@Mb=N><15{~3kFGby`Ff>C(&esI5!4PiC0OhdNh~m8RmKl*Rs@DjyNfsJ=f zi4mtlrG9GTc>I+^Dg^zBQhX>OHd0=dv5NOE!T)8%Ge6>j%M8|>fu|uPLGPbYEM~8t z8sq|(p}Fc@IP4noC0F7}LI2+n=Ehcf8Nbc3W+F``Jbapm4M#Ut7UlhT+w8?nrtF8e z6h{05seq`tawyvjvM8Qp74bz*mHnIq#HGK62bec{q5LiTVrsu{DliM}*%=?Hz_~Ea z%jS)^rOh71mGFe^KV&D}=dC=E_|^jU=bIQ_@oUH76M4hE_vZ`Q*c44ejRf~kiKd9b z^4AcXBv>8Fs3*CY2X4#F#&JN8n#Y}Mog#YS8I#AOSS4VvMeHiQ8r(42AXe5@xwZbm zBudZqH&K93K!mKl?-m62Tu=D!u_j%oxx{*w%Z+l6+(os!#6v}<@VT9hY15gw|{`-+^Ri8dp+8F>xaz2fc5{9 z$ocuQPw0e=(Wou5Ka+XyL0tMeSAZceaNFKb*fC9!Mq;Djn&RFBV_(7!Nk#M6k+(bJ zEhjn0Xj{JTQv4wZxIG)NaB_-#x>$XHB-E3T{pa(V52h-7Gk|LgG3vnM2wm`XxVz6N z_`y9+NzwVQIOg?`7gst9@@{1+*!d)bV{bi}u&*plJ?4O|6kks>7|F_f65S7hfOh{4 zM;|bRvhRF5@W$v6v#xWElB_GttpU&q%YRkQE*7!KU|&v&bC3X?{u#rWN4z(zk}J%A zvzPJ^F^7{GaUD|YR>BkFf4Yb?<1J?cJGy%V_OKbiiZvIZ90C!R5FW+qU?Ka|Tj}t8 zK3WG+W;e$Ld5I&hF}PB4oJ<>u!fB(sbT(j>3g=V4be%-R6}jvx&0&lH98&glfYj^t ze}9hVv;_!GS^V^hz_L>PQguTi?UZFlic{%+EuUg(0^0Kg7o%?3oo&w-`vR z9;9q&$C`Tk9LT_pTxo0m^#KcqcTxTi)&>P5;7JrAqc#!vQ${EX)tfpjeYRJ09l!@P zAnJH3kTQ7vquR0S^jlref8z)aE@AN;;jsU4;BKOK@Wfh@S&|UoBiOFXxvG=ipS}*4 z8D0kyPd>>AKP=m=oBfjzjV$$GfjbJ+78y&bk~6#L1*Ht3ZV>${5FQ9(BJ`GxP8RjB zuflibl-92OVx9$IksuX_lHdtR(qQwL5;|R#r_=K@X6T>CA_?jcAtP>t!XhWAQ1EML z9amk4+s@CS^TXmG`k`E+uc1hya{6VF1vmnZ5D!rNqx=@c-ykyi$GD0J%2XHHv*%nW z*gB^3-F&-^mDI!bnj8xEm)c+c_$9z$aKs$T(5*Ji2dEvU{x3JkYX)F>^iG|aEgwV& ziUG`(rN=SC%d6@qBb)@opVNj!^*n?I-st15kuQ3nGN#|>yU6bB3p$7&-66Rf;`C1Y zI30y@AABhxj&3i;M82;O$Si(ghg#Cl%H3;8VUL$kg%p@w! z9!YF`JyrZ5^2<+mZF&cl4dq`?;rXS`N`NaJz#q5VoR4e{z)^}*_l2=rBKoyb| z(Vf({V?xlL%--e0@XCCTF(N7ZanTAwWuX(yk}c@_p}5Ln&EFnIl(6Kc0ZkGI|#-uJ<*GiN6~Xe5R8iEUSp|cF*J6@6d_M41^Y(U2&e$}aNcZw_sB9F8evXcq{uzR3%;n+^4 zBv;*em_~|i8}{eU6b9t!kN%j;0FVQFqpr*)CbV}@Bz}M3C(F^+UJ1C8=sR zuon2<2jG?nr&&8hIxmj%oG(4Q*#r|=@#;1XTR_5+S)+k!fQn;JsFxMOUu~4&l!j`F zsZdGN(efqqVq?Kv7yi zZLaZVDE0k7&QIVEzPRQ{W9}dB`yL2S?+JzZqgM&44!`HRYyLsjXzSVxd4TH#8FGg` z6ax>CG?Kfmf_G5EOZ@h8Ttr0-yyA*vPan^BYP#p}ABLqvWX;!7Q7)Dcel}uv7YfGb zeS>T}ETql6^IO@?MBnC!7!}5g$-Aw+K^QCCBk{HgzM^zT--8z*dPj-uCeg4(Sf&Pv zWUCCpUQS|L_x4U30Cwk!i=?{T1c~jWlml{#F!@)}15$!!x5Yp130SS+^-mi=I&po} z5~Q!A7b8JVRdFLcD=#U*-*QHRdVha!q>C9Jmw*d5orp({kw6Y3Zr}azBJez5;xt?l zp|A$u=tvia6AQNKE*aVV12QC`L4nnNVWr7$xq@lSq@}XAN$DVDGaMPb)|Uo;5E@1S zDwaDKU^hoH2E*33oI>tDrwt7N(9mg?FQ~te&ZLucIk_@U;9^hE+}RP9(1j0HoV_Ys z8wS9dah@CaL-KEiK&W&gNA9}R*QE#P*TvpZUuh*Q#U;V>!r;cxoRkT!GN;?Lv5FFmi2Fi|lX@N2u5f_^6s8jl| z#w&~5$C|4$sz!C2>?6X%b%0s!dL%pFi{HdVS39V(kqvkejq}iVARS)vA;)CxBiOCE!PD3?G`RS~S zCl@x802-?+n;g_Mgh+zQqDEi4ogP?m{8FIYxuB&qvlfCE0p8gj25TbZw3e&tc;QRA z!Au_!tyENoq{(w&-QZ9cY2|7v6lK^gl%eHbCMZcr zBj3+f-!$8?nkrO<4cr-{xE`^1aw{I^mi*Bm2 zO0$#d!YL|jQP@>b1Z7u8mW-k=@IpE#8+3{D!R5{3h(gV7JB zWo!dY8}CaF-!qa}Zrk68a_riq1W7B=7mpumGU6P19-ucL%Qq-0mlq-HlKpo-p0Bos zL^z6bKKupo1^S^WSbTa2i!O6VBjHHAH@_$zpF+2ImaA^Wkot+5S_E#@2m*l6nApzm z@+u;zyt1!8E;2OtvA-ve46PyZLNtkT~rxVDuk!n`xulJ0)`-RrelVo)5gTdFvgr{cJFV z#7WxMa<_M>iTVXa&+Y{(mxY}-6=~_>)_8)es7an4@1d!|d7mx4tS+edL&)#R#clmU z34JVa@#T?InYCgl7El>pUEaUi0y`6~Xh#>}=;BZv6_PqM(6%cMGx=+DTwY@#NT*g}ErKICI*FQFNd& zR4}56YvPf6(!-~T`nh~6JgLFhrF|R_;Z234(sMhg0asa66~#@l{0?@d{EjaQDyZ_2KtP#6~~k%(yvqdfSAQ7(E4yfR9hK-EM|C+r^&^v?EGK+loGBmJX8(n$dKg z(WKYUmANdXDzGWc94gL}6Md>QMk_r{IeIDTbaWYPJYFt@RDSvPy+8a)$6=b3|M_gJ z`FKrmJ?vt#YO?+g5V zb_U%;JXs_`B~j}qsw}nCd{ZAQIiX%tYM`E%UYWH6@=gUH`kr4m#%Ik(sx?bK@dRV- z_&V7+KwNI8OjByn;qQanpZELrr7Fn9&_QReNsJbQ&0s7Wdhc2V~VyArc_kd?1xF?w`|5w9BILmsL)Tr^ zm)f~Fn8*79KGv+tMrihN3!`t8+sQ5ctj#N15Sxb+z5Br%iXt;=XPePI`;FZ#gLhwz zFkkriN7MhJ{x=AKYzMQgrig)Km(Ka6r#10WZ(Z6X5FFqen_5%E8SdNsomyTPSLYm0 zA$4s>)ME^!+-{NQ+s5(lKD!$yXEAra!2b;C(5oPl6d8o3pV(0CUo^~2u(-VPj;j|a zW}SSA1xRg)F;lc}^M0xZAdw{c7G=rE=F6O{yQQr|g<=3+RU~bsSTIc!+HKUY4q`mu zbfc4ex~WWY+rP17;N*$y=4SHTmE#~}e*Z}07QS!>1x*PlIyes7&`wX6A0HEL0s3ov z8UCjoRcBgZ)o4{{&68SiM<10kK{CWKhuy+Ky=sH&9MvkrK>l5UH#%k?6B{1$me}h( zVYu}+!y<)*)}g_EGKVnk5GSl9T&HeL$_|1T>A~TxA?8uq`swsr7L_khK8D`$@EL!R zt`k|+Zj$`){M{kjFXsL}Zz3gVu~}?$GyB3m^A9T#4-0J0YtsrtH3cSt@M@YJY4$6+ za>T&##`Ox5g9h1dkfm|&fMA{1QPAG{SPP{cr=d>Lp%*IynZ3 zRZm7HmFT2duKZ`nIXa{3( z2WRi9hHsA8W~; zc5Y0hF!f;3@!JQgsX;U$;9}k)pzKt63hM&;@H!o6oq6m348B5`OQ*h` z$q2c~U9=-aooI~zZ12o`YL#m$Z9{lw_PFVwW`;8t3MHhG;O*8Xc4m{nyn?Nv_LG{$ zFD_UWDG|#P>9biV=*;e|J8;ToMC`#a(9X8fHz(vMo-d~@(Q zB~B|3LOnjbIqX}W#wfK0Z$*1rT@$3~vOsg>;zfL+$v53@{c7TG8Ww9@>Y-+GsiC); zrQSx)nV}sNQBwkX_iMLnnw2Z8#Yjz-$q(IfN8UU?Pd4H6MTE}w2wBEjORELa9Nc=1 zo#2;fF|u}Yi!#Z`b6k1JFR0K!u?SHgTih(2DF0f7J3D=>D))9pYa#HQz9jS3g0X9T z9Z~sViWDa-tQw>F$>_MzgWlWqzDwV4=2bm6_fAy>)h~WXuYUpkk+?Yn^t~G4>D^F^ zmFz#xuEz1_y`w6=bR@>)&)bmNrV&SjN<{{QlQg;4WKX-g!>{O))SO2{DNy)8@?9oa z_)pRmbu?&swYg@4tC1nn|Gs`RUFIu4&1pd>Col7LLV3M0!_15iVyeD1L0}a?Rforu zT99wP_5%mxLjc!H!1YAlwD-0PzLYK$6kdOi#TvS&y7&Q~X$uz%x!-AXR7{rA8*CJm zXf3+6OIX*$FtHsYJ14|&RO`@D$V+Q!#ez8D<@NaVJGTXhR|-`FM7T#SdW_ru84uXLQ@`a(!e3KLY1@bSQS6T zr=AbiA_kLr^F3?ukJ_Do{PW)+WZG9l8{Fwmuz+EXY(BzblG{iD(#1TjPnJ zZV02aojpl=L-;{7bF}{9>lutzcCX55Gf7r!mboya?5Gi#M@3SP3e!HA>O5=`IZX%z za1;KMShp&gMuLhS3r6cKxG%UVw)dGPF)7L*m*p z7f#YIDZx!)w*dID71C54*V9Nu38hCiG`Ol#c6;coZ4LCG(wx)E7>ql|e4%g|>q+AJl9;a~ zzrQ~AK!2p6s)RO-AWftW28APJ|Jt|J0zn%IsFS|cEwXT#mKlEXJO^q(7eNELVi|ja zq2X|X=fC?z8J%^Hwwaa67%m*x>UvR!g-D|!{=5}?bHq_8M7PAr)T&mr+iaNEES98B zMLLEkU5swc;tBhILSXUZNPSI(?iU;D2I)gaPCm(}b2B_jydIj{cJpQga$MY%P%b`mPm`Ic8Uz{$5EXWQt-!_T*) z$1Iyy<-0)aW$dT(07A$8Jj<`v^3Q6@D6c+JT)E9 zB?%$(AVLRqFvT{%{lgC7lW==D@Wn}I(8j#Ytq%X>{xBx^q24aw&DbP%&R+9_vfj(* zr7=zd6gQ^Pa!$YhNu42EM9HC6spJ?a1|&M3^%cQ;IM3l&YpIfb)?|g0&;BI20rP2* zV%j>J!@?lP#Bip)2PqA$s;+qw_mqiaJKo7QRNOb^oQ1u09=DTFq(HUxir2o$g>yE@ zY)M&bV5_y2HrO;K-Ee0z#RmDy;ZQN)o#XmzX?Ne}i1796;a{KO(U1Rqo}JHS&uGfo z8kklY{1bM>iavDg!0iMXY{FNoYb3^HM_}3@7AgS2S1J+#?^j^`qMS!Y%3)`i!{_4D zoIpSC{A;G9Wfx;VC^fZ_DSew--oh+nX^M8k&X=8}mFrS9nep=;a5quljmXIVwSf4~ zf1~5j>-#<L%N+~sfWEn!xfL}O z2A$?VJE?MyA11CSD4HSXjfuiu$FV~c*PH!mMuYT@;c9ReH{IZ1=G6!9LTuc>$L%_c z5FC4#t@qiwi2>#9aQ@N!i8>*Cr#MncvZ51El$(j_XfcIlFwEhmt*3x3_)B*TRL6DF ziOCVV4*1Y8K<5rAwh3hr=>V5an28$pk>3TtXpOCtCEF8{Y2URf7T%WP#+k+&ubMvA z?;b^KH{Gz;cD|W8^qpaw%+BpwuKXH?XXXWlOJ01VGV=WsRfr|o(z&cbhJ34EvsYqJ z=x$<5KEs}JVBrKf6tmqOyVSb=7vE11x#Bf30c@=0#n2ibiUjPGm|#(yo^mNMN$~-O zBW}E!JvPjqq<|G3TIN1|iycdg)=WRrzHZi+qT1_`D(Bywf4xCF)GJk!Mfc+V;_42a ze=5)n>o2TnZZ0HxtoPE5jWEU=byYl*Vu&EcQ3Afe_2RI%`G|S5TchzVI;ZpWeM_tR z*w=2tZ^quy6i(9M@6bcS_DD=ZKmw_cp#-ix8478-RNlVruzQYe6MolT6&MDAuJ(wr zj?>+a$`;T6?3XvjB8EPWB2ZohCvPq{9?}UTG=Z7efn4H%G{c4#q{7Z}ZU>x=u?H-R7G-27nnYxBVFlOxjLTXd8NP~AUKU!_AT*7r0u>9jgffmdDg?HO z8OBWMxwE17PyKHM$&qQcY-Tx1`CN#WJE0A*7cBDu2}H0beM-lU=Olu=ixFG)NlDHr z4dM9R4D8O>jApp(yzIkvzB5g}aQ^rVEODe*$iL*El8DY1*@FF{p6|5hvKp72_r#XjRUys;pKVHC~SM0Tx9g98Q){L^Q@P4C2h!96z?wGylE@cpz|-7E`C(Ajc!<81{#zlf#YE4 z*=oA-CO&*+_J>^du0A%U#*lK5hEn8@6kt0BGm07*nuhYa$ZfVDgWQSIJ|dRiv-lZR z!2|63!{21bV{Qw*!w9r3C*xBF%w#rR)crxSl=@*hHB87>>wwikYvj-kKZ*$=rPw&pBNAv_jbp+#m>k*pTIDiZq5Q)nHY$DDm*4WoGux|HwQYs&`XsaR zcqzId`+_$Tj-wB?X>pfBQn^?-7M^w4oBh5={0+sMq&~QpCnf=wNKFRf&_NFpt@gO9 zQcSlT4Zh#e@m!b$j5aF;+Wq>H3^ga?hB1G(?V znAF|NWF^#W7P-zg9bH35K4)u32g3wU145Zi_Elo`>qTxV!=U?}1wjR)sG`Rg-`!vE zj|A)b;q9XV|0qneh0aIP#9yes{mk8d>Q@1lg!*2EgCnWe71ejLk#5wE)jH6=e7cw_ z2ZG`_<37iYK`1lqX8h{^XeTwRYqxcl;gMai51Rmv>()@UNELJV|0C+HqT*`0u5Da{ zyAwP(0fIwtcXxMpx5ixp1PSi$1b24`4#8a;cleq+&;R}hjL|3b!R}pEYpr?BS)he^ zdWib0zYbu5`AiXef-YMSK8W70jF)(%wO#sY#sdVA2~uDW#q`Igu(M;BG!!W@Dl%fx z;5cDkb0M_AUt#3$)*B}wa7jH9>Jhvg zNMcFw&@fV1Ze@5rS+)JGZDYEP+Wzzi@h-`?w(9BvdC@jSdRzZu};lh{o?C0F%Zt;K89J zzUFjb8-8BlGZjPB8-L^$LDr8g;&HypaL5Q$lMNFt4^VlqjHW-dzlNBEM0mnk?EAYqPugEtz&Tj-OL5NM2B$s#7-bMU33DM{jU(7RMb$=kaG z{blGyxss^!z|$uJbt=W=kR~(_-Vrn88L3?c3-VN6VDJPo=m@=ilBdOrnjKXfWaJ68 zg}2!~5>A`RdEK-}XCFg9rYqrzH9DphOukbYDuCwB!)<$mOAduVBg7u(S5E;g_@|B` z(jv%1e$yK45}A;hlenC(reuh!($j(`>Y(NNbe!8w>!|gtprpqq_IS+CYx?jcEc`O# zPiW#$F)rWP7Koywj=1v6q07p+hWX`z;nwFS)a&jR^RbVKc(+qL^intE<-0&$IdJ7$ zgo3$l)1}9^*0ewix;qH>tJ#(KaIN;|M3~)zjn^1%Wca{_itZoBVh;H%WVKMBf-dPj zuNKOV4Fqb{*uYw9+DBf1-qF^EiOj`shU2|reJdU=e@2bXASbow#F&wGJ}Qb^FFC@_ ze(Modzay6DZ=6b5#Ps-(e&E5u8WH$ruh^2M?F4)r?H&d|)JV)kOxMR$Idy4Hc@Y>o-O&ZM@zOD(WEhf12hA&BhiVx`X zY6hDCVq$O0=&pxRw6~o%y_FLpzmq{;XMMy2jaxgd(=BYmbFi5czUO^G+tYLYVoFG1e=4hI`QAhNN+ZuRmv}u2c8K!WcAh#G%y=;=F6-)D?uoG zIW_h}gnSd&1YC6f7rpf%KJDkn^*{Ly^WqN)8R;#L+uZ0sU%4ALB1O7$?el-Xn<}tp z7zw za5HR{C9gM}j3KXNwnhGX-Bl41)?1p8h;eJhaN<-&mEN*yMWe6rU@;S#AaL8z8U8O@ zC*>cwf7%&9@*%Nz1#NT!T0|7UNu)7n@M&Rx<2!w)>)pw>1tWGlG5dGxo6ffGSV7S| zCS1{T$aJ$^q0bWy1UwC$XmqeyxRPVyU)h|GD&WL8ob79A z5wOwwku-F{+Cp^YHa@5g6N_{`nbz#oGm2Fpbp==~$qZaOWYSbTaaqB*UvH(K>9ne7d`*FXzr?_=S(QhhbZi|jq#Dm^mnu{7~| zrrb@upM=nu%5D)-BjtF3$nzsAaWWteryDP-{UIlgsIPE5x;>was;Ymu+fuKf^e}3` zgT9*lYm`eBq2}-ArIv72iJ5%&BRc+As_OC&Z@0#rW-lnB+oD#xk$O+1>R|&JhC+-u zYb%o29NwPMJI;&tlB^=Hy5~lm z?xaG4Y0qn|seF9}!=N{lb-(&P((OmJFiXN0bb%Vcl?Ao?E_ z{>l)q+{svaHfW5ko_=YbyyR7)?e3}TVkCKqIZ1 zWB$}B>`DM-ouMgp=-2t5KmXTX9*@f_5NSrIX0jcvpc@Ka7=&c?pqt7oXSf_%MI_3s zSjgumheM8#FuVF{Y*??944>>_x(vn-$ov?JDjzW{RoLBOeU2voL#o#joJc(N|d!b zUQbIo9d)fS^OVEY$2+cZJTAvBpW&JCnaq-k>WYxhEn0;PT*#r~_s`1+`iYsFn-J*l z?J2KevCLT$iQz->N_EbQ#0uYL-DZ+Ub(-~li4#V3o{M4U>U9zNJc&S}P*(5kM?5D; zF==RPL3(uV|NY6voOSQ%b`Mo6p&^jb7$Y;SbtlZh=Da+Juj2Xn+JK!Odt;OKsl3^Ht2{$XAx^gKKAf+Dc4n!r|^Rf)bLUK7lV|jdG5Ol5_yFFOEoRmJPrNE`;YUH#q za0uU;QACe`sycCOZiAh=cGQKf@Yw9Ch?XTzF8+MS3C{pzrF7}fhK}m|#x}?8vq{8Y zkfWl~?m{~B^WtJ>3IzR=bd-i3!yIF))qPSVM-G ziz~Ka>nyM^wFl@O@GD%%?YuN*(jsG5Ba*R39CfG#4>m^QcsciT#`}|37h0L|F zQO9?n@TFJY7oD{o_T}`HB8XNe1E0yp#{n5|8g=JsBdZ%8)s>^JDMer-4ct1>Uap~# ztj+V={C!W+-FXlRv+nQ9>NRLHeZnth9RI*;G-*ypw~+#dXh``ndNWtiLOTqPb1Qb% zriN^}Xf8`|mHxpt&)H9gEd)hfy?cn&^(Hg8pw?pVLO3(z5`jQ@HPy1W#z8J8jTrV}UPJ#aYH6Kf?p8qc-WiVXP zRnzID(?F^66-^RmEW?s-LHEVmAAT!kHWlxfeHGYh7@Mi`6Gup{%YTjj-0uwm(xm)Qq2-v54+>QTE~A+ z-uaQw-SAU?9@-7v`=@ozrFmqr*@5Vbz8n6@ApsZa3-75m2?}%x@Z*ST7N$o6(mcTN zZ7{~5Z6+N~ae%Q;mJ3tA+>_0yZ9Z=~^}@-I>Q7Y+4@)tXF9+lRoIBHq)+^XL)au6E zZCK430T){gEz1VY=2wfYYbb(8eu8ow3VZqg9Z&*Flc|Vz$%dBFzb5GD$s8lp1aXQb znapVIoY&FAu2ZNKv&4SZ55KyTe|x0`yJ)}kT6a8~U%HF#OH@pS)X&fzVTGDDPJ6_G znP3$@(?~qHkG>AMxKsL3S1QjnXG*B%GB=azXi*v`^Q@D+1-Z!Xe3bsFqYn#ai1t&o zDsCF^!)iCZgi6xZlB`{A*Pnf)%Ll7iK+Scq<)NJ|g>t{j%I)T*+aDm6aX}C+GV^>PG*>~o;%E$f z$VbV)_rH9Sb6)sR4b;$UJf3!{^&X0?Q9@=utAyv|5|gfJGEkfmn}~I(;#2t z=c*p`a)_X;J|3YoFyTZyT%1DwoN%ZSTIppor=l7ne^A`sYAZ#WVA^U>W(ELe6JoA8 z1-UOoIJZg`u_+=x|KH%G(LiY>9`t0*t6-Jz`YM!yh=fUAsPgW3MHbrt8K=u(6dgMk zEPXshEm&JW`#mf!!1KIB`0GVDYy!sk?_=Qiv+ljdwKU%wbKhMZpI%-&m z6^>o0$e9Xp-<321Ax5~Im0!V+<`Sbh=+BQAgnKh*#`985J-m=7DHIQL-aI9;T!%ZO ztV#$@lmh}A&PkQtRDeZnz;iaqR$Zed|6>-ijyBgvLD-G}tb@ z%?Y4%&mj7OBgtT(5y=}yS8$0o>>kVbA!7|0^@bu9TVGZ=DP7Ed!mugaCu?UW2Kr&E zAWCSG=Aw}Fg1-BvPxh^B&<^tJl0oGO&3&T)uPbN#1K`~6dAt;|*mV`b>vGve#~O@9Veqy& z|1udDA^^S^q~DDY?Xa2Y@IS<+ETd{CUIW8Qo5rx5-J&k!&xPsWbV$~;e6NRf{7>e( zb%0TVKiLgCV7k=;yU6-Pbq`7?@NJ<`M60^{%#`g2u#AndON`1I1PS_hn97P98GHZ6 z-Lq!hM{wFt6><-LudUErC*Hxhu*@%K_~uPz9td{lSf2pff{J*XV*iEUzoGx+B)BH7 z$+}<){Yx_k>~t`iMit1n`}u1?>3Li3MH^}*Y$a-;ApMyzFU#V=7un5x6{B;P2IeL5 z87{oK9|mf}&r5eBtL>c&MxLKVZtc%822xq?M<9X|H8gSX5pw{ge{>`-bs7`#qqNrQ zN<&pM;f<>L4J^tW71!4S%OdwdcGfo_#ux|4^M=?#TP%EJX+1*c!dlrQyjvTMhH5i11M~so zFn)ugkATyc&YBkH-_Y`7AyFG;j5aF`^pc=jgd>a4;9$$gfXRcv_5R8yh$S?Gv217Z zBtxSA6dGD1LM+d7SZ6rjrg!i?5bS^AUFgqO7|psGYO;rsQB1a#lpOnl-o-4!?mU26 zaV^Ah>JgZ)r7;g0;o{c97`{bG+DwO70B-m=O6{ycoLGETzse(Sw<|?lC);R>dcDT% zxO6ReJ4`@nOcse*$ahOY>5jf)yOZyu$I|eCvhD9KZ*nRKr!$9`HSlOA=Gao{g_SJ) zp4L23ZQFvT%}+Po)aLttWlB>;%^Z!aylr$c_akrd-pe{^Xh? zd=UN0k|qvT_9}0l&O*O&y`d;V{Ey^1EB2KpD2>1vp~qrQc3PxQVt`TCC9k_*u$qQG zSq@AE@v+XHcV7yW4tE$RtAz_Ai%JK#sO>Bd63+5@U$)^w>Uv$*SE4!_0-Z!>lt{KF ztuvZke38WPUZ8EB4Dx|B4^1t<4m3le-kW}-%8SrC7c&bl8L(y~Z1F2s~L2*c|#g9M2;A@Q1Oo&zj~CS!_!fXs0u{ z$we;}P4zn%&{u9e0{3CrqL0@@u<#Tq@ih7Snl}{87W~)R+5PxLgLP15iA(g5kZAot zc(oO2hv#kO9mNmG$LFO;E!|od{||Cm0f>hzmW?-HR+epK?7DfAL%vHckybCSX%hS- zYT#oB84A`8ZKn@#vOf1v8@fl@tE0k4qCHNb`|=aB`ZQxRS=iGnY)pk$wm-RnLqwyC zV#G5FW2uU_&`vmy2iXwqj^WCgV`�~?c|Jl33gq5C+itY+Y|+(V|wO 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 z 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 vKd;D8pGx>HhZH?Xt|4gmul6Yb(l_PBom6B*A~ literal 0 HcmV?d00001 diff --git a/org.tizen.sampledescriptions/html/images/appcalleecaller_ww.png b/org.tizen.sampledescriptions/html/images/appcalleecaller_ww.png new file mode 100644 index 0000000000000000000000000000000000000000..487508ca7b45d7b1123226f2acba28c3573c171f GIT binary patch literal 31117 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%0AOnkfiRhKs(Uk>kIZ!P?H$z6`Kun0GRxyso^sq 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