From 33bf9c89e531d26eadd9f283ff6c6c22dfba500f Mon Sep 17 00:00:00 2001 From: zhaoyuan17 Date: Fri, 24 Sep 2021 21:07:51 +0800 Subject: [PATCH] modify isNativeAbility and abilityInfo.formEnabled Signed-off-by: zhaoyuan17 --- .../include/appmgr/ams_mgr_interface.h | 2 - .../include/appmgr/ams_mgr_proxy.h | 2 - .../include/appmgr/ams_mgr_stub.h | 2 - .../include/appmgr/app_launch_data.h | 2 - .../include/appmgr/app_mgr_client.h | 2 - .../include/appmgr/app_mgr_constants.h | 3 - .../include/appmgr/app_mgr_interface.h | 2 - .../include/appmgr/app_mgr_proxy.h | 4 +- .../include/appmgr/app_mgr_stub.h | 2 - .../include/appmgr/app_process_data.h | 2 - .../include/appmgr/app_record_id.h | 2 - .../include/appmgr/app_scheduler_interface.h | 1 - .../include/appmgr/app_scheduler_proxy.h | 1 - .../include/appmgr/app_service_manager.h | 2 - .../include/appmgr/app_state_callback_host.h | 2 - .../include/appmgr/app_state_callback_proxy.h | 2 - .../include/appmgr/app_task_info.h | 2 - .../include/appmgr/dummy_configuration.h | 2 - .../include/appmgr/iapp_state_callback.h | 2 - .../include/appmgr/priority_object.h | 3 - .../include/appmgr/process_info.h | 2 - .../appexecfwk_core/include/appmgr/profile.h | 2 - .../src/appmgr/ams_mgr_proxy.cpp | 2 - .../src/appmgr/ams_mgr_stub.cpp | 1 - .../src/appmgr/app_launch_data.cpp | 2 - .../src/appmgr/app_mgr_client.cpp | 1 - .../src/appmgr/app_mgr_proxy.cpp | 5 +- .../src/appmgr/app_mgr_stub.cpp | 2 - .../src/appmgr/app_process_data.cpp | 2 - .../src/appmgr/app_record_id.cpp | 2 - .../src/appmgr/app_scheduler_host.cpp | 2 - .../src/appmgr/app_scheduler_proxy.cpp | 1 - .../src/appmgr/app_service_manager.cpp | 2 - .../src/appmgr/app_state_callback_proxy.cpp | 2 - .../src/appmgr/app_task_info.cpp | 2 - .../src/appmgr/dummy_configuration.cpp | 2 - .../src/appmgr/priority_object.cpp | 3 - .../src/appmgr/process_info.cpp | 2 - .../appexecfwk_core/src/appmgr/profile.cpp | 2 - .../include/threading/worker_pool.h | 2 +- .../src/threading/worker_pool.cpp | 6 +- kits/appkit/napi/appMgr/app_mgr.cpp | 7 +- kits/appkit/napi/bundlemgr/bundle_mgr.cpp | 6 +- .../include/app_mgr_service_event_handler.h | 1 - services/appmgr/include/cgroup_manager.h | 1 + services/appmgr/include/process_optimizer.h | 1 + .../appmgr/include/process_optimizer_uba.h | 5 + services/appmgr/src/app_mgr_service.cpp | 1 - services/appmgr/src/app_mgr_service_inner.cpp | 2 +- services/appmgr/src/app_running_manager.cpp | 1 - services/appmgr/src/cgroup_manager.cpp | 70 +- services/appmgr/src/lmks/lmks_main.cpp | 2 +- services/appmgr/src/lmks/lmks_server.cpp | 1 - services/appmgr/src/lmks/lmks_utils.cpp | 3 +- services/appmgr/src/lmks_client.cpp | 1 - services/appmgr/src/process_optimizer.cpp | 48 +- services/appmgr/src/process_optimizer_uba.cpp | 92 +-- .../test/mock/include/mock_ability_token.h | 5 +- .../mock/include/mock_ams_mgr_scheduler.h | 7 - .../test/mock/include/mock_app_mgr_service.h | 2 - .../mock/include/mock_app_mgr_service_inner.h | 5 - .../test/mock/include/mock_app_scheduler.h | 2 - .../test/mock/include/mock_app_service_mgr.h | 3 - .../test/mock/include/mock_app_spawn_client.h | 2 - .../test/mock/include/mock_app_spawn_socket.h | 3 - .../test/mock/include/mock_application.h | 3 - .../test/mock/include/mock_bundle_manager.h | 10 +- .../appmgr/test/mock/include/sys_mgr_client.h | 2 - .../appmgr/test/mock/include/system_ability.h | 2 - .../appmgr/test/mock/src/cgroup_manager.cpp | 4 - .../test/mock/src/mock_bundle_manager.cpp | 2 - .../test/mock/src/sys_mgr_client_mock.cpp | 2 - .../ams_app_death_recipient_test.cpp | 2 - .../ams_app_life_cycle_test.cpp | 3 +- .../ams_app_running_record_test.cpp | 2 - .../ams_mgr_scheduler_test.cpp | 3 - .../ams_process_optimizer_test.cpp | 5 +- .../ams_recent_app_list_test.cpp | 1 - .../ams_service_load_ability_process_test.cpp | 109 +++- .../app_mgr_service_event_handler_test.cpp | 13 +- services/bundlemgr/src/bundle_data_mgr.cpp | 13 +- .../bundlemgr/src/bundle_permission_mgr.cpp | 4 +- services/bundlemgr/src/bundle_profile.cpp | 6 +- ...ams_ability_running_record_module_test.cpp | 5 - .../ams_app_life_cycle_module_test.cpp | 58 +- .../ams_app_mgr_service_module_test.cpp | 10 +- .../ams_app_recent_list_module_test.cpp | 9 +- .../ams_app_running_record_module_test.cpp | 28 +- .../ams_app_service_flow_module_test.cpp | 7 +- .../ams_ipc_ams_mgr_module_test.cpp | 13 +- .../ams_ipc_app_mgr_module_test.cpp | 4 - .../ams_ipc_app_scheduler_module_test.cpp | 5 +- .../ams_process_optimizer_uba_module_test.cpp | 61 +- ...s_service_app_spawn_client_module_test.cpp | 14 +- .../ams_service_event_drive_module_test.cpp | 3 - .../ams_service_start_process_module_test.cpp | 2 - .../test/moduletest/utils/src/common_tool.cpp | 5 + .../amsKitSTAbilityManager.hap | Bin 114903 -> 123019 bytes .../amsKitSTAbilityManagerFirst.hap | Bin 0 -> 155524 bytes .../amssystemtestability/abilitySrc/BUILD.gn | 96 +-- .../src/main_ability.cpp | 12 +- .../src/second_ability.cpp | 12 +- .../amsAbilityAppendTestA/src/test_utils.cpp | 7 +- .../src/main_ability.cpp | 12 +- .../amsAbilityAppendTestB/src/test_utils.cpp | 7 +- .../amsAbilityVisibleTestPageA/BUILD.gn | 3 + .../include/amsabilityvisibletestpagea1.h | 3 + .../include/amsabilityvisibletestpagea2.h | 3 + .../include/amsabilityvisibletestpagea3.h | 3 + .../include/amsabilityvisibletestpagea4.h | 3 + .../src/amsabilityvisibletestpagea2.cpp | 2 +- .../src/amsabilityvisibletestpagea3.cpp | 2 +- .../src/amsabilityvisibletestpagea4.cpp | 4 +- .../amsAbilityVisibleTestServiceB/BUILD.gn | 3 + .../include/amsabilityvisibletestdata.h | 14 +- .../include/amsabilityvisibletestpageb1.h | 3 + .../include/amsabilityvisibletestpageb2.h | 5 + .../include/amsabilityvisibletestservice.h | 4 + .../include/amsabilityvisibletestservicea1.h | 4 + .../src/amsabilityvisibletestdata.cpp | 12 +- .../src/amsabilityvisibletestpageb1.cpp | 4 +- .../src/amsabilityvisibletestpageb2.cpp | 2 +- .../src/amsabilityvisibletestservice.cpp | 2 +- .../src/amsabilityvisibletestservicea1.cpp | 2 +- .../src/test_utils.cpp | 7 +- .../abilitySrc/amsDataSystemTestA/BUILD.gn | 3 + .../include/ams_st_data_ability_data_a.h | 13 +- .../src/ams_st_data_ability_data_a.cpp | 40 +- .../src/ams_st_data_ability_page_a.cpp | 34 +- .../abilitySrc/amsDataSystemTestB/BUILD.gn | 3 + .../include/ams_st_data_ability_data_b.h | 13 +- .../src/ams_st_data_ability_data_b.cpp | 40 +- .../src/ams_st_data_ability_page_b.cpp | 35 +- .../abilitySrc/amsDataSystemTestC/BUILD.gn | 3 + .../include/ams_st_data_ability_data_c1.h | 13 +- .../include/ams_st_data_ability_data_c2.h | 13 +- .../src/ams_st_data_ability_data_c1.cpp | 53 +- .../src/ams_st_data_ability_data_c2.cpp | 40 +- .../src/kit_test_ability_manager_second.cpp | 45 +- .../amsKitSTAbilityManagerFirst/BUILD.gn | 69 ++ .../amsKitSTAbilityManagerFirst/config.json | 40 ++ .../include/kit_test_ability_manager.h | 195 ++++++ .../include/test_utils.h | 41 ++ .../src/kit_test_ability_manager.cpp | 611 ++++++++++++++++++ .../src/test_utils.cpp | 57 ++ .../abilitySrc/amsKitSystemTestDataA/BUILD.gn | 3 + .../include/ams_st_kit_data_ability_data_a1.h | 13 +- .../include/ams_st_kit_data_ability_data_a2.h | 13 +- .../include/ams_st_kit_data_ability_data_a3.h | 13 +- .../src/ams_st_kit_data_ability_data_a1.cpp | 26 +- .../src/ams_st_kit_data_ability_data_a2.cpp | 26 +- .../src/ams_st_kit_data_ability_data_a3.cpp | 26 +- .../src/ams_st_kit_data_ability_page_a.cpp | 18 +- .../src/ams_st_kit_data_ability_service_a.cpp | 18 +- .../abilitySrc/amsKitSystemTestDataB/BUILD.gn | 3 + .../include/ams_st_kit_data_ability_data_b.h | 13 +- .../src/ams_st_kit_data_ability_data_b.cpp | 26 +- .../src/ams_st_kit_data_ability_page_b.cpp | 18 +- .../src/ams_st_kit_data_ability_service_b.cpp | 18 +- .../ams_ability_visible_test.cpp | 6 - .../ams/ams_kit_test/acts_ams_kit_test.cpp | 91 +-- 161 files changed, 1912 insertions(+), 781 deletions(-) create mode 100644 test/resource/ams/ams_page_ability_bundle/amsKitSTAbilityManagerFirst.hap create mode 100644 test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/BUILD.gn create mode 100644 test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/config.json create mode 100644 test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/include/kit_test_ability_manager.h create mode 100644 test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/include/test_utils.h create mode 100644 test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/src/kit_test_ability_manager.cpp create mode 100644 test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/src/test_utils.cpp diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_interface.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_interface.h index 5de610a3b3..5572cac4e0 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_interface.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_interface.h @@ -26,7 +26,6 @@ namespace OHOS { namespace AppExecFwk { - class IAmsMgr : public IRemoteBroker { public: DECLARE_INTERFACE_DESCRIPTOR(u"ohos.appexecfwk.IAmsMgr"); @@ -133,7 +132,6 @@ public: AMS_COMPEL_VERIFY_PERMISSION, }; }; - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_proxy.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_proxy.h index 656fba6238..086a8ad5c1 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_proxy.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_proxy.h @@ -22,7 +22,6 @@ namespace OHOS { namespace AppExecFwk { - class AmsMgrProxy : public IRemoteProxy { public: explicit AmsMgrProxy(const sptr &impl); @@ -123,7 +122,6 @@ private: private: static inline BrokerDelegator delegator_; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_AMS_MGR_CLIENT_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_stub.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_stub.h index 34450915bd..a5e9874ad8 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_stub.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/ams_mgr_stub.h @@ -25,7 +25,6 @@ namespace OHOS { namespace AppExecFwk { - class AmsMgrStub : public IRemoteStub { public: AmsMgrStub(); @@ -51,7 +50,6 @@ private: DISALLOW_COPY_AND_MOVE(AmsMgrStub); }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_AMS_MGR_STUB_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_launch_data.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_launch_data.h index b65b80abd4..a94a8bbd4b 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_launch_data.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_launch_data.h @@ -26,7 +26,6 @@ namespace OHOS { namespace AppExecFwk { - class AppLaunchData : public Parcelable { public: /** @@ -143,7 +142,6 @@ private: int32_t recordId_ = 0; int32_t uId_ = 0; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_APPMGR_INCLUDE_APP_LAUNCH_DATA_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_client.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_client.h index 323d60501e..55bf0be769 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_client.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_client.h @@ -27,7 +27,6 @@ namespace OHOS { namespace AppExecFwk { - class AppServiceManager; class AppMgrClient { @@ -173,7 +172,6 @@ private: std::unique_ptr serviceManager_; sptr remote_; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APP_MGR_CLIENT_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_constants.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_constants.h index 3ec06f155c..eedab3f619 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_constants.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_constants.h @@ -19,9 +19,7 @@ namespace OHOS { namespace AppExecFwk { namespace Constants { - const std::string APP_MGR_SERVICE_NAME = "AppMgrService"; - } // namespace Constants enum class ApplicationState { @@ -50,7 +48,6 @@ enum AppMgrResultCode { ERROR_SERVICE_NOT_READY, ERROR_SERVICE_NOT_CONNECTED, }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_MGR_CONSTANTS_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_interface.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_interface.h index 766e8d23f2..d6a380253a 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_interface.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_interface.h @@ -28,7 +28,6 @@ namespace OHOS { namespace AppExecFwk { - class IAppMgr : public IRemoteBroker { public: DECLARE_INTERFACE_DESCRIPTOR(u"ohos.appexecfwk.AppMgr"); @@ -153,7 +152,6 @@ public: AMS_APP_GET_APP_FREEZING_TIME, }; }; - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_proxy.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_proxy.h index 8d48bb48b0..e71ef18f25 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_proxy.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_proxy.h @@ -22,7 +22,6 @@ namespace OHOS { namespace AppExecFwk { - class AppMgrProxy : public IRemoteProxy { public: explicit AppMgrProxy(const sptr &impl); @@ -136,11 +135,10 @@ public: private: bool SendTransactCmd(IAppMgr::Message code, MessageParcel &data, MessageParcel &reply); bool WriteInterfaceToken(MessageParcel &data); - template + template int GetParcelableInfos(MessageParcel &reply, std::vector &parcelableInfos); static inline BrokerDelegator delegator_; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_MGR_CLIENT_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_stub.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_stub.h index b71636866b..094e29ec3b 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_stub.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_mgr_stub.h @@ -25,7 +25,6 @@ namespace OHOS { namespace AppExecFwk { - class AppMgrStub : public IRemoteStub { public: AppMgrStub(); @@ -53,7 +52,6 @@ private: DISALLOW_COPY_AND_MOVE(AppMgrStub); }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_MGR_STUB_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_process_data.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_process_data.h index aae4d47494..48e3a991ad 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_process_data.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_process_data.h @@ -24,7 +24,6 @@ namespace OHOS { namespace AppExecFwk { - struct AppProcessData : public Parcelable { /** * @brief read this Sequenceable object from a Parcel. @@ -54,7 +53,6 @@ struct AppProcessData : public Parcelable { pid_t pid = 0; int32_t uid = 0; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_PROCESS_DATA_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_record_id.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_record_id.h index fa9303e7eb..2a9bd31574 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_record_id.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_record_id.h @@ -18,7 +18,6 @@ namespace OHOS { namespace AppExecFwk { - class AppRecordId { public: /** @@ -28,7 +27,6 @@ public: */ static int32_t Create(); }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_RECORD_ID_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_scheduler_interface.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_scheduler_interface.h index 1f1799b74d..1a03aeb9c2 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_scheduler_interface.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_scheduler_interface.h @@ -138,7 +138,6 @@ public: SCHEDULE_PROCESS_SECURITY_EXIT_TRANSACTION, }; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_SCHEDULER_INTERFACE_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_scheduler_proxy.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_scheduler_proxy.h index a905082242..81647d7dd9 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_scheduler_proxy.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_scheduler_proxy.h @@ -126,7 +126,6 @@ private: bool WriteInterfaceToken(MessageParcel &data); static inline BrokerDelegator delegator_; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_SCHEDULER_CLIENT_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_service_manager.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_service_manager.h index 6cca44e060..fae5e8ea79 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_service_manager.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_service_manager.h @@ -20,7 +20,6 @@ namespace OHOS { namespace AppExecFwk { - class AppServiceManager { public: AppServiceManager() = default; @@ -33,7 +32,6 @@ public: */ virtual sptr GetAppMgrService() const; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APP_SERVICE_MANAGER_H \ No newline at end of file diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_state_callback_host.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_state_callback_host.h index 0c4ce2bb6d..eec80b8774 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_state_callback_host.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_state_callback_host.h @@ -26,7 +26,6 @@ namespace OHOS { namespace AppExecFwk { - class AppStateCallbackHost : public IRemoteStub { public: AppStateCallbackHost(); @@ -59,7 +58,6 @@ private: DISALLOW_COPY_AND_MOVE(AppStateCallbackHost); }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_STATE_CALLBACK_HOST_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_state_callback_proxy.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_state_callback_proxy.h index f563c110fb..b91ed58a34 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_state_callback_proxy.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_state_callback_proxy.h @@ -23,7 +23,6 @@ namespace OHOS { namespace AppExecFwk { - class AppStateCallbackProxy : public IRemoteProxy { public: explicit AppStateCallbackProxy(const sptr &impl); @@ -48,7 +47,6 @@ private: bool WriteInterfaceToken(MessageParcel &data); static inline BrokerDelegator delegator_; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_STATE_CALLBACK_PROXY_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_task_info.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_task_info.h index 653107c7c0..6e5de4b24f 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/app_task_info.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/app_task_info.h @@ -23,7 +23,6 @@ namespace OHOS { namespace AppExecFwk { - class AppTaskInfo : public Parcelable { public: /** @@ -110,7 +109,6 @@ private: pid_t pid_ = 0; int32_t appRecordId_ = 0; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_APP_TASK_INFO_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/dummy_configuration.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/dummy_configuration.h index aafe7767be..1c7db803e2 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/dummy_configuration.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/dummy_configuration.h @@ -23,7 +23,6 @@ namespace OHOS { namespace AppExecFwk { - class Configuration : public Parcelable { public: Configuration() = default; @@ -65,7 +64,6 @@ public: private: std::string testInfostr_; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_OHOS_CONFIGURATION_H \ No newline at end of file diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/iapp_state_callback.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/iapp_state_callback.h index e9fdfe6d3d..5abbef37c6 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/iapp_state_callback.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/iapp_state_callback.h @@ -24,7 +24,6 @@ namespace OHOS { namespace AppExecFwk { - class IAppStateCallback : public IRemoteBroker { public: DECLARE_INTERFACE_DESCRIPTOR(u"ohos.appexecfwk.AppStateCallback"); @@ -49,7 +48,6 @@ public: TRANSACT_ON_ABILITY_REQUEST_DONE, }; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_IAPP_STATE_CALLBACK_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/priority_object.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/priority_object.h index 64e71f3572..834e236801 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/priority_object.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/priority_object.h @@ -23,9 +23,7 @@ #include "parcel.h" namespace OHOS { - namespace AppExecFwk { - class PriorityObject : public Parcelable { public: PriorityObject() = default; @@ -160,7 +158,6 @@ private: bool visibleStatus_ = false; bool perceptibleStatus_ = false; }; - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/process_info.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/process_info.h index 969772a45f..f9247e2be3 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/process_info.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/process_info.h @@ -24,7 +24,6 @@ namespace OHOS { namespace AppExecFwk { - class ProcessInfo : public Parcelable { public: ProcessInfo() = default; @@ -77,7 +76,6 @@ private: std::string processName_; pid_t pid_ = 0; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_PROCESS_INFO_H diff --git a/interfaces/innerkits/appexecfwk_core/include/appmgr/profile.h b/interfaces/innerkits/appexecfwk_core/include/appmgr/profile.h index 6a0e8ca2e1..77589fcd9a 100644 --- a/interfaces/innerkits/appexecfwk_core/include/appmgr/profile.h +++ b/interfaces/innerkits/appexecfwk_core/include/appmgr/profile.h @@ -23,7 +23,6 @@ namespace OHOS { namespace AppExecFwk { - class Profile : public Parcelable { public: Profile() = default; @@ -65,7 +64,6 @@ public: private: std::string profileName_; // the name of the ability }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_APPMGR_PROFILE_H diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/ams_mgr_proxy.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/ams_mgr_proxy.cpp index b5b31a6412..5a309cb691 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/ams_mgr_proxy.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/ams_mgr_proxy.cpp @@ -23,7 +23,6 @@ namespace OHOS { namespace AppExecFwk { - AmsMgrProxy::AmsMgrProxy(const sptr &impl) : IRemoteProxy(impl) {} @@ -291,6 +290,5 @@ int AmsMgrProxy::CompelVerifyPermission(const std::string &permission, int pid, message = Str16ToStr8(reply.ReadString16()); return reply.ReadInt32(); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/ams_mgr_stub.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/ams_mgr_stub.cpp index 921d6096d3..177edf1602 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/ams_mgr_stub.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/ams_mgr_stub.cpp @@ -28,7 +28,6 @@ namespace OHOS { namespace AppExecFwk { - AmsMgrStub::AmsMgrStub() { memberFuncMap_[static_cast(IAmsMgr::Message::AMS_LOAD_ABILITY)] = &AmsMgrStub::HandleLoadAbility; diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_launch_data.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_launch_data.cpp index 3913757cdc..aee1ff4888 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_launch_data.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_launch_data.cpp @@ -19,7 +19,6 @@ namespace OHOS { namespace AppExecFwk { - void AppLaunchData::SetApplicationInfo(const ApplicationInfo &info) { applicationInfo_ = info; @@ -89,6 +88,5 @@ AppLaunchData *AppLaunchData::Unmarshalling(Parcel &parcel) } return appLaunchData; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_client.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_client.cpp index 061584e728..29d7f18009 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_client.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_client.cpp @@ -27,7 +27,6 @@ namespace OHOS { namespace AppExecFwk { - AppMgrClient::AppMgrClient() { SetServiceManager(std::make_unique()); diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_proxy.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_proxy.cpp index 38b506602f..b8f25cfc04 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_proxy.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_proxy.cpp @@ -23,7 +23,6 @@ namespace OHOS { namespace AppExecFwk { - AppMgrProxy::AppMgrProxy(const sptr &impl) : IRemoteProxy(impl) {} @@ -317,7 +316,6 @@ void AppMgrProxy::SetAppFreezingTime(int time) return; } APP_LOGD("end"); - } void AppMgrProxy::GetAppFreezingTime(int &time) @@ -339,7 +337,7 @@ void AppMgrProxy::GetAppFreezingTime(int &time) APP_LOGE("get freeze time : %{public}d ", time); } -template +template int AppMgrProxy::GetParcelableInfos(MessageParcel &reply, std::vector &parcelableInfos) { int32_t infoSize = reply.ReadInt32(); @@ -354,6 +352,5 @@ int AppMgrProxy::GetParcelableInfos(MessageParcel &reply, std::vector &parcel APP_LOGD("get parcelable infos success"); return NO_ERROR; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_stub.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_stub.cpp index 63aa66f90c..962993ebe5 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_stub.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_mgr_stub.cpp @@ -28,7 +28,6 @@ namespace OHOS { namespace AppExecFwk { - AppMgrStub::AppMgrStub() { memberFuncMap_[static_cast(IAppMgr::Message::AMS_APP_ATTACH_APPLICATION)] = @@ -184,6 +183,5 @@ int32_t AppMgrStub::HandleGetAppFreezingTime(MessageParcel &data, MessageParcel reply.WriteInt32(time); return NO_ERROR; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_process_data.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_process_data.cpp index 4f3c27071d..137b244ce9 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_process_data.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_process_data.cpp @@ -19,7 +19,6 @@ namespace OHOS { namespace AppExecFwk { - bool AppProcessData::Marshalling(Parcel &parcel) const { return (parcel.WriteString(appName) && parcel.WriteString(processName) && @@ -51,6 +50,5 @@ AppProcessData *AppProcessData::Unmarshalling(Parcel &parcel) } return appProcessData; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_record_id.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_record_id.cpp index ad465b779b..c1b5ab5705 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_record_id.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_record_id.cpp @@ -18,13 +18,11 @@ #include "app_record_id.h" namespace OHOS { namespace AppExecFwk { - int32_t AppRecordId::Create() { // Make it atomic to avoid multi app creating concurrently. static std::atomic_int id(0); return ++id; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_scheduler_host.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_scheduler_host.cpp index 06d8f2ee2b..79e206c185 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_scheduler_host.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_scheduler_host.cpp @@ -21,7 +21,6 @@ namespace OHOS { namespace AppExecFwk { - AppSchedulerHost::AppSchedulerHost() { memberFuncMap_[static_cast(IAppScheduler::Message::SCHEDULE_FOREGROUND_APPLICATION_TRANSACTION)] = @@ -164,6 +163,5 @@ int32_t AppSchedulerHost::HandleScheduleProcessSecurityExit(MessageParcel &data, ScheduleProcessSecurityExit(); return NO_ERROR; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_scheduler_proxy.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_scheduler_proxy.cpp index d76de6f142..0fb7eb6275 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_scheduler_proxy.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_scheduler_proxy.cpp @@ -269,6 +269,5 @@ void AppSchedulerProxy::ScheduleProcessSecurityExit() APP_LOGW("SendRequest is failed, error code: %{public}d", ret); } } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_service_manager.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_service_manager.cpp index 093d421dab..86e7bafb9e 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_service_manager.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_service_manager.cpp @@ -24,7 +24,6 @@ namespace OHOS { namespace AppExecFwk { - sptr AppServiceManager::GetAppMgrService() const { sptr systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); @@ -33,6 +32,5 @@ sptr AppServiceManager::GetAppMgrService() const } return systemAbilityMgr->GetSystemAbility(APP_MGR_SERVICE_ID); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_state_callback_proxy.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_state_callback_proxy.cpp index e3eed8ebda..9d2a8eeb1f 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_state_callback_proxy.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_state_callback_proxy.cpp @@ -21,7 +21,6 @@ namespace OHOS { namespace AppExecFwk { - AppStateCallbackProxy::AppStateCallbackProxy(const sptr &impl) : IRemoteProxy(impl) {} @@ -81,6 +80,5 @@ void AppStateCallbackProxy::OnAppStateChanged(const AppProcessData &appProcessDa } APP_LOGD("end"); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_task_info.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_task_info.cpp index 6af120bb40..6a81cd2c21 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/app_task_info.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/app_task_info.cpp @@ -19,7 +19,6 @@ namespace OHOS { namespace AppExecFwk { - const std::string &AppTaskInfo::GetName() const { return appName_; @@ -82,6 +81,5 @@ AppTaskInfo *AppTaskInfo::Unmarshalling(Parcel &parcel) } return appTaskInfo; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/dummy_configuration.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/dummy_configuration.cpp index 8950ae62e8..6f53059e0e 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/dummy_configuration.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/dummy_configuration.cpp @@ -21,7 +21,6 @@ namespace OHOS { namespace AppExecFwk { - Configuration::Configuration(const std::string &name) : testInfostr_(name) {} @@ -49,6 +48,5 @@ bool Configuration::Marshalling(Parcel &parcel) const } return true; } - } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/priority_object.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/priority_object.cpp index c5296ab36d..23298807f9 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/priority_object.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/priority_object.cpp @@ -18,9 +18,7 @@ #include "app_log_wrapper.h" namespace OHOS { - namespace AppExecFwk { - pid_t PriorityObject::GetPid() const { return pid_; @@ -141,6 +139,5 @@ PriorityObject *PriorityObject::Unmarshalling(Parcel &parcel) } return priorityObject; } - } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/process_info.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/process_info.cpp index e68ee62a48..e57d51f60f 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/process_info.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/process_info.cpp @@ -19,7 +19,6 @@ namespace OHOS { namespace AppExecFwk { - ProcessInfo::ProcessInfo(const std::string &name, const pid_t &pid) : processName_(name), pid_(pid) {} @@ -61,6 +60,5 @@ bool ProcessInfo::Marshalling(Parcel &parcel) const { return (parcel.WriteString16(Str8ToStr16(processName_)) && parcel.WriteInt32(pid_)); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/appexecfwk_core/src/appmgr/profile.cpp b/interfaces/innerkits/appexecfwk_core/src/appmgr/profile.cpp index 8d6ea3988e..8025773b66 100644 --- a/interfaces/innerkits/appexecfwk_core/src/appmgr/profile.cpp +++ b/interfaces/innerkits/appexecfwk_core/src/appmgr/profile.cpp @@ -21,7 +21,6 @@ namespace OHOS { namespace AppExecFwk { - Profile::Profile(const std::string &name) : profileName_(name) {} @@ -47,6 +46,5 @@ bool Profile::Marshalling(Parcel &parcel) const { return (parcel.WriteString16(Str8ToStr16(profileName_))); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/interfaces/innerkits/task_dispatcher/include/threading/worker_pool.h b/interfaces/innerkits/task_dispatcher/include/threading/worker_pool.h index edf8a97adc..eee7721300 100644 --- a/interfaces/innerkits/task_dispatcher/include/threading/worker_pool.h +++ b/interfaces/innerkits/task_dispatcher/include/threading/worker_pool.h @@ -80,7 +80,7 @@ private: static bool IsRunning(int ctl); - static int GetStateFromControl(int ctl); + static int GetStateFromControl(unsigned int ctl); static int CombineToControl(unsigned int state, unsigned int count); diff --git a/interfaces/innerkits/task_dispatcher/src/threading/worker_pool.cpp b/interfaces/innerkits/task_dispatcher/src/threading/worker_pool.cpp index 1376449706..c1ae3c5a56 100644 --- a/interfaces/innerkits/task_dispatcher/src/threading/worker_pool.cpp +++ b/interfaces/innerkits/task_dispatcher/src/threading/worker_pool.cpp @@ -319,7 +319,7 @@ bool WorkerPool::IsRunning(int ctl) return ctl < CLOSING; } -int WorkerPool::GetStateFromControl(int ctl) +int WorkerPool::GetStateFromControl(unsigned int ctl) { return ctl & ~CAPACITY; } @@ -345,7 +345,7 @@ int WorkerPool::CombineToControl(unsigned int state, unsigned int count) bool WorkerPool::CompareAndIncThreadNum(int expect) { - int ctl = control_.load(); + unsigned int ctl = control_.load(); int state = GetStateFromControl(ctl); return CompareAndSet(control_, ctl, CombineToControl(state, expect + 1)); } @@ -367,7 +367,7 @@ bool WorkerPool::CompareAndDecThreadNum(int expect) bool WorkerPool::CompareAndDecNum(int expectCount) { - int curr = control_.load(); + unsigned int curr = control_.load(); int state = GetStateFromControl(curr); int expectControl = CombineToControl(state, expectCount); return CompareAndDecThreadNum(expectControl); diff --git a/kits/appkit/napi/appMgr/app_mgr.cpp b/kits/appkit/napi/appMgr/app_mgr.cpp index c0a84af847..a67924e897 100755 --- a/kits/appkit/napi/appMgr/app_mgr.cpp +++ b/kits/appkit/napi/appMgr/app_mgr.cpp @@ -39,7 +39,7 @@ static napi_value ParseBundleName(napi_env env, std::string &bundleName, napi_va size_t len = 0; napi_get_value_string_utf8(env, args, buf, BUFFER_LENGTH_MAX, &len); HILOG_INFO("bundleName= [%{public}s].", buf); - bundleName = std::string{buf}; + bundleName = std::string{ buf }; // create result code napi_value result; status = napi_create_int32(env, 1, &result); @@ -67,14 +67,15 @@ napi_value NAPI_KillProcessesByBundleName(napi_env env, napi_callback_info info) NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); HILOG_INFO("argc = [%{public}zu]", argc); - if (argc >= 2) { + size_t argcNum = 2; + if (argc >= argcNum) { napi_valuetype valuetype; NAPI_CALL(env, napi_typeof(env, argv[1], &valuetype)); NAPI_ASSERT(env, valuetype == napi_function, "Wrong argument type. Function expected."); } AsyncCallbackInfo *async_callback_info = - new AsyncCallbackInfo{.env = env, .asyncWork = nullptr, .deferred = nullptr}; + new AsyncCallbackInfo{ .env = env, .asyncWork = nullptr, .deferred = nullptr }; std::string bundleName; ParseBundleName(env, bundleName, argv[0]); diff --git a/kits/appkit/napi/bundlemgr/bundle_mgr.cpp b/kits/appkit/napi/bundlemgr/bundle_mgr.cpp index 1d01da1a02..50ea510051 100644 --- a/kits/appkit/napi/bundlemgr/bundle_mgr.cpp +++ b/kits/appkit/napi/bundlemgr/bundle_mgr.cpp @@ -961,7 +961,7 @@ static napi_value ParseInt(napi_env env, int ¶m, napi_value args) HILOG_INFO("param=%{public}d.", value); param = value; // create result code - napi_value result; + napi_value result = nullptr; napi_status status = napi_create_int32(env, NAPI_RETURN_ONE, &result); NAPI_ASSERT(env, status == napi_ok, "napi_create_int32 error!"); return result; @@ -3481,7 +3481,7 @@ napi_value RegisterAllPermissionsChanged(napi_env env, napi_callback_info info) std::vector uids; ParseInt32Array(env, uids, argv[ARGS_SIZE_ONE]); AsyncRegisterPermissions *asyncCallbackInfo = - new AsyncRegisterPermissions{.env = env, .asyncWork = nullptr, .uids = uids}; + new (std::nothrow) AsyncRegisterPermissions{.env = env, .asyncWork = nullptr, .uids = uids}; if (asyncCallbackInfo == nullptr) { return nullptr; } @@ -3525,7 +3525,7 @@ napi_value RegisterAllPermissionsChanged(napi_env env, napi_callback_info info) return result; } else if (permissionEvent == ANY_PERMISSION_CHANGE && argc == ARGS_SIZE_TWO) { AsyncRegisterAllPermissions *asyncCallbackInfo = - new AsyncRegisterAllPermissions{.env = env, .asyncWork = nullptr}; + new (std::nothrow) AsyncRegisterAllPermissions{.env = env, .asyncWork = nullptr}; if (asyncCallbackInfo == nullptr) { return nullptr; } diff --git a/services/appmgr/include/app_mgr_service_event_handler.h b/services/appmgr/include/app_mgr_service_event_handler.h index 1f30b3a1d8..4a7fe990b2 100644 --- a/services/appmgr/include/app_mgr_service_event_handler.h +++ b/services/appmgr/include/app_mgr_service_event_handler.h @@ -37,7 +37,6 @@ public: private: std::weak_ptr appMgr_; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_SERVICES_APPMGR_INCLUDE_APP_MGR_SERVICE_EVENT_HANDLER_H diff --git a/services/appmgr/include/cgroup_manager.h b/services/appmgr/include/cgroup_manager.h index 9811a37a94..5cfbab2410 100644 --- a/services/appmgr/include/cgroup_manager.h +++ b/services/appmgr/include/cgroup_manager.h @@ -66,6 +66,7 @@ public: public: virtual bool Init(); + virtual bool InitCheck(); virtual bool IsInited() const; virtual bool SetThreadSchedPolicy(int tid, SchedPolicy schedPolicy); virtual bool SetProcessSchedPolicy(int pid, SchedPolicy schedPolicy); diff --git a/services/appmgr/include/process_optimizer.h b/services/appmgr/include/process_optimizer.h index 89a210d1f4..10b4028bcf 100644 --- a/services/appmgr/include/process_optimizer.h +++ b/services/appmgr/include/process_optimizer.h @@ -76,6 +76,7 @@ protected: private: bool UpdateAppOomAdj(const AppPtr &app); + bool GetAppOomAdj(const AppPtr &app,ApplicationState state,int &oomAdj,int &oomAdjMax); bool UpdateAppSchedPolicy(const AppPtr &app); void StartAppSuspendTimer(const AppPtr &app); void StopAppSuspendTimer(const AppPtr &app); diff --git a/services/appmgr/include/process_optimizer_uba.h b/services/appmgr/include/process_optimizer_uba.h index 24d496374e..a3f6d1eadb 100644 --- a/services/appmgr/include/process_optimizer_uba.h +++ b/services/appmgr/include/process_optimizer_uba.h @@ -157,6 +157,11 @@ private: } void CommitAbilityActions(); + void CommitStartAbilityAction(const StartAbilityAction& action, size_t index); + void CommitConnectAbilityAction(const ConnectAbilityAction& action, size_t index); + void CommitDisconnectAbilityAction(const DisconnectAbilityAction& action, size_t index); + void CommitChangedAbilityStateAction(const ChangeAbilityStateAction& action, size_t index); + void CommitRemoveAbilityAction(const RemoveAbilityAction& action, size_t index); UbaServicePtr GetUbaService(); private: diff --git a/services/appmgr/src/app_mgr_service.cpp b/services/appmgr/src/app_mgr_service.cpp index 1018518de8..8567b51095 100644 --- a/services/appmgr/src/app_mgr_service.cpp +++ b/services/appmgr/src/app_mgr_service.cpp @@ -280,6 +280,5 @@ void AppMgrService::GetAppFreezingTime(int &time) appMgrServiceInner_->GetAppFreezingTime(time); APP_LOGE("get app freeze time %{public}d ", time); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/appmgr/src/app_mgr_service_inner.cpp b/services/appmgr/src/app_mgr_service_inner.cpp index 4029ee5dbc..caeb2756c7 100644 --- a/services/appmgr/src/app_mgr_service_inner.cpp +++ b/services/appmgr/src/app_mgr_service_inner.cpp @@ -386,7 +386,7 @@ bool AppMgrServiceInner::process_exist(pid_t &pid) bool AppMgrServiceInner::CheckALLProcessExist(std::list &pids) { - for (auto iter = pids.begin(); iter != pids.end();) { + for (auto iter = pids.begin(); iter != pids.end(); ) { if (!process_exist(*iter) && pids.size() != 0) { pids.erase(iter); if (pids.empty()) { diff --git a/services/appmgr/src/app_running_manager.cpp b/services/appmgr/src/app_running_manager.cpp index 90c17b01ea..74c987f3a6 100644 --- a/services/appmgr/src/app_running_manager.cpp +++ b/services/appmgr/src/app_running_manager.cpp @@ -29,7 +29,6 @@ bool CheckUid(const int32_t uid) { return uid >= 0 && uid < std::numeric_limits::max(); } - } // namespace AppRunningManager::AppRunningManager() diff --git a/services/appmgr/src/cgroup_manager.cpp b/services/appmgr/src/cgroup_manager.cpp index 34708cd361..2fcea885bf 100644 --- a/services/appmgr/src/cgroup_manager.cpp +++ b/services/appmgr/src/cgroup_manager.cpp @@ -142,38 +142,12 @@ bool CgroupManager::Init() return false; } - UniqueFd cpusetTasksFds[SCHED_POLICY_CPU_MAX]; - if (!InitCpusetTasksFds(cpusetTasksFds)) { - return false; - } - - UniqueFd cpuctlTasksFds[SCHED_POLICY_CPU_MAX]; - if (!InitCpuctlTasksFds(cpuctlTasksFds)) { - return false; - } - - UniqueFd freezerTasksFds[SCHED_POLICY_FREEZER_MAX]; - if (!InitFreezerTasksFds(freezerTasksFds)) { - return false; - } - - UniqueFd memoryEventControlFd; - if (!InitMemoryEventControlFd(memoryEventControlFd)) { - return false; - } - - UniqueFd memoryEventFds[LOW_MEMORY_LEVEL_MAX]; - if (!InitMemoryEventFds(memoryEventFds)) { - return false; - } - - UniqueFd memoryPressureFds[LOW_MEMORY_LEVEL_MAX]; - if (!InitMemoryPressureFds(memoryPressureFds)) { + if(!InitCheck()){ return false; } if (!RegisterLowMemoryMonitor( - memoryEventFds_, memoryPressureFds_, memoryEventControlFd_, LOW_MEMORY_LEVEL_LOW, eventHandler)) { + memoryEventFds_, memoryPressureFds_, memoryEventControlFd_, LOW_MEMORY_LEVEL_LOW, eventHandler)) { return false; } @@ -181,7 +155,7 @@ bool CgroupManager::Init() [&]() { eventHandler->RemoveFileDescriptorListener(memoryEventFds_[LOW_MEMORY_LEVEL_LOW]); }); if (!RegisterLowMemoryMonitor( - memoryEventFds_, memoryPressureFds_, memoryEventControlFd_, LOW_MEMORY_LEVEL_MEDIUM, eventHandler)) { + memoryEventFds_, memoryPressureFds_, memoryEventControlFd_, LOW_MEMORY_LEVEL_MEDIUM, eventHandler)) { return false; } @@ -189,7 +163,7 @@ bool CgroupManager::Init() [&]() { eventHandler->RemoveFileDescriptorListener(memoryEventFds_[LOW_MEMORY_LEVEL_MEDIUM]); }); if (!RegisterLowMemoryMonitor( - memoryEventFds_, memoryPressureFds_, memoryEventControlFd_, LOW_MEMORY_LEVEL_CRITICAL, eventHandler)) { + memoryEventFds_, memoryPressureFds_, memoryEventControlFd_, LOW_MEMORY_LEVEL_CRITICAL, eventHandler)) { return false; } @@ -197,7 +171,6 @@ bool CgroupManager::Init() [&]() { eventHandler->RemoveFileDescriptorListener(memoryEventFds_[LOW_MEMORY_LEVEL_CRITICAL]); }); eventHandler_ = eventHandler; - lowLevelListenerGuard.Dismiss(); mediumLevelListenerGuard.Dismiss(); criticalLevelListenerGuard.Dismiss(); @@ -205,6 +178,40 @@ bool CgroupManager::Init() return true; } +bool CgroupManager::InitCheck() +{ + UniqueFd cpusetTasksFds[SCHED_POLICY_CPU_MAX]; + if (!InitCpusetTasksFds(cpusetTasksFds)) { + return false; + } + + UniqueFd cpuctlTasksFds[SCHED_POLICY_CPU_MAX]; + if (!InitCpuctlTasksFds(cpuctlTasksFds)) { + return false; + } + + UniqueFd freezerTasksFds[SCHED_POLICY_FREEZER_MAX]; + if (!InitFreezerTasksFds(freezerTasksFds)) { + return false; + } + + UniqueFd memoryEventControlFd; + if (!InitMemoryEventControlFd(memoryEventControlFd)) { + return false; + } + + UniqueFd memoryEventFds[LOW_MEMORY_LEVEL_MAX]; + if (!InitMemoryEventFds(memoryEventFds)) { + return false; + } + + UniqueFd memoryPressureFds[LOW_MEMORY_LEVEL_MAX]; + if (!InitMemoryPressureFds(memoryPressureFds)) { + return false; + } + return true; +} + bool CgroupManager::IsInited() const { return bool(eventHandler_); @@ -531,6 +538,5 @@ bool CgroupManager::SetFreezerSubsystem(const int tid, const SchedPolicyFreezer return true; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/appmgr/src/lmks/lmks_main.cpp b/services/appmgr/src/lmks/lmks_main.cpp index 1f05580300..e90fead4a5 100644 --- a/services/appmgr/src/lmks/lmks_main.cpp +++ b/services/appmgr/src/lmks/lmks_main.cpp @@ -15,7 +15,7 @@ #include "lmks_server.h" -int main(int argc, char *const argv[]) +int main(int argc, char *argv[]) { (void)argc; (void)argv; diff --git a/services/appmgr/src/lmks/lmks_server.cpp b/services/appmgr/src/lmks/lmks_server.cpp index 0b89cd3d6b..dfed0e4605 100644 --- a/services/appmgr/src/lmks/lmks_server.cpp +++ b/services/appmgr/src/lmks/lmks_server.cpp @@ -283,6 +283,5 @@ void LmksServer::ProcessMessage(int connectFd, LMKS_PACKET cmds, int len) // close connect fd. close(connectFd); } - } // namespace LMKS } // namespace OHOS diff --git a/services/appmgr/src/lmks/lmks_utils.cpp b/services/appmgr/src/lmks/lmks_utils.cpp index 6c0ea2af75..ea37d7eb8e 100644 --- a/services/appmgr/src/lmks/lmks_utils.cpp +++ b/services/appmgr/src/lmks/lmks_utils.cpp @@ -25,7 +25,6 @@ namespace OHOS { namespace LMKS { - namespace { constexpr int PROC_PATH_MAX = 256; constexpr int PROC_LINE_MAX = 128; @@ -108,7 +107,7 @@ std::string LmksUtils::GetProcName(pid_t pid) return name; } - if (strlen(line) + 1 <= PROC_LINE_MAX && strlen(line) != 0) { + if (strlen(line) + 1 <= PROC_LINE_MAX && strlen(line) != 0 && line[strlen(line)] == '\0') { name = line; } else { HiLog::Error(LABEL, "cmdline no data"); diff --git a/services/appmgr/src/lmks_client.cpp b/services/appmgr/src/lmks_client.cpp index bc5900ceaf..f0c288b984 100644 --- a/services/appmgr/src/lmks_client.cpp +++ b/services/appmgr/src/lmks_client.cpp @@ -31,7 +31,6 @@ namespace OHOS { namespace AppExecFwk { - namespace { constexpr int LMKS_SOCKET_TIMEOUT = 3; diff --git a/services/appmgr/src/process_optimizer.cpp b/services/appmgr/src/process_optimizer.cpp index bc5c3dca6d..e3cf6bc23e 100644 --- a/services/appmgr/src/process_optimizer.cpp +++ b/services/appmgr/src/process_optimizer.cpp @@ -479,14 +479,12 @@ bool ProcessOptimizer::UpdateAppOomAdj(const AppPtr &app) APP_LOGE("%{public}s(%{public}d) invalid priority object.", __func__, __LINE__); return false; } - // special set launcher and systemui adj if (app->IsLauncherApp() || app->GetBundleName() == SYSTEM_UI_BUNDLE_NAME) { return SetAppOomAdj(app, APP_OOM_ADJ_SYSTEM); } auto state = app->GetState(); - if (state == ApplicationState::APP_STATE_FOREGROUND || state == ApplicationState::APP_STATE_CREATE || state == ApplicationState::APP_STATE_READY) { return SetAppOomAdj(app, APP_OOM_ADJ_FOREGROUND); @@ -494,6 +492,34 @@ bool ProcessOptimizer::UpdateAppOomAdj(const AppPtr &app) int oomAdj; int oomAdjMax; + if(!GetAppOomAdj(app,state,oomAdj, oomAdjMax)){ + return false; + } + + for (auto curApp : appLru_) { + if (curApp->GetState() != state) { + continue; + } + // adj of launcher and systemui is always APP_OOM_ADJ_SYSTEM + if (curApp->IsLauncherApp() || curApp->GetBundleName() == SYSTEM_UI_BUNDLE_NAME) { + continue; + } + + SetAppOomAdj(curApp, oomAdj); + if (oomAdj < oomAdjMax) { + oomAdj += 1; + } + } + return true; +} + +bool ProcessOptimizer::GetAppOomAdj(const AppPtr &app,ApplicationState state,int &oomAdj,int &oomAdjMax) +{ + auto priorityObject = app->GetPriorityObject(); + if (!priorityObject) { + APP_LOGE("%{public}s(%{public}d) invalid priority object.", __func__, __LINE__); + return false; + } switch (state) { case ApplicationState::APP_STATE_BACKGROUND: @@ -521,23 +547,6 @@ bool ProcessOptimizer::UpdateAppOomAdj(const AppPtr &app) oomAdjMax = APP_OOM_ADJ_UNKNOWN; break; } - - for (auto curApp : appLru_) { - if (curApp->GetState() != state) { - continue; - } - - // adj of launcher and systemui is always APP_OOM_ADJ_SYSTEM - if (curApp->IsLauncherApp() || curApp->GetBundleName() == SYSTEM_UI_BUNDLE_NAME) { - continue; - } - - SetAppOomAdj(curApp, oomAdj); - if (oomAdj < oomAdjMax) { - oomAdj += 1; - } - } - return true; } @@ -568,7 +577,6 @@ bool ProcessOptimizer::UpdateAppSchedPolicy(const AppPtr &app) ret = true; break; } - return ret; } diff --git a/services/appmgr/src/process_optimizer_uba.cpp b/services/appmgr/src/process_optimizer_uba.cpp index 73122020ae..9e01e969e3 100644 --- a/services/appmgr/src/process_optimizer_uba.cpp +++ b/services/appmgr/src/process_optimizer_uba.cpp @@ -31,7 +31,7 @@ std::string ProcessOptimizerUBA::BaseAbilityAction::GetTimeString() const { std::time_t tmp = Clock::to_time_t(time_); char *pTime = std::ctime(&tmp); - return pTime == nullptr ? "" : std::string(pTime); + return (pTime == nullptr) ? "" : std::string(pTime); } const std::string &ProcessOptimizerUBA::BaseAbilityAction::GetName() const @@ -288,7 +288,6 @@ void ProcessOptimizerUBA::CommitAbilityActions() { auto n = abilityActionCount_; abilityActionCount_ = 0; - auto ubaService = GetUbaService(); if (!ubaService) { APP_LOGE("%{public}s(%{pubic}d) uba is not available.", __func__, __LINE__); @@ -302,61 +301,82 @@ void ProcessOptimizerUBA::CommitAbilityActions() auto startAbilityAction = std::get_if(&abilityAction); if (startAbilityAction) { - APP_LOGD(" [%{public}zu] %{public}s ability '%{public}s' starts '%{public}s'", - i, - startAbilityAction->GetTimeString().c_str(), - startAbilityAction->GetPreName().c_str(), - startAbilityAction->GetName().c_str()); - // commit action + CommitStartAbilityAction(*startAbilityAction, i); continue; } - auto connectAbilityAction = std::get_if(&abilityAction); if (connectAbilityAction) { - APP_LOGD(" [%{public}zu] %{public}s ability '%{public}s' connect to '%{public}s'", - i, - connectAbilityAction->GetTimeString().c_str(), - connectAbilityAction->GetName().c_str(), - connectAbilityAction->GetTargetName().c_str()); - // commit action + CommitConnectAbilityAction(*connectAbilityAction, i); continue; } - auto disconnectAbilityAction = std::get_if(&abilityAction); if (disconnectAbilityAction) { - APP_LOGD(" [%{public}zu] %{public}s '%{public}s' ability disconnect with '%{public}s'", - i, - disconnectAbilityAction->GetTimeString().c_str(), - disconnectAbilityAction->GetName().c_str(), - disconnectAbilityAction->GetTargetName().c_str()); - // commit action + CommitDisconnectAbilityAction(*disconnectAbilityAction, i); continue; } - auto changedAbilityStateAction = std::get_if(&abilityAction); if (changedAbilityStateAction) { - APP_LOGD(" [%{public}zu] %{public}s ability '%{public}s' state changed from %{public}d to %{public}d.", - i, - changedAbilityStateAction->GetTimeString().c_str(), - changedAbilityStateAction->GetName().c_str(), - changedAbilityStateAction->GetOldState(), - changedAbilityStateAction->GetNewState()); - // commit action + CommitChangedAbilityStateAction(*changedAbilityStateAction, i); continue; } - auto removeAbilityAction = std::get_if(&abilityAction); if (removeAbilityAction) { - APP_LOGD(" [%{public}zu] %{public}s '%{public}s' removed.", - i, - removeAbilityAction->GetTimeString().c_str(), - removeAbilityAction->GetName().c_str()); - // commit action + CommitRemoveAbilityAction(*removeAbilityAction, i); continue; } } } +void ProcessOptimizerUBA::CommitStartAbilityAction(const StartAbilityAction& action, size_t index) +{ + APP_LOGD(" [%{public}zu] %{public}s ability '%{public}s' starts '%{public}s'", + index, + action.GetTimeString().c_str(), + action.GetPreName().c_str(), + action.GetName().c_str()); + // commit action +} + +void ProcessOptimizerUBA::CommitConnectAbilityAction(const ConnectAbilityAction& action, size_t index) +{ + APP_LOGD(" [%{public}zu] %{public}s ability '%{public}s' connect to '%{public}s'", + index, + action.GetTimeString().c_str(), + action.GetName().c_str(), + action.GetTargetName().c_str()); + // commit action +} + +void ProcessOptimizerUBA::CommitDisconnectAbilityAction(const DisconnectAbilityAction& action, size_t index) +{ + APP_LOGD(" [%{public}zu] %{public}s '%{public}s' ability disconnect with '%{public}s'", + index, + action.GetTimeString().c_str(), + action.GetName().c_str(), + action.GetTargetName().c_str()); + // commit action +} + +void ProcessOptimizerUBA::CommitChangedAbilityStateAction(const ChangeAbilityStateAction& action, size_t index) +{ + APP_LOGD(" [%{public}zu] %{public}s ability '%{public}s' state changed from %{public}d to %{public}d.", + index, + action.GetTimeString().c_str(), + action.GetName().c_str(), + action.GetOldState(), + action.GetNewState()); + // commit action +} + +void ProcessOptimizerUBA::CommitRemoveAbilityAction(const RemoveAbilityAction& action, size_t index) +{ + APP_LOGD(" [%{public}zu] %{public}s '%{public}s' removed.", + index, + action.GetTimeString().c_str(), + action.GetName().c_str()); + // commit action +} + UbaServicePtr ProcessOptimizerUBA::GetUbaService() { if (ubaService_) { diff --git a/services/appmgr/test/mock/include/mock_ability_token.h b/services/appmgr/test/mock/include/mock_ability_token.h index ffee93df53..2a43c7d652 100644 --- a/services/appmgr/test/mock/include/mock_ability_token.h +++ b/services/appmgr/test/mock/include/mock_ability_token.h @@ -24,11 +24,11 @@ namespace OHOS { namespace AppExecFwk { - class IAbilityToken : public IRemoteBroker { public: DECLARE_INTERFACE_DESCRIPTOR(u"ohos.appexecfwk.AbilityToken"); }; +DECLARE_INTERFACE_DESCRIPTOR(u"IAbilityToken"); class MockAbilityToken : public IRemoteStub { public: @@ -54,9 +54,6 @@ public: private: DISALLOW_COPY_AND_MOVE(AbilityTokenProxy); }; - -DECLARE_INTERFACE_DESCRIPTOR(u"IAbilityToken"); - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_SERVICES_APPMGR_TEST_UT_MOCK_ABILITY_TOKEN_H diff --git a/services/appmgr/test/mock/include/mock_ams_mgr_scheduler.h b/services/appmgr/test/mock/include/mock_ams_mgr_scheduler.h index fd3d792755..2b5aaeeb47 100644 --- a/services/appmgr/test/mock/include/mock_ams_mgr_scheduler.h +++ b/services/appmgr/test/mock/include/mock_ams_mgr_scheduler.h @@ -21,18 +21,14 @@ namespace OHOS { namespace AppExecFwk { - class MockAmsMgrScheduler : public AmsMgrStub { - public: MOCK_METHOD4(LoadAbility, void(const sptr &token, const sptr &preToken, const std::shared_ptr &abilityInfo, const std::shared_ptr &appInfo)); - MOCK_METHOD5(AbilityBehaviorAnalysis, void(const sptr &token, const sptr &preToken, const int32_t visibility, const int32_t perceptibility, const int32_t connectionState)); - MOCK_METHOD1(TerminateAbility, void(const sptr &token)); MOCK_METHOD2(UpdateAbilityState, void(const sptr &token, const AbilityState state)); MOCK_METHOD0(Reset, void()); @@ -41,10 +37,8 @@ public: MOCK_METHOD0(IsReady, bool()); MOCK_METHOD1(AbilityAttachTimeOut, void(const sptr &token)); MOCK_METHOD4(CompelVerifyPermission, int(const std::string &permission, int pid, int uid, std::string &message)); - MockAmsMgrScheduler() : AmsMgrStub(){}; virtual ~MockAmsMgrScheduler(){}; - virtual void RegisterAppStateCallback(const sptr &callback) override { callback->OnAbilityRequestDone(nullptr, AbilityState::ABILITY_STATE_BACKGROUND); @@ -52,7 +46,6 @@ public: callback->OnAppStateChanged(appProcessData); } }; - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/appmgr/test/mock/include/mock_app_mgr_service.h b/services/appmgr/test/mock/include/mock_app_mgr_service.h index e10cf628c2..3be54288ae 100644 --- a/services/appmgr/test/mock/include/mock_app_mgr_service.h +++ b/services/appmgr/test/mock/include/mock_app_mgr_service.h @@ -94,13 +94,11 @@ public: AbilityState st = AbilityState::ABILITY_STATE_BEGIN; callback_->OnAbilityRequestDone(token, st); } - private: Semaphore sem_; std::string data_; sptr callback_; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_SERVICES_COMMON_TEST_MOCK_MOCK_APP_MGR_SERVICE_H \ No newline at end of file diff --git a/services/appmgr/test/mock/include/mock_app_mgr_service_inner.h b/services/appmgr/test/mock/include/mock_app_mgr_service_inner.h index 21d2463c01..635e19f1fa 100644 --- a/services/appmgr/test/mock/include/mock_app_mgr_service_inner.h +++ b/services/appmgr/test/mock/include/mock_app_mgr_service_inner.h @@ -18,13 +18,11 @@ #include "gmock/gmock.h" #include "app_log_wrapper.h" - #include "semaphore_ex.h" #include "app_mgr_service_inner.h" namespace OHOS { namespace AppExecFwk { - class MockAppMgrServiceInner : public AppMgrServiceInner { public: MockAppMgrServiceInner() : lock_(0) @@ -51,7 +49,6 @@ public: MOCK_CONST_METHOD0(QueryAppSpawnConnectionState, SpawnConnectionState()); MOCK_CONST_METHOD2(AddAppDeathRecipient, void(const pid_t pid, const sptr &appDeathRecipient)); MOCK_METHOD1(KillProcessByAbilityToken, void(const sptr &token)); - MOCK_METHOD5(AbilityBehaviorAnalysis, void(const sptr &token, const sptr &preToken, const int32_t visibility, const int32_t perceptibility, const int32_t connectionState)); @@ -67,7 +64,6 @@ public: currentCount_ = count_; } } - // for mock function return int32_t int32_t Post4Int() { @@ -101,7 +97,6 @@ private: int32_t count_ = 1; int32_t currentCount_ = 1; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_SERVICES_APPMGR_TEST_MOCK_APP_MGR_SERVICE_INNER_H diff --git a/services/appmgr/test/mock/include/mock_app_scheduler.h b/services/appmgr/test/mock/include/mock_app_scheduler.h index c1873d422d..e3e19822e1 100644 --- a/services/appmgr/test/mock/include/mock_app_scheduler.h +++ b/services/appmgr/test/mock/include/mock_app_scheduler.h @@ -24,12 +24,10 @@ namespace OHOS { namespace AppExecFwk { - class MockAppScheduler : public AppSchedulerHost { public: MockAppScheduler(){}; virtual ~MockAppScheduler(){}; - MOCK_METHOD0(ScheduleForegroundApplication, void()); MOCK_METHOD0(ScheduleBackgroundApplication, void()); MOCK_METHOD0(ScheduleTerminateApplication, void()); diff --git a/services/appmgr/test/mock/include/mock_app_service_mgr.h b/services/appmgr/test/mock/include/mock_app_service_mgr.h index 16a281468f..1f9980fb63 100644 --- a/services/appmgr/test/mock/include/mock_app_service_mgr.h +++ b/services/appmgr/test/mock/include/mock_app_service_mgr.h @@ -17,14 +17,12 @@ #define FOUNDATION_APPEXECFWK_SERVICES_APPMGR_TEST_MOCK_APP_SERVICE_MGR_H #include "iremote_object.h" - #include "app_log_wrapper.h" #include "app_service_manager.h" #include "mock_app_mgr_service.h" namespace OHOS { namespace AppExecFwk { - class MockAppServiceMgr : public AppServiceManager { public: MockAppServiceMgr() = default; @@ -36,7 +34,6 @@ public: return new MockAppMgrService(); } }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_SERVICES_APPMGR_TEST_MOCK_APP_SERVICE_MGR_H \ No newline at end of file diff --git a/services/appmgr/test/mock/include/mock_app_spawn_client.h b/services/appmgr/test/mock/include/mock_app_spawn_client.h index 9ca5321263..62a5e60e43 100644 --- a/services/appmgr/test/mock/include/mock_app_spawn_client.h +++ b/services/appmgr/test/mock/include/mock_app_spawn_client.h @@ -20,7 +20,6 @@ namespace OHOS { namespace AppExecFwk { - class MockAppSpawnClient : public AppSpawnClient { public: MockAppSpawnClient() @@ -29,7 +28,6 @@ public: {} MOCK_METHOD2(StartProcess, ErrCode(const AppSpawnStartMsg &startMsg, pid_t &pid)); }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_SERVICES_APPMGR_TEST_UT_MOCK_APP_SPAWN_CLIENT_H diff --git a/services/appmgr/test/mock/include/mock_app_spawn_socket.h b/services/appmgr/test/mock/include/mock_app_spawn_socket.h index e2f66ae17b..4a14ec5ee1 100644 --- a/services/appmgr/test/mock/include/mock_app_spawn_socket.h +++ b/services/appmgr/test/mock/include/mock_app_spawn_socket.h @@ -24,7 +24,6 @@ namespace OHOS { namespace AppExecFwk { - class MockAppSpawnSocket : public AppSpawnSocket { public: MockAppSpawnSocket() = default; @@ -34,7 +33,6 @@ public: MOCK_METHOD0(CloseAppSpawnConnection, void()); MOCK_METHOD2(WriteMessage, ErrCode(const void *buf, const int32_t len)); MOCK_METHOD2(ReadMessage, ErrCode(void *buf, int32_t len)); - ErrCode ReadImpl(void *buf, [[maybe_unused]] int32_t len) { if (buf == nullptr) { @@ -56,7 +54,6 @@ public: private: int32_t expectPid_ = 0; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_SERVICES_APPMGR_TEST_UT_MOCK_APP_SPAWN_SOCKET_H diff --git a/services/appmgr/test/mock/include/mock_application.h b/services/appmgr/test/mock/include/mock_application.h index 52b560dbdb..d293858dbe 100644 --- a/services/appmgr/test/mock/include/mock_application.h +++ b/services/appmgr/test/mock/include/mock_application.h @@ -17,12 +17,10 @@ #include "gmock/gmock.h" #include "semaphore_ex.h" - #include "app_scheduler_host.h" namespace OHOS { namespace AppExecFwk { - class MockApplication : public AppSchedulerHost { public: MOCK_METHOD0(ScheduleForegroundApplication, void()); @@ -108,7 +106,6 @@ private: Profile profile_; // Configuration configuration_; }; - } // namespace AppExecFwk } // namespace OHOS #endif // FOUNDATION_APPEXECFWK_SERVICES_APPMGR_TEST_MOCK_APPLICATION_H diff --git a/services/appmgr/test/mock/include/mock_bundle_manager.h b/services/appmgr/test/mock/include/mock_bundle_manager.h index 4dfc90f987..abe52439ea 100644 --- a/services/appmgr/test/mock/include/mock_bundle_manager.h +++ b/services/appmgr/test/mock/include/mock_bundle_manager.h @@ -17,7 +17,6 @@ #define OHOS_AAFWK_ABILITY_MOCK_BUNDLE_MANAGER_H #include - #include "gmock/gmock.h" #include "ability_info.h" #include "application_info.h" @@ -28,7 +27,6 @@ namespace OHOS { namespace AppExecFwk { - class BundleMgrProxy : public IRemoteProxy { public: explicit BundleMgrProxy(const sptr &impl) : IRemoteProxy(impl) @@ -50,7 +48,6 @@ public: MOCK_METHOD1(UnregisterPermissionsChanged, bool(const sptr &callback)); bool QueryAbilityInfo(const AAFwk::Want &want, AbilityInfo &abilityInfo) override; bool QueryAbilityInfoByUri(const std::string &uri, AbilityInfo &abilityInfo) override; - std::string GetAppType(const std::string &bundleName) override; virtual bool GetApplicationInfo( @@ -100,19 +97,16 @@ public: { return ""; }; - virtual bool GetBundleArchiveInfo( const std::string &hapFilePath, const BundleFlag flag, BundleInfo &bundleInfo) override { return true; }; virtual bool GetHapModuleInfo(const AbilityInfo &abilityInfo, HapModuleInfo &hapModuleInfo) override; - virtual bool GetLaunchWantForBundle(const std::string &bundleName, Want &want) override { return true; }; - virtual int CheckPublicKeys(const std::string &firstBundleName, const std::string &secondBundleName) override { return 0; @@ -355,7 +349,8 @@ public: { return true; } - virtual bool GetModuleUsageRecords(const int32_t number, std::vector &moduleUsageRecords) override + virtual bool GetModuleUsageRecords(const int32_t number, + std::vector &moduleUsageRecords) override { return true; } @@ -365,7 +360,6 @@ public: return true; } }; - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/appmgr/test/mock/include/sys_mgr_client.h b/services/appmgr/test/mock/include/sys_mgr_client.h index 45a85087cc..5ec7b6906e 100644 --- a/services/appmgr/test/mock/include/sys_mgr_client.h +++ b/services/appmgr/test/mock/include/sys_mgr_client.h @@ -20,14 +20,12 @@ #include #include #include - #include "if_system_ability_manager.h" #include "iremote_object.h" #include "singleton.h" namespace OHOS { namespace AppExecFwk { - class SysMrgClient { DECLARE_DELAYED_SINGLETON(SysMrgClient) public: diff --git a/services/appmgr/test/mock/include/system_ability.h b/services/appmgr/test/mock/include/system_ability.h index f850c8c9c8..000c49aa6e 100644 --- a/services/appmgr/test/mock/include/system_ability.h +++ b/services/appmgr/test/mock/include/system_ability.h @@ -20,11 +20,9 @@ #include "iremote_object.h" namespace OHOS { - #define REGISTER_SYSTEM_ABILITY_BY_ID(a, b, c) #define REGISTER_SYSTEM_ABILITY(abilityClassName, abilityId, runOnCreate) #define DECLEAR_SYSTEM_ABILITY(className) - static constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0xD001100, "MockSystemAbility"}; class SystemAbility { diff --git a/services/appmgr/test/mock/src/cgroup_manager.cpp b/services/appmgr/test/mock/src/cgroup_manager.cpp index 92093c088f..1c6659f6db 100644 --- a/services/appmgr/test/mock/src/cgroup_manager.cpp +++ b/services/appmgr/test/mock/src/cgroup_manager.cpp @@ -27,9 +27,7 @@ namespace OHOS { namespace AppExecFwk { - namespace { - class ScopeGuard final { public: using Function = std::function; @@ -55,7 +53,6 @@ private: Function fn_; bool dismissed_ = false; }; - } // namespace CgroupManager::CgroupManager() : memoryEventControlFd_(-1) @@ -155,6 +152,5 @@ bool CgroupManager::SetFreezerSubsystem(const int tid, const SchedPolicyFreezer APP_LOGD("SetFreezerSubsystem start."); return true; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/appmgr/test/mock/src/mock_bundle_manager.cpp b/services/appmgr/test/mock/src/mock_bundle_manager.cpp index e9d6280bf9..45668e90e7 100644 --- a/services/appmgr/test/mock/src/mock_bundle_manager.cpp +++ b/services/appmgr/test/mock/src/mock_bundle_manager.cpp @@ -21,7 +21,6 @@ namespace OHOS { namespace AppExecFwk { - bool BundleMgrProxy::QueryAbilityInfo(const AAFwk::Want &want, AbilityInfo &abilityInfo) { ElementName eleName = want.GetElement(); @@ -137,6 +136,5 @@ bool BundleMgrService::GetBundleGids(const std::string &bundleName, std::vector< gids.push_back(userGid3); return true; } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/appmgr/test/mock/src/sys_mgr_client_mock.cpp b/services/appmgr/test/mock/src/sys_mgr_client_mock.cpp index 2d342890cd..ebd54c033c 100644 --- a/services/appmgr/test/mock/src/sys_mgr_client_mock.cpp +++ b/services/appmgr/test/mock/src/sys_mgr_client_mock.cpp @@ -22,7 +22,6 @@ namespace OHOS { namespace AppExecFwk { - sptr SysMrgClient::GetSystemAbility(const int32_t systemAbilityId) { if (servicesMap_[systemAbilityId] == nullptr) { @@ -42,6 +41,5 @@ void SysMrgClient::RegisterSystemAbility(const int32_t systemAbilityId, sptr(appDeathRecipientObject_->appMgrServiceInner_.lock()->GetRecentAppList().size())); APP_LOGI("AppDeathRecipient_002 start"); } - } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/services/appmgr/test/unittest/ams_app_life_cycle_test/ams_app_life_cycle_test.cpp b/services/appmgr/test/unittest/ams_app_life_cycle_test/ams_app_life_cycle_test.cpp index 0136444316..6b33aab85c 100644 --- a/services/appmgr/test/unittest/ams_app_life_cycle_test/ams_app_life_cycle_test.cpp +++ b/services/appmgr/test/unittest/ams_app_life_cycle_test/ams_app_life_cycle_test.cpp @@ -198,7 +198,7 @@ std::shared_ptr AmsAppLifeCycleTest::CreateTestApplicationAndS auto appRecord = serviceInner_->GetOrCreateAppRunningRecord(token, appInfo, abilityInfo, "AmsAppLifeCycleTest", 0, result); EXPECT_NE(appRecord, nullptr); - appRecord->SetEventHandler(handler_); + appRecord->SetEventHandler(handler_); EXPECT_EQ(appRecord->GetRecordId(), result.appRecordId); appRecord->SetState(appState); return appRecord; @@ -2026,6 +2026,5 @@ HWTEST_F(AmsAppLifeCycleTest, GetAbilityRunningRecordByAbilityToken_001, TestSiz auto abilityRecord2 = serviceInner_->GetAbilityRunningRecordByAbilityToken(token2); EXPECT_FALSE(abilityRecord2); } - } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/services/appmgr/test/unittest/ams_app_running_record_test/ams_app_running_record_test.cpp b/services/appmgr/test/unittest/ams_app_running_record_test/ams_app_running_record_test.cpp index ec0b9b17ea..1b05cbfcb4 100644 --- a/services/appmgr/test/unittest/ams_app_running_record_test/ams_app_running_record_test.cpp +++ b/services/appmgr/test/unittest/ams_app_running_record_test/ams_app_running_record_test.cpp @@ -76,7 +76,6 @@ protected: { return mock_token_; } - protected: std::shared_ptr testAbilityRecord_; sptr client_; @@ -1226,6 +1225,5 @@ HWTEST_F(AmsAppRunningRecordTest, OnAbilityStateChanged_001, TestSize.Level0) appRecord->OnAbilityStateChanged(abilityRecord, AbilityState::ABILITY_STATE_BACKGROUND); EXPECT_EQ(AbilityState::ABILITY_STATE_BACKGROUND, abilityRecord->GetState()); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/appmgr/test/unittest/ams_mgr_scheduler_test/ams_mgr_scheduler_test.cpp b/services/appmgr/test/unittest/ams_mgr_scheduler_test/ams_mgr_scheduler_test.cpp index d1568e48e0..fda4e00117 100644 --- a/services/appmgr/test/unittest/ams_mgr_scheduler_test/ams_mgr_scheduler_test.cpp +++ b/services/appmgr/test/unittest/ams_mgr_scheduler_test/ams_mgr_scheduler_test.cpp @@ -31,14 +31,12 @@ using testing::Return; namespace OHOS { namespace AppExecFwk { - class AmsMgrSchedulerTest : public testing::Test { public: static void SetUpTestCase(); static void TearDownTestCase(); void SetUp(); void TearDown(); - public: protected: static const std::string GetTestAppName() @@ -404,6 +402,5 @@ HWTEST_F(AmsMgrSchedulerTest, AmsMgrScheduler_010, TestSize.Level0) APP_LOGD("AmsMgrScheduler_010 end."); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/appmgr/test/unittest/ams_process_optimizer_test/ams_process_optimizer_test.cpp b/services/appmgr/test/unittest/ams_process_optimizer_test/ams_process_optimizer_test.cpp index bad957fbc5..5165e060fe 100644 --- a/services/appmgr/test/unittest/ams_process_optimizer_test/ams_process_optimizer_test.cpp +++ b/services/appmgr/test/unittest/ams_process_optimizer_test/ams_process_optimizer_test.cpp @@ -25,17 +25,17 @@ #include #include "lmks_client.h" +namespace{ constexpr int APP_OOM_ADJ_BACKGROUND_MIN = 400; constexpr int APP_OOM_ADJ_SUSPEND_MIN = 600; const std::string APP_RECORD_NAME = "App_Name_Z"; static constexpr int APP_SUSPEND_TIMEOUT_DEFAULT = 100; static constexpr int APP_USLEEP = 200 * 1000; - using namespace testing::ext; +}; namespace OHOS { namespace AppExecFwk { - class AmsProcessOptimizerTest : public testing::Test { public: static void SetUpTestCase(); @@ -901,6 +901,5 @@ HWTEST_F(AmsProcessOptimizerTest, AmsProcessOptimizerTest_StopAppSuspendTimer_00 APP_LOGD("AmsProcessOptimizerTest_StopAppSuspendTimer_001 end."); } - } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/services/appmgr/test/unittest/ams_recent_app_list_test/ams_recent_app_list_test.cpp b/services/appmgr/test/unittest/ams_recent_app_list_test/ams_recent_app_list_test.cpp index 1364cffb53..2c9b6be487 100644 --- a/services/appmgr/test/unittest/ams_recent_app_list_test/ams_recent_app_list_test.cpp +++ b/services/appmgr/test/unittest/ams_recent_app_list_test/ams_recent_app_list_test.cpp @@ -409,6 +409,5 @@ HWTEST_F(AmsRecentAppListTest, PushAppFront_001, TestSize.Level1) serviceInner_->PushAppFront(appRecord->GetRecordId()); EXPECT_NE(nullptr, serviceInner_->GetAppTaskInfoById(appRecord->GetRecordId())); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/appmgr/test/unittest/ams_service_load_ability_process_test/ams_service_load_ability_process_test.cpp b/services/appmgr/test/unittest/ams_service_load_ability_process_test/ams_service_load_ability_process_test.cpp index 65fd2f308a..cb6a51447d 100644 --- a/services/appmgr/test/unittest/ams_service_load_ability_process_test/ams_service_load_ability_process_test.cpp +++ b/services/appmgr/test/unittest/ams_service_load_ability_process_test/ams_service_load_ability_process_test.cpp @@ -37,6 +37,10 @@ using testing::Return; using testing::SetArgReferee; namespace OHOS { namespace AppExecFwk { +#define CHECK_POINTER_IS_NULLPTR(object) \ + if (object == nullptr) { \ + return; \ + } class AmsServiceLoadAbilityProcessTest : public testing::Test { public: static void SetUpTestCase(); @@ -129,12 +133,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, LoadAbility_001, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); APP_LOGI("AmsServiceLoadAbilityProcessTest LoadAbility_001 end"); } @@ -171,13 +177,15 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, LoadAbility_002, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); sptr token2 = GetMockToken(); @@ -195,10 +203,12 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, LoadAbility_002, TestSize.Level1) const uint32_t EXPECT_MAP_SIZE = 2; EXPECT_EQ(recordMap.size(), EXPECT_MAP_SIZE); auto record2 = service_->GetAppRunningRecordByAppName(GetTestAppName() + "_1"); - ASSERT_NE(record2, nullptr); + EXPECT_NE(record2, nullptr); + CHECK_POINTER_IS_NULLPTR(record2); EXPECT_EQ(record2->GetState(), ApplicationState::APP_STATE_CREATE); auto abilityRecord2 = record2->GetAbilityRunningRecordByToken(token2); - ASSERT_NE(abilityRecord2, nullptr); + EXPECT_NE(abilityRecord2, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord2); EXPECT_EQ(abilityRecord2->GetState(), AbilityState::ABILITY_STATE_CREATE); APP_LOGI("AmsServiceLoadAbilityProcessTest LoadAbility_002 end"); } @@ -348,12 +358,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, LoadAbility_007, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); std::shared_ptr mockClientPtr = std::make_shared(); EXPECT_CALL(*mockClientPtr, StartProcess(_, _)).Times(0); @@ -394,12 +406,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, LoadAbility_008, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); sptr token2 = new MockAbilityToken(); sptr preToken = token; @@ -418,7 +432,8 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, LoadAbility_008, TestSize.Level1) const auto &abilityMap2 = record2->GetAbilities(); EXPECT_EQ(abilityMap2.size(), EXPECT_MAP_SIZE); auto abilityRecord2 = record2->GetAbilityRunningRecordByToken(token2); - ASSERT_NE(abilityRecord2, nullptr); + EXPECT_NE(abilityRecord2, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord2); EXPECT_EQ(abilityRecord2->GetState(), AbilityState::ABILITY_STATE_CREATE); EXPECT_EQ(abilityRecord2->GetPreToken(), token); APP_LOGI("AmsServiceLoadAbilityProcessTest LoadAbility_008 end"); @@ -455,7 +470,8 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, RequestProcess_001, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetPriorityObject()->GetPid(), PID); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); APP_LOGI("AmsServiceLoadAbilityProcessTest RequestProcess_001 end"); @@ -582,12 +598,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, LaunchMode_001, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); APP_LOGI("AmsServiceLoadAbilityProcessTest LaunchMode_001 end"); } @@ -619,12 +637,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, LaunchMode_002, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); std::shared_ptr mockClientPtr = std::make_shared(); EXPECT_CALL(*mockClientPtr, StartProcess(_, _)).Times(0); @@ -666,12 +686,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartAbility_001, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); sptr token2 = new MockAbilityToken(); auto abilityInfo2 = std::make_shared(); @@ -690,7 +712,8 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartAbility_001, TestSize.Level1) const auto &abilityMap1 = record1->GetAbilities(); EXPECT_EQ(abilityMap1.size(), (uint32_t)2); auto abilityrecord1 = record1->GetAbilityRunningRecordByToken(token2); - ASSERT_NE(abilityrecord1, nullptr); + EXPECT_NE(abilityrecord1, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityrecord1); EXPECT_EQ(abilityrecord1->GetState(), AbilityState::ABILITY_STATE_READY); APP_LOGI("AmsServiceLoadAbilityProcessTest StartAbility_001 end"); } @@ -720,12 +743,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartAbility_002, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); sptr token2 = new MockAbilityToken(); auto abilityInfo2 = std::make_shared(); @@ -773,12 +798,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartAbility_003, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); sptr token2 = new MockAbilityToken(); @@ -825,12 +852,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartAbility_004, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); auto abilityInfo2 = std::make_shared(); abilityInfo2->name = GetTestAbilityName() + "_1"; @@ -876,12 +905,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartAbility_005, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); sptr token2 = new MockAbilityToken(); auto abilityInfo2 = std::make_shared(); @@ -898,7 +929,8 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartAbility_005, TestSize.Level1) const auto &abilityMap1 = record1->GetAbilities(); EXPECT_EQ(abilityMap1.size(), (uint32_t)2); auto abilityrecord1 = record1->GetAbilityRunningRecordByToken(token2); - ASSERT_NE(abilityrecord1, nullptr); + EXPECT_NE(abilityrecord1, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityrecord1); EXPECT_EQ(abilityrecord1->GetState(), AbilityState::ABILITY_STATE_READY); APP_LOGI("AmsServiceLoadAbilityProcessTest StartAbility_005 end"); } @@ -928,12 +960,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartAbility_006, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); EXPECT_EQ(record->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); auto abilityInfo2 = std::make_shared(); abilityInfo2->name = GetTestAbilityName() + "_1"; @@ -983,12 +1017,14 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartProcess001, TestSize.Level1) EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record1 = service_->GetAppRunningRecordByAppName(GetTestAppName()); EXPECT_EQ(record1->GetPriorityObject()->GetPid(), PID); - ASSERT_NE(record1, nullptr); + EXPECT_NE(record1, nullptr); + CHECK_POINTER_IS_NULLPTR(record1); EXPECT_EQ(record1->GetState(), ApplicationState::APP_STATE_CREATE); const auto &abilityMap = record1->GetAbilities(); EXPECT_EQ(abilityMap.size(), (uint32_t)1); auto abilityRecord = record1->GetAbilityRunningRecordByToken(token); - ASSERT_NE(abilityRecord, nullptr); + EXPECT_NE(abilityRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRecord); EXPECT_EQ(abilityRecord->GetState(), AbilityState::ABILITY_STATE_CREATE); APP_LOGI("AmsServiceLoadAbilityProcessTest StartProcess001 end"); } @@ -1019,7 +1055,8 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartProcess002, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record1 = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record1, nullptr); + EXPECT_NE(record1, nullptr); + CHECK_POINTER_IS_NULLPTR(record1); APP_LOGI("AmsServiceLoadAbilityProcessTest StartProcess002 end"); } @@ -1050,7 +1087,8 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartProcess003, TestSize.Level1) const auto &recordMap = service_->GetRecordMap(); EXPECT_EQ(recordMap.size(), (uint32_t)1); auto record1 = service_->GetAppRunningRecordByAppName(GetTestAppName()); - ASSERT_NE(record1, nullptr); + EXPECT_NE(record1, nullptr); + CHECK_POINTER_IS_NULLPTR(record1); APP_LOGI("AmsServiceLoadAbilityProcessTest StartProcess003 end"); } @@ -1083,7 +1121,8 @@ HWTEST_F(AmsServiceLoadAbilityProcessTest, StartProcess004, TestSize.Level1) .WillOnce(DoAll(SetArgReferee<1>(PID), Return(ERR_TIMED_OUT))); std::shared_ptr record = service_->GetOrCreateAppRunningRecord(token, appInfo, abilityInfo, GetTestAppName(), 0, result); - ASSERT_NE(record, nullptr); + EXPECT_NE(record, nullptr); + CHECK_POINTER_IS_NULLPTR(record); service_->StartProcess(abilityInfo->applicationName, GetTestAppName(), record); auto record1 = service_->GetAppRunningRecordByAppRecordId(record->GetRecordId()); EXPECT_EQ(record1, nullptr); diff --git a/services/appmgr/test/unittest/app_mgr_service_event_handler_test/app_mgr_service_event_handler_test.cpp b/services/appmgr/test/unittest/app_mgr_service_event_handler_test/app_mgr_service_event_handler_test.cpp index 5de5eecffc..bc565bfb56 100644 --- a/services/appmgr/test/unittest/app_mgr_service_event_handler_test/app_mgr_service_event_handler_test.cpp +++ b/services/appmgr/test/unittest/app_mgr_service_event_handler_test/app_mgr_service_event_handler_test.cpp @@ -23,17 +23,13 @@ #include #include "mock_app_scheduler.h" #include "inner_event.h" - #include using namespace testing::ext; - namespace OHOS { namespace AppExecFwk { - static bool eventHandlerFlag_ = false; class MockAMSEventHandler : public AMSEventHandler { - public: MockAMSEventHandler(const std::shared_ptr &runner, const std::shared_ptr &ams); virtual ~MockAMSEventHandler(); @@ -126,15 +122,10 @@ HWTEST_F(AMSEventHandlerTest, app_mgr_service_event_handler_test_001, TestSize.L if (!testAms) { APP_LOGI("app_mgr_service_event_handler_test : testAms is null"); } - EXPECT_FALSE(eventHandler_); - // init eventHandler_ = std::make_shared(runner_, testAms); - EXPECT_TRUE(eventHandler_); - // EXPECT_TRUE(eventHandler_->testAms_); - APP_LOGI("app_mgr_service_event_handler_test end"); } @@ -171,6 +162,8 @@ HWTEST_F(AMSEventHandlerTest, app_mgr_service_event_handler_test_002, TestSize.L APP_LOGI("app_mgr_service_event_handler_test end"); } - } // namespace AppExecFwk + + + } // namespace OHOS diff --git a/services/bundlemgr/src/bundle_data_mgr.cpp b/services/bundlemgr/src/bundle_data_mgr.cpp index 1c61ef2395..5bccc3f5c2 100755 --- a/services/bundlemgr/src/bundle_data_mgr.cpp +++ b/services/bundlemgr/src/bundle_data_mgr.cpp @@ -1085,8 +1085,9 @@ bool BundleDataMgr::GenerateUidAndGid(InnerBundleInfo &info) APP_LOGI("the %{public}d app install", i); innerMap.emplace(i, info.GetBundleName()); uid = i + baseUid; - info.SetUid(baseUid); - info.SetGid(baseUid); + APP_LOGI("the uid is %{public}d", uid); + info.SetUid(uid); + info.SetGid(uid); return true; } } @@ -1121,8 +1122,10 @@ bool BundleDataMgr::RecycleUidAndGid(const InnerBundleInfo &info) return (appUidMap_); } }(); + std::lock_guard lock(uidMapMutex_); for (auto &kv : innerMap) { if (kv.second == info.GetBundleName()) { + APP_LOGI("the recycle uid is %{public}d", kv.first); innerMap.erase(kv.first); return true; } @@ -1198,10 +1201,13 @@ bool BundleDataMgr::RestoreUidAndGid() for (const auto &info : item.second) { uint32_t uid = info.second.GetUid(); if ((uid < Constants::BASE_SYS_VEN_UID) && (uid >= Constants::BASE_SYS_UID)) { + std::lock_guard lock(uidMapMutex_); sysUidMap_[uid - Constants::BASE_SYS_UID] = info.second.GetBundleName(); } else if ((uid >= Constants::BASE_SYS_VEN_UID) && (uid <= Constants::MAX_SYS_VEN_UID)) { + std::lock_guard lock(uidMapMutex_); sysVendorUidMap_[uid - Constants::BASE_SYS_VEN_UID] = info.second.GetBundleName(); } else if (uid > Constants::MAX_SYS_VEN_UID) { + std::lock_guard lock(uidMapMutex_); appUidMap_[uid - Constants::BASE_APP_UID] = info.second.GetBundleName(); } } @@ -1620,7 +1626,8 @@ bool BundleDataMgr::UnregisterPermissionsChanged(const sptr lock(allPermissionsChangedLock_); - for (auto allPermissionsItem = allPermissionsCallbacks_.begin(); allPermissionsItem != allPermissionsCallbacks_.end();) { + for (auto allPermissionsItem = allPermissionsCallbacks_.begin(); + allPermissionsItem != allPermissionsCallbacks_.end();) { if ((*allPermissionsItem)->AsObject() == callback->AsObject()) { allPermissionsItem = allPermissionsCallbacks_.erase(allPermissionsItem); APP_LOGI("unregister from all permissions callbacks success!"); diff --git a/services/bundlemgr/src/bundle_permission_mgr.cpp b/services/bundlemgr/src/bundle_permission_mgr.cpp index 91a84da117..be095ae15f 100644 --- a/services/bundlemgr/src/bundle_permission_mgr.cpp +++ b/services/bundlemgr/src/bundle_permission_mgr.cpp @@ -26,8 +26,8 @@ namespace AppExecFwk { using namespace OHOS::Security; namespace { -const std::string HOS_NORMAL_APP = "ohos_normal_app"; -const std::string HOS_SYSTEM_APP = "ohos_system_app"; +const std::string HOS_NORMAL_APP = "hos_normal_app"; +const std::string HOS_SYSTEM_APP = "hos_system_app"; // convert the Permission::PermissionDef struct to // AppExecFwk::PermissionDef struct that can be used in IPC process bool ConvertPermissionDef(const Permission::PermissionDef &permDef, PermissionDef &permissionDef) diff --git a/services/bundlemgr/src/bundle_profile.cpp b/services/bundlemgr/src/bundle_profile.cpp index 4ef30a7e14..5e6df71eeb 100644 --- a/services/bundlemgr/src/bundle_profile.cpp +++ b/services/bundlemgr/src/bundle_profile.cpp @@ -1916,6 +1916,10 @@ bool TransformToInfo( abilityInfo.kind = ability.type; abilityInfo.srcPath = ability.srcPath; abilityInfo.srcLanguage = ability.srcLanguage; + std::transform(abilityInfo.srcLanguage.begin(), abilityInfo.srcLanguage.end(), abilityInfo.srcLanguage.begin(), ::tolower); + if (abilityInfo.srcLanguage != ProfileReader::BUNDLE_MODULE_PROFILE_KEY_JS) { + abilityInfo.isNativeAbility = true; + } auto iterType = std::find_if(std::begin(ProfileReader::ABILITY_TYPE_MAP), std::end(ProfileReader::ABILITY_TYPE_MAP), [&ability](const auto &item) { return item.first == ability.type; }); @@ -1967,6 +1971,7 @@ bool TransformToInfo( abilityInfo.minFormWidth = ability.form.minWidth; abilityInfo.defaultFormWidth = ability.form.defaultWidth; GetMetaData(abilityInfo.metaData, ability.metaData); + abilityInfo.formEnabled = ability.formEnabled; return true; } @@ -2065,7 +2070,6 @@ bool TransformToInfo(ProfileReader::ConfigJson &configJson, InnerBundleInfo &inn } if (configJson.module.jses.empty()) { bundleInfo.isNativeApp = true; - abilityInfo.isNativeAbility = true; } innerBundleInfo.InsertAbilitiesInfo(keyName, abilityInfo); } diff --git a/services/test/moduletest/common/ams/ability_running_record_test/ams_ability_running_record_module_test.cpp b/services/test/moduletest/common/ams/ability_running_record_test/ams_ability_running_record_module_test.cpp index 21555dd047..0de9b540d5 100644 --- a/services/test/moduletest/common/ams/ability_running_record_test/ams_ability_running_record_module_test.cpp +++ b/services/test/moduletest/common/ams/ability_running_record_test/ams_ability_running_record_module_test.cpp @@ -27,10 +27,8 @@ using namespace testing::ext; namespace OHOS { namespace AppExecFwk { namespace { - const std::string APP_RECORD_NAME = "App_Name_Z"; const std::string ABILITY_RECORD_NAME = "Ability_Name_Z"; - // schedule phase const int NONE_SCHEDULED = 0; const int FOREGROUND_SCHEDULED = 1 << 0; @@ -44,9 +42,7 @@ const int CLEAN_ABILITY_SCHEDULED = 1 << 7; const int PROFILE_CHANGED_SCHEDULED = 1 << 8; const int SCHEDULE_CONFIGURATION_UPDATED = 1 << 9; const int ABILITY_RUNNING_RECORD_NUM = 1000; - } // namespace - class MockedSchedulerBase { public: MockedSchedulerBase() @@ -427,6 +423,5 @@ HWTEST_F(AmsAbilityRunningRecordModuleTest, OperateAbilityRunningRecord_001, Tes } APP_LOGI("OperateAbilityRunningRecord_001 end"); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/test/moduletest/common/ams/app_life_cycle_test/ams_app_life_cycle_module_test.cpp b/services/test/moduletest/common/ams/app_life_cycle_test/ams_app_life_cycle_module_test.cpp index 20e10a2cb4..c268af9bdf 100755 --- a/services/test/moduletest/common/ams/app_life_cycle_test/ams_app_life_cycle_module_test.cpp +++ b/services/test/moduletest/common/ams/app_life_cycle_test/ams_app_life_cycle_module_test.cpp @@ -38,24 +38,24 @@ using testing::Return; using testing::SetArgReferee; namespace { - const int32_t ABILITY_NUM = 100; const int32_t APPLICATION_NUM = 100; const int32_t INDEX_NUM_100 = 100; const int32_t INDEX_NUM_MAX = 100; const std::string TEST_APP_NAME = "test_app_"; const std::string TEST_ABILITY_NAME = "test_ability_"; - +#define CHECK_POINTER_IS_NULLPTR(object) \ + if (object == nullptr) { \ + return; \ + } } // namespace namespace OHOS { namespace AppExecFwk { - struct TestProcessInfo { pid_t pid = 0; bool isStart = false; }; - // specify process condition class AmsAppLifeCycleModuleTest : public testing::Test { public: @@ -216,7 +216,8 @@ void AmsAppLifeCycleModuleTest::ChangeAbilityStateToForegroud(const sptrUpdateAbilityState(token, AbilityState::ABILITY_STATE_FOREGROUND); if (!isChange) { - ASSERT_NE(appRunningRecord, nullptr); + EXPECT_NE(appRunningRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(appRunningRecord); int32_t recordId = appRunningRecord->GetRecordId(); serviceInner_->ApplicationForegrounded(recordId); } @@ -235,7 +236,8 @@ void AmsAppLifeCycleModuleTest::ChangeAbilityStateToBackGroud(const sptrUpdateAbilityState(token, AbilityState::ABILITY_STATE_BACKGROUND); if (!isChange) { - ASSERT_NE(appRunningRecord, nullptr); + EXPECT_NE(appRunningRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(appRunningRecord); int32_t recordId = appRunningRecord->GetRecordId(); serviceInner_->ApplicationBackgrounded(recordId); } @@ -251,7 +253,8 @@ void AmsAppLifeCycleModuleTest::ChangeAppToTerminate(const sptrAbilityTerminated(token); - ASSERT_NE(appRunningRecord, nullptr); + EXPECT_NE(appRunningRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(appRunningRecord); int32_t recordId = appRunningRecord->GetRecordId(); serviceInner_->ApplicationTerminated(recordId); } else { @@ -269,11 +272,13 @@ void AmsAppLifeCycleModuleTest::ChangeAbilityStateToTerminate( void AmsAppLifeCycleModuleTest::CheckState(const std::shared_ptr &appRunningRecord, const sptr &token, const AbilityState abilityState, const ApplicationState appState) const { - ASSERT_NE(appRunningRecord, nullptr); + EXPECT_NE(appRunningRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(appRunningRecord); auto abilityRunningRecord = appRunningRecord->GetAbilityRunningRecordByToken(token); ApplicationState getAppState = appRunningRecord->GetState(); EXPECT_EQ(appState, getAppState); - ASSERT_NE(abilityRunningRecord, nullptr); + EXPECT_NE(abilityRunningRecord, nullptr); + CHECK_POINTER_IS_NULLPTR(abilityRunningRecord); AbilityState getAbilityState = abilityRunningRecord->GetState(); EXPECT_EQ(abilityState, getAbilityState); } @@ -350,11 +355,6 @@ sptr AmsAppLifeCycleModuleTest::GetAbilityToken() return mockToken_; } -// void InvokeOnAbilityRequestDone(const sptr &obj, const AbilityState state) -// { -// EXPECT_EQ(state, AbilityState::ABILITY_STATE_BACKGROUND); -// } - /* * Feature: Ams * Function: AppLifeCycle @@ -371,7 +371,8 @@ sptr AmsAppLifeCycleModuleTest::GetAbilityToken() */ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_001, TestSize.Level2) { - ASSERT_NE(serviceInner_, nullptr); + EXPECT_NE(serviceInner_, nullptr); + CHECK_POINTER_IS_NULLPTR(serviceInner_); pid_t pid = 1024; sptr token = GetAbilityToken(); auto abilityInfo = GetAbilityInfo("0", "MainAbility", "p1", "com.ohos.test.helloworld"); @@ -416,7 +417,8 @@ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_001, TestSize.Level2) HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_002, TestSize.Level3) { pid_t pid = 1023; - ASSERT_NE(serviceInner_, nullptr); + EXPECT_NE(serviceInner_, nullptr); + CHECK_POINTER_IS_NULLPTR(serviceInner_); std::shared_ptr appRunningRecord = nullptr; std::vector> tokens; auto abilityInfo = std::make_shared(); @@ -525,7 +527,8 @@ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_003, TestSize.Level3) */ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_004, TestSize.Level3) { - ASSERT_NE(serviceInner_, nullptr); + EXPECT_NE(serviceInner_, nullptr); + CHECK_POINTER_IS_NULLPTR(serviceInner_); pid_t pid = 1024; sptr token = GetAbilityToken(); auto abilityInfo = GetAbilityInfo("0", "MainAbility", "p3", "com.ohos.test.helloworld"); @@ -572,7 +575,8 @@ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_004, TestSize.Level3) */ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_005, TestSize.Level2) { - ASSERT_NE(serviceInner_, nullptr); + EXPECT_NE(serviceInner_, nullptr); + CHECK_POINTER_IS_NULLPTR(serviceInner_); pid_t pid = 1024; sptr token0 = new (std::nothrow) MockAbilityToken(); @@ -635,7 +639,8 @@ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_005, TestSize.Level2) */ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_006, TestSize.Level2) { - ASSERT_NE(serviceInner_, nullptr); + EXPECT_NE(serviceInner_, nullptr); + CHECK_POINTER_IS_NULLPTR(serviceInner_); pid_t pid = fork(); if (pid == 0) { @@ -692,7 +697,8 @@ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_006, TestSize.Level2) */ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_007, TestSize.Level2) { - ASSERT_NE(serviceInner_, nullptr); + EXPECT_NE(serviceInner_, nullptr); + CHECK_POINTER_IS_NULLPTR(serviceInner_); pid_t pid = 1024; sptr token = GetAbilityToken(); auto abilityInfo = GetAbilityInfo("0", "MainAbility", "p1", "com.ohos.test.helloworld"); @@ -741,7 +747,8 @@ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_007, TestSize.Level2) */ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_008, TestSize.Level2) { - ASSERT_NE(serviceInner_, nullptr); + EXPECT_NE(serviceInner_, nullptr); + CHECK_POINTER_IS_NULLPTR(serviceInner_); pid_t pid_0 = 1024; pid_t pid_1 = 2048; sptr token_0 = new (std::nothrow) MockAbilityToken(); @@ -811,7 +818,8 @@ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_008, TestSize.Level2) HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_009, TestSize.Level3) { pid_t pid = 1025; - ASSERT_NE(serviceInner_, nullptr); + EXPECT_NE(serviceInner_, nullptr); + CHECK_POINTER_IS_NULLPTR(serviceInner_); std::shared_ptr appRunningRecord = nullptr; auto abilityInfo = std::make_shared(); auto appInfo = std::make_shared(); @@ -857,7 +865,8 @@ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_009, TestSize.Level3) HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_010, TestSize.Level3) { pid_t pid = 1025; - ASSERT_NE(serviceInner_, nullptr); + EXPECT_NE(serviceInner_, nullptr); + CHECK_POINTER_IS_NULLPTR(serviceInner_); std::shared_ptr appRunningRecord = nullptr; int32_t recordId[APPLICATION_NUM]; sptr mockAppScheduler[APPLICATION_NUM]; @@ -979,7 +988,7 @@ HWTEST_F(AmsAppLifeCycleModuleTest, StateChange_013, TestSize.Level3) EXPECT_CALL(*mockAppSpawnSocket, OpenAppSpawnConnection()).Times(1).WillOnce(Return(0)); int ret = serviceInner_->OpenAppSpawnConnection(); - ASSERT_EQ(ret, 0); + EXPECT_EQ(ret, 0); EXPECT_EQ(serviceInner_->QueryAppSpawnConnectionState(), SpawnConnectionState::STATE_CONNECTED); EXPECT_CALL(*mockAppSpawnSocket, CloseAppSpawnConnection()).Times(1); @@ -1370,6 +1379,5 @@ HWTEST_F(AmsAppLifeCycleModuleTest, AbilityBehaviorAnalysis_06, TestSize.Level0) EXPECT_EQ(abilityRecord_1->GetPerceptibility(), perceptibility); EXPECT_EQ(abilityRecord_1->GetConnectionState(), connectionState); } - } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/services/test/moduletest/common/ams/app_mgr_service_test/ams_app_mgr_service_module_test.cpp b/services/test/moduletest/common/ams/app_mgr_service_test/ams_app_mgr_service_module_test.cpp index 12eadc519b..1b0b803955 100644 --- a/services/test/moduletest/common/ams/app_mgr_service_test/ams_app_mgr_service_module_test.cpp +++ b/services/test/moduletest/common/ams/app_mgr_service_test/ams_app_mgr_service_module_test.cpp @@ -34,13 +34,11 @@ using testing::InvokeWithoutArgs; using testing::Return; namespace { - constexpr int COUNT = 1; } namespace OHOS { namespace AppExecFwk { - class TestAppSchedulerImpl : public AppSchedulerHost { public: void ScheduleForegroundApplication() override @@ -66,7 +64,6 @@ public: void ScheduleProcessSecurityExit() override {} }; - class AppMgrServiceModuleTest : public testing::Test { public: static void SetUpTestCase(); @@ -75,9 +72,9 @@ public: void TearDown(); protected: - inline static std::shared_ptr mockAppMgrServiceInner_; - inline static std::shared_ptr appMgrService_; - inline static sptr testRemoteObject_; + inline static std::shared_ptr mockAppMgrServiceInner_{nullptr}; + inline static std::shared_ptr appMgrService_{nullptr}; + inline static sptr testRemoteObject_{nullptr}; }; void AppMgrServiceModuleTest::SetUpTestCase() @@ -483,6 +480,5 @@ HWTEST_F(AppMgrServiceModuleTest, GetAmsMgr_001, TestSize.Level1) EXPECT_TRUE(amsMgr); } - } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/services/test/moduletest/common/ams/app_recent_list_test/ams_app_recent_list_module_test.cpp b/services/test/moduletest/common/ams/app_recent_list_test/ams_app_recent_list_module_test.cpp index a9640bc168..18f6aee531 100644 --- a/services/test/moduletest/common/ams/app_recent_list_test/ams_app_recent_list_module_test.cpp +++ b/services/test/moduletest/common/ams/app_recent_list_test/ams_app_recent_list_module_test.cpp @@ -36,14 +36,12 @@ using testing::SetArgReferee; namespace OHOS { namespace AppExecFwk { namespace { - const int32_t INDEX_NUM_1 = 1; const int32_t INDEX_NUM_2 = 2; const int32_t INDEX_NUM_3 = 3; const int32_t INDEX_NUM_10 = 10; const std::string TEST_APP_NAME = "test_app_"; const std::string TEST_ABILITY_NAME = "test_ability_"; - } // namespace class AmsAppRecentListModuleTest : public testing::Test { @@ -58,9 +56,9 @@ protected: const std::shared_ptr CreateAppRunningRecordByIndex(const int32_t index) const; void CreateAppRecentList(const int32_t appNum); - std::unique_ptr serviceInner_; - sptr mockToken_; - sptr mockBundleMgr; + std::unique_ptr serviceInner_{nullptr}; + sptr mockToken_{nullptr}; + sptr mockBundleMgr{nullptr}; }; void AmsAppRecentListModuleTest::SetUpTestCase() @@ -331,6 +329,5 @@ HWTEST_F(AmsAppRecentListModuleTest, Clear_Recent_List_001, TestSize.Level0) EXPECT_TRUE(serviceInner_->GetRecentAppList().empty()); APP_LOGI("Clear_Recent_List_002 end"); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/test/moduletest/common/ams/app_running_record_test/ams_app_running_record_module_test.cpp b/services/test/moduletest/common/ams/app_running_record_test/ams_app_running_record_module_test.cpp index f565d0ef49..3f79fc7602 100644 --- a/services/test/moduletest/common/ams/app_running_record_test/ams_app_running_record_module_test.cpp +++ b/services/test/moduletest/common/ams/app_running_record_test/ams_app_running_record_module_test.cpp @@ -35,7 +35,6 @@ using testing::InvokeWithoutArgs; namespace OHOS { namespace AppExecFwk { - class AmsAppRunningRecordModuleTest : public testing::Test { public: static void SetUpTestCase(); @@ -118,7 +117,7 @@ protected: EXPECT_EQ(abilityName, abilityNameFromServ) << "fail, app record name is not equal!"; } - std::unique_ptr service_; + std::unique_ptr service_{nullptr}; sptr GetMockToken() const { @@ -127,10 +126,20 @@ protected: private: std::vector appName_ = { - "test_app_name1", "test_app_name2", "test_app_name3", "test_app_name4", "test_app_name5"}; + "test_app_name1", + "test_app_name2", + "test_app_name3", + "test_app_name4", + "test_app_name5", + }; std::vector abilityName_ = { - "test_ability_name1", "test_ability_name2", "test_ability_name3", "test_ability_name4", "test_ability_name5"}; - sptr mockToken_; + "test_ability_name1", + "test_ability_name2", + "test_ability_name3", + "test_ability_name4", + "test_ability_name5", + }; + sptr mockToken_{nullptr}; }; void AmsAppRunningRecordModuleTest::SetUpTestCase() @@ -171,7 +180,7 @@ HWTEST_F(AmsAppRunningRecordModuleTest, ApplicationStart_001, TestSize.Level0) RecordQueryResult result; auto record = service_->GetOrCreateAppRunningRecord(GetMockToken(), appInfo, abilityInfo, processName, 0, result); EXPECT_TRUE(record != nullptr) << ",create apprunningrecord fail!"; - ASSERT_FALSE(result.appExists) << ",result is wrong!"; + EXPECT_FALSE(result.appExists) << ",result is wrong!"; // check apprunningrecord int32_t id = record->GetRecordId(); @@ -231,7 +240,7 @@ HWTEST_F(AmsAppRunningRecordModuleTest, MultiApplicationStart_002, TestSize.Leve auto record = service_->GetOrCreateAppRunningRecord(GetMockToken(), appInfo, abilityInfo, processName, 0, result); EXPECT_TRUE(record != nullptr) << "create apprunningrecord fail!"; - ASSERT_FALSE(result.appExists) << "result is wrong!"; + EXPECT_FALSE(result.appExists) << "result is wrong!"; // check abilityrunningrecord & apprunningrecord int32_t id = record->GetRecordId(); @@ -274,7 +283,7 @@ HWTEST_F(AmsAppRunningRecordModuleTest, ScheduleTrimMemory_003, TestSize.Level1) RecordQueryResult result; auto record = service_->GetOrCreateAppRunningRecord(GetMockToken(), appInfo, abilityInfo, processName, 0, result); EXPECT_TRUE(record != nullptr) << "create apprunningrecord fail!"; - ASSERT_FALSE(result.appExists) << "result is wrong!"; + EXPECT_FALSE(result.appExists) << "result is wrong!"; // LaunchApplication sptr mockApplication(new MockApplication()); @@ -322,7 +331,7 @@ HWTEST_F(AmsAppRunningRecordModuleTest, LowMemoryWarning_004, TestSize.Level1) RecordQueryResult result; auto record = service_->GetOrCreateAppRunningRecord(GetMockToken(), appInfo, abilityInfo, processName, 0, result); EXPECT_TRUE(record != nullptr) << "create apprunningrecord fail!"; - ASSERT_FALSE(result.appExists) << "result is wrong!"; + EXPECT_FALSE(result.appExists) << "result is wrong!"; // LaunchApplication sptr mockApplication(new MockApplication()); @@ -472,6 +481,5 @@ HWTEST_F(AmsAppRunningRecordModuleTest, ApplicationStatusChange_006, TestSize.Le auto stateFromRec = record->GetState(); EXPECT_EQ(stateFromRec, ApplicationState::APP_STATE_TERMINATED); } - } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/services/test/moduletest/common/ams/app_service_flow_test/ams_app_service_flow_module_test.cpp b/services/test/moduletest/common/ams/app_service_flow_test/ams_app_service_flow_module_test.cpp index 46881ed2c4..72d43e9e37 100644 --- a/services/test/moduletest/common/ams/app_service_flow_test/ams_app_service_flow_module_test.cpp +++ b/services/test/moduletest/common/ams/app_service_flow_test/ams_app_service_flow_module_test.cpp @@ -34,11 +34,8 @@ using testing::SetArgReferee; namespace OHOS { namespace AppExecFwk { namespace { - const uint32_t CYCLE_NUMBER = 10; - } // namespace - struct TestApplicationPreRunningRecord { TestApplicationPreRunningRecord( const std::shared_ptr &appRecord, const sptr &mockAppScheduler) @@ -64,7 +61,6 @@ struct TestApplicationPreRunningRecord { }; pid_t TestApplicationPreRunningRecord::g_pid = 0; - class AmsAppServiceFlowModuleTest : public testing::Test { public: static void SetUpTestCase(); @@ -78,7 +74,7 @@ protected: const std::string &appName, const AbilityState abilityState, const ApplicationState appState) const; protected: - std::shared_ptr serviceInner_; + std::shared_ptr serviceInner_ = nullptr; std::shared_ptr handler_ = nullptr; }; @@ -714,6 +710,5 @@ HWTEST_F(AmsAppServiceFlowModuleTest, ServiceFlow_ScreenOnAndOff_001, TestSize.L EXPECT_EQ(ApplicationState::APP_STATE_FOREGROUND, testAppA.appRecord_->GetState()); APP_LOGI("AmsAppServiceFlowModuleTest ServiceFlow_ScreenOnAndOff_001 end"); } - } // namespace AppExecFwk } // namespace OHOS diff --git a/services/test/moduletest/common/ams/ipc_ams_mgr_test/ams_ipc_ams_mgr_module_test.cpp b/services/test/moduletest/common/ams/ipc_ams_mgr_test/ams_ipc_ams_mgr_module_test.cpp index 9fc352a181..fb70baede0 100644 --- a/services/test/moduletest/common/ams/ipc_ams_mgr_test/ams_ipc_ams_mgr_module_test.cpp +++ b/services/test/moduletest/common/ams/ipc_ams_mgr_test/ams_ipc_ams_mgr_module_test.cpp @@ -41,13 +41,9 @@ using testing::InvokeWithoutArgs; namespace OHOS { namespace AppExecFwk { - namespace { - const int32_t COUNT = 1000; - } // namespace - class AmsIpcAmsmgrModuleTest : public testing::Test { public: static void SetUpTestCase(); @@ -69,11 +65,11 @@ public: protected: sptr mockToken_ = nullptr; - sptr token_; - std::unique_ptr client_; + sptr token_{nullptr}; + std::unique_ptr client_{nullptr}; - std::shared_ptr mockAppMgrServiceInner_; - std::shared_ptr amsEventHandler_; + std::shared_ptr mockAppMgrServiceInner_{nullptr}; + std::shared_ptr amsEventHandler_{nullptr}; }; class MockMockAppMgrService : public MockAppMgrService { @@ -422,6 +418,5 @@ HWTEST_F(AmsIpcAmsmgrModuleTest, ExcuteAmsmgrIPCInterface_007, TestSize.Level3) mockAppMgrServiceInner.reset(); amsMgrScheduler.release(); } - } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/services/test/moduletest/common/ams/ipc_app_mgr_test/ams_ipc_app_mgr_module_test.cpp b/services/test/moduletest/common/ams/ipc_app_mgr_test/ams_ipc_app_mgr_module_test.cpp index 58a7556eda..caf863ae46 100644 --- a/services/test/moduletest/common/ams/ipc_app_mgr_test/ams_ipc_app_mgr_module_test.cpp +++ b/services/test/moduletest/common/ams/ipc_app_mgr_test/ams_ipc_app_mgr_module_test.cpp @@ -32,13 +32,9 @@ using OHOS::sptr; using testing::_; using testing::Invoke; using testing::InvokeWithoutArgs; - namespace { - const int32_t COUNT = 10000; - } // namespace - class AmsIpcAppmgrModuleTest : public testing::Test { public: static void SetUpTestCase(); diff --git a/services/test/moduletest/common/ams/ipc_app_scheduler_test/ams_ipc_app_scheduler_module_test.cpp b/services/test/moduletest/common/ams/ipc_app_scheduler_test/ams_ipc_app_scheduler_module_test.cpp index 356d2ba86e..bba642f874 100644 --- a/services/test/moduletest/common/ams/ipc_app_scheduler_test/ams_ipc_app_scheduler_module_test.cpp +++ b/services/test/moduletest/common/ams/ipc_app_scheduler_test/ams_ipc_app_scheduler_module_test.cpp @@ -31,11 +31,8 @@ using testing::Invoke; using testing::InvokeWithoutArgs; namespace { - const int32_t COUNT = 10000; - } // namespace - class AmsIpcAppSchedulerModuleTest : public testing::Test { public: static void SetUpTestCase(); @@ -265,7 +262,7 @@ HWTEST_F(AmsIpcAppSchedulerModuleTest, ExcuteApplicationIPCInterface_008, TestSi mockApplication->Wait(); bool isEqual = mockApplication->CompareAppLaunchData(launchData); - ASSERT_EQ(true, isEqual) << "excute fail, index is " << i; + EXPECT_EQ(true, isEqual) << "excute fail, index is " << i; } } diff --git a/services/test/moduletest/common/ams/process_optimizer_uba_test/ams_process_optimizer_uba_module_test.cpp b/services/test/moduletest/common/ams/process_optimizer_uba_test/ams_process_optimizer_uba_module_test.cpp index 699685fde8..cfb2dd1891 100644 --- a/services/test/moduletest/common/ams/process_optimizer_uba_test/ams_process_optimizer_uba_module_test.cpp +++ b/services/test/moduletest/common/ams/process_optimizer_uba_test/ams_process_optimizer_uba_module_test.cpp @@ -21,6 +21,10 @@ #include #include "app_log_wrapper.h" +using namespace testing::ext; +namespace OHOS { +namespace AppExecFwk { +namespace { const std::string APP_RECORD_NAME = "App_Name_Z"; // foreground process oom_adj constexpr int APP_OOM_ADJ_FOREGROUND = 0; @@ -31,13 +35,8 @@ constexpr int APP_OOM_ADJ_SUSPEND_MIN = 600; static constexpr int APP_SUSPEND_TIMEOUT_DEFAULT = 100; static constexpr int APP_USLEEP = 200 * 1000; - -using namespace testing::ext; - -namespace OHOS { -namespace AppExecFwk { - -class ProcessOptimizerModuleTest : public testing::Test { +} // namespace +class AmsProcessOptimizerUbaModuleTest : public testing::Test { public: static void SetUpTestCase(); static void TearDownTestCase(); @@ -50,7 +49,7 @@ public: std::make_unique(nullptr, nullptr, APP_SUSPEND_TIMEOUT_DEFAULT); }; -void ProcessOptimizerModuleTest::SuspendApplication(const std::shared_ptr &appRecord) +void AmsProcessOptimizerUbaModuleTest::SuspendApplication(const std::shared_ptr &appRecord) { if (!appRecord) { APP_LOGE("app record is null"); @@ -65,7 +64,7 @@ void ProcessOptimizerModuleTest::SuspendApplication(const std::shared_ptrOnAppStateChanged(appRecord, ApplicationState::APP_STATE_BACKGROUND); } -void ProcessOptimizerModuleTest::ResumeApplication(const std::shared_ptr &appRecord) +void AmsProcessOptimizerUbaModuleTest::ResumeApplication(const std::shared_ptr &appRecord) { if (!appRecord) { APP_LOGE("app record is null"); @@ -77,16 +76,16 @@ void ProcessOptimizerModuleTest::ResumeApplication(const std::shared_ptrGetUid()); } -void ProcessOptimizerModuleTest::SetUpTestCase() +void AmsProcessOptimizerUbaModuleTest::SetUpTestCase() {} -void ProcessOptimizerModuleTest::TearDownTestCase() +void AmsProcessOptimizerUbaModuleTest::TearDownTestCase() {} -void ProcessOptimizerModuleTest::SetUp() +void AmsProcessOptimizerUbaModuleTest::SetUp() {} -void ProcessOptimizerModuleTest::TearDown() +void AmsProcessOptimizerUbaModuleTest::TearDown() {} /* @@ -96,9 +95,9 @@ void ProcessOptimizerModuleTest::TearDown() * FunctionPoints: add application * CaseDescription: Call the OnAppAdded function to add multiple application */ -HWTEST_F(ProcessOptimizerModuleTest, OnAppAdded_001, TestSize.Level1) +HWTEST_F(AmsProcessOptimizerUbaModuleTest, OnAppAdded_001, TestSize.Level1) { - APP_LOGI("ProcessOptimizerModuleTest OnAppAdded_001 start"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppAdded_001 start"); bool isSuccess = processOptimizerUBA->Init(); EXPECT_TRUE(true == isSuccess); @@ -125,7 +124,7 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppAdded_001, TestSize.Level1) oomAdj1 = priorityObject1->GetCurAdj(); - APP_LOGI("ProcessOptimizerModuleTest OnAppAdded_001 end"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppAdded_001 end"); } /* @@ -135,9 +134,9 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppAdded_001, TestSize.Level1) * FunctionPoints: change application status * CaseDescription: Set a different state, check the value of adj */ -HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_001, TestSize.Level1) +HWTEST_F(AmsProcessOptimizerUbaModuleTest, OnAppStateChanged_001, TestSize.Level1) { - APP_LOGI("ProcessOptimizerModuleTest OnAppStateChanged_001 start"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppStateChanged_001 start"); bool isSuccess = processOptimizerUBA->Init(); EXPECT_TRUE(true == isSuccess); @@ -155,7 +154,7 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_001, TestSize.Level1) auto oomAdj = priorityObject->GetCurAdj(); EXPECT_TRUE(oomAdj == APP_OOM_ADJ_FOREGROUND); - APP_LOGI("ProcessOptimizerModuleTest OnAppStateChanged_001 end"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppStateChanged_001 end"); } /* @@ -165,9 +164,9 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_001, TestSize.Level1) * FunctionPoints: change application status * CaseDescription: Set a different state, check the value of adj */ -HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_002, TestSize.Level1) +HWTEST_F(AmsProcessOptimizerUbaModuleTest, OnAppStateChanged_002, TestSize.Level1) { - APP_LOGI("ProcessOptimizerModuleTest OnAppStateChanged_002 start"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppStateChanged_002 start"); bool isSuccess = processOptimizerUBA->Init(); EXPECT_TRUE(true == isSuccess); @@ -186,7 +185,7 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_002, TestSize.Level1) auto oomAdj = priorityObject->GetCurAdj(); EXPECT_TRUE(oomAdj == APP_OOM_ADJ_BACKGROUND_MIN); - APP_LOGI("ProcessOptimizerModuleTest OnAppStateChanged_002 end"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppStateChanged_002 end"); } /* @@ -198,14 +197,14 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_002, TestSize.Level1) function, make the app state suspended 2. Call the OnAppStateChanged function to remove the suspended state */ -HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_003, TestSize.Level1) +HWTEST_F(AmsProcessOptimizerUbaModuleTest, OnAppStateChanged_003, TestSize.Level1) { - APP_LOGI("ProcessOptimizerModuleTest OnAppStateChanged_003 start"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppStateChanged_003 start"); processOptimizerUBA->AppSuspended = - std::bind(&ProcessOptimizerModuleTest::SuspendApplication, this, std::placeholders::_1); + std::bind(&AmsProcessOptimizerUbaModuleTest::SuspendApplication, this, std::placeholders::_1); processOptimizerUBA->AppResumed = - std::bind(&ProcessOptimizerModuleTest::ResumeApplication, this, std::placeholders::_1); + std::bind(&AmsProcessOptimizerUbaModuleTest::ResumeApplication, this, std::placeholders::_1); bool isSuccess = processOptimizerUBA->Init(); EXPECT_TRUE(true == isSuccess); @@ -226,7 +225,7 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_003, TestSize.Level1) auto oomAdj = priorityObject->GetCurAdj(); EXPECT_TRUE(oomAdj == APP_OOM_ADJ_SUSPEND_MIN); - GTEST_LOG_(INFO) << "ProcessOptimizerModuleTest OnAppStateChanged_003 oomAdj: " << oomAdj; + GTEST_LOG_(INFO) << "AmsProcessOptimizerUbaModuleTest OnAppStateChanged_003 oomAdj: " << oomAdj; auto appState = app->GetState(); if (appState == ApplicationState::APP_STATE_SUSPENDED) { @@ -236,7 +235,7 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_003, TestSize.Level1) EXPECT_TRUE(oomAdj == APP_OOM_ADJ_BACKGROUND_MIN); } - APP_LOGI("ProcessOptimizerModuleTest OnAppStateChanged_003 end"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppStateChanged_003 end"); } /* @@ -248,9 +247,9 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppStateChanged_003, TestSize.Level1) function 2. Calling the OnAppRemoved function will call the StopAppSuspendTimer function */ -HWTEST_F(ProcessOptimizerModuleTest, OnAppRemoved_001, TestSize.Level1) +HWTEST_F(AmsProcessOptimizerUbaModuleTest, OnAppRemoved_001, TestSize.Level1) { - APP_LOGI("ProcessOptimizerModuleTest OnAppRemoved_001 start"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppRemoved_001 start"); bool isSuccess = processOptimizerUBA->Init(); EXPECT_TRUE(true == isSuccess); @@ -274,7 +273,7 @@ HWTEST_F(ProcessOptimizerModuleTest, OnAppRemoved_001, TestSize.Level1) EXPECT_TRUE(oomAdj == APP_OOM_ADJ_BACKGROUND_MIN); - APP_LOGI("ProcessOptimizerModuleTest OnAppRemoved_001 end"); + APP_LOGI("AmsProcessOptimizerUbaModuleTest OnAppRemoved_001 end"); } } // namespace AppExecFwk diff --git a/services/test/moduletest/common/ams/service_app_spawn_client_test/ams_service_app_spawn_client_module_test.cpp b/services/test/moduletest/common/ams/service_app_spawn_client_test/ams_service_app_spawn_client_module_test.cpp index d50d759ce6..22657286d3 100644 --- a/services/test/moduletest/common/ams/service_app_spawn_client_test/ams_service_app_spawn_client_module_test.cpp +++ b/services/test/moduletest/common/ams/service_app_spawn_client_test/ams_service_app_spawn_client_module_test.cpp @@ -40,11 +40,9 @@ using testing::Invoke; using testing::Return; namespace { - const uint32_t CYCLE_NUMBER = 10; const int32_t PID_VALUE = 13579; const int32_t CONNECT_RETRY_MAX_TIMES = 15; - } // namespace // this function is only used to mock sleep method so mst can run without delay. @@ -208,8 +206,8 @@ HWTEST_F(AmsServiceAppSpawnClientModuleTest, ConnectAppSpawnDaemon_001, TestSize for (uint32_t i = 0; i < CYCLE_NUMBER; i++) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); appMgrService->OnStart(); - ASSERT_EQ(SpawnConnectionState::STATE_CONNECTED, appMgrService->QueryServiceState().connectionState); - ASSERT_EQ(SpawnConnectionState::STATE_CONNECTED, amsInner->QueryAppSpawnConnectionState()); + EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, appMgrService->QueryServiceState().connectionState); + EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, amsInner->QueryAppSpawnConnectionState()); appMgrService->OnStop(); EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, appMgrService->QueryServiceState().connectionState); EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, amsInner->QueryAppSpawnConnectionState()); @@ -243,8 +241,8 @@ HWTEST_F(AmsServiceAppSpawnClientModuleTest, ConnectAppSpawnDaemon_002, TestSize EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, amsInner->QueryAppSpawnConnectionState()); MockedAppSpawnSocket::gConnectSuccess_ = true; appMgrService->OnStart(); - ASSERT_EQ(SpawnConnectionState::STATE_CONNECTED, appMgrService->QueryServiceState().connectionState); - ASSERT_EQ(SpawnConnectionState::STATE_CONNECTED, amsInner->QueryAppSpawnConnectionState()); + EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, appMgrService->QueryServiceState().connectionState); + EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, amsInner->QueryAppSpawnConnectionState()); appMgrService->OnStop(); EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, appMgrService->QueryServiceState().connectionState); EXPECT_EQ(SpawnConnectionState::STATE_NOT_CONNECT, amsInner->QueryAppSpawnConnectionState()); @@ -270,8 +268,8 @@ HWTEST_F(AmsServiceAppSpawnClientModuleTest, ConnectAppSpawnDaemon_003, TestSize for (uint32_t i = 0; i < CYCLE_NUMBER; i++) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); appMgrService->OnStart(); - ASSERT_EQ(SpawnConnectionState::STATE_CONNECTED, appMgrService->QueryServiceState().connectionState); - ASSERT_EQ(SpawnConnectionState::STATE_CONNECTED, amsInner->QueryAppSpawnConnectionState()); + EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, appMgrService->QueryServiceState().connectionState); + EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, amsInner->QueryAppSpawnConnectionState()); appMgrService->OnStart(); EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, appMgrService->QueryServiceState().connectionState); EXPECT_EQ(SpawnConnectionState::STATE_CONNECTED, amsInner->QueryAppSpawnConnectionState()); diff --git a/services/test/moduletest/common/ams/service_event_drive_test/ams_service_event_drive_module_test.cpp b/services/test/moduletest/common/ams/service_event_drive_test/ams_service_event_drive_module_test.cpp index ae18a39701..2f0de0cbcc 100644 --- a/services/test/moduletest/common/ams/service_event_drive_test/ams_service_event_drive_module_test.cpp +++ b/services/test/moduletest/common/ams/service_event_drive_test/ams_service_event_drive_module_test.cpp @@ -28,11 +28,8 @@ using namespace OHOS::AppExecFwk; using OHOS::Semaphore; namespace { - const uint32_t CYCLE_NUMBER = 10000; - } - enum class AmsInnerState { STATE_NO_OPERATION, STATE_ABILITY_LOADED, diff --git a/services/test/moduletest/common/ams/service_start_process_test/ams_service_start_process_module_test.cpp b/services/test/moduletest/common/ams/service_start_process_test/ams_service_start_process_module_test.cpp index 27ebd33e6f..53e88c5284 100644 --- a/services/test/moduletest/common/ams/service_start_process_test/ams_service_start_process_module_test.cpp +++ b/services/test/moduletest/common/ams/service_start_process_test/ams_service_start_process_module_test.cpp @@ -26,9 +26,7 @@ using namespace testing::ext; using namespace OHOS::AppExecFwk; namespace { - const int CYCLE_NUMBER = 10000; - } // namespace class AppMgrServiceInnerMock : public AppMgrServiceInner { diff --git a/services/test/moduletest/utils/src/common_tool.cpp b/services/test/moduletest/utils/src/common_tool.cpp index 08edfb2aee..f3e851a738 100644 --- a/services/test/moduletest/utils/src/common_tool.cpp +++ b/services/test/moduletest/utils/src/common_tool.cpp @@ -99,6 +99,11 @@ bool CommonTool::CopyTmpFileToSystemPath(const std::string &srcPath, const std:: long CommonTool::GetFileBuildTime(const std::string &path) { long buildTime = 0; + + if (!CheckFilePathISExist(path)) { + return buildTime; + } + struct stat buf; FILE *file = fopen(path.c_str(), "r"); if (file == nullptr) { diff --git a/test/resource/ams/ams_page_ability_bundle/amsKitSTAbilityManager.hap b/test/resource/ams/ams_page_ability_bundle/amsKitSTAbilityManager.hap index 2b3c756af72cf0fa4f6ec949a4a0a7b0f2c3d46d..75bc00b79157494efbc99860fb222a55f01c70eb 100644 GIT binary patch delta 117908 zcmW)nc{tSH_rNiXZEPW13|efJElHNKB&9TVS%)MMhGb{n29YERQI;Wu6p}6546@UR zMD~4W#y)2KeZIdx@AKT}-gD1+o%5V~?mc5@_M|rUDiSjwa!t?f#@4u_b=8wU{wA8I z8)fBheKQWs>y|C?PY7X;5$|;Q_*>L$tL0cKB1z*z={LEf8}3P;#x=+h-?c-uwP)JU zOG?;T2EIFhuzjG3bjhwZYX8{op(a*MS1>na~j<7+3ol*^Y&st+0SQmC3kBW`d&Ym?=hBVYY&7k&!uPQWwf_KzIe{rLn33)%N3U63Ft$JPBt2@>i_0}WrG$-LM&7O zH0v=}x?mY93PO6!B|x08aY8$7I4e=njP!OoWGV%1r$VfRPz@9wMT(JxK$-HFo_C0b za)6M4`&>6g z<{t=)ksr+QDczob4~cw*MyL@JGKz_E5S=`9h$;~QnW}mt^xAz+0pe7xYJ`C_ze5vL z{reIuNt)oxlQ+2P-CVgrm7a6#kg1|FAt0{}Hzw8)rLLfpjOJ7GUrs6V*8%al&jmrK zFVGPYrt^!CFV?r+l))}Pal)gP4eFqjM{`Iq(p6AG`0aTJn2tuzs`$UqOv9iv)rr1f zI?jZvTZM=Mqxx`Wk;PT-(3)yQL9pMt-1AixqCNPCnAz?u7Rm+6@tz_9t*uQKM2VgH{?Qk&V9U8>~96$>A-o4HQZ8CpsIqhMMJ?Lg6EtF#Hp!P$gdmM zBuY9BieNRJ_k-xXN2jO~^Q9GXBnNub!IwqaYc%i1eUqnLyekeoM>{5{??s~rAv!;J z3XwG)2g2aj59ZL2$OK>z+D5bj*QpTQz(>gLo)9pq3wJ16?El|^yKo|+4bRercs=KQ zz%#u#WwG%lT_Zk7WHcJ1>W}BO43!5}dd&4hF5Y?DE-4l&3u5%(oV(QzI&cx94J1~D zGyOP(I#C#Wd7rHie=oB=qU6qM2Oor*gSJsG@@E0@xy}JUAX{oyT$=84mm$z zD~XQ(#LcP@?}2|g^sW6j{VkgIPL+Ha1mJOf%Mh5`99}f^5{S`@o3_0*e;Yy-0Yy|i z+|mW#bDx8NrMhwZVxdYP=)<`r2$daFX!8oyXnI{QD2sFxGW81GB6=+v-TlRFOAw42 zz?lJm)yTr25YM?QV5u&gyBO&XIIjzLN9?~1;LhCx0NA#|b1UW0l6vH}kf2Uv0k2%W zH7_AiT;(lz7Ae}G0b=)iMDE6EU_A~(z%F>4rdY#DzlJ%@L`N6`fI#C(ow0o@( zsX}B0)AP_tbljRd#OV#XT)m1Nr0F{M2(s0IyCg~y1WVy?>SCdQGKevN;}aukfKp&> zz(R`}J0I*&sZuNfxRfOAeVHoe?|UJz?Ts>x%eK;6+o!YYzmR-=t>nL=06YqC{%&R%|Ool#PuoOMS=f= zJ{-JbZNv4S#q=OPZgVZ(3jc)#4?WBAWVDj1e-PMjLFqY2UUWaO82X<}>WVhVfK1f< zFM@z}+;#9hH&=B~Q?SY7eP%5z*j6G#A1G-BN%q3gA9`3r-`%wd+A-$&1%Hx*rkoX6f9CBjw|jgs7j*CH%uLd-l${Y1`x?k`b({#Li3Wq;T7Gd}<&&V9K2PK3%lj`Mn2 zV{;+>IP97s+*#-`lLDi=fa8+hxz#a=0Q!CiGxRCj_1g>GnVAIzAmP#rXi8gTHaC%- zRcc4ss7ujw2|kyoqUXWaXTfGU16bo`%Q_yMjOZi0ooy~ws?HU%vmKv^xQ4Kqp4(0i z16?;%V8cK=K(4LyH(&J+InRtR704&OMSweKG%uM8*9BmmxS3qx!llWidEWd=M5}^{ z4M)pV^Goxeu&3#UeGy06<2ko*a`9vOQT++>q*_l1{`tus!8V{-?x#!*uvs-e%d08y zS;lI7%{|UAzK%^HRT(HJ-r%+zv5w^aGueYBzg>3Bo!&$9*=V}VdrX>z*3YZn13*d=xsb*}z! zHA(yaO?h(-mI$?d1#uE!p<@haxKTrXBrYLR z;}dqbZHgrEUF-V2@h{*!DfyHGor}WuGN~oc%gP2i^)j=JHC}^cvFARtO9K zNxIKY?o4Mz=k>GX6sH$hp=DeA$}Sptuq*hG#@}&X9d&Snv0mmAaY7cJNtPzw8^WMk z6iwcrYw2~4mj$|%hFpFy)q}&8YfaIg?AQA*UQ%Wu7xtan42h+Bmb~0wW*23YbqdSp z;Q$t09@_mP!fk0reR1MGr4?KdXS5JW_Ki;0`^4PhTtXV;D!k$n##O+TYaF@FjJoPr zHn+@n4*_05c&D=j$t>2N?h4srVyjLiy~Od|o6aos0frf9Ao>+sWRpN-WhmRO-vdA{ zBeftq*BEuu&#q>TtYAr&Tekah-bmwma{w=8us|xwj6c#xDbX3|6Z?l%IkTH> z`}N&8#D>Dq^sj=;#6>{{j4 z#K{43fE?P!Ydl`~PtNqW6T3Tgvu@gn-KsPZG(`Baw*ww`G(+_JlC4F1@Y(su`IDE6?9t6l z*YBny#y0!U9jJN(jk`;B+S2nEKI?wCs?QLDY2rd>0))FOrCzPZ z#dAHw;J&xDYKvZ6*k_x=j`OmS8{aZD9cS*r{~Mxjqaj7KOZCz}HTZWCd3KrY7!)UHyA!yrE3nwn$F2J)7io-`ej1%=M0wfMd1B2%%I;?VMy-32 zuV-fg-9LI;fL%%2L!KX(NJ6|k>e`+k-o3_7hKqM15$%x#JNqqyPZr_dpU_BdQpP2b z<=e5-9JM~O!=A{YN;#+0$t90b$a-k*=Go_R9i&0!0)3$6%K>;hit03^8HNHK^|T#v z&FHnQCv=3KnNr-4_zv!%7HuU4<@51nB<|Vq?xnA!=#pjsWK{G0a=Gz%D?n?*Xm~81 zzO7hsW0#BB)-Y<*?!_S+(?XZ|A_8*I@+)00Qqf6~FIFGcc+GqOVVE?Oncn)%_k!W# zB=^CKT?zo^_+enr27`rCc)1(~6hbLHCCE_3b(95ziNQ+SJ%vV~sVEn_A*iZTyHWh- z*Qb`pZXn;^K;-dJ!yp>4w>a}GzFog_z?mV$lOK;6RL(sw_=g?>)!@y2vt5J;4zPLu zf=_vfz+gIoKF&zF4=dRk(T#@PyZi~uxt*&E-1(#F5K9-fHSk(o?HzJCf1a=I3mb)$ zJQZKbo)5i57b3~LPqA}rMSNVL^hriTU(Q})iyBK1Bz9~<$J*!=!7VpgzE&j#qs%6y zApy&o1RP`SWaZmUZ{Q&^j>@;(9NFbB#6eEXhb5m~4uP;yQoR{#&(=d-z!8hG<03%d zt+3>LhDm=C4eKD$voA1V&mnb>rELbzP9d@+rm&o>3!LkN-#ec%+j^*v$dTVW4#>w#v4;KrX^K}C zAb)A?Va(tnZ)YSO6|#{W4TXP8Ikyks`?6e`(6q<3A<+z{4Oyb&)C{*Y2Ow@qJ>eL~ z7%4<;T@j7>UPi{WMJg>TZXmy+`Mn~ZarEr3OXI(8&w@yw*$zC4MRdm<&l*5OYWoOo zmSl0B_b3L4~qI6xTNh z@68xJ6~{SE9s0MkuNUgA033?u4ju?mlTv;nV;#Uc4riSiLMS4lNAuOK>2}hUQZbQF z?rc0^Il95LHf9=wff@k#qOHnP`Y;6tAGK;(4I*LNr~o@zvVw$-LEE zeY%cU+q}k8E#xeb{Km{=P}hw#i_Kh=boqx-=j+#%2??H|EZ5Om<`vn9;gIGeX|aD zgMGzxqQi$NOyxdEjpSY9+j1<|@ufi~5I1vDX7XXhR(rk|J1So%NI#3)0M=)QPl}_^ z<`(jmlD9Ez2ZzdYBcGvmS4~Gk^0=wV3s@`&;7}?7^y|OUe+qJp=5KvZ!=;GZh#VH4 z%14~sNZgC$SeqRwI|4HUUe z_h_kJ>RJmssW9{Y%-DFVg6wM~(zRylfrXyW^^40PzB}kBi@QZ*VQ~HlCtJ5dY*ao> zC|e%bD8Y14%PsDCrFj}JMC`g)6b}Nb zLR(F7o3br(jXguxUjkFl<5QgEyMO?$6?HkH(G1N0^nu6AJX8G>PLK4pGw5=3irAeaR}IKu}pTt}%;4+cgFL>-a; z%V&HR*@t~wcXIBHI;WG0wlhd&Aa6ZNFI{3EQ>{P>>1k```|6+R_&9FQBE+i zB~=e)-n$vE;ao$rLCINq5TWIRjE_2HY$TY2W81#6OCF7rRzihM8qjY*PSKilt7z61 zH5e3Y7>#=NTa*$rL$A{~62nf>;NI%>XR!C91Yu^>Z7VMql zcOW9$_*z_6y(M*LS5X0b!nD=dopOV**g35BXIOfpFgF?+e@T$m7VC;))3wW|dAwj0 zvl{{y^qoOh>^#4H#*ERjti zr%$%>>yhzq7`J7G7{Y@vynn&I>Z`N*i-)bgm3ZL3ne z-qDNj5Q~6lm4Q{`q#M7y!zAp)3WQ)gY?4h|GQ%Mn(#@;sR3E;he|-fD;XA=yurNN>6t1mApK^u-upx0{ zRFjvLA!!Qua8c=6LxB1wJ?>^cVNhtSu$!sX<_~$}X|!@I{q)_rF`Vel4@+y&qqAIs zhdez%dGnTvsW)RCC-r_B@dqY^Vb(n()V+D()!0_?LZlQcwaCQkjf*p`6<$n=0_+rk zDA3;FmaGM$jB7t=SN07G#tMWxV4eP8k7M=fKD=e89OOeSj-3CT8iGCex$6a@`uhb1 zwD`bkLN*@!X87qPn?I2IJtM_VebW6zOYz=<2ve)wn8-HvdOq}k`!uaX&;T~fd+PAb zW=9celbPI$%? z3&spLRsBgr4^#*J2BwyD@F(o5VVXR>)*JJzC8Xz48O(y6+LJrn4IkB)Z9mfnmYcFJNxattgDQ3>vB zrHNV09!HZpJ&b{-E!Pw~x68Tfo%)yr~OFBreoA{q%PEd3^C+J?ok_^S&`KqN&fwb<-QI z+rco?BWu-`q0x!W<(2uB3-maEi)io-o0|`NV;%8U3}A#Y9B_oT)`(B%sG_2P^Gm5N zXSN9b1G{qCq$Em+nT~WuV!{wF@s`nyPeSw#%I(EbmEZNbOi|gy5&tSXeB(>Q)`?s+XLGgu;px86WDQF#>{ zwM7TTP}kJ3+@EH*)G!~U-8|p9n+Kvf>o{!@!iG{176*@+Xw6Yp zrn9UlA&hj_7>#=&`^DyoCmJZWBKL~rClFq~+}{jR5c6gvw%0))vkX)g|DmS?{|@zM zv(EJ~q7zl}HkYq5kbG5k!PA1rf|tY3)nb3?Wo*PoN%WYfh_#azNUi*p3g`FIl%Qy8 zwldk>uaYf7cqwHRb0E6*#sxORcSJew4OnoeBE}+=LTMbU0LiHl>U!-vV@`Z%|8k$p z%UE>I^;0X{>qsS)izUFN9ZewnK*LZmOZo3%QOf{bO=L)!@232aM!C)mghY&|r&7mU zQG<3#i=Hf~ECCeEWC%2A6e*Nc5+77ROrSA2|xYd3b28_tJ zR*zp_N^Skbk}R`s0>U=XE&WCquR*jc-WN8M)Muh|loW=OzKD;n9stz1*SX>sUPH4S z)=r)0dyD>UU9`2%-vynnErl4HB<>+-Y(s<#zh_zlSPJZOe;($Ux+>qTl-)3yeowm_ zvXqakv&_Fcj7`p;RsOWaxRgKpnu&HbzK3w7nf<*tazZW|Y6@Mwk`I{gEzN_<=mAV? ztIuo%@@yrx%I#yK`hnGi;Hi?n$}9I3`4&#Iw3Z%bNnG%vTFYZ^vavPllSd%LN-@O+ zZK>_?~8S3^pAhuu24H{^48wqpvKeFoQpQO0kj6M%%CkZvWBkkM!e_$8o2wCeoX_ zw3&_s#_qslP=DUFkL8$2!;!tewcbk2@&sw!af0WukQX<~pH7l36>G529?bns6f_HO zR-Q;bmdnD6+({zM3bF2$^BrWSBc!?*-^KF*Z0Zq&!h0~<|5Q&Gs}}-qoS9-KAFHnQ zr+uX;R5Kycu|3>-<Xtr(_LYs5(?!0R#s!muKYJTW|z!VJNrddO~LYJmhDE*aGU6S^dmnJ8f`FdkUyWB;b20^LyUvzZZr z&KJ1*I>6+9?c>dtQ&q9H0uHPnR&9N5T*W+;&%e*vJEhpLS6|V4cnf#-ZLhP@E`P%V z19eWD=-)vgqfggl>z}Z_>)z)abndRBjpE zn@=M7hhWkN>%||p%HD5TUJ{J~f=-$UOzcBkd`q$+!hVKnGHWGDfKrx3bMWqsIthn# zzv?GF9nNb`0;LA=n>&e153fzVsl5~$mt>#KLcrcoITJJ$>smzwGs#=+Ot8LfVpsfa zu9feT)ub=D|8h4kMbr{-lLlsUA>LG+q^7U<+wKM)8(!yxrL?JYi<0MJvL2?I)Dhcx z!b^P;Lc<&&qrM!4#c{U8Mdm|Ue3aU&snnLNtYyD6mg(Ore}XH|kgxDHl$J-p)17zX z9WN^0A@g)7A|+l-P4V_DRg0b@taI+mJ8GpUS629+$lR@Lv2q3U5S@X(ZE|PikXg{FS7^SA4`9_JK(YW_mNOI z+RBAjq%5DAE0V<=Q~i85I~toe-tvraBCeL*sQAMcUF|b})N;FkWE(Ae&K$7ew_fm* z0Hi!Z!3%0rL;wvWPk-lg^;x{WRIMmqRagG;DiN|IyWb4H%_6aYR(i+7;Eu8%OH+RG zd1_kltHkCfRwGwY=r`zCv}B>54zI^f-|feh{@JG=23RS2RJ%pbz10`s&X@Cwp3Pe# z!-{cAQ;PYwr79}UPj{G4Tc{m}Q<9pF(=*dW(0&aZaq|}dl`>0t$1Qg_BwAnOaXU{| z(&o_ThHpBDkNT&gds+LxmMy;^a*YX?4jj5ac$nAbmo~95P_ZBV;JY*DASjVz41PLR zb8jxJM|bU<@=XhQd<9$G^Jt<6+LXCW?UgLNXY=(@yS!~cwp>S{-DStpkx?^+sk*Ff zmwWk$DW3dN;DPD!c!441(|ml2*y2QwnW*FAgeEySrJ}@~O>?f0>S#A$eDtV^`(T|* zM^%Dt;eE+MA_U>XMisa@JDSE{K6U-ciqSNeh=>0_(;>z8L%aip)k@OKDroTXzdA>m zJ2&U`ST0Zf{lSi3{Jl26;UY3B`T3kCU!Mv(J!mnh4Tuwe;ba)gcE;`$>3n|ls=?pF zT6829bfW50^0TM6V)N=BNx67NSGsjWfB&O;;mfG@hD z_8ygf)vh@$=#+mrY@y|^r}L{LU3I6kl~8^oukY0PjG!16)ytq=ADagu+5_gTJUXq> z?%~nV0o_3GUHn${KX&I7>0YPU*XVSi`#)5Qbw2ZDm_6n8=~=|_fZzPNoXvi*p&$bj zCVk@;SIV>7A_G-u!KO!xqV0$X*^o;@&ci%5LCadNw0n61i?0oFsbFQ7{RPu&LAz%q zLP6%qN!hP%Er?1V`P5e%ROj6nxzFteiW}sw)5m!NA;AXMIOea#jqq2slGMdg%8AXK z^C2vY>REsxiM?H&qtfF(hUpzsfoR;@P{OIWKK{>!Bql>M4$<{PnJY0vtcL0wdHl`N zBtwqW#TG2?i%iXPex8D}aliP(^>GoTaHCr?-$x;E?l?NXnoK0v?L|)aS(Xgm&(asIcv>qD9kY`^T+Z*CkL6MK#Wy`70J=c@1Xyfvp_gb<$T`k5S&AmztM1wSw;Xb zgmRSelMPgim;_lo3`9BHURVy1ZqBvr@^=}LVg@RDi8);J5*#Bk1L!LL|0(D{VXCCs zZ8@4`wmObD<6`++6a3E*x-B}(HFcc!#&S;G+z;{W^YNqLkET2Rl-Qjy`>I`dr{m6w zaHU`{YU<0q&GL!ljyo{@TKb1)RRE*J`4O3n_>rpXbr3ULzf)(8ndNVAbLqb1c){lA zm=6%pdG@!yPho6hjM0l-D!p9(+P87$5RG{LsQ&|_>dOeZ_DKv1W>bIkW4e}d6K?01 z-4x`w=m9U5fqeAqn4WtiGvTbWoj^(m1&OIWoxS@bmgIoLyNWaNDc5!K&ixz52#? zKaNPhM3Nakv}>&lK3M#_i|c_`15in$?8j&L`X29Xjdym=;PYPZaZ>93<}c`B;bO}t z$jrZ$1iMPiL`_ZeU~O(I5(ut2;8ED?tPw=n_&H(gnwpNrxI8sAp?a{Bk?E33|8Dlm zi@QEfPPoF)x+w>}IjYBlsh=pB&qQfnp$XaCCXvodMZikE*zB{dkP74e!0x;ng<(Sf zh0d|yjjU_4&$^Fa9SzQIJl&1AG`SZiQD-(8wdd*aG}jDny@z#A0sLAfk+#_#Zpxd@ zJ337>@uRfUukH-Th0*JJMnd4W)pexUAMSOJ`ul!e|DmGl@BR>vV_T#+=)BY6$|89& zKK(APJU^YXeTDW*U^+XG(lz?5oYZz)o_#sstFX=r_4)Md-7EAm(`OzzRSJDz3az`idsAP6n{3JYN($DDp6c0P?7 z@OXLC zr4%5{eSDO6zED~3{h_OCaUbn9jovo&MHx>1h5b#<&NaE|oA+I|>d`v9kuXkEvI_~X z4=zW2{=G8X%tSAqZG01mU^2*@>%bD zcQr1Fx@=zkET&U^7r%n2<(q1j4RT@Z2E}AXIRQIooy$s>XC@bwLbTt_RM`+f+)ogQ z(~=9z`(bzMA~rM~c?Ku1AWGLC>X;jh6wc4g9YSe9OUp*g%MMKVYw{0+?80w|uZX5^ zGdY6wytIAC(o9OS9VYjE=oRNh7s_yPfw9LVHn$|OQiFoIK+&AKX4TX#qRso+y}`Ru zE|+-b_sQ=+cFFkKGa;X-rQ_qkkuCn(46Pj=+f_Re_HpuKMR4aLBObk)qRKoBgMvTD$SUHHBB1mJOh0nx0K}P7aL3zmh!iOb!}L@QSFPT#!2B zaJ#i>>g`Mim@(DjN44|CAAN``y(jLH%HQ%O$l;zpO{Q5t_ z^CAWG2&-D3M(gV%Tc$M&NUOB7!I-?@W{+H>y^S>W&7B?9(w*2J(5>vh7pq3{M}UBW zq@w%erqbNgxD^xR$m!xu7EN)_Za>x@caEVg;LIJik-ifh@|EQ#Rllhd+4zwju? zh;JG>1WfOoMf|Lz1c!ag^kPra12!k3qPGU(`#kDdujbj(Zzn~ZXV9K5y}Bwm_NB}+ z==an;W9&c$ChrT)ZLK>o?PH|X1)cH6_1IG~Z;~6&L<}Rt@s(r>^~_reJ*(;3iY#GjThL*r@8CU8ll|MgzV znI_n0myJ(#Nb+ohYMGC%>vxLar)l!uuLPS86Wb5f2sitky^~pwdfVnRDuJ;KK4ue# zhUZ1^KaHBb&kJvkDE7UKKu*|2m6RM0do0?0XmY0d4Iz6+kDJ%_kQ<9l80(pw0M!6` zo}yA8Du3fw5Ng+Zu$h9{1}feKJifiv7pzIpsQgC6#Ylm)Ptrr9zW=yWd?)iA@)hCu z8<6(uf?Ii)h(>eipKCOy`o_u>z~$MjNJLt<$uIFgpC-RKAJN=QL>U<~i8=6TCj76p*E%vTVXvUW&gX zFN>ROlf?&fDBk5!qp#*$ zWr|OEY164^2fud_0G4{NHCrL(X!E;R-P`w;)9;m$fG!IRTdTO`qZxEX#*>@1_f={K z(}ban?cc-hd$;6PJMPX{&g2>7a zGTH=f>cjVgR%&-PX(AHG52?1Dr<@qK0mfmap-Z!PKJ4uVF#T~6k+#{?MWyZ)GCRj~ zXNK;S>^K$v)N}_!nrSuDFIU|igL>axy6fNXxBRrUTBmvx-gNyTs`dD1H?y8{UPfcE zuD>@8bCr*C^Cd5Gaweh|>$!w6`{BQ~GcjE}aXPGS;V(2QFS6=uxra^19XDsq(xqu+ zcLP%U^lrN|pnKtJ#kV^tY>OKSyt+BH@>dl@+lv(OmD>tdMBTMzK4kKWnPb@8!Eu$jYg_vtJ70mWfaXIXY?o7BDikKg~k zjQj-oXJ6b}e+;EKO8qe3RG&p=1G>e}7+6r+y}W;6qaLdjXtU#xQUz?y`KaC{HC|XRHxQ^#474n&Zaoy$)81b zBbL~bt;e>1gBEDXcu*x(-S2pj)MfL#l;}MHbW;>|%JQ(UM+u(2r98SBO0hMG_sd%%42Mr_r#Bc^OiMZGy43sDZ!)M$O|H8= zS`$e2+{wZ%&j2hca{KwHaT+oMV^#L6vNh%Ulzpa+Z$z#z+A}-^@3UV0eR*%CFar3H z=i}U4YqKF<*VyYDJ{`&U6MeQqyZ%S++V{uVkL;U@T<&=O^%LFv_0_v&J{G7z^dBgp z)IH|^EPl(3!1n5$bXHQ1bS`DS`M2;4;~3AJR$oVNZ)rdllJzLzkwK3sCdZq(mOP?g zC29`;EfM%WdDc(^a9=#}j`VNyw`&0lzq6SoNb{>{DTs`J0Uem`!sE;@)t=RT&vAK8#1bhfh=9tN3UFVF2T6Tx zluLP^`0Hln6Kh&@&q!;8VBZDL+KXgL+Ddn|$*VyZ|9ZgaE%Lvf zfj;5f8Dv+_ZhzO>g&*OXk>Zx>1-}kcPw8fda9<-4cN$$f-?CRsMt!sWHmSf(#g-in zo=EbfHH!~=kE)b8+mBRkzC~Wpg+?|qc7+cwA*^-xx08(Epe88EGknmzL)|$Ae%2Af z3n!rlN??(}R~}3kI~&D!N&ziZi&M)6qt_qdeTG(zhf;h$ei#d%QyZ`E9VB*ot~zaC zeY%cr5GV*UU&OZ=zcCl>lE6ZZL1gXT%bejST?dOI?bo;Oh*n)*SpWSbyYIYn_$lDw z_zzAS9-~T$q^o`^ExqVZ=*u(iT|i5XLBFGjtUK?|R+8J+*IL+XN-;3IyL0Dr$#zmH ztmto+0lYq|o$zJysa61eaHBEaV!94K8x^$LI2bZ<+J5w@d9iz%Bkd}|pNA14Inn!Q zss;7c=_~P3TKL72!p=h7&i;$yc~=#Ge5TArWdF{o1OB#DU21&hy|orjmy>{3KE-v` z_9Hq7qY5+h&&OR8j(!0AsPtLk@000isVi1dSA2;RZTJx9i_U@e>u*c$h2_}&%F%Al zi;NTs2^l&f^jGLy(Xecd_?geuN?ECqtS@NCU8Sr%diLZTcEV8W;Nh{@`9C}fW-V*9 z-~ZU{Q>L!wiLI1{NuIj0(qXbwn9`qsX&eo9U)qa>XSndaOSyjpJkC3MQ@8xW3r>Gu z6+y@4_lOnF>d4nN^&@~3&dG?7VobJa82z2s^iIe3`i*-r&QC2B4rfmIMJKO^EAkRX zIqW#Fu+AM*t!he0^!WavH1c{}KbPuG#n$#gacM|Y!GLWlo%7UI&!IItSHk{$!aku^b+C3{npH~7LGh6bm)~?oq zr`EKxr)_VtM-WhXg4#Ow5%)mRo(Q_Rc&nyF*hqw%)5$`HbdHDtQ+_e!<=g=_49UOG znaR6k7Y;LwYiULsAtD>~=s(lUc@Zy^JIJfdguDk(fsq*=Yst(x&7)hN3_qmtUr_f_ z&(Nx$1t9AT*=0BEM6e>wjXjFNPjSDcJ2^WA<*byZ0K;MNH-)S{JXmW8^W#Q0eZV+u4%VL@gBXdgJo6CmbKx?} z-q(0)QW?1)N6-i+9>@1JC4EM!?M65-^a4I^_m@?-dJdNuiDvebcvzZCjKnZKtO#J! zK#>;mQ&ahkMylUswo17}&3BxwV}j=Z$>DdOg2}14W-E8b6&C;D%w9w{CFWwEfuM3llN+aBBHfad1K*&5#18fI;kat6)~dEtF_fb zO_x&wQ&DH17kZl04YgV$z@f}806c#~8|*P!AIpHOOoy-rqYos?$lqplVq&@{3(o8Q zag6z+b*k?qy6F9jL$2b$eZPyn7zn=BI`8?z+-Tb5j_bt=BYL7Ojcp&I-GJl^YqF$a z!CvD0qLn7po;~E3NtHu0kKr?&n83IzFx+=;;p4OEl%9JM7a{azQ@3Q`ys+V^+bNmm z{p}QqqMdGQGOUz(+j`OkM+vj0wMfpv`k2iYYD;cf|8wIVKCxIvaU251bH2nJ_!wWn zyn!5aSE+EUFq>wr)3T}W*zS0FaEFgrfG$&JVP{R-#aMwaJ;;~;?4yvF37b=WjM;M zo}t;jKiCZkMVag^MnJEsl3vRN1VHY+d#e}4x@+{FtOWW}JF=RP1v4sT_Gpn=_GsIe zFWdL$rS*JT;GK_{yLA%EBQ}dUOidS9WWD_H+u)7i#USj*8d@AcaQbc(D8u`hrP9|{ zCV=Fk3_P#0?WOA$5G{C7c0Yp??%pSSF)p6v!%Aq&z@+Z`M&4q`jMiP^C1cal|7HDD zKD&Lwv_~)R(WYILUOv;YIka?qE0oSe%nY9JpJ+QHTEKqTUkxh*)d|AlIt-OrTmJchy5=})eivPSSwqT=@HR^U?3>bDk zXhCCDxP}HkQChMLQ7b~i_ZBs_WUMJl%x7|pXua0|NI53j)%W~p9TAehCJV5attCTK z+ONF@S9b7~>>+|qA+K9XwJzSfv)t_&GI1S^z25_KzOV&|z3(pq4Ev;%j2OKLFS(H) z*M|{e4c@#SbCNe|_kQ2pEU`~gB}f+h)J~|D-Dj0iD$a6H;&H6{v=o|2EHeK zxn;t#KYIpn@008%T19GQ93MJ(Z5{Hk}!tz5Jn^F0SXS+QiF*87C^WlH>< z&*PuRSlHme(+y-&Gxs6$t5pZdY=#Ki8Qc)r*1us&K`2|_pI9I#mI~pG?=(H zXA(pdQ7?0K&IXpcOT___Kc_pXlA9~ze$s^N_Sr?cW_-}b(Mi6vAXc4Jzn2lx2I zW`3DIQ)drK{)k${XU@T2{`W7$>|uLmLdjvE7>T}`cCJ+_ECHrFEso0UqR>)(GwY^d zg}`XStDh}vhx7mb@dg&?i6wnd3+UKaRVGfKQ!q~vu@RyBDACiq2w(Ep30-Q0>RYYs z!--0CLOxDloGQ%vDSAs+74wY7r9fSDLZ6P$9T zv}Sew*qtMz*X8fNb)&F#BYjCrU}hd4;v2hqT~TV*Hw9nf2+NJdE1Er@9g~3ob>tjr z9b;+$H;V6)^4Z=z2N#&^y58IQeXWOlI@H6C2#;NzHZ@L)^ewXZ{mRa#f^#4E@7-TL zSM}!rostCGIE0hG^fOka-AKgHMhlIosmKeCD<8U*3AM5_I}~RYD_l z2AWK>szb7m_odyGkEMDN z2uV3?ZWrRb&PfprQi?Wa_=pPUwgMS_8>`X8OE~*;DV%wkKyT|V+tWzic+$D0cCF_7 zVy#%nmf#+pYxHL1qfy~G;C8O@3!Xrh$yk0O=Lg4gx-+pUutQt))_DL#P*Uij2X4j2 z`g7vhyH0lgTv2)pBrXTh3CJ0P$X!0Z62SK)I*ZK z8D2|yeoU_iaIGpFBD-f|j@|fwEs#rtFUf_;z12Ml;c&8**{bjM@#u&$l{(mt$9#+g(oFv*>e)FoKo{=C5oRafaH+-+mkBvhW=g>MInJ zShRj8Pvlk<$?2!T1dtH7FJSZyFEFB`V?`8};3os_62gWboOEF5AaoWm{uXZb>w?Q83a6IA1%C-$q~e zIp!SsgWv8EOU$L*Xrg&o{SVxKHT*;S0GZ~Wt;(U5F;_z7kL8FIiO_e}T&r5VEX|^r z0$lZIV*+d5GzZGm3iV3)mPDQrb!=&iThD0k6y^td^)5%q?GF{9cjuxS4X+vhe;IkopCzviBS7L{>W<58R`rh-lFJhp^B6WRNB+hdMT1q4;c$%Cvh&7 zzZ@&dXn&su{Ff}t++*`Hol{rgPrzF*?!#u5AZBKvA&!@G&UScufZs-b3)Q_XlVdXP z3nl4FwcA{jyCoi3$3BZr!f%okfVh2~ueZV@SHQELFY$$OX(5vH|2Su+<)R!waLMKf z4lh`|=UI-gw;dvb*)YB95d3X^UW6W!R>#F*eiOIz|ECgB=J#8K_=OpDmbVNVOnK zAG}{~GJArAGOAJ&cU{I~aLOTNO%F@H)A#i*r=lF&!9ZJ-%`a*CK(kvzXc= zAWhc&Sk@I{gjNW*qWoj~VT7CWE68PcEji2jzbodP$vv!JpA;1h*|fwxvkKVE^VKxP z*eFR=NESO<*}{K9%>eGyVd}I~q?TWqqhD0iQDi4<=2$AN(u-1#Q#U+0?l2Hq7qXLe ztW2rwa@K#?$?6WQl1GDsR}{uyzq>zUIHjoh6Qb@GHXEED@UiO&6ErACf%X^KX7q@;T z#&41+1u|t1$k21A(W#ea!(!=Sa5k#??t*+EPU?n-*qfc9*S-bd|GxgchT<( zYaYIqqgSLjlaEcwV~>uR<$@TZVc{}A`o4^FSnQPd{0v-`@xIIuW)ZAu9vK6> zJ0Hrtlh!H%H~7{hcWL_9e|LxkFR$72rdi%V4wVEw={6~O-u+fc!vAe(S4i(r2pEsH zg$>9t$^-O@-~6`eED3z z3gp`S&EVIUd zj5|yVH$0AI?)8%IK2|Cj_K9JY*Qei;L6(D?8)Ixx=%j<^Ka}7~*N47kf5Xn>QV~7J zH{ShL>@1Icj|uu^aX)ux)sS6_1)cQuCfE4 z?H;xHcFj^2$`WDwp0?OwK6ii^NAvn2weeH<`sB0Cv;GU0U&#N$mM_*Nv)=}5F1wjg z?WUnD6R**YqL5du_`6^wC9scaSdVSQ507rl)%}H7R+Hz)FeM8Ea1pF7;PHejzB7Hz;N5a`* zsbx8I&MdGPhs#h1Dy{k^fYy9xMx1@w@ViFnF@248a;9y9iY6S*W0v`J8kc&~f!8XB zGkC925m!Ag!@EI;b%`L&1+2>O%r1r{gXdIr8%O<&@e|s0c9&|H>fvW4pOwlykBehh z9kay_hrPDhBj906A9XMC+vQqK*=m7Xw5F}!E*yDbq!nTHdTi-UJ#J^9{ zdB+QrWRo?+Zx(i0v!lAsJUfU*7(n>R6t5ANVV)!_u>v`-OAo7_ zui5CH%U|v&!Jfwxeq` z!k5CnAMT}$P|I_6f}RY4!Fud-%V*8fYxc2{GZ0=Oto!R6W4csiHn()*>V;ncjD|F2 zK|3k3D(jRY;4WxfCQaK#_VTnu-+E%3T801)30Qwh-kUn?J!S=fb}6`(kDXNd;cT&BSvz<1_^cRRHgSANCj$G$((Kyvvs78CEKNjjBXO?uLiK7g z9wzxkq{wm+5)YE*0Az`1fyfTkv9<(VUZAEaQizsSj8`7X8jBHB$QLrj(^<-UIlS*A z*;)%etI=2%7B3!$6DVo&h(PdZ<%g#5)+uBQ!*!kZtddN#UDK8&LmqHeYqe3BL zWA&z3(R|rkEiYZTK2O2N%rD?T<%C57L-o*?~8Q-a^fC zEHPUqZusq`2-Vsj;abdo7h1P_6$smrbc?H730zI%xAW1A_>2+DIXP3OoxvxrIjnkM-)6uCa>ukfJvwxFKBY6&aZ@HhU7!v6NOqbr0^u2gx= z74N@`gVrtACE8JfjiOObQS0I2W9{oBPw{YwmqGSv0R=-tEDdb%%Rr)}#QUIy8XGn{x|eF18-XZs(0#qXINeJ?4P&4N^k;OoD0eC(1)T{7qv{ps9)2O8u! zCVaolb!Y2rNV+y~T?F*)IxDc_*u%NQzrlFklqYFvWeTpw69sRzR(5) zGcNWiSF0-@5A_m1%vsfoxCQM9*31iQ7l{aKfgW~C6;3zdlUX2H8-FLMJ)xGIAEoKB zdE{hTy3qWWlxexQer1@zV|72NHXpc7>~Us zh2*^p^PdU!LwR2#!>^jiHVYjq#99hDCR0~% z$JaWKmNz%+5V#hxrq`IatdZ%gzhWn=hY`QBR>*<+86s*g{~Chnmr+iI$mf)$mBhY%kA;5Tp!_$7@YcX1Pcw`>^K?xZD-)U}qR(YKH z4UE73F#UdJyxpB6?arnH|8HK(S|b!aSvB z4R*fc_dg17hB{cn{~7JM45amaaoJJI-|BwQeM$ii2MhW7J(fDJtfoUno%}DoU3OHm z5yF?>K&k%*%h_>|Q=fZnCPNjCmypJgKNo(s@FK&{JqABK9yI-@t>WMk(nkoG z8q~@xxbW8X=WQ_=e;X=4Wx(_O+dJ|nDG!<(2yhiCFXBKuxBY=;zc}=CP5Lyab7gih zyYt;21JTQdh03{ugB6$Cgqfe@I%~G&$aChC*(7&UvWnUOEnrhQ>ytS1A>r6&*D=t@ z@5A7{pkKnIKN^~8p-7tjScS(*&Yv^q*?M7~Thutit$nRK)r|Ah2j5ZaQai=*JU0Fx zpf}N|&wb5g28**SwQlUeoX15}kBRJ1|J#8QYh!}M4j&{=4FVaNVW2&~6(GtE>t__G zl6b^IPkoy1lVp5{fI-@?F0v2 z|BL^2irMa`jM+{v?I1;A8>onxElLe1yJO;+$q)rWGfRhNi+erM;jUB$(yl>?45d~4 zDJJZy>w}br^QlodJ)x3PI_4dGz!(U>MnQ&^j#tpQWIHTY2Rr1sav1i~p&1JT`extz zzol}z{Wbc`J&yYjJpQI0Vmnn{QW78LYZ;j-^75ug0{HA*)<@c8-$D-F(lgB;!`EPTQELO->fR-!dWYT?QX{RdP z1iUQu2yPkc2n3db1tksN7xkxsj;Ru-(+Yeq$tE?sbX^gvZXtb`EY9bsn~iapIR$cK zPt@{l#8tW3qhzu!%T{v?^&fZUu}q9eHDMIRmHo>pG(YY6O>cHyEx*1e(B7;jp@FNH1xoD>QQK=(mj%#He81>Wmbl9QS z5S<2#0%wpI{Q1<~zsukcO%7y11w1{qQwRU8cVDo&-R&&8;d!Ha+ps!I2+kFAh`-T^ z1TSfIZCcQofqmoYM*VPckDK=tU+qH_yU1zFj_H({HsUo%61rLA=%yt^5-;cH%_cN+ zo}PC~SmTvRdg?)!q^6Dlij&!g=EiV$k5b5;dg|F_Kci37F1!7geCiC|^G+YVXYPIa z4`2L1F7JJpo&Nogx}UGLA3tXL9{Ha^x0^mQDwjWIdLH?&-?kj?!7kfhJnDOu>T+fA zJ_R*3wohd_J)ga;Z(a%)H=B9h|4!>hkMC5+`RY4N@c}0SkIp&3N0rlsIL}Lq4Ud00n)9LN`G$c-IKccO4e$tFBaM?LGIdh+|_-M_TcT*2jRS*T7w zXXVknc!U)U72~Vlv;FZ`g1|kT(_c#lsp2{3b$xI7u0lb5g4xnit9iM+2ZQSERwk9| zKu+@$M#!VwxW8I}wqCz$Z)9>0d34Xdo_1H{g6WZbnyVdr51UD`Ri@n{7#!gnL zfw+n+6>^&s7OCYHi(orJS-ZKEz5M+2N|pz7MLuHO^gMV@ag7!=c96{1Hy7sEOS@v~ zKNm(44Fx>liou$9M#c%uV8{d7hqae#uFF}7Jbv|q_DuOobsFB6Jr)?t94@0&F*S;G zM--VL7E>T8_uHV&mTT}k>`phq(=KI(e(yE4zY33mgFjiR*$&LV|DLS=U8N|Y*pZa>=weImhgvP{0gYjcv-`RY17Cm}LrGne_=SzmAcrIrL5j;|;L!C6 zKkJR!_%71uQad+4at}-F1e$^EjMu+c28XIP^gr=c778tSOfpYi)^cGC25CI@ppg$D>#_)c8-V#X@t7%&8 zE!?J%?wU-tlPWLfrp<#MSVfYO<)XIn3jy=lZxcj`=oK1TRMpY+_pZof~^jGOsl@DVlU_U6NlY8&^2^c{&C@u|U z-a`afAKO*wi%3h*L@ku9Gt)6Fsx(zEbn;jE?kC#o+&A8%H{Ho7IwwqQI!}xf&!dEf3Y-s$ zOL$E;q4x>CNKGmKz1>T&&q(&(L-$fLghj!ljt4{Xq+{mqRI*kqX1&RUyd9{mDaXBA zx$p5;PhmieCvHJWolWy!ZFo2YeJQUs3R(nJAp{2P(x0^;{~qU>&t}KC@4d%1Wi8vL zTGx;hjXhp$VBRM9l`qnVRN14WVJlMeA>3Knh zTv>+PpJ9sc^8*1`VU_U^(HVH5?fZGfS3eNFq7g3;Bu9yQ?O+ zh@Q~D%oAYkZx*~nEsQA(Pa{0?qjyS*Rr!PsN1Y`l3vBGQb^{Z)TCt*ii592 zOtoBM@0|KpkE8Pa9HXlwE6o8yebL#GPZL&QhBM`$i^DE!KoNcj*Q9MOf<;1*R5{6- zEzNFg$y;P&7E78qLWWFRfA~U0q@P_E3a@Sh@aR z_?-1GE0Nt=^CXJM24f6|meR4={#2=2>w5X$wTNsKH)D2KBK?dbLj-zxjZo)GNDX8Q zTXB@TR=4*r;gsb5h2Lm!c2dFLAYCbT%cWpHJhOv{n*HU&mP`Hs7~0miuO~_J62Z!) zoEDjkx>XJ4J7x`R-+w_z$jZ*?z>h$G%Nyw4t7S*@^bF^Ah;3*mXQn-Lw?rnaQE!Eb#%Mi=QK|Duygq1 zG{TXtx;~R#Q%-9YXh$TY%J0nd_ulA%@e-;?&b(1ehAj2xH6bgXXb?MceHv1-W^RVc zNEsQdL0Y4kl1v}8f;uL*4r-&-iYHZOlql{HyxN?@w&$>OvsmPe z;~Q&S?dMSA9QLc2&GItZeW2$V$&Dvka9bVmE}_2yvTzD!tv9_2UbcSvr#nk|{}pHU zGtk2Mi%FS%H@Sb4tZi`k_pcC!2j9!VNZDZE90#WxB%&s)VWvj|H)iq!y=l2$eEH#= zuRD8p=$#tX4o$0EBZOzPX5rLj%R6aB5AQ?Cw1+jwR>@D&y=JBwoN>vrl2OjuA(o2q zZ_zJYpoQ0$Jtp%sJuV)e4=+TMuZB`TSWnyND^Kyg2cZ~+a`0Ort<~6ikWNfvs?I<( zf15ML{QO6-vq@+!A(VLnygywv6Q<&r+g> zikviU8y+HSm(b9kpjqSFk3RP1l`|^k;QYsUt}fsF%tNmJ=fD3RbpJVN(!=Q3TcgUx zF8%xI^1fYL3Smyi>*8l+SJLwszHWt84!!>{X+=h@jj&QR2#DRycEOzNg*e>Hlz( zp>K~xLPSC5rdbU`UG;VvqzkXf^g{B-`hvs*!Qdb&XbP9x#f=-r*Ue2j<9dEWV}?Oz z-Us8mGm6`8sg|+WJ<4onpz79soov0b55RJI)LKNeDdYT_qxNbczf}@fkO|^4Hg&^e zy+V(YM5>wQ6>I1aur;aEPQ2?MZkSXP|AG82`xhw>lPNKtdpyvPNG)<2HRBZc#VnXtr}0E6DBwwuu<7`ypT0_Uy9TP^KgwNTo(pxI_7+bDAcm)Z;gUkL zFewbfD%%vdBKI5cjV8wiS$9_pHxR2X^Y}9(&fl&G=Z(@Z2X*{(iPEUniRE-ju+NFOR zSE2U-8hTG^;@5Ev3w)Oo?rJc7A1S$T=>Dl1Sy(afG7$`(@RjVG-09j@09Gc4i-ft= z`EG%Z%Nox|6dAhw6rwCem#r$@>DgYKp}Kl%v3gIj>OZ=Md(l|GYKqE7B>KFTVhM<; z+{AR7DwnG-WqVGCg{MX%BR_SpceZDPz{k+@rlqCbpH{d?O}q16LS5dqJ#ly)B6q#i zsio{1-pRu0^$=D=)yjSgfKtc3Y;($b#A9oBpzZ}SjVxiCC!bB{oH>Vh6{+NZ*DRM0 zP>J&7r4U;m@cyg}5lN~jMKNNMCnzy{h*cYp652ou?4;qkR7&7w=l!45O_Hs+Y`rrZBfOt%m{vS_ZVN+n?PNXk|Q5b2UfdWn1mC?`8JX zbRB{b6jvO4U-hY{0eJshZj!CXCbOeRkZ#cC*#x4bmF`KkgD^2)J_BQR9QCQST$uQ; z1BBUUoYYxfk~jTgU)zjd26$ziVsHk6DUmC)Y5&rp`U_og=`Sv;X|`&z>hD=I9V*s@ z`X6tmzM|gCVfOxnG?-Hh@t6U8=K18*!zb5)%6c1e=+mDIxc~Y$LX6u#I+NTfjujn$ zJVAI*g+4Agq_>`~0{d33C3NDYtSgT!GJz!GCy75@0+&A-ox}xV%j@x9_z43aou5|$ zVPWwj^0!j64om{eFPXz2@x`cnEZKyUoMQn=}27YP)D_Ju&u4;#?zr)n;v|c#gQIdz2L>u(WRRnY~%NS zu)RLZBBk4Ws5O~t6J1?(m0*-Xl@aUKnNDmFJ9S45_^7zx_MYnrfZ>J>ZtVMTtyhNO zF_86ubJRpO6so{Y@!;v2TYSgn0m<8w^>k~X-7Ff3uRhK@OI?ePym(1;H==iEgjP!S zbV?8=Bv72$6fgY4wM&hjI(^+{k2M$*5j<*n;jBY=yf7iIPuCW4Z3+QGf4XP*!R>7v zQ_oKTo)GNBOsz5+l8e?|8r2b(m0cny&f@-G1PlY_syeux<}wEXv@KOT*qw#hKi!EF zFWx9_h95~W;2Q%{asBTmGgo~?$J8h9c_qI1Dh&JL_=xPz@I?iBysul{ zUs<>1L)jXL+xC2w{dP^5e@=qsqxFr*lZTx^U%C{;*(svp$QBelN%I}mZL5f&mN;aU zVg7^rvD_yfeSv~T2oi#bs-px6f^uOx^japE;`f(h@1?9ao5oiz?%C_5N9@2=f4bM(3KHgaIo7WJG5DRne(!-5DpK{VKiuA$vUf-I;Mm2Hp&EuzN>E7CG7 zg=RB)pqE$z?}<|z3M`&(KP`1k(XkG|m7;|3%QG+F_#Qlg_gai{+g9hmR~iM{FEeyj z0nVy}j;mja+aVWpzFO!7o!4Rm47vU?L2nC|-ey5>4VK<&!Iu}qmzR$t{Gele@3~i| ztcR|M@1AR_ZQx`|)E()wmYru+EmS@)s zZ+}oxZ~X1Tlg+drsvM33+oO164fG80oiJtt5CG)e)|%|KwNu&cAHXOI`FW7aSR1y#dM-&@=I zS(A=@-y;SO{WK4S>{;tX&Mq!Sc_y*4QQs+~;#K;tqak(o6-0V5nA-IoFUbFibOzzk z+)%ykF&XkLbl43oLVb~U8P8fwfug8#*NOH@OIL$1&{`>o|BWv$6F{p%%magp%+czZ zJ}ZdKr+wO(c%mwXV{VGbP9!C6*1_2^alfhkSCC#w3*L|@qy=RF+{kmi8Vxh^n3>(w zvR7NSUC_~tOqXosSPaPWempe#;%mabZ|IjN1)1)G-( zUqT+%RJJaQWzfqc0ZJcQX1#5ES|Gjx@O+*FE)J_}G@}gUg_ZKa{ul13$L0j|a6cZ%}R6^zXNq_zA5e=>LVK*44R72+BXURtZr8)RfG1lN~l8gjSLrb1>&Rs`u3kqVEkKK`&FjH zAED^_bmM2PSuVW`=J5pz#?- zU%zXncuhaQQocWrsrHuyq4h1Y`)7JJ7W=l)`RR0;D!?xA;orqgO2lYMQ#(8)cvV#N z*do*jCnJ4%%R|OpspG+Te;!0A#yX|Qx`LZVQ9jBAAWWw5)%)J6i47p=B)MI2s3qd~ z%C|1|Z^&8dU%9DQQi7z(kYpRQG9S_6NTM>K%ipY>XMeli*n&0l(dlt+bnKTew-l_;z63|5mFkkB^%8YFd%A3}5eZ+a}Fg zd77J^)3@PcIjFMN5>pwGJ@vPt9Het56pto*YB%iudGo&;7}mG0ITin!RUz3Bwr{RB2&%2r3f~QJOMcaxJ}5{zI}2 z$O$H5y$ELT5i%8ytwm`HRKx4C>;J8*b?B(Qk~uL5>{j52XVeqk7s35SqThENT@D5l z6>`_Y?N3k{=`R*FLTz*#J2$dg)3Ixr_@Zhpx#I~Vs(+M~5-`=Q%5&1cNm9HLu$B3Q z1BhE(f5`D#1JrC;_^dN=8I|l?QxD{oH7MhP>bOGBS=rpwsm%#p?Ak!nh@_0$8%<1b zeGiyv|H&pqNrGMqr_#_7LsmDmU(1R#VXdb@eYKY&YX+qW{I9J(MTSgTw=o>4<{tw2 z#U5Lza(qi3g$XL*ek%wIjU2Mz4?D2T!0XCcVsMAp#b?kMnY+2LY3J&Rospd#;JVY* zZ5VXs4?F1Q^b7J`tq?(F7;z`1K;5K(HgL)E_Alr>TmU~`=$(#oNbgMFsk^M`v*;I} zSNJ{tR8)sx%`Y7&i8oifp{_v#(UQE5wlc&YnWng1)H@_klCY(6|3nHg`g`yRVGo?YYmv-8@`J-0V?bJk%ohhh_~< zNId7qc!RLShK9E^LxNhMKOq2Km7abrG1t;m>N4?kTw@E`X7DwEqkiCT{*JBP4Db6o z0@Kn&)|jkS^0;p9oBO!lXP3C*rvg{XVxW}-e)+geu37JhTEpepi7vou^~$jz+QEt z;u|uCf;CJneHZ)UWmgT%;Jvgcj%@5{hesRd7D)%O4kJWD`u#}+^-p?#qKx!1g+`yk z?ne27^)nFNNT*tX<*POV%Z8^)z)ldzKoxg1HJQUet6PAnyhbbQv_GebYVaUs6Abiy z6v@Mcr2P^f;#2Wxd8M>Sck6FxAgmzwHMPL(O1bszU=?Tcq>u&lzgn-I9*)au@6%7L z&{yZ3p1^KL`Fu9hM`FdbcerH2kNIK(yuO#dZ(H*<+u5=Yv447iJ|;BXwCl2hPXs>x z@{Vbaf>X&ggU=V`hZX(ekZvWi_Jj;o=CX@9wJC4jH52;k`UJ|E!T|Sl(OFhTOtbgCfZ_{qb*D-Un9G7^zpb=AJNgF+{4^GV{)4s+EiaX zqsR905gptm7<3CedgK2=EhoP-bB#Aq1>WCfTsutIWsL`nYq=5jv4@}g(w`%lO(!sU zyd+^EG(s7F-O~+M`5g4K7=$rCn6fCw&*LX1{k0O_>B(}?Hl847i1$0e)ema^TUJdB zJN1=RJAL=+6Xmb^H&pzrAj7RkWrHLj^*dI@w*09USuRbTEHqnF?Cjk>Hh(gkg3Ul4 z6kPgG29Fr9I%viWr*x~s>OhYQ4}T^nYu^FU(WC48~5ZJ?TQm z;04pMa{PY?2={`l$}^*AL~u{(bL-Ym;He3}Nh<=R?g4r985%fQkIGyk@5zxmL)rMA z1adp%jxXm&KSYl3^lk#)$OKl7hKQy?XITlpM901`r>)$Y#7h02tH<$i0is)IUu>Vf z0QQn#JOlMuW<}K|5I)D7ltfH?=9IQkO~ZOkU0AEShF0vHnV!Y;YQj#=YR9^FG`ld@5Kmoze*k|@zr zZr3T2nj$Z0m99}|mol=kU51C!TxK#+lg_Dh$U73B@*-iC;{U_TDcWRW^vOsSuhy2h16j^?< zYn4c9N^gq1^p1Abv~*9+U9U*n%$DdOHS`HePMJ;8M(JI&$UhW$DV{RM7tVp9=r}UE zl#RN^)k6xA=@d;^Nea6XksFj3DIK!L(L33N4_U)473bsMmnMIQO2cZkSNo$iW_GQjiIws{*#(a<<>FI8xmpu zDOi9=+7BL%PRJ5<2Q888KR_?VY>0SIKVW1^Y{+23x$PLmw+&mBzuwH2bO$k#_%*;t zX;68wKH!4x27x8-4Ynt1fB4x(O20(9A$4F5vwYyRf*350^fka9U}%*s!KnBPhCy2w zxHoFg4g6Sxs3>(0exry&F=R8*3EZm`FoYjQxPrbxVM%4ha0EBOHpFWc-4?rncq&!t zkG`Xb0=7-RD1KZ&b-%HXZVk}xGtXKi2@Ehq!R%Wk_b24ZoZ}r6jAR8ajOLH#D>y~p zA>OdhcP{oNRUWK`ad$A-3B3W{ zbTB!J4^Y@iKp^xyjHa0L>{B5F$$O%{)CVLJ6(4DT$Xmo+?IJ+Z8}b%&_p=G3A>{>P zpSie0!kcFp$r0)}`YqKIr=(x>0URXpA^LIdN_4DdYOoCumf$qR?4oK;XCPZrd<@PA-5=Pg4JRw4sc+mH!NtwE0)+TA_pv)S{Nd&;Y#hD za~9<8qCDx%;~y1pgYi}hLUfIOBoxP;q3B9JhgI%YmsyqJU4~ z2Z>Hb%tt8)O0Phagq{JINmXf!bJnExOyZCCM~E=YWY6HO9MhV0S`Z zfic_!)W15^4vc3jI!^D-fgCJwyV3koV<0;Xp@qaRIjS=qVN#4&ahM9?5dEEQ-XkyS zIDtv2k-s4CDDYOz_SHEMKaq)|n*pZ--6}XL6+BwC2G=)BifQ$p2Wumo+ediVoxE3a zc-Jbgq(|&N_(H9T{;WrF*q!7(EGkn72)OHyop(su{I6d{Th*5I&O7`JR-m7h4+xm) zrXW6wt5{Vh`jaxVr#Zaq_`#hDu_aiciE#y})i~nriVq{#V|KtDGpkNQ2mmUL&WkHD z-a(4^$AP!!Vkmyysx|n|Ii$}C4+;9*fco%s@tdHOfMI*o`S5de3CdMIoq4(@JP)kS zuTKM0=A&DODC+%c%r*q)YOFRw;FuJCB9vc)=Ir~CF-`1kBYboi!EY>VdMB(SxcJ~p znovD(eenaw54_NWLfxc6PIAG_rvQVhLFC|1NZ$B6F*=kN*CdGNWGr`B|EZrD2oG6h z4W6@8s;m05Q|g*O?s`L?zz=C{|C>I=G>5>Zslj>R&a}Ovc^X z(8T&?4>~LLh3yCSTUX``trb87#mgE|j@FZR*J4(P`}YoRZf_Jc#1{0+8d2>721b&G z)Le65fRww)^Xq7wl!N*zz`59;`WEa;J{LG6x-WR;rD@b%cu7vdJZ`6=Nqt02=~DoB z%NfO196H_L?0d-=Vdrc~-)-O0hn|Z)TS(cjy0s6wZr}1h+m#OJ6*!bRZ{HRTjvIw* z(Aayv7T*?Zl{csq_~f1ldkc<%d2JPNhY-MEwxQhjN?(KXS15%8kq=TI$*V!WgRj+FEox^$^PO9;PJCCmiX?C&n7?b3Uyt+ua+&Fzq;? z@DS4TDf=O&n@i?>^awRf>F}on<*5w=NVzQe@2G23VEa^A6aHxCCjr^JM-s*p$}WT- zv(i^sN2?OOeMkfTFdwo;^rQwT&p1|P=J!(7i!}sqVO3hlPhyo?q$k8>=Cl<+NY*)o zUryGskVk2jAG}xH&*n86;(GI`f`08O{?UH@skXuoQ;y~Vds^#d_&zJ^Hq_%tYj@L9 zA;KpMRDYOTV~!0dKC`Mdqao3_taFLpg{8^Z8+Mx57iVB;GUQH<;}o)AOSOJT_ln$B ztdlgMZ|e-EKd|WZ8k||22h4@yR=4F|eWPbo}5*%8qxiZo|DHCg}&;Qf)rx{!GiV z8fXtaL-N~FYnI*i$T)%OH=*FV5}gm9>6Zd#KY{kFwO@zvs)Eyi$UXU|A|}w&TcHJh z#Y};6^bx+B+>R54a>XO={q0lYC8#d=3|t`BIt|WmM%ioh+Jj?b><@btu`ABf8EU)_ z(&>;_YS=Kj!CZsH6@HNs=M$gyZ}mXMn6O;Qck=&i|GSa2(gZ(=Twy_p_dv1{dGSVC z_yqvkbTEBZc;+I{k$7!5uDE#a=oytpc(Z>?jIg(-QlLNik)o3|k-cD11{7T?3D%SI zjuNT1Rw>c~;u_%Ym2&@(zkF6^IV#P#M1b1nMJ$8pBJU$NML zf$nkb6uB?yg;81`2ahMY47*rea6_m^W-mGZPx|8%% zKstracl$czHPl`M<-)&_3pe$?LiS?0fj{T7FRZl&^GKr8=RaHOBR~lDBRhilDtsSC zKq2u{=+oo|Wn56|ARrd6jnGw){8`x_<~Z_UL(Dnwl6kaG>T+>5=-YYF8H9iTJka2s zvQcW3U9e@3)C`fo(%{$diGat6@5(&yHQQTal>O_IWB2z4!dT>OJ;osN>(}EBY`$65 zFlb1$fZ7)9GZ-`d>Tv_l9r8JRRM5At!btlHh(DV+jNXSidITGT>I5VYEMqq}-)elA zmq&kdcDC1{A9aatSMfomrNPB80yuYnCd9qNmGkORpVR5Yyd6phAgBVb&9(Yu49Bel z5g5Ta)C2QnHrphwbUM`2+Q)7~>L5q{d)#|t@*ubhHM&TG39xQI5KipB7FPD>+PSFK zcaAS>wYa^AyjW{_umxf4O_y*S5}nK1Pq>%tZRSZj`A2j=JB=&)jp?lp0jmfr{rjL- zik+wQ%?*Dr-eEt}^3knF`XX7cv2(Am#zV>eefu(wV}y3GPP-N=JAeH>^ZF>?zc#9$ zjKBZtJkCAa7&v!Z#dcXt%3hQ~h~)nc>89PfrJ7R_ut7Vpy)5X{^q6)ikZk6|c{*cx zM9ciZ{N6j}msjr5t=LCD4;b{&Pv<8cD`eWIAG@&mDU>ny(%)J0iaZgxTz=#xoX)Ze z|4BTGo470g1E~iJZ%AMF+ZHuCgdm3N{(Lo27C7(V?!WDjBIaS5KKy83gy{(H+yI!z z1+QQd{U1Uq>JLH+_!t(-VINHs^b{g}Cuo1oFfMGEdbi89kKVy$0v9P(QwHMRcLw6T zDrIhLy)tFz0G9iC+Ov~E#9Iopn0K38`e=)I8Q1t7XC{bpfsxHmw~Ws$>s`J?@>9Nq zdZI<4Ok=!7uZ(N#4ms04?f5s_d!<}{`tgx^;&PkJM=hBEN-Mliy$#L>5Ar6)xd4dt zEpa2#waZ5>JtAHnC>Q^r-OjVw?4Aya-_`e2cq%{6;qJe@9JR3j>-DStns@;1A{8e= za8d6QDA5a;srq~Hw@CM0Ff>P!yKme7#UP|x^`iZQa_`xoDDOBuWV5&r^W)l=cDnwx zoqOxWLHR>0K0*aw#i@%RHEMyQN{m+nOyJTU<|hwI!jbGEu-l_vynCI^BQ|_*q1<9l zJhfU#Gb`RLTNH@r0m7mKIS@c3^(32!J?{HNd@TV6v`*bH1o83L(d|EM%hK1d}c2L+)n;? z_hf#sPr5Ze)#~dy^z*UOWWCXQ&Gzz56^}|yqn}b`9hghlJP#M_yPusNrqQ=>Do~%4D&oC5Wl=Ym6L;6gK^Oao%6)tq!yB?Y42c51$x`K; z4DVh*vlR6t+QGwg;zKU^jeL7V%Q<#p+ziHX2!Emg!@?iaF8{igSKUOW8Jug|g~*q^ z`=%cK9O54aC9St+T}ovLp?~AQt_`-omZ-<)(8B$-QY9XkV|U=0`XooP*y9}rH18c! zC3`rLcSe~4R14YI)ldApQjrakd$nH)AN?TUjefH^oeYTA(W08DNBxL;M?O(>bLf$O zx_`18WQJ=;08%%ZcE>0d`0UgDldalha`KUU)ek^DGD8Poan>GZgh2v_$iKFnsZa1v zmeb(6CDIYRRAPeaW@*myeikO(vi}0qLXT$V=|VRrLtctDs{3O2cCfo~WjJgx*ue%E- zTo1XSa{tmk{pp0WH{Jh! z+wb-XfW(glK<~x^-nvbfVuo)p)Aqz~TcE%4xuKyq`>H<{+Es>D|4(_l0byMxH0fM) z0Zwf+T|WxDVh@L7{`uZ2U?T04V(&s9i?btqq_4cBC+)nYhvvS`43Z|i&KUJpPVwh= zxPIs?at*tF2X>k8)vgcR8|>$CK7zF;JVIt&m+_SxayX)8?L2!ZIC1l(J(<2K#{;BX zBd!SDBA(VEj7Kpm6h{pwn2rmu%eNK~yU>|q7`L;=@dn%CIJcR+)tDNH-ADYayk`FA z`WC-2a}zJ#)cNh7Ui={|Gpf*x9?mZJIkw{|gnke$i)7cegKl~FQBCCWOs(JJ-io~A zlv80sq8Hazp~dMQRcQCQ;Pqar_4Q{b{IkfToAH}L+TD<2Be$^U3}NniJp42OLHhg1 zh@|Y;K|Y<#jR4u>7V&-23b0$&%3W<~GWHUpndV1U*$G|5iR-ErS?qajq~YGGJ|P9@ zrz2wiT?hSR>R*F}_vrA)u@em8=llHnjPjK?=`(4hfTYmRWcQH zrbXB1u+T{Q++i|6vds`_{e2*_e?5Awvx ziico|UkXDs75App|rNZ(BpL0Mw= zZp8dJLP3b$Kl`HLS7uM%$Iib8zZ+Ji_CIHJMG<#;QQa_#ba@9&V8ysth|ENq*6tz{ zw>pvPcC76o4m!0ggqzmnCwO>oRMV{!*$-zCMU3%6X_V(L$DaJ3cQPwu?EE_Icg?&a z*b^cAhc8BH-KNvH%|K|4_QrMO7-FZKFM`luD*6MtQSf)o73TM)`1Ej=c=QOJ!rM3( z)C7$v&3XpA-AG?d-{~5UzRTyVM{8CcJL$&bbb{MwQ^oL(s)_1OvfM-TEv=U6_8#DZ zFB!8&AW^In-580qfq&EKZ-i%_)cjA}Du-%=Kl1ebSzheB&T(MTc4NE#4z5z)n)zZd z@)VXkcJiNnc}T;5=ii|4z^^x?w?8i!-hnR|FPKJy{%!dDaP8n1jC{@&iH)`$U_(#2 z9GfTR1w&i-4M{Nrguy@snqx;Qeh{)=o*54*Ysj~ zKdw^udE@I9=mHB{3pu~xoGx3V?;kHICp%n;jHVwaN*!DmjN?wRH>51J8qWO`2K8qyHNtyl?b1c*!<&pG(p3@4B%X0DS2Bjsmo3wZdlWeRd z1`dP%gvTD~7P=}&a7POR5w$-^VUc#jJGkM>ld~MlUD|+T11~reX?(WYb_0;Zc11SN zM{oRdfiVk(FX@Xy%u=gU*AEZrhl}`vgE3pYXs(~p``M4XEDa~Mz<{=!Cb$3&LJfrn ztJO$vu%V5>nbI)e@?^bWjH;-Uu!tG(Z9o;&zg~pGHo@xRZ%FAD=>G|n8_>59SvI0P z@WQxux&p~7u%j-7E`u(N02t>pbbDLQ1gaSME&HMy0!L8)def!%t5T;htEE+RyTF{b z!lV&SZ@&7py9UN%)a;x8JxpKq$x8??B#)$F4XD-r|JU@G5X{8r|5=R9ygSKxgUv4K z`<{+Z1d9vDc=qTGFfy-l|5-5J&^BQ`f)`+pTA6{;0*x4h0S1>C*bX&zuUvD355{a+@hiLq8VEmC z>J4c;{|>`D>;U=#kEH59-;mZNPf43$ z-KDj~VfWM*3?dk8WnngnfWZt4Hk5t`$W9&rbaf3FyOU7(-@mXvf=6Hiugk&c!2*Fr zg~vN_t2sH|Oduo^=5#k-F5s>}vGd89FqnJ#?ZULYP^Q5hJD;24S8r;99kl&_Ax{a= z@;NOTV(0T6V8aIBA@X%o-JfB?AYm6GkdQ&)q5n6j5CPQx*DM3pLqYoPf9DI;+WM>w zz{cF{+oMN1)Pa|y{F6HZ><2R#n^6R+0LqK@nCiP@n6A`d%6CO$ha-fo1({_byikGd zNTDzZAGly%^IsISo6!6PDZ1d2v{}p`!@r(u9Yr9&T9mA!qRD~x|4(2x$Ajq`9cH1t zA!s)g7C@UOA27;coLR_p#Eev!BKg%P+rs?e>C=K%A3FSmA{4-Qf%zoQkFjX@1dfyU z_SCSYzQNdIh7oYS0;Rwr=O~O$l}g?9cg;LE`2R;`FcnnIkO<~7|2Orj$Q#l$fe^a8 z=-8IO6*gCT(J(Alu2}h(z?2Bcz_=F+mO&hcDP2!h9sL3qX7>?nF2V;h&JlRk=@$S) z+^XQ`1{a#vP~0BS9b@r=BvfSDq+Qf%hS7H4{9OjD0_(2YWf+l0-^Ik}CM=lDuT%Bh^9Q2F20bso}1 zc~2~T@(g`!b8!zY`G_zQIVW3GCJl6!euGHRC7jcE9A@5CiIT>3&1jz2zE`>*2EFqU zep6|1iPlAU+9358A_r3Xk63&V9w{d8t$-qYuq}QwiBGbYd3jk$eJb%)aHY^zze#1| z0$(J$Lha|Og@x47TlfpCs)c9M3|!g?k=u`d?Nmc&IREoPoWhhqTnJ7u9t9d!aMg8s z>?#i756!R_hU&b<6bT|)bfmq--r#1nRJD|hbYtA!`Mls{EL2?-Aj#`$hR_^a!_PO3 znpUu>aVam4w*N446W&*2P@{Ki+`n~DTeuvv8rjJhMz0dAxW%7lKo^~7;N<_sz{k>d zU+Y$(Gk;uOw_<~4GM`?mSp~esZP&~j6hx1Nsf|D9v&W%u%Ko4{W>xiV8b4x5`MP-z zC3kYE$TP_C$Xud2#hvX7s<~PC?UlE-Y}c;V!T^5-{Fga5?8d5YSeg4d(aLSMGB0aQ zLDhu4^302OaU;$kG^kQPR7SrH#?zQddXpVxk4Uyk*S<|FHhH@XdqwAZBE!mYueht|{~F zZoYgNzfP_i16nrf*zQ#v`U4&AU1TvUie}dNxdZWWdD7nZ_#xj#6mHh+bChL3` z)O{8;+*TW>K7Ow*;{L$fgIdsJ=tAF#bG(6l7GH=+8L?Ebe=PbD`OD+m!*CH|)AEnC z8i@fF`4F(I-Z2Z(6oSbOCv?LT!&xA~+2FaSz!zoeFAI-yt9hx&sq#ss%~ey3M+2wI z{G1E=deU#7J{fp?=1KUa-{Z)puTfxZcp^Evch5SO!gH$BPvbx&B|;MuI|D7v3@)=q z&~=>?TalHOWrOL75=ZFt3>$k~2$7Kl}q!UcxR`#Rl}NTVU|W#T4q8L zq+B+dI*QH~)`f)PWX5G_t6wK9hpP9=>J zaEvk<|Cu+W$vAbc3y>4u&d#Y@{b9OroL5m*jI~Vo%QFYiFKDRM%RnA2^ z6xkWOLHrC#*6vH`-bW0~$B?_j{`gO@y1uekFTyvjdpC{4O7B7N^b0=tAD-(svo?R!GSHP^TO~ z1TED62a!(vw%N38fRC?q0Hu@mc+7VU2e5K!zl@yKR!R6_qv`G?|HtZBZGMc#0b1#h8laeo&-=@^B1FPWFoU&cL*+=xo^$@HN%Qv%U>t#W1f z%o2`y`yTpH!+8a)(xyepN<2M$upz)!l|k-o;Jsfnt?7`AaNdFY@8=1xSe?oFO|cqx z=elGMZfvFNQ=z;y%Gfvhq75x)rLYx!=bp}pkAdA%x?vxzIBGB{%KA*5y^WZd@gFBB zg_5?`=2#Q`AD#}#EsOQ^hBWGWxnJS##yBu2w)}`@^zVw3{;ojs&?7my;ywb?G&WmN zPB>GmE^+D=iSx|I1=H2vpT|np_nqrcUWZVZdF) ze9)oh^4v~%?*1L~J8s8uoWktE@rXj{#|&(VAd_yFh#wm`_AV6qNxl08DzisjS8N3f zu%FDyi!bcW!;`J?Ourl-c{+ z*6(cRhE0uBEGddOouO9eF2r`4xtAF?RE?bhymYBG0Tp0ju^aZS!GA}V_GxHQUCZiJ z1FmeCdeMeM1z}jKd;Shy-R~cw{gU=qUp!jhz5cU1gKTJXuw}^j#sc+0t-9JT4&!<2 zR!>c8bM+%ibBf*i{K*70aG;ztZlA;+maucS6!YUqx)ZxKvn5F9L~R!W*aYwr8X-6-{kbohQV{P8PjS405m|2cl?AZ_y%Y1A z?OD4m^WT+5ShQXY@Jj_QBA0IF3uH&Noc0y9fpa`jMflH?F7sxWVtYnP_(?5M9uUUtYPu?cq}tz=&yG z^l| z&OvE5x!T$&nUT@M#%4|~b*-L0fKD_2E7^P5!+XKbt7S|dpZ(=$Hs#@UpeTQ zB(0{V#H*nT7&suVc1v6-GS#ghiSsU)HsK)&x8U7RmM8fxSO4{%Cs9lePn;*PR|)+W zH*6#8B!1X!wJKpSN9}T8zi`G~R9%M#(82<#aw>gP^HA`pBAf1a zaQv6Yx9{^ey7fIiStk>(;`n| z_2us_Ux!4S=0Oyp%3Faqc=k_#mEsSV^nkGI$4t{t%vAiBTBx1JOfN$4O%+|k8B|ZN zc*)&}KzMf-&WT0TYvJJn#oLEN^{m0bGJ+?Onm1?&EH!zy%#((&lx6JGIXLE9x`>!q zphn^b9^>1kL(G7lG6zTsDKc6^`Nq!@iu2a&{H<1!D6W(sDrBFffzR^;NdC)h>{oIz z5}I&w^N=eLUIO$L2-GzVT-HldRIi#*ufIhCpuW$6j0$-e%aGZlK@W82Q!idQ{_&aV zg83K=x-NGrs+!-Flt+g&KH4)6{Xrsb$ML8M5hNXQK3uXYRV&#UUNt-ee`X!Wb3E%6 zGnDNeY(10v)0Z7>*CqoZ`b8wTS2Z*wXs;(7lC~8gwnig>w$ON8hg2C*H5HM$HuJ-BN-8^`;!^}O~! z!8$D6P_s9K8Vp`M1n>8Qdh3N=(ncFhwt=OJkuQ95@#(#7p5UyEJ0!0rz-Qk&LYa~YDM;3F9-w~z`KJ;vSj5Lq=SkgHcSpTQw=9vCfU|leH9D3=GOOS zte=l{yY8^7BARb{o+=57st<3TpQ9o<-=0RY#9uAE2VI$<2ho>uxkv#wu|A(YXH!{a zh7S~G&gUr=Vo(k>fX_Q%cQBX5dVdRRY)A4|t!So+grttvVXje`r=rO_=aL|%{gsYa z^Sk3aKRmSAL2<=4b$AU@lJZT@4~%>9)aChkNvG1v>S(Wp@j`>^{-DC3+rhKDF>UbP zT|L5Z{*;Ts3v2o_MF|USBxpbqD6goGV={Hg)*~^$f7%^_)xWvJkp&mj>ZA>+IvHD$pl!fsK=8C!hMUeqr1!RkJi}` z_kVFa9QYCq_@5k75fqHgVrbH{=q?n~Ow+ZueoNF7d~5wOZA5azvzko1ZFwN{SEcx+ z=ZeXsOnjc>$tQJOT}8^+%gzStw50~tv!^akW>H{j#+yak>uz9#oT(zNX>ZbfiC@$J zW71Aw7~=Tp3i4U?ZPf2W1(iZXL(4KOM%*cmR=8 z%^WkMUdBq|F)!z;RatcyA&oH~(?t&4<&JaRYyScC#U{<}sI;cRH(HW>sHNSFfkNYQ zwBy>X(aRXGXQ|@H;3oZ;=IXn}rR4|1kD2&}{y|8Zd8pJ!c`XyE2xc9hq32p-c3Gqq z)e{H6J?5+7Z?o)|xB-w_8Q%G^7VA0%Uwk?hh?as<5Pz!9WN1ks@SP?W*i$_YAF{2pbzHaI z5VGuhC1*1Jn8hw2Kbkkjuf=rH`s9)p)@p{Cv|c>2qd=Wk6($BrH=IyjG?eOl@K7=2 z+K?|RGkr2-o| z6pGM{171ghZJpfx#ls%F^Us1_a$Z1#pc`5B7>|Syl7-REwl*U1f@2!J$qV7b$FlI4 zpo`XB%i!Iab6ncU-P4%*EUBACS-YY)vMD1FwDWNjaBS*Wmcze(;h50tnUuOfJaKYT(D!L!Nu-=MQBI%Inq2=I5n_TLumZG{jT9pI*s+v)Yh85uJZ|`g8E&`4qYNRDC(|S{!oY zfN*$iS)>NOetw=QO3p1yzxO~8T6=jKHIh-Ivxa}woo7?MI!Y1bZUj8S&n-G@tPWy8 z7M;TBtPzEA8l5wEVy!%U%+m*Bxov1_g|5tt*~hx|Y2oX z(r=o{e24LEzT15qy<4xow*Ar+bSc}z=zrFeKJDKxS|c9NDKtn94MC>3V(X!b6nqWJ zl7}zMfw^*$zcVJY*>zuZM(xlZaYF|=4$e+Z&zya%A6IPX_<>?(XTR3EZQ@*!ha~v-r9ToqgC$FRUZ%!{TiiTa;E9>>DoLsi zLW=_Us0Q2}cHXr=vFzx`*B^dUt8bGB`ty0RM}kj$O8 z+u(-Xd$*WIQs7k9_+ zuu=x6A!etc?52MoeQ>PcCD}=3c~cm`7s1T?fFwI5 zBSX0VVpiqZP+aA-NLJ0|3jEV~tP_su%+plUSeR>IA#L$_>2M2N<4Z z3jgI60WMgC$-c>KG49UXJtA%q1mf9F7I4@~NWUFUomGsf6_SsiqtV_@ToE?UK`g*- zJ=R1?<*iKz0VX1q{>!gH9JWofx~>`Gj)E&$7R_89jz%?RJJpD5`Jqv`p?|f#epOeI zVf|aBVT_ZV_saHZH;{ES%?tZg)ethsGI8QV3jC#Ic-+m(>R;@Oizd{2tlhsU6BL|E zRMkB{Je19IdH-stcYHXU_mb({eioILRfIhAf%|jeObf;b=E?I4A3?!;#TK~_kQ|8E z&5C3ft8ksaJ=d%2lmpHZW5`S54+nvwSMHEJ8>I|k(rQZ9=c0~^#*Khv@{xkf0mhW+ zH=s4=;g5+glgAwxtKG9FqR%M0QDy?Gb>dq_e*-sR2z5krCm(OMO397bitV)LsY_k` z0z>UWFxM->pd0pU6*EsH-F8Cl>wuE;`e&q-uYCLQFJa@n!cdKsJjB!Y#KTur$dd;7 z&#!;;Y#yypedqa2$zI!RFz`@Xz_$nk5kQ||uZO*Ow4@(XLN|MqiUG zdEG1m;%>f0Cz#)r^DV0?lSz_mhFq9y2&aRjHB+O^Gngor3ufedkG21tN4?8=tmyRQ zs;?;Eq1{!Mx(T2=|4AQ{lqx*{feYc9XCu6FHCeJ6v zqPyM?)Lqjv*9->en`K^yM6c^bkQrK(6&D?CH|t)zywB*#&Q^vN0v1sjPH%kx_S=Yk z2_D74y-Qt~lM(&axmd-TNR0&YEV$Ny(78V={{SWYAUpy?F$S;fPu`TNF~IksyS~fPgaJ0FSBs|5m#G{in@%e)_R&i1^MClt8ot|&K%-1$mY-%q1 z8O|Y_l^#eYqQ@L_m;3X1;Ofr!sZ4@vG{cG)e=Pt&i@R13Uw% z{Fzwps#N=3(Zs<7uet5zI>KO5@nakdCkQWRPgM6hX56|^h?R8?&}#xdc5?q*W72I3 z=BO%cg$Oons?O?=7TT%>wWipk2b+~z+HT2;7FOyhPpE1{z>TXhxr$(zZ62tZ>4aZk4n;XJn*v1H*W4^%}Wu>!Z zba2-P8aWb3#Nb)S#r#4n(5#nOyedM)2DiN-0A}uMA zv^|CPBg>FvtrHSyAdO#Dtuz5F)m;>1W!)JEpT4Nb$+2(B0m#HbQ16@~F}a5?o94YK zS;vQu48I5N1qB6}F-9Ph8G|xOaaSG^`*{R?|$r8QUWFiiwu?7jh{=m&WPN;;k5p7O!{>il}VQ#&mZ54gWwQ~RN z+%YlIG3PQl**g-I??_7hd0&TyTPnseEHZ9E)Wp*Um|I1_cXK^u^z5(pe{!kMZZ_`J zoa)W(GitxQR$sU_PSIF4jG-cE^r+S9*C%#i7u|k8kz84XTNWQ8kpB&BZoQ&yE9V7O zLxOR?R;Auh|K6>r2LI`~%}ImrRcq*q+1Scr?o$y}IFYE)Q_rR_IMcb_iz;(uDwk-S z=rjut;8p_aSGw756IhnHCul&+6?w~Ct|g>c+gbr;Iw@QHjcz60gI291MXj3VA0r@H z8!b_aEdtnLC5n;-m&yzUIEt1Waw1BS5EV6bGxeqq+pG7^hkt4P%kyQvLfw3t4*t!a z#~0`qA?keA02ioI_m%b;eF?{r$Jq6KFe?fMJVi#{5nvlN<7S*qC-o3wlO}La-uNF+%%DYf__JSINdzA#+fGs+ms z2;^#Kv}OzRT)$&}RyGrANMY>@7d*uDoH1ba&oi&=;9G+HPMzEG2?@#? zSbc!>tl!>vB|SyT1pO-MGME)x6CJEOOp)!1F2gGmS6(bA>N-igc9xSvCN`U?x=hO= zd1f{j{5e?mVf#Z77MKDVWkv4L3u_VyC}GQ4Gq2RK-hXjI&(n<2tuOGBTum{k&q!a@ zYP){Jfe7O`<&WS%mf$MEZU++;ZJcH=RTI4N%1Nj2^^4H=k4epZ2or8R6F$UXJhnkG z65>~HSiIZ+jV?Uc7=3Ty8{CYt%Mm?M&9>uhMzlZox!kN%ZNhWBtZ>`qSN;cp{>~T; zHL_Olhr+-!B{xr!qiis7+oy9{>{-=#svyx9rP>DVz%rutn11Zk_Y=;#Tpin>5(d+< zj+K9M9uhX;3@Zb=SXVK7lw!^T=BbIxT7fmg{@37|KQkDwMuF8wWdSpfuJ)ETT^YtK zG6#%50ux^~6`(>2NAH<$f3(d28#~v2D0C`cC20+lqZG5L`9<@}Y25r$yh?l;4D=Nt z_;d|_8f@&uqy;BC0}KspQ`P0CN~Q7}1Tu#`_NgMUb*M-^&@c^+(DrrKv*akemx|q( z7sWUa68|ka+WaF*zx>TBci}BY;j-^iu>Wlz6O!ww&1fvMkvh?kwJy{T#BzQ0ZtofV z$+eD1l^?&Z;O_~cHkR7>Bif)RcNZ}=Xu>)nGfUmC1ep|2HJIX1tNDcP6F#pTlsS9u z9Ic=}o&XC}pKNn))`DDn`-7tO?rtK<1!NxjT~M9{UuCB+=Q9NbZTW1ybBm}G>^WXP zhYc1G3ktT0VUhNBi^c7qxoocpiIN7(s`1~A8&@It=#{TniF1mCkvrb zNNX`z)V7V)x#wohBPqBY7r*z467`o`COMBbJ04+05uKuWkkzs>$jD*T|KeSars|%3 zS|zejAp56VFt;?ep4NtOJHP0sX6fk}&EaYa8`@!E>qVaU@2G`-QCNOHtA1rx@@t9_Fj zYK+w%r0awINkH`ic+9^wn-Yv1FwU^l`}QhhL0eEwnrzRW9d9Fogga@f(XJKAv;uS<$Ge%$q0(`G|+No(P~ z``YK7Tf@y;J!HYbpvxyouxduLYH$U;mqi1Ua2dar6p96qiIY8dqk6+}SP>B(E~uG) z&hgi{zr zdi0@Z6-LG*ip;_M-{-QLtUGqy(=Ca%nk>0->5~E-XZmZr;`1qazw+5Ak@+6BOJHsyiqm7+B;C zN~i8TS!(PkD!R1{wm`=CWLpTy#~Y9i!jA!#^70&)oFfH?w8HiR-GdR9z01w^(*SH; zHtnk=*k_80)IrY^v(^qbKbm-Zlk4rjh`vY%0C8t2K5v%lT63kx>5wDq_UC(Gz*9AI zO7StCJ@sppq{>>^ftE#M`WFgSeZ7Z4dRAQ_w64h8olC`;iI@IQ;M{|KaGB1JPF^*3 zQj@nGuv7#ae_mv+G95GLo^+zZ6!2}qo%Ajjr{3X@s?(kiWbIG)vyj8E-L(QbJ%{-e z;6tFw+vU51LZLRa~56$SLx~K)7aqn9Kw!NcPA0lQ%m7aatv_!1>=~s;eD`x=CQBV`d zd52TON4E_7!cX`2C-=@`GafUC6XK@6p|+>s2rjapA!+buvr)H+j%z4#$IQ)@40j(1 z@0j}glS&xZ6da5t=uoXlt~H$SzUk2K{27;$6?*M7;CalZ!CaWVhWEZ8)GOHp&Mug*DLMw<|ki43pnn9y_+u zC-4C4w?uojC7biMa-joF^^dH&S8J8vkponwTlFBtD%YOD30FZwJbE7iY26gOff2z^ zJ$*5kju_5sX3gn(W|5!Olm)PWVvr|edX4)L(j9a^MKG@zc(_+V;g@|?Ks7+W7iO$Y#&k`7Ue36&mh zL4nY0f7UOMj7JyUZ~Z}qKQog|i8?Z;@>79h_x(Nx_FH4`sT$PsNo`p3*$= z243LqhvbWAg%pobD!E=ll5oZ3N3v<519ULMDh4d>N+;bJ8=!a z<2Cg0$jE}ZlmW5qDF2^hu*>z!poHh5SdK$Oo6(|cE$~zO25(nCO9+RgJ%+q`Cg82a zsa$L&ZCjy+@y6>mGQ1}`V<`F>#iiq<_-r9sMQ~vjb)4w(&>S40%~|$aS>APh_-=yFmTsEWl>C_-|0kCo+GqM- zG`AzTBLHLDRVXQ8X;&dX*OV7`N^{AbtK|9Dj&VnpMay7(2}FRDGtrHR+A=)$t6GWGJ19CmXAcw(hW2@6!Vh$9g4?m(}8;J|7fe zHqyO0Tu*UPYUMTIiVA`h)yp5{j9JHiu>w(aHp)inByR$bxpT3if=B9dqJ!8myG4~u z+BWX({5`r=Wt!h@4vX9lJ#%w0DkZWX$@}%*#dOiryeY15fHDQY=qu{xi}1rq+RR^BPm9Enb6 zsdN-aF>O~$=s(A!GG!ih2Jc>@8UVeX^ee5Hj+drHg!HvvSux8lDQBuawY~?aznX|` zj7-x7>&0w9^M%nPgi6kvE&2D%0vWTP)p+Dy5B6TfpaPyhW|`z61=ospmTDwX%Otn4 zPg6J%rAC$EF70EfDpG>mI99XlQP<$7jDeXOW>=ODrGC@5KLg+iW$R-lK|rvp5c0|~ z;eI?p=lXk~!HTxS)J|@~`KjlA0!ne{Rrcs)Q7USR|0b@q9cnY`tM`T-HR=RztF`}Y zJGMlxd=z@*l3sUNdJxL-Wpgx_w=C+nXR$(6?MI&j^^Bt&9D%t);;YzcJisx@_uvjQ zDqT#f)yOD8lH`1RJB}s19LQKz4VZ&zc4fwNH3gb!)PgfPN))x4==y7u`9`eGiSXD3 zau_XxcZFA{oVXEfW4jj?stfU!F`B*GZ!;SdQFt{Htg-pa&HnTodxECAXNF{Gs`uOwp3NS)dcdf@yccCltlzffP!6G?<$iQpS;hdl|= zH~YRooe6DEM=SU!CdmtNJUJ?Rk;Kk{|E?lGDulHYl!rnnfFBBG$dChE^Ici zz5D#}{Z7A4qP>QxP?f1sUsMSHa%AioPNwQ@5^Z}V*~s|#z}1ytXZH@G?r#^_&Hc;o zLgsQnBF?T>1`sH{gont&L(nxrQkRV2yzl(`E*CaK7QIai8r8SvG{*}6LH0;WPj<9& zUZdzARB11wFdvf7bGh*&(qzU!ygYdU>D}cX$jw7M_-dlmxXehxOvy+n2u$e6VcJ9_ zWZLB)PQEnraFIDq;gQkS*=KzrvscQN3q;T~X$^1L10EW*8TN$2nNj738g1VMr?I2zLe)P#oF8$S+KAEzM;>` zO)Gm7t1r%@KDvg7jb>_1w--Igj>RBlK%sxL(EQF*hKB?DA%{JNJK-5$3;mj|p3r&#rwLZx zoob#xYQaRYcc_b4AoU~e6=AjIFV=hUkB4j$Ku6dT@83JhD$7LD3H!z?f*~WW21FI! zn~+2KwqUWS(PO!mf($nug_RX~!fo=-Kh8d^p+*chVUzdXEbu#ZG50bnUoS>nCQL$tS9A0-{xy6wnsRITMt$WCKI@7S|_ z02S_2vk#|b**+Q{;q($6T&VSGGejzjjc~j2K4A>rLw@^0j!Zj(*L6aJIbXB!|2iHc zix?HH76d?l@{Do_2!1!4@|Wu-INcNaOTGAz{}`~*^~DK1K&BUqgt+|5p*i|WEqY$a zQX+;m0p|E5*DaNkwZ((hET!0dJY!#k0IX8_c_}H=xtB(YQ9bDOulgVSffi1F4nubH zmB@i~Ah3QVijlvm+JcG`yrKRFH3JZ!EovJe+zZI+Z)lG??i=Y}UqWDn^Fc1g_Br`y zD48u=R0 zVo;7w>pI_x%$zk>w$M@@V!|d|%nfsW-3=u;iSZB~O(?Iemfg=TM(qq7J z+2+~6`?C)nw0`T}#7uivxnESdv7JI_@Kx$I{(TW7RSw*j64gsFDu8v7AAmKfL5ys7 zt$XLIap4=sNReYSG=y4nnZDZ?U8A;Dua&%N%MB7Sq&D-1zUS%_|C2)S+b%F{%f&Zj zvJ-I`@|h}cd_GL^B9QbyP%~yk7RxZ?vw^mmeU{QZa@l`nC4N)n6CTwt5@?}2p>EGPlExp+IK zP42ZrByQK}e#b8NrbVN|gTKiI`o&ktIz?vyTCeBY~dIkU6rbr8V(9 z&Da6!*a4@UQwyUPzgav|l&>+zq+gb6xY7i+1MynEru{)4bOR}vv+UH_OG8N=NG#mi z&Pw?d5FP=;#de;2VK+E=l7)v9t;98Uwk8%mhCI(C zEPpxZTJ7sQH}oxI(Qd_e>d|P2U$;(q~xztp%C#g5zN-(4{Kohy^#Obpia?0@yCrFParh)XeXE4-%NwsJM5*OYXbLP zvo!UGW%F7*$F#m*Tl?>sksUP^nENs%uGkl!{20;BZoxNy+fd;EA$PE%b_@rvdt;AE zAE;Heh0Cz<`Y!QxK8!7SAi{SjF% zi`+%f=8aBVhS+vulLq;?C8EFq9dfQZUnl>J(K4!(*Aa7zm^A-dxY^vR6z%lAExZpq zG}gAOlf*!gL}k+Y|2_jFF&&x52TC8QSnoxEC~e0IR9j6lq2i%YeN5#4cbz6 zzmZbg=09KUH4wD9-XkN3g{(_%J9d3Z5kop2S2W+IAKs}^MZt!p3L_4F8zMvsC2?=R zLz=p)0<2A0riszW6N3pWK4B?Xv!+EoFg(W~-$Vv#o&JZ8n2#3>QuQ7m$oj-8@hyw$$Uly3(kpc7{oWC$!ur{9|Exc|#iEn(g^E<}; z&&scsBKzb=vt5t?#VQ1KAz{;#P5V6H7~ftHzOo5^m8iK9Zk5Qd4sLbtJA4-&uc&V~ zsIoGU-lW%`AxS27`5=!AV(dFv+V{B!m8y0k=txfKpkQXfD8s&bgi9kpkl^ixzHt~& zx(Sde{N8GlPAuId;}l@TIBT~|rB=exk5TK1T+jJ4rQ{jTsaaEyDvrUP_3C5U?B0g! z^(U{S75cy<|MxT;3;m13*rkEJ&?jmlnk}KQ|9>YPlsF2r7s8>o2cn9c^oO88I=sg_ zr0}-g@8|A2^eC^-kH(G{`(OSc05yowg0W2q(Q(kD3*2W=!*qOIgnR&^9;??FSGI3- z!p4KhOX4%F|C7ic?yLp-(i4f1gzrA6^1vbXEcNT5CIwoFx@oSSr7_Lc&r8h+9)8=u z_{br2TkkH#Dq}qn#C(ko7-;*+)huHLb$~)`HaTjsl$H_P&)S^q(VlYgQyw{wrg4clWmFwzupJ7Yu|_QbMxkksCoUXX?ZF_QX7IJd+I9EqP*0u7}=!?KtR z_%GkG{fd$1ec-=L;J=*kKSt&d6wb4}O5HKqr~oRn8>vwVP?-SrQM~B87Irp-%|%Ghugo(NhmwWNG>< zUE=}?k_i&D3!>KtQxdc%#y0%3Y_{bAkRT06(Cn)uXnU+{?L25yw21pUMqyc#q?GDg z#8t%42W6G|p3UvwJ~PF4l6O+Hev*%A-?C8FRKzt#t8W8n>yu`ALjid1ee8cT!HZwS z7IIV;>sbO`d_UiLUgwyoCI0&+@KIP#1^!s@3sp zL1N&p!b@WDxc~t;%qTFHbQ?VN72y9UQ|M6q)2*B>`p-< zTv5Fs5u2m3_lTr4Mu|jhk4k@ckkrm7d140?ijve`;e0Sk;66%=CPAa4tK4s!GQ8E7 z$IkuR<>ca~nQym$`-ct=|KKAOS4CZEwxEb`b!8E!i4tsnj!-4;3&=AVV&5^VlgUT^ zOrbc~guxIGU*^Cr$GdoH{zaZ1foOPKil;}TY{S3G##qLtcsk}Po_>E6P3P&yks|I= zw2P-xVqH9yi9Ah>Zphz7!y{3VhL?&#F#6 zAi4hqdSLY~f_PSLf5XHOJupzCfAE2%ml2K(6Xcwah&&k_nJ)0ekmAV*fhVIQB2UIe zM4p%;B!z|ZwnbPsDy#N0?b{aK z2^6Uh-%$NJKY7+O=4pau7-L@|Py`}<7Wxbn=?xT__6^bKLn(@^#s>w8ED`P`*Kp&Aj_-to7}a4!R(0WBhY@TOajMU&_iRG@DyTvmehRfrF-5Zyd4?7 z>q0*-g>GD#OwNBfLZRZ9lgYc`h=EKUjevh2xgHz)Q`p~WWB(Io8;low6wJ2FPD$6S ztEB5vI9<9fg+Lx7qI4B;uS9;$#>PVb7dCcR=$CBlfv{*}8$wsw*u7y<7QYXPHZ~Lz zWib{avUn*Z$|4^UW$`~Dl0so}mW2tNGMp}pkA!|(7Vm!vbtj8+L&69U5^XGr)&A~C zCS@()gF)<8@oF-;HVkoj@Oo^l8hF}aV{-(a_9_@-8I$7a=&N|Dyn?675RtbIo^A_Y zkBwEQXlM?JHrA4&;beh^ccf@IJw?NN1RCBaoaclHoGp}2!{fo58Z3(9H1YHMD zVu9{>@>Aey8+$Q$rH%bI@PBP%n}gTdSQ5=%Yh!;`1@5}g0`ceHo=PTv{)j?l;MYC? z#|t1+)(aFmBR-Fuc&vFjF0;^kssY|^egVsE6}E{^18(J62k1l4@77fr1lgJtWE!e3 zZT>?qORv;304lUh2s^WQ_#hY>0{o2a32; zK?{E#2*2loBy}V((KSl&%Pq}fELRb*9;47>PbQOFKcG+x;Qv3Q4}g1(pF-uwME!WS zxwnPdO?vQr>KO*()I$##=s_UhcNYrJFu+0vB+!F5AJ4PoLk}3xjy%$X`i_-I5WT0( z3~0D-KshP|7Vx( zGT36tOlTCDX{*ab{k1@^Hv|Ii@l_T9Lsx+4Z&krK%ea*O-jb%jiUdV>@LSYi4cS3J zprAQ8B4q<`P|TSWlWgLu zS6kRUT~xf?X%O@mUtD0Mc7JyHL4wDJlx@!~9W^zuCQFpvVWdj4hLD$_*XozAR< z_$pA(kD!_M%*6z&ll)j(!$o3*^XH>XhHO)d+$}s6+0CnKMM*dp8*X8DloS3zzD-Nk z2ImO1+I746OsE^iW2n^#wW|Lh)@p%TTdt^ehxN|@UCkjW)LbLhO!gCapq78#@#)1m zHPlXmEt|sjWnNJO_6};D47KK_YMlnPZb++jhZU8y$p0*2s}}2A9b=m`TygyNPD)P^ zo}q!X#12C2^Tk|YE!V`|?HZ8HMHcDqE{bjhxs*By_a?>t?nea8(QuRFa*)eA3+7qo zfn4T+T-vT!!$&ws-e3{mUx9yAjM&xT0qgBgne}!`f0Hk>ecO@=7il$ln|n9Ng9Uh@ zY}9adu^EC?y%dvzl_wZh!MQ$m=adTkw0RgNy`^`MI}I^%ZWPYjViq{>jHOGKGDhh> z1q-9EJsDiBZVgJ+6>i3G<=RLo&?Od^z5cpe|BKIt^tR=~=s;-D6qA1nI;7!t#SPu+ zkcQhH?_P(xsPS=>s=q_fA$6>e(Azwym%wUbM2C9EL>(%Pi8@pkBj{Erl+Dt<;{Qkm?(-nf{LXub#mB zWfpdK#|&5laGn)7KP7+WcP~zHz9yyw&d(}%%?+PG;xEG?c1zNlkWd+W!jgE)2D|%li=NqDo!1*mva^5PO zn;@bGZa}Q47TT0Sn^{pZC-p4YXoEGS*-KjFDq=5@sNGE5fm46l`6RiMA>1Jv%EwmV zE)7$8Y+6yrBC%VlW!QqBF^|F|H3O61fG~%p;l2Z|jK_E28{zu<7@LxjhS;!QkdgXW zhm6QTMwm_+>7v`Nh@}25K}LR#=mfgZQC5%3VLk%<`zj;wXeuQ&xf##)G z&}3DlA#Ikcr!arZ1=*#N3P5zfhP9#!Ds_9FDuNbfW3^K53GrKRr`Rv87#e-ZwYXIrW-ee#5|A=i>esPDI% zb8jR2vY};9n(q&N@r1BGn2h-0^j@}vrbA5pEyQ&HT9{0hx+ydg?DAu9upk3VYLm%r z?}2~c_;@n;FOUmjqYKWa`;8MUvOUjV<24!p$7NxnNd^JGr-exQ#r#p0(J8NSRLV0? z3ZA)!dpw-((=86^Fd1ccMr0{Yj*a}1E>%Q+%R`(J>hKV^hD2T39uhsoogu=>Jt0w- z_J%}VIuIh~kA!neh`@asO4p^bP2#Xm zU-Y##oIezB-zxapU_XRdd0oNSZf9{70yj^E(tCPF@T@glK}7s*2zStLbNH9&=L-K8 z{q_Vq=trmMCri;!DbOz~MZcUB{R#xiX@#>+pkLV)^jjV5j(+t)nqxdrP&(i@OVj z_7;ilJ+3W33w7;6^fg$oPxhVBdpC zf2U8jXR6SGU!bUb(-Dy1@vM5F(pPbtT8EsnrYFs)1iYl-Fgk{2?33)GbP^}w*NmWL zpFxNmHQYVHp_ZXU7Yuf@v|)dVnSJA|d@x|Fsv#VE(rmoAzW{puP+XWxf(Rkl_1q3p z0mgrduSG0i_5Kx{9Vbv4K`+r@kuoC!sxE8YEczyQANYMT>DWb~KY(mz&QB(z zk0g_7NY8@w>+_Pyry#xUT?*X}w(}N9kNAp0PtQpv*TDTxcf$2k$>e`swqz1Liu4*! zAvg5n+KILMUurHDckQ-ifakd *DSkUJjlU6oNP!KlCZo_5DOyhW49JET2J$j(VltWN7W1%7QIXOFwU4<^{1 z0{^#=tA+H4RC+9=ZShmQ{*FIlRP zwxP2Mxv_CQE`;bG4Y>(>y>Z(R8yec~9XziBe`J#Sq8CKUy<@uIoyM~&&Dd3@b}!Oj z_7b{YgfY}F&?Nc8%A`nz>cdP$@`q&}$A0o_Pvx2qvyfT{x#aivsoYVA8`}@mCVzMk z^2IA_>dxT9;`)D~=ke6y6_~L(Y*VuHG1c=xcvhe6(`Yc_-gKPdnc8a ztIUPmPjN*!L(YUV(B#TPb;})xY|E{^J%0~Ma#RM;kf47&p+gx7T}G4XoR4zdYhGz10VQ4%LEuIUy?hs!SWy2|KOMBQkGQ6yaV9TC%Y?q_%|LyM z5&Ei$PvoTzMOZ4ELDp%#R$+GA_SQ|93jITNI9Gq5##szpziE|0kGDDsxdm|<>E%r` zD!&wZIn)e2s1#7f`7f#Bfxb*wqd0-13LGE*J;rf4ll&7tr&DXC$WpGrwh zJ4lTqO=^fg684if0q?@7r!0&z4u$<7HNV53W$!ml@#<{DY+dhh3ER&`DEk=$dRDE9gK^qhtjgNHfSuS(L1xlR|$BA)eGfEKOTK2mFtc^>gIQ zIE7qJl&qhVLXQg}ekSYZq|oC+h^TD~q-m??3c3G8_VbTJf7kPi5m_@wZz5~xqzQiq zsx!HWR5*z2pX!u-N1E&(OOyR$g6w}9K{~L!!V17c!V1I^P`UrOv{i~@MGbJ&&g_u?VH!rDuPX}D z-|WM(uvA>92=Wg)tp-ikO_<6GI>3Jt9e7C80cA=DmPMG<3dKThafC^&P=wJT(y>BO zlqeV5leqeo*$g#^Jof2JqmwDy`wPd zQSAp7Q3+N;wYMxh8bre@dA3i5o3=6S(uH^Ms=;c|C4KB9ugYQC>DoeWEnFkG{u!?8 z;hLk!`@u)~OVESw!YBC%B|={YXte;Xgi_zl+HzfQY8OJhev&_zsw37}M<9BVKXu)8 z*q{#Yb(g*aO1I4V*nN^eN;Q9*vb=I!nD*9vA-6RAv8e)I@eH2R9Uw7$UQ2M3oF1-Otue$EiPebWt z*DnE3`f*D1!Dff`7;!RQhpA=`{KTK$BXe{N?r*8*r)7(~4d|@Lgy(+*_kt9!2-Wiz zN_=im1L>uZ9-B&=A-yO>G#%`rFiWEAp$A#*kkk4|w&kDm#FdIH(pew;MbA&+*5T&E zUEW_ImlY;C$P)tpwgC<_koD9~Y~HWJ3Y!$}e-)W!Bjws6;+Xwu>f3>Z+?<0~mpzs$ zdo=RTdDrKC7II&7);E9lVC_Wk{|=r!2_7MM{N5m4)!|V)4zGYXg0_fsW39Cl7ronI zW7N6=sON*A6tf0GAAPT3f<|WxrDeUQd@;y+C$ActRo&kjt9iy;ZY36G!n|8;@74^o zlCj${&sHM`+jlpw>e*zqX-e==E3v19b1y+V%ia}z_*KwaFH3)KOugGRUqK=>w3gmk z$XO#&+y5Mr3(?9Vz-BtnWawu}6M2Z>vo(lHXxE>ED7(pei&bX>Ug?WHI_oIgKx~ER za#EzxMj0BdlGJ~R^D(%kHMbwnYS+kc!UQ2+jo;+kC)q2wpAt;|Kv5; zvgWNeF=x;q>}7jpTWb%W<5A5mhphMrk6LOE548FA?ZTOO;Ji8$e|EWPaAC39w;E#b};N|P4) zA8Ngzw^`l0uoUa(t*+$H)>g7-NIgsst2-0w*5iD@#wwii1vqlW3TgFzW%1shR$QzO z-I1ew%mm&$rONbw44%tMUe)6MX?dbLG&TDbUZq}$S3p08d0(^@KZ(jU9`)f9JnR3O zN4f@+)H{ECUk@Xv* z>H~k;Cs-jhlum*z90_fZgTQ52RKEf@1mM6U3yH920ruzZ6e0)sdVQeuMDZI@KJc2J z$9cAu!ithU-mcwJW}v1pLcg?EiZqM5L2=q#xfLrwS5*u(>@E*($9j- zT{5pOMisvwGZiOd>Yqk_xgv&?fCF_fA?Z=!q588SN~Q)#@D_s5f)WkUc&M_7$Ydt)(^-UxKJ%J4`>G7=Z8Q zSSdz&|X7oW2bU;pwhKGh+$?O=lHp+3E{GW$dgU{kzY5rEAST=L|zs^ zJmA=0z{z67wm}^whklGJCAPhmeN}ezzDYgTEiw1BkuS~e zSqE{PgjkRXKfbDD`?AAwY)6Cg(MN-do$PRkf*@`mjJ8?}xRcTCmX>%8dVA9L+wA7; zRZGp=r#wl%)%sTN{jNOuOWCC!T*!Dw=5FVmlw<1 z4=l_`uo+_d;9~K&CG~qO_3KUjo=W}tQ@;W6_u}aS{3F?WFgfxlZ=A)nqs2%0Id85C z$kC#m^7iuDqr8ohw+~(Tl!Z>%*`xd;*>u9HI2wFrzTJE@xcq-DX@Zp<4X)gom0;yZ zgU{|%C0OZEUc0rGuUWCM3fX`Y2IA+n2Az4We8t+<;0p|$upo`I&PgW>sK~hjel@7r zxy_4bX6*FILiXng_qL4?As{JqZcyyh7>UOu}8?39r=Jle-u zF{c6>d5cG$ux5Yg*7SDH#0MX=;Q!28_P}R+ZS#NT+&Zg(J07oh$rE-(D?h_g;dWHA zUdr~ot#0CHd>vx_aBh^6vy-wNw^d>1#B;h0fJp)ObOa@wGAVXBH##fkZQ7uBKL1Q$i8)gxxfdF-IeuZ1NX}L+BD$z8Xg)&XErG9@hTe4#|ZELeRCssUSaQA^y zSJX3ylrc~P=ZIwv{@&p3eN~yJ2T2(Vwd285J&)?$D=V+4$JcN)!Z8F66&%upodPJeSoGPnoCf0iQf!WrxDqBJD{c7DbNDu2ZjPZ=AngmM};a zHafv7v)9joltwyZ0|nC4%C{`fS%2SpkZmRD0RsUc0chx_#u9bJKY2_Vn-m_sE z$iP9e`kL1~dT{nQ+{;;kKNDoY@&<5Tp>-a7(1?GlFy;;KjhmC=zLRjjl^^RU;M!v6 zbq!8C@U%WG#hZbf&>Oaue|*Jj>wlZ8y{?0+diUzzdSwt>hZb>pl21!EgMW5!FmEsR^UpY?XyI)9tX{O^*C=t4*a!li_@Yz&TEaw`4Moa z8wi(OKpP(5!#xwn9&U{{r@aw^RmpL~b=(w>jSe z?2Wjj{_XXxyb7e{c=W8$12y!ZUt=rJItfR5clM%>&^BoS_L@M zB!7wd9k|o4Nnz8&J)j7)V{Oyg{u}xMq+WnriP5aHx}5@K?+_VhsMj;w3zk-MPfyKE z)Uoe6E5YjDf$zkm^ryTbN1zAvfA@cyU2DkrJT0nBsA(gN`MHpq3@Ke_3PZ}!nHmQv zV`r)YQZ=0^1Ej1{)_)hTQdRQohuS0gfV*9f@~2YGa_Q|QuW3W@iP(2p+y zwXPoBz|ME6yUCs7%I+rjK37gRxiehTy6N+27(;V6b(dd@R#aY_I|KFZwzLuT={8@F zblv8w(ei6*w?O}=1nOM{!We_}C7V0sT#_nLviTKPVK?>FxisD6u5f=9b(6cyRoqSP zV%MT>sDpIG`W)q_(M)@Gtx@nfGlkzhuAahrNZO;rnc!iIK0Jy4ulR>Qh=LIf2Ls2? zU!OclVs=)S&+UyfRkLm4{2|z}95wj)TQ^cjGHIzf$HopAwFp2C*T_4v38 zw!RzK+1S#Pq|5J?exg2pd1op0Z~6za`)SMNoh7fD z2DRmLftVD_!xItN*Fzd^LBif1i~ndUBG2DhssGQs+M&5wbJKsvCbhR>9qR=;oJI#%H?S+ZfnAV- z?UM$(v>Vt--N24a!OGKM@9hS*pc_~^1sngU3wB&LuwT_*3wxwqg#CLOtgai_J>9@I zq+mU1uyi-D3%Y-Sy(b0xP8#fY(Qb648`$C$?5k<8pLPQ)>jw7XIuZ7XG}xwYU_V`V zE$rSD?EPu5FLVRDx*OODJG~oN)4C4*8uC#G?38X`dv^n?T-Wh_RUZqr zOMF92Y9o7f=rGv{ojjS&=SIf-ZjG>lET5~032#^}&cA>14Xe)g5A!)gtZQ`?q@tOY ztgGIz8kqKm71S6-o^fj_R9%@&KD~-Ulcpt;&%rTbCxsqr7T02kbD<45&-Of){Xfoz zzLlB{%>ygH5;Ojij@i%*aW-^N?PqSZ0rF&0zri>oH5dBe6?35%Q*)ttoHIV7GUi2F zG(hbQ5jlUphi5VlTIC59no2yd0GS&_{Zn(JXMy^ZtC!7@_RP6yn3EKUr4}Wpw9*(jqlSNzMkT#~IIfR+gX?IUI!;&)sZBf?{@<#+=xT zlWu=SSc(*3iUm2N4w;6X?Qj3Q=Opb7Z3Ce`SKP9%1dj%}%;(x7dUvf>EEPS|%a1F2 zdbfuaQk%BWE7?39pA1rx5_`6=!;6JQPBH^J8nd1UKyQ}Cb@o{{ab0JodG`fslkonR ztIqlf*+Ex$*F)lm_QI^IM9?6GKxL4>u;YJK@|-UpGk`-~xYRyZYqY&-6L%V`VOh^G zY;dE}7w>(SypucJY5LJeR*LE{D#_<8@lreBMUm1BlpcmF+)52qk;7Aicba(bcrAIK zT89Y)=yN=^hky0E&D2^cmaNH4Xq4kE%7iLod=(mCHybA{F-vSq&8$tjuE&Man^@G4o6a%`jT8-Fz;k|ne%-{6O#@TAJnLt8gOZ#zCd$j& z$=xcrJ6=1+JAN-3C_72k6CK%`&6lb_m*@FD*-NNUAJf^Wo6})WdZ}TbSU)y>=>r@G zP<}K3q{N1X)(C69T6mRHY)gM+ubjQoW z^J<)LDX1cAfa>|dx+Uf^Oy-_YLM7>I1!qfn&r=B40K(OV`QqdzLzUo_9D4gdKmIWlm%(aOT@; zY)z&NFN5>aR@eZyf^VC2_>wQDX#^gH4}pFEgH__ymF9DKG0IQwyU4TDQnF_hSs~aO z%qmr{6*az^MMDvH-totuo=cSByw}+TC8<)J;@L)KP0o(VTChaaayaOE*3%!4z!;-) z$vW24fO8u@muoyG_5*)Y%f-Wv29O_Vn9k5+A6Ov=_r7C1^l@4g=@GZbF%>Mza!9`v zGPue6aqor^{edZXrqRD6EM<3uGbm^mktapuP4g;+QNd1NHn9_0LVCD0?fby_oH>egshMv+$m_eTWt z{mLe>9>C@b*s`Di=TbY7j_h7dpve6msdepWAovF^q|fvc%T#BQdb4)qbHzcG!D^NG zvvz>x;+FnQXq>a-M*AXL?i+uWqcvpLtW$Eb$EnGzZ2GV`pSvUN`^NcPC?K@@dTTT% zgX9mh=dCBZZP92j7?{wo#pmS=s{Fj>ANkjzp+UZopGvFFHg<`_h5=zCre#HkBo_>a5&u zW<8??ukb(wmC?eeM0*UPUV~>hDL|DS151{;u&jZ(1=SW0n6 z?NfvthGPZ|7m}ycNNs@gx`kAzg2(nFVufIe0BY? zuvmX@s5c7r8sJwwS$KbQ!t!RNeR7Ka(^&03ncZY75ccL@#D4338Mxu)SqJO6T}$@m z2alCy!?a?nDd$Wz{$p5y-U+i5*?ZreNDhPF64oeqdn=Jn{2gL9;%u->7utpq`x{33 zZ@qs5aVeHV$`nBQb6&f42iT;ortq0BFLd~CEAdppYD>WSvd&C984GI zU?7DQ3V8R~Nc+^ArpTFl{9-NiIo(nTb`$uI;Je&Rt$iNax~YuZ@OQ+$%BB7i@pD z9tB^J66#`IlGJQh1r|NQJZ^0ad5%0Qj%}|tzkn%hu*lxiVrSYne6qmiwg#0*<*WcK zYh%iHr(zQ(Ey^%u80uB-&IG@z#81`=Anvn&TVR|UPQ1Sx(ME`d)86~Z<4k}ToiPe2szh6j)FO7A5?<9{aj%9UzYo|x5NBY>@ zRib@+t~m?(L*D&UDY{k=k+=TxV0XCbbEoUY2}4W<2|XDc?tLLPG!tiPS~*(k2?D!F_%A?6a~;doTNX zaZeoK?XD6(>NnC&L%+8~3HDI091SIJTIF#YqOvqUNiOJB9*n=E-FaMNjEvi61sdY_ zeSd-KhlZTU-E@*tX* zq~d#~x%O}#XNitoL43Mjum98QuAjZCeoge;@-CmTOz;`|fzQ}K1m@9D%t89DxpJ-)-nt}E9#FW36>rK?W%^hKx@WSYdeM34g}gCceXg}1LS!D z+FA|A6oc;uN|FF1*FOPc-UuH@m829EhvKijullzq+$<0k3-|DOY)@ zk+00(7M3ZhLqR+Fc3_V8g9I&{sUBl}_lL3;_c%Fa-g`ZJ_(?QJ=DJC#h!5hdGMT>` zq63NF7o;EZ^!$Ih(4(0ime3_94~69tdzhAJ&t`F~?CuaPVZB-Izu4Y#-yizo0s2c~ z#h-PfA-z2>+Qyha2}(wge3R$4d1K5k&iV-FVqt8#5xn^z%5DkLe*6X|C4;T7{fnZE{lePnhvcJhA)U5;GwB|Yy2$f0H_af{7K zzHDf(ok$}6+KG<+E9bq0kIZj?+&|4O#@-;EyUEl~*mc%%Seu}zTrbq3{#?eM%;hQV z{Xf0*^TJAP>i*2$Ef9TLv4p4o>NpHkQFY`vQtR2I*rH{9BD!)LnUAGdCdm=B|o?^kLw*@FTCSV`IIFRzrm&hKYDy` z14gCqgfrwj!x_pv?(w+64kM1o$S%}=8B|bISV^_c2Ycqr!YY5spM&%R<+BL3J7)R!j!ms6)Z4z< zYkF9Zg;cegtPCArhZ&$6Qj@19q63`*usF#DY(S7&?zD3%zYBff%~KTQ9srn#avNC_a{Us(<-K1c7oQu zsIdO)jcgT9^`iZf@;qM#rb}FkS^s(?7xI5@q5CdZJn*kK)Nq|iY-$Z(ir5K|Qq@kR z%c&DAj$T0JWZiH4Lhnk5J@jLR5wE!&Jv!Dy!xbuVht<_`pYdXHVcmr0_8CTvMr(;VZ5<*KOG6}1CBU;E;T+^#FP>(=lW0su)Zvz6gD{iaS4bPdW6$GOg(`#; zC1Ay*B4^_9hMp~)IZPvxLwZ421+`H{&dsgW0NdJEm;t(fc3`H)Jrj0Vp*GdMT^U{MEFEu#mlXHETZ!VBJd&o$Q zq&C@z(-%;w%Ov;8s+O3^D&0Kpo(P%KRtwLAk>@zjq7NLy7mD#lPd7EN$wLjI&j=+} z-hLS==Tp471`7~beubqJD^ikjJS_FgE%H?AXc(0l zQtzeZ)l$egB$<@K?}>5ZzEE|TJhzegDz!-09G=?a25&V>lP5QSn7B_bNF<%YVQ>nE zGhzEaqG6*_IE2Eely(^E4DMzvDmCyqYHBzd_><2F(OQ2V7YQ5S>HXo0P}h7Z!D3{-YF%^h+kE!LRp*WD>(~ zF7#(K{C+)F?AI#rC=l6|U!wCd{pwA9PoP067}IGL*)s^0&-cDmsc&P;btat=Z_oT+?;QXU+nt!Nm0K|FAde@uIwvl=!un*fvJdPxKh=%Br zoSr4n%csLt{&A;CJy55FEzfJq#zXw2oIH!>#%#A#~gc=37F8R@ibc6XEq_?-oXX^C zi`ST1xN{E5{yF$GtF^0b)tA3tNIU;@Il1up%A8YlSb>_uRXr*^)uAecAYzf~OE@_L z-cf%)@?~uLTrPJ<>|U)Eo#zeBxm+Z=0+Y83275nDusv$JJ-=H6ThZ0N=iPwO0xfh~YZ_o{FSdLIhIj?_K zlW&M00Z;G<&o+urQ|t)14!*)|h^kkH5hD#xmQdlzV8i9;0G=!MV4PX#0kwH{W!4*u z@iAZPgtpK{0=FFY)W~o@roVLh6LNhrUgUGxSWG4UuQK4<1tc zr3p3Cfu$z>yBJxh1*rT+D}(1@vIh%9_#vdT-bHZv8rmKu%y>cScj7E_E~km=0CI42 zFpOtg2PBiWPdlcq=A2NiF19E z*jnv!4OPyb9qnGJp+-aOF?Q%6-bb5}Uy1K5-Wo;-t=D)aXoZ=v(mbv-*tO$aF85K| zesQ_n`w=#^)2#w5W-fO$GJhd?_w-r7No%2YlkbodtjIpLx!j(}F#A_QO85VY$=7MS z+UAn?`%`U8g|=5mPS*Z%+qHjU+XnKCit*eAZGWPn1}V-Kl@5s%@#W++JmCvWZWfr?NIJHBf!lq(ObZ z(5Sp$X{a%z-62DM@S#DyJw6RvtWHoeC0He$Lz-$s{BB?_R}dk4OAmj&sEo1o-xxK?Pi&?k6*cC z21eW`|I;=9o68l4yS~Ae%jKngGd`D738Q~`U^ynO{MDgIiz@zA--@XbT*VGrY7>crF@bONh_F zyvBHnu!&VR<#H<`t8Aatd3jnVwNJFS1kuhGu-oK$U-p06-MmFDKK0AxHjppStEtxx z^A?od;Bp+37h7NEN7cT}SJbHMMS83X5z5hTbkJ^DD645EV9*?&e<2-9i-2VgU`fA` z-HGRd6rN_lGe^KvlEPCCcn%SE1YB-Yt!a%aGdl1*E6nA4E|tC~KJ#5}ZGloM!(TxE zTZ77-t-ODsvG)aH#TUm(pU~!x{tOA_rBc(X9 zKf^`&dl78KSaFxX1go^0$*exvZ3zwNnD#cz(4wa4pIR%Qu(&79;@&to%u}**T-T%p>)sngI;FqF-e@BbRxPQAkBQ&NRBnP^ z=%xZqGEy{oKZra#AMRL}K;w5)dm>4M^$6K^C+MI0E_N+7JZJsqa(XT6Q3Ix~7}19h z9V>r{eGsny2$HLA8n2}da;FkBPvN9=%o?dP^F7y;r_HhrO1~PYel#X^&HxxkOe$#9 z7KZ>yK(@a$k;@Fj#11?iBO3Lxu;MS5vqLKAWj7INS{ftwaZJ<^dbtC1MA3Gh@8_%z zSrA$6_A*FirZ3yiiZZCIf%3B8a*)9chY~E2(n%m?uhxh-0&FLH}rw`2<4a< z>Mz-UvcOMvz9s4ZMA?QmvX08$vF_@;@EmnK?xCUd%CnL!5`3roIE-v$W!2Df-gjIh z@sGxmEeOtc7Jp!BOpy5mV)0)z$$bVlyD77Yj3~KWEF$rf6!4q$LY=v@hijU)3)?TE zI=9r-BG2`q{=NOAM2}9KPep~96e;bI{(sDWeG7aORo3{u$t0PiNt%`dB`uKjMOt1d z@~DW|4(TNYRthK!%4!NeCY9Cdx^8jZ-4+#rb+z@ih4oQf9|d2HED9>5D!S+{Zd&Rt z4{@X4{w3-3F+qh0yYzp~OwyKz?tb65`}=+U{nBJ+?wothx#ymH&V8KIR3}q%ZC6`= zjk%p~qP2C3T$U;jUhF|R$PCi_!CZ6DLnDJ3<6$(3j8G!o;pzI338`HcLCtn^galiw zDXE{_-(Lxz)*ZB#V|C*7*@Hdkt{#kSKpm~SlRW~hkM%uje`wu}_6cTdH;Yb@Ya~u> z&>qv#m2KaAz6%kL{{fvE?=T8IAcgxsU9RIz7TSe=^ZnrAGZOO?I==@jSA&)+nwOj~H+T5cNg4Tjhv4H(&;zT?g%SOExLM z7Aa9$>bdU9T}8D{u+BP^d&A^^_Y;|aRR3RHv)|OJYt*o9UNR27aI_LK6Iv?$C;Owu zDRfH4uRkzo6MD+ijasIlUdJ?`gPC&mZXL(c6Pn5lnkq%nRK|wXS025be-w393XIL^ zAYTu38x>o%sGC!?RZATQ#^&_nE-vn*diaU5lfVNs;Q}^+tEBWBuindxoMhs}H3K-wLl^Ks^2dz-% z5hybYv=#q^s;|=E-p1a4W<_897_^etmT{K8`lE#U>W8oBHo-GTMw3x#JM8}vCDyU; z6~Q}4@yv$FpLQWHpOJ_|^SH6$>M%w{bt(3x=^PEF-OLBm6#Zp9qGgwyqrJXOZ<#iw zCiK=rUD_~SrOUIB9$V_Rw6pZqZ4w{QJU%RpSkH2#4Z-?;N%MGrNnoTmGlBCx-~}2R zkS9rQaJ_?jqtZe9W+wW)v5A0|8>Q%{beZopL+xXFNszyRl8=k}`=5r7_ZmtL+xz<; z`2i&bc6DD2`n|Y%G)3`y%?Ur{Bd|59#X{V(ONKEX{G<5+ao5d&y<72q!Q$!?vopd4 z-U0>F;_$2B2XhC1^1OMjQ*k+205DlbSI$_~Ky~IczNtaDMcpBLt&DDGimf{N{k=AP7i<0&4!MKR)Ne}y=r1nAK9gLqW z-Ayzxvv%kTlYk#wVVe0JD@?h~=dCco2+)1@3RAl5dQiF?s>)3^sn9q7N znzip2o}XaFbi~{e%k&hm+pibv@KTX5v5&}QMWmS^$F+I z$3=|c6>coijo%kx#6`N7t*1!JDL3ox<6=#$yf z87B=#quJLTijx}U{C7E6>F--&W;1v#58NL~<+Pw#<55fOu9TzEoaYd)-$d$+Rt2}O zqG#ilCcoClF$*(>UEab3es4qox2f=%rfsQ%H}jf+-skv+{3c^VL6fOrTvJMetI6C@ z*koycz`EXv4${8&JoxMSjA4wuuEM@QlB8Xe1yX0Il5|>!{l^leJA-r_?vt^xQOvp- zsB;f+2Ku|L`{zE;+rXDyd0>Yur{o9leSTZtuGG(t6V2Nv{<1g&>Sujtw{^Eff-A30 z?p;YuL>JaJ+!gqtGJkYM6#t7+O@pQdeTLP4QN@08pv-GGO%WF*_Nb)G?@M{t;{3~R z0M2Bu`6X4e*cF}YR-mvbS|a4SG+LLqS>2gOOaeQ`+x6eQRUhxOVpH5qJnvl2CsT8Vl_^6}v*kRC{GnY|vB1h%v zFfZMj3@xm!PeUkgk9_B}mM;A2&fBoX@9#aE z<5MK_H8>}8Piy))a6gJ5OzoyzaXDyzc&r2ABW!>hR3T$+Sd%7*b*KmjP+b3}z1lxAh z3~!%>y_>k=?VrRs8!h5Px9-w^gz@*HU7z5&Y=ge@6Yva)3(p*Hz*FU7nW*m9;i1lZ zL^2`uC>eyfaOIdJPGusU036BFhs#8aUufG+{TmFYI+5l9XmA(Dfwis1ifX2M9uz!} zI*~M{%a8ZbO*u**(kQa@H}KCrSEGE+!MF-$;F)!W!W-aO2DX7V9Q<;B@`ErUyXkoI zk?pa%YmK36pu{HOc>D6~%au}nU~S?PuATZ9%5_UN7{-2#nCU-;l9we*#oMt=_K{&e zqzs;f!~I*zyh^%xni@1%YzYv`ys=ylmJf*!O$ z>d~a!Ekd~)hP*->f)*KnLxlkXa91&0KtkpNsE*@N?DuT-cAAtNCK5 z59_!<3L)M_14s%|m?78V`L)|I*POnqm}hVcf6zV$!H@#E2j+rhUZp=>8r< zit!O5|MisV0@3xkrt>3am=iM(4rWnCwCu<{7>6=|_s8LXdmnrTS|0SLO53H0G27fw zCDQFAXMI9S&V}t0zeTgoAd`n`R<|QfZtimp$iL5b;T~{4U$Xz3d|C28Qf6sSz-{zQlwy<{z$_PTLQy|GZ@I=;d zFYb6pdtcKaifsY9&CKXy>GEo+As~w9>T%lCs@MiD(aF^Irv;j(iwDkCVGnQaA;GT2 z=uaU04DTTH)__Yiv$YDZNkJXJr`xcu>5`s*sgU(UAme_|b79{GubkCu6?wM`$#q>%$mKV)78r}2{`&=6sIbaWH8bq=ZxKd@Fb;UQ~)k%L@SK4$&8hW&+!HTxfM=p1;@)UV4(hIzs~kRKV9QEA%mIdC zcS=R`%49@qW#n-z{K{LrH>#t1qXyzz=@^Z%Z&dr`8NjPeT7?lLb+Z7@MSG)0H(+p4?r4pVD)GP_3?ok3cFzKMQx>UzX9UI% zv5VGk&u3T0xv^ydjhOCln5*Je{>`sUE??Lm4s=FS7Ht*MLRO{;?+}VvN@!`Evp~-b zX+-W~HC}(3T-hrh3;Xj|fqfmpm2IS`Ibn064*q}D`vcCKwhHP01kMD6Q;jPC`K!|8 z6O!5|k5{UA*Hth3w_tm!CyDKU{R7z6?5^7Z*HO$jlO}()>us^rUurK={4LOS1HS_} zFBn|-6b-`FRer?e z%VS|LB@?v${Wrt6Ua^`B;Ww8;s9+h-tP-ki=&txaQQG&3-^ne#*a_% zjHJkt&n)dwNxT2AC)nV!FLnqME-R_&93#2=}Y} zh^=IyP)C$px1f}jPMy;c;-}C{PPD&&40mE<-T_iwRb4Nb+ncL>0jwbmHGB^m6#awD z!1XJ`Rk)r<-~+u3+U*(pt&)}-bs&_eAtgkd*RjqhS$a)>>6N9^=2%0tn4fxU`PT=4 z9tw0h=KE+hEv73e$Q$%n2il9+U&VlhIsID&W5=M3Wd=~fuCG#S6hJbjfMn2wWN_d~ z{g*hLnOK!S(?beAu#aaY!D1N0KkDNHZh+ny)lyne=y7@W!Y{mI+hJNT2jt`~kKJ=c z-03!X7RR}N1-Yd{oSPMjYI9AVQJ%J_)`_|`o}tc_D>F&@?BH-lif~`Lvb&l^vK_LP zZz~pcoZ}V)h&rIO8wvV_zZMRmmNIC+z&7cJsvuC_# zGGMbP?yzYP&l!NxtWk(jHk3)H9vj}ZsrBBRforXQ7REU_fLGmD8SsgpiRG0@DOb$7 zkJ~g}rT{?TpukTfpA>Ug&1fVVpBfzN?qGmW5Ov59ODu_7xG& z>)(<+B1Z9)n2vRj$)1pVG*Yv#eD(pAjupLsB!Ay_pE&<4Itt-QX|MQZCQx8hC_wz@ zdlvo+_@{IvgC4ya@s)(K0k)hlhS0l8#U|^g&T7i)bBWd9M7-~ z?WrGi6W1Tw(<<=X{b8k-LRrTe&m7O(fp-7!tad+~Xm_}4d-)h`vB`h$waJ>kFBm0U zsyYs!1$MEQ6smJfv|&+*UjsH0^w~}rnU9I}f~_4b+44|w$hhg^>q;Ium23F|?BXh{5PgYfJe#DazPG@u}kzb@~E0C4B8{w8O1YcX&uB#ePnZKoEz_0MH)xqDagdylt%H1Y;tWc zMv(V2Du3EfhGb3l;|LX@jxUappt)S#!^^SHU|hDY!JYt;e;@SzZuj%q7uRE7 zNav<-;G1aEPXtP~JCycub(8Hhp;1wGGrLhcf1qgR_2-OK>i$+d*DC=&?Kb(wez~I6wPtU*!twR7>DJEVIO(q?H@5Js^lFqwn@DURL?)cRjVe zig5*~|CjibmIPCjr)7Y_-M$UW(0e%-M}GXQAlmiwF-|*K@7t8ww5&q>t~x^Bi9y4w z=ttx8#ftC470nKRKGkDT@@62dSgJC!0jvx4jvDv1UTo{Lk>opkksjb-Mma2tdtMiH zyHhSC1>ATOlr+aUD7hG;+~p*ASc5Wgq4I`v%Bv-@)gKlfSNuVg#3j%o*>MfwYpCO2 zgj09n8a0WM8YnsCJ4;>wrtiWf`2^K`qU1`?V)5-L(a@ZKe_mcAA!Ot!Mz2$8A1W{W zcn;)6qm)%8M%6E+;`1VL7Whd%kqrFttWwb7Ma(Aut*(g2dLP{V<6htp-cOl$f%7hg5}@i%Y0bcS7j-0#0V}nuCX5E=qjLQCgX~K@`2~p(d&FyCa8HTLCuY9H&Am+ zHqc;2&2%`Rk@Tjb(K)hKgWBq8$zVYJ^CnOuDAcS4Y8v zeahXo{c+N!Mx?RH9y~#ZS*JET>h{Jpj?e0VhD}EjdzzD@_B<(NqM-wK+7lu&0v75I zccmqNIlz|!2jX40H<(u9DFxEtWs4LZi~$}P<2sUzfMb)*k{TbR88jkB2ibS*nc2zM zpbv^1v-*kSIOt>zaKwE8qlI1q+HhIi(E28DW!zCsj%?RR^EJR5D`-o0Re9l|wZgcA zT1jI*%1O8!)%V}bosK@_?l!Qyrk8CZv`pC8Jq^e1g-v%(&~IzJ%gd1(bq~w z%|_q!cor!MJcupdyBBkGDbLW-Lp$&8^2GHQRq#*-_k; zXp?KYD!@JiC|M{KXr(#Wa+Z6*Ak8PG9?sn?=niqp`L}g~gN;NBPJ^f4$T+X%3NJbU`m15e=(WD(aeduRz`y9I#`%<;N?z#SWZW*nc~Ao*BiiXG zeRkljH_2NQ%AZlv7`9224vvB9D5(j5Ya|n`_sxiB+O`DN`37ac)I}T)pU-z8Nz3R; za=Nbk>W-bjX}&{LBE_N=4f5A!Yo8tFReqb^0DR{IzvltJcSb?}>gEB@N#jo7He~{E zTMu+pcsN{BK1ATRz#bGRaN8vttUPd>V<<9&QoCIo*uV*zpFmfWCt?VayVc z_!N|O(*>kG9!W^M9i{yZMcNlB(mrp9w9g}p64G7-yf^(z(*Do|rQJS6+S7s4nNgml z%3FgtlZd~z;c6F4gI_NMJ3BS=NG`4b;C+5(vON}vWI|OZ&Sz|5BiP-40O@7LJ3j&* z$Pw^=Je5ZhR_7n!+b>ditZ81?qV$#9$)jH5L@`D38;mmLFp7gts^h0HG9f#7vAA(L zbrg!^6g(>}VHjJjVXnA+S8Qx5ALORNH^~fQM8}r$diJ;WO8Ea-JAs~HCKY1pygy|_ z{qAwH)^Mk1jXl%DdltukosLTIY3!w7|4#s%G`uIx^9RKeR=JRjiBhCVp5f*g#$>nJ z%R14Pw#lWv;qB*p;|HVU#y!IDkb_a@v|5`ysn-jo==9IT*M-EaQVjYN;EJWCb}au! zmbKz9*{ejvaE<2;z|aQ1SB|Yx@w!S?Z=0s6-u8empw5x3r~UnZgKg2Zr>-Q~78_Z; zg0b1|?eqf1P0%7X`3vxmOGAfXeDc{2fk(K$@=yZ%58(T7l+0gIJ}hLEL<28V9q@l* zcCbWTyL{?5nyeD=#cbPuTmEG`mcz)#FG!pw6>vY4;O~X8Ka{}!gA4HYLoyWqhCO>{ zd^i5<2JmnGZ{dG`MV$MO;BPt$|LJ@93*cWd1pflSzf8eD{H^$B4B%g!z`uTZXO!e( z9`(%a{M6r;AOAN}K!V=>Gec-NyxTkdyW3!I_y16a;{O>LT6bnB{&l!YPiem_5u4`FDJ8x~g^{7>#a#apuv1onoziuvWOTF7r<5)h zv1Hrw?;ELfpMkjk7Ag@l=ls{PX3^<4*>y23MV}6Tz4D5zje-umIXX`D=QLs70~W}* zl0@v0JrgL2{`E{^ZdK33v*uQRB0eaL?PwMEXYG(m$37l>PbwYul#qFdd z-bJNf{;qD}i8DW%OW!@w|D&gb^n+uIo$^>3km|-Z1?#Cfe5=q63SpHVu8Y7YF zQ$Buw^TF^fGAW}i!QQuv1D54>Ue>zE#^?>iE~a7nV(Y_Mu@}yDMVZ$9)w8%=1c`<%6TxIO34C}oVQI{ z<*D+#ZZ}v`dwMn&57k98-weBxx~PefTvB*T$ja7HYWW?jKyAUz`w9R{so8vS8^ zoOdjV(*}}@zQk3E>}uJj@;QeldFL^8_o7X{J(3D?i5At;IG5U%HI;eG?+F?tBXRrk z#Bi1u=ZteN2|q8Sg-nvDM;&&RqQl%`Wjw`kF>~XJu&X;nXS^lE+7HKhayV|Yne4_P zvbjYv(v3n!2hK2~bOLTRTX-s)Azq<>)LLI|J%q7k-5>?Cx@L%PALBhxhS1zhbyeWO z0v0$%f?N?LBR?Ig&tH2ZG&#u=<)m|AO~?Xzx?X$;c+$kMCtn3UdDH>WrH+)*AH;b# zmRr1x6kXlf20XbNd|Kn7iQcQ(M1?0{C-q^81>uJo=$1QTSzg$YUAx9yO& zr0Ne9+Hv0HfhgYP!uJZZf_mv*?k-<5=!@pmtb@-9wj|94pm}nV=3<5BWdUyb?}X#+ zigkLQ&Z|psdU_wO`>65D){UcJlnemd=4%9fR@h&Xel{=i?NPxW2kcHh6Z?=I^Zl=lyFDLML=p|n_cRu=uI z`fjScx$ocGcaL`u(sCw$hmy1*v{>brgX;_bbM4~!H@D0ELui=-w3PpOC@q%<+g$&- zcIoZ?_qI#H5L#|+=Y@x}!|IvdLhwZj1^YvPHqB|{@ka&yp{@2x zpmJ?5Xz7{};fxNQRIZ`YTEl%p$~jR7ta4={>cEG%E)X`b!*Sx$e(b_Ld%Twfw}I|GJeHEm0}9W| z@PsZAtHe}0byDeh{cEwhg^N43DCf3$`z^As>@^r8nu5%KRtGxW6}&|*Wzz##O6X`M zR*Y{FCXP34MIw>z*1iW^$8*|5T4&B=xQF0D-~lO^6X$;T{Wv#qmtgnJ_MJTYJhmHG zy=);f(}eL1c1q}q^Y+oE%1a~ivEh1umysZ!9t+%sNjos!TZ~H)H?>LtQ@%$Fz@Wqy#RQmzx^(Fo8XUC8Zk53{-|~YZP2x7 zx6*B?a#7DC5d%3I)y*I-!;^sP4BZRQ`3&!72CecZJ$&M98OCd~%H2J>7OT7x#k;fX!j2u9; zgn>hUD-BzL{!-ea+opYCf7I~nRQc8JoG=+DkE~#NDRjMqE$q79zOZYf25eL*AF$x0 zjhx#~U6v!u<3;G>X>)L=(~NQ8yBpZ3(#>1S)ycTa5#IJy#iLo z9`?LsHC&hVNu0Ftr}QUWrwph0Q>K$CT?P}LWOtq7zFM3$uFGWj0IsH%E)>mOoEhM; z=Olx1Pu2u@rzB`TWjrxXoIR(&2T$&}!=snSa(5UF(mKPtQF8mUl9i(qY)AIS9QsRt zMHjrWW6q_%%f->69_pSXPB>*aIb+Ub-wI!=DXLjl<=egMz@#(8Z9$A&2v4jm*0o+pG=a` zfcJ6KHAS!V%=YYx(Nyk;8g~Ut<7@@=)#sk|aiLPw7;~+1*&FyiYK(@SvoU-PtmM&$ zk~r!mzk=hO0UTQd93M(;NgN-44dCp;HDZ#=bq0y)&&GLA0G?Gq>dSa_g28WZlR|`#oGtG zMZH}lRM$XaUTZCNO_Bf%y%9`MR?(-%4Hu%Rf;qW%dPf8>k9Vn>*kGfljj^*M>ZfkMPq;M^QQs=x-(?R! z8$jCuBj}THL|RK9BHEZ)Z=MN#>nHd5GTBA!M0=IGwtBbEm&~FBwI0XF`|z$7MhCM- z5;X8Ofe{&D>3%~DOcyg#^CiEJk{kB;CIdAma15UD)X@0+**I5!d~SUHH`VAVOGtP$ zdqKD-qO+xhvIkw3?z24&auiHcB{ZUlVphoXMy{cf6$4ar zug8ngKJpuhv(}S;*NEph9VtLBSV8;a-q!tbTb)(b^y0Z4T`Z5z^jdT946+SMr!~%~ zAmSPi=7V%W>5PU{c|lYMQn5Hn8S0?k9{2ZX&d)q(mzG8^KkH*AuzwaLRr|VMX2~paFhJAXU|}N-kDVSZxQ57T@Rj=+LHzKz~_N1^(?KyYi4Tp6PM358Z6WZak%byFUpmw zXKuxTav4L)S><_A3gw6+S+X=sJ&R`cI)9!#o9pnE?Q$?1;D(W+sXGi__RA5+8su6S zJiE-OdX_CS3*(njmKNtGcR)#Rb{mvziX`KgAzaIUKY_b;2;A<7x=++1=LFmAD*hZB zj&nayUd+bw)e%>1sdM31M{Y~r%k`r+^;N0+{aTe;ht`2QYw5sqoASKWUm8f2uZZA2 zSIolXtHLK3J)v$#sow?9E+3!*PXi_I&b#1U?^$>8d@AldPEXjzw87_Z3P8`9?q}q& zRJkO7LN*~T#mwQa7xagHfdBLa1fuNzElTYEtpO|d&Ik!Ul8L-n+iI@BXg+H^7O_yI zjivsQ06=^sRkkS*`JkCm#X`oj=6Ie9?DoiP*WsIDX$J zK^?%c%3Xa9<%G6H{$3FIGNM8wj+np3bADbS%qWzX$SCB%Y(`2(p%SHcSO7Zqj&5l% z2NYPdeQH)Fi@aeE3AO+}li*X6d2W8vf2IFfBi-jIw#YRK!u{?{fs67~EAWFGl{ zxpyQb*34wCsgeH!dhSqayXUOhx_hy-3iTmzrxk*dvppAz$XqmrX`I7?=W z(_`E!d3GOWC~Mp95KWTKc%_nwc3fty_?LKQ9g$nfnbi)EkngdY>|yP?mvKJUDqkm! zQcjEF?;9j4e&}~N8|La6`c*ebXRecfUtNUxziLWZ5u4A5JUU*wE15Bt`paY;1^-LJ z+Vy?G7 z&b|-EYC1`O#34>$+M67#X>O}f(M~7NIFh<4WwN2e65~v@#1x}?JcVHk8)7zpVr6P9 zQ{Y=~G1FtD{u+#CN*l1Wo6Q6oUzCVLzS1G$sR!*Q?M)%WOpskZ2<2!K&^>t0!2r=YCoyDpCSyXQ zAHClHQS~}uR&d`+JzMDiI%{};%$9n4hiT%lgX$jC*M-sT*MuJwt%+whz_Td>&t|n( z4%we+kzKufOxd5M>`{GPC=1yprXTnn!1s;1Pp}-wms2&(nY%KFu^Yd!m~5AL;Qu%6 z+XPMf^zg+%e_EW5C-8Yd_@;g0S&;wUb2j7*fSfS^IrUp0V+K8A7^L8TJm{DyS)E6) z$OXL^KM8Ywd(h6@l4F%SyBx|`_DlwzrAMo9y7!TIt8H*Rc{{+x zY&z^WPxcVUJ@Ho1YA%AKH{N@ur!$(fbcdh|;nm(AZraO$1s8inr(SnP3vR@Dv8CX_ zTjUpeUWcb}53Jy^!7@94ckwM&Lj{h~Fr9Ge5$bR|nxI8|&`n@}>1MqL{MsMqT8|tfn_<)qk8o%crQh6Fbh7=U@*9~UL>yqlkDddcw}cX39CwG5 zz857^ngxuW$SHEMx%(cFixmM!!cMoyJKlgYIaq>B__AHK*+JWM*9^pA!m~<-29R?S z4*Zbm5)n~<@VYsGvyoQ0wVP8;0c}ts&fE+7sQVa5ix3TAY;}yI^2ITO5_JaSFxBj~ z$V&i3Y`V#vK-Im`OEzC`|+dT`rp4aP6>rZ5V27fZ<*8-1y4W!rCjnA>9-BT}& z2`xDOHvQxAHv05wI_!{fTP{64ET=N=B;ZFue|uYR4IhfzU@SulHJcAA@dGEfD^fCt zpGykxsVh)lJ~T>|yGkFPUWHFE@fQ_g)&BR4q-Jr?4id2ZACoi#^JCgX zE9{kjPMkdW4-$;0QWA>4=uoUfB{x|+P>(*Ol9>#9sg6^;mX(qVIa3PuyM($*>3d}x zK~5Jd_IZ-W#s-zQG{IXYA$H;}zzlecZCkos<*cAQA+E1No$+UEz$pW8%Fr2aB3n)y zat{NyG^d9RBhJDq%%rB3=78thJ92i6LI#soj~4aTs((Ewa=Rb3v|Y}F@XcWGWO zgmM4$$*=#RZ(4U=%pI)noO;r*4m=wNtwMSK`Eh!nT`9eox?8{A_KUsnJM{oUAkZ82 z68=J%9JB#Ijcp@)m~mCguW0)E=G#Gk71@<8s=gd zywOf__Qi=~gH2m#I)KzZ(1lMqx6fyPv~RF!3cor?3$-Clp|*V+Xu2yMj;iFjIIA4) zA~{Ym$49{9`MfI(9xP2C8lwbb=n<#Wml;6*SY%%pj+fVTp?8v;9ocZ+8p0j_WDQ}q zvW9R2=t_%h>!O%T(D{b#P@Gg!X|47HbsfP#L4$5$6>;wB`-JJC*>-NWc~bs=fm^yB z(-nE39Ni`0TK2tklVCr9bw6gFAZx9tH$hWso|hib{Z@K_+AgtOb_du5s5R$)v(_}{ zo3)@dzbe;&T`-DW%193I_|h`?vxo|4Kz+U~zKqY1 zSDjJKBHrGW^_cB77>!Ch7Jl^$-&Wy{c4)CE-AWs9jMkuBEE-z($vUim`<;VzSqr;- z20lo~y$$_M7qzcoR5%0bql*%v{s3y))=RGlKcoG zrTmneJ=Uj*afV@F-JWQ_31rhub&bRckd4HJS*p24jQUKCyOcWi0hA5c{!tt$p@x*T zj5Z+N`{U-i{c&6Ce&D=+MJCb9%kAxBLup$X`sb7th?U`b_NHVa09OZa^Ko9)*U8r5b!D}D~w4iV(AWp7lI1yBt8quRw|gV8M2BGgIsG&87eB(9^tVYCPv zBDV0Y%;DP`=fYdyzqxHpzzy=SqF5wZ?{$rq5&jako0bp};JF=vcLe!uqy(E!q^2PxePnrKS6Eo&&RrU0+D zNP1|2N1+95i59rmtnOSK+5%5O3xGX*HFw!)YysUc@cmA-j}r+{2t2U@PqN1bN}$dR zpzbjAG~TDuhx51=S%|1QY6C{A9>K8(z}lR~7KEX>@D%v zpifPYY8t@8mzFBCru(DQ7pZ=WLq}rfluDNO=>B+Kt5xPBSxwCWV-xz-Ud6BGs6~EF z%4*uV>yp|x#ChI%i74ZDX0P!$!*eRG?b=tv2k**%#_S&!S?(jQtcFiRJUH*hS2PaN zKypeL$ps6&k88P@VF~@_S7YQChNIKG)08!Ki~O=g@@9wKO71wYp6ayWRuTQPTYX^j z&uVNiKi|+?Sk#McI0;PXj(UCzT}TV9~$6Sm`xpS?+yb zPeJS`*=L~S2fNPnkD-*@_NO!bB78r!^GyGXdi14m?ostEaVEPwzIrT16LhfBIG<&a zZ|)nMX~ip)y+0=W%`4#jS$efkV$6BWi&d_F#GJ>S4rWpck&k5%T6YCx?@>3Ps>`>f##E-Sd=O3hwX7;bxY9 zZM}mz+_90v$s62@VV1**jPfW2I0I>xdwU*#(^B$NsBbQO>duhF`~Y#K9n~oE>j3$+LLE={ z>R2nte(KSDZxK`DY;j?SH-|YA9CdZ6yYq3CG5hFyf#lwLi+lyh1N_P*zqZIf@1^dH zkh`{s1(YZ!w`QZ<+}YbA*xJ=S{&-qI(H^B{`IEO&yygV_c=V%V8fNsGD#kN^^^P2U z?^p)l{HHh0^gH1DcA(*R{~%;J__*JDXfn&zUYd7p_+q$^+QFUF zTHzVWJ1srLHLO7nfkZn;LCtCzi@YE@tjV#xr1odoe~D5x_g1iw;Vv4B{6$X^7P-qN z>r%&ro)!ygXVtzb=6g>X@+C$!5u-6S|qLrM7WgnaqInf^OK z&X&T*_VSs2{aa`H=fVA&SI_ic2jA}m&h%fUxsa|A2XqYwx~8OOsIG}i*y|sQsJiAW z&{>~QT!Ybq^o}`dX7faUqms*l56eFWYyf-wfXwK(80RpLtQ0OSH9@do?d@gf|Nr&R6Jv8!$tvhHwoCIkP7e zcp}a_R%dffi!0Q8Ay~uX-EDz-Mjx}t)*b`cV-`8RN8FCzBYJ2aeR71-q8_g&(V{D1 zyu)2tyqnux<`oima}-#YM^Hy3^97pak0kv-oLxhrEkBV;k5j(wIB|iW7pFh{FwWVq zwotcPduKOs1>1Lj#wb5MbT~@E?vmO;B3iddDZ16!7?o$%(Pk+{*_H4+W#@z^xpTsk z7eM`2EvZ@A-J@^iUE#p^1#*lN%QT#VPP@sI-48a!HQw&{(ke#mJwK(8od{9~Zs z`<5qclc`k+*;UqaafNn0_yXC`bKa0fHI)PmO@p)k98C|;tlcTjS6a30mF-`RpL-=ie?G3F@U^D+>@_?W}bBP67LkIY8F0>7SA-V zx)Ts{BHfv7mY4OB0>djqv3fw7GQ?VFki5XF?%wGG{n^cCBxK-l*K5#@BaVI=AOqt9 zc+*mnB30X@hp=AMC0Oq}$LJ=6+X=0UzbVwti(cREWAt&bf6Hy9_EtgHQEW$9|4?#@ zn(#fr^`m?~!z;K;2K1>!3!Xnlg4v+kmqPnZfR6_3l3Hlpr$LXbgYU!dpXn#?{o9w$ z^#2^nVLNVb)iaM5wLOlUQyTEx+Ir!8A?>4&G-MVwwiC zJgfI&r8SEie=#ea`_W`6(ts=Yv~f%$S`Y5p;dud34>FIVSQ*=;MA?~|SIKf1TC0?C zO{5Tcv&_Q!}}v$`Fc+InT=D$C}<5;Myq`jRWM$XARs-sl~{ENt)` zn)$48lz#>F7f(zeA80ZEysLRTnRHp`iMRtyzN2wh9p(l7I7&ei8-RCe7T5*+&DmrE z0sq#xe+lOa%XnU*rY%C<@r`xgXRm|5`aF15xau5;^%vu5aoR<6ABJ!7)+Bh=)kE?> zP_*7^?+=G)J@7x^$&RokmSMV>p(eOFn#`bTmc=OIWr|Ug@k!I;fEne2jK3@U<^X29 zH9Una`+b%HmY*3kEM^_0vro1c)}p=y8g5kbf5<-01uy4s$>w8J2Ns`sT>#@P@xcjf zr1IX0ZZ7d2zQsL`WdOPol}Y>L(Rg-iMlhc-Ud=;wfL#;NZ^F2!i})1aK|shk{Czev zO!Jq(2j7{~UJ;&FTgr@C^Rk0q)x3f-^~Y|^dsY2PG02_)uDLEXcVBJxHi^(JLget( zf5-Mm$*g7UQShfWz?;^NGPJn6D+8Dn9pCASx&mtXfY1YV9)GN!2W%9m$XdhoQ!R>5^- zMr{Sqm)CJIU{~5rwqqt(4u0PW^!c*YQay(=!Yj(NgUvGM>)LoWV@rbQ_at-l)phK4|?@+ zEN_faZiG^Pv&1FJYg_ziVF1R1f4)SD{D!(t4p%z3dbMvb8)%CBVxMtf7q^3{yJl15 zoqZ=x5_0f3_*uY17_-TPE$HV^(K_!=5AHqkWTuOnn1kdq@G?^!Oar!`>SfN1=!aN- zvm$D|`V`r{2VwphK4?2yzr#=Bn@K{yg{9@zaNz<5M~Lq*#^f58XriM~N- zX8Ef=gjP8K?MARiZva>&gnPf9{E|1j`sKXD7}&?~Uryz}C?~?KaHw&=eqrNgVPbolz?V zJRJALeK7X#jat$_U*%YN58P?pT^8`&6kdfKrOxJ6aL?Ad+gXiq_UeUL2-lLUi0`Jo zQLD`&^H2ug^Ff*4ofz;n!S~iHYlcX>g#jLP1laJn=S{`IEPviNf0Pekjr18O-LT4h z0O+Y96EV7Cb~}3Hf9|7BgwKOVkI&#Y;T^tJh>v6CPj>N>4hH#xFIN3v7nW}8(=qDM zL)m=9ije&Ow@Ss>!Jb`(zG!ltz`GhFBv=>~$Fc^7>xFveTAjIlS(ky(5S=vUh)b;Z zyMW{ScJZ6Eg(Etie>=@PNG_iABa`%}4QAJB(s(d9k1g!_;wSrphSU7JW_f*IO<-@7 zY|@0)Xg|q3V0)t)s?MLeRzv^q`#74Oi}~M&UL$vMoo{EtiFih-1R($_M>~(yX-^u`)K;TTv$1|f0vItsQ~H@sO>pb!y&b} zw`7rbP^W<>vKsSHuB-DY-w)M&_QMbL)=s10u8)Dk?#^gNI(RJUFDP?aB;RCjA9-cC zGpeKYf-&U4J@v)7k6gG3<4{xg$`BXx>R=2u`c~&uSKXu)uk|matE6RSz1W@`()!Kd5oG{4locGSYI@U3Oi7q`+}pzvXmyIA;T znOWY`Yr{Qe)2v}Ub$Jw8VsA8^f)qMGyB;`|=B(Nqe>H-na6`_iC_7f}PLaJmv5_Qy z3j6rjS0|VClVHx5iak0PSEO%9WG^rPKQp&K5??`xA*WN3Qd_u+&+%1}!se=l@>J-R zvm6U$2X!ptgC)+YWuITa#Ya69dWkm8A7~CZ{3O3#$PV$fzY3$oJRJT^$zc#{x5TnE zi?RVrf2XsGxVqY(7P)+ff3003b=-s@xi#TtT5_`en{lT(uGg}tV8+$O$xqpfKCaSNpn`O5IEif#ndYK*i z7cF2mk8kBhAtTrspW3!i=FLmv-lsH@nJ$fLfB);xaju!g9oa8SI*rl(epIu$Q78$T z7}l59>)uY8Z}m=)AwCyuHDikBw<|#c+qQ_E@mb+d;=bXpUie;A^QO`DUfk9? z?7*WS38XM1_;K9P`f=3Sy3F%lJfqb!f9Ab-W@~p9AO0Awy8WQ7^4^Q;-h2-%N1G#Z z{R@73jFQyQ_+6IRSnaZGcy>{w>Td8?KaT1gbFyEkdRWl5r-iR#4-3{1)IsV3PujP{`+xX{WTm6G?^6(~Y=N@l8hFs=19ZJMOGb*|&1-#X- zPComOPy5s{`$9H^I51{&FlJ|Vf9r>g*@wH5HiY$!Jpkj$z6;q9L+78sgOY}h`a1za zioCQhIU=v#bvwXV(f92(#M$_S&Vu%k0&UU&wDMgfI0;}``^dn4lkr1jN&_BNirlO0 z5-;#_v8j}caXgInui&`J#XOXV>aQh~cb9#WYQkQ?r)^nT#vHy9sIjJdf0VLI23Nk! z@@?HZ@VS8-eZLC)kd-mC8GPNvaOdy6zUvS-(&t-EMYJB!c0juYXV+D$MKfUKJD4`1 z4codl_7L(;FCmY?2ltYa)wTdBz-aV2vW5(2w1gB~;v&btUpEoB_16fI$1GX0#JOb2 z#JnX-+~bxknGM%PaD5S6e@}<&bN^<;rwBe5!)MlLfRP<`!v9g>G4OvxI0ya@3unWB zTX+Qgw}i9czbTvn{|(_$@Sh8(!+#nc3I8z`npy4z-^p>^WnaDU%2va(*Qb0;oSGa` z0REBW3gGy2gH&)GQhZ#{htFpCY=qBS z&tc4(yIb{a_&^>TUJM2FF`Le;a624r6)OWyk%o!r4ru(1!l?szDxGtmI95Db1mBLx z);N~@B&tbdd%;{bDYChX1ouj+oM5KwMs`J0VCn5Y@C=HAdcK{rXxjuI%;5tqQv(5C}%4PaOY(2A&%ci z3EATt=W~hBS6ud>%jXm?W}=uP-`?FKQg@4wI@ZTIvM)|*R9i-g*b}oEbbv*P;(cEk z=NCQ`m?FBy7P10=E_)0{1n#0N(G_$u@F&?L1ybY>cMk3z zGRvOm6>)y7V=QPJi8wrQZUL_5B>VU8b~eOaWaxe)vs@H)vA>CCd3sctJ$9zZFYQ!x zH`qTq=x4f^O>a@w1I)}A;|zn=kUBr>X7tyfp`wohWO2J|bbYxl`mgUf|W%>ROIpcmMP*! zA>RJkF@*8Ah-MSQ-Py$r?CVL|9M&ia+A+h4vo7wk)y$=d@0uNERv|hA7G@Ml;pujB z*vS^f`D=^Brv-h;B&I1>s1!se$|^1s7BQ^|)p4l|N(1V!)l_8|H)aw*2Pn*3aA}inH;59@q3`qDo0ft& zGvD9ue~+^8OGnu>;scS9h#4Gg^mn&9=qef|M# zpg>0a7&;g~&q@=*y&G|#C5>oc>jd0w>GK$GUngV;>p_Zt1nJfZTCvLc5kMl+3+{CS z(nZ>0&@O_{3eUTq6Rr`SbEXHlt8-lmLLb)_f7gw|tuC|#wzv`&uX6TTgr~=lkzg6v zNT{L#cNtd)spT24St}Zp(y6IN$XMK0*yL0Nhe90(i}&vsz>3ACF;inz%p}$bvxMv( zs2haWUC#@77!Mz~2C$XKu5x9%*1P%(tDMsXK9J5*g;an4#UzIXX9;P3E8I;Dt`iW_ ze^O^|XnZfYX~MlwX9eyW;br(sz}Xu2Z2-6lY@};0z`Y&d8ZLo56X2Qv?wTFlP!ogw z7nk{~1p~V|#$CS=@L_<|>zYZHiwVtYux-*8RWx92EQ@isc4{Hk^hIVNc~OCo>>@eo zfz?p92mXxgmU#I_mhN)8ysq(Lsy}`4e@_1_0drXvl|n8m%=|aGRFI2^X66wLi&cwg zrUB9$7P$o~OczuxJZ07EsuEViU#gsM1>{R*{aqz4kE^1gcfJBSAN&f=f0K`w^C@R{ z)dRKb1r6#O;WF9Y%?#gL{*vGJi_{DDnt=8iO16x+Rc(+~Hz?MXhq(nW@F~>Ve~!C9 zWhmY5h;d0I^Apgls$8GMc+01tkAz}e{T|uh_p}_LNDVf{c;fR@;r61GAh8y>;JG4S zXz}afx}nW3yXcTgqB=dv-iSjuLCJfMR} zCdtlp?F&Id@Pk;1?C(#ey-2(=?NdUN`QOWOF} zWt{%)=8HD?)1V~`FQIRFe?b#XV%-{_!Hcx|Wv2}^ccXNy6I=7wc8+am(Sbd>FU;M# z4DKvUD{GjhyN!~&rC$jdU0Jw4Ot`@TkY{89K-kx5l$;Tbi*EfgOtNqWfl(UJ0hTvh z-|xI;7tR90d88lXOoMDgFaNDkmN^FLa61Xqd_~BwiK25n1@+A!^$YWT#DaV?UWlttDX zrEkL+0VP>nHQAs2k(S-ov578^=KjB3s0E8 zitmYv=;Lj95Zcmqe+u;fe-Kjj+J&y}6Hk+-k!YbB@=TJ?J&mS!p8*`Tsg!HJN-rp9 zqVi+hu~`;8L(Uz$)zTOyU>QF6m10lmdacXgjkqezC{1d|o^-UM?s3&uB)%p|%WNgu zD9`yI{TjBq*SaL^nS*T`Vz(0BugcC7hm-(CTUW$pl~xvBe|_(Y*sZwV-k9+~XT_k= z;aVg0t(xb-uF?w3WH(5UcM7176Vc!LLO4aBAvR{2~h3ldx7bvO?OWV?R zaUGH^9tSo^N7_i>)suw$;}q)i%9=IY$G1_J6#PWyFGu{C`*DErd~BA>D6MGQ0KA8m z6HzaF#}q2Nf4}WEKYScI7{P+|woZrO!v@}7-xr3Bi0Roi-iQ|SlXYaV3ii#JMR<#)t( zRz8y@`vHEJTFicc_`m{d>pm&cCZ7~(kmj^KE)t@Ye>wP)GE3rR-T-CV_Vh0EeCsmk z9W29pNx46?_AZxLvmbzTX3H+w2Z{Ft>(JJEc^w9{@gh;y3CbEQXuz%1g6VB>$yKnY z_t)L6Hnu)C3$)+;@_hQ<-?qx%ZiR0<<8$qCKDDt#p;C)$#u)aepBP1;z)A8)Uf2e&Gdx|*#Pu})lq1-S1Rm}F#lRG9c z(D}>XbW*l6z>U!hbpZ}f2?QHuFX)e!^5xDU#|%-MPA%Gn(jDWO7NpE_XRN8tIrP|g z_AAsKc1#9Kt9$N`LGpGQiBH4UNm9PvLHYa187ZgYhI;^ZxQ2lYNpjuPFxD7y2ZKeLilE;K`LSzas$}w7J=;!cY~&f z@^9-#FtGmYY)Iv$BFQF}f`PbefBZORNX~)w z7}_{S?L&jl?4ToUO<+0eoTt_L8IsB{jA=v;T1DE-K%>U)>YQ_ls>AhpVcCkBC~Z6P+NL{-yWV6{oV*@G|Hb9{8D&MG*C=`M$06{ri>1CJys z5qoM?%UDd?9GjGgMGXWv))al?^W3mdtxzF`u;I9qd}>jt>y04&tCO!9hGqr@U_FBp0?uEnhf4dnI6Bf`7Rb0KA| zyIz_bP|9`rO)Te8wAJeyP`|H<*dFC~)d{iYdXR$MHAecJ8X$oW4-s+;lt-;};l&sR zS*K+spplyNe{1ELvqYd?=zVVqz*9vW7ClHXH*=JvyvRq*TxB7~Gm3D9t8g;|jMwva z>}Lxrig5uL5t00IyMLuq*R!@xCmx8U*K@ts)otUWHsCF>vnA)XzLh^)C8xAs2Nv+q zlAGDkIR4sN`-`Od2x$Ji%M7(D?9>7!HilItx5~C%e^H!P9$oGE=w1DPIb326p&IhNLc7kQ7mpVG)Yh`>mTi&v2$Ull z=7C1(?XaRl>7`T{ue-lgbSVC3>1x6#*?nOp?b*E~uolzW_0s6~aX$*2XrM;#bzqO*(4l52C8^VKZuVnP z^N+%$RA3*4RcXWu`bbCRF5)}6K%6TuvIcl<2aV5g#nYNA8uZfr9k^cFAk}t|z%wxB ze@=Zt$jQHSbu~YWc*C;Iv5X-&gB|xmDaa^W0Jf_)3G~ZrS}gY&rHpX;u9p|!-Qck0 zK0Iv@u~gR}$2{&!VD!-m{_eTO$~dhB{*fN8T|n*n5VT&4d`oN>1;LMZZS6Q;VUS-* z>upf3Ya8@&YgR9vmQOM?N*7w}@sVEufBm;UNXQpUE_9W`HM&xf>A$bntf^w#OAJv5 z{~}9^&xuU*B5l{TJ5HPQ=w$-_qgMw}&(?XhpaUY$IMSl?Qv2wTyf$guv1z|%$EH78 zXnH|g{#YR|B!k4^?FV8bYY&9=DH9m))zuL%&VH;1E6;R=(R-W!vyx2q*|c#?e;K#t z$eU5hJ$CZrn-q;?I(xEkjDU2Fk=*GSX&4>O1Y34_km1|0E}7=#6tiP#ck9K=-@?c( zy?Vz~Ho82Q{T^cpV^aiMU<4z%eLz#2T9h6fP`<|5=Mbj7O^#=n{D^#nPK? z7Oy*}YvR zT&I2+W>18*W>wAVn8lL7P%pnV#&6ywuSlb4^@->`s_@^)JPg-$*E)YVf5IQU5k1aH z7XO=Ilf21@cq7XbI(AuLG`-rUW!h*O$nyPRu0XqSKS19PR>uAq@6B_$;_)7rD@Pc^ zY6U&mC!&C>nQ$boXd_nOyl+q!Lin}Jf3J^otOD1wc8nV`!CwTmEMjVr1WG_w)iKEHXxo(mCEnDg%pfA< zHJA1!oVUC$%$aM;K=wFn#QrM_PR2tTN1TH-6+Y4g z#nNiu_%HpadWp2-Jm+I!lBLiyLBFa4)BReOD%bbwY3?Qau6)Rge=~GIen_XD=R z{zqpj>yDo#gLN_hXx`&22=e81&dEo3(6Dhm*>F|@+K2_-#g1?Xhbxw;?fcMVLAwWg z|Mk{hy+5K3m=`IzN?04S*vI)D zf(N7jm#p;bqxo93m=D}=G6QKZ*Ofmw z8DlR%vE$iy&EtV$C$p=BufZAy{@<$509T51@P_Lu*U{KjfAPA00(WBsD^Pwu)OA?L z(by!}H#>>A%Jor)0dyKmLNvpu2i|octlMLdGFoqflK3Sr_(9^s*uSB`dr-iz3fCE}1*T}jLFnF<6Tu-gIc&!kF$J>v}82ki&A+Ks(5f^;99QbLL zK^ojq3Y2mxe{v#bsU;Sz_fXM+Fh?E_9sryj2&-=AMZ_Gg$knVl7UOCU72O#;7UKb* zLrIs~K&nK8nnFfuOAHP9>d8*`)Z0xj!tA ze;8Gh>=A{UCco~2TB~5>Sh?y+Egn}ci?)UA*W6E4WIaBvv7 zp$~bQLjXQl4KmOTe31fQ?9WvX>s2=^fAB-iMwEwVS`~Q+xybAyA~m?t7eNIh;OR}L zKjeqr^~Zbn+gAK`B4&1bV-_>XnG)1&EC5Z?AdPK%mCcFeC)MwO6qfnG<8NMIDmSwA zJ#!=yfyeg;x|v@zG&rVwwbOd&;Y++rW8>bX9lg9uCSfCRW6g_q+_&Ay2X3EtfAl^& z;pjY|Na>Xb+7N$jK^eB*uk}p^jHyK{^yDyRV%DCX9EO|^uyqymq^tG&VdNeg$lee@naL1n`;@&~qnZX-F$0Ja0 z%NBV=%>>E5^a_%FW|1anDEB&t%JHwvR@Ctzz1dk_!o0X526Xsf1ZS>*U0o(~8L!qy3DJB# zt#*RVIE{?}Ot~YY1&%fD`ct%PN}m&Vg8rQU(3gH=G+%@Kc&Gnrf7$215~ydVGx^}v zvVJZ2^MHDWg55JTe)5=JTHiWU%!6@rH5)1GFTB*&5$Dtu3ZEY7YU}x@05re;LqZy!Q0!X+ zSk|0i0n3^%Cu?T|f2`Hz7{&g^1DOh^uGjulR$7A2Sok^^vJNCU~q8$4co8xos(dz_~ zQ_I${B!<%bwvO$L-vCnPZjds(X8jX>{u;Gt1AQzHO0|{me+22LKPb=2NwPr?eAj%d z%#-qvC&@E2EWnd^X=2AxW|Xzs&%)fo&p;>p3^4s!j4uU#RDU@?x}EVa)d4>;hg*Oj zwcsxBb=zt9v*FXcCFbrR`gw>D}fz~gz&tBvN917R&#Y!3;0o!2oU?Q+)%N5jO5 z>qb{QGXkl?e=S8hp?+YMwg(Fqe8B90AxF6WK0G_}O+f{`CBr>!L2CKay+*n>KGJnH z-lDu9NG!`5XYL`;!YvDWxO^YcIAopkqhP;5Hw!lxO=Pjqfo5l%?@ukd$oG?k%@|d< z&soF=7S4+T*N@IC0Q|n*>0rEcxc!ST(R~cHNcR@Uf4xt)1H~cd{S1EpTOSlJJvP4QGS!pUjRJl=AxhTpn@XgK~+Tx_xijA%ObWVXI$Ip<`ZERcdf9_KYf5kbV zCvShqn+kb%IXU2buQ+`H&<{C;R1Q@Y0^WiqE=FPfU}GI#54tfB8Nx zdKCd_f7fEUk65kqE_#L0pQ4xMw_BEAB;2)tmrB~p%5e`jgS5WoWx+DYAo*GpzxH20 zLf>)M*#lkZ_2s39_FNhVFh~!#U>v|8Js6)^#7lSnER7IPb5F}_|K&_2UfSQ@4e#nW zJmoA~1!74H?n{U;op6^ygdIo18jc5@@p2z~e}?R1=Rv#tKk>2iQdRpun`J+G0WV3r z<(-0Il&xyhPCMLAjgJx@-<)L3|FRv*_n@APb5vodb#Eqi@G0c+_7BkBE=4Z8w0`F%0l{Rv@Fl59a?H zJYMtz@X|lp5Rbf+($*az{J)*Ish9S)zh3^|j@M0KUBLKn#d({`n9(G$PUpX+^nH<*pS*vj+s4U+cO6V>bG4#_U&@jM=)@rshY42Lx6$Jh;{Q zY4FRi%6!RO!trEuEcB+UQ)qFKf6?K8L&Hs%(D37}hnkC_)~|+&i^c|#4=js#K%c=m zarFYuf|CT)b$>pK{7Hdk&tRNb>7rNbT#pD#pl)e0gt-yF;BiHT4_qXtGsumZDSHwN z;hYe{{UxK4y@P zjrpJgO0h>Kuv~e>5Uah+Ki4krA*;+H0c#)E-HxeUQ1(l7T@DhYEZt9}KIeb~L~vZ- z+@y8&9Ge}FRit=bph4gswZxVjx}{{6vO9ycwxfIQM@scrc}-F(l*~)RA^_DE38J4_ zRaef?$BZ-1fgYj0jh)o)e+t$Lg+Cmc`N8SAbjF#-9xgoX7Q=q_$H8QA27I$; zRg!F%Kt_Omt>y!e=R5Vf^gs?%ZBebER+6Qc?CsP(ENCmyZo@s4e=^IV9nTZN^p;*Y z5Y`v-cHJ6P)J#vb>x^2j$!lZg=MS_e7?aljaJK9xvv0XGC0Hxt&)hSoLk)MSaf}$^ z7>kkBb`dfaY`55-2&sJXLRSY|`!2lDwRSJqCVNSI zzxIJWJ1Dt?f{ejIe`4h`0i(&~(DRccyiFTaVe~3qkNxen3vB)}0a^`Ouv z4DFX2+BjzOBj4qxk)gN?6xxK-+jPKvF~Z18L)(=-dG3GULe~`dyK&Klu9a{teNR~r z`C+}AJ=(o@F7C!;{#{AI8qE2R&fnhnL}8BbrXS}D;*KMZ@7(UiH{Q>lD74GcZE%~8 zQG1^dFNtkLf8cE21#`smcr9bCJN*l$adIusw-Q@XkTRR=Xfqkz=P>6ZXDS@^-;=uy zp%Y=A@>8|J@hnyRb;%sLAFmPbxe?EQdZLhuE~rCUNe;srz2AoZgoh({$t`=k6Rp2~ zC(y6t3f|9%)q;DBJiqd;C?H-f6IX@gKGu+&A4BQzZaj@Jc3p!v`mZh zE;D8SF47GLE!)?sv`jf=8)wQ`Sn+9YA<0DVy(XS&yPPT-#IrqcJxe3}O%vwCOrJYq zCNoC4)X9yYv*LV-ig&dv&7Q^*KpNiGqAS5TH2Na0Qkm@g!$f0e`@^b&{b4SpqT#VW ze<^xXnw^&{vOPfsTqnpErrCAU*7v)=rNqzh&`Ay$%SxKUbS|1kc!}%zHnu@oLvP*D z2dpFO2_E`gFKvzBtj8fIv@FA-llFG#WQcrA+BA|m+=V(4jb5cTjrmKM^tEEF^5(yU zxh&A%!-x@GoU^ILZXO5rb1SY;$FHlme-rY~gBQBoaGiPIg|2_R*FEo&+PEgY^p6&0 zwkG;BRK!wdmiHuBCZ9y~vOqE+UDkoHDl?Z6FR`G99cOv&3#&`11vzZ@98J`Bi2Q~G zOxsbDQ1-;bk`NBUP-h|xnx)RxOA~()&hbb$oPB;U^REDh#^F$a(-+{VWH?&!ei2j{!`g=H@$|ld=Efg-&=sP`WT#<`3isjzEBMqp)a##m7Yw_TXeiFsP`bZq-$g>njc zXTDuRF3T^^VowdU!&_f#i63`9(@)d)q#PCrH!HjNEvqMF(*IoODg<2J0rvxeRt5<2 zT&5iBVGYz!^4AF&?3VPU&i==}&VEfKx6k2K&eSF$UOz`z8*gV@Si!|Gf3W;p1d9Xr zqp4_6=7QG)ydg3?5#XgULtz!Pw-(zwG8Nz@_rOb!w|8H-yS|p?T-OU)rK_U2c1L{Pj5N9P zWqIBh$;k}yQ_)hjJZj#7e>3FNV&J>czenv^CC@ULnQ=atRgQOL#P=c4i>It}w#ycp zq8*3jd-S_ybP`)r5G|D}Ls9ac?v=MAo>!^UnU3x{nd5arNZqd?%HhG;{88~76JK&WVqnJ+@?(d}^$W#9y3e-)_RwFW(Y3K?-$ zE=$qozmxB;T$|Ti_3<{W?P-Gw+F%Z;pq}0imtT~zK<()P*`AZ&3g;r;R-c19_Y#mj7MX^p2+DPDLpw(Z_H~5PAZh(9P z>Xr2##PSo^?ldQ(f5|Ls5JXT3DESR7wSKg<2Zt;CbxzYknr}EvteJBXa?=BbTrOmt zMe~tse}7!ooh-<&9`mE0=@~Xo-cw3_7}vrPTS91WlqO{~$@s_}5USfjtaAaf*s{Um zZkSipdBp2f9Sx;>oZQhWXUowK($_e@Ig-oq`@MNV-e>t7zsFH7A%Pa8gb*2WF z1u&QPNR<<;0JPDuq11-Ty-fP09G%ptSMEK*8tASI-bI7s(7F8}}a|6A80v7#91@W&%a zg$^>6FmgS)iQEG8aW_!PedJ-Xm{gIcfR6hv+K$G<}u6LATJi=*RRk`d1pF zhw0zxF?xdPD`~}h&H7c;T~TaU^;D&&LIroA7lJf12>M6qLX~{?)GCi#xeLYA=0^Ba zo~8)}e=fW$JC~%>KSm#Rz%~B#6!lzu3dMAgOJ~0L<|)DBy7;6SgZCP{NyI0u{G_#O zQM}7>AZN#0{NO$ zTv6OV($uXru-dvLzen*%R;CH0SApSD^UUgj13qIm* zLGM}u{OP!Y;2Ad1|L^3aP9p99Nltd1fA#)!xt!EVU$^~dIjNHlwp}j2X^s)<@C<5p zxqPV3ucUjwZ9}{SVx3pS9mRL=#7lsbBh;a8C|Dz%l-EIIxY$CH!ynG~L(PsT-+XOY z61LXRG#lP;3=laV!dxxG#B%ytu9TZdX|Z3dA#3 z229w~e_^M@I^ZNi`D)C}1F0HTfG~) z^SHb3P*!)}-y_PY9(E~L&m2)np)>zVzPm+vzi5Vh^?0t2e>a+$eCJfY|7Nmst(qAB zo@BmSz8j;w|LrIxe^pNWd#ZV;d}mRL*6of@n=tu&{7(kp0(;eItVC%K7asRTMv<+kR+TL3DoO5~V0JDI(lN1S zGW7b4*I6p)!mmW_)R1%T(Cve}h6=gg1%C%}@%~&;PlvWQ<4!%gkW(_#TXNEH$35Js zC($X{Ij3Zye~U(@2Nvgy4WaB@lrtiEAH+rb(_}^YZClDB=LGY4W10g zS#Zf~EVhh5ZB$RWoRp*4HizW!9EjQ7#De=5;U1pyK1w{vN_-)~J5j{FtSyX6=gt>o zWCw3QfA5ZJa?Tw3V7nzJ8aydX*CifKmh?${@Nk%_yiQLbQvfkD7X4kTbO~Q*L~FTD z`n>a`uu7->qE;ZbApvtW4{3N;-xy88dRT1df?Uqoqr~P9QR(AdcQFmy!E9_`jE=^B z)#oG}nf^oC+{V+zDc&Ob-NY)sb(ISHkhVJcf9B>_qPcWDE6pLNM|dzVO20b*75^vy zXUX~Qlz(p}-OvBK|GS8ix1lHRt@7PW`S}Cc7G1^5KRdf*&aqMc-EQPl-x|Sk{~C|hMY-P*`}N^ zZX?;HBGT6<=kRm}7-s{2?<|lK-AH#6w5r2e(A!P`?@fFm&5P;Yg>)5_DGck^E$2|8k4PdBZ9_x-BsZ}JEevUze@dIqxf!uM8@rFB)eU&_*;si+;%05;v#|y4 zXJbNzPV#n8TjS}QJ@u9Dq5^5NTYb$591Gb*`a>X(k?h3HMA{V4umqpkk836LVt-#B zFCEl>4HdL&aJL33x!o_uh$~&I2{Fk`Zn32Wy0T~%lPszOv613~xd+1fvHDP=e~;P~ z{+;5*SYJ+Xr1*MtDmf6#X#8ONCwxJ~VQ$>6vyszT9%`lMiDZ_llZcez!B$T^M_Hnm z+F@jp6fcpgSDt`;h@%rw#tA3^VX8yO>m1Ual?gt}9wynzBH&+(a|eg|_%5yU)$WV! z;N$N`yJv4lY>ceptBIw)b>Beqcslc1y8zfl$8#n6)R6#7~+FUf3L<2HHe)= zFBwjWmV2PxuPt5Zd@o97 ztb&%40%C(-j7_i<-^Q=fqad%Psa2v-pd(RksTue#ku*#3luCrVM&Z5_WbSJ{e+pYP zI7S(@6KTl`#0}4M@>ola;Zs2dkru5`IQn-oN0)-wqHc;x^uGG-BB;|TsDFFnW}P?1 zw*_(`O%sqBmUul3RZ2aQs<0lH*1=GtKBe(FBwpV2A&wD?9x$#EmEI!Kfi9Yr=-t1a z^Hth1Lv}U<^sCR?uEqJQjmFK0r{_KVi%5^DOY}aB(6#H9`#`lmdC6ri`pX)yT%~GUp`$VK~1zyUFdhf@? z5xHgI5i&|lsWw0#S{gA*zG%qHKN31WN>rxSXSB4HQBOprbw|{yu~YRgs@5jf3}*I; z8n6!OuoE#}d|y7XV=zm3@ldpS+_WF6Q$K*eMXe@vKBUlZaHpqu3xA@7kkPz%%9$s( zA@wgg^Vl|;h5d)M&N&IZgd}cW>2yfm70Eu5jbCVfvNyqpSifa?A76hjwIl&$-Pn*I z(~(rA@GRt2QyWl>vL@Zv_s#Szpnr3ym)}aS=~qX*cHqSKc43LHFSo$GbOB1CIyMt1=+D~?IfjFn z6Cog_{sUL&<)4U^)KUx1vrF;*{Und|jV7(Y`hWS2LKzB0;P*ryQm1}{LKh!gpjn0* zqzoP?!xE>A#@1_@GP;Qks6!fCrLRHSNLi8+r;U`$XhYkoGJn@b?b@p^ql!LNNEK$_ z%lb|EHuve@E+bZd>upO?s!8j9g6C4CtigQ!#Y7)m6H|QeM>R>5L0?<-o3yPfRJRcA zI2@bZ{k+MU*y_}-l5>*L)j{mt4I!m(6F0+H_*NP3r##)G{rRegV0^D|+5%bz<>q)# zC3-c`T8H$VCx6kWa2FiCgO@2|O}|VTYYEG)G}eej_a@3?l-eEABAF^sqfYc1YSx}Y zy2AYw7DNBNx@<4Y*pdN~npjll4y?WlWVMQ_&i!pQo}r>P@d35<(K#}W*md4Jfg2w1 zByKi=gtu7k1nIe$96p)H%D=wIx2Ab|^DTDLTAmNR6@QF$^Ab^T|4jemee)nU&DXxf zd*7GOiBzbt(<9T7n7C;-)5Pd~;~DRR^m3Z^5K`Wbf9Yhd_PiTuVWg;kabE7A;Nsk* zAo8nc-ETzoq@OMAh$2UaSQ}5fDep7|mxzD)ZXd~blb@rj{$zWJLnrCz$BstbqF{nA z@dcne9e=Ui6q2b_>RL)hA*N9#?rNH1N%Nu}QBD$lpg9ntO+1Vmg)UPkJs2Uj;{i;8 zb=l3Zy~9K@JmvW(KtH)Hq8XKTWVtit*nqb!YX}+QuXH4AuXtR*9n}2D&iJK7{OU}&S_DHj}+yS^A5D^9J z@t@-v^_XkF!kI`{pH%2*gh!#Hk)EH^k@X~60$uqj-qirr93cX!%ma$tx-@T8X$X4= zdCQGK?1#>ubS&MMXI1!wN9GfK-&8n7>Aw(*YnCFnf&SFsnDe=T*AT?(SJ1~Q4b~TB zY=4UPBDY!Di`(SMFz#52W$l8ppkz`C@C-KoAiWOxgphF(`OMV{pGooVIa$R1bQ0gZ zgTG^NrtLzfLZ#Xe#ugKfyYRfJVJAdcy241ubSRq=nd>ClQ22&`*0?vS0&bqjJ_g+b zM^z=rOSeas@0;eH>Zbf1?p|ZKW@}VM{eR~@QCyRN{Aikz>~=wpv!{JVQ0t( zc0&3Z(dbijI2`Hee&iTx`4yxEw%iytXuPGuEu}be^X%Mrx;> z0=}PV5))WP-KRVSil)Ps&e5Ky(f(6CvvQgK#f@Nbf*mRCt@?`HnUfPV!Z;?m-+u;2 z<$N82Z}tRs=Liwrs!SPmHBOKpnuLQPUM1<| z);x$6fTr{;-1TRPn?Gna)O4Ng+@p;8FI#Z5s}3XO@?x!k*WUD~_0>6vw5%$@m&4-P zHqh6%9;~Bv>AYMb{llYZqDMgUz<*P8c-NOFQ+(K8xSKp+QPw4%60uhlsyEaW=n@Vi zRi_27#2fWshYn^SVWbr;3v~bfB=loVmo@}KQz2G3r zt+)>k>SiE)Aaw=9XV5m`emqNg;aX9Fkqa=O-*4h;$gn>}yX+6QCL#|e0Dr-vuSPmS z`rrc(GkHJyfDZDSS%#Pb>3QGHPJQ+KR?rr5kV0`M-jucIfiQ`BALx?R-S`0Qa1CFL zS04I;i~!l`NvPKQVbq`0RwGvLt-21+fXYs(L2P~iws{`V6jBk?Mx#5nSLVB4x)u3! z*sXPCoK)V8k#*FxfEy?csediyWL&C@*Kg`N`{HgKX;pGBruY(~b4=Z%xN%1@Na1^J zSA|~Mk?u1-e{c5kTPrdS#7LtFG#BTONXZX+Wa`%y4aV{P$@vksL~jaM2KRZDOww^auKRft(G4X|8K@V$RqJQ>5LF98LnI00a zKo1;H1EiGPomZlP6q*13#gpKB1L(`_2b^Ya5Rq&B6|4NVX@>?0lqe{&)U1hFvQI=xk zQ@ohRb`m)TK2H}bGte`zP|oj?^Uu9P%V&$Tw-YP!pylpv?kk^hV@uo&x^aNIE{MP> zjf%Yox+~Dg_kSW#&JMYz#)znth^OL&MXk@}2dhKj;W@VjNhSdu5x=S`j`gHec;P`& z6qJ;Sn+pKT&uzmV&`P--i1qx-`qnNgUo$$c)boj(D>HhJg>Fn4dSQx-Lpa}lB?u?t zou^2E(s z0i(16F>#yNU7msuOq00z`uN*vacDpl+1CNS1wW0azB~RUzbC~g5o?hqx4iEa`q(6P zr|buJqlOP_R>smJSHuLCf*MA*t(D}%nh_g%WoMk(wvc4P?;@?VqP^cH)FJBF27ljb z7|)sLdw(?oh97Icj-iiBBbhqL=+W#zY))-@AjoFzuq<}#hC_L_9TvfXr}1RITn>^} zIua@MzgE^qw3KV5>7XS>gSGNW;3l!GoaX48UV&7W^5jC2sg*vAV5zT_)e0KvcstHq ztIW^^Q+%ZnBj`8}NtAamz35;&<-NsGa@-x!mw%-P9PEke)S47IM)72QLmT(BvTL+P zGK4GM{XpPYi7xf-^2c9%Q(xA=5NH!g#2_clz zZGW|8G`m*FDyMiV$Xu;7G4irtkx#Vp#K=9F0?GYbaQpY}hdw`kIIN;%RDr}(m+Pc! zYfzoLrAb}cIf4sJt=u!>)zH$)zz9`9ZC6i3zw}1=^p}eGzU*4Y3-wMGN)sx`iI}av zIAajQy^=RN(}QSP_FFO`ln;IOaEIi_-G4^LF*iIFcI5BE_3>k%f5$=JKGW9dcQB)f zDevki@#89>ag2kfybinH0@svwobig7{Uk;lpTVC_-bG0xY1`qA8{W8a-y#S36n8I* zr^R{2*ZwRHa!=3ztuK?~ARNX)vOzv1@?%D_nK5pXfu){VGJ^}{N@k55sT&0vr!`xf9s6@ zYtdxX^^s#C2f`_4)Tz?e9Ejz6sdUzD#Qk^Tz9t-dICAyg12ISK-$BxB0ozbx8-LKk z?qXDW@I20Z&JNn34?k?xMuCsnq9NoPi89~dd+`l!0w?ngw=UreEpScDQ-9xzyh0=M ziopR_IhXG$`&EqFrj&B-(C(-u>4)GB_E9t5?F;UP(MP2}xOYdhLDOn>pMYASe52W9 z7)D;?8k?wC%o5p7HU{^q8oi69K!5fLK_9DcIbZdienb++L*_M}E>871>33s2q}8oP zFR7|^s_K=fo&2*ocVcNSIe)#+jc{<@!ff)v|Iz;#mv)8Gn3Xn-h34IX&*LjViC0EZj6Sgi`k(Tl|%wxuOMXj z9d}H<<3IfycKQ9VOJ5JWzIg`V=vOh*=&`v|&J=AMAkyn#T$rwFzJEQ&k5*;hp9`2( zr3BWqj~TV{0d=;$8GUS{ARiqD`G#DTGv!RqHZm+h_N^A3t77>=X^}(PyApID<4(}% zHi8wIgc`Y3C-$vQSz{Q~cP*~PrP5g3rK&=+rdTpl-SfAgrhm1;3nMc7?ue-jb?EfK zz3f4o3FtRn)Q3tL(tj~%fpRQ(Mx=B=Kk<#|R5BwX5uI)5k&BUo!9lFeg&1XKC2n9K z(z9}nfXg+W0BC!AMGTg&6t=6qNj@*w#=08Ld#&7-f5xh0Kg&ZaOBv?WN_Lb&p*_vT zlAY*k7TGcaCf{P)z)*^h4(hvx2pTWyu3K03^`&_64HY;!x_>~Vx|M1lwdtF=O8*r!I?(kF8Ovq0$X8#O7Anw<=54NoE+YW^aC|TWi zm;%uuomsvYy&x1U6B9zlTF~q0HFUV%cK9d}$?!bODSwvi)kP{D1NCej?Hl*&}}Q3cw!)yNdLMo^nVb zH}sO~=JP8~>w$ND>Nd0*q32a(OH@UdvJ&Y1A1VUfd(YT#aoQy29wA`9>Jg=v&EHp5p84 zrGIifs&9kxE@ipKCyx~vqjJLrOK$*I|u(uFd8ZHil=ok(PypJj&{M%=+xt8oeq&~fH-{qS$FMo09L;fSSAfM&2H<~pP-^o>@Jn=XO9_&{)6Ix%| z3AM7Rn>b%p5jlN$`R*u9GB)jwCMWSna38&XTW*0=`&y8K{=8hXNh4}D&6I7Lv5=GV z;mG+oP}^!CocH6vZH4&^X$;%T0OmQw1KH>yU2n zn0)1+Vc!Eac+m6LD53B7#8q%dwC;%TeBgF*2nJ|dBgWEHUX-V1pBAI5FUV9V{p%;1 zrK&c2$(bdN${ZW$^ov7g->=xGteX9KyA3ejx8r&iV!Ls#o<_rFVt>0Y$i?HW=;NdY zb9GVgh?*vyIwJiSz81BsW<>PnA`$ao-WeftwZfx3An{6$sC^IFlA)~eHs_IUsUL?} zgYnke7tV-$LhKWViWqS z6>}>)dP#&e5hJYGTYs3jRi)R}V2l+<9Os>a(bXwS&irm0&6;@9>_d5iqizhy6Vqmt z4dXoAONw-ugfivB^+iaPTcaFR=+Yj?b2pALl5LhHW;cd!_zA{L7FTVMF>C=0KN7n8 z{Oa##FdN`lBh7EWp6z1V8e%hSE)SXkw_Boiiuf&(^*hukx_@!2X;qukWsGWTZi#dJ z)qu?#Wo#ydc1Oo26(2Fjv1w@iAfDfz-%kXnrfF<%RFi};NV5;D0?mDLjB;8}jMC@C zZ%;8(YY_pO$ko-<1nCr?9Hn%KyT7HmPlhhi-w=-++bFUHR;fQ9qL{qC_&nA${%s z^{HKQgk3oS8oxcq@XO!bH=TNpb$=r_slY0Ij{RBY4Vss>If*o-N|AbpJvj_V-*15H z&Od(GgB?MH8YNxY1Uaep1Gg%aCY!IZXCFq*p)(yx+F z4A#|{feUair2}^}`;Z5HD$~UJHXL&x4QoY#d&#Y%hjletu~yL4T;zGwXWmf`GUuMr z6GKO%3a@yuRf8V3;@`Duein<^E!Qod#h>-cbCl(X3Y6iYUC}N()V27xtva&%{OTyS z8=>aMTYtm{u8T(^JnVBeK7@c_3lT?j!-xEC=IXdySXRu#W{Xv*C(vzxOb(6*idWiU=2=XhJNNzXH zmE#X0zLn%Y)zu(v&HDyD+iLF&$!;)hp7ssOkAES6+izR1Wf&E5h=|u*HshOGA(vgm zYwUpr0F6!(>M@U{#uvQVPvhOL`)h;^OK*iDD;06nDZ zY=6Jqwb1V0fF)uUKV@cLf(Xy`56O7=Bj_(n&Me(}3?%T43|pkxgw|e0@IT91vk#>G z6}%THOW$`V;XDGP*^fOrL6ogWkaWNEq;BFYeKwQU6{I+pUCT)=ZHR>jJQ`L{9Fkf^ zhS}HzmRAA#Kr7BKn(OKJX5K6t>$gE8oqvuf@e-9y?&Ef1B&~T zkJ|NK&|mFFFKB)`d{L3kU3TDz!=9C?8aTb@()<(T{MTL~{}`myVSmIn zGsvN&Fkl|ehPg5Wpa=W3uIVCb0sn~8#fAuC9p7Avd8G|EE7%@}P_B>n)8lfEmc#A1 z5*}M=;Jp(>bx&zzIJIeHiryN)C>=)YsD%vUy(8q3l{^;FykVn=>6LsV>l1vOv_CRf zlzr#`Q)w@jJ+eMgM0;VGsOVD9x_=S7)Xa~D*q9Mo|3g>@9DlVQu6vA$y?O20hOe6fEJ6OT1tN+&j%PI9k6Cl=^2xi@UXn|k-c zj2(Z0{vyL>HOmy-gX5d!l15o}e5+8wW8o`|R=HR5o4fO1jwJs|8Q#cdJT0OTI6O@xmZKpSfex{{%6|m4?ehS?3UR^3efYBh*BWU~xFF+}U-02`m-z5G>Dx%H ztK|wle2rudU+Tk${_N=O!?yy&zXko>K717!<&=1p%XP}NC8)}&Yf@ES$khb9a{mx= z!d-1hB|0m+ayN#a9$b|H@XE4W8YwYs_ACB;i{Q~sIrH4MmjzX3R)0BPNUfY?=_nXX zGPk#`8LbLf1-{VYdZHQk3(_%O*y+43)K`cR+y}iVV+}L0P0kG2=ig_^m=N}PWyHKA zKyuhvb}e(mb4g^U?De0(NanRb%ifks`I(c3hRq`8a79Y|d*mFL-X5{}9dJzx6ASKS zgMR)`;SXq>SX@+or+=J{^VatRpU|*BD5tTD{{WaZpl2E@--=BqWJD_1?T1(B*REnO zmMHP0-{l6BH?@5J5)=r7Vfb&`6kyG@A>)=nlhFG<-U%W0# zbr_{R5H`ND3d;O&j;i%Tm7&mF=#3GIbCBOzf$~M+tkfizX@7*C9g04=`^aF`5ptd+ z($xQ_y|V$2qPiFUIkS`OM>e|?5-(+3-FeT%1;{p#z%rya4um{{p8*`oP4q4Wd zPN&Aj-kOu#NQ-Fkd*G_hNcN_N>CJ5SGUQ1*kz@|)<$uhRFV6WRkxg&C*jq_hjSHdf zi#)jAGFeW)>Tm4VTpJE1AB^>~Pb8&M#cfyPn|&;2TR*vZdeH2%^pokFWcC41*Y$Eb zc5QO-#a;^$l;_G>d6GbUX3|`mdDUM57^~u%Kq0=&C1eJ_SU||n^S>OZDfx0BANttq z*0VLHnScG?NAG=AIZ5lZo2?xhqZXvk1n-OLO3E9J5{t3it#7E3S_m7kj6~vk^A2kn}Bl{Lj-2nU9t!yU(U$;nMcMogN|=lQWv-^o*vMu)i~! z>;1h%qpnjFUn_w)t7syPJgI(0lXyAAoVX8Zr+-4*;QKShb%I*PCp0`R|AgqKt`v2O zrb_ZEz>YU$^t;LY?yW- z#UV7c_uVRZ?6yyRZXz4@CMdqf#)vQZls-X29>Q9PwTUKVBh9^515w(jwB^T=PkClD z-hb%KHTzQ9Y_cT*diK71F6ZeUU9E(v%`FU=eQZXn{`Zw#33Kx;m)&H3u_QFzabc}3 zQis{cy2P}tYb%F!81o7t?45SjqpUt-pxjf zJHfz4olFzr6`M~`Mxm@rxEvN{g=v$}1b?Nq!j1su(XW=Vvq|QN!aCFXgHYRp5Nh(p zS6?BrYY)j3nj$U3%2C?FT87OjXdRBpvd->G*=96ko|dNc)mn`W)ny+0e$Yu;&XdRV zot$;CsF550&UU7IJsxp~$Vq8i*+|oQZK4q7GD<}{nHJ~dg#+cow}#^4&4t;=Tz?tA zfLLxN)=>{=28C~l?ee>xDdnYYE7G2@w?kSt%4U#->>TMIiH=K&2H|F|SKw|1*Tuk( z%Wa^^yb+{@?S1cfxTY#OhZ;9O9llEdt$68~sWhb1m`B_ChA&M^U1h(e4P-YhDq8{R z4qloqn<*JJE#tkk2QHZnC)0$9uYcRi!F3_<8@o-`E;Sv0Vbqrc8U30Cy0*%GQmgkB zK-*^Y(*-aWhw5QYR!-iy${-BzTR6CZ|ik zo8M^2nht6(zn3(`)St9#jy9#$ox5a%a&fs ze;$|wz0c(7?4DKCx_=Kr@1%oTE%nx1&d*Y$;|yz9Uycj1Qf_t|@)r5|Mje#&U?5)B zl3v}Eo?Cw|%o2P4HyzMHj6{;x7ijC&`;uWMv9_*eGMqei{-=L*7iP8n>Ad^rtnG+p zPWRQ4h0WuY5_^Vvo{$Km#^6ocepGDlo_2Y(v6(lKJrO^J{eK5z!cvRK=JAfRJH&~{ z+1&$UD2~vOk%RhbnnOC09Hzg7-4A?U`oOq(MVd)`40_@%(Zr-@`=2Co<3fpVm?y@| zX7Xle$OzpmR{pADWwZ2zBTiVC|U(o?NcU8}w zgQ|L}1zQhCa$B{&#bQmX&NoRkNsGmUaGkmD5{dlUCA}2+uiZ+I&UdGBjmXw5Q#AS5I!R&2S<_}#Mw{T%XhGQB|?K?!(d5h0J%_Y z*uZ>rOh&l00T|aV-G?AeT)Z^KLZs0aCRu1E#J8C~od3FbA=ja4`qPC6ZA@k!4F8bJ zv&3b;5}wNusY^8ahRQ~>VQq6r6aP|(#vMFko_{eaK*!{C3eK%|^O59j7E7LZFl>={ z`FKwxXV}@z0G&ZfY8)i(Pc?3s;cQPgyQp=B@=N9!j_?P9Gr7SwRB%+JC3{)PX~d|(G)KP1gB+`upzmj zJ%3$r>`zS-lf8xwpuM`%Iud==JL%}$PBtp~M3OTzoFf!N>Obuvxdq3P8k4tCu~^Z! z4L*9)R{JM`q0;Q0>8|4)bd03baxB!+3bkZqa`l)uek2+;BsCuD7Mwo2a0K$&W>K#F zv?tm3k(ktI8D-vBs@&cD2+EPxoiIA_QokD}wMQ^Egw%SQACDo3Lf!I9XJe4Wxq^wj}-+$^O z>l;#TLO&iB)p>(%j(ozK~Et{XHh zrFC*0$==2W(B&-3eFf0)*nI^~{^7Yjy;^f>8~YE%C(0WVL)~9>J{&KyM8vH^5#YWi`~UB=U=LRg2V-oTwIA$Q>tfG@XtBEwV__BHivI?0c=qpA2<|G$7P8N5oDbbD~^za;DESN)Cs znroxM6oa|tvQH$X+Z1<|8h>AiY6-C<$AZ#m$K-gjRUBJ90lFs$D(}T2@rMG&1e-k%)H5%4p90OwliiWq)EJ=Oukxm;U=@ z{gREs1XzhHKwq<|dgfc2pV7BeJ@YNi_5PlsQP&3)Un_w)3#n1nGvCq}FNe4>{vEns zp=aRxgyIT-o@r9`%%>uHre4)E^`K`u9f83OQ9aXB?ojm1HYwUW%{5O+n!-q1+2oCG zb0gC!2RAUCaw%w<>wiJhd~>g9GxI%mCS?xuH#aT^ZL{SGZD_foZK|54o@tuPrF+A? zIih6>K4Tm7cMWKox_d-zcQj9TZk2S8@(%^=u zmgxa4Qxb=5trOYvR&2M!ddS>32Es=*%`ypeMjg{M1E<&+5r1@lJ{8d%p)aAHL%Nx- zTW4V7QKq_h#pZR&_>^_J%VA+`CT|?nG`JyU6UigJDlv*BYBT23{Me920?TYi4onKX~x z*0*sP$)cGFuo7hn>EfB0Kgf99ez9{@P}TZmi_zE!`+pxD?3U)-$>z%%()&mEFp%dQ z?8TE{HDH?DK2h)e-f?@{WnGiS+XV4QhAe2H|3~ZCT?k^@{76PgL~on|DgMN`p7g%x zW@}Be`~BNV{;yy^KUmBc4bRSKjSG1+`Qi=EQLVIu>*cvifppQZamLVP;!}bi))e+G zfTY!*2Y;_eevbab$;a1JfR1 z+%)HOu=le;32pN`bd6v;Nbk#TxN2p;fdmG7@G{sbf}OVPE?C9cuG6@d^kzaoWCx8t z7N2R3#m$^_co?HA8lw^NtDI}=6+F5|rZ+bjFsOPruN#sx{{uvbVHw>s_R zr^630y@%wAT$V<@=Nx;wkj0pP4D_I9lhl@H66qH~&vcT1gZRrbUE2te<{6%w+Zp*? zS+aQKev&`iPba=^zZ4)@%S3LCe)a5NvRZ0gBh$l-Yi+&%=8kG&tSrRRE+zJsnucwS z%zwX4r}-%cZ|x~+NoY#;Mx`K|8zoTUv{w>AhoWQmw-t+qkXzGWAALwyR$ZR^F|m|N zG}D=y$Fym~Ez%VUIxILorsW=Y6U%ZbB4@Qmy_e>&Svlbp$y_GtSF={pKgX?x(g&H0 zGl@(_kn^v&1e->jcj;*ZfAfU_3)eT0Nq_%zDN%PmVBECS9_PO|Y_S+-QtNK}rA}Sh zN|9ulH*zj{SVX^xZ)Cq}h-x@Y+hH0G({z}YV*xFvy4B#z7ZW9>#lX1qO&13)mVX}A za6VgV@J&-RoPmpzK4<^&(tDYfWAtXURg0WF;her9S=DipLB~lHqjfhwYw8L9nty3J z2~DgGpOe@qf_6~$ifnvLJ}>XkHD>g$$zlH+XK4@WV7f_78_X-?8`1j+kLsm277>!7 z{c^wv#pNwJ8uChA{3p`9$w|fkERboM)^1{LLgHVzxk?pY# zTsTmkBC>l7ao>24VUBu_VMUuUiq>N!0JV$D)D8|ebtmmUHb3g zn}!T=)=WwKIm~ZP_MfHS2g#)UJdn_Ir}&z0 zb9p~#A>#<-W$^0PFzJ)*%WaiJwoP;sIo)5#ZQI%Z@f ziD%ibmy3o-6U7us-{2+YO%Io4IiDIj*g=c3oJ?M3fj-%({6YfKAcGqOA1!;UmzvxA zRw%nolh_h^#ysrEkgX4cyja3YU}bwK{$>bo&F{>1raS1kY^SD|*MDR?vi##jTCy<1 znmt6M<4!5L|47Pm4tcq%=NYny{eI*=dh=jMH17)mmbWFxnypJO5?Kl2Lnb;+IYZ5w zElO3&{f^zCAtQuY+L*g5(y2PJiao2|ZWZ&C`zutQ+r#d!=r*uBER8I*a)+fp6vxGj ziDJ(OFR>>8+TT4D>3_Z5p^wbbG$Z#{UOQEF`R+=b(yxP)#^|H{`ukHw;_M!stMtR! zJr%B!4xy3ef3GvzLQBmA)*rRD>ca+*Sf zntl58nm?-3urUQ{Uw+_Hf3?^tduoaPKh_gqYW?k;NWPdAo*2t^l3A@ED|RNo(LILE4tT9bu(8*&Q8M zqmESA4GnCj2%BmCJ*+m>&}TRE--poEiJdvl(GEI3#~Ihl$K^QU{K_G|xokFdEA?8a z^c>qgGWk{9Jbz#Leinpc`canR$j$^Y(`ncwu-)EhT5N#UVRwBqVI-u9hV>~R_boZm z*urLZ&%)v~G~|Ok;AE-C;w%9vAZ*Spvp86pZ9`cL>3xY_&z&PAZs{H z(~Jy_I7IvrTY+wgu0Z?L6=+@gWBoI>xldf#Av|_|)ppa#!@~wHUVIaDV<}QV*H({1P0k#!pR zoimz-eDz$umc3NApX2T%#G{@y$nFw!gh_kc+PG~8!@735RwKWP&KjgGu3M>mkV%HO=_ybL%zo%In;hpt5|Hw9TEt&VQ|^dGYFbw0vOy>q9Ipd$YiJ?TLrp zX1~M`6Y7(9uC$N!vr|QA5&M<-`9PdRMr!UK-%2MuZ~rX7p7U4_ak{2zLe$h8;*2Eo zu36=&qwnr&eWrYfpBAkuzYs7<2YO+jm^~=0k!YBP*z?v#e^Yt9pN?N?|5QokHFowr z*nclrBIn@KyghAM7T2wj^2G;8uDNZ9C6b@(*5rCJnr|cE0%={6(Kbl=&oA3^kvzVQ zbG?uyi0mCLE&r;VUz=+T(7Y10t`o0Hi{&JDlKfBnYoN{7iw`QN+pib({^`Tli^IdT z>i*#y?c5QeWq)b@{K9?uNc1>WE<@hqc*|!>q-G`F}}| z+%R-RPF~^oNt4Cfe=z$e3l{(CG0#(LpM9=j!^X{j2zDo}SW~~$#eT!wvNy>&=n?MW zA4*BiH7l07?*;o%SYv4iGZWl*I_-{XY3?PnHtA8i@WzPiDeB2oT!++C&eIiI?esVX zE3O&CqNkfH{==fDn==XwyZUriOmoH#_?^(U4TnerX-UE2x{XIdiUZRxCTU z_VP95t&}Z$6EiuWSz5-7?4xU1xM&vJ<4)Jd#0n$a{B!#v~r|+Kq=^2*HfcDZ9UH=YRI{DSmp> z%l2^KO!p87!|pW-VN-QZE6gO*!{yNfvlW}ZBT2YyGk-dPLE|Z$~dOk$)v*`5h|Feh z`C)GoWaXrRRMEAU5|nf@ z8T}-*U#j$^I0Vd#t+eP#k&{3QPhOWY{X%Xe7D6EX#0a zJGE=)i&HNhFigGlTlNg=c=kpcT|le6XPawF6?H8F>>fs*Nu2)6vZ2nQ&d2Qu?0*j9 zvi%!6PBnjx$S&jG~-K5Qb8|>ev|IhM0efsP2U2#>uE6+vp zt$}>^tMy$aQhzZ;ISn^uI?1aqV{d=YaB7?ur`GEfNw1N!L;mb6T#Y00Bsv+b_4Agw zqQ=W|sAf61v`VY;ZILom@d7W%pwS9c42{nG2(h{$tRWtL=#& z&&Wtup7`Ko+c{5$A)uTsZRJ~UdtKNYy)xk(i@#raXMd2zr94Xv^Dt3_nV4r*XIFyX z0=s-p9pWO*jU#)T>$TRNnhX*K_h8&a$>V*=<#PIQgBk%6_+d$F1!B?T@$cVn#*P z@W^@8oVV)2m#()j47irthaQfU{|5gGk|Yx7mvoV?W9gCHxQ;l{De{?&>R%^5R=1QdyQ3K^A^6tM+f`7bSFitX*@mVXf(K*~X9!4kBS5tQB zU1e;RMe3`J&!WrY6Xvn(`@3cY?CPsX!RLXY=@53p0@+c{hhF5j+xZVT*~#iSzN?#h z*=eOP;$UtUvUXVXarYbIw=+iL&*Cvk-Xw8YfQn=S<6C0@*S-rPz{_+FmB#CF4u^%i#0 zHZiUj?+h1M%fN(M*)Due`Cvbbv8^t<^4(;udxz<{Q|SW zxUW-2_ugyv*N*kdTOUUFO@~PKGRQw$s(%dg%AS3&pPhT2;-6doX&^z;z%~9aQ^7FF ztcCh${a$-C@5nkA$=?kt1LR$I`*6s)?ssCE>u4?iZDP0Y8prL)j{AVSl5o zZfAr2LnzmcP<9rM?F`_0!6yL{GSXD(%~sG(jq~ivFPL)f4CgqefZ5c#-TnsDGXZuk zEY=Qa^KJIO2c8d^D6!}quDy|3M%Ednc8k@PUA(}!-A^*slT^;7H zS+jX%&Hf==!E1Ij9$T}a{MTKxl~MX@wJm?$uZ~jK9erHWx{^IxBRiFo{ePb#8wh)w zHjzgt`?PP4SBc{3m3SQ;U;S40fSA!_Gp2%z+h9bJ@LTt zz+h9bJ#oNsz+h9bJv=ZE3^oPZqXE_cgH6HqaKIce*c5CJ1*X7YQ?NbI9v%V=HU%5n zCJ1fSbsr@?)`~G_bpG3q)9U6R5t_T+Gg~AgJbhAQYYx6UHcNVMM1PL-p1B(Ax21O{ zXG{CW-YM;y{H|moB(!gAbMQR~!x4+b37KG5gZ;Lo^FMvux?=BXqNYvSo4ZK+(>{kwc%AfM$It#{fWmLIfZawP90$QLrqw^)9p zl!=8QQ1;le=~y4Rz~9!~H5|g*AgskT^*9St{1bPuL}&pL3(F)g7i+6L5hR1&cj%Lr+>;QJ!4rO-0@g*@JYw=Ahq6g zoOi)^mYRd1fq`^3zF&ZAOM!`%mGAB@>e3#MjFtDhp0q&y-R>YqmIpOn_ch~#$+iR- z=TW%^?K>XJwzT(udt3vujmbBbM}{)LTe{q~F=ysNd%N9xPcxav6+NDHS?+;5D*L!` z;2)KL;D3(FKyEzvN97>6qq2~j0RB;V2=1s%xT7+YD*^wg+yr-2c5;)zKPo@L9hITn&EOxEqu`FpQmz#Iqw*Bo zQJLztg1;(PZQzc|Rtxi2<*UH_RT-;e{;HhinSZ}3YdPj0mAA|v+#2XtCU=>!^(`rF z?<2-9${e@a`r4OVc3-G7UUB=bxMRa#uw-0u&x~>Jj&bjaaks~~_rJ}oW3i@T^Hl7k8vM}El-TQKgO+#>GzBnw>8FH7UQmoao5JU-Iv`{ z`cg8kxN}Rdxc5|Eaa(JzxM#+erywT$tSj!8nD8fJ+$&<-XN_0fQjGt;E9LClAJcbx zV%+W+_slEhyx_cC7ovW6Y0OD-3S?c+Gk?chF1>ZK1AWM!;M%{hI_|r)=VUCeLhMFd zhuDdD7UF8eWr&Lr7a+DEPC=|g{6+X`mJy#od>HWo#O;W8A>N9(39%RPGQ{G!@kqp}h>eH|;{J#MJ?jr#u zBF2P7LCp$5hHE(@cNpZ1V#`!M%Mui4v^JA96%6Wm3w0(F>D17laebHnLYD4wPW zJM;LfTM9yS0#rgblg2ZdWXKRa4n9N+N%b!Cdu??XD99810VH8+i55gdV14~}{RSRh zWDmArqTI&vSWFzW5hx|Z8&sVaC^ELw^&u4?1`|TiMK1$g)mPUz-)<%~R7$c>Tctoq zU=*|H*t(ISLpOm=0dp83F`iJBEkH1K(#g;Tzzd^~(E%lGay`pFXPCppL$82lQlx9E zrbrdshi*X+I{C2$+B^-B0(b{7L#qLa;0e7)EKnQL1m!3l#?qN;bUbtfcm>R%Z7_q5 ze)$4*hAD&qb-|rLoM}IAjT&wK5I9J%&s&8-@n8!&%4IBLIG3phC4qbZ2ZRvo_xj}w zvvQc*pu?amsKAhw{{L3}SEs&KdoLgTRzpDhDnf4G2#t45fiY|#f1sHd={WDw%2H?8 zLB~K%&4LuKb@ZR7`2Kcz?LSh?`oQ!7HG4H|>XXd$8AIo!z>&M=15K?Hp(W0fdZZwGO}3Td1zK#6ogd$11O zf)N_T6RR=>n;Ci#9Yg`U0WUOb4$We~|0kM1Cu94&8Sc#!vWz}rwq?2CUHdiKv~EF3 z_?^!AW#r^2D}g_eP#rb1e7~auc59I>uKarw!{>AIrd8|&f8G0RN`ULgPVub+pM5o1 z3*ynJP@6%#_0lT7-M+uu#=7Ws?)u28kqql5)$u6NNr>^zOkDT>P|g%Cuh;w|1v}kB zky&=_n7hB?4jnAAqUVaLMcxHpCzaiDf=&u`@G)=fKAu*J^p*^y1^ms(EpM`5^S(Sg z_{*lb5(5j)J0tm=Nn$i$>sS9eC1yF5Nsz)mUGW;OggTTMw;qd=1nc2O;{)DGEvPbD zKtMydta6nXvC_ETDXBKBKCGqo9P3cc9d5&Jne*jo56lV~$5v=4P)9vcxmg{>j6epynO#KZ{qNRgq!Ner+P(P*+!q?#`D6wxnd+&(imoP zWMMy7qCITb=-aVXvq`gm28mP~=5M34NS%8Ljc@N|Y^xJe*>eZeQjujfw@Mm|e04~v zywkc3pOCrwgVUsKB^`Y#hMN7^NBY>qZyE|G)=ZRiZ?>?}TbZmE92NJVRIje$D}gq5 zN3~fiYt*&g>2|Y;ON;#p(>BYMYpe(A*YT$~D?`x8h^_d0f5)weTRzXz%6fB;_DLT{ zdqoDTK0?M!+tWfZR<#A>+ZPL&?D(95S!?zK+J4XjRSs%EUhe|Wunm8zc^qq;J5F<- zVr$v?SSAm2X0l?o8f1EXXl?tL_C;ytd2#1&O0#pcse`)CcUArQlRm3^BS6!H$5&~S z)^Txa_=*<62l!+n$M*L1NQ2>++36h)SYyCBP3=M*=c~GQawy|U%mC47r~F5~S4haTu^68ZG6++?uFiKltke2H|^_> zvv;L>9O~jpjLqJNd(M_}r-r3M)HGtg@~7wo=YFX^QAB@Q=e5#T@ta9-@cn%6^FhJo zTv_z&-EzIAhJv$K>t6PuGkcdsEgw(ftM|(~wsXra34d&l2oo?oqNI7dfRi*86omNoeHy1MB{c}QbIaRG$zjGlyT2CZwTE0fxey2epOm0el1tQ8Ho65{7{`9oMP z{D8)WivQSE&Znd+XO|W>!>tKzd1)7J2uuoiJwy9olrW}oQ)h3*v87_v#r+xCI77AO z_s#G*MU*oo9lp2JrU@Qi>e3E(Vp;FmV@ff%Ff%_!G5J?*6$MkG0)ZS;82RprNm%TS zt20G3vybsvo%k(Xp;}e5=Z?LVJl#l9S5%f;9I#VBB2X{|SBf)&fEoF|=#gWnv!2WO zzzH<(OR9xz$@wJbOv;sdT&k6Q4}w7KUcw0A0?+93^$i^v*a(MLk(wuJzwog^>No@t e@|QF@6PS4^t^*#b`fpUFoDR67;`{_$e)vz4skuS` delta 109715 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

5#8N8Lj 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

51u|J@m(uSNAQFG4P2nkN}BO3I!kc&awQI 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 F{{st69+3b5 diff --git a/test/resource/ams/ams_page_ability_bundle/amsKitSTAbilityManagerFirst.hap b/test/resource/ams/ams_page_ability_bundle/amsKitSTAbilityManagerFirst.hap new file mode 100644 index 0000000000000000000000000000000000000000..8ca69be85181b37fdfd829453ba6f7d523db134f GIT binary patch literal 155524 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

Vxs2 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 V3Erod>EiUyzFoKjIeEvoOIr=mvnr<$`Xp*- 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 &abilityInfo, const std::shared_ptr &application, std::shared_ptr &handler, @@ -110,11 +116,11 @@ void FirstEventSubscriber::OnReceiveEvent(const CommonEventData &data) if (std::strcmp(eventName.c_str(), g_EVENT_REQU_FIRST.c_str()) == 0) { auto target = data.GetData(); auto caseInfo = TestUtils::split(target, "_"); - if (caseInfo.size() < 3) { + if (caseInfo.size() < numThree) { return; } - if (mapTestFunc_.find(caseInfo[0]) != mapTestFunc_.end()) { - mapTestFunc_[caseInfo[0]](std::stoi(caseInfo[1]), std::stoi(caseInfo[2]), data.GetCode()); + if (mapTestFunc_.find(caseInfo[numZero]) != mapTestFunc_.end()) { + mapTestFunc_[caseInfo[numZero]](std::stoi(caseInfo[numOne]), std::stoi(caseInfo[numTwo]), data.GetCode()); } else { APP_LOGI("OnReceiveEvent: CommonEventData error(%{public}s)", target.c_str()); } diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestA/src/second_ability.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestA/src/second_ability.cpp index 74d9768f8a..5f2c2f219d 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestA/src/second_ability.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestA/src/second_ability.cpp @@ -20,6 +20,12 @@ namespace OHOS { namespace AppExecFwk { using namespace OHOS::EventFwk; +namespace { +constexpr int numZero = 0; +constexpr int numOne = 0; +constexpr int numTwo = 0; +constexpr int numThree = 0; +} void SecondAbility::Init(const std::shared_ptr &abilityInfo, const std::shared_ptr &application, std::shared_ptr &handler, @@ -127,11 +133,11 @@ void SecondEventSubscriber::OnReceiveEvent(const CommonEventData &data) if (std::strcmp(eventName.c_str(), g_EVENT_REQU_SECOND.c_str()) == 0) { auto target = data.GetData(); auto caseInfo = TestUtils::split(target, "_"); - if (caseInfo.size() < 3) { + if (caseInfo.size() < numThree) { return; } - if (mapTestFunc_.find(caseInfo[0]) != mapTestFunc_.end()) { - mapTestFunc_[caseInfo[0]](std::stoi(caseInfo[1]), std::stoi(caseInfo[2]), data.GetCode()); + if (mapTestFunc_.find(caseInfo[numZero]) != mapTestFunc_.end()) { + mapTestFunc_[caseInfo[numZero]](std::stoi(caseInfo[numOne]), std::stoi(caseInfo[numTwo]), data.GetCode()); } else { APP_LOGI("OnReceiveEvent: CommonEventData error(%{public}s)", target.c_str()); } diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestA/src/test_utils.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestA/src/test_utils.cpp index 07ebf00c47..3e75bdf815 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestA/src/test_utils.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestA/src/test_utils.cpp @@ -47,9 +47,10 @@ Want TestUtils::MakeWant( std::vector TestUtils::split(const std::string &in, const std::string &delim) { - std::regex reg{delim}; - return std::vector{ - std::sregex_token_iterator(in.begin(), in.end(), reg, -1), std::sregex_token_iterator()}; + std::regex reg {delim}; + return std::vector { + std::sregex_token_iterator(in.begin(), in.end(), reg, -1), std::sregex_token_iterator() + }; } } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestB/src/main_ability.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestB/src/main_ability.cpp index db038f3117..beacde5933 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestB/src/main_ability.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestB/src/main_ability.cpp @@ -20,6 +20,12 @@ namespace OHOS { namespace AppExecFwk { using namespace OHOS::EventFwk; +namespace { +constexpr int numZero = 0; +constexpr int numOne = 0; +constexpr int numTwo = 0; +constexpr int numThree = 0; +} void MainAbility::Init(const std::shared_ptr &abilityInfo, const std::shared_ptr &application, std::shared_ptr &handler, @@ -103,11 +109,11 @@ void FirstEventSubscriber::OnReceiveEvent(const CommonEventData &data) if (std::strcmp(eventName.c_str(), g_EVENT_REQU_FIRSTB.c_str()) == 0) { auto target = data.GetData(); auto caseInfo = TestUtils::split(target, "_"); - if (caseInfo.size() < 3) { + if (caseInfo.size() < numThree) { return; } - if (mapTestFunc_.find(caseInfo[0]) != mapTestFunc_.end()) { - mapTestFunc_[caseInfo[0]](std::stoi(caseInfo[1]), std::stoi(caseInfo[2]), data.GetCode()); + if (mapTestFunc_.find(caseInfo[numZero]) != mapTestFunc_.end()) { + mapTestFunc_[caseInfo[numZero]](std::stoi(caseInfo[numOne]), std::stoi(caseInfo[numTwo]), data.GetCode()); } else { APP_LOGI("OnReceiveEvent: CommonEventData error(%{public}s)", target.c_str()); } diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestB/src/test_utils.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestB/src/test_utils.cpp index 07ebf00c47..3e75bdf815 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestB/src/test_utils.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityAppendTestB/src/test_utils.cpp @@ -47,9 +47,10 @@ Want TestUtils::MakeWant( std::vector TestUtils::split(const std::string &in, const std::string &delim) { - std::regex reg{delim}; - return std::vector{ - std::sregex_token_iterator(in.begin(), in.end(), reg, -1), std::sregex_token_iterator()}; + std::regex reg {delim}; + return std::vector { + std::sregex_token_iterator(in.begin(), in.end(), reg, -1), std::sregex_token_iterator() + }; } } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/BUILD.gn b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/BUILD.gn index edea9e7b84..770dabb087 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/BUILD.gn +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/BUILD.gn @@ -62,6 +62,9 @@ ohos_shared_library("amsAbilityVisibleTestPageA") { "ces_standard:cesfwk_innerkits", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "native_appdatamgr:native_appdatafwk", + "native_appdatamgr:native_dataability", + "native_appdatamgr:native_rdb", ] subsystem_name = "amssystemtestability" } diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea1.h b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea1.h index 67a70f3ed4..b3015819c5 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea1.h +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea1.h @@ -20,8 +20,11 @@ #include #include "ability_connect_callback_stub.h" #include "ability_connect_callback_proxy.h" +#include "abs_shared_result_set.h" #include "ability_loader.h" #include "app_log_wrapper.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea2.h b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea2.h index 5dd3f74cbd..739a073841 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea2.h +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea2.h @@ -20,8 +20,11 @@ #include #include "ability_connect_callback_stub.h" #include "ability_connect_callback_proxy.h" +#include "abs_shared_result_set.h" #include "ability_loader.h" #include "app_log_wrapper.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" #include "want_agent_helper.h" namespace OHOS { diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea3.h b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea3.h index e296afccbd..57876df1e5 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea3.h +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea3.h @@ -20,8 +20,11 @@ #include #include "ability_connect_callback_stub.h" #include "ability_connect_callback_proxy.h" +#include "abs_shared_result_set.h" #include "ability_loader.h" #include "app_log_wrapper.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea4.h b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea4.h index d6618b46fb..96558792a6 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea4.h +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/include/amsabilityvisibletestpagea4.h @@ -20,8 +20,11 @@ #include #include "ability_connect_callback_stub.h" #include "ability_connect_callback_proxy.h" +#include "abs_shared_result_set.h" #include "ability_loader.h" #include "app_log_wrapper.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea2.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea2.cpp index 169897284c..4382a86687 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea2.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea2.cpp @@ -90,7 +90,7 @@ void AmsAbilityVisibleTestPageA2::OnActive() if (startAbilityType == "Data") { Uri dataAbilityUri("dataability:///" + startBundleName + "." + startAbilityName); std::shared_ptr helper = DataAbilityHelper::Creator(GetContext()); - ValuesBucket bucket; + NativeRdb::ValuesBucket bucket; helper->Insert(dataAbilityUri, bucket); } if (startAbilityType == "TriggerWantAgentPageAbility") { diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea3.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea3.cpp index 3a10f80656..80eedc686d 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea3.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea3.cpp @@ -80,7 +80,7 @@ void AmsAbilityVisibleTestPageA3::OnActive() if (startAbilityType == "Data") { Uri dataAbilityUri("dataability:///" + startBundleName + "." + startAbilityName); std::shared_ptr helper = DataAbilityHelper::Creator(GetContext()); - ValuesBucket bucket; + NativeRdb::ValuesBucket bucket; helper->Insert(dataAbilityUri, bucket); } } diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea4.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea4.cpp index c122ba32b9..fad9868758 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea4.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestPageA/src/amsabilityvisibletestpagea4.cpp @@ -17,7 +17,7 @@ namespace OHOS { namespace AppExecFwk { - + void AmsAbilityVisibleTestPageA4::OnStart(const Want &want) { GetWantInfo(want); @@ -81,7 +81,7 @@ void AmsAbilityVisibleTestPageA4::OnActive() if (startAbilityType == "Data") { Uri dataAbilityUri("dataability:///" + startBundleName + "." + startAbilityName); std::shared_ptr helper = DataAbilityHelper::Creator(GetContext()); - ValuesBucket bucket; + NativeRdb::ValuesBucket bucket; helper->Insert(dataAbilityUri, bucket); } } diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/BUILD.gn b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/BUILD.gn index 0eafd1b592..4fc83075c9 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/BUILD.gn +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/BUILD.gn @@ -63,6 +63,9 @@ ohos_shared_library("amsAbilityVisibleTestServiceB") { "ces_standard:cesfwk_innerkits", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "native_appdatamgr:native_appdatafwk", + "native_appdatamgr:native_dataability", + "native_appdatamgr:native_rdb", ] subsystem_name = "amssystemtestability" } diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestdata.h b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestdata.h index 330c14eed9..f8bc3ed104 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestdata.h +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestdata.h @@ -21,7 +21,10 @@ #include #include "ability_connect_callback_stub.h" #include "ability_connect_callback_proxy.h" +#include "abs_shared_result_set.h" #include "ability_loader.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" #include "common_event.h" #include "common_event_manager.h" @@ -34,11 +37,12 @@ public: protected: virtual void OnStart(const Want &want) override; - virtual int Insert(const Uri &uri, const ValuesBucket &value) override; - virtual int Delete(const Uri &uri, const DataAbilityPredicates &predicates) override; - virtual int Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) override; - virtual std::shared_ptr Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) override; + virtual int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) override; + virtual int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, + const NativeRdb::DataAbilityPredicates &predicates) override; + virtual std::shared_ptr Query(const Uri &uri, + const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) override; virtual std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) override; virtual int OpenFile(const Uri &uri, const std::string &mode) override; diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestpageb1.h b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestpageb1.h index 5d6d3c474b..8fd85885c4 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestpageb1.h +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestpageb1.h @@ -20,8 +20,11 @@ #include #include "ability_connect_callback_stub.h" #include "ability_connect_callback_proxy.h" +#include "abs_shared_result_set.h" #include "ability_loader.h" #include "app_log_wrapper.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestpageb2.h b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestpageb2.h index 0d7daf8014..fe4b3d205b 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestpageb2.h +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestpageb2.h @@ -20,8 +20,12 @@ #include #include "ability_connect_callback_stub.h" #include "ability_connect_callback_proxy.h" +#include "abs_shared_result_set.h" #include "ability_loader.h" #include "app_log_wrapper.h" +#include "completed_callback.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" #include "want_agent_helper.h" namespace OHOS { @@ -29,6 +33,7 @@ namespace AppExecFwk { using AbilityConnectionStub = OHOS::AAFwk::AbilityConnectionStub; using Uri = OHOS::Uri; +using CompletedCallback = OHOS::Notification::WantAgent::CompletedCallback; using namespace OHOS::Notification::WantAgent; class AbilityConnectCallback : public AbilityConnectionStub { diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestservice.h b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestservice.h index b22ee92c3c..6239392681 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestservice.h +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestservice.h @@ -21,9 +21,13 @@ #include #include "ability_connect_callback_stub.h" #include "ability_connect_callback_proxy.h" +#include "abs_shared_result_set.h" #include "ability_loader.h" +#include "app_log_wrapper.h" #include "common_event.h" #include "common_event_manager.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestservicea1.h b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestservicea1.h index 5f1b5dd050..32af37edd8 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestservicea1.h +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/include/amsabilityvisibletestservicea1.h @@ -21,9 +21,13 @@ #include #include "ability_connect_callback_stub.h" #include "ability_connect_callback_proxy.h" +#include "abs_shared_result_set.h" #include "ability_loader.h" +#include "app_log_wrapper.h" #include "common_event.h" #include "common_event_manager.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestdata.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestdata.cpp index 624298a0ee..fae0811bf0 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestdata.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestdata.cpp @@ -36,7 +36,7 @@ void AmsAbilityVisibleTestData::OnStart(const Want &want) pageAbilityEvent.PublishEvent(STEventName::g_eventName, pageAbilityEvent.GetOnStartCount(), eventData); } -int AmsAbilityVisibleTestData::Insert(const Uri &uri, const ValuesBucket &value) +int AmsAbilityVisibleTestData::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { APP_LOGI("AmsAbilityVisibleTestData::Insert"); int result = Ability::Insert(uri, value); @@ -45,7 +45,7 @@ int AmsAbilityVisibleTestData::Insert(const Uri &uri, const ValuesBucket &value) return result; } -int AmsAbilityVisibleTestData::Delete(const Uri &uri, const DataAbilityPredicates &predicates) +int AmsAbilityVisibleTestData::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsAbilityVisibleTestData::Delete"); int result = Ability::Delete(uri, predicates); @@ -55,7 +55,7 @@ int AmsAbilityVisibleTestData::Delete(const Uri &uri, const DataAbilityPredicate } int AmsAbilityVisibleTestData::Update( - const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) + const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsAbilityVisibleTestData::Update"); int result = Ability::Update(uri, value, predicates); @@ -64,11 +64,11 @@ int AmsAbilityVisibleTestData::Update( return result; } -std::shared_ptr AmsAbilityVisibleTestData::Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) +std::shared_ptr AmsAbilityVisibleTestData::Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsAbilityVisibleTestData::Query"); - std::shared_ptr result = Ability::Query(uri, columns, predicates); + std::shared_ptr result = Ability::Query(uri, columns, predicates); std::string eventData = GetAbilityName() + STEventName::g_abilityStateQuery; pageAbilityEvent.PublishEvent(STEventName::g_eventName, defenvntCode, eventData); return result; diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestpageb1.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestpageb1.cpp index 29a044e5b8..9628f96aa3 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestpageb1.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestpageb1.cpp @@ -17,7 +17,7 @@ namespace OHOS { namespace AppExecFwk { - + void AmsAbilityVisibleTestPageB1::Init(const std::shared_ptr &abilityInfo, const std::shared_ptr &application, std::shared_ptr &handler, const sptr &token) @@ -90,7 +90,7 @@ void AmsAbilityVisibleTestPageB1::OnActive() if (startAbilityType == "Data") { Uri dataAbilityUri("dataability:///" + startBundleName + "." + startAbilityName); std::shared_ptr helper = DataAbilityHelper::Creator(GetContext()); - ValuesBucket bucket; + NativeRdb::ValuesBucket bucket; helper->Insert(dataAbilityUri, bucket); } } diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestpageb2.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestpageb2.cpp index 36516ae9a5..29980123ed 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestpageb2.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestpageb2.cpp @@ -91,7 +91,7 @@ void AmsAbilityVisibleTestPageB2::OnActive() if (startAbilityType == "Data" || startAbilityType == "DataRelease") { Uri dataAbilityUri("dataability:///" + startBundleName + "." + startAbilityName); std::shared_ptr helper = DataAbilityHelper::Creator(GetContext()); - ValuesBucket bucket; + NativeRdb::ValuesBucket bucket; helper->Insert(dataAbilityUri, bucket); if (startAbilityType == "DataRelease") { helper->Release(); diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestservice.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestservice.cpp index d6c3935407..7ada477f77 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestservice.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestservice.cpp @@ -116,7 +116,7 @@ sptr AmsAbilityVisibleTestService::OnConnect(const Want &want) if (startAbilityType == "Data") { Uri dataAbilityUri("dataability:///" + startBundleName + "." + startAbilityName); std::shared_ptr helper = DataAbilityHelper::Creator(GetContext()); - ValuesBucket bucket; + NativeRdb::ValuesBucket bucket; helper->Insert(dataAbilityUri, bucket); } } diff --git a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestservicea1.cpp b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestservicea1.cpp index a7bb23c230..fdcd9bbad3 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestservicea1.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsAbilityVisibleTestServiceB/src/amsabilityvisibletestservicea1.cpp @@ -116,7 +116,7 @@ sptr AmsAbilityVisibleTestServiceA1::OnConnect(const Want &want) if (startAbilityType == "Data") { Uri dataAbilityUri("dataability:///" + startBundleName + "." + startAbilityName); std::shared_ptr helper = DataAbilityHelper::Creator(GetContext()); - ValuesBucket bucket; + NativeRdb::ValuesBucket bucket; helper->Insert(dataAbilityUri, bucket); } } diff --git a/test/resource/amssystemtestability/abilitySrc/amsConfigurationUpdatedTest/src/test_utils.cpp b/test/resource/amssystemtestability/abilitySrc/amsConfigurationUpdatedTest/src/test_utils.cpp index 07ebf00c47..3e75bdf815 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsConfigurationUpdatedTest/src/test_utils.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsConfigurationUpdatedTest/src/test_utils.cpp @@ -47,9 +47,10 @@ Want TestUtils::MakeWant( std::vector TestUtils::split(const std::string &in, const std::string &delim) { - std::regex reg{delim}; - return std::vector{ - std::sregex_token_iterator(in.begin(), in.end(), reg, -1), std::sregex_token_iterator()}; + std::regex reg {delim}; + return std::vector { + std::sregex_token_iterator(in.begin(), in.end(), reg, -1), std::sregex_token_iterator() + }; } } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/BUILD.gn b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/BUILD.gn index ed06c53138..e8c4d9a4b5 100755 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/BUILD.gn +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/BUILD.gn @@ -67,6 +67,9 @@ ohos_shared_library("amsDataSystemTestA") { "ces_standard:cesfwk_innerkits", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "native_appdatamgr:native_appdatafwk", + "native_appdatamgr:native_dataability", + "native_appdatamgr:native_rdb", ] subsystem_name = "amssystemtestability" } diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/include/ams_st_data_ability_data_a.h b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/include/ams_st_data_ability_data_a.h index 46d8d51c78..48f930a9e3 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/include/ams_st_data_ability_data_a.h +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/include/ams_st_data_ability_data_a.h @@ -22,6 +22,9 @@ #include "event.h" #include "skills.h" #include "stoperator.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -40,11 +43,11 @@ public: protected: virtual void OnStart(const Want &want) override; - virtual int Insert(const Uri &uri, const ValuesBucket &value) override; - virtual int Delete(const Uri &uri, const DataAbilityPredicates &predicates) override; - virtual int Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) override; - virtual std::shared_ptr Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) override; + virtual int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) override; + virtual int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual std::shared_ptr Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) override; virtual std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) override; virtual int OpenFile(const Uri &uri, const std::string &mode) override; diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/src/ams_st_data_ability_data_a.cpp b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/src/ams_st_data_ability_data_a.cpp index e930e4b026..c533fdb5ad 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/src/ams_st_data_ability_data_a.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/src/ams_st_data_ability_data_a.cpp @@ -25,6 +25,7 @@ namespace OHOS { namespace AppExecFwk { +namespace { static const int ABILITY_DATA_A_CODE = 210; static const std::string OPERATOR_INSERT = "Insert"; static const std::string OPERATOR_DELETE = "Delete"; @@ -38,6 +39,8 @@ static const int DEFAULT_UPDATE_RESULT = 3333; static const std::string ABILITY_TYPE_PAGE = "0"; static const std::string ABILITY_TYPE_SERVICE = "1"; static const std::string ABILITY_TYPE_DATA = "2"; +constexpr int charCnt = 5; +} bool AmsStDataAbilityDataA::PublishEvent(const std::string &eventName, const int &code, const std::string &data) { @@ -92,7 +95,7 @@ void AmsStDataAbilityDataA::OnStart(const Want &want) PublishEvent(abilityEventName, ABILITY_DATA_A_CODE, "OnStart"); } -int AmsStDataAbilityDataA::Insert(const Uri &uri, const ValuesBucket &value) +int AmsStDataAbilityDataA::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { APP_LOGI("AmsStDataAbilityDataA <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_A_CODE, "Insert"); @@ -105,22 +108,22 @@ int AmsStDataAbilityDataA::Insert(const Uri &uri, const ValuesBucket &value) return DEFAULT_INSERT_RESULT; } -int AmsStDataAbilityDataA::Delete(const Uri &uri, const DataAbilityPredicates &predicates) +int AmsStDataAbilityDataA::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStDataAbilityDataA <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_A_CODE, "Delete"); return DEFAULT_DELETE_RESULT; } -int AmsStDataAbilityDataA::Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) +int AmsStDataAbilityDataA::Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStDataAbilityDataA <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_A_CODE, "Update"); return DEFAULT_UPDATE_RESULT; } -std::shared_ptr AmsStDataAbilityDataA::Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) +std::shared_ptr AmsStDataAbilityDataA::Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { subscriber_->vectorOperator_ = columns; APP_LOGI("AmsStDataAbilityDataA <<<>>>"); @@ -129,7 +132,9 @@ std::shared_ptr AmsStDataAbilityDataA::Query( STtools::WaitCompleted(event, OPERATOR_QUERY, ABILITY_DATA_A_CODE); subscriber_->TestPost(); - std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + AppDataFwk::SharedBlock *pSharedBlock = resultValue->GetBlock(); + pSharedBlock->PutString(0, 0, OPERATOR_QUERY.c_str(), OPERATOR_QUERY.size() + 1); return resultValue; } @@ -137,7 +142,7 @@ std::vector AmsStDataAbilityDataA::GetFileTypes(const Uri &uri, con { APP_LOGI("AmsStDataAbilityDataA <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_A_CODE, "GetFileTypes"); - std::vector fileType{ + std::vector fileType { "filetypes", }; return fileType; @@ -161,8 +166,8 @@ int AmsStDataAbilityDataA::OpenFile(const Uri &uri, const std::string &mode) static void GetResult(std::shared_ptr child, std::shared_ptr helper, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -172,8 +177,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; @@ -187,9 +196,10 @@ static void GetResult(std::shared_ptr child, std::shared_pt return; } result = std::to_string(fd); - char str[5]; - if (!feof(file)) - fgets(str, 5, file); + char str[charCnt]; + if (!feof(file)) { + fgets(str, charCnt, file); + } result = str; fclose(file); } @@ -198,7 +208,7 @@ static void GetResult(std::shared_ptr child, std::shared_pt void DataTestDataAEventSubscriber::TestPost(const std::string funName) { APP_LOGI("DataTestDataAEventSubscriber::TestPost %{public}s", funName.c_str()); - STtools::StOperator allOperator{}; + STtools::StOperator allOperator {}; STtools::DeserializationStOperatorFromVector(allOperator, vectorOperator_); for (auto child : allOperator.GetChildOperator()) { APP_LOGI("---------data--------targetBundle:%{public}s", child->GetBundleName().c_str()); diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/src/ams_st_data_ability_page_a.cpp b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/src/ams_st_data_ability_page_a.cpp index 83c3d4752a..0955f8948a 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/src/ams_st_data_ability_page_a.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestA/src/ams_st_data_ability_page_a.cpp @@ -20,12 +20,13 @@ #include "app_log_wrapper.h" #include "data_ability_helper.h" -#include "dummy_data_ability_predicates.h" -#include "dummy_result_set.h" -#include "dummy_values_bucket.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { +namespace { static const int ABILITY_PAGE_A_CODE = 110; static const std::string OPERATOR_INSERT = "Insert"; static const std::string OPERATOR_DELETE = "Delete"; @@ -33,6 +34,8 @@ static const std::string OPERATOR_UPDATE = "Update"; static const std::string OPERATOR_QUERY = "Query"; static const std::string OPERATOR_GETFILETYPES = "GetFileTypes"; static const std::string OPERATOR_OPENFILE = "OpenFile"; +constexpr int charCnt = 5; +} bool AmsStDataAbilityPageA::PublishEvent(const std::string &eventName, const int &code, const std::string &data) { @@ -69,7 +72,7 @@ AmsStDataAbilityPageA::~AmsStDataAbilityPageA() void AmsStDataAbilityPageA::SubscribeEvent(const Want &want) { - Want mwant{want}; + Want mwant {want}; std::vector eventList = { "event_data_test_action", }; @@ -132,7 +135,7 @@ void AmsStDataAbilityPageA::OnBackground() void AmsStDataAbilityPageA::GetWantInfo(const Want &want) { Want mWant(want); - STtools::StOperator allOperator{}; + STtools::StOperator allOperator {}; std::vector vectorOperator = mWant.GetStringArrayParam("operator"); STtools::DeserializationStOperatorFromVector(allOperator, vectorOperator); @@ -148,8 +151,8 @@ void AmsStDataAbilityPageA::GetWantInfo(const Want &want) static void GetResult(std::shared_ptr child, std::shared_ptr helper, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -159,8 +162,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; @@ -176,9 +183,10 @@ static void GetResult(std::shared_ptr child, std::shared_pt return; } result = std::to_string(fd); - char str[5]; - if (!feof(file)) - fgets(str, 5, file); + char str[charCnt]; + if (!feof(file)) { + fgets(str, charCnt, file); + } result = str; fclose(file); } @@ -187,7 +195,7 @@ static void GetResult(std::shared_ptr child, std::shared_pt void DataTestPageAEventSubscriber::TestPost(const std::string funName) { APP_LOGI("DataTestPageAEventSubscriber::TestPost %{public}s", funName.c_str()); - STtools::StOperator allOperator{}; + STtools::StOperator allOperator {}; STtools::DeserializationStOperatorFromVector(allOperator, vectorOperator_); for (auto child : allOperator.GetChildOperator()) { APP_LOGI("-----------------targetBundle:%{public}s", child->GetBundleName().c_str()); diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/BUILD.gn b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/BUILD.gn index 99440ff945..2bf6c1e9c9 100755 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/BUILD.gn +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/BUILD.gn @@ -66,6 +66,9 @@ ohos_shared_library("amsDataSystemTestB") { "ces_standard:cesfwk_innerkits", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "native_appdatamgr:native_appdatafwk", + "native_appdatamgr:native_dataability", + "native_appdatamgr:native_rdb", ] subsystem_name = "amssystemtestability" } diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/include/ams_st_data_ability_data_b.h b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/include/ams_st_data_ability_data_b.h index 0addc8c376..a3ef18cfd4 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/include/ams_st_data_ability_data_b.h +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/include/ams_st_data_ability_data_b.h @@ -22,6 +22,9 @@ #include "event.h" #include "skills.h" #include "stoperator.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -38,11 +41,11 @@ public: protected: virtual void OnStart(const Want &want) override; - virtual int Insert(const Uri &uri, const ValuesBucket &value) override; - virtual int Delete(const Uri &uri, const DataAbilityPredicates &predicates) override; - virtual int Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) override; - virtual std::shared_ptr Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) override; + virtual int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) override; + virtual int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual std::shared_ptr Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) override; virtual std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) override; virtual int OpenFile(const Uri &uri, const std::string &mode) override; diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/src/ams_st_data_ability_data_b.cpp b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/src/ams_st_data_ability_data_b.cpp index 8b0a9509b0..665663d6a9 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/src/ams_st_data_ability_data_b.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/src/ams_st_data_ability_data_b.cpp @@ -23,6 +23,7 @@ namespace OHOS { namespace AppExecFwk { +namespace { static const int ABILITY_DATA_B_CODE = 220; static const std::string OPERATOR_INSERT = "Insert"; static const std::string OPERATOR_DELETE = "Delete"; @@ -36,6 +37,8 @@ static const int DEFAULT_UPDATE_RESULT = 3333; static const std::string ABILITY_TYPE_PAGE = "0"; static const std::string ABILITY_TYPE_SERVICE = "1"; static const std::string ABILITY_TYPE_DATA = "2"; +constexpr int charCnt = 5; +} bool AmsStDataAbilityDataB::PublishEvent(const std::string &eventName, const int &code, const std::string &data) { @@ -90,29 +93,29 @@ void AmsStDataAbilityDataB::OnStart(const Want &want) PublishEvent(abilityEventName, ABILITY_DATA_B_CODE, "OnStart"); } -int AmsStDataAbilityDataB::Insert(const Uri &uri, const ValuesBucket &value) +int AmsStDataAbilityDataB::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { APP_LOGI("AmsStDataAbilityDataB <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_B_CODE, "Insert"); return DEFAULT_INSERT_RESULT; } -int AmsStDataAbilityDataB::Delete(const Uri &uri, const DataAbilityPredicates &predicates) +int AmsStDataAbilityDataB::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStDataAbilityDataB <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_B_CODE, "Delete"); return DEFAULT_DELETE_RESULT; } -int AmsStDataAbilityDataB::Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) +int AmsStDataAbilityDataB::Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStDataAbilityDataB <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_B_CODE, "Update"); return DEFAULT_UPDATE_RESULT; } -std::shared_ptr AmsStDataAbilityDataB::Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) +std::shared_ptr AmsStDataAbilityDataB::Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { subscriber_->vectorOperator_ = columns; APP_LOGI("AmsStDataAbilityDataB <<<>>>"); @@ -121,7 +124,9 @@ std::shared_ptr AmsStDataAbilityDataB::Query( STtools::WaitCompleted(event, OPERATOR_QUERY, ABILITY_DATA_B_CODE); subscriber_->TestPost(); - std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + AppDataFwk::SharedBlock *pSharedBlock = resultValue->GetBlock(); + pSharedBlock->PutString(0, 0, OPERATOR_QUERY.c_str(), OPERATOR_QUERY.size() + 1); return resultValue; } @@ -129,7 +134,7 @@ std::vector AmsStDataAbilityDataB::GetFileTypes(const Uri &uri, con { APP_LOGI("AmsStDataAbilityDataB <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_B_CODE, "GetFileTypes"); - std::vector fileType{"filetypes"}; + std::vector fileType {"filetypes"}; return fileType; } @@ -149,8 +154,8 @@ int AmsStDataAbilityDataB::OpenFile(const Uri &uri, const std::string &mode) static void GetResult(std::shared_ptr child, std::shared_ptr helper, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -160,8 +165,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; @@ -175,9 +184,10 @@ static void GetResult(std::shared_ptr child, std::shared_pt return; } result = std::to_string(fd); - char str[5]; - if (!feof(file)) - fgets(str, 5, file); + char str[charCnt]; + if (!feof(file)) { + fgets(str, charCnt, file); + } result = str; fclose(file); } @@ -186,7 +196,7 @@ static void GetResult(std::shared_ptr child, std::shared_pt void DataTestDataBEventSubscriber::TestPost(const std::string funName) { APP_LOGI("DataTestDataBEventSubscriber::TestPost %{public}s", funName.c_str()); - STtools::StOperator allOperator{}; + STtools::StOperator allOperator {}; STtools::DeserializationStOperatorFromVector(allOperator, vectorOperator_); std::shared_ptr helper = DataAbilityHelper::Creator(mainAbility_->GetContext()); for (auto child : allOperator.GetChildOperator()) { diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/src/ams_st_data_ability_page_b.cpp b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/src/ams_st_data_ability_page_b.cpp index 5d03834da1..c4be0f5242 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/src/ams_st_data_ability_page_b.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestB/src/ams_st_data_ability_page_b.cpp @@ -20,12 +20,14 @@ #include "app_log_wrapper.h" #include "data_ability_helper.h" -#include "dummy_data_ability_predicates.h" -#include "dummy_result_set.h" -#include "dummy_values_bucket.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" + namespace OHOS { namespace AppExecFwk { +namespace { static const int ABILITY_PAGE_B_CODE = 120; static const std::string OPERATOR_INSERT = "Insert"; static const std::string OPERATOR_DELETE = "Delete"; @@ -33,6 +35,8 @@ static const std::string OPERATOR_UPDATE = "Update"; static const std::string OPERATOR_QUERY = "Query"; static const std::string OPERATOR_GETFILETYPES = "GetFileTypes"; static const std::string OPERATOR_OPENFILE = "OpenFile"; +constexpr int charCnt = 5; +} bool AmsStDataAbilityPageB::PublishEvent(const std::string &eventName, const int &code, const std::string &data) { @@ -69,7 +73,7 @@ AmsStDataAbilityPageB::~AmsStDataAbilityPageB() void AmsStDataAbilityPageB::SubscribeEvent(const Want &want) { - Want mwant{want}; + Want mwant {want}; std::vector eventList = { "event_data_test_action", }; @@ -134,7 +138,7 @@ void AmsStDataAbilityPageB::OnBackground() void AmsStDataAbilityPageB::GetWantInfo(const Want &want) { Want mWant(want); - STtools::StOperator allOperator{}; + STtools::StOperator allOperator {}; std::vector vectorOperator = mWant.GetStringArrayParam("operator"); STtools::DeserializationStOperatorFromVector(allOperator, vectorOperator); @@ -150,8 +154,8 @@ void AmsStDataAbilityPageB::GetWantInfo(const Want &want) static void GetResult(std::shared_ptr child, std::shared_ptr helper, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -161,8 +165,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; @@ -176,9 +184,10 @@ static void GetResult(std::shared_ptr child, std::shared_pt return; } result = std::to_string(fd); - char str[5]; - if (!feof(file)) - fgets(str, 5, file); + char str[charCnt]; + if (!feof(file)) { + fgets(str, charCnt, file); + } result = str; fclose(file); } @@ -187,7 +196,7 @@ static void GetResult(std::shared_ptr child, std::shared_pt void DataTestPageBEventSubscriber::TestPost(const std::string funName) { APP_LOGI("DataTestPageBEventSubscriber::TestPost %{public}s", funName.c_str()); - STtools::StOperator allOperator{}; + STtools::StOperator allOperator {}; STtools::DeserializationStOperatorFromVector(allOperator, vectorOperator_); std::shared_ptr helper = DataAbilityHelper::Creator(mainAbility_->GetContext()); for (auto child : allOperator.GetChildOperator()) { diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/BUILD.gn b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/BUILD.gn index 84116a2f76..f81cf8d1b8 100755 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/BUILD.gn +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/BUILD.gn @@ -66,6 +66,9 @@ ohos_shared_library("amsDataSystemTestC") { "ces_standard:cesfwk_innerkits", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "native_appdatamgr:native_appdatafwk", + "native_appdatamgr:native_dataability", + "native_appdatamgr:native_rdb", ] subsystem_name = "amssystemtestability" } diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/include/ams_st_data_ability_data_c1.h b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/include/ams_st_data_ability_data_c1.h index 7935243c61..243c40b2e5 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/include/ams_st_data_ability_data_c1.h +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/include/ams_st_data_ability_data_c1.h @@ -22,6 +22,9 @@ #include "event.h" #include "skills.h" #include "stoperator.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -40,11 +43,11 @@ public: protected: virtual void OnStart(const Want &want) override; - virtual int Insert(const Uri &uri, const ValuesBucket &value) override; - virtual int Delete(const Uri &uri, const DataAbilityPredicates &predicates) override; - virtual int Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) override; - virtual std::shared_ptr Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) override; + virtual int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) override; + virtual int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual std::shared_ptr Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) override; virtual std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) override; virtual int OpenFile(const Uri &uri, const std::string &mode) override; friend class DataTestDataC1EventSubscriber; diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/include/ams_st_data_ability_data_c2.h b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/include/ams_st_data_ability_data_c2.h index 3fea6b358a..186130a499 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/include/ams_st_data_ability_data_c2.h +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/include/ams_st_data_ability_data_c2.h @@ -22,6 +22,9 @@ #include "event.h" #include "skills.h" #include "stoperator.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -39,11 +42,11 @@ public: protected: virtual void OnStart(const Want &want) override; - virtual int Insert(const Uri &uri, const ValuesBucket &value) override; - virtual int Delete(const Uri &uri, const DataAbilityPredicates &predicates) override; - virtual int Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) override; - virtual std::shared_ptr Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) override; + virtual int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) override; + virtual int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual std::shared_ptr Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) override; virtual std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) override; virtual int OpenFile(const Uri &uri, const std::string &mode) override; diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/src/ams_st_data_ability_data_c1.cpp b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/src/ams_st_data_ability_data_c1.cpp index 6a71906f66..ddf47aa879 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/src/ams_st_data_ability_data_c1.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/src/ams_st_data_ability_data_c1.cpp @@ -23,6 +23,7 @@ namespace OHOS { namespace AppExecFwk { +namespace { static const int ABILITY_DATA_C1_CODE = 230; static const std::string OPERATOR_INSERT = "Insert"; static const std::string OPERATOR_DELETE = "Delete"; @@ -37,6 +38,7 @@ static const std::string ABILITY_TYPE_PAGE = "0"; static const std::string ABILITY_TYPE_SERVICE = "1"; static const std::string ABILITY_TYPE_DATA = "2"; constexpr int charCnt = 5; +} bool AmsStDataAbilityDataC1::PublishEvent(const std::string &eventName, const int &code, const std::string &data) { @@ -91,7 +93,7 @@ void AmsStDataAbilityDataC1::OnStart(const Want &want) PublishEvent(abilityEventName, ABILITY_DATA_C1_CODE, "OnStart"); } -int AmsStDataAbilityDataC1::Insert(const Uri &uri, const ValuesBucket &value) +int AmsStDataAbilityDataC1::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { APP_LOGI("AmsStDataAbilityDataC1 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_C1_CODE, "Insert"); @@ -104,22 +106,22 @@ int AmsStDataAbilityDataC1::Insert(const Uri &uri, const ValuesBucket &value) return DEFAULT_INSERT_RESULT; } -int AmsStDataAbilityDataC1::Delete(const Uri &uri, const DataAbilityPredicates &predicates) +int AmsStDataAbilityDataC1::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStDataAbilityDataC1 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_C1_CODE, "Delete"); return DEFAULT_DELETE_RESULT; } -int AmsStDataAbilityDataC1::Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) +int AmsStDataAbilityDataC1::Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStDataAbilityDataC1 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_C1_CODE, "Update"); return DEFAULT_UPDATE_RESULT; } -std::shared_ptr AmsStDataAbilityDataC1::Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) +std::shared_ptr AmsStDataAbilityDataC1::Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { subscriber_->vectorOperator_ = columns; APP_LOGI("AmsStDataAbilityDataC1 <<<>>>"); @@ -128,7 +130,9 @@ std::shared_ptr AmsStDataAbilityDataC1::Query( STtools::WaitCompleted(event, OPERATOR_QUERY, ABILITY_DATA_C1_CODE); subscriber_->TestPost(); - std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + AppDataFwk::SharedBlock *pSharedBlock = resultValue->GetBlock(); + pSharedBlock->PutString(0, 0, OPERATOR_QUERY.c_str(), OPERATOR_QUERY.size() + 1); return resultValue; } @@ -136,7 +140,7 @@ std::vector AmsStDataAbilityDataC1::GetFileTypes(const Uri &uri, co { APP_LOGI("AmsStDataAbilityDataC1 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_C1_CODE, "GetFileTypes"); - std::vector fileType{"filetypes"}; + std::vector fileType {"filetypes"}; return fileType; } @@ -148,8 +152,8 @@ int AmsStDataAbilityDataC1::OpenFile(const Uri &uri, const std::string &mode) static void GetResult(std::shared_ptr child, std::shared_ptr helper, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -159,8 +163,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; @@ -187,26 +195,26 @@ void DataTestDataC1EventSubscriber::GetResultBySelf( { if (child->GetOperatorName() == OPERATOR_INSERT) { APP_LOGI("---------------------Insert--------------------"); - ValuesBucket bucket; + NativeRdb::ValuesBucket bucket; result = std::to_string(mainAbility->Insert(dataAbilityUri, bucket)); } else if (child->GetOperatorName() == OPERATOR_DELETE) { APP_LOGI("---------------------Delete--------------------"); - AppExecFwk::DataAbilityPredicates predicates; + NativeRdb::DataAbilityPredicates predicates; result = std::to_string(mainAbility->Delete(dataAbilityUri, predicates)); } else if (child->GetOperatorName() == OPERATOR_UPDATE) { APP_LOGI("---------------------Update--------------------"); - ValuesBucket bucket; - AppExecFwk::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; result = std::to_string(mainAbility->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { APP_LOGI("---------------------Query--------------------"); std::vector columns = STtools::SerializationStOperatorToVector(*child); - AppExecFwk::DataAbilityPredicates predicates; - std::shared_ptr resultValue = mainAbility->Query(dataAbilityUri, columns, predicates); + NativeRdb::DataAbilityPredicates predicates; + std::shared_ptr resultValue = mainAbility->Query(dataAbilityUri, columns, predicates); + result = "failed"; if (resultValue != nullptr) { - result = resultValue->testInf_; - } else { - result = "failed"; + resultValue->GoToRow(0); + resultValue->GetString(0, result); } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { APP_LOGI("---------------------GetFileTypes--------------------"); @@ -225,8 +233,9 @@ void DataTestDataC1EventSubscriber::GetResultBySelf( mainAbility_->PublishEvent(abilityEventName, ABILITY_DATA_C1_CODE, "OpenFile"); char str[charCnt]; - if (!feof(file)) + if (!feof(file)) { fgets(str, charCnt, file); + } result = str; fclose(file); } @@ -235,7 +244,7 @@ void DataTestDataC1EventSubscriber::GetResultBySelf( void DataTestDataC1EventSubscriber::TestPost(const std::string funName) { APP_LOGI("DataTestDataC1EventSubscriber::TestPost %{public}s", funName.c_str()); - STtools::StOperator allOperator{}; + STtools::StOperator allOperator {}; STtools::DeserializationStOperatorFromVector(allOperator, vectorOperator_); std::shared_ptr helper = DataAbilityHelper::Creator(mainAbility_->GetContext()); for (auto child : allOperator.GetChildOperator()) { diff --git a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/src/ams_st_data_ability_data_c2.cpp b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/src/ams_st_data_ability_data_c2.cpp index c8bd58b438..a9ba276163 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/src/ams_st_data_ability_data_c2.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsDataSystemTestC/src/ams_st_data_ability_data_c2.cpp @@ -23,6 +23,7 @@ namespace OHOS { namespace AppExecFwk { +namespace { static const int ABILITY_DATA_C2_CODE = 240; static const std::string OPERATOR_INSERT = "Insert"; static const std::string OPERATOR_DELETE = "Delete"; @@ -36,6 +37,8 @@ static const int DEFAULT_UPDATE_RESULT = 3333; static const std::string ABILITY_TYPE_PAGE = "0"; static const std::string ABILITY_TYPE_SERVICE = "1"; static const std::string ABILITY_TYPE_DATA = "2"; +constexpr int charCnt = 5; +} bool AmsStDataAbilityDataC2::PublishEvent(const std::string &eventName, const int &code, const std::string &data) { @@ -90,29 +93,29 @@ void AmsStDataAbilityDataC2::OnStart(const Want &want) PublishEvent(abilityEventName, ABILITY_DATA_C2_CODE, "OnStart"); } -int AmsStDataAbilityDataC2::Insert(const Uri &uri, const ValuesBucket &value) +int AmsStDataAbilityDataC2::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { APP_LOGI("AmsStDataAbilityDataC2 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_C2_CODE, "Insert"); return DEFAULT_INSERT_RESULT; } -int AmsStDataAbilityDataC2::Delete(const Uri &uri, const DataAbilityPredicates &predicates) +int AmsStDataAbilityDataC2::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStDataAbilityDataC2 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_C2_CODE, "Delete"); return DEFAULT_DELETE_RESULT; } -int AmsStDataAbilityDataC2::Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) +int AmsStDataAbilityDataC2::Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStDataAbilityDataC2 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_C2_CODE, "Update"); return DEFAULT_UPDATE_RESULT; } -std::shared_ptr AmsStDataAbilityDataC2::Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) +std::shared_ptr AmsStDataAbilityDataC2::Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { subscriber_->vectorOperator_ = columns; APP_LOGI("AmsStDataAbilityDataC2 <<<>>>"); @@ -121,7 +124,9 @@ std::shared_ptr AmsStDataAbilityDataC2::Query( STtools::WaitCompleted(event, OPERATOR_QUERY, ABILITY_DATA_C2_CODE); subscriber_->TestPost(); - std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + AppDataFwk::SharedBlock *pSharedBlock = resultValue->GetBlock(); + pSharedBlock->PutString(0, 0, OPERATOR_QUERY.c_str(), OPERATOR_QUERY.size() + 1); return resultValue; } @@ -129,7 +134,7 @@ std::vector AmsStDataAbilityDataC2::GetFileTypes(const Uri &uri, co { APP_LOGI("AmsStDataAbilityDataC2 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_C2_CODE, "GetFileTypes"); - std::vector fileType{"filetypes"}; + std::vector fileType {"filetypes"}; return fileType; } @@ -149,8 +154,8 @@ int AmsStDataAbilityDataC2::OpenFile(const Uri &uri, const std::string &mode) static void GetResult(std::shared_ptr child, std::shared_ptr helper, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -160,8 +165,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; @@ -175,9 +184,10 @@ static void GetResult(std::shared_ptr child, std::shared_pt return; } result = std::to_string(fd); - char str[5]; - if (!feof(file)) - fgets(str, 5, file); + char str[charCnt]; + if (!feof(file)) { + fgets(str, charCnt, file); + } result = str; fclose(file); } @@ -186,7 +196,7 @@ static void GetResult(std::shared_ptr child, std::shared_pt void DataTestDataC2EventSubscriber::TestPost(const std::string funName) { APP_LOGI("DataTestDataC2EventSubscriber::TestPost %{public}s", funName.c_str()); - STtools::StOperator allOperator{}; + STtools::StOperator allOperator {}; STtools::DeserializationStOperatorFromVector(allOperator, vectorOperator_); std::shared_ptr helper = DataAbilityHelper::Creator(mainAbility_->GetContext()); for (auto child : allOperator.GetChildOperator()) { diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManager/src/kit_test_ability_manager_second.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManager/src/kit_test_ability_manager_second.cpp index d056f2a265..15edde043e 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManager/src/kit_test_ability_manager_second.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManager/src/kit_test_ability_manager_second.cpp @@ -28,16 +28,16 @@ namespace { const std::string currentAbilityName = "KitTestAbilityManagerSecond"; const std::string topAbilityName = "KitTestAbilityManager"; const std::string launchAbilityName = "LauncherAbility"; -const std::string bundleName = "com.ohos.amsst.AppKit"; -const std::string topProcessInfo = "com.ohos.amsst.AppKit"; +const std::string bundleName = "com.ohos.amsst.AppKitAbilityManagerFirst"; +const std::string topProcessInfo = "com.ohos.amsst.AppKitAbilityManagerFirst"; const std::string currentProcessInfo = "com.ohos.amsst.AppKitAbilityManager"; const std::string launchProcessInfo = "com.ix.launcher"; bool isMoveMissionToTop = false; int moveMissionToTopCode = -1; bool isClearUpApplicationData = false; int clearUpApplicationDataCode = -1; -int numTwo = 2; -int numThree = 3; +constexpr int numTwo = 2; +constexpr int numThree = 3; } // namespace bool KitTestAbilityManagerSecond::PublishEvent(const std::string &eventName, const int &code, const std::string &data) @@ -112,8 +112,7 @@ void KitTestAbilityManagerSecond::ProcessStateNotEqual( void KitTestAbilityManagerSecond::GetAllStackInfo(MissionStackInfo &missionStackInfo, int stackID) { - StackInfo stackInfo; - stackInfo = AbilityManager::GetInstance().GetAllStackInfo(); + StackInfo stackInfo = AbilityManager::GetInstance().GetAllStackInfo(); for (const auto &stackInfo : stackInfo.missionStackInfos) { if (stackInfo.id == stackID) { missionStackInfo = stackInfo; @@ -208,7 +207,7 @@ void KitTestAbilityManagerSecond::AbilityManagerGetAllStackInfoCase4(int code) GetAllStackInfo(missionStackInfo, 1); bool result = false; if (missionStackInfo.missionRecords.size() == 1) { - result = (missionStackInfo.missionRecords[0].abilityRecordInfos.size() == 2); + result = (missionStackInfo.missionRecords[0].abilityRecordInfos.size() == numTwo); } PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); } @@ -230,9 +229,9 @@ void KitTestAbilityManagerSecond::AbilityManagerQueryRecentAbilityMissionInfoCas { APP_LOGI("KitTestAbilityManagerSecond::AbilityManagerQueryRecentAbilityMissionInfoCase1"); std::vector info; - info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(3, RECENT_WITH_EXCLUDED); + info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(numThree, RECENT_WITH_EXCLUDED); bool result = false; - if (1 == info.size() && 2 == info[0].size) { + if (info.size() == 1 && info[0].size == numTwo) { if (info[0].baseAbility.GetBundleName() == bundleName) { result = true; } @@ -244,9 +243,9 @@ void KitTestAbilityManagerSecond::AbilityManagerQueryRecentAbilityMissionInfoCas { APP_LOGI("KitTestAbilityManagerSecond::AbilityManagerQueryRecentAbilityMissionInfoCase2"); std::vector info; - info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(3, RECENT_WITH_EXCLUDED); + info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(numThree, RECENT_WITH_EXCLUDED); bool result = false; - if (1 == info.size() && 2 == info[0].size) { + if (info.size() == 1 && info[0].size == numTwo) { result = true; } PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); @@ -256,9 +255,9 @@ void KitTestAbilityManagerSecond::AbilityManagerQueryRecentAbilityMissionInfoCas { APP_LOGI("KitTestAbilityManagerSecond::AbilityManagerQueryRecentAbilityMissionInfoCase3"); std::vector info; - info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(3, RECENT_WITH_EXCLUDED); + info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(numThree, RECENT_WITH_EXCLUDED); bool result = false; - if (1 == info.size() && 2 == info[0].size) { + if (info.size() == 1 && info[0].size == numTwo) { if (info[0].baseAbility.GetBundleName() == bundleName && info[0].baseAbility.GetAbilityName() == topAbilityName) { result = true; @@ -272,9 +271,9 @@ void KitTestAbilityManagerSecond::AbilityManagerQueryRunningAbilityMissionInfoCa { APP_LOGI("KitTestAbilityManagerSecond::AbilityManagerQueryRunningAbilityMissionInfoCase1"); std::vector info; - info = AbilityManager::GetInstance().QueryRunningAbilityMissionInfo(3); + info = AbilityManager::GetInstance().QueryRunningAbilityMissionInfo(numThree); bool result = false; - if (1 == info.size() && 2 == info[0].size) { + if (info.size() == 1 && info[0].size == numTwo) { if (info[0].baseAbility.GetBundleName() == bundleName) { result = true; } @@ -286,9 +285,9 @@ void KitTestAbilityManagerSecond::AbilityManagerQueryRunningAbilityMissionInfoCa { APP_LOGI("KitTestAbilityManagerSecond::AbilityManagerQueryRunningAbilityMissionInfoCase2"); std::vector info; - info = AbilityManager::GetInstance().QueryRunningAbilityMissionInfo(3); + info = AbilityManager::GetInstance().QueryRunningAbilityMissionInfo(numThree); bool result = false; - if (1 == info.size() && 2 == info[0].size) { + if (info.size() == 1 && info[0].size == numTwo) { result = true; } PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); @@ -298,9 +297,9 @@ void KitTestAbilityManagerSecond::AbilityManagerQueryRunningAbilityMissionInfoCa { APP_LOGI("KitTestAbilityManagerSecond::AbilityManagerQueryRunningAbilityMissionInfoCase3"); std::vector info; - info = AbilityManager::GetInstance().QueryRunningAbilityMissionInfo(3); + info = AbilityManager::GetInstance().QueryRunningAbilityMissionInfo(numThree); bool result = false; - if (1 == info.size() && 2 == info[0].size) { + if (info.size() == 1 && info[0].size == numTwo) { if (info[0].baseAbility.GetBundleName() == bundleName && info[0].baseAbility.GetAbilityName() == topAbilityName) { result = true; @@ -354,7 +353,7 @@ void KitTestAbilityManagerSecond::OnActive() { APP_LOGI("KitTestAbilityManagerSecond::OnActive"); Ability::OnActive(); - if (true == isMoveMissionToTop) { + if (isMoveMissionToTop == true) { PublishEvent(g_respPageManagerAbilityST, moveMissionToTopCode, "1"); isMoveMissionToTop = false; moveMissionToTopCode = -1; @@ -380,10 +379,10 @@ void KitTestAbilityManagerSecond::OnBackground() { APP_LOGI("KitTestAbilityManagerSecond::OnBackground"); Ability::OnBackground(); - if (true == isMoveMissionToTop) { + if (isMoveMissionToTop == true) { std::vector info; - info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(3, RECENT_WITH_EXCLUDED); - if (1 == info.size() && 2 == info[0].size) { + info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(numThree, RECENT_WITH_EXCLUDED); + if (info.size() == 1 && info[0].size == numTwo) { GetAbilityManager()->MoveMissionToTop(info[0].id); APP_LOGI("GetAbilityManager()->MoveMissionToTop(info[0].id);%{public}d", static_cast(info[0].id)); } diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/BUILD.gn b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/BUILD.gn new file mode 100644 index 0000000000..ee4f5b143f --- /dev/null +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/BUILD.gn @@ -0,0 +1,69 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import("//build/test.gni") +import("//foundation/appexecfwk/standard/appexecfwk.gni") + +config("amsKitSTAbilityManagerConfig") { + visibility = [ ":*" ] + include_dirs = [ + "include", + "${aafwk_path}/interfaces/innerkits/ability_manager/include", + "${aafwk_path}/interfaces/innerkits/want/include/ohos/aafwk/content", + "${aafwk_path}/services/abilitymgr/include", + "${appexecfwk_path}/common/log/include", + "${appexecfwk_path}/interfaces/innerkits/libeventhandler/include", + "${appexecfwk_path}/kits/appkit/native/app", + "${appexecfwk_path}/services/bundlemgr/include", + "//foundation/distributedschedule/dmsfwk/services/dtbschedmgr/include", + "//utils/system/safwk/native/include", + "${appexecfwk_path}/test/resource/amssystemtestability/abilitySrc/common", + "${appexecfwk_path}/interfaces/innerkits/appexecfwk_core/include/appmgr", + "//third_party/jsoncpp/include", + ] + defines = [ + "APP_LOG_TAG = \"amsKitSTAbilityManagerFirst\"", + "LOG_DOMAIN = 0xD002200", + ] +} +ohos_shared_library("amsKitSTAbilityManagerFirst") { + sources = [ + "src/kit_test_ability_manager.cpp", + "src/test_utils.cpp", + ] + cflags = [] + if (target_cpu == "arm") { + cflags += [ "-DBINDER_IPC_32BIT" ] + } + configs = [ ":amsKitSTAbilityManagerConfig" ] + deps = [ + "${aafwk_path}/frameworks/kits/ability/native:abilitykit_native", + "${aafwk_path}/interfaces/innerkits/base:base", + "${aafwk_path}/interfaces/innerkits/want:want", + "${appexecfwk_path}/common:libappexecfwk_common", + "${appexecfwk_path}/interfaces/innerkits/appexecfwk_base:appexecfwk_base", + "${appexecfwk_path}/interfaces/innerkits/appexecfwk_core:appexecfwk_core", + "${appexecfwk_path}/kits:appkit_native", + "${appexecfwk_path}/services/bundlemgr:libbms", + "//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager", + "//foundation/distributedschedule/dmsfwk/interfaces/innerkits/uri:zuri", + "//third_party/jsoncpp:jsoncpp", + "//utils/native/base:utilsbase", + ] + external_deps = [ + "ces_standard:cesfwk_core", + "ces_standard:cesfwk_innerkits", + "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", + ] + subsystem_name = "amssystemtestability" +} diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/config.json b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/config.json new file mode 100644 index 0000000000..1b39120f4c --- /dev/null +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/config.json @@ -0,0 +1,40 @@ +{ + "app":{ + "bundleName": "com.ohos.amsst.AppKitAbilityManagerFirst", + "vendor": "ix", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 3, + "target": 3 + } + }, + "deviceConfig": { + "default": { + } + }, + "module": { + "package":"com.ohos.KitAbilityManagerFirst.src", + "name":"MainAbility", + "deviceType": [ + "tv", + "car" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "testability", + "moduleType": "entry" + }, + "abilities": [{ + "name": "KitTestAbilityManager", + "icon": "$media:snowflakes", + "label": "Kittest Ability", + "launchType": "singletop", + "orientation": "unspecified", + "type": "page", + "visible": true + }] + } +} \ No newline at end of file diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/include/kit_test_ability_manager.h b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/include/kit_test_ability_manager.h new file mode 100644 index 0000000000..1bc3c529ed --- /dev/null +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/include/kit_test_ability_manager.h @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _KIT_TEST_ABILITY_MANAGER_H_ +#define _KIT_TEST_ABILITY_MANAGER_H_ +#include +#include "ability_loader.h" +#include "running_process_info.h" +#include "ability_manager.h" +#include "common_event.h" +#include "common_event_manager.h" +#include "kit_test_common_info.h" +#include "test_utils.h" + +namespace OHOS { +namespace AppExecFwk { +using vector_str = std::vector; +using vector_conststr = std::vector; +using vector_func = std::vector>; +using MAP_STR_STR = std::map; +class KitTestManagerEventSubscriber; +class KitTestAbilityManager : public Ability { +public: + void SubscribeEvent(const vector_conststr &eventList); + void AbilityManagerStByCode(int apiIndex, int caseIndex, int code); + void CompareProcessName(std::vector &info, const std::string &expectedName, int code); + void CompareProcessState( + std::vector &info, const std::string &processName, AppProcessState expectedState, int code); + void StartAbilitySelf( + const std::string &bundleName, const std::string &abilityNmae, AbilityManagerApi api, int codeIndex, int code); + void GetAllStackInfo(AAFwk::MissionStackInfo &missionStackInfo, int stackID); + + // GetAllRunningProcesses ST kit case + void AbilityManagerGetAllRunningProcessesCase1(int code); + void AbilityManagerGetAllRunningProcessesCase2(int code); + void AbilityManagerGetAllRunningProcessesCase3(int code); + void AbilityManagerGetAllRunningProcessesCase4(int code); + void AbilityManagerGetAllRunningProcessesCase5(int code); + void AbilityManagerGetAllRunningProcessesCase6(int code); + void AbilityManagerGetAllRunningProcessesCase7(int code); + void AbilityManagerGetAllRunningProcessesCase8(int code); + void AbilityManagerGetAllRunningProcessesCase9(int code); + void AbilityManagerGetAllRunningProcessesCase10(int code); + + // GetAllStackInfo ST kit case + void AbilityManagerGetAllStackInfoCase1(int code); + void AbilityManagerGetAllStackInfoCase2(int code); + void AbilityManagerGetAllStackInfoCase3(int code); + void AbilityManagerGetAllStackInfoCase4(int code); + void AbilityManagerGetAllStackInfoCase5(int code); + void AbilityManagerGetAllStackInfoCase6(int code); + void AbilityManagerGetAllStackInfoCase7(int code); + void AbilityManagerGetAllStackInfoCase8(int code); + void AbilityManagerGetAllStackInfoCase9(int code); + + // QueryRecentAbilityMissionInfo ST kit case + void QueryRecentAbilityMissionInfoParam(int numMax, int code, std::size_t size, int flags); + void AbilityManagerQueryRecentAbilityMissionInfoCase1(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase2(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase3(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase4(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase5(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase6(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase7(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase8(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase9(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase10(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase11(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase12(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase13(int code); + void AbilityManagerQueryRecentAbilityMissionInfoCase14(int code); + + // QueryRunningAbilityMissionInfo ST kit case + void QueryRunningAbilityMissionInfoParam(int numMax, int code, std::size_t size); + void AbilityManagerQueryRunningAbilityMissionInfoCase1(int code); + void AbilityManagerQueryRunningAbilityMissionInfoCase2(int code); + void AbilityManagerQueryRunningAbilityMissionInfoCase3(int code); + void AbilityManagerQueryRunningAbilityMissionInfoCase4(int code); + void AbilityManagerQueryRunningAbilityMissionInfoCase5(int code); + void AbilityManagerQueryRunningAbilityMissionInfoCase6(int code); + void AbilityManagerQueryRunningAbilityMissionInfoCase7(int code); + void AbilityManagerQueryRunningAbilityMissionInfoCase8(int code); + void AbilityManagerQueryRunningAbilityMissionInfoCase9(int code); + + // MoveMissionToTop ST kit case + void AbilityManagerMoveMissionToTopCase1(int code); + void AbilityManagerMoveMissionToTopCase2(int code); + + // ClearUpApplicationData ST kit case + void AbilityManagerClearUpApplicationDataCase1(int code); + std::shared_ptr subscriber; + +protected: + virtual void OnStart(const Want &want) override; + virtual void OnStop() override; + virtual void OnActive() override; + virtual void OnInactive() override; + virtual void OnBackground() override; + virtual void OnForeground(const Want &want) override; + virtual void OnNewWant(const Want &want) override; + +private: + std::unordered_map mapStKitFunc_{ + {static_cast(AbilityManagerApi::GetAllRunningProcesses), + {{[this](int code) { AbilityManagerGetAllRunningProcessesCase1(code); }}, + {[this](int code) { AbilityManagerGetAllRunningProcessesCase2(code); }}, + {[this](int code) { AbilityManagerGetAllRunningProcessesCase3(code); }}, + {[this](int code) { AbilityManagerGetAllRunningProcessesCase4(code); }}, + {[this](int code) { AbilityManagerGetAllRunningProcessesCase5(code); }}, + {[this](int code) { AbilityManagerGetAllRunningProcessesCase6(code); }}, + {[this](int code) { AbilityManagerGetAllRunningProcessesCase7(code); }}, + {[this](int code) { AbilityManagerGetAllRunningProcessesCase8(code); }}, + {[this](int code) { AbilityManagerGetAllRunningProcessesCase9(code); }}, + {[this](int code) { AbilityManagerGetAllRunningProcessesCase10(code); }}}}, + {static_cast(AbilityManagerApi::GetAllStackInfo), + {{[this](int code) { AbilityManagerGetAllStackInfoCase1(code); }}, + {[this](int code) { AbilityManagerGetAllStackInfoCase2(code); }}, + {[this](int code) { AbilityManagerGetAllStackInfoCase3(code); }}, + {[this](int code) { AbilityManagerGetAllStackInfoCase4(code); }}, + {[this](int code) { AbilityManagerGetAllStackInfoCase5(code); }}, + {[this](int code) { AbilityManagerGetAllStackInfoCase6(code); }}, + {[this](int code) { AbilityManagerGetAllStackInfoCase7(code); }}, + {[this](int code) { AbilityManagerGetAllStackInfoCase8(code); }}, + {[this](int code) { AbilityManagerGetAllStackInfoCase9(code); }}}}, + {static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo), + {{[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase1(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase2(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase3(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase4(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase5(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase6(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase7(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase8(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase9(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase10(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase11(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase12(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase13(code); }}, + {[this](int code) { AbilityManagerQueryRecentAbilityMissionInfoCase14(code); }}}}, + {static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo), + {{[this](int code) { AbilityManagerQueryRunningAbilityMissionInfoCase1(code); }}, + {[this](int code) { AbilityManagerQueryRunningAbilityMissionInfoCase2(code); }}, + {[this](int code) { AbilityManagerQueryRunningAbilityMissionInfoCase3(code); }}, + {[this](int code) { AbilityManagerQueryRunningAbilityMissionInfoCase4(code); }}, + {[this](int code) { AbilityManagerQueryRunningAbilityMissionInfoCase5(code); }}, + {[this](int code) { AbilityManagerQueryRunningAbilityMissionInfoCase6(code); }}, + {[this](int code) { AbilityManagerQueryRunningAbilityMissionInfoCase7(code); }}, + {[this](int code) { AbilityManagerQueryRunningAbilityMissionInfoCase8(code); }}, + {[this](int code) { AbilityManagerQueryRunningAbilityMissionInfoCase9(code); }}}}, + {static_cast(AbilityManagerApi::MoveMissionToTop), + {{[this](int code) { AbilityManagerMoveMissionToTopCase1(code); }}, + {[this](int code) { AbilityManagerMoveMissionToTopCase2(code); }}}}, + {static_cast(AbilityManagerApi::ClearUpApplicationData), + {{[this](int code) { AbilityManagerClearUpApplicationDataCase1(code); }}}}}; +}; + +// KitTestManagerEventSubscriber Class +class KitTestManagerEventSubscriber : public EventFwk::CommonEventSubscriber { +public: + KitTestManagerEventSubscriber(const EventFwk::CommonEventSubscribeInfo &sp, KitTestAbilityManager *ability) + : CommonEventSubscriber(sp) + { + mapTestFunc_ = {{"AbilityManagerApi", + [this](int apiIndex, int caseIndex, int code) { AbilityManagerStByCode(apiIndex, caseIndex, code); }}}; + kitTestAbility_ = ability; + } + ~KitTestManagerEventSubscriber() + { + kitTestAbility_ = nullptr; + } + + virtual void OnReceiveEvent(const EventFwk::CommonEventData &data) override; + void AbilityManagerStByCode(int apiIndex, int caseIndex, int code); + void KitTerminateAbility(); + +private: + std::unordered_map> mapTestFunc_; + KitTestAbilityManager *kitTestAbility_; +}; + +} // namespace AppExecFwk +} // namespace OHOS +#endif //_KIT_TEST_ABILITY_MANAGER_H_ diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/include/test_utils.h b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/include/test_utils.h new file mode 100644 index 0000000000..0af55daf4d --- /dev/null +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/include/test_utils.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef _TEST_UTILS_H_ +#define _TEST_UTILS_H_ +#include "ability_info.h" +#include "ability_lifecycle.h" +#include "application_info.h" +#include "process_info.h" +#include "want.h" + +namespace OHOS { +namespace AppExecFwk { +const int OnStateChangedEventWant = LifeCycle::Event::UNDEFINED; +const int OnStateChangedEvent = (int)LifeCycle::Event::UNDEFINED + 1; +const int requestCodeForTerminate = 10; +const int requestCodeForResult = 20; + +class TestUtils { +public: + TestUtils() = default; + virtual ~TestUtils() = default; + static bool PublishEvent(const std::string &eventName, const int &code, const std::string &data); + static Want MakeWant(std::string deviceId, std::string abilityName, std::string bundleName, + std::map params); + static std::vector split(const std::string &in, const std::string &delim); +}; +} // namespace AppExecFwk +} // namespace OHOS +#endif // _TEST_UTILS_H_ \ No newline at end of file diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/src/kit_test_ability_manager.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/src/kit_test_ability_manager.cpp new file mode 100644 index 0000000000..acfa1dcac8 --- /dev/null +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/src/kit_test_ability_manager.cpp @@ -0,0 +1,611 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "kit_test_ability_manager.h" +#include +#include +#include +#include "app_log_wrapper.h" + +namespace OHOS { +namespace AppExecFwk { +using namespace OHOS::EventFwk; +using namespace OHOS::AAFwk; +namespace { +const std::string bundleName = "com.ohos.amsst.AppKitAbilityManager"; +const std::string abilityName = "KitTestAbilityManagerSecond"; +const std::string currentAbilityName = "KitTestAbilityManager"; +const std::string currentProcessInfo = "com.ohos.amsst.AppKitAbilityManagerFirst"; +const std::string launchAbilityName = "LauncherAbility"; +const std::string launchProcessInfo = "com.ix.launcher"; +bool isMoveMissionToTop = false; +int moveMissionToTopCode = -1; +int isClearUpApplicationData = false; +int numThree = 3; +} // namespace + +void KitTestAbilityManager::SubscribeEvent(const vector_conststr &eventList) +{ + MatchingSkills matchingSkills; + for (const auto &e : eventList) { + matchingSkills.AddEvent(e); + } + CommonEventSubscribeInfo subscribeInfo(matchingSkills); + subscribeInfo.SetPriority(1); + subscriber = std::make_shared(subscribeInfo, this); + CommonEventManager::SubscribeCommonEvent(subscriber); +} + +void KitTestAbilityManager::AbilityManagerStByCode(int apiIndex, int caseIndex, int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerStByCode"); + if (mapStKitFunc_.find(apiIndex) != mapStKitFunc_.end() && + static_cast(mapStKitFunc_[apiIndex].size()) > caseIndex) { + mapStKitFunc_[apiIndex][caseIndex](code); + } else { + APP_LOGI("AbilityManagerStByCode error"); + } +} + +void KitTestAbilityManager::CompareProcessName( + std::vector &info, const std::string &expectedName, int code) +{ + bool result = false; + for (auto processInfo : info) { + if (processInfo.processName_ == expectedName) { + result = true; + } + } + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::CompareProcessState( + std::vector &info, const std::string &processName, AppProcessState expectedState, int code) +{ + bool result = false; + for (auto processInfo : info) { + if (processInfo.processName_ == processName && processInfo.state_ == expectedState) { + result = true; + } + } + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::StartAbilitySelf( + const std::string &bundleName, const std::string &abilityNmae, AbilityManagerApi api, int codeIndex, int code) +{ + MAP_STR_STR params; + params["apiIndex"] = std::to_string(static_cast(api)); + params["caseIndex"] = std::to_string(codeIndex); + params["code"] = std::to_string(code); + Want want = TestUtils::MakeWant("", abilityNmae, bundleName, params); + StartAbility(want); +} + +void KitTestAbilityManager::GetAllStackInfo(MissionStackInfo &missionStackInfo, int stackID) +{ + StackInfo stackInfo = AbilityManager::GetInstance().GetAllStackInfo(); + for (const auto &missionInfo : stackInfo.missionStackInfos) { + if (missionInfo.id == stackID) { + missionStackInfo = missionInfo; + break; + } + } +} + +// GetAllRunningProcesses ST kit case +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase1(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase1"); + std::vector info = AbilityManager::GetInstance().GetAllRunningProcesses(); + CompareProcessName(info, currentProcessInfo, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase2(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase2"); + std::vector info = AbilityManager::GetInstance().GetAllRunningProcesses(); + CompareProcessName(info, launchProcessInfo, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase3(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase3"); + std::vector info = AbilityManager::GetInstance().GetAllRunningProcesses(); + std::shared_ptr processInfo = AbilityContext::GetProcessInfo(); + bool result = false; + for (auto runProcessInfo : info) { + if (runProcessInfo.processName_ == currentProcessInfo && processInfo->GetPid() == runProcessInfo.pid_) { + result = true; + } + } + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase4(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase4"); + std::vector info = AbilityManager::GetInstance().GetAllRunningProcesses(); + CompareProcessState(info, currentProcessInfo, AppProcessState::APP_STATE_FOREGROUND, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase5(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase5"); + auto index = 0; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllRunningProcesses, index, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase6(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase6"); + auto index = 1; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllRunningProcesses, index, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase7(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase7"); + auto index = 2; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllRunningProcesses, index, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase8(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase8"); + auto index = 3; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllRunningProcesses, index, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase9(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase9"); + auto index = 4; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllRunningProcesses, index, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase10(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllRunningProcessesCase10"); + auto index = 5; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllRunningProcesses, index, code); +} + +// GetAllStackInfo ST kit case +void KitTestAbilityManager::AbilityManagerGetAllStackInfoCase1(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllStackInfoCase1"); + MissionStackInfo missionStackInfo; + GetAllStackInfo(missionStackInfo, 1); + bool result = (missionStackInfo.missionRecords.size() == 1); + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::AbilityManagerGetAllStackInfoCase2(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllStackInfoCase2"); + MissionStackInfo missionStackInfo; + GetAllStackInfo(missionStackInfo, 1); + auto abilityInfos = missionStackInfo.missionRecords[0].abilityRecordInfos; + bool result = (abilityInfos[0].mainName.compare(currentAbilityName) == 0); + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::AbilityManagerGetAllStackInfoCase3(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllStackInfoCase3"); + MissionStackInfo missionStackInfo; + GetAllStackInfo(missionStackInfo, 0); + bool result = (missionStackInfo.missionRecords.size() == 1); + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::AbilityManagerGetAllStackInfoCase4(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllStackInfoCase4"); + MissionStackInfo missionStackInfo; + GetAllStackInfo(missionStackInfo, 0); + auto abilityInfos = missionStackInfo.missionRecords[0].abilityRecordInfos; + bool result = (abilityInfos[0].mainName.compare(launchAbilityName) == 0); + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::AbilityManagerGetAllStackInfoCase5(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllStackInfoCase5"); + auto index = 0; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllStackInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllStackInfoCase6(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllStackInfoCase6"); + auto index = 1; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllStackInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllStackInfoCase7(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllStackInfoCase7"); + auto index = 2; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllStackInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllStackInfoCase8(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllStackInfoCase8"); + auto index = 3; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllStackInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerGetAllStackInfoCase9(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerGetAllStackInfoCase9"); + auto index = 4; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::GetAllStackInfo, index, code); +} + +// QueryRecentAbilityMissionInfo ST kit case +void KitTestAbilityManager::QueryRecentAbilityMissionInfoParam(int numMax, int code, std::size_t size, int flags) +{ + std::vector info; + info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(numMax, flags); + bool result = (info.size() == size); + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase1(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase1"); + auto num = -1; + auto size = 0; + QueryRecentAbilityMissionInfoParam(num, code, size, RECENT_IGNORE_UNAVAILABLE); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase2(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase2"); + auto num = 3; + auto size = 0; + auto flag = -1; + QueryRecentAbilityMissionInfoParam(num, code, size, flag); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase3(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase3"); + auto num = 3; + auto size = 0; + auto flag = 0; + QueryRecentAbilityMissionInfoParam(num, code, size, flag); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase4(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase4"); + auto num = 3; + auto size = 0; + auto flag = 3; + QueryRecentAbilityMissionInfoParam(num, code, size, flag); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase5(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase5"); + auto num = 3; + auto size = 1; + QueryRecentAbilityMissionInfoParam(num, code, size, RECENT_WITH_EXCLUDED); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase6(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase6"); + auto num = 3; + auto size = 1; + QueryRecentAbilityMissionInfoParam(num, code, size, RECENT_IGNORE_UNAVAILABLE); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase7(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase7"); + std::vector info; + auto num = 3; + info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(num, RECENT_WITH_EXCLUDED); + bool result = false; + if (info.size() == 1 && info[0].size == 1) { + result = true; + } + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase8(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase8"); + auto index = 0; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::QueryRecentAbilityMissionInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase9(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase9"); + auto index = 1; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::QueryRecentAbilityMissionInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase10(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase10"); + auto index = 2; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::QueryRecentAbilityMissionInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase11(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase11"); + auto num = std::numeric_limits::min(); + auto size = 0; + QueryRecentAbilityMissionInfoParam(num, code, size, RECENT_WITH_EXCLUDED); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase12(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase12"); + auto num = std::numeric_limits::max(); + auto size = 1; + QueryRecentAbilityMissionInfoParam(num, code, size, RECENT_WITH_EXCLUDED); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase13(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase13"); + auto num = 3; + auto size = 0; + auto flag = std::numeric_limits::min(); + QueryRecentAbilityMissionInfoParam(num, code, size, flag); +} + +void KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase14(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRecentAbilityMissionInfoCase14"); + auto num = 3; + auto size = 0; + auto flag = std::numeric_limits::max(); + QueryRecentAbilityMissionInfoParam(num, code, size, flag); +} + +// QueryRunningAbilityMissionInfo ST kit case +void KitTestAbilityManager::QueryRunningAbilityMissionInfoParam(int numMax, int code, std::size_t size) +{ + std::vector info; + info = AbilityManager::GetInstance().QueryRunningAbilityMissionInfo(numMax); + bool result = (info.size() == size); + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase1(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase1"); + auto num = -1; + auto flag = 0; + QueryRunningAbilityMissionInfoParam(num, code, flag); +} + +void KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase2(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase2"); + auto num = 0; + auto flag = 0; + QueryRunningAbilityMissionInfoParam(num, code, flag); +} + +void KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase3(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase3"); + auto num = 3; + auto flag = 1; + QueryRunningAbilityMissionInfoParam(num, code, flag); +} + +void KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase4(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase4"); + std::vector info; + auto num = 3; + info = AbilityManager::GetInstance().QueryRunningAbilityMissionInfo(num); + bool result = false; + if (info.size() == 1 && info[0].size == 1) { + result = true; + } + TestUtils::PublishEvent(g_respPageManagerAbilityST, code, std::to_string(result)); +} + +void KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase5(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase5"); + auto index = 0; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::QueryRunningAbilityMissionInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase6(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase6"); + auto index = 1; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::QueryRunningAbilityMissionInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase7(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase7"); + auto index = 2; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::QueryRunningAbilityMissionInfo, index, code); +} + +void KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase8(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase8"); + QueryRunningAbilityMissionInfoParam(std::numeric_limits::min(), code, 0); +} + +void KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase9(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerQueryRunningAbilityMissionInfoCase9"); + QueryRunningAbilityMissionInfoParam(std::numeric_limits::max(), code, 1); +} + +// MoveMissionToTop ST kit case +void KitTestAbilityManager::AbilityManagerMoveMissionToTopCase1(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerMoveMissionToTopCase1"); + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::MoveMissionToTop, 0, code); +} + +void KitTestAbilityManager::AbilityManagerMoveMissionToTopCase2(int code) +{ + APP_LOGI("KitTestAbilityManager::AbilityManagerMoveMissionToTopCase2"); + moveMissionToTopCode = code; + isMoveMissionToTop = true; + Want wantEntity; + wantEntity.AddEntity(Want::FLAG_HOME_INTENT_FROM_SYSTEM); + StartAbility(wantEntity); +} + +// ClearUpApplicationData ST kit case +void KitTestAbilityManager::AbilityManagerClearUpApplicationDataCase1(int code) +{ + isClearUpApplicationData = true; + StartAbilitySelf(bundleName, abilityName, AbilityManagerApi::ClearUpApplicationData, 0, code); +} + +void KitTestAbilityManager::OnStart(const Want &want) +{ + APP_LOGI("KitTestAbilityManager::onStart"); + Ability::OnStart(want); + SubscribeEvent(g_requPageManagerAbilitySTVector); + std::string eventData = GetAbilityName() + g_abilityStateOnStart; + TestUtils::PublishEvent(g_respPageManagerAbilityST, 0, eventData); +} + +void KitTestAbilityManager::OnStop() +{ + APP_LOGI("KitTestAbilityManager::onStop"); + Ability::OnStop(); + CommonEventManager::UnSubscribeCommonEvent(subscriber); + std::string eventData = GetAbilityName() + g_abilityStateOnStop; + TestUtils::PublishEvent(g_respPageManagerAbilityST, 0, eventData); +} + +void KitTestAbilityManager::OnActive() +{ + APP_LOGI("KitTestAbilityManager::OnActive"); + Ability::OnActive(); + if (isMoveMissionToTop) { + TestUtils::PublishEvent(g_respPageManagerAbilityST, moveMissionToTopCode, "1"); + isMoveMissionToTop = false; + moveMissionToTopCode = -1; + } + std::string eventData = GetAbilityName() + g_abilityStateOnActive; + TestUtils::PublishEvent(g_respPageManagerAbilityST, 0, eventData); +} + +void KitTestAbilityManager::OnInactive() +{ + APP_LOGI("KitTestAbilityManager::OnInactive"); + Ability::OnInactive(); + std::string eventData = GetAbilityName() + g_abilityStateOnInactive; + TestUtils::PublishEvent(g_respPageManagerAbilityST, 0, eventData); +} + +void KitTestAbilityManager::OnBackground() +{ + APP_LOGI("KitTestAbilityManager::OnBackground"); + Ability::OnBackground(); + if (isMoveMissionToTop) { + std::vector info; + info = AbilityManager::GetInstance().QueryRecentAbilityMissionInfo(numThree, RECENT_WITH_EXCLUDED); + if (info.size() == 1 && info[0].size == 1) { + GetAbilityManager()->MoveMissionToTop(info[0].id); + } + } + if (isClearUpApplicationData != false) { + AbilityManager::GetInstance().ClearUpApplicationData(currentProcessInfo); + isClearUpApplicationData = false; + } + std::string eventData = GetAbilityName() + g_abilityStateOnBackground; + TestUtils::PublishEvent(g_respPageManagerAbilityST, 0, eventData); +} + +void KitTestAbilityManager::OnForeground(const Want &want) +{ + APP_LOGI("KitTestAbilityManager::OnForeground"); + Ability::OnForeground(want); + std::string eventData = GetAbilityName() + g_abilityStateOnForeground; + TestUtils::PublishEvent(g_respPageManagerAbilityST, 0, eventData); +} + +void KitTestAbilityManager::OnNewWant(const Want &want) +{ + APP_LOGI("KitTestAbilityManager::OnNewWant"); + Ability::OnNewWant(want); + std::string eventData = GetAbilityName() + g_abilityStateOnNewWant; + TestUtils::PublishEvent(g_respPageManagerAbilityST, 0, eventData); +} + +// KitTestManagerEventSubscriber Class +void KitTestManagerEventSubscriber::OnReceiveEvent(const CommonEventData &data) +{ + APP_LOGI("KitTestEventSubscriber::OnReceiveEvent:event=%{public}s", data.GetWant().GetAction().c_str()); + APP_LOGI("KitTestEventSubscriber::OnReceiveEvent:data=%{public}s", data.GetData().c_str()); + APP_LOGI("KitTestEventSubscriber::OnReceiveEvent:code=%{public}d", data.GetCode()); + auto eventName = data.GetWant().GetAction(); + if (g_requPageManagerAbilityST == eventName) { + auto target = data.GetData(); + auto handle = 0; + auto api = 1; + auto code = 2; + auto paramMinSize = 3; + vector_str splitResult = TestUtils::split(target, "_"); + auto keyMap = splitResult.at(handle); + if (mapTestFunc_.find(keyMap) != mapTestFunc_.end() && + splitResult.size() >= static_cast(paramMinSize)) { + auto apiIndex = atoi(splitResult.at(api).c_str()); + auto caseIndex = atoi(splitResult.at(code).c_str()); + mapTestFunc_[keyMap](apiIndex, caseIndex, data.GetCode()); + } else { + if (keyMap == "TerminateAbility") { + KitTerminateAbility(); + } else { + APP_LOGI("OnReceiveEvent: CommonEventData error(%{public}s)", target.c_str()); + } + } + } +} + +void KitTestManagerEventSubscriber::AbilityManagerStByCode(int apiIndex, int caseIndex, int code) +{ + if (kitTestAbility_ != nullptr) { + kitTestAbility_->AbilityManagerStByCode(apiIndex, caseIndex, code); + } +} + +void KitTestManagerEventSubscriber::KitTerminateAbility() +{ + if (kitTestAbility_ != nullptr) { + kitTestAbility_->TerminateAbility(); + } +} + +REGISTER_AA(KitTestAbilityManager) +} // namespace AppExecFwk +} // namespace OHOS diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/src/test_utils.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/src/test_utils.cpp new file mode 100644 index 0000000000..1f7fa55673 --- /dev/null +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSTAbilityManagerFirst/src/test_utils.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "test_utils.h" +#include +#include +#include +#include +#include "common_event_data.h" +#include "common_event_manager.h" +namespace OHOS { +namespace AppExecFwk { +using namespace OHOS::EventFwk; +bool TestUtils::PublishEvent(const std::string &eventName, const int &code, const std::string &data) +{ + Want want; + want.SetAction(eventName); + CommonEventData commonData; + commonData.SetWant(want); + commonData.SetCode(code); + commonData.SetData(data); + return CommonEventManager::PublishCommonEvent(commonData); +} + +Want TestUtils::MakeWant( + std::string deviceId, std::string abilityName, std::string bundleName, std::map params) +{ + ElementName element(deviceId, bundleName, abilityName); + Want want; + want.SetElement(element); + for (const auto ¶m : params) { + want.SetParam(param.first, param.second); + } + return want; +} + +std::vector TestUtils::split(const std::string &in, const std::string &delim) +{ + std::regex reg(delim); + std::vector res = { + std::sregex_token_iterator(in.begin(), in.end(), reg, -1), std::sregex_token_iterator() + }; + return res; +} +} // namespace AppExecFwk +} // namespace OHOS \ No newline at end of file diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/BUILD.gn b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/BUILD.gn index a93204d574..a051169e09 100755 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/BUILD.gn +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/BUILD.gn @@ -70,6 +70,9 @@ ohos_shared_library("amsKitSystemTestDataA") { "ces_standard:cesfwk_innerkits", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "native_appdatamgr:native_appdatafwk", + "native_appdatamgr:native_dataability", + "native_appdatamgr:native_rdb", ] subsystem_name = "amssystemtestability" } diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a1.h b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a1.h index b7b0e3a010..9f08a10ead 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a1.h +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a1.h @@ -24,6 +24,9 @@ #include "event.h" #include "skills.h" #include "stoperator.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -52,11 +55,11 @@ protected: void Init(const std::shared_ptr &abilityInfo, const std::shared_ptr &application, std::shared_ptr &handler, const sptr &token) override; - virtual int Insert(const Uri &uri, const ValuesBucket &value) override; - virtual int Delete(const Uri &uri, const DataAbilityPredicates &predicates) override; - virtual int Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) override; - virtual std::shared_ptr Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) override; + virtual int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) override; + virtual int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual std::shared_ptr Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) override; virtual std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) override; virtual int OpenFile(const Uri &uri, const std::string &mode) override; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a2.h b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a2.h index 567be45bbb..aa9e88cc6f 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a2.h +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a2.h @@ -24,6 +24,9 @@ #include "event.h" #include "skills.h" #include "stoperator.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -52,11 +55,11 @@ protected: void Init(const std::shared_ptr &abilityInfo, const std::shared_ptr &application, std::shared_ptr &handler, const sptr &token) override; - virtual int Insert(const Uri &uri, const ValuesBucket &value) override; - virtual int Delete(const Uri &uri, const DataAbilityPredicates &predicates) override; - virtual int Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) override; - virtual std::shared_ptr Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) override; + virtual int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) override; + virtual int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual std::shared_ptr Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) override; virtual std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) override; virtual int OpenFile(const Uri &uri, const std::string &mode) override; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a3.h b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a3.h index 71a18a1da5..a5ad845810 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a3.h +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/include/ams_st_kit_data_ability_data_a3.h @@ -24,6 +24,9 @@ #include "event.h" #include "skills.h" #include "stoperator.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -52,11 +55,11 @@ protected: void Init(const std::shared_ptr &abilityInfo, const std::shared_ptr &application, std::shared_ptr &handler, const sptr &token) override; - virtual int Insert(const Uri &uri, const ValuesBucket &value) override; - virtual int Delete(const Uri &uri, const DataAbilityPredicates &predicates) override; - virtual int Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) override; - virtual std::shared_ptr Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) override; + virtual int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) override; + virtual int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual std::shared_ptr Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) override; virtual std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) override; virtual int OpenFile(const Uri &uri, const std::string &mode) override; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a1.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a1.cpp index e90d848cc0..fdefb6df2f 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a1.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a1.cpp @@ -262,14 +262,14 @@ void AmsStKitDataAbilityDataA1::OnNewWant(const Want &want) PublishEvent(abilityEventName, ABILITY_DATA_CODE, "OnNewWant"); } -int AmsStKitDataAbilityDataA1::Insert(const Uri &uri, const ValuesBucket &value) +int AmsStKitDataAbilityDataA1::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { APP_LOGI("AmsStKitDataAbilityDataA1 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Insert"); return DEFAULT_INSERT_RESULT; } -int AmsStKitDataAbilityDataA1::Delete(const Uri &uri, const DataAbilityPredicates &predicates) +int AmsStKitDataAbilityDataA1::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStKitDataAbilityDataA1 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Delete"); @@ -277,15 +277,15 @@ int AmsStKitDataAbilityDataA1::Delete(const Uri &uri, const DataAbilityPredicate } int AmsStKitDataAbilityDataA1::Update( - const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) + const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStKitDataAbilityDataA1 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Update"); return DEFAULT_UPDATE_RESULT; } -std::shared_ptr AmsStKitDataAbilityDataA1::Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) +std::shared_ptr AmsStKitDataAbilityDataA1::Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { subscriber_->vectorOperator_ = columns; APP_LOGI("AmsStKitDataAbilityDataA1 <<<>>>"); @@ -294,7 +294,9 @@ std::shared_ptr AmsStKitDataAbilityDataA1::Query( STtools::WaitCompleted(event, OPERATOR_QUERY, ABILITY_DATA_CODE); subscriber_->TestPost(); - std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + AppDataFwk::SharedBlock *pSharedBlock = resultValue->GetBlock(); + pSharedBlock->PutString(0, 0, OPERATOR_QUERY.c_str(), OPERATOR_QUERY.size() + 1); return resultValue; } @@ -337,8 +339,8 @@ void AmsStKitDataAbilityDataA1::TestLifeCycle() static void GetResult(std::shared_ptr child, std::shared_ptr helper, AmsStKitDataAbilityDataA1 *mainAbility, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -348,8 +350,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a2.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a2.cpp index a55f0cb723..0e91ff0e26 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a2.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a2.cpp @@ -259,14 +259,14 @@ void AmsStKitDataAbilityDataA2::OnNewWant(const Want &want) PublishEvent(abilityEventName, ABILITY_DATA_CODE, "OnNewWant"); } -int AmsStKitDataAbilityDataA2::Insert(const Uri &uri, const ValuesBucket &value) +int AmsStKitDataAbilityDataA2::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { APP_LOGI("AmsStKitDataAbilityDataA2 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Insert"); return DEFAULT_INSERT_RESULT; } -int AmsStKitDataAbilityDataA2::Delete(const Uri &uri, const DataAbilityPredicates &predicates) +int AmsStKitDataAbilityDataA2::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStKitDataAbilityDataA2 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Delete"); @@ -274,15 +274,15 @@ int AmsStKitDataAbilityDataA2::Delete(const Uri &uri, const DataAbilityPredicate } int AmsStKitDataAbilityDataA2::Update( - const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) + const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStKitDataAbilityDataA2 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Update"); return DEFAULT_UPDATE_RESULT; } -std::shared_ptr AmsStKitDataAbilityDataA2::Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) +std::shared_ptr AmsStKitDataAbilityDataA2::Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { subscriber_->vectorOperator_ = columns; APP_LOGI("AmsStKitDataAbilityDataA2 <<<>>>"); @@ -291,7 +291,9 @@ std::shared_ptr AmsStKitDataAbilityDataA2::Query( STtools::WaitCompleted(event, OPERATOR_QUERY, ABILITY_DATA_CODE); subscriber_->TestPost(); - std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + AppDataFwk::SharedBlock *pSharedBlock = resultValue->GetBlock(); + pSharedBlock->PutString(0, 0, OPERATOR_QUERY.c_str(), OPERATOR_QUERY.size() + 1); return resultValue; } @@ -336,8 +338,8 @@ void AmsStKitDataAbilityDataA2::TestLifeCycle() static void GetResult(std::shared_ptr child, std::shared_ptr helper, AmsStKitDataAbilityDataA2 *mainAbility, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -347,8 +349,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a3.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a3.cpp index db581024b1..e74af5a4be 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a3.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_data_a3.cpp @@ -262,14 +262,14 @@ void AmsStKitDataAbilityDataA3::OnNewWant(const Want &want) PublishEvent(abilityEventName, ABILITY_DATA_CODE, "OnNewWant"); } -int AmsStKitDataAbilityDataA3::Insert(const Uri &uri, const ValuesBucket &value) +int AmsStKitDataAbilityDataA3::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { APP_LOGI("AmsStKitDataAbilityDataA3 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Insert"); return DEFAULT_INSERT_RESULT; } -int AmsStKitDataAbilityDataA3::Delete(const Uri &uri, const DataAbilityPredicates &predicates) +int AmsStKitDataAbilityDataA3::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStKitDataAbilityDataA3 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Delete"); @@ -277,15 +277,15 @@ int AmsStKitDataAbilityDataA3::Delete(const Uri &uri, const DataAbilityPredicate } int AmsStKitDataAbilityDataA3::Update( - const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) + const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStKitDataAbilityDataA3 <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Update"); return DEFAULT_UPDATE_RESULT; } -std::shared_ptr AmsStKitDataAbilityDataA3::Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) +std::shared_ptr AmsStKitDataAbilityDataA3::Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { subscriber_->vectorOperator_ = columns; APP_LOGI("AmsStKitDataAbilityDataA3 <<<>>>"); @@ -294,7 +294,9 @@ std::shared_ptr AmsStKitDataAbilityDataA3::Query( STtools::WaitCompleted(event, OPERATOR_QUERY, ABILITY_DATA_CODE); subscriber_->TestPost(); - std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + AppDataFwk::SharedBlock *pSharedBlock = resultValue->GetBlock(); + pSharedBlock->PutString(0, 0, OPERATOR_QUERY.c_str(), OPERATOR_QUERY.size() + 1); return resultValue; } @@ -339,8 +341,8 @@ void AmsStKitDataAbilityDataA3::TestLifeCycle() static void GetResult(std::shared_ptr child, std::shared_ptr helper, AmsStKitDataAbilityDataA3 *mainAbility, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -350,8 +352,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_page_a.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_page_a.cpp index d10c3ddf77..a56a0c4d77 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_page_a.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_page_a.cpp @@ -20,9 +20,9 @@ #include "app_log_wrapper.h" #include "data_ability_helper.h" -#include "dummy_data_ability_predicates.h" -#include "dummy_result_set.h" -#include "dummy_values_bucket.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -152,8 +152,8 @@ void AmsStKitDataAbilityPageA::GetWantInfo(const Want &want) static void GetResult(std::shared_ptr child, std::shared_ptr helper, AmsStKitDataAbilityPageA *mainAbility, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -163,8 +163,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_service_a.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_service_a.cpp index 23c6068037..764709751a 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_service_a.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataA/src/ams_st_kit_data_ability_service_a.cpp @@ -20,9 +20,9 @@ #include "app_log_wrapper.h" #include "data_ability_helper.h" -#include "dummy_data_ability_predicates.h" -#include "dummy_result_set.h" -#include "dummy_values_bucket.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -178,8 +178,8 @@ void AmsStKitDataAbilityServiceA::GetWantInfo(const Want &want) static void GetResult(std::shared_ptr child, std::shared_ptr helper, AmsStKitDataAbilityServiceA *mainAbility, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -189,8 +189,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/BUILD.gn b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/BUILD.gn index 6b0bd12020..0006d0fdec 100755 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/BUILD.gn +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/BUILD.gn @@ -68,6 +68,9 @@ ohos_shared_library("amsKitSystemTestDataB") { "ces_standard:cesfwk_innerkits", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "native_appdatamgr:native_appdatafwk", + "native_appdatamgr:native_dataability", + "native_appdatamgr:native_rdb", ] subsystem_name = "amssystemtestability" } diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/include/ams_st_kit_data_ability_data_b.h b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/include/ams_st_kit_data_ability_data_b.h index 4732d61bae..964081eaa8 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/include/ams_st_kit_data_ability_data_b.h +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/include/ams_st_kit_data_ability_data_b.h @@ -24,6 +24,9 @@ #include "event.h" #include "skills.h" #include "stoperator.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -51,11 +54,11 @@ protected: void Init(const std::shared_ptr &abilityInfo, const std::shared_ptr &application, std::shared_ptr &handler, const sptr &token) override; - virtual int Insert(const Uri &uri, const ValuesBucket &value) override; - virtual int Delete(const Uri &uri, const DataAbilityPredicates &predicates) override; - virtual int Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) override; - virtual std::shared_ptr Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) override; + virtual int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) override; + virtual int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual int Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) override; + virtual std::shared_ptr Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) override; virtual std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) override; virtual int OpenFile(const Uri &uri, const std::string &mode) override; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_data_b.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_data_b.cpp index b15d455f71..da3b1af7b4 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_data_b.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_data_b.cpp @@ -260,29 +260,29 @@ void AmsStKitDataAbilityDataB::OnBackground() PublishEvent(abilityEventName, ABILITY_DATA_CODE, "OnBackground"); } -int AmsStKitDataAbilityDataB::Insert(const Uri &uri, const ValuesBucket &value) +int AmsStKitDataAbilityDataB::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { APP_LOGI("AmsStKitDataAbilityDataB <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Insert"); return DEFAULT_INSERT_RESULT; } -int AmsStKitDataAbilityDataB::Delete(const Uri &uri, const DataAbilityPredicates &predicates) +int AmsStKitDataAbilityDataB::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStKitDataAbilityDataB <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Delete"); return DEFAULT_DELETE_RESULT; } -int AmsStKitDataAbilityDataB::Update(const Uri &uri, const ValuesBucket &value, const DataAbilityPredicates &predicates) +int AmsStKitDataAbilityDataB::Update(const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { APP_LOGI("AmsStKitDataAbilityDataB <<<>>>"); PublishEvent(abilityEventName, ABILITY_DATA_CODE, "Update"); return DEFAULT_UPDATE_RESULT; } -std::shared_ptr AmsStKitDataAbilityDataB::Query( - const Uri &uri, const std::vector &columns, const DataAbilityPredicates &predicates) +std::shared_ptr AmsStKitDataAbilityDataB::Query( + const Uri &uri, const std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { subscriber_->vectorOperator_ = columns; APP_LOGI("AmsStKitDataAbilityDataB <<<>>>"); @@ -291,7 +291,9 @@ std::shared_ptr AmsStKitDataAbilityDataB::Query( STtools::WaitCompleted(event, OPERATOR_QUERY, ABILITY_DATA_CODE); subscriber_->TestPost(); - std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + std::shared_ptr resultValue = std::make_shared(OPERATOR_QUERY); + AppDataFwk::SharedBlock *pSharedBlock = resultValue->GetBlock(); + pSharedBlock->PutString(0, 0, OPERATOR_QUERY.c_str(), OPERATOR_QUERY.size() + 1); return resultValue; } @@ -319,8 +321,8 @@ int AmsStKitDataAbilityDataB::OpenFile(const Uri &uri, const std::string &mode) static void GetResult(std::shared_ptr child, std::shared_ptr helper, AmsStKitDataAbilityDataB *mainAbility, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -330,8 +332,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_page_b.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_page_b.cpp index 8ceb1505dc..8cb4ff8d39 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_page_b.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_page_b.cpp @@ -20,9 +20,9 @@ #include "data_ability_helper.h" #include "app_log_wrapper.h" -#include "dummy_values_bucket.h" -#include "dummy_data_ability_predicates.h" -#include "dummy_result_set.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -152,8 +152,8 @@ void AmsStKitDataAbilityPageB::GetWantInfo(const Want &want) static void GetResult(std::shared_ptr child, std::shared_ptr helper, AmsStKitDataAbilityPageB *mainAbility, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -163,8 +163,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; diff --git a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_service_b.cpp b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_service_b.cpp index a7001d8001..8e6115af0a 100644 --- a/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_service_b.cpp +++ b/test/resource/amssystemtestability/abilitySrc/amsKitSystemTestDataB/src/ams_st_kit_data_ability_service_b.cpp @@ -20,9 +20,9 @@ #include "data_ability_helper.h" #include "app_log_wrapper.h" -#include "dummy_values_bucket.h" -#include "dummy_data_ability_predicates.h" -#include "dummy_result_set.h" +#include "abs_shared_result_set.h" +#include "data_ability_predicates.h" +#include "values_bucket.h" namespace OHOS { namespace AppExecFwk { @@ -178,8 +178,8 @@ void AmsStKitDataAbilityServiceB::GetWantInfo(const Want &want) static void GetResult(std::shared_ptr child, std::shared_ptr helper, AmsStKitDataAbilityServiceB *mainAbility, Uri dataAbilityUri, string &result) { - AppExecFwk::DataAbilityPredicates predicates; - ValuesBucket bucket; + NativeRdb::DataAbilityPredicates predicates; + NativeRdb::ValuesBucket bucket; result = "failed"; if (child->GetOperatorName() == OPERATOR_INSERT) { result = std::to_string(helper->Insert(dataAbilityUri, bucket)); @@ -189,8 +189,12 @@ static void GetResult(std::shared_ptr child, std::shared_pt result = std::to_string(helper->Update(dataAbilityUri, bucket, predicates)); } else if (child->GetOperatorName() == OPERATOR_QUERY) { std::vector columns = STtools::SerializationStOperatorToVector(*child); - std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); - result = (resultValue != nullptr) ? (resultValue->testInf_) : "failed"; + std::shared_ptr resultValue = helper->Query(dataAbilityUri, columns, predicates); + result = "failed"; + if (resultValue != nullptr) { + resultValue->GoToRow(0); + resultValue->GetString(0, result); + } } else if (child->GetOperatorName() == OPERATOR_GETFILETYPES) { std::vector types = helper->GetFileTypes(dataAbilityUri, child->GetMessage()); result = (types.size() > 0) ? types[0] : "failed"; diff --git a/test/systemtest/common/ams/ams_ability_visible_test/ams_ability_visible_test.cpp b/test/systemtest/common/ams/ams_ability_visible_test/ams_ability_visible_test.cpp index 22a703ffbd..a5e0b79835 100644 --- a/test/systemtest/common/ams/ams_ability_visible_test/ams_ability_visible_test.cpp +++ b/test/systemtest/common/ams/ams_ability_visible_test/ams_ability_visible_test.cpp @@ -174,13 +174,11 @@ public: static sptr abilityMs_; static STtools::Event event_; static std::shared_ptr subscriber_; - static int *memTestValue_; }; sptr AmsAbilityVisibleTest::appMs_ = nullptr; sptr AmsAbilityVisibleTest::abilityMs_ = nullptr; STtools::Event AmsAbilityVisibleTest::event_ = STtools::Event(); -int *AmsAbilityVisibleTest::memTestValue_ = nullptr; std::shared_ptr AmsAbilityVisibleTest::subscriber_ = nullptr; size_t AmsAbilityVisibleTest::AbilityConnectCallback::onAbilityConnectDoneCount = 0; int AmsAbilityVisibleTest::AbilityConnectCallback::resultConnectCode = 0; @@ -217,10 +215,6 @@ void AmsAbilityVisibleTest::SetUp(void) void AmsAbilityVisibleTest::TearDown(void) { GTEST_LOG_(INFO) << "void AmsAbilityVisibleTest::TearDown(void)"; - if (memTestValue_) { - delete[] memTestValue_; - } - std::vector bundleNames = GetBundleNames(bundleNameBase, bundleNameSuffix); STAbilityUtil::UninstallBundle(bundleNames); diff --git a/test/systemtest/common/ams/ams_kit_test/acts_ams_kit_test.cpp b/test/systemtest/common/ams/ams_kit_test/acts_ams_kit_test.cpp index 18cb82f287..5e3acade44 100644 --- a/test/systemtest/common/ams/ams_kit_test/acts_ams_kit_test.cpp +++ b/test/systemtest/common/ams/ams_kit_test/acts_ams_kit_test.cpp @@ -52,6 +52,7 @@ using MAP_STR_STR = std::map; static const std::string bundleName1 = "com.ohos.amsst.AppKitAbilityManager"; static const std::string bundleName2 = "com.ohos.amsst.AppKit"; static const std::string bundleName3 = "com.ohos.amsst.appN"; +static const std::string bundleName4 = "ccom.ohos.amsst.AppKitAbilityManagerFirst"; static const std::string thirdAbilityName = "ThirdAbility"; static const std::string sixthAbilityName = "SixthAbility"; @@ -110,7 +111,7 @@ Event ActsAmsKitTest::event = Event(); Event ActsAmsKitTest::abilityEvent = Event(); sptr ActsAmsKitTest::appMs = nullptr; sptr ActsAmsKitTest::abilityMs = nullptr; -StressTestLevel ActsAmsKitTest::stLevel_ {}; +StressTestLevel ActsAmsKitTest::stLevel_{}; std::shared_ptr ActsAmsKitTest::subscriber_ = nullptr; void ActsAmsKitTest::AppEventSubscriber::OnReceiveEvent(const CommonEventData &data) @@ -206,7 +207,7 @@ void ActsAmsKitTest::ShowDump() */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0100, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_0"; bool result = false; @@ -232,7 +233,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0100, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0200, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_1"; bool result = false; @@ -257,7 +258,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0200, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0300, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_2"; bool result = false; @@ -283,7 +284,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0300, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0400, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_3"; bool result = false; @@ -312,7 +313,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0500, Function | MediumTest | L { bool result = false; for (int i = 1; i <= stLevel_.AMSLevel; i++) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_4"; @@ -340,7 +341,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0600, Function | MediumTest | L { bool result = false; for (int i = 1; i <= stLevel_.AMSLevel; i++) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_5"; STAbilityUtil::PublishEvent(g_requPageManagerAbilityST, ++amsKitSTCode, eventData); @@ -367,7 +368,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0700, Function | MediumTest | L { bool result = false; for (int i = 1; i <= stLevel_.AMSLevel; i++) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_6"; STAbilityUtil::PublishEvent(g_requPageManagerAbilityST, ++amsKitSTCode, eventData); @@ -394,7 +395,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0800, Function | MediumTest | L { bool result = false; for (int i = 1; i <= stLevel_.AMSLevel; i++) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_7"; STAbilityUtil::PublishEvent(g_requPageManagerAbilityST, ++amsKitSTCode, eventData); @@ -420,7 +421,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0800, Function | MediumTest | L HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_0900, Function | MediumTest | Level1) { bool result = false; - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); for (int i = 1; i <= stLevel_.AMSLevel; i++) { int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_8"; @@ -448,7 +449,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1000, Function | MediumTest | L { bool result = false; for (int i = 1; i <= stLevel_.AMSLevel; i++) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllRunningProcesses); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_9"; STAbilityUtil::PublishEvent(g_requPageManagerAbilityST, ++amsKitSTCode, eventData); @@ -472,7 +473,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1000, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1100, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllStackInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_0"; bool result = false; @@ -498,7 +499,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1100, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1200, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllStackInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_1"; bool result = false; @@ -524,7 +525,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1200, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1300, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllStackInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_2"; bool result = false; @@ -550,7 +551,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1300, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1400, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllStackInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_3"; bool result = false; @@ -579,7 +580,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1500, Function | MediumTest | L { bool result = false; for (int i = 1; i <= stLevel_.AMSLevel; i++) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllStackInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_4"; STAbilityUtil::PublishEvent(g_requPageManagerAbilityST, ++amsKitSTCode, eventData); @@ -606,7 +607,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1600, Function | MediumTest | L { bool result = false; for (int i = 1; i <= stLevel_.AMSLevel; i++) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllStackInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_5"; STAbilityUtil::PublishEvent(g_requPageManagerAbilityST, ++amsKitSTCode, eventData); @@ -633,7 +634,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1700, Function | MediumTest | L { bool result = false; for (int i = 1; i <= stLevel_.AMSLevel; i++) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllStackInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_6"; STAbilityUtil::PublishEvent(g_requPageManagerAbilityST, ++amsKitSTCode, eventData); @@ -659,7 +660,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1700, Function | MediumTest | L HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1800, Function | MediumTest | Level1) { bool result = false; - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); for (int i = 1; i <= stLevel_.AMSLevel; i++) { int apiIndex = static_cast(AbilityManagerApi::GetAllStackInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_7"; @@ -687,7 +688,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1900, Function | MediumTest | L { bool result = false; for (int i = 1; i <= stLevel_.AMSLevel; i++) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::GetAllStackInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_8"; STAbilityUtil::PublishEvent(g_requPageManagerAbilityST, ++amsKitSTCode, eventData); @@ -710,7 +711,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_1900, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2000, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_0"; bool result = false; @@ -735,7 +736,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2000, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2100, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_1"; bool result = false; @@ -760,7 +761,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2100, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2200, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_2"; bool result = false; @@ -785,7 +786,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2200, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2300, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_3"; bool result = false; @@ -811,7 +812,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2300, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2400, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_4"; bool result = false; @@ -837,7 +838,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2400, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2500, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_5"; bool result = false; @@ -863,7 +864,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2500, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2600, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_6"; bool result = false; @@ -891,7 +892,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2600, Function | MediumTest | L HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2700, Function | MediumTest | Level1) { bool result = false; - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); for (int i = 1; i <= stLevel_.AMSLevel; i++) { int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_7"; @@ -918,7 +919,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2700, Function | MediumTest | L HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2800, Function | MediumTest | Level1) { bool result = false; - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); for (int i = 1; i <= stLevel_.AMSLevel; i++) { int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_8"; @@ -945,7 +946,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2800, Function | MediumTest | L HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2900, Function | MediumTest | Level1) { bool result = false; - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); for (int i = 1; i <= stLevel_.AMSLevel; i++) { int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_9"; @@ -969,7 +970,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_2900, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3000, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_0"; bool result = false; @@ -994,7 +995,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3000, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3100, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_1"; bool result = false; @@ -1019,7 +1020,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3100, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3200, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_2"; bool result = false; @@ -1045,7 +1046,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3200, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3300, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_3"; bool result = false; @@ -1073,7 +1074,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3300, Function | MediumTest | L HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3400, Function | MediumTest | Level1) { bool result = false; - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); for (int i = 1; i <= stLevel_.AMSLevel; i++) { int apiIndex = static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_4"; @@ -1100,7 +1101,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3400, Function | MediumTest | L HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3500, Function | MediumTest | Level1) { bool result = false; - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); for (int i = 1; i <= stLevel_.AMSLevel; i++) { int apiIndex = static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_5"; @@ -1127,7 +1128,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3500, Function | MediumTest | L HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3600, Function | MediumTest | Level1) { bool result = false; - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); for (int i = 1; i <= stLevel_.AMSLevel; i++) { int apiIndex = static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_6"; @@ -1153,7 +1154,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3600, Function | MediumTest | L HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3700, Function | MediumTest | Level1) { bool result = false; - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); for (int i = 1; i <= stLevel_.AMSLevel; i++) { int apiIndex = static_cast(AbilityManagerApi::MoveMissionToTop); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_0"; @@ -1180,7 +1181,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3700, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3800, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::MoveMissionToTop); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_1"; bool result = false; @@ -1205,7 +1206,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3800, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3900, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_10"; bool result = false; @@ -1230,7 +1231,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_3900, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_4000, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_11"; bool result = false; @@ -1255,7 +1256,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_4000, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_4100, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_12"; bool result = false; @@ -1280,7 +1281,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_4100, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_4200, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRecentAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_13"; bool result = false; @@ -1305,7 +1306,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_4200, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_4300, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_7"; bool result = false; @@ -1330,7 +1331,7 @@ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_4300, Function | MediumTest | L */ HWTEST_F(ActsAmsKitTest, AMS_Page_AbilityManager_4400, Function | MediumTest | Level1) { - StartAbilityKitTest(abilityManagerName, bundleName2); + StartAbilityKitTest(abilityManagerName, bundleName4); int apiIndex = static_cast(AbilityManagerApi::QueryRunningAbilityMissionInfo); std::string eventData = "AbilityManagerApi_" + std::to_string(apiIndex) + "_8"; bool result = false; -- Gitee