From ee675e5597c78ffc2a00132de6f53f9b21cfbf52 Mon Sep 17 00:00:00 2001 From: rabbitali Date: Tue, 16 Jul 2024 11:27:07 +0800 Subject: [PATCH] update to v1.4.1-7 --- ...tatus-judgement-and-hotupgrade-logic.patch | 202 +++ 0001-support-kabi-check.patch | 628 ------- 0002-modify-re-of-kernel-filter.patch | 81 - ...-restore-grubby-if-kabi-check-failed.patch | 167 ++ 0003-fix-bug-in-test_hotpatch.py.patch | 27 - ...nreboot-and-improve-log-for-rollback.patch | 152 ++ ...of-mark-invalid-data-and-add-summary.patch | 1594 ----------------- ...633.patch => 0004-fix-cve-2021-33633.patch | 310 +++- 0005-add-specific-error-information.patch | 82 - ...ch => 0005-override-list-file-method.patch | 4 +- 0006-update-register-template-file.patch | 25 + ...return-log-field-of-the-cve-fix-func.patch | 63 - 0007-add-usage-and-repet-config-check.patch | 141 -- ...command-check-config-check-test-case.patch | 324 ---- ...h-situations-where-sched-are-missing.patch | 463 ----- 0010-Soft-links-for-documents.patch | 232 --- ...me-of-pid-at-first-core-and-add-case.patch | 443 ----- 0012-update-doc-link.patch | 24 - ...t-function-redesign-trace-check-proc.patch | 1133 ------------ aops-ceres-v1.3.4.tar.gz | Bin 553862 -> 0 bytes aops-ceres-v1.4.1.tar.gz | Bin 0 -> 569462 bytes aops-ceres.spec | 53 +- 22 files changed, 799 insertions(+), 5349 deletions(-) create mode 100644 0001-improve-status-judgement-and-hotupgrade-logic.patch delete mode 100644 0001-support-kabi-check.patch delete mode 100644 0002-modify-re-of-kernel-filter.patch create mode 100644 0002-support-restore-grubby-if-kabi-check-failed.patch delete mode 100644 0003-fix-bug-in-test_hotpatch.py.patch create mode 100644 0003-remove-installed-rpm-if-unreboot-and-improve-log-for-rollback.patch delete mode 100644 0004-Modify-method-of-mark-invalid-data-and-add-summary.patch rename 0014-fix-cve-2021-33633.patch => 0004-fix-cve-2021-33633.patch (54%) delete mode 100644 0005-add-specific-error-information.patch rename 0015-override-list-file-method.patch => 0005-override-list-file-method.patch (95%) create mode 100644 0006-update-register-template-file.patch delete mode 100644 0006-update-return-log-field-of-the-cve-fix-func.patch delete mode 100644 0007-add-usage-and-repet-config-check.patch delete mode 100644 0008-add-command-check-config-check-test-case.patch delete mode 100644 0009-Dealing-with-situations-where-sched-are-missing.patch delete mode 100644 0010-Soft-links-for-documents.patch delete mode 100644 0011-fix-valid-time-of-pid-at-first-core-and-add-case.patch delete mode 100644 0012-update-doc-link.patch delete mode 100644 0013-restrict-function-redesign-trace-check-proc.patch delete mode 100644 aops-ceres-v1.3.4.tar.gz create mode 100644 aops-ceres-v1.4.1.tar.gz diff --git a/0001-improve-status-judgement-and-hotupgrade-logic.patch b/0001-improve-status-judgement-and-hotupgrade-logic.patch new file mode 100644 index 0000000..a252255 --- /dev/null +++ b/0001-improve-status-judgement-and-hotupgrade-logic.patch @@ -0,0 +1,202 @@ +From 2229dade5b178fa2f6a3b572f110eb4fe6677935 Mon Sep 17 00:00:00 2001 +From: wang-guangge +Date: Mon, 18 Dec 2023 21:59:46 +0800 +Subject: [PATCH] improve task execution status code and hotupgrade logic of + reinstalling active/accept hotpatch + +--- + hotpatch/hotupgrade.py | 69 +++++++++++++++++++++++++++++++----------- + hotpatch/upgrade_en.py | 6 ++-- + 2 files changed, 54 insertions(+), 21 deletions(-) + +diff --git a/hotpatch/hotupgrade.py b/hotpatch/hotupgrade.py +index 5dfee0d..37497cf 100644 +--- a/hotpatch/hotupgrade.py ++++ b/hotpatch/hotupgrade.py +@@ -13,6 +13,7 @@ + from __future__ import print_function + + from time import sleep ++from typing import Tuple + + import dnf.base + import dnf.exceptions +@@ -28,6 +29,8 @@ from .upgrade_en import UpgradeEnhanceCommand + from .version import Versions + + EMPTY_TAG = "-" ++SUCCEED = 0 ++FAIL = 255 + + + @dnf.plugin.register_command +@@ -94,9 +97,14 @@ class HotupgradeCommand(dnf.cli.Command): + logger.info(_('No hot patches marked for install.')) + return + +- applied_old_patches = self._get_applied_old_patch(list(available_hp_dict.values())) +- if applied_old_patches: +- self._remove_hot_patches(applied_old_patches) ++ uneffectived_old_patches, effectived_old_patches = self._get_applied_old_patch(list(available_hp_dict.values())) ++ # remove effectived hp from self.hp_list and available_hp_dict ++ effectived_hp_list = [key for key, value in available_hp_dict.items() if value in effectived_old_patches] ++ self.hp_list = [hp for hp in self.hp_list if hp not in effectived_hp_list] ++ available_hp_dict = {key: value for key, value in available_hp_dict.items() if value not in effectived_hp_list} ++ ++ if uneffectived_old_patches: ++ self._remove_hot_patches(uneffectived_old_patches) + else: + self.syscare.save() + success = self._install_rpm_pkg(list(available_hp_dict.keys())) +@@ -143,14 +151,24 @@ class HotupgradeCommand(dnf.cli.Command): + if str(ts_item.pkg) == self.kernel_coldpatch: + self.is_kernel_coldpatch_installed = True + +- self.keep_hp_operation_atomic(is_all_kernel_hp_actived, target_remove_hp) ++ is_task_success = True ++ is_task_success &= self.keep_hp_operation_atomic(is_all_kernel_hp_actived, target_remove_hp) + + if self.is_need_accept_kernel_hp and acceptable_hp: ++ is_accept_success = True + logger.info(_('No available kernel cold patch for takeover, gonna accept available kernel hot patch.')) + for hp in acceptable_hp: +- self._accept_kernel_hp(hp) ++ pkg_info = self._parse_hp_name(hp) ++ if pkg_info['target_name'] != "kernel": ++ continue ++ is_accept_success &= False if self._accept_hp(hp) != SUCCEED else True ++ # if need accept operation but failed, it indicates hotupgrade task failed ++ is_task_success &= is_accept_success ++ ++ if not is_task_success: ++ exit(1) + +- def keep_hp_operation_atomic(self, is_all_kernel_hp_actived, target_remove_hp): ++ def keep_hp_operation_atomic(self, is_all_kernel_hp_actived, target_remove_hp) -> bool: + """ + Keep hotpatch related operation atomic. Once one kernel hotpatch is not successfully activated or + kabi check fails, uninstall the kernel coldpatch. And unsuccessfully activated hotpatch package +@@ -159,9 +177,13 @@ class HotupgradeCommand(dnf.cli.Command): + Args: + is_all_kernel_hp_actived(bool): are all kernel related hotpatches activated + target_remove_hp(list): target remove hotpatch list ++ ++ Returns: ++ bool: if hotupgrade task success + """ + upgrade_en = UpgradeEnhanceCommand(self.cli) + ++ is_task_success = True + if self.is_kernel_coldpatch_installed: + if not is_all_kernel_hp_actived: + logger.info(_('Gonna remove %s due to some kernel hotpatch activation failed.'), self.kernel_coldpatch) +@@ -177,8 +199,12 @@ class HotupgradeCommand(dnf.cli.Command): + + if target_remove_hp: + logger.info(_('Gonna remove unsuccessfully activated hotpatch rpm.')) ++ # when processing remove operation, do not achieve the expected result of activating hotpatch rpm, ++ # it indicates that the hotupgrade task failed ++ is_task_success &= False + for hotpatch in target_remove_hp: + upgrade_en.remove_rpm(hotpatch) ++ return is_task_success + + def _apply_hp(self, hp_full_name): + pkg_info = self._parse_hp_name(hp_full_name) +@@ -264,7 +290,7 @@ class HotupgradeCommand(dnf.cli.Command): + return hp_map + + @staticmethod +- def _get_applied_old_patch(available_hp_list: list) -> list: ++ def _get_applied_old_patch(available_hp_list: list) -> Tuple[list, list]: + """ + get targets' applied accumulative hot patches. + User can install and apply multiple sgl (single) hot patches because the rpm name is different, +@@ -273,9 +299,11 @@ class HotupgradeCommand(dnf.cli.Command): + available_hp_list: e.g. ['redis-1.0-1/ACC-1-1', 'redis-1.0-1/SGL_CVE_2022_1-1-1'] + + Returns: +- list: applied hot patches. e.g. ['redis-1.0-1/ACC-1-1'] ++ Tuple[str, str]: a tuple containing two elements (uneffectived hot patches, effectived hot patches). ++ e.g. (['redis-1.0-1/ACC-1-1'], ['redis-1.0-1/SGL_CVE_2022_3047-1-1']) + """ +- hotpatch_set = set() ++ uneffectived_hotpatch_set = set() ++ effectived_hotpatch_set = set() + hps_info = Syscare.list() + for hp_info in hps_info: + # hp_info[Name] is the middle column of syscare list. format: {target_rpm_name}/{hp_name}/{binary_file} +@@ -297,9 +325,12 @@ class HotupgradeCommand(dnf.cli.Command): + hp_info["Status"], + binary_file, + ) +- if hotpatch not in hotpatch_set: +- hotpatch_set.add(hotpatch) +- return list(hotpatch_set) ++ if hp_info["Status"] in ["ACTIVED", "ACCEPTED"]: ++ effectived_hotpatch_set.add(hotpatch) ++ continue ++ if hotpatch not in uneffectived_hotpatch_set: ++ uneffectived_hotpatch_set.add(hotpatch) ++ return list(uneffectived_hotpatch_set), list(effectived_hotpatch_set) + + def _remove_hot_patches(self, applied_old_patches: list) -> None: + # output = Output(self.base, dnf.conf.Conf()) +@@ -548,19 +579,21 @@ class HotupgradeCommand(dnf.cli.Command): + parsed_nevra = parsed_nevras[0] + return parsed_nevra.name, "%s-%s" % (parsed_nevra.version, parsed_nevra.release) + +- def _accept_kernel_hp(self, hp_full_name: str): ++ def _accept_hp(self, hp_full_name: str) -> int: + """ +- accept kernel hot patch ++ accept hot patch + + Args: + str: hp_full_name: full name of hot patch. e.g. patch-kernel-5.10.0-1-ACC-1-1.x86_64 ++ ++ Returns: ++ int: status + """ + pkg_info = self._parse_hp_name(hp_full_name) +- if pkg_info['target_name'] != "kernel": +- return + hp_subname = self._get_hp_subname_for_syscare(pkg_info) + output, status = self.syscare.accept(hp_subname) + if status: +- logger.info(_('Accept kernel hot patch failed: %s.'), hp_subname) ++ logger.info(_('Accept hot patch failed: %s.'), hp_subname) + else: +- logger.info(_('Accept kernel hot patch succeed: %s.'), hp_subname) ++ logger.info(_('Accept hot patch succeed: %s.'), hp_subname) ++ return status +diff --git a/hotpatch/upgrade_en.py b/hotpatch/upgrade_en.py +index 3053179..94ba4da 100644 +--- a/hotpatch/upgrade_en.py ++++ b/hotpatch/upgrade_en.py +@@ -97,7 +97,10 @@ class UpgradeEnhanceCommand(dnf.cli.Command): + print('Gonna remove %s due to kabi check failed.' % kernel_pkg) + # rebuild rpm database for processing kernel rpm remove operation + self.rebuild_rpm_db() ++ # when processing remove operation, do not achieve the expected result of installing related rpm, ++ # it indicates that the upgrade task failed + self.remove_rpm(kernel_pkg) ++ exit(1) + + def remove_rpm(self, pkg: str): + """ +@@ -113,11 +116,8 @@ class UpgradeEnhanceCommand(dnf.cli.Command): + if return_code != SUCCEED: + print('Remove package failed: %s.' % pkg) + print(output) +- exit(1) + else: + print('Remove package succeed: %s.' % pkg) +- # do not achieve the expected result of installing related rpm +- exit(1) + + def rebuild_rpm_db(self): + """ +-- +2.27.0 + diff --git a/0001-support-kabi-check.patch b/0001-support-kabi-check.patch deleted file mode 100644 index 06a974c..0000000 --- a/0001-support-kabi-check.patch +++ /dev/null @@ -1,628 +0,0 @@ -From 0f0cbce6c93b97e312cafead937b46e6b2ceaf51 Mon Sep 17 00:00:00 2001 -From: wang-guangge -Date: Thu, 9 Nov 2023 10:46:33 +0800 -Subject: [PATCH] support kabi check - ---- - ceres/manages/vulnerability_manage.py | 2 +- - hotpatch/hotupgrade.py | 97 +++++- - hotpatch/updateinfo_parse.py | 3 + - hotpatch/upgrade_en.py | 413 ++++++++++++++++++++++++++ - 4 files changed, 506 insertions(+), 9 deletions(-) - create mode 100644 hotpatch/upgrade_en.py - -diff --git a/ceres/manages/vulnerability_manage.py b/ceres/manages/vulnerability_manage.py -index c41a7fa..bad2dee 100644 ---- a/ceres/manages/vulnerability_manage.py -+++ b/ceres/manages/vulnerability_manage.py -@@ -620,7 +620,7 @@ class VulnerabilityManage: - Tuple[str, str] - a tuple containing two elements (update result, log). - """ -- code, stdout, stderr = execute_shell_command(f"dnf update {rpm_name} -y") -+ code, stdout, stderr = execute_shell_command(f"dnf upgrade-en {rpm_name} -y") - if code != CommandExitCode.SUCCEED: - return TaskExecuteRes.FAIL, stderr - if "Complete" not in stdout: -diff --git a/hotpatch/hotupgrade.py b/hotpatch/hotupgrade.py -index f61e37f..c508e07 100644 ---- a/hotpatch/hotupgrade.py -+++ b/hotpatch/hotupgrade.py -@@ -12,16 +12,14 @@ - # ******************************************************************************/ - from __future__ import print_function - --from time import sleep - import dnf.base - import dnf.exceptions - import hawkey -+from time import sleep - from dnf.cli import commands - from dnf.cli.option_parser import OptionParser -- --# from dnf.cli.output import Output - from dnfpluginscore import _, logger -- -+from .upgrade_en import UpgradeEnhanceCommand - from .hot_updateinfo import HotUpdateinfoCommand - from .updateinfo_parse import HotpatchUpdateInfo - from .syscare import Syscare -@@ -37,6 +35,9 @@ class HotupgradeCommand(dnf.cli.Command): - usage = "" - syscare = Syscare() - hp_list = [] -+ is_need_accept_kernel_hp = False -+ is_kernel_coldpatch_installed = False -+ kernel_coldpatch = '' - - @staticmethod - def set_argparser(parser): -@@ -50,6 +51,13 @@ class HotupgradeCommand(dnf.cli.Command): - parser.add_argument( - "--takeover", default=False, action='store_true', help=_('kernel cold patch takeover operation') - ) -+ parser.add_argument( -+ "-f", -+ dest='force', -+ default=False, -+ action='store_true', -+ help=_('force retain kernel rpm package if kernel kabi check fails'), -+ ) - - def configure(self): - """Verify that conditions are met so that this command can run. -@@ -104,17 +112,72 @@ class HotupgradeCommand(dnf.cli.Command): - - def run_transaction(self) -> None: - """ -- apply hot patches -+ apply hot patches, and process kabi check for kernel package rpm. - Returns: - None - """ - # syscare need a little bit time to process the installed hot patch - sleep(0.5) -+ -+ is_all_kernel_hp_actived = True -+ # hotpatch that fail to be activated will be automatically uninstalled -+ target_remove_hp = [] -+ acceptable_hp = [] - for hp in self.hp_list: -- self._apply_hp(hp) -- if self.opts.takeover and self.is_need_accept_kernel_hp: -+ status = self._apply_hp(hp) -+ if status: -+ target_remove_hp.append(hp) -+ if not hp.startswith('patch-kernel-'): -+ continue -+ if status: -+ is_all_kernel_hp_actived &= False -+ else: -+ is_all_kernel_hp_actived &= True -+ acceptable_hp.append(hp) -+ -+ for ts_item in self.base.transaction: -+ if ts_item.action not in dnf.transaction.FORWARD_ACTIONS: -+ continue -+ if str(ts_item.pkg) == self.kernel_coldpatch: -+ self.is_kernel_coldpatch_installed = True -+ -+ self.keep_hp_operation_atomic(is_all_kernel_hp_actived, target_remove_hp) -+ -+ if self.is_need_accept_kernel_hp and acceptable_hp: -+ logger.info(_('No available kernel cold patch for takeover, gonna accept available kernel hot patch.')) -+ for hp in acceptable_hp: - self._accept_kernel_hp(hp) - -+ def keep_hp_operation_atomic(self, is_all_kernel_hp_actived, target_remove_hp): -+ """ -+ Keep hotpatch related operation atomic. Once one kernel hotpatch is not successfully activated or -+ kabi check fails, uninstall the kernel coldpatch. And unsuccessfully activated hotpatch package -+ will be removed. -+ -+ Args: -+ is_all_kernel_hp_actived(bool): are all kernel related hotpatches activated -+ target_remove_hp(list): target remove hotpatch list -+ """ -+ upgrade_en = UpgradeEnhanceCommand(self.cli) -+ -+ if self.is_kernel_coldpatch_installed: -+ if not is_all_kernel_hp_actived: -+ logger.info(_('Gonna remove %s due to some kernel hotpatch activation failed.'), self.kernel_coldpatch) -+ upgrade_en.remove_rpm(str(self.kernel_coldpatch)) -+ self.is_need_accept_kernel_hp = False -+ # process kabi check -+ elif not upgrade_en.kabi_check(str(self.kernel_coldpatch)) and not self.opts.force: -+ logger.info(_('Gonna remove %s due to Kabi check failed.'), self.kernel_coldpatch) -+ # rebuild rpm database for processing kernel rpm remove operation -+ upgrade_en.rebuild_rpm_db() -+ upgrade_en.remove_rpm(str(self.kernel_coldpatch)) -+ self.is_need_accept_kernel_hp = True -+ -+ if target_remove_hp: -+ logger.info(_('Gonna remove unsuccessfully activated hotpatch rpm.')) -+ for hotpatch in target_remove_hp: -+ upgrade_en.remove_rpm(hotpatch) -+ - def _apply_hp(self, hp_full_name): - pkg_info = self._parse_hp_name(hp_full_name) - hp_subname = self._get_hp_subname_for_syscare(pkg_info) -@@ -123,6 +186,7 @@ class HotupgradeCommand(dnf.cli.Command): - logger.info(_('Apply hot patch failed: %s.'), hp_subname) - else: - logger.info(_('Apply hot patch succeed: %s.'), hp_subname) -+ return status - - @staticmethod - def _get_hp_subname_for_syscare(pkg_info: dict) -> str: -@@ -394,9 +458,11 @@ class HotupgradeCommand(dnf.cli.Command): - """ - process takeover operation. - """ -+ if not self.get_kernel_hp_list(): -+ return - kernel_coldpatch = self.get_target_installed_kernel_coldpatch_of_hotpatch() -- self.is_need_accept_kernel_hp = False - if kernel_coldpatch: -+ self.kernel_coldpatch = kernel_coldpatch - logger.info(_("Gonna takeover kernel cold patch: ['%s']" % kernel_coldpatch)) - success = self._install_rpm_pkg([kernel_coldpatch]) - if success: -@@ -412,6 +478,21 @@ class HotupgradeCommand(dnf.cli.Command): - ) - return - -+ def get_kernel_hp_list(self) -> list: -+ """ -+ Get kernel hp list from self.hp_list. -+ -+ Returns: -+ list: kernel hp list -+ e.g. -+ ['patch-kernel-5.10.0-153.12.0.92.oe2203sp2-ACC-1-1.x86_64'] -+ """ -+ kernel_hp_list = [] -+ for hp in self.hp_list: -+ if hp.startswith('patch-kernel-'): -+ kernel_hp_list.append(hp) -+ return kernel_hp_list -+ - def get_target_installed_kernel_coldpatch_of_hotpatch(self) -> str: - """ - get the highest kernel cold patch of hot patch in "dnf hot-updateinfo list cves", if the corresponding -diff --git a/hotpatch/updateinfo_parse.py b/hotpatch/updateinfo_parse.py -index 4760378..fc39d48 100644 ---- a/hotpatch/updateinfo_parse.py -+++ b/hotpatch/updateinfo_parse.py -@@ -322,6 +322,9 @@ class HotpatchUpdateInfo(object): - cmd = ["uname", "-r"] - kernel_version = '' - kernel_version, return_code = cmd_output(cmd) -+ # 'uname -r' show the kernel version-release.arch of the current system -+ # [root@openEuler hotpatch]# uname -r -+ # 5.10.0-136.12.0.86.oe2203sp1.x86_64 - if return_code != SUCCEED: - return kernel_version - kernel_version = kernel_version.split('\n')[0] -diff --git a/hotpatch/upgrade_en.py b/hotpatch/upgrade_en.py -new file mode 100644 -index 0000000..266bcae ---- /dev/null -+++ b/hotpatch/upgrade_en.py -@@ -0,0 +1,413 @@ -+#!/usr/bin/python3 -+# ****************************************************************************** -+# Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved. -+# licensed under the Mulan PSL v2. -+# You can use this software according to the terms and conditions of the Mulan PSL v2. -+# You may obtain a copy of Mulan PSL v2 at: -+# http://license.coscl.org.cn/MulanPSL2 -+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR -+# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR -+# PURPOSE. -+# See the Mulan PSL v2 for more details. -+# ******************************************************************************/ -+import dnf -+import gzip -+import subprocess -+from dnfpluginscore import _ -+from dnf.cli import commands -+from dnf.cli.commands.upgrade import UpgradeCommand -+from dnf.cli.option_parser import OptionParser -+ -+SUCCEED = 0 -+FAIL = 255 -+ -+ -+def cmd_output(cmd): -+ try: -+ result = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) -+ result.wait() -+ return result.stdout.read().decode('utf-8'), result.returncode -+ except Exception as e: -+ print("error: ", e) -+ return str(e), FAIL -+ -+ -+@dnf.plugin.register_command -+class UpgradeEnhanceCommand(dnf.cli.Command): -+ SYMVERS_FILE = "/boot/symvers-%s.gz" -+ -+ aliases = ['upgrade-en'] -+ summary = _( -+ 'upgrade with KABI(Kernel Application Binary Interface) check. If the loaded kernel modules \ -+ have KABI compatibility with the new version kernel rpm, the kernel modules can be installed \ -+ and used in the new version kernel without recompling.' -+ ) -+ -+ @staticmethod -+ def set_argparser(parser): -+ parser.add_argument( -+ 'packages', -+ nargs='*', -+ help=_('Package to upgrade'), -+ action=OptionParser.ParseSpecGroupFileCallback, -+ metavar=_('PACKAGE'), -+ ) -+ parser.add_argument( -+ "-f", -+ dest='force', -+ default=False, -+ action='store_true', -+ help=_('force retain kernel rpm package if kernel kabi check fails'), -+ ) -+ -+ def configure(self): -+ """Verify that conditions are met so that this command can run. -+ -+ These include that there are enabled repositories with gpg -+ keys, and that this command is being run by the root user. -+ """ -+ demands = self.cli.demands -+ demands.sack_activation = True -+ demands.available_repos = True -+ demands.resolving = True -+ demands.root_user = True -+ commands._checkGPGKey(self.base, self.cli) -+ if not self.opts.filenames: -+ commands._checkEnabledRepo(self.base) -+ self.upgrade_minimal = None -+ self.all_security = None -+ self.skipped_grp_specs = None -+ -+ def run(self): -+ self.upgrade() -+ -+ def run_transaction(self): -+ """ -+ Process kabi check for kernel rpm package installed this time. If the kernel rpm pakcgae fails kabi check, -+ uninstall it. -+ """ -+ for ts_item in self.base.transaction: -+ if ts_item.action not in dnf.transaction.FORWARD_ACTIONS: -+ continue -+ if ts_item.pkg.name == 'kernel': -+ kernel_pkg = str(ts_item.pkg) -+ success = self.kabi_check(kernel_pkg) -+ if not success and not self.opts.force: -+ print('Gonna remove %s due to kabi check failed.' % kernel_pkg) -+ # rebuild rpm database for processing kernel rpm remove operation -+ self.rebuild_rpm_db() -+ self.remove_rpm(kernel_pkg) -+ -+ def remove_rpm(self, pkg: str): -+ """ -+ Remove rpm package via command line. -+ -+ Args: -+ pkg(str): package name -+ e.g. -+ kernel-5.10.0-153.18.0.94.oe2203sp2.x86_64 -+ """ -+ remove_cmd = ["dnf", "remove", pkg, "-y"] -+ output, return_code = cmd_output(remove_cmd) -+ if return_code != SUCCEED: -+ print('Remove package failed: %s.' % pkg) -+ exit(1) -+ else: -+ print('Remove package succeed: %s.' % pkg) -+ # do not achieve the expected result of installing related kernel rpm -+ exit(1) -+ -+ def rebuild_rpm_db(self): -+ """ -+ Rebuild rpm database for processing kernel rpm remove operation. -+ """ -+ rebuilddb_cmd = ["rpm", "--rebuilddb"] -+ output, return_code = cmd_output(rebuilddb_cmd) -+ if return_code != SUCCEED: -+ print('Rebuild rpm database failed.') -+ else: -+ print('Rebuild rpm database succeed.') -+ -+ def kabi_check(self, pkg: str) -> bool: -+ """ -+ Process kabi check after upgrading kernel rpm. -+ -+ Args: -+ pkg(str): package name -+ e.g. -+ kernel-5.10.0-153.18.0.94.oe2203sp2.x86_64 -+ -+ Returns: -+ bool: kabi check result -+ """ -+ print("Kabi check for %s:" % pkg) -+ # version-release.arch -+ evra = pkg.split("-", 1)[1] -+ symvers_file = self.SYMVERS_FILE % (evra) -+ -+ target_symvers_symbol_crc_mapping, return_code = self.get_target_symvers_symbol_crc_mapping(symvers_file) -+ if return_code != SUCCEED: -+ print('[Fail] Cannot find the symvers file of %s.', pkg) -+ return False -+ module_actual_symbol_crc_mapping = self.get_module_actual_symbol_crc_mapping() -+ -+ module_different_symbol_crc_mapping = self.compare_actual_and_target_symvers_symbol_crc_mapping( -+ module_actual_symbol_crc_mapping, target_symvers_symbol_crc_mapping -+ ) -+ -+ sum_module_num = len(module_actual_symbol_crc_mapping) -+ fail_module_num = len(module_different_symbol_crc_mapping) -+ pass_module_num = sum_module_num - fail_module_num -+ -+ reminder_statement = "Here are %s loaded kernel modules in this system, %s pass, %s fail." % ( -+ sum_module_num, -+ pass_module_num, -+ fail_module_num, -+ ) -+ -+ if fail_module_num > 0: -+ print('[Fail] %s' % reminder_statement) -+ self.output_symbol_crc_difference_report(module_different_symbol_crc_mapping) -+ return False -+ -+ print('[Success] %s' % reminder_statement) -+ return True -+ -+ def output_symbol_crc_difference_report(self, module_different_symbol_crc_mapping: dict): -+ """ -+ Format the output for symbol crc difference report. -+ The output is as follows: -+ -+ Failed modules are as follows: -+ No. Module Difference -+ 1 upatch ipv6_chk_custom_prefix : 0x0c994af2 != 0x0c994af3 -+ pcmcia_reset_card : 0xe9bed965 != null -+ 2 crct10dif_pclmul crypto_unregister_shash: 0x60f5b0b7 != 0x0c994af3 -+ __fentry__ : 0xbdfb6dbb != null -+ """ -+ print('Failed modules are as follows:') -+ -+ title = ['No.', 'Module', 'Difference'] -+ # column width -+ sequence_width = len(title[0]) -+ module_width = len(title[1]) -+ symbol_width = crc_info_width = 0 -+ -+ for seq, module_name in enumerate(module_different_symbol_crc_mapping): -+ # the sequence starts from 1 -+ seq = seq + 1 -+ sequence_width = max(sequence_width, len(str(seq))) -+ different_symbol_crc_mapping = module_different_symbol_crc_mapping[module_name] -+ module_width = max(module_width, len(module_name)) -+ for symbol, crc_list in different_symbol_crc_mapping.items(): -+ symbol_width = max(symbol_width, len(symbol)) -+ crc_info = "%s != %s" % (crc_list[0], crc_list[1]) -+ crc_info_width = max(crc_info_width, len(crc_info)) -+ -+ # print title -+ print('%-*s %-*s %s' % (sequence_width, title[0], module_width, title[1], title[2])) -+ -+ for seq, module_name in enumerate(module_different_symbol_crc_mapping): -+ seq = seq + 1 -+ print('%-*s %-*s' % (sequence_width, seq, module_width, module_name), end='') -+ different_symbol_crc_mapping = module_different_symbol_crc_mapping[module_name] -+ is_first_symbol = True -+ for symbol, crc_list in different_symbol_crc_mapping.items(): -+ crc_info = "%s != %s" % (crc_list[0], crc_list[1]) -+ if is_first_symbol: -+ print(' %-*s: %s' % (symbol_width, symbol, crc_info), end='') -+ is_first_symbol = False -+ else: -+ print( -+ ' %-*s %-*s: %s' % (sequence_width + module_width, "", symbol_width, symbol, crc_info), end='' -+ ) -+ print('') -+ -+ def compare_actual_and_target_symvers_symbol_crc_mapping( -+ self, module_actual_symbol_crc_mapping: dict, target_symvers_symbol_crc_mapping: dict -+ ) -> dict: -+ """ -+ Compare the actual symbol crc mapping with the target symvers symbol crc mapping. -+ -+ Args: -+ module_actual_symbol_crc_mapping(dict): module actual symbol crc mapping -+ e.g. -+ { -+ 'upatch': { -+ 'ipv6_chk_custom_prefix': '0x0c994af3', -+ 'pcmcia_reset_card': '0xe9bed965', -+ } -+ } -+ -+ target_symvers_symbol_crc_mapping(dict): target symvers symbol crc mapping -+ e.g. -+ { -+ 'ipv6_chk_custom_prefix': '0x0c994af2', -+ 'pcmcia_reset_card': '0xe9bed965', -+ } -+ -+ Returns: -+ dict: module different symbol crc mapping -+ e.g. -+ { -+ 'upatch': { -+ 'ipv6_chk_custom_prefix': ['0x0c994af3', '0x0c994af2']. -+ } -+ } -+ """ -+ module_different_symbol_crc_mapping = dict() -+ for module_name, actual_symbol_crc_mapping in module_actual_symbol_crc_mapping.items(): -+ different_symbol_crc_mapping = dict() -+ for actual_symbol, actual_crc in actual_symbol_crc_mapping.items(): -+ if actual_symbol not in target_symvers_symbol_crc_mapping: -+ continue -+ elif target_symvers_symbol_crc_mapping[actual_symbol] != actual_symbol_crc_mapping[actual_symbol]: -+ different_symbol_crc_mapping[actual_symbol] = [ -+ actual_crc, -+ target_symvers_symbol_crc_mapping[actual_symbol], -+ ] -+ if not different_symbol_crc_mapping: -+ continue -+ module_different_symbol_crc_mapping[module_name] = different_symbol_crc_mapping -+ return module_different_symbol_crc_mapping -+ -+ def get_module_actual_symbol_crc_mapping(self) -> dict: -+ """ -+ Get the module actual symbol crc mapping of the driver modules currently being loaded in the system. -+ -+ Returns: -+ dict: module actual symbol crc mapping -+ e.g. -+ { -+ 'upatch': { -+ 'ipv6_chk_custom_prefix': '0x0c994af3', -+ 'pcmcia_reset_card': '0xe9bed965', -+ } -+ } -+ """ -+ module_actual_symbol_crc_mapping = dict() -+ lsmod_cmd = ["lsmod"] -+ # 'lsmod' shows all modules loaded in the system -+ # e.g. -+ # [root@openEuler ~]# lsmod -+ # Module Size Used by -+ # upatch 53248 0 -+ # nft_fib_inet 16384 1 -+ # nft_fib_ipv4 16384 1 nft_fib_inet -+ list_output, return_code = cmd_output(lsmod_cmd) -+ if return_code != SUCCEED: -+ return module_actual_symbol_crc_mapping -+ -+ content = list_output.split('\n') -+ for line in content[1:]: -+ if not line: -+ continue -+ module_name = line.split()[0] -+ modinfo_cmd = ['modinfo', module_name, '-n'] -+ # 'modinfo module_name -n' shows module path information -+ # e.g. -+ # [root@openEuler ~]# modinfo upatch -n -+ # /lib/modules/5.10.0-153.12.0.92.oe2203sp2.x86_64/weak-updates/syscare/upatch.ko -+ module_path_output, return_code = cmd_output(modinfo_cmd) -+ if return_code != SUCCEED: -+ continue -+ -+ module_path = module_path_output.split('\n')[0] -+ actual_symbol_crc_mapping, return_code = self.get_actual_symbol_crc_mapping(module_path) -+ if return_code != SUCCEED: -+ continue -+ -+ module_actual_symbol_crc_mapping[module_name] = actual_symbol_crc_mapping -+ return module_actual_symbol_crc_mapping -+ -+ def get_actual_symbol_crc_mapping(self, module_path: str) -> (dict, int): -+ """ -+ Get actual symbol crc mapping for specific module. -+ -+ Args: -+ module_path(str): loaded module path -+ -+ Returns: -+ dict, bool: actual symbol crc mapping, return code -+ """ -+ actual_symbol_crc_mapping = dict() -+ modprobe_cmd = ['modprobe', '--dump', module_path] -+ # 'modprobe --dump module_path' shows module related kabi information -+ # e.g. -+ # [root@openEuler ~]# modprobe --dump \ -+ # /lib/modules/5.10.0-153.12.0.92.oe2203sp2.x86_64/weak-updates/syscare/upatch.ko -+ # 0xe32130cf module_layout -+ # 0x9c4befaf kmalloc_caches -+ # 0xeb233a45 __kmalloc -+ # 0xd6ee688f vmalloc -+ # 0x349cba85 strchr -+ # 0x754d539c strlen -+ crc_symbol_output_lines, return_code = cmd_output(modprobe_cmd) -+ if return_code != SUCCEED: -+ return actual_symbol_crc_mapping, return_code -+ -+ crc_symbol_output = crc_symbol_output_lines.split('\n') -+ for crc_symbol_line in crc_symbol_output: -+ if not crc_symbol_line: -+ continue -+ crc_symbol_line = crc_symbol_line.split() -+ crc, symbol = crc_symbol_line[0], crc_symbol_line[1] -+ actual_symbol_crc_mapping[symbol] = crc -+ return actual_symbol_crc_mapping, return_code -+ -+ def get_target_symvers_symbol_crc_mapping(self, symvers_file: str) -> (dict, int): -+ """ -+ Get target symbol crc mapping from symvers file of kernel rpm package. The symvers file content is -+ as follows(e.g.): -+ -+ 0x0c994af3 ipv6_chk_custom_prefix vmlinux EXPORT_SYMBOL -+ 0xe9bed965 pcmcia_reset_card vmlinux EXPORT_SYMBOL -+ 0x55417264 unregister_vt_notifier vmlinux EXPORT_SYMBOL_GPL -+ 0x8c8905c0 set_anon_super vmlinux EXPORT_SYMBOL -+ 0x3ba051a9 __cleancache_invalidate_page vmlinux EXPORT_SYMBOL -+ -+ the first column is crc(Cyclic Redundancy Check), and the second column is symbol. -+ -+ Args: -+ symvers_file(str): symvers file path -+ -+ Returns: -+ dict, int: target symvers symbol crc mapping, return_code -+ e.g. -+ { -+ 'ipv6_chk_custom_prefix': '0x0c994af3', -+ 'pcmcia_reset_card': '0xe9bed965', -+ }, -+ SUCCEED -+ """ -+ symvers_symbol_crc_mapping = dict() -+ try: -+ content = gzip.open(symvers_file, 'rb') -+ except FileNotFoundError as e: -+ print("error: ", e) -+ return symvers_symbol_crc_mapping, FAIL -+ -+ for line in content.readlines(): -+ line = line.decode() -+ line = line.split() -+ crc, symbol = line[0], line[1] -+ symvers_symbol_crc_mapping[symbol] = crc -+ content.close() -+ return symvers_symbol_crc_mapping, SUCCEED -+ -+ def upgrade(self): -+ """ -+ Use UpgradeCommand to process the upgrade operation. -+ """ -+ upgrade = UpgradeCommand(self.cli) -+ upgrade.upgrade_minimal = self.upgrade_minimal -+ upgrade.opts = self.opts -+ upgrade.opts.filenames = self.opts.filenames -+ upgrade.opts.pkg_specs = self.opts.pkg_specs -+ upgrade.opts.grp_specs = self.opts.grp_specs -+ -+ upgrade.upgrade_minimal = None -+ upgrade.all_security = None -+ upgrade.skipped_grp_specs = None -+ -+ upgrade.run() --- -2.27.0 - diff --git a/0002-modify-re-of-kernel-filter.patch b/0002-modify-re-of-kernel-filter.patch deleted file mode 100644 index 392de4f..0000000 --- a/0002-modify-re-of-kernel-filter.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 831aca01a20fcd67b1d6ff604a0334aaa419efd5 Mon Sep 17 00:00:00 2001 -From: gongzt -Date: Sat, 11 Nov 2023 17:47:25 +0800 -Subject: Modify the regular expression of kernel filter -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - ceres/manages/vulnerability_manage.py | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/ceres/manages/vulnerability_manage.py b/ceres/manages/vulnerability_manage.py -index c41a7fa..39f475d 100644 ---- a/ceres/manages/vulnerability_manage.py -+++ b/ceres/manages/vulnerability_manage.py -@@ -166,7 +166,7 @@ class VulnerabilityManage: - return rpm_info - - for line in stdout.splitlines(): -- rpm_name, new_rpm_info = line.split(":",1) -+ rpm_name, new_rpm_info = line.split(":", 1) - old_rpm_info = rpm_info.get(rpm_name, "") - rpm_info[rpm_name] = new_rpm_info if new_rpm_info > old_rpm_info else old_rpm_info - LOGGER.debug("query installed rpm package info succeed!") -@@ -200,7 +200,7 @@ class VulnerabilityManage: - # ("kernel", "x86_64.", "5.10.0-60.105.0.132.oe2203"), - # ("kernel-debuginfo", "x86_64", "5.10.0-60.105.0.132.oe2203") - # ] -- rpm_info = re.findall("^(kernel\S*)\.([a-z468_]+)\s+(\S+)", stdout, re.MULTILINE) -+ rpm_info = re.findall("^(kernel)\.([a-z468_]+)\s+(\S+)", stdout, re.MULTILINE) - - if not rpm_info: - return result -@@ -243,7 +243,7 @@ class VulnerabilityManage: - # ("CVE-2021-43976", "Important/Sec.", "kernel-4.19.90-2201.1.0.0132.oe1.x86_64"), - # ("CVE-2021-0941", "Important/Sec.", "kernel-4.19.90-2201.1.0.0132.oe1.x86_64") - # ] -- all_cve_info = re.findall(r"(CVE-\d{4}-\d+)\s+([\w+/.]+)\s+(kernel\S+)", stdout) -+ all_cve_info = re.findall(r"(CVE-\d{4}-\d+)\s+([\w+/.]+)\s+(kernel-\d\S+)", stdout) - if not all_cve_info: - return unfixed_cves - -@@ -306,7 +306,7 @@ class VulnerabilityManage: - # ("CVE-2023-1513", "Important/Sec.", "kernel-4.19.90-2304.1.0.0196.oe1.x86_64", "patch-kernel-4.19.90-2112.."), - # ("CVE-2021-xxxx", "Important/Sec.", "-", "patch-redis-6.2.5-1-SGL_CVE_2023_1111_CVE_2023_1112-1-1.x86_64") - # ] -- all_cve_info = re.findall(r"(CVE-\d{4}-\d+)\s+([\w+/.]+)\s+(kernel\S+|-)\s+(patch-kernel\S+|-)", stdout) -+ all_cve_info = re.findall(r"(CVE-\d{4}-\d+)\s+([\w+/.]+)\s+(kernel-\d\S+|-)\s+(patch-kernel-\d\S+|-)", stdout) - if not all_cve_info: - return cve_info_list - -@@ -368,7 +368,7 @@ class VulnerabilityManage: - # ("CVE-2021-43976","Important/Sec.", "kernel-4.19.90-2201.1.0.0132.oe1.x86_64"), - # ("CVE-2021-0941","Important/Sec.", "kernel-4.19.90-2201.1.0.0132.oe1.x86_64") - # ] -- fixed_cves_info = re.findall(r"(CVE-\d{4}-\d+)\s+([\w+/.]+)\s+(kernel\S+)", stdout) -+ fixed_cves_info = re.findall(r"(CVE-\d{4}-\d+)\s+([\w+/.]+)\s+(kernel-\d\S+)", stdout) - - if not fixed_cves_info: - return fixed_cves -@@ -407,7 +407,7 @@ class VulnerabilityManage: - # ("CVE-2021-xxxx", "Important/Sec.", "-", "patch-redis-6.2.5-1-SGL_CVE_2023_1111_CVE_2023_1112-1-1.x86_64") - # ] - hotpatch_status = self._query_applied_hotpatch_status() -- all_cve_info = re.findall(r"(CVE-\d{4}-\d+)\s+([\w+/.]+)\s+(kernel\S+|-)\s+(patch-kernel\S+|-)", stdout) -+ all_cve_info = re.findall(r"(CVE-\d{4}-\d+)\s+([\w+/.]+)\s+(kernel-\d\S+|-)\s+(patch-kernel-\d\S+|-)", stdout) - - cve_info_fixed_by_coldpatch, cve_info_fixed_by_hotpatch, hotpatch_dic = [], [], defaultdict(str) - for cve_id, _, coldpatch, hotpatch in all_cve_info: -@@ -472,7 +472,7 @@ class VulnerabilityManage: - # ("CVE-2023-1112", "redis-6.2.5-1/SGL_CVE_2023_1111_CVE_2023_1112-1-1/redis-server", "NOT-APPLIED"), - # ("CVE-2023-1111", "redis-6.2.5-1/ACC-1-1/redis-benchmark", "ACTIVED") - # ] -- applied_hotpatch_info_list = re.findall(r"(CVE-\d{4}-\d+)\s+(kernel[\w\-/.]+)\s+([A-W]+)", stdout) -+ applied_hotpatch_info_list = re.findall(r"(CVE-\d{4}-\d+)\s+(kernel-\d[\w\-/.]+)\s+([A-W]+)", stdout) - - if not applied_hotpatch_info_list: - return result --- -Gitee diff --git a/0002-support-restore-grubby-if-kabi-check-failed.patch b/0002-support-restore-grubby-if-kabi-check-failed.patch new file mode 100644 index 0000000..d2176a7 --- /dev/null +++ b/0002-support-restore-grubby-if-kabi-check-failed.patch @@ -0,0 +1,167 @@ +From 2c3dcc5bb5de4d3f83902bb8cb7f0fe1fa9a55b9 Mon Sep 17 00:00:00 2001 +From: wang-guangge +Date: Tue, 19 Dec 2023 21:03:48 +0800 +Subject: [PATCH] support restore default boot kernel if kabi check failed + +--- + hotpatch/hotupgrade.py | 19 ++++++++----- + hotpatch/upgrade_en.py | 61 ++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 73 insertions(+), 7 deletions(-) + +diff --git a/hotpatch/hotupgrade.py b/hotpatch/hotupgrade.py +index 37497cf..4e1ea96 100644 +--- a/hotpatch/hotupgrade.py ++++ b/hotpatch/hotupgrade.py +@@ -43,6 +43,7 @@ class HotupgradeCommand(dnf.cli.Command): + is_need_accept_kernel_hp = False + is_kernel_coldpatch_installed = False + kernel_coldpatch = '' ++ previous_boot_kernel = None + + @staticmethod + def set_argparser(parser): +@@ -80,6 +81,9 @@ class HotupgradeCommand(dnf.cli.Command): + commands._checkEnabledRepo(self.base) + + def run(self): ++ self.upgrade_en = UpgradeEnhanceCommand(self.cli) ++ self.previous_boot_kernel = self.upgrade_en.get_default_boot_kernel() ++ + if self.opts.pkg_specs: + self.hp_list = self.opts.pkg_specs + elif self.opts.cves or self.opts.advisory: +@@ -181,20 +185,21 @@ class HotupgradeCommand(dnf.cli.Command): + Returns: + bool: if hotupgrade task success + """ +- upgrade_en = UpgradeEnhanceCommand(self.cli) +- + is_task_success = True + if self.is_kernel_coldpatch_installed: + if not is_all_kernel_hp_actived: + logger.info(_('Gonna remove %s due to some kernel hotpatch activation failed.'), self.kernel_coldpatch) +- upgrade_en.remove_rpm(str(self.kernel_coldpatch)) ++ self.upgrade_en.rebuild_rpm_db() ++ self.upgrade_en.remove_rpm(str(self.kernel_coldpatch)) ++ self.upgrade_en.restore_default_boot_kernel(self.previous_boot_kernel) + self.is_need_accept_kernel_hp = False + # process kabi check +- elif not upgrade_en.kabi_check(str(self.kernel_coldpatch)) and not self.opts.force: ++ elif not self.upgrade_en.kabi_check(str(self.kernel_coldpatch)) and not self.opts.force: + logger.info(_('Gonna remove %s due to Kabi check failed.'), self.kernel_coldpatch) + # rebuild rpm database for processing kernel rpm remove operation +- upgrade_en.rebuild_rpm_db() +- upgrade_en.remove_rpm(str(self.kernel_coldpatch)) ++ self.upgrade_en.rebuild_rpm_db() ++ self.upgrade_en.remove_rpm(str(self.kernel_coldpatch)) ++ self.upgrade_en.restore_default_boot_kernel(self.previous_boot_kernel) + self.is_need_accept_kernel_hp = True + + if target_remove_hp: +@@ -203,7 +208,7 @@ class HotupgradeCommand(dnf.cli.Command): + # it indicates that the hotupgrade task failed + is_task_success &= False + for hotpatch in target_remove_hp: +- upgrade_en.remove_rpm(hotpatch) ++ self.upgrade_en.remove_rpm(hotpatch) + return is_task_success + + def _apply_hp(self, hp_full_name): +diff --git a/hotpatch/upgrade_en.py b/hotpatch/upgrade_en.py +index 94ba4da..0bd78cc 100644 +--- a/hotpatch/upgrade_en.py ++++ b/hotpatch/upgrade_en.py +@@ -12,6 +12,7 @@ + # ******************************************************************************/ + import gzip + import subprocess ++from typing import Optional + + import dnf + from dnf.cli import commands +@@ -36,6 +37,7 @@ def cmd_output(cmd): + @dnf.plugin.register_command + class UpgradeEnhanceCommand(dnf.cli.Command): + SYMVERS_FILE = "/boot/symvers-%s.gz" ++ previous_boot_kernel = None + + aliases = ['upgrade-en'] + summary = _( +@@ -80,8 +82,65 @@ class UpgradeEnhanceCommand(dnf.cli.Command): + self.skipped_grp_specs = None + + def run(self): ++ # if kernel kabi check failed, need change back to the default boot kernel version ++ self.previous_boot_kernel = self.get_default_boot_kernel() + self.upgrade() + ++ @staticmethod ++ def get_default_boot_kernel() -> Optional[str]: ++ """ ++ Get default boot kernel version. ++ ++ Returns: ++ str: default boot kernel ++ """ ++ cmd = ["grubby", "--default-kernel"] ++ # 'grubby --default-kernel' shows boot default kernel version in the system ++ # e.g. ++ # [root@openEuler ~]# grubby --default-kernel ++ # /boot/vmlinuz-4.19.90-2112.8.0.0131.oe1.x86_64 ++ output, return_code = cmd_output(cmd) ++ default_boot_kernel = output.split('\n')[0] ++ if return_code != SUCCEED: ++ return None ++ return default_boot_kernel ++ ++ @staticmethod ++ def restore_default_boot_kernel(target_boot_kernel: str): ++ """ ++ Restore default boot kernel version. ++ ++ Args: ++ target_boot_kernel(str): target boot kernel ++ """ ++ # 'grubby --set-default=/boot/vmlinuz-4.19.90-2112.8.0.0131.oe1.x86_64' can set default boot kernel version ++ # to kernel-4.19.90-2112.8.0.0131.oe1.x86_64 ++ if not target_boot_kernel: ++ print("Get default boot kernel before upgrade failed.") ++ return ++ ++ cmd = ["grubby", "--set-default=%s" % target_boot_kernel] ++ try: ++ # e.g. 4.19.90-2112.8.0.0131.oe1.x86_64 ++ target_boot_kernel_vere = target_boot_kernel.split('-', 1)[1] ++ target_boot_kernel_nevra = "kernel-%s" % target_boot_kernel_vere ++ except IndexError as e: ++ print( ++ "Parse target boot kernel failed. Please check if target boot kernel path is correct: %s." ++ % target_boot_kernel, ++ "\nRestore the default boot kernel failed. Please manually check the default boot kernel to prevent unexpected kernel switching after reboot.", ++ ) ++ return ++ ++ output, return_code = cmd_output(cmd) ++ if return_code != SUCCEED: ++ print( ++ "Restore the default boot kernel failed: %s. Please manually check the default boot kernel to prevent unexpected kernel switching after reboot." ++ % target_boot_kernel_nevra ++ ) ++ return ++ print("Restore the default boot kernel succeed: %s." % target_boot_kernel_nevra) ++ + def run_transaction(self): + """ + Process kabi check for kernel rpm package installed this time. If the kernel rpm pakcgae fails kabi check, +@@ -100,6 +159,8 @@ class UpgradeEnhanceCommand(dnf.cli.Command): + # when processing remove operation, do not achieve the expected result of installing related rpm, + # it indicates that the upgrade task failed + self.remove_rpm(kernel_pkg) ++ # change back to the default boot kernel version before upgrade ++ self.restore_default_boot_kernel(self.previous_boot_kernel) + exit(1) + + def remove_rpm(self, pkg: str): +-- +2.27.0 + diff --git a/0003-fix-bug-in-test_hotpatch.py.patch b/0003-fix-bug-in-test_hotpatch.py.patch deleted file mode 100644 index a402546..0000000 --- a/0003-fix-bug-in-test_hotpatch.py.patch +++ /dev/null @@ -1,27 +0,0 @@ -From ccbd7a6dea68303fb7ec6f777f0e6b8d9e6c7773 Mon Sep 17 00:00:00 2001 -From: wang-guangge -Date: Wed, 15 Nov 2023 10:35:42 +0800 -Subject: [PATCH] fix bug in test_hotpatch.py - ---- - hotpatch/test_hotpatch.py | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/hotpatch/test_hotpatch.py b/hotpatch/test_hotpatch.py -index f46faed..e903d55 100644 ---- a/hotpatch/test_hotpatch.py -+++ b/hotpatch/test_hotpatch.py -@@ -13,8 +13,8 @@ - import unittest - from unittest import mock - --from .hotpatch import HotpatchCommand --from .syscare import SUCCEED, FAIL -+from .hotpatch_ops import HotpatchCommand -+from .syscare import FAIL, SUCCEED - - - class HotpatchTestCase(unittest.TestCase): --- -2.27.0 - diff --git a/0003-remove-installed-rpm-if-unreboot-and-improve-log-for-rollback.patch b/0003-remove-installed-rpm-if-unreboot-and-improve-log-for-rollback.patch new file mode 100644 index 0000000..776ce97 --- /dev/null +++ b/0003-remove-installed-rpm-if-unreboot-and-improve-log-for-rollback.patch @@ -0,0 +1,152 @@ +From 88f2784a4673edb9ff0a185ea43beccb5108ece0 Mon Sep 17 00:00:00 2001 +From: wang-guangge +Date: Fri, 22 Dec 2023 18:44:27 +0800 +Subject: [PATCH] improve rollback_manage.py + +--- + ceres/manages/rollback_manage.py | 73 ++++++++++++++++++++++++++------ + 1 file changed, 61 insertions(+), 12 deletions(-) + +diff --git a/ceres/manages/rollback_manage.py b/ceres/manages/rollback_manage.py +index 0f30d29..160a74c 100644 +--- a/ceres/manages/rollback_manage.py ++++ b/ceres/manages/rollback_manage.py +@@ -237,19 +237,67 @@ class RollbackManage: + log.append(result_log) + if result_code != TaskExecuteRes.SUCCEED: + return TaskExecuteRes.FAIL, os.linesep.join(log) ++ ++ result_code, result_log = self._remove_kernel_rpm(installed_rpm) ++ if result_log: ++ log.append(result_log) ++ if result_code != TaskExecuteRes.SUCCEED: ++ return TaskExecuteRes.FAIL, os.linesep.join(log) + + result_code, result_log = self._change_boot_kernel_version(target_rpm) + if result_log: + log.append(result_log) + if result_code != TaskExecuteRes.SUCCEED: + return TaskExecuteRes.FAIL, os.linesep.join(log) +- ++ + return TaskExecuteRes.SUCCEED, os.linesep.join(log) +- ++ ++ def _remove_kernel_rpm(self, installed_rpm: str) -> Tuple[str, str]: ++ """ ++ Remove the kernel rpm if the installed kernel rpm is not in use. ++ ++ Args: ++ installed_rpm(str): the installed kernel in executed fix task ++ ++ Returns: ++ Tuple[str, str]: a tuple containing two elements (remove result, log) ++ """ ++ code, stdout, stderr = execute_shell_command(f"rpm -qa | grep {installed_rpm}") ++ # 'rpm -qa' shows installed rpm ++ # e.g. ++ # [root@openEuler ~]# rpm -qa | grep kernel-4.19.90-2112.8.0.0131.oe1.x86_64 ++ # kernel-4.19.90-2112.8.0.0131.oe1.x86_64 ++ if code != CommandExitCode.SUCCEED or installed_rpm not in stdout: ++ tmp_log = f"The {installed_rpm} is not installed. Please check the input parameter." ++ LOGGER.error(tmp_log) ++ return TaskExecuteRes.FAIL, tmp_log ++ ++ code, current_evra, stderr = execute_shell_command(f"uname -r") ++ # 'uname -r' show the kernel version-release.arch of the current system ++ # e.g. ++ # [root@openEuler ~]# uname -r ++ # 5.10.0-136.12.0.86.oe2203sp1.x86_64 ++ if code != CommandExitCode.SUCCEED: ++ LOGGER.error(stderr) ++ return TaskExecuteRes.FAIL, current_evra + stderr ++ ++ # version-release.arch ++ installed_evra = installed_rpm.split("-", 1)[1] ++ ++ if installed_evra == current_evra: ++ return TaskExecuteRes.SUCCEED, f"Preserve the {installed_rpm} due to it is in use." ++ ++ code, stdout, stderr = execute_shell_command(f"dnf remove {installed_rpm} -y") ++ if code != CommandExitCode.SUCCEED: ++ LOGGER.error(stderr) ++ return TaskExecuteRes.FAIL, stdout + stderr ++ ++ return TaskExecuteRes.SUCCEED, stdout ++ + def _check_boot_kernel_version(self, installed_rpm: str) -> Tuple[str, str]: + """ + Check if the boot kernel version is consistent with the installed kernel version. If not, it indicates +- that the executed fix task has been tampered. ++ that the environment after executed fix task has been tampered. + + Args: + installed_rpm(str): the installed rpm in executed fix task +@@ -270,8 +318,8 @@ class RollbackManage: + evra = installed_rpm.split("-", 1)[1] + if evra not in stdout: + tmp_log = ( +- "The grubby default kernel version is not consistent with installed kernel version. " +- "The executed fix task has been tampered." ++ f"The default boot kernel version is not consistent with {installed_rpm}. " ++ "The environment after executed fix task has been tampered." + ) + LOGGER.error(tmp_log) + return TaskExecuteRes.FAIL, tmp_log +@@ -281,7 +329,7 @@ class RollbackManage: + def _check_current_kernel_version(self, installed_rpm: str, target_rpm: str) -> Tuple[str, str]: + """ + Check if the current kernel version is consistent with the installed kernel version or target kernel +- version. If not, it indicates that the executed fix task has been tampered. ++ version. If not, it indicates that the environment after executed fix task has been tampered. + + Args: + installed_rpm(str): the installed rpm in executed fix task +@@ -304,8 +352,8 @@ class RollbackManage: + + if installed_evra != current_evra and target_evra != current_evra: + tmp_log = ( +- "The current kernel version is not consistent with installed kernel version or target kernel version. " +- "The executed fix task has been tampered." ++ f"The current kernel version is neither {installed_rpm} nor {target_rpm}. " ++ "The environment after executed fix task has been tampered." + ) + LOGGER.error(tmp_log) + return TaskExecuteRes.FAIL, tmp_log +@@ -314,7 +362,8 @@ class RollbackManage: + + def _check_if_target_rpm_installed(self, target_rpm: str) -> Tuple[str, str]: + """ +- Check if the target kernel is installed. If not, it indicates that the executed fix task has been tampered. ++ Check if the target kernel is installed. If not, it indicates that the environment after executed fix ++ task has been tampered. + + Args: + target_rpm(str): the target rpm for rollback task +@@ -328,7 +377,7 @@ class RollbackManage: + # [root@openEuler ~]# rpm -qa | grep kernel-4.19.90-2112.8.0.0131.oe1.x86_64 + # kernel-4.19.90-2112.8.0.0131.oe1.x86_64 + if code != CommandExitCode.SUCCEED or target_rpm not in stdout: +- tmp_log = "The target kernel of rollback task is not installed. The executed fix task has been tampered." ++ tmp_log = "The target kernel of rollback task is not installed. The environment after executed fix task has been tampered." + LOGGER.error(tmp_log) + return TaskExecuteRes.FAIL, tmp_log + +@@ -336,7 +385,7 @@ class RollbackManage: + + def _change_boot_kernel_version(self, target_rpm: str) -> Tuple[str, str]: + """ +- Change the grubby default kernel version to target kernel version. ++ Change the default boot kernel version to target kernel version. + + Args: + target_rpm(str): the target rpm for rollback task +@@ -358,4 +407,4 @@ class RollbackManage: + LOGGER.error(stderr) + return TaskExecuteRes.FAIL, stdout + stderr + +- return TaskExecuteRes.SUCCEED, f"Change boot kernel version to {target_rpm} successfully." ++ return TaskExecuteRes.SUCCEED, f"Change default boot kernel version to {target_rpm} successfully." +-- +2.27.0 + diff --git a/0004-Modify-method-of-mark-invalid-data-and-add-summary.patch b/0004-Modify-method-of-mark-invalid-data-and-add-summary.patch deleted file mode 100644 index cdada06..0000000 --- a/0004-Modify-method-of-mark-invalid-data-and-add-summary.patch +++ /dev/null @@ -1,1594 +0,0 @@ -From 509f622afa19c0c62834952908db065a237c7e48 Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Sun, 19 Nov 2023 20:31:31 +0800 -Subject: [PATCH] Modify method of mark invalid data and add summary - ---- - extra-tools/da-tool/README.md | 166 +++++++++--- - extra-tools/da-tool/analysis/config.cpp | 11 +- - extra-tools/da-tool/analysis/config.h | 4 +- - .../da-tool/analysis/function_stack.cpp | 157 ++++++++---- - extra-tools/da-tool/analysis/function_stack.h | 15 +- - .../da-tool/analysis/sched_analysis.cpp | 100 ++++---- - extra-tools/da-tool/analysis/sched_analysis.h | 7 +- - extra-tools/da-tool/analysis/time_pair.cpp | 240 ++++++++++-------- - extra-tools/da-tool/analysis/time_pair.h | 32 ++- - .../da-tool/analysis/trace_resolve.cpp | 5 +- - extra-tools/da-tool/analysis/trace_resolve.h | 7 - - extra-tools/da-tool/conf/da-tool.conf | 6 +- - extra-tools/da-tool/main.cpp | 7 +- - extra-tools/da-tool/script/da-tool.sh | 2 +- - extra-tools/da-tool/test/case/case1/case1.cpp | 64 +++++ - .../da-tool/test/case/case2/case2_udp_cli.c | 37 +++ - .../test/case/case2/case2_udp_ser_noblk.c | 53 ++++ - 17 files changed, 631 insertions(+), 282 deletions(-) - create mode 100644 extra-tools/da-tool/test/case/case1/case1.cpp - create mode 100644 extra-tools/da-tool/test/case/case2/case2_udp_cli.c - create mode 100644 extra-tools/da-tool/test/case/case2/case2_udp_ser_noblk.c - -diff --git a/extra-tools/da-tool/README.md b/extra-tools/da-tool/README.md -index b9a603b..209b43b 100644 ---- a/extra-tools/da-tool/README.md -+++ b/extra-tools/da-tool/README.md -@@ -13,9 +13,9 @@ - + 线程的调度特征 - - ## 主要功能 --+ 分析出内核态函数/用户态函数(C/C++)/sched_switch的时延 --+ 统计各调用栈时延平均值 -+ - + 推导调用关系(乱序) -++ 统计各函数调用栈时延信息 - + 线程调度特征 - + 记录系统信息 - -@@ -23,20 +23,21 @@ - + 不支持递归函数分析 - - ## 文件夹说明 -- -+**工程文件夹** - + script : shell脚本 -- + da-tool.sh 利用`uprobe/kprobe` 采集程序trace,同时可生成analysis需要的配置文件 -+ + da-tool.sh 利用`uprobe/kprobe` 采集程序 `trace`,同时可生成analysis需要的配置文件 - + config 配置文件夹 - + da-tool.conf 放置`/etc` 目录下 - + analysis `C++`程序文件 - + config(.cpp/ch ): 解析外部参数 和 `function_config` - + common.h : 通用参数 -- + trace_resolve(.cpp/.h) : 解析trace -+ + trace_resolve(.cpp/.h) : 解析`trace` - + time_pair(.cpp/.h)::获取各函数的起止时间等信息 - + function_strack(.cpp/.h): 获取各pid 函数调用栈及其时延信息 - + sched_analysis(.cpp/.h): 计算线程调度信息 - + main.cpp - + CMakeLists.txt -++ test : 测试程序 - - **本地文件夹** - -@@ -50,51 +51,131 @@ - + output : 时延结果信息 - - ## 使用方法 -+### 命令格式 -+时延分析工具通过`da-tool.sh`命令采集和分析函数时延,使用格式为 - --#### 1 配置需要采集的函数 --配置文件:da-tool.conf --+ k 开头为 kernel 符号,u 开头为内核符号, s 开头为调度配置(目前仅支持`sched_switch`) --+ k 和 s 只能一行配置完 --+ u 可以多行配置, 格式:`[u , 程序路径,二进制名称 ,追踪的函数]` --+ 函数务必存在,否则uprobe 配置不成功,配置的内核符号应在`/proc/kallsyms`能够查询到,配置的用户态程序符号仅支持`C/C++`,配置的符号应用`objdump`能够查询到 --+ 每行末尾不要有逗号 -+**da-tool.sh** [-t <*probe time*>] - --配置文件举例如下: -+|参数|是否必选|参数函数| -+|----|--------|-------| -+|-t |否| 采集函数 `trace` 的时长,单位秒,最大限制 100,默认10| -+ -+### 自定义配置函数 -+配置文件:`/etc/da-tool.conf` -+ -+举例如下: - ``` --# kernel symbol config --k,ksys_write,udp_recvmsg,udp_sendmsg -+# /etc/da-tool.conf -+ -+# kernel symbol config (ref: /proc/kallsyms) -+k,udp_recvmsg,udp_sendmsg,dev_queue_xmit,udp_send_skb,sock_recvmsg,__skb_recv_udp,udp_rcv - - # sched config - s,sched_switch - --# user symbol config (path ,bin,func1,func2) -+# user symbol config (format : u,path,bin_name,func1,func2,...,funcN) -+# u,/path/,bin_name,sendto -+u,/home/git_repo/nda-tool/nda-tool/test/net_demo2/,server_no_blk,recvfrom -+u,/home/git_repo/nda-tool/nda-tool/test/net_demo2/,client_to_noblk,sendto - u,/home/git_repo/nda-tool/nda-tool/test/base_demo/,base_demo_cpp,_Z5func1v,_Z5func2v,_Z5func2i,_Z5func3v,_Z5func4v --u,/home/git_repo/nda-tool/nda-tool/test/net_demo1/,client,sendto,recvfrom -+# end - ``` --备注,为了支持用户态不同二进制重名函数采集,配置`event`时,命名为`u0_func1``、u1_func1`...,以上面配置为例,`loop_func`为`u2_loop_func`, --观测`trace` 结果时不要产生歧义。 --#### 2 采集trace并分析 - --```shell --da-tool.sh -t 10 # 采集10秒并分析结果 -++ k 开头为 kernel 符号,u 开头为用户态程序符号, s 开头为调度配置(目前仅支持`sched_switch`且必须配置) -++ k 和 s 只能一行配置完 -++ u 可以多行配置, 格式:`[u,程序路径,二进制名称,追踪的函数]` -++ 请确保函数存在,否则 `uprobe` 配置不成功,所配置的内核符号应在`/proc/kallsyms`能够查询到,所配置的用户态程序符号仅支持`C/C++`,且通过`objdump`应能够查询到 -++ 每行末尾不要有逗号 -+ -+ -+注意,为了支持用户态不同二进制重名函数采集,配置`event`时,命名为`u0_func1`、`u1_func1`...,以上面配置为例,`_Z5func1v`为`u2__Z5func1v`。 -+### 分析结果说明 -+ -++ 终端输出结果:各函数调用栈的时延信息 -++ 文件夹输出结果 : `/var/da-tool/analysis-output/ouput/` -+ + func_delay_stack : 函数调用栈时延结果 -+ + process_sched_info :进程的调度信息 -+ + summary_delay.csv : 时延分析总结报告 -+ + summary_sched.csv : 调度分析总结报告 -+ -+#### 终端输出结果介绍 - ``` --采集后会在`/var/da-tool/tmp`文件夹下生成一个`output_时间`格式的文件夹,包含此次采样的结果。 --分析完成后会在`/var/da-tool/analysis-output/ouput/`下生成分析结果 -+├──pid: 222459{local:(450040, 44.988%), global:(1000346, 100.000%)} -+│ ├─────sched_switch{local:(13160, 1.316%, 453.793), global:(13160, 1.316%, 453.793), times:29, (int)ret>=0 times:29} -+│ └─────u0_recvfrom{local:(422312, 42.217%, 10.729), global:(537146, 53.696%, 13.646), times:39362, (int)ret>=0 times:20} -+│ ├─────sched_switch{local:(2927, 0.293%, 209.071), global:(2927, 0.293%, 209.071), times:14, (int)ret>=0 times:14} -+│ └─────sock_recvmsg{local:(55313, 5.529%, 1.405), global:(111907, 11.187%, 2.843), times:39362, (int)ret>=0 times:20} -+│ └─────udp_recvmsg{local:(36357, 3.634%, 0.924), global:(56594, 5.657%, 1.438), times:39362, (int)ret>=0 times:20} -+│ └─────__skb_recv_udp{local:(20237, 2.023%, 0.514), global:(20237, 2.023%, 0.514), times:39362, (int)ret>=0 times:39342} - - ``` --├──pid:1473358{(868869,100.000%)} --│ │ ├─────u0__Z5func1v{(local: 19, 0.002%, 19.000)(global:150399, 17.310% ,150399.000), times:1, (int)ret>=0 times:1} --│ │ │ ├─────sched_switch{(local: 150380, 17.308%, 150380.000)(global:150380, 17.308% ,150380.000), times:1, (int)ret>=0 times:1} -+以此结果为例,该进程是一个udp非阻塞收包进程。 -++ `u0_recvfrom` 为该进程在运行后执行的用户态函数,`u0_` 前缀表示第一个应用程序的函数,实际函数名为`recvfrom`;`sched_switch` 为调度函数;其余函数为内核函数 -++ `global` 和 `local` 对应的括号内为该函数执行的时延信息,其中 `local` 是剔除掉子函数和调度所执行的时间 , `global` 为该函数实际执行时长 -++ 每个函数的 `global` 和 `local` 的括号内三个信息分别为,时延,该时延所占进程全部时间的百分比,平均时延(时延/执行次数) -++ 每一级函数的 `global` 时间等于本级函数`local`时间与下一级所有函数的 `global` 时间之和 -++ `times` 是该函数调用栈的次数, -++ `(int)ret>=0 times`:表示该函数返回值转换为`int`后大于等于0的次数,无返回值函数返回值是无效的值 -++ 以上时间单位为微秒 -+ -+#### 文件夹结果介绍 -+ -+**时延和调用关系信息**:`/var/da-tool/analysis_output/output/func_delay_stack` -+``` -+# 此部分信息为终端输出结果的文件格式存储 -+pid_222459;sched_switch 13160, localDelaySum ,13160, localAvedelay ,453.793103, localPercentage, 1.316%, globalDelaySum ,13160, globalAvedelay, 453.793103, globalPercentage, 1.316%, times , 29, (int)ret>=0 times ,29 -+pid_222459;u0_recvfrom;sched_switch 2927, localDelaySum ,2927, localAvedelay ,209.071429, localPercentage, 0.293%, globalDelaySum ,2927, globalAvedelay, 209.071429, globalPercentage, 0.293%, times , 14, (int)ret>=0 times ,14 -+pid_222459;u0_recvfrom 422312, localDelaySum ,422312, localAvedelay ,10.728926, localPercentage, 42.217%, globalDelaySum ,537146, globalAvedelay, 13.646309, globalPercentage, 53.696%, times ,39362, (int)ret>=0 times ,20 -+pid_222459;u0_recvfrom;sock_recvmsg 55313, localDelaySum ,55313, localAvedelay ,1.405239, localPercentage, 5.529%, globalDelaySum ,111907, globalAvedelay, 2.843021, globalPercentage, 11.187%, times ,39362, (int)ret>=0 times ,20 -+pid_222459;u0_recvfrom;sock_recvmsg;udp_recvmsg 36357, localDelaySum ,36357, localAvedelay ,0.923657, localPercentage, 3.634%, globalDelaySum ,56594, globalAvedelay, 1.437783, globalPercentage, 5.657%, times ,39362, (int)ret>=0 times ,20 -+pid_222459;u0_recvfrom;sock_recvmsg;udp_recvmsg;__skb_recv_udp 20237, localDelaySum ,20237, localAvedelay ,0.514125, localPercentage, 2.023%, globalDelaySum ,20237, globalAvedelay, 0.514125, globalPercentage, 2.023%, times ,39362, (int)ret>=0 times ,39342 - ``` --以此结果为例,`u0__Z5func1v` 和 `sched_switch` 为 该进程在运行期间执行的函数,`sched_switch`执行周期在 `u0__Z5func1v` 周期内,`(local: 19, 0.002%, 19.000)` 表示该函数剔除子函数和调度所执行的时间,三个参数分别为,总时间、所占整个pid有效时间的百分比,平均时间,`global` 为不剔除子函数所占的时间,`times` 是该函数调用栈的次数,`(int)ret>=0 times`:表示该函数返回值转换为(int)后大于等于0的次数,无返回值函数返回值认为是0. --以上时间单位为微秒。 --## 注意 --+ 确保trace 中有需要采集的函数的完整调用栈 --+ 采样时间和函数需要人为评估,某些函数短时间可能采到大量trace,日志过大,解析过慢 -+ -+**调度信息**:`/var/da-tool/analysis_output/output/process_sched_info` -+``` -+# delaySum : 该pid分析的总时长 -+# schedSwitchDelay : 调度所占的时间 -+# runtime :delaySum - schedSwitchDelay -+# cpuSwitchTimes : 该pid从一个核切换到另一个核的次数 -+# core 2, run time 704927 : 表示在cpu2 上运行时长为 704927 -+# startTime,67551.691078,endTime,67551.701193,coreIndex,2 :在这个时间段内在cpu2上运行 -+# coreIndex,-1 表示该pid被切走的时长(sched_switch) -+ -+pid,222459,delaySum ,1000368,schedSwitchDelay ,37201,runtime ,963167,cpuSwitchTimes ,1, -+ core 2, run time 704927 -+ core 3, run time 258240 -+startTime,67551.691078,endTime,67551.701193,coreIndex,2 -+startTime,67551.701193,endTime,67551.701970,coreIndex,-1 -+startTime,67551.701970,endTime,67551.702503,coreIndex,2 -+startTime,67551.702503,endTime,67551.713700,coreIndex,-1 -+startTime,67551.713700,endTime,67551.723964,coreIndex,2 -+startTime,67551.723964,endTime,67551.724119,coreIndex,-1 -+... -+ -+``` -+**时延分析总结报告**:`/var/da-tool/analysis_output/output/summary_delay.csv` -+ -+包含信息如下,其中`(r>=0)`表示函数返回值转成`int`后大于等于0的情况。 -+`ave,sum,min,max,p50,p80,p95,p99`等为时延信息的平均值、总和、极值、各百分位下的数值。 -+``` -+pid,function,call_times,ave,sum,min,max,p50,p80,p95,p99, -+call_times(r>=0),ave(r>=0),sum(r>=0),min(r>=0),max(r>=0),p50(r>=0),p80(r>=0),p95(r>=0),p99(r>=0), -+call_times(r<0),ave(r<0),sum(r<0),min(r<0),max(r<0),p50(r<0),p80(r<0),p95(r<0),p99(r<0), -+``` -+ -+**调度分析总结报告**:`/var/da-tool/analysis_output/output/summary_sched.csv` -+``` -+pid,delaySum,schedSwitchDelay,schedSwitchPercentage,schedSwitchTimes,cpuSwitchTimes -+``` -++ delaySum : 总耗时 -++ schedSwitchDelay : 调度总耗时 -++ schedSwitchPercentage : schedSwitchDelay 占 delaySum 的百分比 -++ schedSwitchTimes : 调度次数 -++ cpuSwitchTimes : cpu 切换次数 - - ### 扩展功能 --da-tool 生成的结果信息可调用 火焰图生成工具,可视化分析结果, --`./flamegraph.pl` 可在 https://gitee.com/mirrors/FlameGraph 中获取 -+`da-tool` 生成的结果信息可调用 火焰图生成工具,可视化分析结果, -+`./flamegraph.pl` 可在 `https://gitee.com/mirrors/FlameGraph` 中获取 - ```shell - # 全部信息 - cat /var/da-tool/analysis_output/output/func_delay_stack | grep -o '^[^,]*' | ./flamegraph.pl --countname "delay sum" > allpid.svg -@@ -118,15 +199,20 @@ Error: event "aaaa" already exists. - Error: Failed to add events. - ``` - -+采集后会在`/var/da-tool/tmp`文件夹下生成一个`output_时间`格式的文件夹,包含此次采样的结果。 -+采样脚本的采样日志在此路径下: -+``` -+/var/da-tool/tmp/sample_output_时间/da-tool/sample.log -+``` -+ - ### 注意事项 - + 配置注意事项 - + 配置`/etc/da-tool.conf` 时,注意所配置符号一定存在 -- + 内核符号可在`/proc/kallsyms` 中查看,用户态程序符号 可用`objdump -d 二进制 | grep 函数名` 匹配正确的符号 -- + 某些函数名可能存在点(eg:A.B.C),暂**不支持配置此类函数**,例如经过gcc优化选项`-fipa-sra`优化后,函数符号后缀会有`.rsra.num`。 -+ + 某些函数名可能存在点(eg:A.B.C),暂**不支持配置此类函数**,例如经过gcc优化选项`-fipa-sra`优化后,函数符号后缀会有`.rsra.num`。 -+ + 应用程序名也不要有点,建议函数和应用程序**不要包含特殊符号** - + 某些函数可能短时间执行大量次数,此时`trace`很大,解析时间会很长,需要认为评估配置的函数运行情况,合理设置采样时间 - + 由于`trace`可能存在不完整的调用关系,很有可能在`trace`中存在的数据分析时舍弃,如果单次采样没有抓到需要的pid信息,建议多采样几次 -- + 有时`trace`中会有数据丢失,结果可能异常,常见的异常原因为`trace`过大,内核刷新数据时不正常,建议减小采样时间。 -+ + 有时`trace`中会有数据丢失,结果可能异常,常见的异常原因为`trace`过大,内核刷新数据时不正常,比如会出现同一个函数只有返回时间没有进入时间的现象,建议减小采样时间。 - + 不支持递归函数 -- -- -- -++ 本工具单个CPU所使用的跟踪缓存`RingBuffer`大小为 `40960kb` ,当单核的`trace`大小接近此值时数据可能异常,进而导致分析结果错误。 -++ 确保`trace` 中有需要采集的函数的完整调用栈 -diff --git a/extra-tools/da-tool/analysis/config.cpp b/extra-tools/da-tool/analysis/config.cpp -index ecbae2d..08420ad 100644 ---- a/extra-tools/da-tool/analysis/config.cpp -+++ b/extra-tools/da-tool/analysis/config.cpp -@@ -38,15 +38,16 @@ void Config::pathInit() - filename[FILE_TYPE_FUNC_CFG] = pathInput + "/analysis_config"; - - // output -- filename[FILE_TYPE_OUTPUT_DELAY] = pathOutput + "/delay.csv"; -+ filename[FILE_TYPE_OUTPUT_DELAY] = pathOutput + "/summary_delay.csv"; - filename[FILE_TYPE_OUTPUT_FUNC_STACK_DELALY] = pathOutput + "/func_delay_stack"; - filename[FILE_TYPE_OUTPUT_PROCESS_SCHED_INFO] = pathOutput + "/process_sched_info"; -+ filename[FILE_TYPE_OUTPUT_SUMMARY_SCHED_INFO] = pathOutput + "/summary_sched.csv"; - - // debug - filename[FILE_TYPE_OUTPUT_RUN_LOG] = pathOutputDebug + "/run.log"; - filename[FILE_TYPE_OUTPUT_FUNC_STACK_ALL_INFO] = pathOutput + "/func_stack_all_info"; -- filename[FILE_TYPE_DEBUG_TIME_PAIE] = pathOutputDebug + "/debug_time_pair.csv"; -- filename[FILE_TYPE_DEBUG_TRACE] = pathOutputDebug + "/debug_trace.csv"; -+ filename[FILE_TYPE_DEBUG_TIME_PAIE] = pathOutputDebug + "/debug_time_pair"; -+ filename[FILE_TYPE_DEBUG_TRACE] = pathOutputDebug + "/debug_trace"; - filename[FILE_TYPE_DEBUG_FUNC_STACK_TRACE] = pathOutputDebug + "/debug_funcstk_trace"; - filename[FILE_TYPE_DEBUG_REGEX] = pathOutputDebug + "/debug_resolve_function_trace"; - filename[FILE_TYPE_DEBUG_CONFIG] = pathOutputDebug + "/debug_config_resolve"; -@@ -161,7 +162,7 @@ void Config::configInit(int argc, char *argv[]) - case 'g': - if (std::stoi(optarg) < DEBUG_LEVEL_MAX) { - debugLevel = (DEBUG_LEVEL_E)std::stoi(optarg); -- } else { -+ } else { - std::cout << "debugLevel error" << std::endl; - } - std::cout << "debugLevel : " << debugLevel << std::endl; -@@ -172,7 +173,7 @@ void Config::configInit(int argc, char *argv[]) - default: - std::cout << "Unrecognized option" << std::endl; - break; -- } -+ } - } - - for (int i = optind; i < argc; ++i) { -diff --git a/extra-tools/da-tool/analysis/config.h b/extra-tools/da-tool/analysis/config.h -index 53b20dd..ccce0f2 100644 ---- a/extra-tools/da-tool/analysis/config.h -+++ b/extra-tools/da-tool/analysis/config.h -@@ -28,6 +28,7 @@ typedef enum { - FILE_TYPE_OUTPUT_FUNC_STACK_DELALY, - FILE_TYPE_OUTPUT_FUNC_STACK_ALL_INFO, - FILE_TYPE_OUTPUT_PROCESS_SCHED_INFO, -+ FILE_TYPE_OUTPUT_SUMMARY_SCHED_INFO, - - // debug 1 - FILE_TYPE_DEBUG_CONFIG, -@@ -36,10 +37,11 @@ typedef enum { - // debug 3 - FILE_TYPE_DEBUG_TRACE, - FILE_TYPE_DEBUG_REGEX, -- FILE_TYPE_DEBUG_FUNC_STACK_TRACE, - FILE_TYPE_DEBUG_TIME_PAIR_ALIGN, - FILE_TYPE_DEBUG_TIME_PAIE, - FILE_TYPE_DEBUG_DELAY_FUNC_STACK_TRACE, -+ // debug 4 -+ FILE_TYPE_DEBUG_FUNC_STACK_TRACE, - FILE_TYPE_MAX, - } FILE_TYPE_E; - -diff --git a/extra-tools/da-tool/analysis/function_stack.cpp b/extra-tools/da-tool/analysis/function_stack.cpp -index 3841627..fcc2a8d 100644 ---- a/extra-tools/da-tool/analysis/function_stack.cpp -+++ b/extra-tools/da-tool/analysis/function_stack.cpp -@@ -89,7 +89,7 @@ void FunctionStack::stackMapInit() - int maxDelay = 0; - - for (int i = 0; i < len; i++) { -- if (funcInfo.second.isInvalid[i] == 1 || delayMap[pid][functionIndex].isStackFinish[i] == true) { -+ if (funcInfo.second.isInvalid[i] == true || delayMap[pid][functionIndex].isStackFinish[i] == true) { - if (cfg.getDebugLevel() >= DEBUG_LEVEL_4) { - debugFile << "pid," << pid << ",functionIndex," << functionIndex << ",invalid" << std::endl; - } -@@ -106,7 +106,7 @@ void FunctionStack::stackMapInit() - } - - // The time pair has already been calculated, skip next time -- delayMap[pid][functionIndex].isStackFinish[i] = true; -+ delayMap[pid][functionIndex].isStackFinish[i] = true; - - std::string strFunctionStk = funcInfo.second.strFunctionStk[i]; - int fatherFunction = funcInfo.second.fatherFunction[i]; -@@ -170,13 +170,22 @@ void FunctionStack::saveFunctionStackToFile() - } - - for (const auto &processInfo : funcStackMap) { -- -+ int pid = processInfo.first; -+ if (cfg.filterCfgMap.size() != 0 && cfg.filterCfgMap.count(pid) == 0) { -+ continue; -+ } -+ if (processDelayMap[pid].delaySum[FS_DELAY_TYPE_GLOBAL] <= 0) { -+ continue; -+ } -+ file << "pid_" + std::to_string(pid); -+ file << "; " << processDelayMap[pid].delaySum[FS_DELAY_TYPE_LOCAL]; // for flame graph -+ file << ",localDelaySum," << processDelayMap[pid].delaySum[FS_DELAY_TYPE_LOCAL]; -+ file << ",localPercentage," << std::fixed << std::setprecision(3) << processDelayMap[pid].percentage[FS_DELAY_TYPE_LOCAL] * 100 << "%"; -+ file << ",globalDelaySum," << processDelayMap[pid].delaySum[FS_DELAY_TYPE_GLOBAL]; -+ file << ",globalPercentage," << std::fixed << std::setprecision(3) << processDelayMap[pid].percentage[FS_DELAY_TYPE_GLOBAL] * 100 << "%"; -+ file << std::endl; - for (const auto &stkInfo : processInfo.second) { -- int pid = processInfo.first; -- if (cfg.filterCfgMap.size() != 0 && cfg.filterCfgMap.count(pid) == 0) { -- continue; -- -- } -+ - file << "pid_" + std::to_string(pid); - std::stringstream ss(stkInfo.first); - std::string token; -@@ -188,14 +197,14 @@ void FunctionStack::saveFunctionStackToFile() - } - - file << " " << stkInfo.second.delaySum[FS_DELAY_TYPE_LOCAL]; // for flame graph -- file << ", localDelaySum ," << stkInfo.second.delaySum[FS_DELAY_TYPE_LOCAL]; -- file << ", localAvedelay ," << std::fixed << std::setprecision(6) << stkInfo.second.aveDelay[FS_DELAY_TYPE_LOCAL]; -- file << ", localPercentage, " << std::fixed << std::setprecision(3) << stkInfo.second.percentage[FS_DELAY_TYPE_LOCAL] * 100 << "%"; -- file << ", globalDelaySum ," << stkInfo.second.delaySum[FS_DELAY_TYPE_GLOBAL]; -- file << ", globalAvedelay, " << std::fixed << std::setprecision(6) << stkInfo.second.aveDelay[FS_DELAY_TYPE_GLOBAL]; -- file << ", globalPercentage, " << std::fixed << std::setprecision(3) << stkInfo.second.percentage[FS_DELAY_TYPE_GLOBAL] * 100 << "%"; -- file << ", times ," << std::setw(5) << std::setfill(' ') << stkInfo.second.num; -- file << ", (int)ret>=0 times ," << stkInfo.second.num - stkInfo.second.retValLessZeroTimes; -+ file << ",localDelaySum," << stkInfo.second.delaySum[FS_DELAY_TYPE_LOCAL]; -+ file << ",localAvedelay," << std::fixed << std::setprecision(6) << stkInfo.second.aveDelay[FS_DELAY_TYPE_LOCAL]; -+ file << ",localPercentage," << std::fixed << std::setprecision(3) << stkInfo.second.percentage[FS_DELAY_TYPE_LOCAL] * 100 << "%"; -+ file << ",globalDelaySum," << stkInfo.second.delaySum[FS_DELAY_TYPE_GLOBAL]; -+ file << ",globalAvedelay," << std::fixed << std::setprecision(6) << stkInfo.second.aveDelay[FS_DELAY_TYPE_GLOBAL]; -+ file << ",globalPercentage," << std::fixed << std::setprecision(3) << stkInfo.second.percentage[FS_DELAY_TYPE_GLOBAL] * 100 << "%"; -+ file << ",times ," << std::setw(5) << std::setfill(' ') << stkInfo.second.num; -+ file << ",(int)ret>=0 times," << stkInfo.second.num - stkInfo.second.retValLessZeroTimes; - - file << std::endl; - } -@@ -209,11 +218,7 @@ std::string getFatherFuncStk(const std::string &strFunctionStk) - { - size_t lastDotPos = strFunctionStk.find_last_of('.'); - if (lastDotPos != std::string::npos) { -- if (lastDotPos == 0) { -- return ".0"; -- } else { -- return strFunctionStk.substr(0, lastDotPos); -- } -+ return strFunctionStk.substr(0, lastDotPos); - } else { - return ""; - } -@@ -221,7 +226,6 @@ std::string getFatherFuncStk(const std::string &strFunctionStk) - - void FunctionStack::stackNodeMapInit() - { -- - for (const auto &processInfo : funcStackMap) { - int pid = processInfo.first; - if (stackNodeMap.count(pid) == 0) { -@@ -230,11 +234,7 @@ void FunctionStack::stackNodeMapInit() - } - - for (const auto &stkInfo : processInfo.second) { -- std::string strFunctionStk = stkInfo.first; -- if (stackNodeMap[pid].count(strFunctionStk) != 0) { -- StackNode node_tmp; -- stackNodeMap[pid].emplace(strFunctionStk, node_tmp); -- } -+ std::string strFunctionStk = ".0" + stkInfo.first; - int func_index_tmp = 0; - std::stringstream ss(strFunctionStk); - std::string token; -@@ -243,67 +243,111 @@ void FunctionStack::stackNodeMapInit() - func_index_tmp = std::stoi(token); - } - } -- stackNodeMap[pid][strFunctionStk].functionIndex = func_index_tmp; -+ - std::string fatherFuncStk = getFatherFuncStk(strFunctionStk); -+ StackNode node_tmp; -+ if (stackNodeMap[pid].count(strFunctionStk) == 0) { -+ stackNodeMap[pid].emplace(strFunctionStk, node_tmp); -+ } -+ if (stackNodeMap[pid].count(fatherFuncStk) == 0) { -+ stackNodeMap[pid].emplace(fatherFuncStk, node_tmp); -+ } -+ stackNodeMap[pid][strFunctionStk].functionIndex = func_index_tmp; - stackNodeMap[pid][fatherFuncStk].nextStack.emplace_back(strFunctionStk); - } - } - } - -+std::string removeRootStk(std::string strFunctionStk) -+{ -+ return strFunctionStk.substr(2); // remove ".0" -+} - --void FunctionStack::stackNodeMapDfs(int pid, int functionIndex, std::string strFunctionStk, int space_len) -+void FunctionStack::stackNodeMapDfs(int pid, bool endFlag, std::string strFunctionStk, std::string headStr) - { -+ std::string headStrTmp = headStr; - Config &cfg = Config::getInstance(); -- TimePair &tpInst = TimePair::getInstance(); - if (strFunctionStk == ".0") { -- std::cout << "├──pid:" << pid; -- int pidDelay = tpInst.getProcessValidTime(pid); -- if (pidDelay > 0) { -- std::cout << "{(" << tpInst.getProcessValidTime(pid) << ",100.000%)}"; -+ std::cout << "├──pid: " << pid; -+ if (processDelayMap[pid].delaySum[FS_DELAY_TYPE_GLOBAL] > 0) { -+ std::cout << "{"; -+ std::cout << "local:(" << processDelayMap[pid].delaySum[FS_DELAY_TYPE_LOCAL] << ", "; -+ std::cout << std::fixed << std::setprecision(3) << processDelayMap[pid].percentage[FS_DELAY_TYPE_LOCAL] * 100 << "%)"; -+ std::cout << ", global:(" << processDelayMap[pid].delaySum[FS_DELAY_TYPE_GLOBAL] << ", "; -+ std::cout << std::fixed << std::setprecision(3) << processDelayMap[pid].percentage[FS_DELAY_TYPE_GLOBAL] * 100 << "%)"; -+ std::cout << "}"; - } else { - std::cout << " data invalid!!!"; - } -- - std::cout << std::endl; - } else { -- -- for (int i = 0; i < space_len; i++) { -- if (i % SPLIT_SPACE_LEN == 0) -- -- -- { -- std::cout << "│"; -- } -+ std::cout << "│"; -+ if (endFlag == false) { -+ headStrTmp += "│"; -+ } -+ for (int i = 1; i < SPLIT_SPACE_LEN; i++) { - std::cout << " "; -+ headStrTmp += " "; -+ } -+ std::cout << headStr; -+ if (endFlag == false) { -+ std::cout << "├─────"; -+ } else { -+ std::cout << "└─────"; - } -- std::cout << "├─────" << cfg.IndexToFunction[stackNodeMap[pid][strFunctionStk].functionIndex]; -+ -+ std::cout << cfg.IndexToFunction[stackNodeMap[pid][strFunctionStk].functionIndex]; - std::cout << "{"; -- std::cout << "(local: " << funcStackMap[pid][strFunctionStk].delaySum[FS_DELAY_TYPE_LOCAL] << ", " << std::fixed << std::setprecision(3) << funcStackMap[pid][strFunctionStk].percentage[FS_DELAY_TYPE_LOCAL] * 100 << "%, " << funcStackMap[pid][strFunctionStk].aveDelay[FS_DELAY_TYPE_LOCAL] << ")"; -- std::cout << "(global:" << funcStackMap[pid][strFunctionStk].delaySum[FS_DELAY_TYPE_GLOBAL] << ", " << std::fixed << std::setprecision(3) << funcStackMap[pid][strFunctionStk].percentage[FS_DELAY_TYPE_GLOBAL] * 100 << "% ," << funcStackMap[pid][strFunctionStk].aveDelay[FS_DELAY_TYPE_GLOBAL] << ")"; -- std::cout << ", times:" << funcStackMap[pid][strFunctionStk].num; -- std::cout << ", (int)ret>=0 times:" << funcStackMap[pid][strFunctionStk].num - funcStackMap[pid][strFunctionStk].retValLessZeroTimes; -+ std::string noRootStk = removeRootStk(strFunctionStk); -+ std::cout << "local:(" << funcStackMap[pid][noRootStk].delaySum[FS_DELAY_TYPE_LOCAL] << ", "; -+ std::cout << std::fixed << std::setprecision(3) << funcStackMap[pid][noRootStk].percentage[FS_DELAY_TYPE_LOCAL] * 100 << "%, "; -+ std::cout << funcStackMap[pid][noRootStk].aveDelay[FS_DELAY_TYPE_LOCAL] << ")"; -+ std::cout << ", global:(" << funcStackMap[pid][noRootStk].delaySum[FS_DELAY_TYPE_GLOBAL] << ", "; -+ std::cout << std::fixed << std::setprecision(3) << funcStackMap[pid][noRootStk].percentage[FS_DELAY_TYPE_GLOBAL] * 100 << "%, "; -+ std::cout << funcStackMap[pid][noRootStk].aveDelay[FS_DELAY_TYPE_GLOBAL] << ")"; -+ std::cout << ", times:" << funcStackMap[pid][noRootStk].num; -+ std::cout << ", (int)ret>=0 times:" << funcStackMap[pid][noRootStk].num - funcStackMap[pid][noRootStk].retValLessZeroTimes; - std::cout << "}" << std::endl; - } - -- for (const auto &nextStack : stackNodeMap[pid][strFunctionStk].nextStack) { -- stackNodeMapDfs(pid, stackNodeMap[pid][strFunctionStk].functionIndex, nextStack, space_len + SPLIT_SPACE_LEN); -+ int len = stackNodeMap[pid][strFunctionStk].nextStack.size(); -+ for (int i = 0; i < len; i++) { -+ stackNodeMapDfs(pid, i == (len - 1), stackNodeMap[pid][strFunctionStk].nextStack[i], headStrTmp); - } -+} - -+void FunctionStack::processDelayAnalysis() -+{ -+ TimePair &tpInst = TimePair::getInstance(); -+ for (const auto &processInfo : stackNodeMap) { -+ int pid = processInfo.first; -+ if (processDelayMap.count(pid) == 0) { -+ ProcessDelay delaytmp; -+ processDelayMap.emplace(pid, delaytmp); -+ } -+ processDelayMap[pid].delaySum[FS_DELAY_TYPE_LOCAL] = tpInst.getProcessValidTime(pid); -+ processDelayMap[pid].delaySum[FS_DELAY_TYPE_GLOBAL] = tpInst.getProcessValidTime(pid); -+ for (const auto &firstStack : stackNodeMap[pid][".0"].nextStack) { -+ std::string noRootStk = removeRootStk(firstStack); -+ processDelayMap[pid].delaySum[FS_DELAY_TYPE_LOCAL] -= funcStackMap[pid][noRootStk].delaySum[FS_DELAY_TYPE_GLOBAL]; -+ -+ } -+ processDelayMap[pid].percentage[FS_DELAY_TYPE_LOCAL] = \ -+ processDelayMap[pid].delaySum[FS_DELAY_TYPE_LOCAL] * 1.0 / processDelayMap[pid].delaySum[FS_DELAY_TYPE_GLOBAL]; -+ processDelayMap[pid].percentage[FS_DELAY_TYPE_GLOBAL] = 1.0; -+ } - } - - void FunctionStack::stackNodeMapDisplay() - { - Config &cfg = Config::getInstance(); - std::cout << "Display the function delay of each pid " << std::endl; -- // std::cout << "format:function symbol{( delay sum (microsecond) ,percentage(occupy the entire pid runtime) ),average delay | num in trace}" << std::endl; - for (const auto &processInfo : stackNodeMap) { - int pid = processInfo.first; - if (cfg.filterCfgMap.size() == 0 || cfg.filterCfgMap.count(pid) != 0) { -- std::cout << "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────" << std::endl; -- stackNodeMapDfs(processInfo.first, 0, ".0", SPLIT_SPACE_LEN); -- std::cout << "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────" << std::endl; -+ std::cout << "│" << std::endl; -+ stackNodeMapDfs(processInfo.first, 0, ".0", ""); - } -- - } - std::cout << std::endl; - } -@@ -313,8 +357,9 @@ void FunctionStack::function_stack_proc() - delayMapInit(); - stackMapInit(); - stackMapAnalysis(); -- saveFunctionStackToFile(); - - stackNodeMapInit(); -+ processDelayAnalysis(); - stackNodeMapDisplay(); -+ saveFunctionStackToFile(); - } -\ No newline at end of file -diff --git a/extra-tools/da-tool/analysis/function_stack.h b/extra-tools/da-tool/analysis/function_stack.h -index 34781c3..9f6e2d7 100644 ---- a/extra-tools/da-tool/analysis/function_stack.h -+++ b/extra-tools/da-tool/analysis/function_stack.h -@@ -52,8 +52,15 @@ public: - std::vector delay; - }; - -+class ProcessDelay { -+public: -+ int delaySum[FS_DELAY_TYPE_MAX]; -+ double percentage[FS_DELAY_TYPE_MAX]; -+}; -+ - class StackNode { - public: -+ // if stk .0.1.2.3 , then .0.1's nextStack is .0.1.2 , functionIndex is 1 - int functionIndex; - std::vector nextStack; - }; -@@ -70,24 +77,24 @@ public: - ~FunctionStack() {} - - private: -+ std::unordered_map processDelayMap; - std::unordered_map> - funcStackMap; // [pid][strFunctionStk] - std::unordered_map> - delayMap; // [pid][functionIndex] , copy from trace_reslove - void delayMapInit(); - void stackMapInit(); -+ void processDelayAnalysis(); - - void stackMapAnalysis(); - void saveFunctionStackToFile(); - - private: // stack node - std::unordered_map> -- stackNodeMap; // [pid][strFunctionStk] -+ stackNodeMap; // [pid][".0" + strFunctionStk] - void stackNodeMapInit(); - void stackNodeMapDisplay(); -- void stackNodeMapDfs(int pid, int functionIndex, std::string strFunctionStk, -- int space_len); -- -+ void stackNodeMapDfs(int pid, bool endFlag, std::string strFunctionStk, std::string headStr); - public: - void function_stack_proc(); - }; -diff --git a/extra-tools/da-tool/analysis/sched_analysis.cpp b/extra-tools/da-tool/analysis/sched_analysis.cpp -index ba8c49f..aea3d25 100644 ---- a/extra-tools/da-tool/analysis/sched_analysis.cpp -+++ b/extra-tools/da-tool/analysis/sched_analysis.cpp -@@ -24,47 +24,21 @@ SchedAnalysis::SchedAnalysis() - - } - --void SchedAnalysis::processSchedAnalysisLoop(const int &pid, const int ×tamp, const int &coreIndex, LINE_TYPE_E lineType) -+void SchedAnalysis::processSchedAnalysisLoop(const int &pid, const int ×tamp, const int &coreIndex) - { - if (processSchedMap.count(pid) != 0) { - ProcessSchedInfo tmp; - processSchedMap.emplace(pid, tmp); - } - int size = processSchedMap[pid].coreTrace.size(); -- if (lineType == LINE_TYPE_FUNC) { -- if (size == 0) { -- ProcessCoreTrace pct; -- pct.startTime = timestamp; -- pct.endTime = 0; -- pct.coreIndex = coreIndex; -- processSchedMap[pid].coreTrace.emplace_back(pct); -- } else { -- processSchedMap[pid].coreTrace[size - 1].endTime = timestamp; -- } -- -- } else if (lineType == LINE_TYPE_SCHED_SWITCH) // pid1 - > pidn -- { -- if (size != 0) { -- processSchedMap[pid].coreTrace[size - 1].endTime = timestamp; -- } -- ProcessCoreTrace pct; -- pct.startTime = timestamp; -- pct.endTime = timestamp; -- pct.coreIndex = -1; -- processSchedMap[pid].coreTrace.emplace_back(pct); -- -- } else if (lineType == LINE_TYPE_SCHED_SWITCH_RET) // pidm - > pid1 -- { -- if (size != 0) { -- processSchedMap[pid].coreTrace[size - 1].endTime = timestamp; -- } -- ProcessCoreTrace pct; -- pct.startTime = timestamp; -- pct.endTime = timestamp; -- pct.coreIndex = coreIndex; -- processSchedMap[pid].coreTrace.emplace_back(pct); -+ ProcessCoreTrace pct; -+ pct.startTime = timestamp; -+ pct.endTime = timestamp; -+ pct.coreIndex = coreIndex; -+ if (size != 0) { -+ processSchedMap[pid].coreTrace[size - 1].endTime = timestamp; - } -- -+ processSchedMap[pid].coreTrace.emplace_back(pct); - } - - void SchedAnalysis::schedInfoProc() -@@ -82,19 +56,17 @@ void SchedAnalysis::schedInfoProc() - for (const auto &line_info_tmp : slv.getTraceLine()) { - std::string functionName = line_info_tmp.functionName; - int pid = line_info_tmp.pid; -- if (cfg.funcCfgMap.count(functionName) == 0 || pid == 0) { -+ if (cfg.funcCfgMap.count(functionName) == 0) { - continue; - } - int timestamp = line_info_tmp.timestamp; - int coreIndex = line_info_tmp.core; - int functionIndex = cfg.funcCfgMap[functionName].functionIndex; - -- if (functionIndex != sched_switch_funcidx) { -- processSchedAnalysisLoop(pid, timestamp, coreIndex, LINE_TYPE_FUNC); -- } else { -+ if (functionIndex == sched_switch_funcidx) { - int nextPid = line_info_tmp.schedSwitchLine.nextPid; -- processSchedAnalysisLoop(pid, timestamp, coreIndex, LINE_TYPE_SCHED_SWITCH); -- processSchedAnalysisLoop(nextPid, timestamp, coreIndex, LINE_TYPE_SCHED_SWITCH_RET); -+ processSchedAnalysisLoop(pid, timestamp, -1); // pid1 - > pidn -+ processSchedAnalysisLoop(nextPid, timestamp, coreIndex); // pidm - > pid1 - } - } - } -@@ -105,13 +77,15 @@ void SchedAnalysis::schedInfoAnalysis() - int lastCoreIndex = -1; - int delaySum = 0; - int delaySched = 0; -- int cpuSwichTimes = 0; -+ int schedSwitchTimes = 0; -+ int cpuSwitchTimes = 0; - for (auto &coreTrace : sched_tmp.second.coreTrace) { - int delay = coreTrace.endTime - coreTrace.startTime; - int coreIndex = coreTrace.coreIndex; - delaySum += delay; - if (coreIndex == -1) { - delaySched += delay; -+ schedSwitchTimes++; - } else { - sched_tmp.second.runTimeOfCore[coreIndex] += delay; - } -@@ -121,13 +95,14 @@ void SchedAnalysis::schedInfoAnalysis() - } - - if (lastCoreIndex != coreIndex && coreIndex != -1) { -- cpuSwichTimes++; -+ cpuSwitchTimes++; - lastCoreIndex = coreTrace.coreIndex; - } -- - } - sched_tmp.second.schedSwitchDelay = delaySched; -- sched_tmp.second.cpuSwichTimes = cpuSwichTimes; -+ sched_tmp.second.schedSwitchTimes = schedSwitchTimes; -+ sched_tmp.second.percentageSchedSwitch = delaySum == 0? 0.0 : delaySched * 1.0 / delaySum; -+ sched_tmp.second.cpuSwitchTimes = cpuSwitchTimes; - sched_tmp.second.delaySum = delaySum; - } - } -@@ -147,10 +122,10 @@ void SchedAnalysis::saveSchedInfoToFile() - continue; - } - file << "pid," << pid << ","; -- file << "delaySum ," << sched_tmp.second.delaySum << ","; -- file << "schedSwitchDelay ," << sched_tmp.second.schedSwitchDelay << ","; -- file << "runtime ," << sched_tmp.second.delaySum - sched_tmp.second.schedSwitchDelay << ","; -- file << "cpuSwichTimes ," << sched_tmp.second.cpuSwichTimes << ","; -+ file << "delaySum," << sched_tmp.second.delaySum << ","; -+ file << "schedSwitchDelay," << sched_tmp.second.schedSwitchDelay << ","; -+ file << "runtime," << sched_tmp.second.delaySum - sched_tmp.second.schedSwitchDelay << ","; -+ file << "cpuSwitchTimes," << sched_tmp.second.cpuSwitchTimes << ","; - file << std::endl; - for (int coreIndex = 0; coreIndex < sched_tmp.second.runTimeOfCore.size(); coreIndex++) { - int run_time = sched_tmp.second.runTimeOfCore[coreIndex]; -@@ -171,9 +146,38 @@ void SchedAnalysis::saveSchedInfoToFile() - file.close(); - } - -+void SchedAnalysis::saveSchedInfoSummaryToFile() -+{ -+ Config &cfg = Config::getInstance(); -+ std::ofstream file(cfg.filename[FILE_TYPE_OUTPUT_SUMMARY_SCHED_INFO], std::ios::out | std::ios::trunc); -+ if (!file) { -+ std::cout << "file open failed:" << cfg.filename[FILE_TYPE_OUTPUT_SUMMARY_SCHED_INFO] << std::endl; -+ return; -+ } -+ file << "pid,delaySum,schedSwitchDelay,schedSwitchPercentage,schedSwitchTimes,cpuSwitchTimes"; -+ file << std::endl; -+ TraceResolve &slv = TraceResolve::getInstance(); -+ for (const auto &sched_tmp : processSchedMap) { -+ int pid = sched_tmp.first; -+ if (pid == 0) { -+ continue; -+ } -+ file << pid << ","; -+ file << sched_tmp.second.delaySum << ","; -+ file << sched_tmp.second.schedSwitchDelay << ","; -+ file << std::fixed << std::setprecision(3) << sched_tmp.second.percentageSchedSwitch * 100 << "%,"; -+ file << sched_tmp.second.schedSwitchTimes << ","; -+ file << sched_tmp.second.cpuSwitchTimes << ","; -+ file << std::endl; -+ } -+ -+ file.close(); -+} -+ - void SchedAnalysis::schedAnalysisProc() - { - schedInfoProc(); - schedInfoAnalysis(); - saveSchedInfoToFile(); -+ saveSchedInfoSummaryToFile(); - } -diff --git a/extra-tools/da-tool/analysis/sched_analysis.h b/extra-tools/da-tool/analysis/sched_analysis.h -index dd35764..85036ce 100644 ---- a/extra-tools/da-tool/analysis/sched_analysis.h -+++ b/extra-tools/da-tool/analysis/sched_analysis.h -@@ -34,7 +34,9 @@ public: - std::vector - coreTrace; // CPU information of pid in each time period - int schedSwitchDelay; -- int cpuSwichTimes; -+ int schedSwitchTimes; -+ double percentageSchedSwitch; -+ int cpuSwitchTimes; - int delaySum; - }; - -@@ -68,10 +70,11 @@ private: // process sched info - std::unordered_map processSchedMap; // [pid] - // std::vector > allCpuSchedInfo; // [coreIndex] - void processSchedAnalysisLoop(const int &pid, const int ×tamp, -- const int &coreIndex, LINE_TYPE_E line_type); -+ const int &coreIndex); - void schedInfoProc(); - void schedInfoAnalysis(); - void saveSchedInfoToFile(); -+ void saveSchedInfoSummaryToFile(); - - public: - void schedAnalysisProc(); -diff --git a/extra-tools/da-tool/analysis/time_pair.cpp b/extra-tools/da-tool/analysis/time_pair.cpp -index b9e16a6..037bce1 100644 ---- a/extra-tools/da-tool/analysis/time_pair.cpp -+++ b/extra-tools/da-tool/analysis/time_pair.cpp -@@ -48,6 +48,16 @@ typedef enum { - TRACE_INFO_SHCEMAX, - } TRACE_INFO_SCHED_SWITCH_E; - -+typedef enum { -+ DEBUG_POS_0, -+ DEBUG_POS_1, -+ DEBUG_POS_2, -+ DEBUG_POS_3, -+ DEBUG_POS_4, -+ DEBUG_POS_5, -+ DEBUG_POS_MAX, -+} DEBUG_POS_E; -+ - TimePair::TimePair() - { - } -@@ -91,38 +101,35 @@ void TimePair::saveFuncStkDebugToFile(std::ofstream &file, const int &pid, const - } - int TimePair::getFatherFunctionIdLoop(const int &pid, const int &functionIndex, const int &isRet, int &debugPos) - { -- debugPos = 0; -+ debugPos = DEBUG_POS_0; - -- if (funcStkMap.count(pid) == 0) -- { -+ if (funcStkMap.count(pid) == 0) { - std::vector tmp; - funcStkMap.emplace(pid, tmp); - } - -- if (funcStkMap[pid].size() == 0) -- { -+ if (funcStkMap[pid].size() == 0) { - if (isRet) // stk empty - { -- debugPos = 1; -+ debugPos = DEBUG_POS_1; - return 0; - } else { - funcStkMap[pid].emplace_back(functionIndex); -- debugPos = 2; -+ debugPos = DEBUG_POS_2; - } - } else { -- if (funcStkMap[pid][funcStkMap[pid].size() - 1] == functionIndex) // stk not empty -- { -+ if (funcStkMap[pid][funcStkMap[pid].size() - 1] == functionIndex) { // stk not empty - funcStkMap[pid].pop_back(); // match ,pop - if (funcStkMap[pid].size() > 0) { -- debugPos = 3; -+ debugPos = DEBUG_POS_3; - return funcStkMap[pid][funcStkMap[pid].size() - 1]; - } else { -- debugPos = 4; -+ debugPos = DEBUG_POS_4; - return 0; // can't find father function - } - } else { // function unmath , push - funcStkMap[pid].emplace_back(functionIndex); -- debugPos = 5; -+ debugPos = DEBUG_POS_5; - return funcStkMap[pid][funcStkMap[pid].size() - 2]; - } - } -@@ -140,18 +147,20 @@ void TimePair::timePairUpdateLoop(const int &pid, const int &functionIndex, cons - - if (timePairMap[pid].count(functionIndex) == 0) { - TimePairInfo infoTmp; -+ infoTmp.maxStartTimeInvaild = 0; -+ infoTmp.minEndTimeInvalid = INT_MAX; - timePairMap[pid].emplace(functionIndex, infoTmp); - } - - if (isRet) { -- if (timePairMap[pid][functionIndex].startTime.size() == 0) // fist is endtime ,startime=endtime -- { -+ if (timePairMap[pid][functionIndex].startTime.size() == 0) { // fist is endtime ,startime=endtime - timePairMap[pid][functionIndex].startTime.emplace_back(timestamp); - timePairMap[pid][functionIndex].childFuncTimes.emplace_back(0); - timePairMap[pid][functionIndex].strFunctionStk.emplace_back('.' + std::to_string(functionIndex)); - timePairMap[pid][functionIndex].fatherFunction.emplace_back(0); - timePairMap[pid][functionIndex].fatherFuncPos.emplace_back(-1); -- timePairMap[pid][functionIndex].isInvalid.emplace_back(1); // only have retval , invalid -+ timePairMap[pid][functionIndex].isInvalid.emplace_back(true); // only have retval , invalid -+ timePairMap[pid][functionIndex].maxStartTimeInvaild = timestamp; - } // Be careful when adding else branches. Only when there is no exit at the entrance, you will not be able to enter else - timePairMap[pid][functionIndex].endTime.emplace_back(timestamp); - if (line_info_tmp.args.size() != 0) { -@@ -162,13 +171,10 @@ void TimePair::timePairUpdateLoop(const int &pid, const int &functionIndex, cons - } else { - timePairMap[pid][functionIndex].startTime.emplace_back(timestamp); - timePairMap[pid][functionIndex].childFuncTimes.emplace_back(0); -- - std::string father_func_stk = fatherFunction != 0 ? \ - timePairMap[pid][fatherFunction].strFunctionStk[timePairMap[pid][fatherFunction].strFunctionStk.size() - 1] : ""; -- - std::string strFunctionStk = father_func_stk + '.' + std::to_string(functionIndex); - timePairMap[pid][functionIndex].strFunctionStk.emplace_back(strFunctionStk); -- - timePairMap[pid][functionIndex].fatherFunction.emplace_back(fatherFunction); - int fatherFuncPos = 0; - if (fatherFunction == 0) { -@@ -178,8 +184,7 @@ void TimePair::timePairUpdateLoop(const int &pid, const int &functionIndex, cons - timePairMap[pid][fatherFunction].childFuncTimes[fatherFuncPos]++; - } - timePairMap[pid][functionIndex].fatherFuncPos.emplace_back(fatherFuncPos); -- -- timePairMap[pid][functionIndex].isInvalid.emplace_back(0); -+ timePairMap[pid][functionIndex].isInvalid.emplace_back(false); - } - } - -@@ -199,6 +204,7 @@ void TimePair::timePairAlignment() - for (auto &processInfo : timePairMap) { - for (auto &funcInfo : processInfo.second) { - int diffLen = funcInfo.second.startTime.size() - funcInfo.second.endTime.size(); -+ bool updateEndTimeInvalid = false; - if (diffLen == 0) { - if (isOutputDebugFile) { - file << diffLen << "," << processInfo.first << " ," << funcInfo.first << " ," << \ -@@ -215,8 +221,7 @@ void TimePair::timePairAlignment() - } - } else { - if (isOutputDebugFile) { -- if (diffLen > 1) -- { -+ if (diffLen > 1) { - // A normal trace usually does not have a startTime greater than endtime dimension greater than 1, - // indicating that a function has not returned and has been pushed back onto the stack. - file << "run error(diffLen>1)!!!,"; -@@ -225,7 +230,12 @@ void TimePair::timePairAlignment() - funcInfo.second.startTime.size() << " ," << funcInfo.second.endTime.size() << std::endl; - } - for (int i = 0; i < diffLen; i++) { -- funcInfo.second.endTime.emplace_back(funcInfo.second.startTime[funcInfo.second.startTime.size() - diffLen + i]); -+ int endTime = funcInfo.second.startTime[funcInfo.second.startTime.size() - diffLen + i]; -+ funcInfo.second.endTime.emplace_back(endTime); -+ if (updateEndTimeInvalid == false) { -+ funcInfo.second.minEndTimeInvalid = endTime; -+ updateEndTimeInvalid = true; -+ } - } - } - } -@@ -236,52 +246,50 @@ void TimePair::timePairAlignment() - - void TimePair::timePairMarkInvalidData() - { -- // Find each function from front to back, find the first time pair that is not equal as the starting time point of the function, -- // and then compare the maximum of each function as the global starting time point of the pid -- // Find each function from the back to the front, find the first time pair that is not equal as the end time point of the function, -- // and then compare the smallest of each function as the global end point of the pid - for (auto &processInfo : timePairMap) { - int pid = processInfo.first; - VaildRange vr_tmp; - validTimeOfPid.emplace(pid, vr_tmp); -- int validStartTime = 0; -- int validEndTime = INT_MAX; -+ int validStartTime = INT_MAX; -+ int validEndTime = 0; -+ int maxInvalidStartTime = 0; -+ int minInvalidEndTime = INT_MAX; - -+ // maxInvalidStartTime choose max value of every func -+ for (const auto &funcInfo : processInfo.second) { -+ if (funcInfo.second.maxStartTimeInvaild > maxInvalidStartTime) { -+ maxInvalidStartTime = funcInfo.second.maxStartTimeInvaild; -+ } -+ if (funcInfo.second.minEndTimeInvalid < minInvalidEndTime) { -+ minInvalidEndTime = funcInfo.second.minEndTimeInvalid; -+ } -+ } -+ // [start, maxInvalidStartTime] and [minInvalidEndTime, end] data invalid - for (auto &funcInfo : processInfo.second) { - for (int i = 0; i < funcInfo.second.startTime.size(); i++) { -- if (funcInfo.second.endTime[i] - funcInfo.second.startTime[i] > 0) { -- if (funcInfo.second.startTime[i] > validStartTime) { -- validStartTime = funcInfo.second.startTime[i]; -- } -- break; -+ if (funcInfo.second.startTime[i] <= maxInvalidStartTime) { -+ funcInfo.second.isInvalid[i] = true; -+ } -+ if (funcInfo.second.endTime[i] >= minInvalidEndTime) { -+ funcInfo.second.isInvalid[i] = true; - } - } -+ } - -- for (int i = funcInfo.second.startTime.size() - 1; i >= 0; i--) { -- if (funcInfo.second.endTime[i] - funcInfo.second.startTime[i] > 0) { -- if (funcInfo.second.endTime[i] < validEndTime) { -+ for (const auto &funcInfo : processInfo.second) { -+ for (int i = 0; i < funcInfo.second.startTime.size(); i++) { -+ if (funcInfo.second.isInvalid[i] != true) { -+ if (funcInfo.second.startTime[i] <= validStartTime) { -+ validStartTime = funcInfo.second.startTime[i]; -+ } -+ if (funcInfo.second.endTime[i] >= validEndTime) { - validEndTime = funcInfo.second.endTime[i]; - } -- break; - } - } - } -- -- - validTimeOfPid[pid].validStartTime = validStartTime; - validTimeOfPid[pid].validEndTime = validEndTime; -- -- // [validStartTime,validEndTime] out range invalid -- for (auto &funcInfo : processInfo.second) { -- for (int i = 0; i < funcInfo.second.startTime.size(); i++) { -- if (funcInfo.second.startTime[i] < validStartTime) { -- funcInfo.second.isInvalid[i] = 1; -- } -- if (funcInfo.second.endTime[i] > validEndTime) { -- funcInfo.second.isInvalid[i] = 1; -- } -- } -- } - } - - Config &cfg = Config::getInstance(); -@@ -340,49 +348,69 @@ void TimePair::timePairMatching() - file.close(); - } - -+void TimePair::functionDelayUpdate() -+{ -+ for (auto &processInfo : timePairMap) { -+ for (auto &funcInfo : processInfo.second) { -+ for (int i = 0; i < funcInfo.second.startTime.size(); i++) { -+ funcInfo.second.delay.emplace_back(funcInfo.second.endTime[i] - funcInfo.second.startTime[i]); -+ } -+ } -+ } -+} -+ - void TimePair::functionStatisticsAnalysis() - { - for (auto &processInfo : timePairMap) { - for (auto &funcInfo : processInfo.second) { -- int maxDelay = 0; -- int minDelay = INT_MAX; -- int delaySum = 0; -- int maxDelayPos = 0; -- int minDelayPos = 0; -- int len = funcInfo.second.startTime.size(); -- int valid_len = 0; -+ std::vector delayTmp[DELAY_INFO_MAX]; -+ int len = funcInfo.second.delay.size(); -+ int delaySum[DELAY_INFO_MAX] = { 0 }; - for (int i = 0; i < len; i++) { -- -- int delay = funcInfo.second.endTime[i] - funcInfo.second.startTime[i]; -- funcInfo.second.delay.emplace_back(delay); -- int isInvalid = funcInfo.second.isInvalid[i]; -- if (isInvalid) { -+ if (funcInfo.second.isInvalid[i]) { - continue; - } -- -- if (maxDelay < delay) { -- maxDelay = delay; -- maxDelayPos = i; -+ int delay = funcInfo.second.delay[i]; -+ delayTmp[DELAY_INFO_ALL].emplace_back(delay); -+ delaySum[DELAY_INFO_ALL] += delay; -+ if ((int)funcInfo.second.retVal[i] < 0) { -+ delayTmp[DELAY_INFO_RETVAL_LESS_ZERO].emplace_back(delay); -+ delaySum[DELAY_INFO_RETVAL_LESS_ZERO] += delay; -+ } else { -+ delayTmp[DELAY_INFO_RETVAL_GEOREQ_ZERO].emplace_back(delay); -+ delaySum[DELAY_INFO_RETVAL_GEOREQ_ZERO] += delay; - } -- if (minDelay > delay) { -- minDelay = delay; -- minDelayPos = i; -+ } -+ for (int i = 0; i < DELAY_INFO_MAX; i++) { -+ DELAY_INFO_E type = (DELAY_INFO_E)i; -+ sort(delayTmp[type].begin(), delayTmp[type].end()); -+ int valid_len = delayTmp[type].size(); -+ if (valid_len > 0) { -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_SUM] = delaySum[type]; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_MIN] = delayTmp[type][0]; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_MAX] = delayTmp[type][valid_len - 1]; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_P50] = delayTmp[type][ceil(0.50 * valid_len) - 1]; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_P80] = delayTmp[type][ceil(0.80 * valid_len) - 1]; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_P95] = delayTmp[type][ceil(0.95 * valid_len) - 1]; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_P99] = delayTmp[type][ceil(0.99 * valid_len) - 1]; -+ funcInfo.second.summary.callTimes[type] = valid_len; -+ funcInfo.second.summary.aveDelay[type] = delaySum[type] * 1.0 / valid_len; -+ } else { -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_SUM] = 0; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_MIN] = 0; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_MAX] = 0; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_P50] = 0; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_P80] = 0; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_P95] = 0; -+ funcInfo.second.summary.delay[type][DELAY_SUMMARY_P99] = 0; -+ funcInfo.second.summary.callTimes[type] = 0; -+ funcInfo.second.summary.aveDelay[type] = 0; - } -- -- delaySum += delay; -- valid_len++; - } -- -- funcInfo.second.aveDelay = valid_len == 0 ? 0.0 : delaySum * 1.0 / valid_len; -- funcInfo.second.minDelay = minDelay; -- funcInfo.second.maxDelay = maxDelay; -- funcInfo.second.maxDelayPos = maxDelayPos; -- funcInfo.second.minDelayPos = minDelayPos; -- funcInfo.second.delaySum = delaySum; -- funcInfo.second.callTimes = valid_len; - } - } - } -+ - void TimePair::saveTimePairToFile() - { - Config &cfg = Config::getInstance(); -@@ -454,38 +482,39 @@ void TimePair::saveTimePairToFile() - void TimePair::saveDelayInfoToFile() - { - Config &cfg = Config::getInstance(); -- if (cfg.getDebugLevel() < DEBUG_LEVEL_1) { -- return; -- } - std::ofstream file(cfg.filename[FILE_TYPE_OUTPUT_DELAY], std::ios::out | std::ios::trunc); - if (!file) { - std::cout << "file open failed:" << cfg.filename[FILE_TYPE_OUTPUT_DELAY] << std::endl; - return; - } - -- bool is_filter = true; -- if (cfg.getDebugLevel() < DEBUG_LEVEL_3) { -- is_filter = false; -- } - TraceResolve &trace_resolve_inst = TraceResolve::getInstance(); -+ file << "note : (r>=0) => (int)return value >=0; ave => average delay,"; -+ file << "pid,function,"; -+ file << "call_times,ave,sum,min,max,p50,p80,p95,p99,"; -+ file << "call_times(r>=0),ave(r>=0),sum(r>=0),min(r>=0),max(r>=0),p50(r>=0),p80(r>=0),p95(r>=0),p99(r>=0),"; -+ file << "call_times(r<0),ave(r<0),sum(r<0),min(r<0),max(r<0),p50(r<0),p80(r<0),p95(r<0),p99(r<0),"; -+ file << std::endl; - for (const auto &processInfo : timePairMap) { - for (const auto &funcInfo : processInfo.second) { -- if (!is_filter || (cfg.filterCfgMap.size() != 0 && cfg.filterCfgMap.count(processInfo.first) == 0)) { -+ if (cfg.filterCfgMap.size() != 0 && cfg.filterCfgMap.count(processInfo.first) == 0) { - continue; - } -- file << "pid:" << processInfo.first << "," << std::endl; -- file << "functionIndex:" << funcInfo.first << "," << cfg.IndexToFunction[funcInfo.first] << std::endl; -- -- file << "aveDelay:" << funcInfo.second.aveDelay << std::endl; -- file << "maxDelay:" << funcInfo.second.maxDelay << std::endl; -- file << "minDelay:" << funcInfo.second.minDelay << std::endl; -- file << "delaySum:" << funcInfo.second.delaySum << std::endl; -- -- file << "call times:" << funcInfo.second.callTimes << std::endl; -- file << "max_delay_at:" << std::fixed << std::setprecision(6) << \ -- trace_resolve_inst.convertTimeIntToDouble(funcInfo.second.startTime[funcInfo.second.maxDelayPos]) << std::endl; -- file << "min_delay_at:" << std::fixed << std::setprecision(6) << \ -- trace_resolve_inst.convertTimeIntToDouble(funcInfo.second.startTime[funcInfo.second.minDelayPos]) << std::endl; -+ if (funcInfo.second.summary.callTimes[DELAY_INFO_ALL] <= 0) { -+ continue; -+ } -+ file << "," << processInfo.first << ","; -+ file << cfg.IndexToFunction[funcInfo.first] << ","; -+ -+ for (int i = 0; i < DELAY_INFO_MAX; i++) { -+ DELAY_INFO_E infoType = (DELAY_INFO_E)i; -+ file << funcInfo.second.summary.callTimes[infoType] << ","; -+ file << std::fixed << std::setprecision(3) << funcInfo.second.summary.aveDelay[infoType] << ","; -+ for (int j = 0; j < DELAY_SUMMARY_ENUM_MAX; j++) { -+ DELAY_SUMMARY_E summaryType = (DELAY_SUMMARY_E)j; -+ file << funcInfo.second.summary.delay[infoType][summaryType] << ","; -+ } -+ } - file << std::endl; - } - } -@@ -493,6 +522,7 @@ void TimePair::saveDelayInfoToFile() - file.close(); - } - -+ - int TimePair::getProcessValidTime(const int &pid) - { - if (validTimeOfPid.count(pid) != 0) { -@@ -502,6 +532,7 @@ int TimePair::getProcessValidTime(const int &pid) - } - - } -+ - void TimePair::timePairAnalysis() - { - // step 1 : convert trace to time pair -@@ -511,10 +542,9 @@ void TimePair::timePairAnalysis() - // step 3 : mark date whether invalid - timePairMarkInvalidData(); - // step 4: compute statistics rst -+ functionDelayUpdate(); - functionStatisticsAnalysis(); -- - // step 5: save rst - saveTimePairToFile(); - saveDelayInfoToFile(); -- - } -\ No newline at end of file -diff --git a/extra-tools/da-tool/analysis/time_pair.h b/extra-tools/da-tool/analysis/time_pair.h -index 70dee67..9d3e757 100644 ---- a/extra-tools/da-tool/analysis/time_pair.h -+++ b/extra-tools/da-tool/analysis/time_pair.h -@@ -27,6 +27,31 @@ public: - int validEndTime; - }; - -+typedef enum { -+ DELAY_SUMMARY_SUM, -+ DELAY_SUMMARY_MIN, -+ DELAY_SUMMARY_MAX, -+ DELAY_SUMMARY_P50, -+ DELAY_SUMMARY_P80, -+ DELAY_SUMMARY_P95, -+ DELAY_SUMMARY_P99, -+ DELAY_SUMMARY_ENUM_MAX, -+} DELAY_SUMMARY_E; -+ -+typedef enum { -+ DELAY_INFO_ALL, -+ DELAY_INFO_RETVAL_GEOREQ_ZERO, // ret>=0 -+ DELAY_INFO_RETVAL_LESS_ZERO, // ret<0 -+ DELAY_INFO_MAX, -+} DELAY_INFO_E; -+ -+class TimePairSummary { -+public: -+ double aveDelay[DELAY_INFO_MAX]; -+ int callTimes[DELAY_INFO_MAX]; -+ int delay[DELAY_INFO_MAX][DELAY_SUMMARY_ENUM_MAX]; -+}; -+ - class TimePairInfo { - public: - // The time relative to the integer time of the first trace , Unit: -@@ -42,11 +67,15 @@ public: - std::vector fatherFuncPos; - std::vector childFuncTimes; // Number of calls to other functions. - std::vector retVal; // return value -- std::vector isInvalid; // isInvalid=true indicates that there is no -+ std::vector isInvalid; // isInvalid=true indicates that there is no - // complete call stack data - std::vector strFunctionStk; - -+ int maxStartTimeInvaild; -+ int minEndTimeInvalid; -+ - // analysis result -+ TimePairSummary summary; - double aveDelay; - int maxDelay; - int minDelay; -@@ -86,6 +115,7 @@ private: - const int &functionIndex, const int &isRet, - const int ×tamp, const int &fatherFunction, - const int &debugPos); -+ void functionDelayUpdate(); - void functionStatisticsAnalysis(); - - void timePairMatching(); -diff --git a/extra-tools/da-tool/analysis/trace_resolve.cpp b/extra-tools/da-tool/analysis/trace_resolve.cpp -index 8224346..8424464 100644 ---- a/extra-tools/da-tool/analysis/trace_resolve.cpp -+++ b/extra-tools/da-tool/analysis/trace_resolve.cpp -@@ -95,7 +95,7 @@ void TraceResolve::resolveTrace() - while (getline(file, line)) { - line_num++; - if (line_num % 10000 == 0) { -- std::cout << "resolve:" << line_num << " lines," << regex_num << " lines match " << std::endl; -+ std::cout << regex_num << "/" << line_num << " (matched/lines)" << std::endl; - } - if (line_num < cfg.readTraceBegin) { - continue; -@@ -141,8 +141,7 @@ void TraceResolve::resolveTrace() - } - - if (isMatch) { -- if (isFirstMatch) -- { -+ if (isFirstMatch) { - startTimeIntPart = std::stoi(match[TRACE_INFO_TIMESTAMP_INT].str()); - isFirstMatch = false; - } -diff --git a/extra-tools/da-tool/analysis/trace_resolve.h b/extra-tools/da-tool/analysis/trace_resolve.h -index feec87f..df330d5 100644 ---- a/extra-tools/da-tool/analysis/trace_resolve.h -+++ b/extra-tools/da-tool/analysis/trace_resolve.h -@@ -38,13 +38,6 @@ typedef enum - PROCESS_STATE_MAX, - } PROCESS_STATE_E; - --typedef enum { -- LINE_TYPE_FUNC, -- LINE_TYPE_SCHED_SWITCH, -- LINE_TYPE_SCHED_SWITCH_RET, -- LINE_TYPE_MAX, --} LINE_TYPE_E; -- - class SchedSwitchLine { - public: - int prevPid; -diff --git a/extra-tools/da-tool/conf/da-tool.conf b/extra-tools/da-tool/conf/da-tool.conf -index df1560a..4c823bc 100644 ---- a/extra-tools/da-tool/conf/da-tool.conf -+++ b/extra-tools/da-tool/conf/da-tool.conf -@@ -1,12 +1,12 @@ - # /etc/da-tool.conf - --# kernel symbol config --k,ksys_write,udp_recvmsg,udp_sendmsg,dev_queue_xmit,udp_send_skb,sock_recvmsg,__skb_recv_udp,udp_rcv -+# kernel symbol config (ref: /proc/kallsyms) -+k,udp_recvmsg,udp_sendmsg,dev_queue_xmit,udp_send_skb,sock_recvmsg,__skb_recv_udp,udp_rcv - - # sched config - s,sched_switch - - # user symbol config (format : u,path,bin_name,func1,func2,...,funcN) --#u,/path/,bin_name,sendto -+# u,/path/,bin_name,sendto - - # end -diff --git a/extra-tools/da-tool/main.cpp b/extra-tools/da-tool/main.cpp -index 365b1f3..b6ec46d 100644 ---- a/extra-tools/da-tool/main.cpp -+++ b/extra-tools/da-tool/main.cpp -@@ -24,23 +24,18 @@ int main(int argc, char *argv[]) - cout << "analysis start..." << endl; - Config &cfg = Config::getInstance(); - cfg.configInit(argc, argv); -- cout << "analysis Config completed" << endl; -- -+ cout << "analysis resolve..." << endl; - TraceResolve &trace_resolve_inst = TraceResolve::getInstance(); - trace_resolve_inst.trace_resolve_proc(); -- cout << "analysis resolve completed" << endl; - - TimePair &tpInst = TimePair::getInstance(); - tpInst.timePairAnalysis(); -- cout << "analysis time pair completed" << endl; - - SchedAnalysis &schedAnalysisInst = SchedAnalysis::getInstance(); - schedAnalysisInst.schedAnalysisProc(); -- cout << "analysis sched completed" << endl; - - FunctionStack &fstk = FunctionStack::getInstance(); - fstk.function_stack_proc(); -- cout << "analysis FunctionStack completed" << endl; - cout << "analysis finish" << endl; - return 0; - } -\ No newline at end of file -diff --git a/extra-tools/da-tool/script/da-tool.sh b/extra-tools/da-tool/script/da-tool.sh -index 8329a15..ccc3443 100644 ---- a/extra-tools/da-tool/script/da-tool.sh -+++ b/extra-tools/da-tool/script/da-tool.sh -@@ -252,7 +252,7 @@ function clear_env() { - function sample_init() { - echo 0 >/sys/kernel/debug/tracing/tracing_on - echo >/sys/kernel/debug/tracing/trace -- echo 4096 >/sys/kernel/debug/tracing/buffer_size_kb -+ echo 40960 >/sys/kernel/debug/tracing/buffer_size_kb - - echo >/sys/kernel/debug/tracing/uprobe_events - echo >/sys/kernel/debug/tracing/kprobe_events -diff --git a/extra-tools/da-tool/test/case/case1/case1.cpp b/extra-tools/da-tool/test/case/case1/case1.cpp -new file mode 100644 -index 0000000..1e16f7c ---- /dev/null -+++ b/extra-tools/da-tool/test/case/case1/case1.cpp -@@ -0,0 +1,64 @@ -+#include -+#include -+ -+using namespace std; -+ -+void delay_1us() -+{ -+ usleep(1); -+} -+ -+void delay_10us() -+{ -+ usleep(10); -+} -+ -+void delay_1ms() -+{ -+ usleep(1000); -+} -+ -+void delay_10ms() -+{ -+ usleep(10000); -+} -+ -+void funcC() -+{ -+ for (int i = 0; i < 1000; i++) { -+ } -+} -+void funcB() -+{ -+ for (int i = 0; i < 100; i++) { -+ for (int j = 0; j < 1000; j++) { -+ } -+ funcC(); -+ } -+} -+void funcA() -+{ -+ for (int i = 0; i < 100; i++) { -+ funcB(); -+ } -+} -+ -+int main() -+{ -+ int loopnum = 0; -+ while (1) { -+ cout << "loopnum:" << loopnum << endl; -+ loopnum++; -+ delay_10us(); -+ delay_1us(); -+ delay_1ms(); -+ delay_10ms(); -+ funcA(); -+ funcB(); -+ funcC(); -+ } -+ return 0; -+} -+ -+// g++ case1.cpp -o case1 -+// _Z9delay_1usv,_Z10delay_10usv,_Z9delay_1msv,_Z10delay_10msv,_Z5funcCv,_Z5funcBv,_Z5funcAv -\ No newline at end of file -diff --git a/extra-tools/da-tool/test/case/case2/case2_udp_cli.c b/extra-tools/da-tool/test/case/case2/case2_udp_cli.c -new file mode 100644 -index 0000000..80f9dd7 ---- /dev/null -+++ b/extra-tools/da-tool/test/case/case2/case2_udp_cli.c -@@ -0,0 +1,37 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define SERVER_IP "127.0.0.1" -+#define SERVER_PORT 12345 -+ -+int main() { -+ int sockfd; -+ struct sockaddr_in server_addr; -+ char buffer[1024]; -+ -+ sockfd = socket(AF_INET, SOCK_DGRAM, 0); -+ if (sockfd < 0) { -+ perror("socket creation failed"); -+ exit(EXIT_FAILURE); -+ } -+ -+ memset(&server_addr, 0, sizeof(server_addr)); -+ server_addr.sin_family = AF_INET; -+ server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); -+ server_addr.sin_port = htons(SERVER_PORT); -+ -+ int loop_num =0; -+ while (1) { -+ usleep(50000); -+ sprintf(buffer, "loop num : %d", loop_num++); -+ sendto(sockfd, buffer, strlen(buffer), 0, (const struct sockaddr *)&server_addr, sizeof(server_addr)); -+ } -+ -+ close(sockfd); -+ return 0; -+} -diff --git a/extra-tools/da-tool/test/case/case2/case2_udp_ser_noblk.c b/extra-tools/da-tool/test/case/case2/case2_udp_ser_noblk.c -new file mode 100644 -index 0000000..a24841d ---- /dev/null -+++ b/extra-tools/da-tool/test/case/case2/case2_udp_ser_noblk.c -@@ -0,0 +1,53 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define SERVER_PORT 12345 -+ -+int main() { -+ int sockfd; -+ struct sockaddr_in server_addr, client_addr; -+ socklen_t client_len; -+ char buffer[1024]; -+ -+ sockfd = socket(AF_INET, SOCK_DGRAM, 0); -+ if (sockfd < 0) { -+ perror("socket creation failed"); -+ exit(EXIT_FAILURE); -+ } -+ -+ // no blk -+ int flags = fcntl(sockfd, F_GETFL, 0); -+ fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); -+ -+ memset(&server_addr, 0, sizeof(server_addr)); -+ server_addr.sin_family = AF_INET; -+ server_addr.sin_addr.s_addr = INADDR_ANY; -+ server_addr.sin_port = htons(SERVER_PORT); -+ -+ if (bind(sockfd, (const struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { -+ perror("bind failed"); -+ exit(EXIT_FAILURE); -+ } -+ -+ while (1) { -+ memset(buffer, 0, sizeof(buffer)); -+ client_len = sizeof(client_addr); -+ ssize_t recv_len = recvfrom(sockfd, buffer, sizeof(buffer) - 1, MSG_DONTWAIT, (struct sockaddr *)&client_addr, &client_len); -+ -+ if (recv_len > 0) { -+ buffer[recv_len] = '\0'; -+ printf("recv from %s:%d data: %s recv_len=%d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buffer, recv_len); -+ } else { -+ printf("recv_len=%d\n", recv_len); -+ } -+ } -+ -+ close(sockfd); -+ return 0; -+} --- -2.33.0 - diff --git a/0014-fix-cve-2021-33633.patch b/0004-fix-cve-2021-33633.patch similarity index 54% rename from 0014-fix-cve-2021-33633.patch rename to 0004-fix-cve-2021-33633.patch index 7ecabab..32be1ff 100644 --- a/0014-fix-cve-2021-33633.patch +++ b/0004-fix-cve-2021-33633.patch @@ -1,17 +1,40 @@ -From 110ae398bfd974a3b16dbc20dce0a53af60d1d39 Mon Sep 17 00:00:00 2001 +From d5c2db0af6d62a85c35c6cfe3e7af55edddf3b91 Mon Sep 17 00:00:00 2001 From: rabbitali -Date: Sun, 4 Feb 2024 10:50:46 +0800 +Date: Sun, 4 Feb 2024 00:39:26 +0800 Subject: [PATCH 1/1] fix cve-2021-33633 --- - ceres/function/util.py | 11 +++++---- - ceres/manages/collect_manage.py | 18 +++++++-------- + ceres/function/check.py | 4 +-- + ceres/function/util.py | 11 ++++---- + ceres/manages/collect_manage.py | 18 ++++++------- ceres/manages/list_file_manage.py | 2 +- - ceres/manages/plugin_manage.py | 8 +++---- - ceres/manages/resource_manage.py | 4 ++-- - ceres/manages/vulnerability_manage.py | 32 +++++++++++++-------------- - 6 files changed, 36 insertions(+), 39 deletions(-) + ceres/manages/plugin_manage.py | 8 +++--- + ceres/manages/resource_manage.py | 4 +-- + ceres/manages/rollback_manage.py | 16 +++++------ + ceres/manages/vulnerability_manage.py | 38 +++++++++++++-------------- + 8 files changed, 50 insertions(+), 51 deletions(-) +diff --git a/ceres/function/check.py b/ceres/function/check.py +index 20978f5..18b9561 100644 +--- a/ceres/function/check.py ++++ b/ceres/function/check.py +@@ -61,14 +61,14 @@ class PreCheck(object): + """ + # Example of command execution result:: + # /boot/vmlinuz-5.10.0-60.18.0.50.oe2203.x86_64 +- code, boot_kernel_version, stderr = execute_shell_command("grubby --default-kernel") ++ code, boot_kernel_version, stderr = execute_shell_command(["grubby --default-kernel"]) + if code != CommandExitCode.SUCCEED: + LOGGER.error(stderr) + return False, "Query boot kernel info failed!" + + # Example of command execution result:: + # 5.10.0-60.18.0.50.oe2203.x86_64 +- code, current_kernel_version, stderr = execute_shell_command("uname -r") ++ code, current_kernel_version, stderr = execute_shell_command(["uname -r"]) + if code != CommandExitCode.SUCCEED: + LOGGER.error(stderr) + return False, "Query current kernel info failed!" diff --git a/ceres/function/util.py b/ceres/function/util.py index 433db09..1d3d9e3 100644 --- a/ceres/function/util.py @@ -63,7 +86,7 @@ index 433db09..1d3d9e3 100644 if return_code == CommandExitCode.SUCCEED: return stdout diff --git a/ceres/manages/collect_manage.py b/ceres/manages/collect_manage.py -index ffc82e3..d499cfd 100644 +index e702120..b2ba350 100644 --- a/ceres/manages/collect_manage.py +++ b/ceres/manages/collect_manage.py @@ -104,7 +104,7 @@ class Collect: @@ -75,7 +98,7 @@ index ffc82e3..d499cfd 100644 res = re.search('(?=PRETTY_NAME=).+', stdout) if res: -@@ -138,7 +138,7 @@ class Collect: +@@ -140,7 +140,7 @@ class Collect: Returns: str """ @@ -84,16 +107,16 @@ index ffc82e3..d499cfd 100644 res = re.search('(?=Version:).+', stdout) if res: -@@ -154,7 +154,7 @@ class Collect: +@@ -156,7 +156,7 @@ class Collect: Returns: str """ -- _, stdout, _ = execute_shell_command("uname -r") -+ _, stdout, _ = execute_shell_command(["uname -r"]) +- code, stdout, stderr = execute_shell_command("uname -r") ++ code, stdout, stderr = execute_shell_command(["uname -r"]) - res = re.search(r'[\d\.]+-[\d\.]+[\d]', stdout) - if res: -@@ -180,7 +180,7 @@ class Collect: + if code != CommandExitCode.SUCCEED: + LOGGER.warning('Failed to get current kernel version, please check uname command and try again') +@@ -181,7 +181,7 @@ class Collect: "l3_cache": string } """ @@ -102,7 +125,7 @@ index ffc82e3..d499cfd 100644 info_list = re.findall('.+:.+', stdout) -@@ -213,7 +213,7 @@ class Collect: +@@ -214,7 +214,7 @@ class Collect: Returns: str: memory size """ @@ -111,7 +134,7 @@ index ffc82e3..d499cfd 100644 res = re.search("(?=Total online memory:).+", stdout) if res: -@@ -244,7 +244,7 @@ class Collect: +@@ -245,7 +245,7 @@ class Collect: """ res = {'size': self.__get_total_online_memory() or None, "total": None, "info": []} @@ -120,7 +143,7 @@ index ffc82e3..d499cfd 100644 # dmidecode -t memory # e.g -@@ -305,7 +305,7 @@ class Collect: +@@ -306,7 +306,7 @@ class Collect: } ] """ @@ -129,7 +152,7 @@ index ffc82e3..d499cfd 100644 if code != CommandExitCode.SUCCEED: LOGGER.error(stdout) return [] -@@ -383,7 +383,7 @@ class Collect: +@@ -384,7 +384,7 @@ class Collect: Returns: uuid(str) """ @@ -138,12 +161,12 @@ index ffc82e3..d499cfd 100644 if code == CommandExitCode.SUCCEED: return stdout.replace("-", "").split(':')[1].strip() return "" -@@ -419,7 +419,7 @@ class Collect: +@@ -420,7 +420,7 @@ class Collect: }] """ -- code, source_name_info, _ = execute_shell_command("rpm -qai|grep .src.rpm") -+ code, source_name_info, _ = execute_shell_command(["rpm -qai", "grep .src.rpm"]) +- code, source_name_info, _ = execute_shell_command("rpm -qi kernel|grep .src.rpm") ++ code, source_name_info, _ = execute_shell_command(["rpm -qi kernel", "grep .src.rpm"]) if code != CommandExitCode.SUCCEED: LOGGER.error("Failed to query installed packages.") return [] @@ -222,76 +245,143 @@ index 5766744..e9c6256 100644 if code == CommandExitCode.SUCCEED: return f'{stdout.strip()}%' LOGGER.error(f'Failed to get plugin cpu info about {rpm_name}.') -diff --git a/ceres/manages/vulnerability_manage.py b/ceres/manages/vulnerability_manage.py -index 23ae2ce..16fc2d7 100644 ---- a/ceres/manages/vulnerability_manage.py -+++ b/ceres/manages/vulnerability_manage.py -@@ -71,7 +71,7 @@ class VulnerabilityManage: +diff --git a/ceres/manages/rollback_manage.py b/ceres/manages/rollback_manage.py +index 160a74c..51ef6d6 100644 +--- a/ceres/manages/rollback_manage.py ++++ b/ceres/manages/rollback_manage.py +@@ -162,7 +162,7 @@ class RollbackManage: + Returns: + Tuple[str, str]: a tuple containing two elements (rollback result, log) + """ +- cmd = f"dnf history rollback {dnf_event_start} -y" ++ cmd = [f"dnf history rollback {dnf_event_start} -y"] + # 'dnf history rollback transaction-id' command can revert all dnf transactions performed after transaction-id + code, stdout, stderr = execute_shell_command(cmd) + if code != CommandExitCode.SUCCEED: +@@ -262,7 +262,7 @@ class RollbackManage: Returns: - bool + Tuple[str, str]: a tuple containing two elements (remove result, log) """ -- code, _, _ = execute_shell_command(f"yum repoinfo --repo {repo_id}") -+ code, _, _ = execute_shell_command([f"yum repoinfo --repo {repo_id}"]) - return code == CommandExitCode.SUCCEED +- code, stdout, stderr = execute_shell_command(f"rpm -qa | grep {installed_rpm}") ++ code, stdout, stderr = execute_shell_command(["rpm -qa", f"grep {installed_rpm}"]) + # 'rpm -qa' shows installed rpm + # e.g. + # [root@openEuler ~]# rpm -qa | grep kernel-4.19.90-2112.8.0.0131.oe1.x86_64 +@@ -272,7 +272,7 @@ class RollbackManage: + LOGGER.error(tmp_log) + return TaskExecuteRes.FAIL, tmp_log + +- code, current_evra, stderr = execute_shell_command(f"uname -r") ++ code, current_evra, stderr = execute_shell_command([f"uname -r"]) + # 'uname -r' show the kernel version-release.arch of the current system + # e.g. + # [root@openEuler ~]# uname -r +@@ -287,7 +287,7 @@ class RollbackManage: + if installed_evra == current_evra: + return TaskExecuteRes.SUCCEED, f"Preserve the {installed_rpm} due to it is in use." + +- code, stdout, stderr = execute_shell_command(f"dnf remove {installed_rpm} -y") ++ code, stdout, stderr = execute_shell_command([f"dnf remove {installed_rpm} -y"]) + if code != CommandExitCode.SUCCEED: + LOGGER.error(stderr) + return TaskExecuteRes.FAIL, stdout + stderr +@@ -305,7 +305,7 @@ class RollbackManage: + Returns: + Tuple[str, str]: a tuple containing two elements (check result, log) + """ +- code, stdout, stderr = execute_shell_command(f"grubby --default-kernel") ++ code, stdout, stderr = execute_shell_command([f"grubby --default-kernel"]) + # 'grubby --default-kernel' shows boot default kernel version in the system + # e.g. + # [root@openEuler ~]# grubby --default-kernel +@@ -338,7 +338,7 @@ class RollbackManage: + Returns: + Tuple[str, str]: a tuple containing two elements (check result, log) + """ +- code, current_evra, stderr = execute_shell_command(f"uname -r") ++ code, current_evra, stderr = execute_shell_command(["uname -r"]) + # 'uname -r' show the kernel version-release.arch of the current system + # e.g. + # [root@openEuler ~]# uname -r +@@ -371,7 +371,7 @@ class RollbackManage: + Returns: + Tuple[str, str]: a tuple containing two elements (check result, log) + """ +- code, stdout, stderr = execute_shell_command(f"rpm -qa | grep {target_rpm}") ++ code, stdout, stderr = execute_shell_command(["rpm -qa", f"grep {target_rpm}"]) + # 'rpm -qa' shows installed rpm + # e.g. + # [root@openEuler ~]# rpm -qa | grep kernel-4.19.90-2112.8.0.0131.oe1.x86_64 +@@ -402,7 +402,7 @@ class RollbackManage: + return TaskExecuteRes.FAIL, tmp_log - def cve_scan(self, cve_scan_args: dict) -> Tuple[str, dict]: -@@ -157,9 +157,7 @@ class VulnerabilityManage: + # 'grubby --set-default=/boot/vmlinuz-xxx' changes the default boot entry +- code, stdout, stderr = execute_shell_command(f"grubby --set-default={boot_file}") ++ code, stdout, stderr = execute_shell_command([f"grubby --set-default={boot_file}"]) + if code != CommandExitCode.SUCCEED: + LOGGER.error(stderr) + return TaskExecuteRes.FAIL, stdout + stderr +diff --git a/ceres/manages/vulnerability_manage.py b/ceres/manages/vulnerability_manage.py +index 314e054..9017b17 100644 +--- a/ceres/manages/vulnerability_manage.py ++++ b/ceres/manages/vulnerability_manage.py +@@ -87,7 +87,7 @@ class VulnerabilityManage: + Returns: + bool + """ +- code, _, stderr = execute_shell_command(f"dnf repoinfo --repo {repo_id}") ++ code, _, stderr = execute_shell_command([f"dnf repoinfo --repo {repo_id}"]) + if code == CommandExitCode.SUCCEED: + return True + LOGGER.warning(f"Failed to query repo information with repo id {repo_id}.") +@@ -181,9 +181,7 @@ class VulnerabilityManage: # powertop:powertop-2.9-12.oe1.x86_64 # libusbx:libusbx-1.0.23-1.oe1.x86_64 code, stdout, _ = execute_shell_command( - """ -- rpm -qa --queryformat '%{NAME}:%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' +- rpm -qa --queryformat '%{NAME}:%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | grep kernel - """ -+ ["rpm -qa --queryformat '%{NAME}:%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n'"] ++ ["rpm -qa --queryformat '%{NAME}:%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n'", "grep kernel"] ) if code != CommandExitCode.SUCCEED or not stdout: LOGGER.error("query installed packages info failed!") -@@ -190,7 +188,7 @@ class VulnerabilityManage: - # kernel-debuginfo.x86_64 5.10.0-60.105.0.132.oe2203 update - # kernel-debugsource.x86_64 5.10.0-60.105.0.132.oe2203 update - # kernel-devel.x86_64 5.10.0-60.105.0.132.oe2203 update -- code, stdout, stderr = execute_shell_command("dnf list available|grep -v '.src'") -+ code, stdout, stderr = execute_shell_command(["dnf list available", "grep -v '.src'"]) - if code != CommandExitCode.SUCCEED: - LOGGER.error(stderr) - return result -@@ -232,7 +230,7 @@ class VulnerabilityManage: +@@ -222,7 +220,7 @@ class VulnerabilityManage: # CVE-2021-45469 Important/Sec. kernel-4.19.90-2201.1.0.0132.oe1.x86_64 # CVE-2021-44733 Important/Sec. kernel-4.19.90-2201.1.0.0132.oe1.x86_64 unfixed_cves = [] -- code, stdout, stderr = execute_shell_command("dnf updateinfo list cves") -+ code, stdout, stderr = execute_shell_command(["dnf updateinfo list cves"]) +- code, stdout, stderr = execute_shell_command("dnf updateinfo list cves | grep kernel") ++ code, stdout, stderr = execute_shell_command(["dnf updateinfo list cves", "grep kernel"]) if code != CommandExitCode.SUCCEED: LOGGER.error("query unfixed cve info failed by dnf!") LOGGER.error(stderr) -@@ -295,7 +293,7 @@ class VulnerabilityManage: +@@ -287,7 +285,7 @@ class VulnerabilityManage: # CVE-2021-42574 Important/Sec. binutils-2.34-19.oe1.x86_64 - # CVE-2023-1513 Important/Sec. kernel-4.19.90-2304.1.0.0196.oe1.x86_64 patch-kernel-4.19.90-2112... cve_info_list = [] -- code, stdout, stderr = execute_shell_command("dnf hot-updateinfo list cves") -+ code, stdout, stderr = execute_shell_command(["dnf hot-updateinfo list cves"]) +- code, stdout, stderr = execute_shell_command("dnf hot-updateinfo list cves | grep kernel") ++ code, stdout, stderr = execute_shell_command(["dnf hot-updateinfo list cves", "grep kernel"]) if code != CommandExitCode.SUCCEED: LOGGER.error("query unfixed cve info failed by dnf!") LOGGER.error(stderr) -@@ -357,7 +355,7 @@ class VulnerabilityManage: - # CVE-2021-45469 Important/Sec. kernel-4.19.90-2201.1.0.0132.oe1.x86_64 - # CVE-2021-44733 Important/Sec. kernel-4.19.90-2201.1.0.0132.oe1.x86_64 - fixed_cves = [] -- code, stdout, stderr = execute_shell_command("dnf updateinfo list cves --installed") -+ code, stdout, stderr = execute_shell_command(["dnf updateinfo list cves --installed"]) +@@ -354,7 +352,7 @@ class VulnerabilityManage: + return fixed_cves + current_kernel_rpm_name = f"kernel-{current_kernel_version}" + +- code, stdout, stderr = execute_shell_command("dnf updateinfo list cves --installed |grep kernel") ++ code, stdout, stderr = execute_shell_command(["dnf updateinfo list cves --installed", "grep kernel"]) if code != CommandExitCode.SUCCEED: LOGGER.error("query fixed cve info failed!") LOGGER.error(stderr) -@@ -395,7 +393,7 @@ class VulnerabilityManage: - # CVE-2021-42574 Important/Sec. binutils-2.34-19.oe1.x86_64 - - # CVE-2023-1513 Important/Sec. kernel-4.19.90-2304.1.0.0196.oe1.x86_64 patch-kernel-4.19.90-2112... +@@ -400,7 +398,7 @@ class VulnerabilityManage: + return [] + current_kernel_rpm_name = f"kernel-{current_kernel_version}" -- code, stdout, stderr = execute_shell_command("dnf hot-updateinfo list cves --installed") -+ code, stdout, stderr = execute_shell_command(["dnf hot-updateinfo list cves --installed"]) +- code, stdout, stderr = execute_shell_command("dnf hot-updateinfo list cves --installed | grep kernel") ++ code, stdout, stderr = execute_shell_command(["dnf hot-updateinfo list cves --installed", "grep kernel"]) if code != CommandExitCode.SUCCEED: LOGGER.error("query unfixed cve info failed by dnf!") LOGGER.error(stderr) -@@ -461,7 +459,7 @@ class VulnerabilityManage: +@@ -468,7 +466,7 @@ class VulnerabilityManage: # CVE-2023-1111 redis-6.2.5-1/SGL_CVE_2023_1111_CVE_2023_1112-1-1/redis-server NOT-APPLIED # CVE-2023-1112 redis-6.2.5-1/SGL_CVE_2023_1111_CVE_2023_1112-1-1/redis-server NOT-APPLIED result = {} @@ -300,28 +390,72 @@ index 23ae2ce..16fc2d7 100644 if code != CommandExitCode.SUCCEED: LOGGER.error("query applied hotpatch info failed!") LOGGER.error(stderr) -@@ -620,7 +618,7 @@ class VulnerabilityManage: +@@ -634,7 +632,7 @@ class VulnerabilityManage: Tuple[str, str] - a tuple containing two elements (update result, log). + a tuple containing two elements (upgrade result, package upgrade log). """ -- code, stdout, stderr = execute_shell_command(f"dnf upgrade-en {rpm_name} -y") -+ code, stdout, stderr = execute_shell_command([f"dnf upgrade-en {rpm_name} -y"]) - log = stdout + stderr +- code, stdout, stderr = execute_shell_command(f"dnf upgrade-en {rpm} -y") ++ code, stdout, stderr = execute_shell_command([f"dnf upgrade-en {rpm} -y"]) if code != CommandExitCode.SUCCEED: - return TaskExecuteRes.FAIL, log -@@ -641,9 +639,9 @@ class VulnerabilityManage: - a tuple containing two elements (update result, log). + LOGGER.error(stderr) + return TaskExecuteRes.FAIL, stdout + stderr +@@ -673,7 +671,7 @@ class VulnerabilityManage: + final_fix_result, package_update_info = TaskExecuteRes.SUCCEED, [] + + for rpm in rpms: +- code, stdout, stderr = execute_shell_command(f"dnf hotupgrade {rpm} -y") ++ code, stdout, stderr = execute_shell_command([f"dnf hotupgrade {rpm} -y"]) + tmp = { + "available_rpm": rpm, + "result": TaskExecuteRes.SUCCEED, +@@ -711,7 +709,7 @@ class VulnerabilityManage: + "kernel-5.10.0-60.91.0.116.oe2203.x86_64": ["CVE-2023-2006"] + }} + """ +- code, stdout, stderr = execute_shell_command("dnf updateinfo list cves") ++ code, stdout, stderr = execute_shell_command(["dnf updateinfo list cves"]) + if code != CommandExitCode.SUCCEED: + LOGGER.error("Failed to query update info by dnf!") + LOGGER.error(stderr) +@@ -737,7 +735,7 @@ class VulnerabilityManage: + Example: + "Succeed", {"kernel": {"CVE-2023-XXXX","CVE-2022-XXXX"}} """ - if self.takeover: -- update_command = f"dnf hotupgrade {hotpatch_pkg} --takeover -y" -+ update_command = [f"dnf hotupgrade {hotpatch_pkg} --takeover -y"] - else: -- update_command = f"dnf hotupgrade {hotpatch_pkg} -y" -+ update_command = [f"dnf hotupgrade {hotpatch_pkg} -y"] +- code, stdout, stderr = execute_shell_command("dnf hot-updateinfo list cves --installed") ++ code, stdout, stderr = execute_shell_command(["dnf hot-updateinfo list cves --installed"]) + if code != CommandExitCode.SUCCEED: + LOGGER.error("Failed to query fixed cves by hotpatch!") + LOGGER.error(stderr) +@@ -808,7 +806,7 @@ class VulnerabilityManage: + return package_set + + # The exit code of the command is 1 when input parameters contains assumeno +- _, stdout, _ = execute_shell_command(f"dnf upgrade-en {package} --assumeno") ++ _, stdout, _ = execute_shell_command([f"dnf upgrade-en {package} --assumeno"]) - code, stdout, stderr = execute_shell_command(update_command) - log = stdout + stderr -@@ -692,7 +690,7 @@ class VulnerabilityManage: + installed_rpm_info = re.findall(r"(Upgrading|Installing):(.*?)Transaction Summary", stdout, re.S) + if not installed_rpm_info: +@@ -841,7 +839,7 @@ class VulnerabilityManage: + return False + + LOGGER.info("The Linux boot kernel is about to be changed") +- code, _, stderr = execute_shell_command(f"grubby --set-default={boot_kernel_path}") ++ code, _, stderr = execute_shell_command([f"grubby --set-default={boot_kernel_path}"]) + + if code != CommandExitCode.SUCCEED: + LOGGER.info("The Linux boot kernel change failed") +@@ -863,7 +861,9 @@ class VulnerabilityManage: + # --------------------------------------------------------------------- + # 3 | rm aops-ceres | 2023-11-30 09:57 | Removed | 1 + # 2 | install gcc | 2023-11-30 09:57 | Install | 1 +- code, stdout, stderr = execute_shell_command("dnf history | grep -E '^\s*[0-9]+'|head -1|awk '{print $1}'") ++ code, stdout, stderr = execute_shell_command( ++ ["dnf history", "grep -E '^\s*[0-9]+'", "head -1", "awk '{print $1}'"] ++ ) + if code != CommandExitCode.SUCCEED: + LOGGER.error(stderr) + return None +@@ -898,7 +898,7 @@ class VulnerabilityManage: # Last metadata expiration check: 3:25:24 ago on Wed 13 Sep 2023 08:16:17 AM CST. # Gonna accept this hot patch: kernel-5.10.0-153.12.0.92.oe2203sp2/ACC-1-1 # accept hot patch 'kernel-5.10.0-153.12.0.92.oe2203sp2/ACC-1-1' failed, remain original status @@ -330,16 +464,16 @@ index 23ae2ce..16fc2d7 100644 if code != CommandExitCode.SUCCEED or 'failed' in stdout: LOGGER.error(f"hotpatch {hotpatch} set status failed!") return False, stdout + stderr -@@ -807,7 +805,7 @@ class VulnerabilityManage: +@@ -982,7 +982,7 @@ class VulnerabilityManage: "CVE-XXXX-XXX": {"patch 1", "patch 2"} } """ - code, stdout, _ = execute_shell_command(f"dnf hot-updateinfo list cves --installed|grep patch") + code, stdout, _ = execute_shell_command([f"dnf hot-updateinfo list cves --installed", "grep patch"]) if code != CommandExitCode.SUCCEED: - LOGGER.error(f"Failed to hotpatch list cve.") + LOGGER.error(f"Failed to query the hotpatch list.") return None -@@ -841,7 +839,7 @@ class VulnerabilityManage: +@@ -1016,6 +1016,6 @@ class VulnerabilityManage: Args: hotpatch: hotpatch package which needs to remove """ @@ -347,16 +481,6 @@ index 23ae2ce..16fc2d7 100644 + cmd = [f"dnf remove {hotpatch} -y"] _, stdout, stderr = execute_shell_command(cmd) return True, f"Command:{cmd}\n\n{stdout}\n{stderr}\n" - -@@ -876,7 +874,7 @@ class VulnerabilityManage: - # description: (none) - # patch: - # 31fc7544 0001-Prevent-unauthenticated-client-from-easily-consuming.patch -- code, stdout, _ = execute_shell_command(f"syscare info {base_pkg_hotpatch}") -+ code, stdout, _ = execute_shell_command([f"syscare info {base_pkg_hotpatch}"]) - - hotpatch_release_info = dict() - if code != CommandExitCode.SUCCEED: -- 2.33.0 diff --git a/0005-add-specific-error-information.patch b/0005-add-specific-error-information.patch deleted file mode 100644 index 05eb8c7..0000000 --- a/0005-add-specific-error-information.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 5b0551698b60ea0c01ad9ee223f7009f230caa12 Mon Sep 17 00:00:00 2001 -From: wang-guangge -Date: Mon, 20 Nov 2023 20:51:57 +0800 -Subject: [PATCH] add specific error information - ---- - hotpatch/hotupgrade.py | 9 ++++++--- - hotpatch/upgrade_en.py | 8 +++++--- - 2 files changed, 11 insertions(+), 6 deletions(-) - -diff --git a/hotpatch/hotupgrade.py b/hotpatch/hotupgrade.py -index c508e07..5dfee0d 100644 ---- a/hotpatch/hotupgrade.py -+++ b/hotpatch/hotupgrade.py -@@ -12,17 +12,19 @@ - # ******************************************************************************/ - from __future__ import print_function - -+from time import sleep -+ - import dnf.base - import dnf.exceptions - import hawkey --from time import sleep - from dnf.cli import commands - from dnf.cli.option_parser import OptionParser - from dnfpluginscore import _, logger --from .upgrade_en import UpgradeEnhanceCommand -+ - from .hot_updateinfo import HotUpdateinfoCommand --from .updateinfo_parse import HotpatchUpdateInfo - from .syscare import Syscare -+from .updateinfo_parse import HotpatchUpdateInfo -+from .upgrade_en import UpgradeEnhanceCommand - from .version import Versions - - EMPTY_TAG = "-" -@@ -184,6 +186,7 @@ class HotupgradeCommand(dnf.cli.Command): - output, status = self.syscare.apply(hp_subname) - if status: - logger.info(_('Apply hot patch failed: %s.'), hp_subname) -+ logger.info(_('%s'), output) - else: - logger.info(_('Apply hot patch succeed: %s.'), hp_subname) - return status -diff --git a/hotpatch/upgrade_en.py b/hotpatch/upgrade_en.py -index 266bcae..3053179 100644 ---- a/hotpatch/upgrade_en.py -+++ b/hotpatch/upgrade_en.py -@@ -10,13 +10,14 @@ - # PURPOSE. - # See the Mulan PSL v2 for more details. - # ******************************************************************************/ --import dnf - import gzip - import subprocess --from dnfpluginscore import _ -+ -+import dnf - from dnf.cli import commands - from dnf.cli.commands.upgrade import UpgradeCommand - from dnf.cli.option_parser import OptionParser -+from dnfpluginscore import _, logger - - SUCCEED = 0 - FAIL = 255 -@@ -111,10 +112,11 @@ class UpgradeEnhanceCommand(dnf.cli.Command): - output, return_code = cmd_output(remove_cmd) - if return_code != SUCCEED: - print('Remove package failed: %s.' % pkg) -+ print(output) - exit(1) - else: - print('Remove package succeed: %s.' % pkg) -- # do not achieve the expected result of installing related kernel rpm -+ # do not achieve the expected result of installing related rpm - exit(1) - - def rebuild_rpm_db(self): --- -2.27.0 - diff --git a/0015-override-list-file-method.patch b/0005-override-list-file-method.patch similarity index 95% rename from 0015-override-list-file-method.patch rename to 0005-override-list-file-method.patch index bcb4653..e7a5b0d 100644 --- a/0015-override-list-file-method.patch +++ b/0005-override-list-file-method.patch @@ -1,6 +1,6 @@ -From 220a446e97bda42d44b23056fb000b8dc9f47fe1 Mon Sep 17 00:00:00 2001 +From 19b611645b9be2e72c81cab5cb456f9a943d3caa Mon Sep 17 00:00:00 2001 From: rabbitali -Date: Wed, 7 Feb 2024 11:30:50 +0800 +Date: Wed, 7 Feb 2024 12:23:28 +0800 Subject: [PATCH 1/1] override list file method --- diff --git a/0006-update-register-template-file.patch b/0006-update-register-template-file.patch new file mode 100644 index 0000000..232fa17 --- /dev/null +++ b/0006-update-register-template-file.patch @@ -0,0 +1,25 @@ +From f6cc88528868c646292f7b4d238e848b70d9246a Mon Sep 17 00:00:00 2001 +From: rabbitali +Date: Wed, 5 Jun 2024 19:30:03 +0800 +Subject: [PATCH 1/1] update register template file + +--- + conf/register_example.json | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/conf/register_example.json b/conf/register_example.json +index 4fcd642..60bcbc4 100644 +--- a/conf/register_example.json ++++ b/conf/register_example.json +@@ -7,5 +7,6 @@ + "host_group_name": "aops", + "management": false, + "ssh_port":22, +- "access_token": "token-string" ++ "access_token": "token-string", ++ "ssh_pkey":"" + } +\ No newline at end of file +-- +2.33.0 + diff --git a/0006-update-return-log-field-of-the-cve-fix-func.patch b/0006-update-return-log-field-of-the-cve-fix-func.patch deleted file mode 100644 index 98e5187..0000000 --- a/0006-update-return-log-field-of-the-cve-fix-func.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 27df2fbb6c18c382e7099015915f7efb673a9e06 Mon Sep 17 00:00:00 2001 -From: rabbitali -Date: Tue, 21 Nov 2023 09:02:09 +0800 -Subject: [PATCH] update return log field of the cve fix func - ---- - ceres/manages/vulnerability_manage.py | 22 ++++++++++++---------- - 1 file changed, 12 insertions(+), 10 deletions(-) - -diff --git a/ceres/manages/vulnerability_manage.py b/ceres/manages/vulnerability_manage.py -index da98297..23ae2ce 100644 ---- a/ceres/manages/vulnerability_manage.py -+++ b/ceres/manages/vulnerability_manage.py -@@ -621,11 +621,12 @@ class VulnerabilityManage: - a tuple containing two elements (update result, log). - """ - code, stdout, stderr = execute_shell_command(f"dnf upgrade-en {rpm_name} -y") -+ log = stdout + stderr - if code != CommandExitCode.SUCCEED: -- return TaskExecuteRes.FAIL, stderr -- if "Complete" not in stdout: -- return TaskExecuteRes.FAIL, stdout -- return TaskExecuteRes.SUCCEED, stdout -+ return TaskExecuteRes.FAIL, log -+ if "Complete" not in log: -+ return TaskExecuteRes.FAIL, log -+ return TaskExecuteRes.SUCCEED, log - - def _update_hotpatch_by_dnf_plugin(self, hotpatch_pkg: str) -> Tuple[str, str]: - """ -@@ -645,22 +646,23 @@ class VulnerabilityManage: - update_command = f"dnf hotupgrade {hotpatch_pkg} -y" - - code, stdout, stderr = execute_shell_command(update_command) -+ log = stdout + stderr - if code != CommandExitCode.SUCCEED: -- return TaskExecuteRes.FAIL, stderr -+ return TaskExecuteRes.FAIL, log - - if "Apply hot patch succeed" not in stdout and "No hot patches marked for install" not in stdout: -- return TaskExecuteRes.FAIL, stdout -+ return TaskExecuteRes.FAIL, log - - if not self.takeover and self.accepted: - try: - hotpatch_name = hotpatch_pkg.rsplit(".", 1)[0].split("-", 1)[1] -- _, log = self._set_hotpatch_status_by_dnf_plugin(hotpatch_name, "accept") -- stdout += f"\n\n{log}" -+ _, hotpatch_status_set_log = self._set_hotpatch_status_by_dnf_plugin(hotpatch_name, "accept") -+ log += f"\n\n{hotpatch_status_set_log}" - except IndexError as error: - LOGGER.error(error) -- stdout += f"\n\nhotpatch status set failed due to can't get correct hotpatch name!" -+ log += f"\n\nhotpatch status set failed due to can't get correct hotpatch name!" - -- return TaskExecuteRes.SUCCEED, stdout -+ return TaskExecuteRes.SUCCEED, log - - @staticmethod - def _set_hotpatch_status_by_dnf_plugin(hotpatch: str, operation: str) -> Tuple[bool, str]: --- -2.33.0 - diff --git a/0007-add-usage-and-repet-config-check.patch b/0007-add-usage-and-repet-config-check.patch deleted file mode 100644 index dfe38e6..0000000 --- a/0007-add-usage-and-repet-config-check.patch +++ /dev/null @@ -1,141 +0,0 @@ -From e20bd8319c893134e8496ee41edd23fb17a13780 Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Thu, 23 Nov 2023 20:57:39 +0800 -Subject: [PATCH] add usage and repet config check - ---- - extra-tools/da-tool/script/da-tool.sh | 67 ++++++++++++++++++++++++--- - 1 file changed, 60 insertions(+), 7 deletions(-) - mode change 100644 => 100755 extra-tools/da-tool/script/da-tool.sh - -diff --git a/extra-tools/da-tool/script/da-tool.sh b/extra-tools/da-tool/script/da-tool.sh -old mode 100644 -new mode 100755 -index ccc3443..efc9592 ---- a/extra-tools/da-tool/script/da-tool.sh -+++ b/extra-tools/da-tool/script/da-tool.sh -@@ -74,9 +74,18 @@ handle_error() { - - trap 'handle_error' ERR - -+function usage() { -+ echo "" -+ echo "usage: da-tool.sh [OPTIONS] [ARGS]" -+ echo "" -+ echo "The most commonly used da-tool.sh options are:" -+ echo " -t set tracing duration, unit: seconds, 1<=duration<=100, default is 10" -+ echo " -h show usage" -+} -+ - # get opt - # while getopts "b:l:t:p:as" opt; do # debug --while getopts "t:" opt; do -+while getopts "t:h" opt; do - case $opt in - a) - is_analysis_only_mode=true -@@ -87,7 +96,12 @@ while getopts "t:" opt; do - is_sample_with_analysis=false - ;; - t) -- sleep_time=$OPTARG -+ if [[ $OPTARG =~ ^[0-9]+$ ]]; then -+ sleep_time=$OPTARG -+ else -+ usage -+ exit 1 -+ fi - ;; - p) - parameter="$OPTARG" -@@ -96,8 +110,13 @@ while getopts "t:" opt; do - pid_filter+=("$value") - done - ;; -+ h) -+ usage -+ exit 1 -+ ;; - \?) - echo "Invalid option: -$OPTARG" >&2 -+ usage - exit 1 - ;; - esac -@@ -130,6 +149,37 @@ function config_display() { - done - } - -+function arr_repet_ele_check() { -+ local arr=("$@") -+ for element in "${arr[@]}"; do -+ count=$(printf '%s\n' "${arr[@]}" | grep -c -w "$element") -+ if [ $count -ge 2 ]; then -+ echo " '$element' duplicate configuration, please check '$config_file'" -+ exit 1 -+ fi -+ done -+} -+ -+function config_file_check() { -+ arr_repet_ele_check ${kernel_symbols[@]} # check kernel -+ arr_repet_ele_check ${sched_symbols[@]} # check sched -+ -+ spl_begin=0 -+ declare -a target_path_tmp -+ declare -a user_symbols_arr_tmp -+ for ((i = 0; i < ${#user_symbols_arr_split[@]}; i++)); do -+ spl_end=${user_symbols_arr_split[$i]} -+ unset user_symbols_arr_tmp -+ target_path_tmp[${#target_path_tmp[*]}]=${user_symbols_arr[$((${spl_begin}))]}${user_symbols_arr[$((${spl_begin} + 1))]} -+ for ((j = ${spl_begin} + 2; j < ${spl_end}; j++)); do -+ user_symbols_arr_tmp[${#user_symbols_arr_tmp[*]}]=${user_symbols_arr[$j]} -+ done -+ spl_begin=${spl_end} -+ arr_repet_ele_check ${user_symbols_arr_tmp[@]} # check user symbol of same bin -+ done -+ arr_repet_ele_check "${target_path_tmp[@]}" # check bin -+} -+ - function config_file_resolve() { - cum_tmp=0 - while IFS= read -r line; do -@@ -166,6 +216,7 @@ function config_file_resolve() { - mkdir -p $sample_log_dir - touch $sample_log - config_display -+ config_file_check - } - - function gen_config_for_analysis() { -@@ -191,13 +242,15 @@ function gen_config_for_analysis() { - function opt_check() { - if [ $is_uprobe_sample = false ] && [ $is_kprobe_sample = false ]; then - echo "use -m u|k|uk to set uprobe/kprobe/both" -+ usage - exit 1 - fi - -- if [ $sleep_time -ge $((sleep_time_max+1)) ] || [ $sleep_time -le 0 ];then -- echo "sampling time should > 0 and <= $sleep_time_max" -- exit 1 -- fi -+ if [ $sleep_time -ge $((sleep_time_max + 1)) ] || [ $sleep_time -le 0 ]; then -+ echo "sampling time should > 0 and <= $sleep_time_max" -+ usage -+ exit 1 -+ fi - } - - function clear_env() { -@@ -462,6 +515,6 @@ echo >/sys/kernel/debug/tracing/uprobe_events - echo >/sys/kernel/debug/tracing/kprobe_events - echo "sample finish" - --if [ $is_sample_with_analysis = true ]; then # only sample -+if [ $is_sample_with_analysis = true ]; then - trace_analysis - fi --- -2.33.0 - diff --git a/0008-add-command-check-config-check-test-case.patch b/0008-add-command-check-config-check-test-case.patch deleted file mode 100644 index 6e21808..0000000 --- a/0008-add-command-check-config-check-test-case.patch +++ /dev/null @@ -1,324 +0,0 @@ -From eb0e130cc72a9d5d6f6e53fa96d74a11a3b8f6eb Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Sat, 25 Nov 2023 15:45:14 +0800 -Subject: [PATCH] add command check, config check , test case - ---- - extra-tools/da-tool/script/da-tool.sh | 68 +++++++++++++++++- - .../da-tool/test/config_check/config_check.sh | 70 +++++++++++++++++++ - .../test/config_check/config_test1.conf | 2 + - .../test/config_check/config_test2.conf | 2 + - .../test/config_check/config_test3.conf | 2 + - .../test/config_check/config_test4.conf | 2 + - .../test/config_check/config_test5.conf | 2 + - .../test/config_check/config_test6.conf | 2 + - .../test/config_check/config_test7.conf | 2 + - extra-tools/da-tool/test/opt_test/opt_test.sh | 49 +++++++++++++ - 10 files changed, 198 insertions(+), 3 deletions(-) - create mode 100755 extra-tools/da-tool/test/config_check/config_check.sh - create mode 100644 extra-tools/da-tool/test/config_check/config_test1.conf - create mode 100644 extra-tools/da-tool/test/config_check/config_test2.conf - create mode 100644 extra-tools/da-tool/test/config_check/config_test3.conf - create mode 100644 extra-tools/da-tool/test/config_check/config_test4.conf - create mode 100644 extra-tools/da-tool/test/config_check/config_test5.conf - create mode 100644 extra-tools/da-tool/test/config_check/config_test6.conf - create mode 100644 extra-tools/da-tool/test/config_check/config_test7.conf - create mode 100644 extra-tools/da-tool/test/opt_test/opt_test.sh - -diff --git a/extra-tools/da-tool/script/da-tool.sh b/extra-tools/da-tool/script/da-tool.sh -index efc9592..a25c347 100755 ---- a/extra-tools/da-tool/script/da-tool.sh -+++ b/extra-tools/da-tool/script/da-tool.sh -@@ -96,7 +96,7 @@ while getopts "t:h" opt; do - is_sample_with_analysis=false - ;; - t) -- if [[ $OPTARG =~ ^[0-9]+$ ]]; then -+ if [[ $OPTARG =~ ^[0-9]{1,3}$ ]]; then - sleep_time=$OPTARG - else - usage -@@ -122,6 +122,13 @@ while getopts "t:h" opt; do - esac - done - -+shift $((OPTIND - 1)) -+if [[ $# -ne 0 ]]; then -+ echo "Illegal parameter :$@" -+ usage -+ exit 1 -+fi -+ - function config_display() { - echo "kernel_symbols:" >>$sample_log - for item in "${kernel_symbols[@]}"; do -@@ -154,7 +161,57 @@ function arr_repet_ele_check() { - for element in "${arr[@]}"; do - count=$(printf '%s\n' "${arr[@]}" | grep -c -w "$element") - if [ $count -ge 2 ]; then -- echo " '$element' duplicate configuration, please check '$config_file'" -+ echo " '$element' duplicate configuration, please check '$config_file'!!!" -+ exit 1 -+ fi -+ done -+} -+ -+# function names cannot contain '.' -+function arr_check_function_support() { -+ local symbols_tmp=("$@") -+ for symbol in "${symbols_tmp[@]}"; do -+ if [[ $symbol =~ \. ]]; then -+ echo "$symbol have '.', not support, please check '$config_file!!!'" | tee -a $sample_log -+ exit 1 -+ fi -+ done -+} -+ -+# kernel symbols should be found in '/proc/kallsyms' -+function arr_check_kernel_symbols_exist() { -+ local symbols_tmp=("$@") -+ for symbol in "${symbols_tmp[@]}"; do -+ if grep "\<$symbol\>" /proc/kallsyms >/dev/null; then -+ echo "$symbol exist in /proc/kallsyms" >>$sample_log -+ else -+ echo "$symbol does not exist in /proc/kallsyms, please check '$config_file'!!!" | tee -a $sample_log -+ exit 1 -+ fi -+ done -+} -+ -+# user symbols should be found by 'nm bin' -+function arr_check_user_symbols_exist() { -+ binary=$1 -+ local symbols_tmp=("${@:2}") -+ for symbol in "${symbols_tmp[@]}"; do -+ if nm "$binary" | grep -q "\<$symbol\>"; then -+ echo "$symbol dost exist in $binary" >>$sample_log -+ else -+ echo "$symbol does not exist in $binary, please check '$config_file'!!!" | tee -a $sample_log -+ exit 1 -+ fi -+ done -+} -+ -+function arr_check_sched() { -+ local sched_tmp=("$@") -+ for sched in "${sched_tmp[@]}"; do -+ if [[ $sched == "sched_switch" ]]; then -+ echo "sched_switch match" >>$sample_log -+ else -+ echo "s only support sched_switch, please check '$config_file'!!!" | tee -a $sample_log - exit 1 - fi - done -@@ -162,7 +219,10 @@ function arr_repet_ele_check() { - - function config_file_check() { - arr_repet_ele_check ${kernel_symbols[@]} # check kernel -- arr_repet_ele_check ${sched_symbols[@]} # check sched -+ arr_check_kernel_symbols_exist ${kernel_symbols[@]} -+ arr_check_function_support ${kernel_symbols[@]} -+ arr_repet_ele_check ${sched_symbols[@]} # check sched -+ arr_check_sched ${sched_symbols[@]} - - spl_begin=0 - declare -a target_path_tmp -@@ -176,6 +236,8 @@ function config_file_check() { - done - spl_begin=${spl_end} - arr_repet_ele_check ${user_symbols_arr_tmp[@]} # check user symbol of same bin -+ arr_check_function_support ${user_symbols_arr_tmp[@]} -+ arr_check_user_symbols_exist ${target_path_tmp[-1]} ${user_symbols_arr_tmp[@]} - done - arr_repet_ele_check "${target_path_tmp[@]}" # check bin - } -diff --git a/extra-tools/da-tool/test/config_check/config_check.sh b/extra-tools/da-tool/test/config_check/config_check.sh -new file mode 100755 -index 0000000..20c06a1 ---- /dev/null -+++ b/extra-tools/da-tool/test/config_check/config_check.sh -@@ -0,0 +1,70 @@ -+#!/bin/bash -+ -+script_dir=$( -+ cd $(dirname $0) -+ pwd -+) -+cd $script_dir/ -+ -+datool="../../script/da-tool.sh" -+case1_path="../../test" -+config_file="/etc/da-tool.conf" -+config_tmp="config.tmp" -+output_file="config_test.log" -+ -+err_config=( -+ ./"config_test1.conf" -+ ./"config_test2.conf" -+ ./"config_test3.conf" -+ ./"config_test4.conf" -+ ./"config_test5.conf" -+ ./"config_test6.conf" -+ ./"config_test7.conf" -+) -+ -+cat $config_file >$config_tmp -+ -+echo >$output_file -+ -+# loop test config -+echo "=========================================================================================" >>$output_file -+echo "===================================== err_configs ======================================" >>$output_file -+echo "=========================================================================================" >>$output_file -+for config_test in "${err_config[@]}"; do -+ echo >$config_file -+ echo "================================" "$config_test" "================================" >>$output_file -+ cat $config_test >$config_file -+ echo "#config start" >>$output_file -+ cat $config_test >>$output_file -+ echo "#config end" >>$output_file -+ $datool -t 1 >>$output_file 2>&1 -+done -+ -+# user check -+g++ $case1_path/case/case1/case1.cpp -o case1_test -+ -+err_user_config=( -+ ./"config_user_test1.conf" -+ ./"config_user_test2.conf" -+ ./"config_user_test3.conf" -+) -+ -+echo "u,$script_dir/,case1_test,_Z5funcAv,aaaa" >./"config_user_test1.conf" -+echo "u,$script_dir/,case1_test,_Z5funcAv,_Z5funcAv" >./"config_user_test2.conf" -+echo "u,$script_dir/,case1_test,_Z5funcAv.a" >./"config_user_test3.conf" -+ -+# loop test config -+echo "=========================================================================================" >>$output_file -+echo "===================================== user err_configs ======================================" >>$output_file -+echo "=========================================================================================" >>$output_file -+for config_test in "${err_user_config[@]}"; do -+ echo >$config_file -+ echo "================================" "$config_test" "================================" >>$output_file -+ cat $config_test >$config_file -+ echo "#config start" >>$output_file -+ cat $config_test >>$output_file -+ echo "#config end" >>$output_file -+ $datool -t 1 >>$output_file 2>&1 -+done -+ -+cat $config_tmp >$config_file -diff --git a/extra-tools/da-tool/test/config_check/config_test1.conf b/extra-tools/da-tool/test/config_check/config_test1.conf -new file mode 100644 -index 0000000..cc75ca7 ---- /dev/null -+++ b/extra-tools/da-tool/test/config_check/config_test1.conf -@@ -0,0 +1,2 @@ -+# kernel repet config -+k,udp_recvmsg,udp_recvmsg -diff --git a/extra-tools/da-tool/test/config_check/config_test2.conf b/extra-tools/da-tool/test/config_check/config_test2.conf -new file mode 100644 -index 0000000..9b1951d ---- /dev/null -+++ b/extra-tools/da-tool/test/config_check/config_test2.conf -@@ -0,0 +1,2 @@ -+# u config err -+u,udp_recvmsg -diff --git a/extra-tools/da-tool/test/config_check/config_test3.conf b/extra-tools/da-tool/test/config_check/config_test3.conf -new file mode 100644 -index 0000000..dd8004d ---- /dev/null -+++ b/extra-tools/da-tool/test/config_check/config_test3.conf -@@ -0,0 +1,2 @@ -+# kenrel config error symbols -+k,udp_recvmsg,aaaaaa -diff --git a/extra-tools/da-tool/test/config_check/config_test4.conf b/extra-tools/da-tool/test/config_check/config_test4.conf -new file mode 100644 -index 0000000..4afb295 ---- /dev/null -+++ b/extra-tools/da-tool/test/config_check/config_test4.conf -@@ -0,0 +1,2 @@ -+# s config error -+s,sched_switch2 -diff --git a/extra-tools/da-tool/test/config_check/config_test5.conf b/extra-tools/da-tool/test/config_check/config_test5.conf -new file mode 100644 -index 0000000..4afb295 ---- /dev/null -+++ b/extra-tools/da-tool/test/config_check/config_test5.conf -@@ -0,0 +1,2 @@ -+# s config error -+s,sched_switch2 -diff --git a/extra-tools/da-tool/test/config_check/config_test6.conf b/extra-tools/da-tool/test/config_check/config_test6.conf -new file mode 100644 -index 0000000..4945653 ---- /dev/null -+++ b/extra-tools/da-tool/test/config_check/config_test6.conf -@@ -0,0 +1,2 @@ -+# s config repet -+s,sched_switch,sched_switch -diff --git a/extra-tools/da-tool/test/config_check/config_test7.conf b/extra-tools/da-tool/test/config_check/config_test7.conf -new file mode 100644 -index 0000000..6b4088b ---- /dev/null -+++ b/extra-tools/da-tool/test/config_check/config_test7.conf -@@ -0,0 +1,2 @@ -+# not support function check -+k,udp_recvmsg,set_bringup_idt_handler.constprop.0 -diff --git a/extra-tools/da-tool/test/opt_test/opt_test.sh b/extra-tools/da-tool/test/opt_test/opt_test.sh -new file mode 100644 -index 0000000..ab7dd65 ---- /dev/null -+++ b/extra-tools/da-tool/test/opt_test/opt_test.sh -@@ -0,0 +1,49 @@ -+#!/bin/bash -+ -+script_dir=$( -+ cd $(dirname $0) -+ pwd -+) -+cd $script_dir/ -+ -+datool_path="../../script/" -+ -+err_commands=( -+ "./da-tool.sh -t 0" -+ "./da-tool.sh -t 101" -+ "./da-tool.sh -t 1000000000000000000000000000" -+ "./da-tool.sh -t -10" -+ "./da-tool.sh -t 0.12345" -+ "./da-tool.sh -t abc" -+ "./da-tool.sh -t ~" -+ "./da-tool.sh -t -m 5" -+ "./da-tool.sh -a" -+ "./da-tool.sh -x 1" -+ "./da-tool.sh -" -+ "./da-tool.sh 1" -+) -+ -+right_commands=( -+ "./da-tool.sh -h" -+ #"./da-tool.sh -t 1" -+ #"./da-tool.sh" -+) -+ -+output_file="opt_test.log" -+echo >$output_file -+ -+echo "=========================================================================================" >>$output_file -+echo "===================================== err_commands ======================================" >>$output_file -+echo "=========================================================================================" >>$output_file -+for command in "${err_commands[@]}"; do -+ echo "================================" "$command" "================================" >>$output_file -+ $datool_path$command >>$output_file 2>&1 -+done -+ -+echo "=========================================================================================" >>$output_file -+echo "===================================== right_commands ====================================" >>$output_file -+echo "=========================================================================================" >>$output_file -+for command in "${right_commands[@]}"; do -+ echo "================================" "$command" "================================" >>$output_file -+ $datool_path$command >>$output_file 2>&1 -+done --- -2.33.0 - diff --git a/0009-Dealing-with-situations-where-sched-are-missing.patch b/0009-Dealing-with-situations-where-sched-are-missing.patch deleted file mode 100644 index 330c204..0000000 --- a/0009-Dealing-with-situations-where-sched-are-missing.patch +++ /dev/null @@ -1,463 +0,0 @@ -From 2d3710909017239828c51cd5901c23415b865c49 Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Sat, 25 Nov 2023 17:05:11 +0800 -Subject: [PATCH] Dealing with situations where 'sched' are missing - ---- - extra-tools/da-tool/analysis/config.cpp | 4 +- - extra-tools/da-tool/analysis/config.h | 3 +- - .../da-tool/analysis/function_stack.cpp | 2 +- - extra-tools/da-tool/analysis/time_pair.cpp | 23 +++- - .../da-tool/analysis/trace_resolve.cpp | 105 +++++++++++++++++- - extra-tools/da-tool/analysis/trace_resolve.h | 28 +++-- - extra-tools/da-tool/main.cpp | 8 +- - extra-tools/da-tool/script/da-tool.sh | 25 +++-- - 8 files changed, 159 insertions(+), 39 deletions(-) - -diff --git a/extra-tools/da-tool/analysis/config.cpp b/extra-tools/da-tool/analysis/config.cpp -index 08420ad..d84cc5b 100644 ---- a/extra-tools/da-tool/analysis/config.cpp -+++ b/extra-tools/da-tool/analysis/config.cpp -@@ -45,7 +45,6 @@ void Config::pathInit() - - // debug - filename[FILE_TYPE_OUTPUT_RUN_LOG] = pathOutputDebug + "/run.log"; -- filename[FILE_TYPE_OUTPUT_FUNC_STACK_ALL_INFO] = pathOutput + "/func_stack_all_info"; - filename[FILE_TYPE_DEBUG_TIME_PAIE] = pathOutputDebug + "/debug_time_pair"; - filename[FILE_TYPE_DEBUG_TRACE] = pathOutputDebug + "/debug_trace"; - filename[FILE_TYPE_DEBUG_FUNC_STACK_TRACE] = pathOutputDebug + "/debug_funcstk_trace"; -@@ -129,6 +128,7 @@ void Config::functionCfgInit() - std::ofstream fileDebug(filename[FILE_TYPE_DEBUG_CONFIG], std::ios::out | std::ios::trunc); - if (!fileDebug) { - std::cout << "file open failed:" << filename[FILE_TYPE_DEBUG_CONFIG] << std::endl; -+ file.close(); - return; - } - -@@ -157,7 +157,7 @@ void Config::configInit(int argc, char *argv[]) - readTraceBegin = std::stoi(optarg); - break; - case 'l': -- readTraceEnd = std::stoi(optarg); -+ readTraceLen = std::stoi(optarg); - break; - case 'g': - if (std::stoi(optarg) < DEBUG_LEVEL_MAX) { -diff --git a/extra-tools/da-tool/analysis/config.h b/extra-tools/da-tool/analysis/config.h -index ccce0f2..e1a5d4a 100644 ---- a/extra-tools/da-tool/analysis/config.h -+++ b/extra-tools/da-tool/analysis/config.h -@@ -26,7 +26,6 @@ typedef enum { - FILE_TYPE_OUTPUT_DELAY, - FILE_TYPE_OUTPUT_RUN_LOG, - FILE_TYPE_OUTPUT_FUNC_STACK_DELALY, -- FILE_TYPE_OUTPUT_FUNC_STACK_ALL_INFO, - FILE_TYPE_OUTPUT_PROCESS_SCHED_INFO, - FILE_TYPE_OUTPUT_SUMMARY_SCHED_INFO, - -@@ -109,7 +108,7 @@ public: // function cfg - std::vector(FILE_TYPE_MAX, "")}; - - int readTraceBegin; -- int readTraceEnd; -+ int readTraceLen; - void configInit(int argc, char *argv[]); - DEBUG_LEVEL_E getDebugLevel(); - }; -diff --git a/extra-tools/da-tool/analysis/function_stack.cpp b/extra-tools/da-tool/analysis/function_stack.cpp -index fcc2a8d..f1a8312 100644 ---- a/extra-tools/da-tool/analysis/function_stack.cpp -+++ b/extra-tools/da-tool/analysis/function_stack.cpp -@@ -341,7 +341,7 @@ void FunctionStack::processDelayAnalysis() - void FunctionStack::stackNodeMapDisplay() - { - Config &cfg = Config::getInstance(); -- std::cout << "Display the function delay of each pid " << std::endl; -+ std::cout << "[INFO] display the function delay of each pid " << std::endl; - for (const auto &processInfo : stackNodeMap) { - int pid = processInfo.first; - if (cfg.filterCfgMap.size() == 0 || cfg.filterCfgMap.count(pid) != 0) { -diff --git a/extra-tools/da-tool/analysis/time_pair.cpp b/extra-tools/da-tool/analysis/time_pair.cpp -index 037bce1..2c1f813 100644 ---- a/extra-tools/da-tool/analysis/time_pair.cpp -+++ b/extra-tools/da-tool/analysis/time_pair.cpp -@@ -85,6 +85,7 @@ void TimePair::saveFuncStkDebugToFile(std::ofstream &file, const int &pid, const - continue; - } - file << "pid" << "," << pid << ","; -+ file << "stk_pid" << "," << stk_pid << ","; - file << "timestamp" << "," << timestamp << ","; - file << "functionIndex" << "," << functionIndex << ","; - file << "isRet" << "," << isRet << ","; -@@ -152,6 +153,20 @@ void TimePair::timePairUpdateLoop(const int &pid, const int &functionIndex, cons - timePairMap[pid].emplace(functionIndex, infoTmp); - } - -+ Config &cfg = Config::getInstance(); -+ bool isCfgSchedSwitch = cfg.funcCfgMap.count("sched_switch") > 0; -+ int sched_switch_funcidx = -1; -+ if (isCfgSchedSwitch) { -+ sched_switch_funcidx = cfg.funcCfgMap["sched_switch"].functionIndex; -+ const TraceResolve &trace_resolve_inst = TraceResolve::getInstance(); -+ const FirstInfo &firstInfo = trace_resolve_inst.getTraceFirstInfo(); -+ int coreIndex = line_info_tmp.core; -+ // This process cannot find the starting sched switch on this core, ignore trace after timestamp -+ if (timestamp <= firstInfo.schedSwitchTime[coreIndex] && functionIndex != sched_switch_funcidx) { -+ timePairMap[pid][functionIndex].minEndTimeInvalid = timestamp; -+ } -+ } -+ - if (isRet) { - if (timePairMap[pid][functionIndex].startTime.size() == 0) { // fist is endtime ,startime=endtime - timePairMap[pid][functionIndex].startTime.emplace_back(timestamp); -@@ -496,14 +511,18 @@ void TimePair::saveDelayInfoToFile() - file << "call_times(r<0),ave(r<0),sum(r<0),min(r<0),max(r<0),p50(r<0),p80(r<0),p95(r<0),p99(r<0),"; - file << std::endl; - for (const auto &processInfo : timePairMap) { -+ int pid = processInfo.first; -+ if (pid == 0) { -+ continue; -+ } - for (const auto &funcInfo : processInfo.second) { -- if (cfg.filterCfgMap.size() != 0 && cfg.filterCfgMap.count(processInfo.first) == 0) { -+ if (cfg.filterCfgMap.size() != 0 && cfg.filterCfgMap.count(pid) == 0) { - continue; - } - if (funcInfo.second.summary.callTimes[DELAY_INFO_ALL] <= 0) { - continue; - } -- file << "," << processInfo.first << ","; -+ file << "," << pid << ","; - file << cfg.IndexToFunction[funcInfo.first] << ","; - - for (int i = 0; i < DELAY_INFO_MAX; i++) { -diff --git a/extra-tools/da-tool/analysis/trace_resolve.cpp b/extra-tools/da-tool/analysis/trace_resolve.cpp -index 8424464..38e6d2b 100644 ---- a/extra-tools/da-tool/analysis/trace_resolve.cpp -+++ b/extra-tools/da-tool/analysis/trace_resolve.cpp -@@ -56,6 +56,12 @@ const std::vector &TraceResolve::getTraceLine() const - return traceLineVec; - } - -+const FirstInfo &TraceResolve::getTraceFirstInfo() const -+{ -+ return firstInfo; -+} -+ -+ - void SchedSwitchLine::processStateToEnum(std::string state) - { - if (state == "R") { -@@ -68,9 +74,36 @@ void SchedSwitchLine::processStateToEnum(std::string state) - } - } - -+int countLines(const std::string& filename) { -+ std::ifstream file(filename); -+ if (!file.is_open()) { -+ std::cout << "file open failed:" << filename << std::endl; -+ return -1; -+ } -+ -+ int lineCount = 0; -+ std::string line; -+ while (std::getline(file, line)) { -+ lineCount++; -+ } -+ -+ file.close(); -+ return lineCount; -+} -+ - void TraceResolve::resolveTrace() - { - Config &cfg = Config::getInstance(); -+ int readTraceLen = 0; -+ if (cfg.readTraceLen == 0) { -+ readTraceLen = countLines(cfg.filename[FILE_TYPE_TRACE]); -+ if (readTraceLen <= 0) { -+ return; -+ } -+ } else { -+ readTraceLen = cfg.readTraceLen; -+ } -+ - std::ifstream file(cfg.filename[FILE_TYPE_TRACE]); - if (!file) { - std::cout << "file open failed:" << cfg.filename[FILE_TYPE_TRACE] << std::endl; -@@ -83,7 +116,6 @@ void TraceResolve::resolveTrace() - file.close(); - return; - } -- - int line_num = 0; - int regex_num = 0; - bool isFirstMatch = true; -@@ -94,13 +126,15 @@ void TraceResolve::resolveTrace() - std::regex patternSchedSwitch(R"(\s+(.+)-(\d+)\s+\[(\d+)\]\s+(.)(.)(.)(.)\s+(\d+)\.(\d+):\s+(sched_switch):\s+prev_comm=.+prev_pid=(\d+)\s+prev_prio=(\d+)\s+prev_state=(\S+)\s+==>\s+next_comm=.+next_pid=(\d+)\s+next_prio=(\d+))"); - while (getline(file, line)) { - line_num++; -- if (line_num % 10000 == 0) { -- std::cout << regex_num << "/" << line_num << " (matched/lines)" << std::endl; -- } - if (line_num < cfg.readTraceBegin) { - continue; - } -- if (cfg.readTraceEnd != 0 && line_num > cfg.readTraceBegin + cfg.readTraceEnd) { -+ if (line_num % 10000 == 0) { -+ double rate = (line_num - cfg.readTraceBegin) * 1.0/ readTraceLen; -+ std::cout << "[Resolve] " << std::fixed << std::setprecision(3) << rate * 100 << "%, "; -+ std::cout << "Match " << regex_num << std::endl; -+ } -+ if (cfg.readTraceLen != 0 && line_num > cfg.readTraceBegin + cfg.readTraceLen) { - break; - } - -@@ -143,6 +177,9 @@ void TraceResolve::resolveTrace() - if (isMatch) { - if (isFirstMatch) { - startTimeIntPart = std::stoi(match[TRACE_INFO_TIMESTAMP_INT].str()); -+ firstInfo.coreId = std::stoi(match[TRACE_INFO_CPU].str()); -+ firstInfo.startTime = (std::stoi(match[TRACE_INFO_TIMESTAMP_INT].str()) - startTimeIntPart) * MICRO_PER_SEC \ -+ + std::stoi(match[TRACE_INFO_TIMESTAMP_FLOAT].str()); - isFirstMatch = false; - } - match_info.timestamp = (std::stoi(match[TRACE_INFO_TIMESTAMP_INT].str()) - startTimeIntPart) * MICRO_PER_SEC \ -@@ -165,7 +202,7 @@ void TraceResolve::resolveTrace() - } - - if (traceLineVec.size() > 0) { -- std::cout << "trace delay :" << traceLineVec[traceLineVec.size() - 1].timestamp - traceLineVec[0].timestamp << std::endl; -+ std::cout << "[INFO] trace delay : " << traceLineVec[traceLineVec.size() - 1].timestamp - traceLineVec[0].timestamp << std::endl; - } - - file.close(); -@@ -206,8 +243,64 @@ double TraceResolve::convertTimeIntToDouble(const int ×tamp) - return timestamp * 1.0 / MICRO_PER_SEC + startTimeIntPart; - } - -+void TraceResolve::firstSchedSwitchTimeAnalysis() -+{ -+ Config &cfg = Config::getInstance(); -+ bool isCfgSchedSwitch = cfg.funcCfgMap.count("sched_switch") > 0; -+ int sched_switch_funcidx = -1; -+ if (isCfgSchedSwitch) { -+ sched_switch_funcidx = cfg.funcCfgMap["sched_switch"].functionIndex; -+ } else { -+ return; -+ } -+ -+ firstInfo.schedSwitchTime.resize(CPU_CORE_NUM_MAX, INT_MAX); -+ firstInfo.coreTime.resize(CPU_CORE_NUM_MAX, INT_MAX); -+ firstInfo.schedSwitchTime[firstInfo.coreId] = firstInfo.startTime; -+ firstInfo.coreTime[firstInfo.coreId] = firstInfo.startTime; -+ -+ for (const auto &line_info_tmp : traceLineVec) { -+ std::string functionName = line_info_tmp.functionName; -+ int pid = line_info_tmp.pid; -+ if (cfg.funcCfgMap.count(functionName) == 0) { -+ continue; -+ } -+ -+ int timestamp = line_info_tmp.timestamp; -+ int coreIndex = line_info_tmp.core; -+ int functionIndex = cfg.funcCfgMap[functionName].functionIndex; -+ // first appearance of coreIndex in trace -+ if (firstInfo.coreTime[coreIndex] == INT_MAX) { -+ firstInfo.coreTime[coreIndex] = timestamp; -+ } -+ // first appearance of sched_switch in coreIndex's trace -+ if (functionIndex == sched_switch_funcidx && firstInfo.schedSwitchTime[coreIndex] == INT_MAX) { -+ firstInfo.schedSwitchTime[coreIndex] = timestamp; -+ } -+ } -+} -+ - void TraceResolve::trace_resolve_proc() - { - resolveTrace(); - saveTraceRegexRstToFile(); -+ -+ firstSchedSwitchTimeAnalysis(); -+} -+ -+void TraceResolve::trace_check_show() -+{ -+ Config &cfg = Config::getInstance(); -+ for (int coreId = 0; coreId < CPU_CORE_NUM_MAX; coreId++) { -+ int firstSchedSwitchTime = firstInfo.schedSwitchTime[coreId]; -+ int firstCoreTime = firstInfo.coreTime[coreId]; -+ if (cfg.getDebugLevel() >= DEBUG_LEVEL_1) { -+ std::cout << "coreId:" << coreId; -+ std::cout << ",firstSchedSwitchTime:" << firstSchedSwitchTime; -+ std::cout << ",firstCoreTime:" << firstCoreTime << std::endl; -+ } -+ if (firstSchedSwitchTime != firstCoreTime) { -+ std::cout << "[ERROR] core " << coreId << " missing starting scheduling information, result maybe error!!!" << std::endl; -+ } -+ } - } -\ No newline at end of file -diff --git a/extra-tools/da-tool/analysis/trace_resolve.h b/extra-tools/da-tool/analysis/trace_resolve.h -index df330d5..e943d20 100644 ---- a/extra-tools/da-tool/analysis/trace_resolve.h -+++ b/extra-tools/da-tool/analysis/trace_resolve.h -@@ -23,18 +23,8 @@ - // include\linux\sched.h - typedef enum - { -- PROCESS_STATE_TASK_RUNNING, // R -- PROCESS_STATE_TASK_INTERRUPTIBLE, // S --// PROCESS_STATE_TASK_UNINTERRUPTIBL, // D --// PROCESS_STATE_TASK_STOPPED, // T --// PROCESS_STATE_TASK_TRACED, //t --// --// PROCESS_STATE_EXIT_DEAD, // X --// PROCESS_STATE_EXIT_ZOMBIE, // Z --// PROCESS_STATE_EXIT_TRACE, --// --// PROCESS_STATE_TASK_PARKED, // P --// PROCESS_STATE_TASK_DEAD, // I -+ PROCESS_STATE_TASK_RUNNING, // R -+ PROCESS_STATE_TASK_INTERRUPTIBLE, // S - PROCESS_STATE_MAX, - } PROCESS_STATE_E; - -@@ -64,6 +54,14 @@ public: - int functionIndex; - }; - -+class FirstInfo { -+public: -+ std::vector schedSwitchTime; // [coreId] -+ std::vector coreTime; // [coreId] -+ int coreId; // first core in trace -+ int startTime; -+}; -+ - class TraceResolve { - public: - static TraceResolve &getInstance() { -@@ -81,10 +79,16 @@ private: // regex - void resolveTrace(); - void saveTraceRegexRstToFile(); - -+private: -+ FirstInfo firstInfo; -+ void firstSchedSwitchTimeAnalysis(); -+ - public: - const std::vector &getTraceLine() const; -+ const FirstInfo &getTraceFirstInfo() const; - double convertTimeIntToDouble(const int ×tamp); - void trace_resolve_proc(); -+ void trace_check_show(); - }; - - #endif -\ No newline at end of file -diff --git a/extra-tools/da-tool/main.cpp b/extra-tools/da-tool/main.cpp -index b6ec46d..34652f0 100644 ---- a/extra-tools/da-tool/main.cpp -+++ b/extra-tools/da-tool/main.cpp -@@ -21,10 +21,10 @@ using namespace std; - - int main(int argc, char *argv[]) - { -- cout << "analysis start..." << endl; -+ cout << "[STEP 2] analysis start..." << endl; - Config &cfg = Config::getInstance(); - cfg.configInit(argc, argv); -- cout << "analysis resolve..." << endl; -+ cout << "[STEP 2-1] resolve trace..." << endl; - TraceResolve &trace_resolve_inst = TraceResolve::getInstance(); - trace_resolve_inst.trace_resolve_proc(); - -@@ -36,6 +36,8 @@ int main(int argc, char *argv[]) - - FunctionStack &fstk = FunctionStack::getInstance(); - fstk.function_stack_proc(); -- cout << "analysis finish" << endl; -+ -+ trace_resolve_inst.trace_check_show(); -+ cout << "[STEP 2-2] analysis finish" << endl; - return 0; - } -\ No newline at end of file -diff --git a/extra-tools/da-tool/script/da-tool.sh b/extra-tools/da-tool/script/da-tool.sh -index a25c347..14fd009 100755 ---- a/extra-tools/da-tool/script/da-tool.sh -+++ b/extra-tools/da-tool/script/da-tool.sh -@@ -316,7 +316,7 @@ function opt_check() { - } - - function clear_env() { -- echo "clear env..." -+ echo "[INFO] clear env..." - echo 0 >/sys/kernel/debug/tracing/tracing_on - - events_folder="/sys/kernel/debug/tracing/events/" -@@ -361,7 +361,7 @@ function clear_env() { - echo 0 >"$event_file" - fi - done -- echo "clear env finish" -+ echo "[INFO] clear env finish" - } - - function sample_init() { -@@ -528,10 +528,12 @@ function trace_analysis() { - } - - ###################### main proc #################################### -+echo "[STEP 1] da-tool start" -+echo "[STEP 1-1] resolve config" - config_file_resolve -- -+echo "[STEP 1-2] environment initialization" - if [ $is_clear = true ]; then -- echo "clear" -+ echo "[INFO] clear" - clear_env - exit 1 - fi -@@ -555,28 +557,29 @@ uprobe_event_enable $is_uprobe_sample - kprobe_event_enable $is_kprobe_sample - sched_event_enable $is_kprobe_sample - --# sampling -+echo "[STEP 1-3] start tracing..." -+# tracing - trace_record_begin - - for ((i = 1; i <= ${sleep_time}; i++)); do -- # trace_line_num=$(wc -l < /sys/kernel/debug/tracing/trace) # wrong -- echo "sampling " $i/${sleep_time} #", trace line" $trace_line_num -+ echo "[INFO] tracing " $i/${sleep_time} - sleep 1 - done --#trace_line_num=$(wc -l < /sys/kernel/debug/tracing/trace) # slow --#echo "trace line" $trace_line_num - - trace_record_end -+echo "[STEP 1-4] environment reset..." - - clear_env - gen_config_for_analysis -+ -+echo "[STEP 1-5] save trace..." - storage_data - echo "" >/sys/kernel/debug/tracing/trace - # only enable = 0 , clear event - echo >/sys/kernel/debug/tracing/uprobe_events - echo >/sys/kernel/debug/tracing/kprobe_events --echo "sample finish" -- -+echo "[STEP 1-6] finish tracing ..." - if [ $is_sample_with_analysis = true ]; then - trace_analysis - fi -+echo "[EXIT] da-tool exit..." --- -2.33.0 - diff --git a/0010-Soft-links-for-documents.patch b/0010-Soft-links-for-documents.patch deleted file mode 100644 index 8db84b1..0000000 --- a/0010-Soft-links-for-documents.patch +++ /dev/null @@ -1,232 +0,0 @@ -From 904d42948317e9ebfc1b3ae2a83778de4c9b8d2c Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Sun, 26 Nov 2023 22:17:01 +0800 -Subject: [PATCH] Soft links for documents - ---- - extra-tools/da-tool/README.md | 200 ++-------------------------------- - 1 file changed, 8 insertions(+), 192 deletions(-) - -diff --git a/extra-tools/da-tool/README.md b/extra-tools/da-tool/README.md -index 209b43b..157af65 100644 ---- a/extra-tools/da-tool/README.md -+++ b/extra-tools/da-tool/README.md -@@ -1,26 +1,9 @@ - - # da-tool - --通过`uprobe`或`kprobe`采样可获得函数执行的`trace`,但配置比较复杂,`trace`包含的信息很多,显示不直观。本工具旨在简易配置采样,以及分析所配置的函数的时延特征。 -+通过`uprobe`或`kprobe`采样可获得函数执行的`trace`,但配置比较复杂,`trace`包含的信息很多,显示不直观。本工具旨在简易配置采样,以及分析所配置的函数的时延特征。 - --主要应用场景:分析tcp/udp收发相关函数时延特征。 -- --## 原理 --基于u/kprobe 采样,可获得内核态和用户态函数的起止执行时间和结束执行时间的trace。 --可推导出: --+ 函数间的调用关系 --+ 函数的执行时间 --+ 线程的调度特征 -- --## 主要功能 -- --+ 推导调用关系(乱序) --+ 统计各函数调用栈时延信息 --+ 线程调度特征 --+ 记录系统信息 -- --## 使用限制 --+ 不支持递归函数分析 -+主要应用场景:分析`tcp/udp`收发相关函数时延特征。 - - ## 文件夹说明 - **工程文件夹** -@@ -39,180 +22,13 @@ - + CMakeLists.txt - + test : 测试程序 - --**本地文件夹** -- --+ /etc/da-tool.conf : 配置文件,主要配置需要抓取的函数 --+ /var/da-tool: -- + tmp -- + sample_output_* : 采样文件存放位置,可打包 -- + analysis_input : 临时用于分析程序的依赖文件 -- + analysis_output -- + debug : 可用于调试的参考日志 -- + output : 时延结果信息 -- --## 使用方法 --### 命令格式 --时延分析工具通过`da-tool.sh`命令采集和分析函数时延,使用格式为 -- --**da-tool.sh** [-t <*probe time*>] -- --|参数|是否必选|参数函数| --|----|--------|-------| --|-t |否| 采集函数 `trace` 的时长,单位秒,最大限制 100,默认10| -- --### 自定义配置函数 --配置文件:`/etc/da-tool.conf` -- --举例如下: --``` --# /etc/da-tool.conf -- --# kernel symbol config (ref: /proc/kallsyms) --k,udp_recvmsg,udp_sendmsg,dev_queue_xmit,udp_send_skb,sock_recvmsg,__skb_recv_udp,udp_rcv -- --# sched config --s,sched_switch -- --# user symbol config (format : u,path,bin_name,func1,func2,...,funcN) --# u,/path/,bin_name,sendto --u,/home/git_repo/nda-tool/nda-tool/test/net_demo2/,server_no_blk,recvfrom --u,/home/git_repo/nda-tool/nda-tool/test/net_demo2/,client_to_noblk,sendto --u,/home/git_repo/nda-tool/nda-tool/test/base_demo/,base_demo_cpp,_Z5func1v,_Z5func2v,_Z5func2i,_Z5func3v,_Z5func4v --# end --``` -- --+ k 开头为 kernel 符号,u 开头为用户态程序符号, s 开头为调度配置(目前仅支持`sched_switch`且必须配置) --+ k 和 s 只能一行配置完 --+ u 可以多行配置, 格式:`[u,程序路径,二进制名称,追踪的函数]` --+ 请确保函数存在,否则 `uprobe` 配置不成功,所配置的内核符号应在`/proc/kallsyms`能够查询到,所配置的用户态程序符号仅支持`C/C++`,且通过`objdump`应能够查询到 --+ 每行末尾不要有逗号 -- -- --注意,为了支持用户态不同二进制重名函数采集,配置`event`时,命名为`u0_func1`、`u1_func1`...,以上面配置为例,`_Z5func1v`为`u2__Z5func1v`。 --### 分析结果说明 -- --+ 终端输出结果:各函数调用栈的时延信息 --+ 文件夹输出结果 : `/var/da-tool/analysis-output/ouput/` -- + func_delay_stack : 函数调用栈时延结果 -- + process_sched_info :进程的调度信息 -- + summary_delay.csv : 时延分析总结报告 -- + summary_sched.csv : 调度分析总结报告 -- --#### 终端输出结果介绍 --``` --├──pid: 222459{local:(450040, 44.988%), global:(1000346, 100.000%)} --│ ├─────sched_switch{local:(13160, 1.316%, 453.793), global:(13160, 1.316%, 453.793), times:29, (int)ret>=0 times:29} --│ └─────u0_recvfrom{local:(422312, 42.217%, 10.729), global:(537146, 53.696%, 13.646), times:39362, (int)ret>=0 times:20} --│ ├─────sched_switch{local:(2927, 0.293%, 209.071), global:(2927, 0.293%, 209.071), times:14, (int)ret>=0 times:14} --│ └─────sock_recvmsg{local:(55313, 5.529%, 1.405), global:(111907, 11.187%, 2.843), times:39362, (int)ret>=0 times:20} --│ └─────udp_recvmsg{local:(36357, 3.634%, 0.924), global:(56594, 5.657%, 1.438), times:39362, (int)ret>=0 times:20} --│ └─────__skb_recv_udp{local:(20237, 2.023%, 0.514), global:(20237, 2.023%, 0.514), times:39362, (int)ret>=0 times:39342} -- --``` --以此结果为例,该进程是一个udp非阻塞收包进程。 --+ `u0_recvfrom` 为该进程在运行后执行的用户态函数,`u0_` 前缀表示第一个应用程序的函数,实际函数名为`recvfrom`;`sched_switch` 为调度函数;其余函数为内核函数 --+ `global` 和 `local` 对应的括号内为该函数执行的时延信息,其中 `local` 是剔除掉子函数和调度所执行的时间 , `global` 为该函数实际执行时长 --+ 每个函数的 `global` 和 `local` 的括号内三个信息分别为,时延,该时延所占进程全部时间的百分比,平均时延(时延/执行次数) --+ 每一级函数的 `global` 时间等于本级函数`local`时间与下一级所有函数的 `global` 时间之和 --+ `times` 是该函数调用栈的次数, --+ `(int)ret>=0 times`:表示该函数返回值转换为`int`后大于等于0的次数,无返回值函数返回值是无效的值 --+ 以上时间单位为微秒 -- --#### 文件夹结果介绍 -- --**时延和调用关系信息**:`/var/da-tool/analysis_output/output/func_delay_stack` --``` --# 此部分信息为终端输出结果的文件格式存储 --pid_222459;sched_switch 13160, localDelaySum ,13160, localAvedelay ,453.793103, localPercentage, 1.316%, globalDelaySum ,13160, globalAvedelay, 453.793103, globalPercentage, 1.316%, times , 29, (int)ret>=0 times ,29 --pid_222459;u0_recvfrom;sched_switch 2927, localDelaySum ,2927, localAvedelay ,209.071429, localPercentage, 0.293%, globalDelaySum ,2927, globalAvedelay, 209.071429, globalPercentage, 0.293%, times , 14, (int)ret>=0 times ,14 --pid_222459;u0_recvfrom 422312, localDelaySum ,422312, localAvedelay ,10.728926, localPercentage, 42.217%, globalDelaySum ,537146, globalAvedelay, 13.646309, globalPercentage, 53.696%, times ,39362, (int)ret>=0 times ,20 --pid_222459;u0_recvfrom;sock_recvmsg 55313, localDelaySum ,55313, localAvedelay ,1.405239, localPercentage, 5.529%, globalDelaySum ,111907, globalAvedelay, 2.843021, globalPercentage, 11.187%, times ,39362, (int)ret>=0 times ,20 --pid_222459;u0_recvfrom;sock_recvmsg;udp_recvmsg 36357, localDelaySum ,36357, localAvedelay ,0.923657, localPercentage, 3.634%, globalDelaySum ,56594, globalAvedelay, 1.437783, globalPercentage, 5.657%, times ,39362, (int)ret>=0 times ,20 --pid_222459;u0_recvfrom;sock_recvmsg;udp_recvmsg;__skb_recv_udp 20237, localDelaySum ,20237, localAvedelay ,0.514125, localPercentage, 2.023%, globalDelaySum ,20237, globalAvedelay, 0.514125, globalPercentage, 2.023%, times ,39362, (int)ret>=0 times ,39342 --``` -- --**调度信息**:`/var/da-tool/analysis_output/output/process_sched_info` --``` --# delaySum : 该pid分析的总时长 --# schedSwitchDelay : 调度所占的时间 --# runtime :delaySum - schedSwitchDelay --# cpuSwitchTimes : 该pid从一个核切换到另一个核的次数 --# core 2, run time 704927 : 表示在cpu2 上运行时长为 704927 --# startTime,67551.691078,endTime,67551.701193,coreIndex,2 :在这个时间段内在cpu2上运行 --# coreIndex,-1 表示该pid被切走的时长(sched_switch) -- --pid,222459,delaySum ,1000368,schedSwitchDelay ,37201,runtime ,963167,cpuSwitchTimes ,1, -- core 2, run time 704927 -- core 3, run time 258240 --startTime,67551.691078,endTime,67551.701193,coreIndex,2 --startTime,67551.701193,endTime,67551.701970,coreIndex,-1 --startTime,67551.701970,endTime,67551.702503,coreIndex,2 --startTime,67551.702503,endTime,67551.713700,coreIndex,-1 --startTime,67551.713700,endTime,67551.723964,coreIndex,2 --startTime,67551.723964,endTime,67551.724119,coreIndex,-1 --... -- --``` --**时延分析总结报告**:`/var/da-tool/analysis_output/output/summary_delay.csv` -- --包含信息如下,其中`(r>=0)`表示函数返回值转成`int`后大于等于0的情况。 --`ave,sum,min,max,p50,p80,p95,p99`等为时延信息的平均值、总和、极值、各百分位下的数值。 --``` --pid,function,call_times,ave,sum,min,max,p50,p80,p95,p99, --call_times(r>=0),ave(r>=0),sum(r>=0),min(r>=0),max(r>=0),p50(r>=0),p80(r>=0),p95(r>=0),p99(r>=0), --call_times(r<0),ave(r<0),sum(r<0),min(r<0),max(r<0),p50(r<0),p80(r<0),p95(r<0),p99(r<0), --``` -- --**调度分析总结报告**:`/var/da-tool/analysis_output/output/summary_sched.csv` --``` --pid,delaySum,schedSwitchDelay,schedSwitchPercentage,schedSwitchTimes,cpuSwitchTimes --``` --+ delaySum : 总耗时 --+ schedSwitchDelay : 调度总耗时 --+ schedSwitchPercentage : schedSwitchDelay 占 delaySum 的百分比 --+ schedSwitchTimes : 调度次数 --+ cpuSwitchTimes : cpu 切换次数 -- --### 扩展功能 --`da-tool` 生成的结果信息可调用 火焰图生成工具,可视化分析结果, --`./flamegraph.pl` 可在 `https://gitee.com/mirrors/FlameGraph` 中获取 --```shell --# 全部信息 --cat /var/da-tool/analysis_output/output/func_delay_stack | grep -o '^[^,]*' | ./flamegraph.pl --countname "delay sum" > allpid.svg --# 指定pid --cat /var/da-tool/analysis_output/output/func_delay_stack | grep -o '^[^,]*' | grep -E 'pid1|pid2' | ./flamegraph.pl --countname "delay sum" > pid.svg --``` - --### 常见错误说明 - --**配置了不存在的符号** --``` --Failed to find symbol aaaa in kernel -- Error: Failed to add events. --``` --**符号已存在,重复配置** --``` --Error: event "aaaa" already exists. -- Hint: Remove existing event by 'perf probe -d' -- or force duplicates by 'perf probe -f' -- or set 'force=yes' in BPF source. -- Error: Failed to add events. --``` -+## 详情 - --采集后会在`/var/da-tool/tmp`文件夹下生成一个`output_时间`格式的文件夹,包含此次采样的结果。 --采样脚本的采样日志在此路径下: --``` --/var/da-tool/tmp/sample_output_时间/da-tool/sample.log --``` -+|主题|内容简介|是否发布| -+|:----|:-----|:----| -+|[openEuler指南](https://gitee.com/openeuler/community/blob/master/zh/contributors/README.md)| 如何参与openEuler社区 | 已发布 | -+|[da-tool 使用指南](https://gitee.com/openeuler/docs/blob/stable2-20.03_LTS_SP3/docs/zh/docs/A-Ops/da-tool%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C.md)|1. 安装、配置和运行应用程序
2. 分析结果说明
3. 使用注意事项|已发布| -+|da-tool设计文档|1. 技术原理
2. 开发指南 |暂未发布| - --### 注意事项 --+ 配置注意事项 -- + 配置`/etc/da-tool.conf` 时,注意所配置符号一定存在 -- + 某些函数名可能存在点(eg:A.B.C),暂**不支持配置此类函数**,例如经过gcc优化选项`-fipa-sra`优化后,函数符号后缀会有`.rsra.num`。 -- + 应用程序名也不要有点,建议函数和应用程序**不要包含特殊符号** -- + 某些函数可能短时间执行大量次数,此时`trace`很大,解析时间会很长,需要认为评估配置的函数运行情况,合理设置采样时间 -- + 由于`trace`可能存在不完整的调用关系,很有可能在`trace`中存在的数据分析时舍弃,如果单次采样没有抓到需要的pid信息,建议多采样几次 -- + 有时`trace`中会有数据丢失,结果可能异常,常见的异常原因为`trace`过大,内核刷新数据时不正常,比如会出现同一个函数只有返回时间没有进入时间的现象,建议减小采样时间。 -- + 不支持递归函数 --+ 本工具单个CPU所使用的跟踪缓存`RingBuffer`大小为 `40960kb` ,当单核的`trace`大小接近此值时数据可能异常,进而导致分析结果错误。 --+ 确保`trace` 中有需要采集的函数的完整调用栈 --- -2.33.0 - diff --git a/0011-fix-valid-time-of-pid-at-first-core-and-add-case.patch b/0011-fix-valid-time-of-pid-at-first-core-and-add-case.patch deleted file mode 100644 index fd7756f..0000000 --- a/0011-fix-valid-time-of-pid-at-first-core-and-add-case.patch +++ /dev/null @@ -1,443 +0,0 @@ -From 2e77a22e9bda4a3b7caeaa772dfb360470c7dacb Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Tue, 28 Nov 2023 09:42:00 +0800 -Subject: [PATCH] fix valid time of pid at first core and add case - ---- - extra-tools/da-tool/analysis/time_pair.cpp | 8 +- - extra-tools/da-tool/analysis/time_pair.h | 7 -- - .../da-tool/analysis/trace_resolve.cpp | 6 +- - extra-tools/da-tool/script/da-tool.sh | 4 +- - .../da-tool/test/case/case2/case2_udp_cli.c | 2 +- - extra-tools/da-tool/test/case/case3/case3.cpp | 33 +++++++ - .../da-tool/test/case/case4/case4_udp_cli.c | 37 ++++++++ - .../test/case/case4/case4_udp_ser_blk.c | 49 +++++++++++ - .../da-tool/test/case/case5/case5_udp_cli.c | 81 +++++++++++++++++ - .../da-tool/test/case/case5/case5_udp_ser.c | 88 +++++++++++++++++++ - 10 files changed, 300 insertions(+), 15 deletions(-) - create mode 100644 extra-tools/da-tool/test/case/case3/case3.cpp - create mode 100644 extra-tools/da-tool/test/case/case4/case4_udp_cli.c - create mode 100644 extra-tools/da-tool/test/case/case4/case4_udp_ser_blk.c - create mode 100644 extra-tools/da-tool/test/case/case5/case5_udp_cli.c - create mode 100644 extra-tools/da-tool/test/case/case5/case5_udp_ser.c - -diff --git a/extra-tools/da-tool/analysis/time_pair.cpp b/extra-tools/da-tool/analysis/time_pair.cpp -index 2c1f813..52aa6aa 100644 ---- a/extra-tools/da-tool/analysis/time_pair.cpp -+++ b/extra-tools/da-tool/analysis/time_pair.cpp -@@ -162,7 +162,7 @@ void TimePair::timePairUpdateLoop(const int &pid, const int &functionIndex, cons - const FirstInfo &firstInfo = trace_resolve_inst.getTraceFirstInfo(); - int coreIndex = line_info_tmp.core; - // This process cannot find the starting sched switch on this core, ignore trace after timestamp -- if (timestamp <= firstInfo.schedSwitchTime[coreIndex] && functionIndex != sched_switch_funcidx) { -+ if (timestamp <= firstInfo.schedSwitchTime[coreIndex] && functionIndex != sched_switch_funcidx && coreIndex != firstInfo.coreId) { - timePairMap[pid][functionIndex].minEndTimeInvalid = timestamp; - } - } -@@ -444,8 +444,10 @@ void TimePair::saveTimePairToFile() - for (const auto &funcInfo : processInfo.second) { - int pid = processInfo.first; - file << "pid:" << pid << "," << std::endl; -- file << "functionIndex:" << funcInfo.first << "," << cfg.IndexToFunction[funcInfo.first] << std::endl; -- file << "info num," << funcInfo.second.startTime.size() << ",valid info num," << funcInfo.second.callTimes << ","; -+ file << "functionIndex:" << funcInfo.first << "," << cfg.IndexToFunction[funcInfo.first] << ","; -+ file << "maxStartTimeInvaild:" << funcInfo.second.maxStartTimeInvaild << ","; -+ file << "minEndTimeInvalid:" << funcInfo.second.minEndTimeInvalid << "," << std::endl; -+ file << "info num," << funcInfo.second.startTime.size() << ",valid info num," << funcInfo.second.summary.callTimes[DELAY_INFO_ALL] << ","; - file << "validStartTime," << validTimeOfPid[pid].validStartTime << ",validEndTime," << validTimeOfPid[pid].validEndTime << std::endl; - file << "startTime" << ","; - for (const auto &startTime : funcInfo.second.startTime) { -diff --git a/extra-tools/da-tool/analysis/time_pair.h b/extra-tools/da-tool/analysis/time_pair.h -index 9d3e757..ba0b784 100644 ---- a/extra-tools/da-tool/analysis/time_pair.h -+++ b/extra-tools/da-tool/analysis/time_pair.h -@@ -76,13 +76,6 @@ public: - - // analysis result - TimePairSummary summary; -- double aveDelay; -- int maxDelay; -- int minDelay; -- int delaySum; -- int maxDelayPos; -- int minDelayPos; -- int callTimes; - }; - - class TimePair { -diff --git a/extra-tools/da-tool/analysis/trace_resolve.cpp b/extra-tools/da-tool/analysis/trace_resolve.cpp -index 38e6d2b..61f0a74 100644 ---- a/extra-tools/da-tool/analysis/trace_resolve.cpp -+++ b/extra-tools/da-tool/analysis/trace_resolve.cpp -@@ -131,8 +131,9 @@ void TraceResolve::resolveTrace() - } - if (line_num % 10000 == 0) { - double rate = (line_num - cfg.readTraceBegin) * 1.0/ readTraceLen; -- std::cout << "[Resolve] " << std::fixed << std::setprecision(3) << rate * 100 << "%, "; -- std::cout << "Match " << regex_num << std::endl; -+ std::cout << "\r" << "[Resolve] " << std::fixed << std::setprecision(3) << rate * 100 << "%, "; -+ std::cout << "Match " << regex_num; -+ std::cout.flush(); - } - if (cfg.readTraceLen != 0 && line_num > cfg.readTraceBegin + cfg.readTraceLen) { - break; -@@ -202,6 +203,7 @@ void TraceResolve::resolveTrace() - } - - if (traceLineVec.size() > 0) { -+ std::cout << std::endl; - std::cout << "[INFO] trace delay : " << traceLineVec[traceLineVec.size() - 1].timestamp - traceLineVec[0].timestamp << std::endl; - } - -diff --git a/extra-tools/da-tool/script/da-tool.sh b/extra-tools/da-tool/script/da-tool.sh -index 14fd009..2b38bc8 100755 ---- a/extra-tools/da-tool/script/da-tool.sh -+++ b/extra-tools/da-tool/script/da-tool.sh -@@ -182,10 +182,10 @@ function arr_check_function_support() { - function arr_check_kernel_symbols_exist() { - local symbols_tmp=("$@") - for symbol in "${symbols_tmp[@]}"; do -- if grep "\<$symbol\>" /proc/kallsyms >/dev/null; then -+ if grep -e "^[0-9a-fA-F]* [a-zA-Z] $symbol$" /proc/kallsyms >/dev/null; then - echo "$symbol exist in /proc/kallsyms" >>$sample_log - else -- echo "$symbol does not exist in /proc/kallsyms, please check '$config_file'!!!" | tee -a $sample_log -+ echo "$symbol does not exist in /proc/kallsyms or not support, please check '$config_file'!!!" | tee -a $sample_log - exit 1 - fi - done -diff --git a/extra-tools/da-tool/test/case/case2/case2_udp_cli.c b/extra-tools/da-tool/test/case/case2/case2_udp_cli.c -index 80f9dd7..1a2a346 100644 ---- a/extra-tools/da-tool/test/case/case2/case2_udp_cli.c -+++ b/extra-tools/da-tool/test/case/case2/case2_udp_cli.c -@@ -25,7 +25,7 @@ int main() { - server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); - server_addr.sin_port = htons(SERVER_PORT); - -- int loop_num =0; -+ int loop_num = 0; - while (1) { - usleep(50000); - sprintf(buffer, "loop num : %d", loop_num++); -diff --git a/extra-tools/da-tool/test/case/case3/case3.cpp b/extra-tools/da-tool/test/case/case3/case3.cpp -new file mode 100644 -index 0000000..d6f154f ---- /dev/null -+++ b/extra-tools/da-tool/test/case/case3/case3.cpp -@@ -0,0 +1,33 @@ -+#include -+#include -+#include -+#include -+ -+void sortArray(std::vector &arr) -+{ -+ std::sort(arr.begin(), arr.end()); -+} -+ -+int main() { -+ std::random_device rd; -+ std::mt19937 gen(rd()); -+ std::uniform_int_distribution dis(1, 100); -+ const int count = 100000; -+ std::vector numbers; -+ numbers.resize(count); -+ int loopCnt = 0; -+ while(1) -+ { -+ loopCnt++; -+ for (int i = 0; i < count; ++i) { -+ int randomNum = dis(gen); -+ numbers[i] = randomNum; -+ } -+ sortArray(numbers); -+ std::cout<< "loopCnt:" << loopCnt << std::endl; -+ } -+ -+ return 0; -+} -+ -+// _Z9sortArrayRSt6vectorIiSaIiEE -\ No newline at end of file -diff --git a/extra-tools/da-tool/test/case/case4/case4_udp_cli.c b/extra-tools/da-tool/test/case/case4/case4_udp_cli.c -new file mode 100644 -index 0000000..1a2a346 ---- /dev/null -+++ b/extra-tools/da-tool/test/case/case4/case4_udp_cli.c -@@ -0,0 +1,37 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define SERVER_IP "127.0.0.1" -+#define SERVER_PORT 12345 -+ -+int main() { -+ int sockfd; -+ struct sockaddr_in server_addr; -+ char buffer[1024]; -+ -+ sockfd = socket(AF_INET, SOCK_DGRAM, 0); -+ if (sockfd < 0) { -+ perror("socket creation failed"); -+ exit(EXIT_FAILURE); -+ } -+ -+ memset(&server_addr, 0, sizeof(server_addr)); -+ server_addr.sin_family = AF_INET; -+ server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); -+ server_addr.sin_port = htons(SERVER_PORT); -+ -+ int loop_num = 0; -+ while (1) { -+ usleep(50000); -+ sprintf(buffer, "loop num : %d", loop_num++); -+ sendto(sockfd, buffer, strlen(buffer), 0, (const struct sockaddr *)&server_addr, sizeof(server_addr)); -+ } -+ -+ close(sockfd); -+ return 0; -+} -diff --git a/extra-tools/da-tool/test/case/case4/case4_udp_ser_blk.c b/extra-tools/da-tool/test/case/case4/case4_udp_ser_blk.c -new file mode 100644 -index 0000000..faad6e1 ---- /dev/null -+++ b/extra-tools/da-tool/test/case/case4/case4_udp_ser_blk.c -@@ -0,0 +1,49 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define SERVER_PORT 12345 -+ -+int main() { -+ int sockfd; -+ struct sockaddr_in server_addr, client_addr; -+ socklen_t client_len; -+ char buffer[1024]; -+ -+ sockfd = socket(AF_INET, SOCK_DGRAM, 0); -+ if (sockfd < 0) { -+ perror("socket creation failed"); -+ exit(EXIT_FAILURE); -+ } -+ -+ memset(&server_addr, 0, sizeof(server_addr)); -+ server_addr.sin_family = AF_INET; -+ server_addr.sin_addr.s_addr = INADDR_ANY; -+ server_addr.sin_port = htons(SERVER_PORT); -+ -+ if (bind(sockfd, (const struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { -+ perror("bind failed"); -+ exit(EXIT_FAILURE); -+ } -+ -+ while (1) { -+ memset(buffer, 0, sizeof(buffer)); -+ client_len = sizeof(client_addr); -+ ssize_t recv_len = recvfrom(sockfd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr *)&client_addr, &client_len); -+ -+ if (recv_len > 0) { -+ buffer[recv_len] = '\0'; -+ printf("recvfrom %s:%d date:%s\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buffer); -+ } else { -+ printf("recv_len=%d\n", recv_len); -+ } -+ -+ } -+ -+ close(sockfd); -+ return 0; -+} -diff --git a/extra-tools/da-tool/test/case/case5/case5_udp_cli.c b/extra-tools/da-tool/test/case/case5/case5_udp_cli.c -new file mode 100644 -index 0000000..b8fdb4e ---- /dev/null -+++ b/extra-tools/da-tool/test/case/case5/case5_udp_cli.c -@@ -0,0 +1,81 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#define BUFFER_SIZE 1024 -+#define PORT 8888 -+ -+void* sendRequest(void* arg) { -+ int clientSocket = *(int*)arg; -+ -+ while (1) { -+ struct sockaddr_in serverAddress; -+ memset(&serverAddress, 0, sizeof(serverAddress)); -+ serverAddress.sin_family = AF_INET; -+ serverAddress.sin_port = htons(PORT); -+ -+ if (inet_pton(AF_INET, "127.0.0.1", &(serverAddress.sin_addr)) <= 0) { -+ perror("Invalid server address"); -+ return NULL; -+ } -+ -+ // Send a message to the server -+ char* message = "Hello, Server!"; -+ ssize_t sentBytes = sendto(clientSocket, message, strlen(message), 0, -+ (struct sockaddr*)&serverAddress, sizeof(serverAddress)); -+ -+ if (sentBytes < 0) { -+ perror("Sending message failed"); -+ return NULL; -+ } -+ -+ printf("Sent message to server\n"); -+ -+ // Receive server response -+ char buffer[BUFFER_SIZE] = {0}; -+ socklen_t serverAddressLength = sizeof(serverAddress); -+ ssize_t receivedBytes = recvfrom(clientSocket, buffer, BUFFER_SIZE, 0, -+ (struct sockaddr*)&serverAddress, &serverAddressLength); -+ -+ if (receivedBytes < 0) { -+ perror("Receive response failed"); -+ return NULL; -+ } -+ -+ printf("Received response from server:%s\n", buffer); -+ -+ usleep(100000); -+ } -+ -+ close(clientSocket); -+ -+ return NULL; -+} -+ -+int main() { -+ int clientSocket = socket(AF_INET, SOCK_DGRAM, 0); -+ if (clientSocket == -1) { -+ perror("Unable to create socket"); -+ return -1; -+ } -+ -+ const int numThreads = 5; -+ pthread_t tids[numThreads]; -+ -+ for (int i = 0; i < numThreads; ++i) { -+ if (pthread_create(&tids[i], NULL, sendRequest, &clientSocket) != 0) { -+ perror("Unable to create socket"); -+ return -1; -+ } -+ } -+ -+ for (int i = 0; i < numThreads; ++i) { -+ pthread_join(tids[i], NULL); -+ } -+ -+ return 0; -+} -diff --git a/extra-tools/da-tool/test/case/case5/case5_udp_ser.c b/extra-tools/da-tool/test/case/case5/case5_udp_ser.c -new file mode 100644 -index 0000000..5468bdb ---- /dev/null -+++ b/extra-tools/da-tool/test/case/case5/case5_udp_ser.c -@@ -0,0 +1,88 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#define BUFFER_SIZE 1024 -+#define PORT 8888 -+ -+void* handleClient(void* arg) { -+ int serverSocket = *(int*)arg; -+ -+ while (1) { -+ -+ char buffer[BUFFER_SIZE] = {0}; -+ struct sockaddr_in clientAddress; -+ socklen_t clientAddressLength = sizeof(clientAddress); -+ ssize_t receivedBytes = recvfrom(serverSocket, buffer, BUFFER_SIZE, 0, -+ (struct sockaddr*)&clientAddress, &clientAddressLength); -+ -+ if (receivedBytes < 0) { -+ perror("Received message failed"); -+ return NULL; -+ } -+ -+ printf("Received message from client:%s\n", buffer); -+ -+ -+ char* response = "Hello, Client!"; -+ ssize_t sentBytes = sendto(serverSocket, response, strlen(response), 0, -+ (struct sockaddr*)&clientAddress, clientAddressLength); -+ -+ if (sentBytes < 0) { -+ perror("Sending response failed"); -+ return NULL; -+ } -+ -+ printf("Response has been sent to the client\n"); -+ } -+ -+ -+ close(serverSocket); -+ -+ return NULL; -+} -+ -+int main() { -+ -+ int serverSocket = socket(AF_INET, SOCK_DGRAM, 0); -+ if (serverSocket == -1) { -+ perror("Unable to create socket"); -+ return -1; -+ } -+ -+ -+ struct sockaddr_in serverAddress; -+ memset(&serverAddress, 0, sizeof(serverAddress)); -+ serverAddress.sin_family = AF_INET; -+ serverAddress.sin_addr.s_addr = INADDR_ANY; -+ serverAddress.sin_port = htons(PORT); -+ -+ if (bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) { -+ perror("Binding failed"); -+ return -1; -+ } -+ -+ printf("Waiting for client connection\n"); -+ -+ -+ const int numThreads = 5; -+ pthread_t tids[numThreads]; -+ -+ for (int i = 0; i < numThreads; ++i) { -+ if (pthread_create(&tids[i], NULL, handleClient, &serverSocket) != 0) { -+ perror("Create thread failed"); -+ return -1; -+ } -+ } -+ -+ -+ for (int i = 0; i < numThreads; ++i) { -+ pthread_join(tids[i], NULL); -+ } -+ -+ return 0; -+} --- -2.33.0 - diff --git a/0012-update-doc-link.patch b/0012-update-doc-link.patch deleted file mode 100644 index 59ef696..0000000 --- a/0012-update-doc-link.patch +++ /dev/null @@ -1,24 +0,0 @@ -From c5883ae776d766ed0516af636739e09dd5fda04b Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Tue, 28 Nov 2023 10:37:33 +0800 -Subject: [PATCH] update doc link - ---- - extra-tools/da-tool/README.md | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/extra-tools/da-tool/README.md b/extra-tools/da-tool/README.md -index 157af65..c7a67db 100644 ---- a/extra-tools/da-tool/README.md -+++ b/extra-tools/da-tool/README.md -@@ -29,6 +29,6 @@ - |主题|内容简介|是否发布| - |:----|:-----|:----| - |[openEuler指南](https://gitee.com/openeuler/community/blob/master/zh/contributors/README.md)| 如何参与openEuler社区 | 已发布 | --|[da-tool 使用指南](https://gitee.com/openeuler/docs/blob/stable2-20.03_LTS_SP3/docs/zh/docs/A-Ops/da-tool%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C.md)|1. 安装、配置和运行应用程序
2. 分析结果说明
3. 使用注意事项|已发布| -+|[时延分析工具 da-tool 使用手册](https://gitee.com/openeuler/docs/blob/stable2-20.03_LTS_SP4/docs/zh/docs/A-Ops/%E6%97%B6%E5%BB%B6%E5%88%86%E6%9E%90%E5%B7%A5%E5%85%B7%20da-tool%20%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C.md)|1. 安装、配置和运行应用程序
2. 分析结果说明
3. 使用注意事项|已发布| - |da-tool设计文档|1. 技术原理
2. 开发指南 |暂未发布| - --- -2.33.0 - diff --git a/0013-restrict-function-redesign-trace-check-proc.patch b/0013-restrict-function-redesign-trace-check-proc.patch deleted file mode 100644 index ed95022..0000000 --- a/0013-restrict-function-redesign-trace-check-proc.patch +++ /dev/null @@ -1,1133 +0,0 @@ -From 96c61b8356e328fa7f44902b6760e5abfb6320c7 Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Sat, 2 Dec 2023 19:42:43 +0800 -Subject: [PATCH] restrict function, redesign trace check proc - ---- - extra-tools/da-tool/analysis/config.cpp | 1 + - extra-tools/da-tool/analysis/config.h | 1 + - extra-tools/da-tool/analysis/function_stack.h | 3 +- - .../da-tool/analysis/sched_analysis.cpp | 139 +++++++---- - extra-tools/da-tool/analysis/sched_analysis.h | 34 ++- - extra-tools/da-tool/analysis/time_pair.cpp | 97 +++++--- - extra-tools/da-tool/analysis/time_pair.h | 18 +- - .../da-tool/analysis/trace_resolve.cpp | 233 ++++++++++++++---- - extra-tools/da-tool/analysis/trace_resolve.h | 50 +++- - extra-tools/da-tool/main.cpp | 1 - - extra-tools/da-tool/script/da-tool.sh | 54 ++-- - 11 files changed, 450 insertions(+), 181 deletions(-) - -diff --git a/extra-tools/da-tool/analysis/config.cpp b/extra-tools/da-tool/analysis/config.cpp -index d84cc5b..23eee95 100644 ---- a/extra-tools/da-tool/analysis/config.cpp -+++ b/extra-tools/da-tool/analysis/config.cpp -@@ -47,6 +47,7 @@ void Config::pathInit() - filename[FILE_TYPE_OUTPUT_RUN_LOG] = pathOutputDebug + "/run.log"; - filename[FILE_TYPE_DEBUG_TIME_PAIE] = pathOutputDebug + "/debug_time_pair"; - filename[FILE_TYPE_DEBUG_TRACE] = pathOutputDebug + "/debug_trace"; -+ filename[FILE_TYPE_DEBUG_TRACE_FUNCPAIRMAP] = pathOutputDebug + "/debug_trace_funcpair"; - filename[FILE_TYPE_DEBUG_FUNC_STACK_TRACE] = pathOutputDebug + "/debug_funcstk_trace"; - filename[FILE_TYPE_DEBUG_REGEX] = pathOutputDebug + "/debug_resolve_function_trace"; - filename[FILE_TYPE_DEBUG_CONFIG] = pathOutputDebug + "/debug_config_resolve"; -diff --git a/extra-tools/da-tool/analysis/config.h b/extra-tools/da-tool/analysis/config.h -index e1a5d4a..bbf339e 100644 ---- a/extra-tools/da-tool/analysis/config.h -+++ b/extra-tools/da-tool/analysis/config.h -@@ -33,6 +33,7 @@ typedef enum { - FILE_TYPE_DEBUG_CONFIG, - FILE_TYPE_DEBUG_TIME_PAIR_MARK, - // debug 2 -+ FILE_TYPE_DEBUG_TRACE_FUNCPAIRMAP, - // debug 3 - FILE_TYPE_DEBUG_TRACE, - FILE_TYPE_DEBUG_REGEX, -diff --git a/extra-tools/da-tool/analysis/function_stack.h b/extra-tools/da-tool/analysis/function_stack.h -index 9f6e2d7..1306cbc 100644 ---- a/extra-tools/da-tool/analysis/function_stack.h -+++ b/extra-tools/da-tool/analysis/function_stack.h -@@ -27,8 +27,7 @@ typedef enum { - FS_DELAY_TYPE_MAX, - } FS_DELAY_TYPE; - --class FsDelayInfo // function stack delay info --{ -+class FsDelayInfo { // function stack delay info - public: - std::vector delay[FS_DELAY_TYPE_MAX]; - std::vector retVal; -diff --git a/extra-tools/da-tool/analysis/sched_analysis.cpp b/extra-tools/da-tool/analysis/sched_analysis.cpp -index aea3d25..9aef4b7 100644 ---- a/extra-tools/da-tool/analysis/sched_analysis.cpp -+++ b/extra-tools/da-tool/analysis/sched_analysis.cpp -@@ -24,9 +24,9 @@ SchedAnalysis::SchedAnalysis() - - } - --void SchedAnalysis::processSchedAnalysisLoop(const int &pid, const int ×tamp, const int &coreIndex) -+void SchedAnalysis::processSchedAnalysisLoop(const int &pid, const int ×tamp, const int &coreIndex, const bool &isRet) - { -- if (processSchedMap.count(pid) != 0) { -+ if (processSchedMap.count(pid) == 0) { - ProcessSchedInfo tmp; - processSchedMap.emplace(pid, tmp); - } -@@ -34,9 +34,16 @@ void SchedAnalysis::processSchedAnalysisLoop(const int &pid, const int ×tam - ProcessCoreTrace pct; - pct.startTime = timestamp; - pct.endTime = timestamp; -- pct.coreIndex = coreIndex; -- if (size != 0) { -+ pct.startCoreId = coreIndex; -+ pct.endCoreId = coreIndex; -+ pct.startIsRet = isRet; -+ pct.endIsRet = isRet; -+ pct.coreTraceType = CORE_TRACE_INVALID; -+ -+ if (size > 0) { - processSchedMap[pid].coreTrace[size - 1].endTime = timestamp; -+ processSchedMap[pid].coreTrace[size - 1].endCoreId = coreIndex; -+ processSchedMap[pid].coreTrace[size - 1].endIsRet = isRet; - } - processSchedMap[pid].coreTrace.emplace_back(pct); - } -@@ -65,45 +72,75 @@ void SchedAnalysis::schedInfoProc() - - if (functionIndex == sched_switch_funcidx) { - int nextPid = line_info_tmp.schedSwitchLine.nextPid; -- processSchedAnalysisLoop(pid, timestamp, -1); // pid1 - > pidn -- processSchedAnalysisLoop(nextPid, timestamp, coreIndex); // pidm - > pid1 -+ processSchedAnalysisLoop(pid, timestamp, coreIndex, false); // pid1 - > pidn -+ processSchedAnalysisLoop(nextPid, timestamp, coreIndex, true); // pidm - > pid1 -+ } -+ } -+ // last coreTrace always invalid -+ for (auto &sched_tmp : processSchedMap) { -+ if (!sched_tmp.second.coreTrace.empty()) { -+ sched_tmp.second.coreTrace.pop_back(); - } - } - } - --void SchedAnalysis::schedInfoAnalysis() -+void SchedAnalysis::schedInfoVaildMark() - { - for (auto &sched_tmp : processSchedMap) { -- int lastCoreIndex = -1; -- int delaySum = 0; -- int delaySched = 0; -- int schedSwitchTimes = 0; -- int cpuSwitchTimes = 0; - for (auto &coreTrace : sched_tmp.second.coreTrace) { -- int delay = coreTrace.endTime - coreTrace.startTime; -- int coreIndex = coreTrace.coreIndex; -- delaySum += delay; -- if (coreIndex == -1) { -- delaySched += delay; -- schedSwitchTimes++; -- } else { -- sched_tmp.second.runTimeOfCore[coreIndex] += delay; -+ if (!coreTrace.startIsRet && coreTrace.endIsRet) { -+ coreTrace.coreTraceType = CORE_TRACE_SCHEDULING; - } - -- if (lastCoreIndex == -1 && coreIndex != -1) { -- lastCoreIndex = coreIndex; -+ if (coreTrace.startIsRet && !coreTrace.endIsRet && (coreTrace.startCoreId == coreTrace.endCoreId)) { -+ coreTrace.coreTraceType = CORE_TRACE_ONCORE; -+ } -+ } -+ } -+} -+ -+ -+void SchedAnalysis::schedInfoAnalysis() -+{ -+ for (auto &sched_tmp : processSchedMap) { -+ int delaySum[SCHED_SUMMARY_MAX] = { 0 }; -+ int schedSwitchTimes[SCHED_SUMMARY_MAX] = { 0 }; -+ int cpuSwitchTimes[SCHED_SUMMARY_MAX] = { 0 }; -+ int vaildDelaySched = 0; // Invalid scheduling cannot be analyzed -+ for (const auto &coreTrace : sched_tmp.second.coreTrace) { -+ int delay = coreTrace.endTime - coreTrace.startTime; -+ delaySum[SCHED_SUMMARY_ALL] += delay; -+ if (!coreTrace.startIsRet) { // count pid1->pidn times -+ schedSwitchTimes[SCHED_SUMMARY_ALL]++; -+ } -+ if (coreTrace.startCoreId != coreTrace.endCoreId) { -+ cpuSwitchTimes[SCHED_SUMMARY_ALL]++; -+ } -+ if (coreTrace.coreTraceType != CORE_TRACE_INVALID) { -+ delaySum[SCHED_SUMMARY_VAILD] += delay; -+ } -+ if (coreTrace.coreTraceType == CORE_TRACE_ONCORE) { -+ int coreIndex = coreTrace.startCoreId; -+ sched_tmp.second.runTimeOfCore[coreIndex] += delay; - } - -- if (lastCoreIndex != coreIndex && coreIndex != -1) { -- cpuSwitchTimes++; -- lastCoreIndex = coreTrace.coreIndex; -+ if (coreTrace.coreTraceType == CORE_TRACE_SCHEDULING) { -+ vaildDelaySched += delay; -+ schedSwitchTimes[SCHED_SUMMARY_VAILD]++; -+ if (coreTrace.startCoreId != coreTrace.endCoreId) { -+ // CPU switching only occurs during scheduling -+ cpuSwitchTimes[SCHED_SUMMARY_VAILD]++; -+ } - } - } -- sched_tmp.second.schedSwitchDelay = delaySched; -- sched_tmp.second.schedSwitchTimes = schedSwitchTimes; -- sched_tmp.second.percentageSchedSwitch = delaySum == 0? 0.0 : delaySched * 1.0 / delaySum; -- sched_tmp.second.cpuSwitchTimes = cpuSwitchTimes; -- sched_tmp.second.delaySum = delaySum; -+ sched_tmp.second.vaildSchedSwitchDelay = vaildDelaySched; -+ sched_tmp.second.validPercentSchedSwitch = delaySum[SCHED_SUMMARY_VAILD] == 0 ? 0.0 : vaildDelaySched * 1.0 / delaySum[SCHED_SUMMARY_VAILD]; -+ sched_tmp.second.schedSwitchTimes[SCHED_SUMMARY_VAILD] = schedSwitchTimes[SCHED_SUMMARY_VAILD]; -+ sched_tmp.second.schedSwitchTimes[SCHED_SUMMARY_ALL] = schedSwitchTimes[SCHED_SUMMARY_ALL]; -+ sched_tmp.second.cpuSwitchTimes[SCHED_SUMMARY_VAILD] = cpuSwitchTimes[SCHED_SUMMARY_VAILD]; -+ sched_tmp.second.cpuSwitchTimes[SCHED_SUMMARY_ALL] = cpuSwitchTimes[SCHED_SUMMARY_ALL]; -+ sched_tmp.second.delaySum[SCHED_SUMMARY_VAILD] = delaySum[SCHED_SUMMARY_VAILD]; -+ sched_tmp.second.delaySum[SCHED_SUMMARY_ALL] = delaySum[SCHED_SUMMARY_ALL]; - } - } - -@@ -121,12 +158,15 @@ void SchedAnalysis::saveSchedInfoToFile() - if (pid == 0) { - continue; - } -- file << "pid," << pid << ","; -- file << "delaySum," << sched_tmp.second.delaySum << ","; -- file << "schedSwitchDelay," << sched_tmp.second.schedSwitchDelay << ","; -- file << "runtime," << sched_tmp.second.delaySum - sched_tmp.second.schedSwitchDelay << ","; -- file << "cpuSwitchTimes," << sched_tmp.second.cpuSwitchTimes << ","; -- file << std::endl; -+ file << "pid," << pid << "," << std::endl; -+ file << "cpuSwitchTimes," << sched_tmp.second.cpuSwitchTimes[SCHED_SUMMARY_ALL] << ","; -+ file << "schedSwitchTimes," << sched_tmp.second.schedSwitchTimes[SCHED_SUMMARY_ALL] << ","; -+ file << "delaySum," << sched_tmp.second.delaySum[SCHED_SUMMARY_ALL] << "," << std::endl; -+ file << "vaildCpuSwitchTimes," << sched_tmp.second.cpuSwitchTimes[SCHED_SUMMARY_VAILD] << ","; -+ file << "vaildSchedSwitchTimes," << sched_tmp.second.schedSwitchTimes[SCHED_SUMMARY_VAILD] << ","; -+ file << "validDelaySum," << sched_tmp.second.delaySum[SCHED_SUMMARY_VAILD] << ","; -+ file << "vaildSchedSwitchDelay," << sched_tmp.second.vaildSchedSwitchDelay << ","; -+ file << "validRuntime," << sched_tmp.second.delaySum[SCHED_SUMMARY_VAILD] - sched_tmp.second.vaildSchedSwitchDelay << "," << std::endl; - for (int coreIndex = 0; coreIndex < sched_tmp.second.runTimeOfCore.size(); coreIndex++) { - int run_time = sched_tmp.second.runTimeOfCore[coreIndex]; - if (run_time != 0) { -@@ -137,7 +177,16 @@ void SchedAnalysis::saveSchedInfoToFile() - for (const auto &coreTrace : sched_tmp.second.coreTrace) { - file << "startTime," << std::fixed << std::setprecision(6) << slv.convertTimeIntToDouble(coreTrace.startTime) << ","; - file << "endTime," << std::fixed << std::setprecision(6) << slv.convertTimeIntToDouble(coreTrace.endTime) << ","; -- file << "coreIndex," << coreTrace.coreIndex; -+ file << "startCoreId," << coreTrace.startCoreId << ","; -+ file << "endCoreId," << coreTrace.endCoreId << ","; -+ file << "coreTraceType,"; -+ if (coreTrace.coreTraceType == CORE_TRACE_INVALID) { -+ file << "invalid"; -+ } else if (coreTrace.coreTraceType == CORE_TRACE_SCHEDULING) { -+ file << "scheduling"; -+ } else if (coreTrace.coreTraceType == CORE_TRACE_ONCORE) { -+ file << "running"; -+ } - file << std::endl; - } - file << std::endl; -@@ -154,8 +203,7 @@ void SchedAnalysis::saveSchedInfoSummaryToFile() - std::cout << "file open failed:" << cfg.filename[FILE_TYPE_OUTPUT_SUMMARY_SCHED_INFO] << std::endl; - return; - } -- file << "pid,delaySum,schedSwitchDelay,schedSwitchPercentage,schedSwitchTimes,cpuSwitchTimes"; -- file << std::endl; -+ file << "pid,validDelaySum,vaildSchedSwitchDelay,validSchedSwitchPercentage,validSchedSwitchTimes,validCpuSwitchTimes" << std::endl; - TraceResolve &slv = TraceResolve::getInstance(); - for (const auto &sched_tmp : processSchedMap) { - int pid = sched_tmp.first; -@@ -163,12 +211,11 @@ void SchedAnalysis::saveSchedInfoSummaryToFile() - continue; - } - file << pid << ","; -- file << sched_tmp.second.delaySum << ","; -- file << sched_tmp.second.schedSwitchDelay << ","; -- file << std::fixed << std::setprecision(3) << sched_tmp.second.percentageSchedSwitch * 100 << "%,"; -- file << sched_tmp.second.schedSwitchTimes << ","; -- file << sched_tmp.second.cpuSwitchTimes << ","; -- file << std::endl; -+ file << sched_tmp.second.delaySum[SCHED_SUMMARY_VAILD] << ","; -+ file << sched_tmp.second.vaildSchedSwitchDelay << ","; -+ file << std::fixed << std::setprecision(3) << sched_tmp.second.validPercentSchedSwitch * 100 << "%,"; -+ file << sched_tmp.second.schedSwitchTimes[SCHED_SUMMARY_VAILD] << ","; -+ file << sched_tmp.second.cpuSwitchTimes[SCHED_SUMMARY_VAILD] << "," << std::endl; - } - - file.close(); -@@ -177,6 +224,8 @@ void SchedAnalysis::saveSchedInfoSummaryToFile() - void SchedAnalysis::schedAnalysisProc() - { - schedInfoProc(); -+ schedInfoVaildMark(); -+ - schedInfoAnalysis(); - saveSchedInfoToFile(); - saveSchedInfoSummaryToFile(); -diff --git a/extra-tools/da-tool/analysis/sched_analysis.h b/extra-tools/da-tool/analysis/sched_analysis.h -index 85036ce..2d2a9ed 100644 ---- a/extra-tools/da-tool/analysis/sched_analysis.h -+++ b/extra-tools/da-tool/analysis/sched_analysis.h -@@ -20,11 +20,29 @@ - #include - #include - -+typedef enum { -+ CORE_TRACE_INVALID, // valid when (s sr) or (sr s and startcore = endcore) -+ CORE_TRACE_SCHEDULING, // (s sr) -+ CORE_TRACE_ONCORE, // (sr s and startcore = endcore) -+ CORE_TRACE_MAX, -+} CORE_TRACE_E; -+ -+typedef enum { -+ SCHED_SUMMARY_VAILD, -+ SCHED_SUMMARY_ALL, // "all" means "valid" + "invalid" -+ SCHED_SUMMARY_MAX, -+} SCHED_SUMMARY_E; -+ - class ProcessCoreTrace { - public: - int startTime; - int endTime; -- int coreIndex; // -1 means sched_switch -+ int startCoreId; -+ int endCoreId; -+ bool startIsRet; // pid1->pid2 ret for pid2, not ret for pid1 -+ bool endIsRet; -+ -+ CORE_TRACE_E coreTraceType; - }; - - class ProcessSchedInfo { -@@ -33,11 +51,12 @@ public: - std::vector(CPU_CORE_NUM_MAX, 0)}; // Time running on each CPU - std::vector - coreTrace; // CPU information of pid in each time period -- int schedSwitchDelay; -- int schedSwitchTimes; -- double percentageSchedSwitch; -- int cpuSwitchTimes; -- int delaySum; -+ -+ int vaildSchedSwitchDelay; -+ double validPercentSchedSwitch; // valid / valid -+ int schedSwitchTimes[SCHED_SUMMARY_MAX]; -+ int cpuSwitchTimes[SCHED_SUMMARY_MAX]; -+ int delaySum[SCHED_SUMMARY_MAX]; - }; - - class CpuSchedTrace { -@@ -70,8 +89,9 @@ private: // process sched info - std::unordered_map processSchedMap; // [pid] - // std::vector > allCpuSchedInfo; // [coreIndex] - void processSchedAnalysisLoop(const int &pid, const int ×tamp, -- const int &coreIndex); -+ const int &coreIndex, const bool &isRet); - void schedInfoProc(); -+ void schedInfoVaildMark(); - void schedInfoAnalysis(); - void saveSchedInfoToFile(); - void saveSchedInfoSummaryToFile(); -diff --git a/extra-tools/da-tool/analysis/time_pair.cpp b/extra-tools/da-tool/analysis/time_pair.cpp -index 52aa6aa..024bbf6 100644 ---- a/extra-tools/da-tool/analysis/time_pair.cpp -+++ b/extra-tools/da-tool/analysis/time_pair.cpp -@@ -153,20 +153,6 @@ void TimePair::timePairUpdateLoop(const int &pid, const int &functionIndex, cons - timePairMap[pid].emplace(functionIndex, infoTmp); - } - -- Config &cfg = Config::getInstance(); -- bool isCfgSchedSwitch = cfg.funcCfgMap.count("sched_switch") > 0; -- int sched_switch_funcidx = -1; -- if (isCfgSchedSwitch) { -- sched_switch_funcidx = cfg.funcCfgMap["sched_switch"].functionIndex; -- const TraceResolve &trace_resolve_inst = TraceResolve::getInstance(); -- const FirstInfo &firstInfo = trace_resolve_inst.getTraceFirstInfo(); -- int coreIndex = line_info_tmp.core; -- // This process cannot find the starting sched switch on this core, ignore trace after timestamp -- if (timestamp <= firstInfo.schedSwitchTime[coreIndex] && functionIndex != sched_switch_funcidx && coreIndex != firstInfo.coreId) { -- timePairMap[pid][functionIndex].minEndTimeInvalid = timestamp; -- } -- } -- - if (isRet) { - if (timePairMap[pid][functionIndex].startTime.size() == 0) { // fist is endtime ,startime=endtime - timePairMap[pid][functionIndex].startTime.emplace_back(timestamp); -@@ -219,7 +205,6 @@ void TimePair::timePairAlignment() - for (auto &processInfo : timePairMap) { - for (auto &funcInfo : processInfo.second) { - int diffLen = funcInfo.second.startTime.size() - funcInfo.second.endTime.size(); -- bool updateEndTimeInvalid = false; - if (diffLen == 0) { - if (isOutputDebugFile) { - file << diffLen << "," << processInfo.first << " ," << funcInfo.first << " ," << \ -@@ -247,9 +232,8 @@ void TimePair::timePairAlignment() - for (int i = 0; i < diffLen; i++) { - int endTime = funcInfo.second.startTime[funcInfo.second.startTime.size() - diffLen + i]; - funcInfo.second.endTime.emplace_back(endTime); -- if (updateEndTimeInvalid == false) { -+ if (funcInfo.second.minEndTimeInvalid > endTime) { - funcInfo.second.minEndTimeInvalid = endTime; -- updateEndTimeInvalid = true; - } - } - } -@@ -303,8 +287,9 @@ void TimePair::timePairMarkInvalidData() - } - } - } -- validTimeOfPid[pid].validStartTime = validStartTime; -- validTimeOfPid[pid].validEndTime = validEndTime; -+ validTimeOfPid[pid].procStartTime = validStartTime; -+ validTimeOfPid[pid].procEndTime = validEndTime; -+ validTimeOfPid[pid].procTime = validEndTime - validStartTime; - } - - Config &cfg = Config::getInstance(); -@@ -315,8 +300,8 @@ void TimePair::timePairMarkInvalidData() - return; - } - for (const auto &range_info : validTimeOfPid) { -- file << "pid," << range_info.first << ",validStartTime ," << range_info.second.validStartTime << \ -- ", validEndTime ," << range_info.second.validEndTime << std::endl; -+ file << "pid," << range_info.first << ",procStartTime ," << range_info.second.procStartTime << \ -+ ", procEndTime ," << range_info.second.procEndTime << std::endl; - } - file.close(); - } -@@ -347,15 +332,17 @@ void TimePair::timePairMatching() - int functionIndex = cfg.funcCfgMap[functionName].functionIndex; - int isRet = cfg.funcCfgMap[functionName].isRet; - int debugPos = 0; -- int fatherFunction = getFatherFunctionIdLoop(pid, functionIndex, isRet, debugPos); -- saveFuncStkDebugToFile(file, pid, functionIndex, isRet, timestamp, fatherFunction, debugPos); -- timePairUpdateLoop(pid, functionIndex, isRet, timestamp, fatherFunction, line_info_tmp); -+ if (line_info_tmp.traceValid[TRACE_VALID_FUNC] || line_info_tmp.traceValid[TRACE_VALID_SCHED_SWITCH_PREV]) { -+ int fatherFunction = getFatherFunctionIdLoop(pid, functionIndex, isRet, debugPos); -+ saveFuncStkDebugToFile(file, pid, functionIndex, isRet, timestamp, fatherFunction, debugPos); -+ timePairUpdateLoop(pid, functionIndex, isRet, timestamp, fatherFunction, line_info_tmp); -+ } - -- if (isCfgSchedSwitch && functionIndex == sched_switch_funcidx) // pid1->pid2 : pid1->sched() sched_ret()->pid2 -+ if (isCfgSchedSwitch && functionIndex == sched_switch_funcidx && line_info_tmp.traceValid[TRACE_VALID_SCHED_SWITCH_NEXT]) // pid1->pid2 : pid1->sched() sched_ret()->pid2 - { - int nextPid = line_info_tmp.schedSwitchLine.nextPid; - isRet = 1; -- fatherFunction = getFatherFunctionIdLoop(nextPid, functionIndex, isRet, debugPos); -+ int fatherFunction = getFatherFunctionIdLoop(nextPid, functionIndex, isRet, debugPos); - saveFuncStkDebugToFile(file, nextPid, functionIndex, isRet, timestamp, fatherFunction, debugPos); - timePairUpdateLoop(nextPid, functionIndex, isRet, timestamp, fatherFunction, line_info_tmp); - } -@@ -363,6 +350,23 @@ void TimePair::timePairMatching() - file.close(); - } - -+void TimePair::functionDelayUpdateValidTimeLoop(const int &pid, const int ×tamp, const bool &valid) -+{ -+ -+ int lastTimeValid = validTimeOfPid[pid].lastTimeValid; -+ if (!lastTimeValid && valid) { -+ validTimeOfPid[pid].validStartTime.emplace_back(timestamp); -+ validTimeOfPid[pid].validEndTime.emplace_back(timestamp); -+ } -+ -+ int size = validTimeOfPid[pid].validEndTime.size(); -+ if (valid && size > 0) { -+ validTimeOfPid[pid].validEndTime[size - 1] = timestamp; -+ } -+ -+ validTimeOfPid[pid].lastTimeValid = valid; -+} -+ - void TimePair::functionDelayUpdate() - { - for (auto &processInfo : timePairMap) { -@@ -372,6 +376,33 @@ void TimePair::functionDelayUpdate() - } - } - } -+ -+ Config &cfg = Config::getInstance(); -+ int sched_switch_funcidx = cfg.funcCfgMap["sched_switch"].functionIndex; -+ TraceResolve &trace_resolve_inst = TraceResolve::getInstance(); -+ for (const auto &line_info_tmp : trace_resolve_inst.getTraceLine()) { -+ std::string functionName = line_info_tmp.functionName; -+ if (cfg.funcCfgMap.count(functionName) == 0) { -+ continue; -+ } -+ int pid = line_info_tmp.pid; -+ int timestamp = line_info_tmp.timestamp; -+ int functionIndex = cfg.funcCfgMap[functionName].functionIndex; -+ if (functionIndex == sched_switch_funcidx) { -+ int nextPid = line_info_tmp.schedSwitchLine.nextPid; -+ functionDelayUpdateValidTimeLoop(pid, timestamp, line_info_tmp.traceValid[TRACE_VALID_SCHED_SWITCH_PREV]); -+ functionDelayUpdateValidTimeLoop(nextPid, timestamp, line_info_tmp.traceValid[TRACE_VALID_SCHED_SWITCH_NEXT]); -+ } else { -+ functionDelayUpdateValidTimeLoop(pid, timestamp, line_info_tmp.traceValid[TRACE_VALID_FUNC]); -+ } -+ } -+ -+ for (auto &processInfo : validTimeOfPid) { -+ int pid = processInfo.first; -+ for (int i = 0; i < processInfo.second.validStartTime.size(); i++) { -+ validTimeOfPid[pid].validTime += (processInfo.second.validEndTime[i] - processInfo.second.validStartTime[i]); -+ } -+ } - } - - void TimePair::functionStatisticsAnalysis() -@@ -448,7 +479,7 @@ void TimePair::saveTimePairToFile() - file << "maxStartTimeInvaild:" << funcInfo.second.maxStartTimeInvaild << ","; - file << "minEndTimeInvalid:" << funcInfo.second.minEndTimeInvalid << "," << std::endl; - file << "info num," << funcInfo.second.startTime.size() << ",valid info num," << funcInfo.second.summary.callTimes[DELAY_INFO_ALL] << ","; -- file << "validStartTime," << validTimeOfPid[pid].validStartTime << ",validEndTime," << validTimeOfPid[pid].validEndTime << std::endl; -+ file << "procStartTime," << validTimeOfPid[pid].procStartTime << ",procEndTime," << validTimeOfPid[pid].procEndTime << std::endl; - file << "startTime" << ","; - for (const auto &startTime : funcInfo.second.startTime) { - file << std::fixed << std::setprecision(6) << startTime << ","; -@@ -544,14 +575,22 @@ void TimePair::saveDelayInfoToFile() - } - - --int TimePair::getProcessValidTime(const int &pid) -+int TimePair::getProcessTime(const int &pid) - { - if (validTimeOfPid.count(pid) != 0) { -- return validTimeOfPid[pid].validEndTime - validTimeOfPid[pid].validStartTime; -+ return validTimeOfPid[pid].procTime; - } else { - return 0; - } -+} - -+int TimePair::getProcessValidTime(const int &pid) -+{ -+ if (validTimeOfPid.count(pid) != 0) { -+ return validTimeOfPid[pid].validTime; -+ } else { -+ return 0; -+ } - } - - void TimePair::timePairAnalysis() -diff --git a/extra-tools/da-tool/analysis/time_pair.h b/extra-tools/da-tool/analysis/time_pair.h -index ba0b784..925a017 100644 ---- a/extra-tools/da-tool/analysis/time_pair.h -+++ b/extra-tools/da-tool/analysis/time_pair.h -@@ -23,8 +23,16 @@ - - class VaildRange { - public: -- int validStartTime; -- int validEndTime; -+ // Invalid timestamps divide the trace into several valid parts -+ std::vector validStartTime; -+ std::vector validEndTime; -+ -+ int procStartTime{0}; -+ int procEndTime{0}; -+ int procTime{0}; -+ int validTime{0}; -+ // tmp var -+ bool lastTimeValid{false}; - }; - - typedef enum { -@@ -67,7 +75,7 @@ public: - std::vector fatherFuncPos; - std::vector childFuncTimes; // Number of calls to other functions. - std::vector retVal; // return value -- std::vector isInvalid; // isInvalid=true indicates that there is no -+ std::vector isInvalid; // isInvalid=true indicates that there is no - // complete call stack data - std::vector strFunctionStk; - -@@ -90,7 +98,6 @@ public: - ~TimePair() {} - - private: -- // [pid].start/end Record the start and end times of valid traces - std::unordered_map validTimeOfPid; - // Store function call stacks for each pid - std::unordered_map> funcStkMap; -@@ -109,6 +116,8 @@ private: - const int ×tamp, const int &fatherFunction, - const int &debugPos); - void functionDelayUpdate(); -+ void functionDelayUpdateValidTimeLoop(const int &pid, const int ×tamp, -+ const bool &valid); - void functionStatisticsAnalysis(); - - void timePairMatching(); -@@ -122,6 +131,7 @@ public: - const std::unordered_map> & - getTimePairMap() const; - int getProcessValidTime(const int &pid); -+ int getProcessTime(const int &pid); - void timePairAnalysis(); - }; - -diff --git a/extra-tools/da-tool/analysis/trace_resolve.cpp b/extra-tools/da-tool/analysis/trace_resolve.cpp -index 61f0a74..ae86773 100644 ---- a/extra-tools/da-tool/analysis/trace_resolve.cpp -+++ b/extra-tools/da-tool/analysis/trace_resolve.cpp -@@ -56,12 +56,6 @@ const std::vector &TraceResolve::getTraceLine() const - return traceLineVec; - } - --const FirstInfo &TraceResolve::getTraceFirstInfo() const --{ -- return firstInfo; --} -- -- - void SchedSwitchLine::processStateToEnum(std::string state) - { - if (state == "R") { -@@ -74,7 +68,8 @@ void SchedSwitchLine::processStateToEnum(std::string state) - } - } - --int countLines(const std::string& filename) { -+int countLines(const std::string &filename) -+{ - std::ifstream file(filename); - if (!file.is_open()) { - std::cout << "file open failed:" << filename << std::endl; -@@ -130,7 +125,7 @@ void TraceResolve::resolveTrace() - continue; - } - if (line_num % 10000 == 0) { -- double rate = (line_num - cfg.readTraceBegin) * 1.0/ readTraceLen; -+ double rate = (line_num - cfg.readTraceBegin) * 1.0 / readTraceLen; - std::cout << "\r" << "[Resolve] " << std::fixed << std::setprecision(3) << rate * 100 << "%, "; - std::cout << "Match " << regex_num; - std::cout.flush(); -@@ -178,9 +173,6 @@ void TraceResolve::resolveTrace() - if (isMatch) { - if (isFirstMatch) { - startTimeIntPart = std::stoi(match[TRACE_INFO_TIMESTAMP_INT].str()); -- firstInfo.coreId = std::stoi(match[TRACE_INFO_CPU].str()); -- firstInfo.startTime = (std::stoi(match[TRACE_INFO_TIMESTAMP_INT].str()) - startTimeIntPart) * MICRO_PER_SEC \ -- + std::stoi(match[TRACE_INFO_TIMESTAMP_FLOAT].str()); - isFirstMatch = false; - } - match_info.timestamp = (std::stoi(match[TRACE_INFO_TIMESTAMP_INT].str()) - startTimeIntPart) * MICRO_PER_SEC \ -@@ -190,6 +182,10 @@ void TraceResolve::resolveTrace() - match_info.functionName = match[TRACE_INFO_FUNCNAME].str(); - match_info.traceLineNum = line_num; - -+ match_info.traceValid[TRACE_VALID_FUNC] = false; -+ match_info.traceValid[TRACE_VALID_SCHED_SWITCH_PREV] = false; -+ match_info.traceValid[TRACE_VALID_SCHED_SWITCH_NEXT] = false; -+ - traceLineVec.emplace_back(match_info); - regex_num++; - } -@@ -224,15 +220,22 @@ void TraceResolve::saveTraceRegexRstToFile() - return; - } - -- file << "traceLineNum" << "," << "pid" << "," << "core" << "," << "timestamp" << "," << "functionName" << std::endl; -+ file << "traceLineNum,pid,core,timestamp,functionName,"; -+ file << "prevPid,prevPrio,prevState,nextPid,nextPrio,"; -+ file << "funcValid,schedPrevValid,schedNextValid" << std::endl; - for (const auto &row : traceLineVec) { - file << row.traceLineNum << ","; -- file << row.pid << "," << row.core << "," << "," << std::fixed << std::setprecision(6) << \ -+ file << row.pid << "," << row.core << "," << std::fixed << std::setprecision(6) << \ - row.timestamp * 1.0 / MICRO_PER_SEC + startTimeIntPart << "," << row.functionName; - if (row.functionName == "sched_switch") { - file << "," << row.schedSwitchLine.prevPid << "," << row.schedSwitchLine.prevPrio << "," << \ - row.schedSwitchLine.prevState << "," << row.schedSwitchLine.nextPid << "," << row.schedSwitchLine.nextPrio; -+ } else { -+ file << ",,,,,"; - } -+ file << "," << row.traceValid[TRACE_VALID_FUNC]; -+ file << "," << row.traceValid[TRACE_VALID_SCHED_SWITCH_PREV]; -+ file << "," << row.traceValid[TRACE_VALID_SCHED_SWITCH_NEXT]; - file << std::endl; - } - -@@ -245,64 +248,188 @@ double TraceResolve::convertTimeIntToDouble(const int ×tamp) - return timestamp * 1.0 / MICRO_PER_SEC + startTimeIntPart; - } - --void TraceResolve::firstSchedSwitchTimeAnalysis() -+void FuncValid::addToVectors(int traceId, bool isR, bool val) -+{ -+ traceLineIndex.emplace_back(traceId); -+ isRet.emplace_back(isR); -+ valid.emplace_back(val); -+} -+ -+void TraceResolve::creatEmptyFuncPairMap(const int &pid, const int &funcIndex) - { -+ if (funcPairMap.count(pid) == 0) { -+ std::unordered_map funcValidMapTmp; -+ funcPairMap.emplace(pid, funcValidMapTmp); -+ } -+ -+ if (funcPairMap[pid].count(funcIndex) == 0) { -+ FuncValid funcVaildTmp; -+ funcPairMap[pid].emplace(funcIndex, funcVaildTmp); -+ } -+} -+ -+void TraceResolve::funcPairMapInit() -+{ -+ // [pid][func] - Config &cfg = Config::getInstance(); -- bool isCfgSchedSwitch = cfg.funcCfgMap.count("sched_switch") > 0; -- int sched_switch_funcidx = -1; -- if (isCfgSchedSwitch) { -- sched_switch_funcidx = cfg.funcCfgMap["sched_switch"].functionIndex; -- } else { -+ for (int traceId = 0; traceId < traceLineVec.size(); traceId++) { -+ int pid = traceLineVec[traceId].pid; -+ std::string functionName = traceLineVec[traceId].functionName; -+ int functionIndex = cfg.funcCfgMap[functionName].functionIndex; -+ int isRet = cfg.funcCfgMap[functionName].isRet == 0 ? false : true; -+ -+ creatEmptyFuncPairMap(pid, functionIndex); -+ funcPairMap[pid][functionIndex].addToVectors(traceId, isRet, false); -+ -+ if (traceLineVec[traceId].functionName == "sched_switch") { -+ int nextPid = traceLineVec[traceId].schedSwitchLine.nextPid; -+ creatEmptyFuncPairMap(nextPid, functionIndex); -+ funcPairMap[nextPid][functionIndex].addToVectors(traceId, true, false); -+ } -+ } -+ -+ for (auto &processInfo : funcPairMap) { -+ for (auto &funcInfo : processInfo.second) { -+ for (int i = 0; i < funcInfo.second.isRet.size() - 1; i++) { -+ // a a a a a_r a_r a_r, a a_r is valid trace -+ if (!funcInfo.second.isRet[i] && funcInfo.second.isRet[i + 1]) { -+ funcInfo.second.valid[i] = true; -+ funcInfo.second.valid[i + 1] = true; -+ } -+ } -+ } -+ } -+ -+ saveFuncPairMapToFile(); -+} -+ -+void TraceResolve::saveFuncPairMapToFile() -+{ -+ Config &cfg = Config::getInstance(); -+ if (cfg.getDebugLevel() < DEBUG_LEVEL_2) { -+ return; -+ } -+ -+ std::ofstream file(cfg.filename[FILE_TYPE_DEBUG_TRACE_FUNCPAIRMAP], std::ios::out | std::ios::trunc); -+ if (!file) { -+ std::cout << "file open failed:" << cfg.filename[FILE_TYPE_DEBUG_TRACE_FUNCPAIRMAP] << std::endl; - return; - } - -- firstInfo.schedSwitchTime.resize(CPU_CORE_NUM_MAX, INT_MAX); -- firstInfo.coreTime.resize(CPU_CORE_NUM_MAX, INT_MAX); -- firstInfo.schedSwitchTime[firstInfo.coreId] = firstInfo.startTime; -- firstInfo.coreTime[firstInfo.coreId] = firstInfo.startTime; -+ for (const auto &processInfo : funcPairMap) { - -- for (const auto &line_info_tmp : traceLineVec) { -- std::string functionName = line_info_tmp.functionName; -- int pid = line_info_tmp.pid; -- if (cfg.funcCfgMap.count(functionName) == 0) { -- continue; -+ for (const auto &funcInfo : processInfo.second) { -+ int funcIndex = funcInfo.first; -+ file << "pid," << processInfo.first; -+ file << ",funcid," << funcIndex; -+ file << ",funcName," << cfg.IndexToFunction[funcIndex] << std::endl; -+ file << "isRet,"; -+ for (int i = 0; i < funcInfo.second.isRet.size(); i++) { -+ file << funcInfo.second.isRet[i] << ","; -+ } -+ file << std::endl; -+ file << "valid,"; -+ for (int i = 0; i < funcInfo.second.valid.size(); i++) { -+ file << funcInfo.second.valid[i] << ","; -+ } -+ file << std::endl; -+ file << "traceLineIndex,"; -+ for (int i = 0; i < funcInfo.second.traceLineIndex.size(); i++) { -+ file << funcInfo.second.traceLineIndex[i] << ","; -+ } -+ file << std::endl; - } -+ } - -- int timestamp = line_info_tmp.timestamp; -- int coreIndex = line_info_tmp.core; -- int functionIndex = cfg.funcCfgMap[functionName].functionIndex; -- // first appearance of coreIndex in trace -- if (firstInfo.coreTime[coreIndex] == INT_MAX) { -- firstInfo.coreTime[coreIndex] = timestamp; -- } -- // first appearance of sched_switch in coreIndex's trace -- if (functionIndex == sched_switch_funcidx && firstInfo.schedSwitchTime[coreIndex] == INT_MAX) { -- firstInfo.schedSwitchTime[coreIndex] = timestamp; -+ file.close(); -+} -+ -+void TraceResolve::markTraceIsValid() -+{ -+ Config &cfg = Config::getInstance(); -+ int sched_switch_funcidx = cfg.funcCfgMap["sched_switch"].functionIndex; -+ -+ for (auto &processInfo : funcPairMap) { -+ for (auto &funcInfo : processInfo.second) { -+ int functionIndex = funcInfo.first; -+ for (int i = 0; i < funcInfo.second.valid.size(); i++) { -+ bool validTmp = funcInfo.second.valid[i]; -+ int traceId = funcInfo.second.traceLineIndex[i]; -+ if (functionIndex == sched_switch_funcidx) { -+ // pid1 -> s s_r ->pid2 -+ if (funcInfo.second.isRet[i]) { -+ traceLineVec[traceId].traceValid[TRACE_VALID_SCHED_SWITCH_NEXT] = validTmp; -+ } else { -+ traceLineVec[traceId].traceValid[TRACE_VALID_SCHED_SWITCH_PREV] = validTmp; -+ } -+ } else { -+ traceLineVec[traceId].traceValid[TRACE_VALID_FUNC] = validTmp; -+ } -+ } - } - } - } - --void TraceResolve::trace_resolve_proc() -+void TraceResolve::markFuncStkValidLoop(const int &pid, const int &funcIndex, const int &traceId, const TRACE_VALID_E &validType) - { -- resolveTrace(); -- saveTraceRegexRstToFile(); -+ if (funcStkValidMap.count(pid) == 0) { -+ FuncStkValid funcStkVaildTmp; -+ funcStkValidMap.emplace(pid, funcStkVaildTmp); -+ } -+ -+ bool traceValid = traceLineVec[traceId].traceValid[validType]; -+ if (!traceValid) { -+ funcStkValidMap[pid].isInvalid = true; -+ } else { -+ funcStkValidMap[pid].traceIndex.emplace_back(traceId); -+ funcStkValidMap[pid].vaildType.emplace_back(validType); -+ if (!funcStkValidMap[pid].funcStk.empty() && funcIndex == funcStkValidMap[pid].funcStk.back()) { -+ funcStkValidMap[pid].funcStk.pop_back(); -+ } else { -+ funcStkValidMap[pid].funcStk.emplace_back(funcIndex); -+ } -+ } - -- firstSchedSwitchTimeAnalysis(); -+ if (funcStkValidMap[pid].funcStk.size() == 0) { -+ if (funcStkValidMap[pid].isInvalid) { -+ for (int i = 0; i < funcStkValidMap[pid].traceIndex.size(); i++) { -+ int traceIndexTmp = funcStkValidMap[pid].traceIndex[i]; -+ TRACE_VALID_E vaildTypeTmp = funcStkValidMap[pid].vaildType[i]; -+ traceLineVec[traceIndexTmp].traceValid[vaildTypeTmp] = false; -+ } -+ } -+ // clear history -+ funcStkValidMap[pid].traceIndex.resize(0); -+ funcStkValidMap[pid].vaildType.resize(0); -+ funcStkValidMap[pid].isInvalid = false; -+ } - } - --void TraceResolve::trace_check_show() -+void TraceResolve::markFuncStkValid() - { - Config &cfg = Config::getInstance(); -- for (int coreId = 0; coreId < CPU_CORE_NUM_MAX; coreId++) { -- int firstSchedSwitchTime = firstInfo.schedSwitchTime[coreId]; -- int firstCoreTime = firstInfo.coreTime[coreId]; -- if (cfg.getDebugLevel() >= DEBUG_LEVEL_1) { -- std::cout << "coreId:" << coreId; -- std::cout << ",firstSchedSwitchTime:" << firstSchedSwitchTime; -- std::cout << ",firstCoreTime:" << firstCoreTime << std::endl; -- } -- if (firstSchedSwitchTime != firstCoreTime) { -- std::cout << "[ERROR] core " << coreId << " missing starting scheduling information, result maybe error!!!" << std::endl; -+ int sched_switch_funcidx = cfg.funcCfgMap["sched_switch"].functionIndex; -+ for (int traceId = 0; traceId < traceLineVec.size(); traceId++) { -+ int pid = traceLineVec[traceId].pid; -+ std::string functionName = traceLineVec[traceId].functionName; -+ int functionIndex = cfg.funcCfgMap[functionName].functionIndex; -+ if (functionIndex == sched_switch_funcidx) { -+ int nextPid = traceLineVec[traceId].schedSwitchLine.nextPid; -+ markFuncStkValidLoop(pid, functionIndex, traceId, TRACE_VALID_SCHED_SWITCH_PREV); -+ markFuncStkValidLoop(nextPid, functionIndex, traceId, TRACE_VALID_SCHED_SWITCH_NEXT); -+ } else { -+ markFuncStkValidLoop(pid, functionIndex, traceId, TRACE_VALID_FUNC); - } - } -+} -+ -+void TraceResolve::trace_resolve_proc() -+{ -+ resolveTrace(); -+ // trace valid check -+ funcPairMapInit(); -+ markTraceIsValid(); -+ markFuncStkValid(); -+ -+ saveTraceRegexRstToFile(); - } -\ No newline at end of file -diff --git a/extra-tools/da-tool/analysis/trace_resolve.h b/extra-tools/da-tool/analysis/trace_resolve.h -index e943d20..4b8ba89 100644 ---- a/extra-tools/da-tool/analysis/trace_resolve.h -+++ b/extra-tools/da-tool/analysis/trace_resolve.h -@@ -21,11 +21,10 @@ - #include - - // include\linux\sched.h --typedef enum --{ -- PROCESS_STATE_TASK_RUNNING, // R -- PROCESS_STATE_TASK_INTERRUPTIBLE, // S -- PROCESS_STATE_MAX, -+typedef enum { -+ PROCESS_STATE_TASK_RUNNING, // R -+ PROCESS_STATE_TASK_INTERRUPTIBLE, // S -+ PROCESS_STATE_MAX, - } PROCESS_STATE_E; - - class SchedSwitchLine { -@@ -40,6 +39,13 @@ public: - void processStateToEnum(std::string state); - }; - -+typedef enum { -+ TRACE_VALID_FUNC, -+ TRACE_VALID_SCHED_SWITCH_PREV, -+ TRACE_VALID_SCHED_SWITCH_NEXT, -+ TRACE_VALID_MAX, -+} TRACE_VALID_E; -+ - class TraceLineReslove { - public: - int traceLineNum; -@@ -52,14 +58,24 @@ public: - - // after convert - int functionIndex; -+ bool traceValid[TRACE_VALID_MAX]; -+}; -+ -+class FuncValid { -+public: -+ std::vector traceLineIndex; -+ std::vector isRet; -+ std::vector valid; // rst -+ -+ void addToVectors(int traceId, bool isR, bool val); - }; - --class FirstInfo { -+class FuncStkValid { - public: -- std::vector schedSwitchTime; // [coreId] -- std::vector coreTime; // [coreId] -- int coreId; // first core in trace -- int startTime; -+ std::vector funcStk; -+ std::vector traceIndex; -+ std::vector vaildType; // size() = traceIndex.size(); -+ bool isInvalid{false}; // tmp rst - }; - - class TraceResolve { -@@ -80,12 +96,20 @@ private: // regex - void saveTraceRegexRstToFile(); - - private: -- FirstInfo firstInfo; -- void firstSchedSwitchTimeAnalysis(); -+ // [pid][functionIndex] mark unmatch func => invalid -+ std::unordered_map> funcPairMap; -+ // [pid] if funcstk have invalid data, mark all funcstk invalid -+ std::unordered_map funcStkValidMap; -+ void creatEmptyFuncPairMap(const int &pid, const int &funcIndex); -+ void funcPairMapInit(); -+ void markTraceIsValid(); -+ void markFuncStkValid(); -+ void markFuncStkValidLoop(const int &pid, const int &funcIndex, -+ const int &traceId, const TRACE_VALID_E &validType); -+ void saveFuncPairMapToFile(); - - public: - const std::vector &getTraceLine() const; -- const FirstInfo &getTraceFirstInfo() const; - double convertTimeIntToDouble(const int ×tamp); - void trace_resolve_proc(); - void trace_check_show(); -diff --git a/extra-tools/da-tool/main.cpp b/extra-tools/da-tool/main.cpp -index 34652f0..abc1004 100644 ---- a/extra-tools/da-tool/main.cpp -+++ b/extra-tools/da-tool/main.cpp -@@ -37,7 +37,6 @@ int main(int argc, char *argv[]) - FunctionStack &fstk = FunctionStack::getInstance(); - fstk.function_stack_proc(); - -- trace_resolve_inst.trace_check_show(); - cout << "[STEP 2-2] analysis finish" << endl; - return 0; - } -\ No newline at end of file -diff --git a/extra-tools/da-tool/script/da-tool.sh b/extra-tools/da-tool/script/da-tool.sh -index 2b38bc8..3bfa366 100755 ---- a/extra-tools/da-tool/script/da-tool.sh -+++ b/extra-tools/da-tool/script/da-tool.sh -@@ -31,8 +31,9 @@ cd $base_dir - mkdir -p tmp - - # extern para --sleep_time=10 --sleep_time_max=100 -+sleep_time_default=1 -+sleep_time=$sleep_time_default -+sleep_time_max=10 - - # base para - declare -a kernel_symbols -@@ -79,10 +80,18 @@ function usage() { - echo "usage: da-tool.sh [OPTIONS] [ARGS]" - echo "" - echo "The most commonly used da-tool.sh options are:" -- echo " -t set tracing duration, unit: seconds, 1<=duration<=100, default is 10" -+ echo " -t set tracing duration, unit: seconds, 1<=duration<=$sleep_time_max, default is $sleep_time_default" - echo " -h show usage" - } - -+function sleep_time_check() { -+ if [ $sleep_time -ge $((sleep_time_max + 1)) ] || [ $sleep_time -le 0 ]; then -+ echo "sampling time should > 0 and <= $sleep_time_max" -+ usage -+ exit 1 -+ fi -+} -+ - # get opt - # while getopts "b:l:t:p:as" opt; do # debug - while getopts "t:h" opt; do -@@ -99,9 +108,9 @@ while getopts "t:h" opt; do - if [[ $OPTARG =~ ^[0-9]{1,3}$ ]]; then - sleep_time=$OPTARG - else -- usage -- exit 1 -+ sleep_time=0 - fi -+ sleep_time_check - ;; - p) - parameter="$OPTARG" -@@ -161,7 +170,7 @@ function arr_repet_ele_check() { - for element in "${arr[@]}"; do - count=$(printf '%s\n' "${arr[@]}" | grep -c -w "$element") - if [ $count -ge 2 ]; then -- echo " '$element' duplicate configuration, please check '$config_file'!!!" -+ echo " '$element' duplicate configuration" - exit 1 - fi - done -@@ -172,7 +181,7 @@ function arr_check_function_support() { - local symbols_tmp=("$@") - for symbol in "${symbols_tmp[@]}"; do - if [[ $symbol =~ \. ]]; then -- echo "$symbol have '.', not support, please check '$config_file!!!'" | tee -a $sample_log -+ echo "$symbol have '.', not support" | tee -a $sample_log - exit 1 - fi - done -@@ -181,12 +190,18 @@ function arr_check_function_support() { - # kernel symbols should be found in '/proc/kallsyms' - function arr_check_kernel_symbols_exist() { - local symbols_tmp=("$@") -+ kernel_symbols=() - for symbol in "${symbols_tmp[@]}"; do - if grep -e "^[0-9a-fA-F]* [a-zA-Z] $symbol$" /proc/kallsyms >/dev/null; then - echo "$symbol exist in /proc/kallsyms" >>$sample_log -+ # first version -+ # (1) only support kernel symbols -+ # (2) can't config /etc/da-tool.conf -+ # (3) if symbols not in /proc/kallsyms, then continue(not exit) -+ kernel_symbols[${#kernel_symbols[*]}]+=$symbol - else -- echo "$symbol does not exist in /proc/kallsyms or not support, please check '$config_file'!!!" | tee -a $sample_log -- exit 1 -+ echo "$symbol does not exist in /proc/kallsyms or not support" | tee -a $sample_log -+ # exit 1 # after first version - fi - done - } -@@ -199,7 +214,7 @@ function arr_check_user_symbols_exist() { - if nm "$binary" | grep -q "\<$symbol\>"; then - echo "$symbol dost exist in $binary" >>$sample_log - else -- echo "$symbol does not exist in $binary, please check '$config_file'!!!" | tee -a $sample_log -+ echo "$symbol does not exist in $binary" | tee -a $sample_log - exit 1 - fi - done -@@ -211,7 +226,7 @@ function arr_check_sched() { - if [[ $sched == "sched_switch" ]]; then - echo "sched_switch match" >>$sample_log - else -- echo "s only support sched_switch, please check '$config_file'!!!" | tee -a $sample_log -+ echo "s only support sched_switch" | tee -a $sample_log - exit 1 - fi - done -@@ -301,20 +316,6 @@ function gen_config_for_analysis() { - done - } - --function opt_check() { -- if [ $is_uprobe_sample = false ] && [ $is_kprobe_sample = false ]; then -- echo "use -m u|k|uk to set uprobe/kprobe/both" -- usage -- exit 1 -- fi -- -- if [ $sleep_time -ge $((sleep_time_max + 1)) ] || [ $sleep_time -le 0 ]; then -- echo "sampling time should > 0 and <= $sleep_time_max" -- usage -- exit 1 -- fi --} -- - function clear_env() { - echo "[INFO] clear env..." - echo 0 >/sys/kernel/debug/tracing/tracing_on -@@ -369,6 +370,7 @@ function sample_init() { - echo >/sys/kernel/debug/tracing/trace - echo 40960 >/sys/kernel/debug/tracing/buffer_size_kb - -+ - echo >/sys/kernel/debug/tracing/uprobe_events - echo >/sys/kernel/debug/tracing/kprobe_events - } -@@ -538,8 +540,6 @@ if [ $is_clear = true ]; then - exit 1 - fi - --opt_check -- - if [ $is_analysis_only_mode = true ]; then # only analysis - trace_analysis - exit 1 --- -2.33.0 - diff --git a/aops-ceres-v1.3.4.tar.gz b/aops-ceres-v1.3.4.tar.gz deleted file mode 100644 index b99f0f80e12460983aa5d6500dfc5de10ff7c8bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553862 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%0Aqy(SlB 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%0D;!LIfXXo_7Z z;hD)*x2zAJzSf}V{PoyPnRpjoOrPn5<TGf`c_1CqR8yjX4$|rl6x(~BsrGd<`Y4ay6FJAo?T+t(d;0} zNsa9G=8p?D^P_r>zCPf*_k#ON10 zQKlLgc~!Qx8%F&?LQl$@fcmRhnw}qzRe6=JPIIU-QEYl{H1B2DeD}1O!m>X(eo_Y2 z>#OypYA&^SS(&dpHT0IYq2~}iE20MvR1r*-x~g!X_$Da{D!5wwB4VNMNsq3;#`vG# zYc?6W8Ie6Hs}Yw2YRbzri{pG4usnHmrEzcM z=Cj*OLg3i2d+M^fAs=vkDHfbW!SKL%X6)jX)HC z{*=R7?caojTy9O0*}Ie~Qy3K(w?h-1$a=6t>rNSKdJS%CCMugnr@Rx>M#r{eA0#_h zc7vXwFQcskj0$%ix_CjY_@VP3b`6rR~SwXzzg;R<6Mso?ECID`P<1|Rvox`g{y)MM|+h|~pVr^$A{Mv#AZ5Sy%b zmOIw$QSGS>Wht_8ubh>wE;(SM_F)cNK7QF@`0;@UX`qD+HAhwU&;4n(%imhqnIo@6 zpuMj|Y!qBmfl6s=mT#pvj5cVSb${KWGs7xI`X6yV5rGT95_-Ta(Ml;2(;jXc@xK2=^hd@Yx@Z=~ zFzWo?J87nOpFB&UU%mV-#O=>y(^bI_&7@ZEgWDsTk(GT>FW?=>*QLINpjjfi zKPGmuT&{8qvGJYxlXTeH%<()T`4HzNnm7}6!KSBLIRG~&NJ2_#(@x!eYd_v3(k#pC zmFlx+y{nJz-Me?k$jIp9+9oBTd@?0W?D4pJ+?Eq7@V9zasV2hnKjQ9{*eD@gTQPNt zi(kK9uDI1#A?-PH*?=0We$V$dg-4|xPuUfn!>Vq(==QnDKS|qU;2GqG1op6D?*6^m=;&~DJ-1s4C*`!Ckc|}J2$qQAM<%$VuOZjue4an5#bZxr{gBwh ztb5#1&{dcbn02RKB}eY%cVkZ*_ZPft%}p<~dOv;}rhSqvl1g0Vrv8gAJtJiU{92=Z zrtgx{RQi6@`;0`PbP8`S3`_LtSa?~$o3P!gcpDBFLVS5jqX|sCj?4eFct~lcGi8(SvG&uV>fV-Z-^~skz;% zem)r)M8)nhj8-}seU(i(R+y!oy6`V(1He_jbh!nJCbQg4NOw}3lw?+tk#a06LD1sm zX!Y;Vpp|->$NA)SM7eXOhXG5CNuRE(N__r?v4c)+;Z$aVYL@y{8sUn_nM1zmn>iHE zewK+R^c=wPiN`!wk(l{y>k?BuDI2palcFM%;NHGX#ah1lgBLOC!9#Jurd7W5>dm5$ zXsN&Y@ZgMiakaldqM86$*SN=W#GRdO)BefUMC3px(vYs zy?1=<9E`a_dDryEmvB@0{0P&-=V7ML@9TUm4^nh`_|d$;M$~hj;o7YypqjgdPtr5r z-n+(Cy)5C2kN1F4C*;LaUFWTl)~< zZDc-~SWKVwQcZ>pDucOH-59Qs@l_=aIv}9pB4vVT6!JM*-Jy}ccNq69Ub{cO3-0R4}+g`yRV#l06&ZlnbHbijga-m zRIKe9FaG&PX+2YYxuPFcA>D}8ov5hncM|o;)O(T0ugmcQ7iH-8k4uK>dR9{UbypJ+(EvzW zAf(U2A|edObl>cJ0A2Y0?ga}Kapiy9q1MuxGwLOXzVw38+k)XiOlfC87eRoG2>ntaIq7`7rKi{ zLxHQ82a-^e$~9~O-}*!>rA^8Vv$%B+j2cfygi>%@{XtAMsYKF2>w+CIP|`$U+w1c3 z#Dn&*aOnC^hQ;C+O;8`qP+{yfG2dH3cTR~6l*Aqu-A{=^(`uc7wSz=OGZe+YFz3NU zMqd1J;zP7t#r&!(+3_J=Rq4t-^366_aomo`>JDZ9+n}E{1tS)ZbwZm`L&ZEfyy|Ww z$k0Q5Zhk^%X4!R4?T3ZvA+vuRBy=m5R-A`wFPoZ*mG@|yU4s{tU#_$Zc$=jXdgI0o zBbw;f|SKS|j zvVz4AevFwlIdUm0J7yc^>m1@vv(3-RzxxTrUb^X%GY&+VT~Uz?1!*tFc`$W<5Nf$E zu8|CnxLSFX@im-Yk(NykEM1 z^5bBB`93oK-h&6Kgf5nUmssHRzN8Up?n%IX+Y0b%H2pLiZ#qq-xg7Vx zN7K*GIM@QV^wWvk-v*Q1yOTiDXeAWOCGAsWL`XJYzp1A~JSoPAoorz5>@>SPC{L8U z{L*^%>&6R_F&4_Tgd2az{JUAGp)&Nc(^hr1S|^jNz)LIJdNslSQHZJZh!!TGffpn> z98*G0A8+3t4KF6wGp!B3iT%VxJb9bZb*zGNtOk2$Ew5>Mh23cWTtn{0EhW;f1`oj! zPD-kIuhEIm#y&dtM~0g#Jod!CI3Iu>*SM4>qe(7t5z%ZY5>I|f@ME{w-bwnZ+=R%V zgWM-nzE~S}o@jZ9Stswj0K2_TE7i(nmlJ@qP?E*8HFaaGwq@w)oXuVNzC1wZ=UcQa z8w(J6y?=TBYg1T*LFAN1n%8|}G<@ns) z_uJYO!<`KTy>3kT(CW-(v*M}2a__uSvIj|X$Iev26oCW1j^CX}xDGVPVn{(9;px_TQ{%0IHKKqU1jrcIqS!a0Z= zGg?6_|GQZ!`_rd17K_HzGl7-@0`(g0ngBd@t(ixoP8CU`pO~<)aK~o65(j*W=_|9( zt()Fv&fcGm`=h-DAKXy5L3faN|X8XnbAQ?<}{#flNv24C^77((sVXM z(*h*w%a9sL+%3kF3U9d&v65LjpF*!N4VpsCOO7;0H@hmz-TC9rd2?w-+hK}gD-<;)yDtk6oT^gZI@2c{*-lzBVF*mDF^(>)CuW=s-y_w0G8P|#5oa;8N zbU7EU<-$>7X@(~orV+YbDwP!gN7LsNn^=u<=OAS16U7E9Y@EdSjZ0pvPc(1}3Pv_l zo@PKb2{q?N8pJC(ZL6#&3j?=zFYEn&+6e7ayvfDIar3kA*X8P0G4PDHE&bdOW|B7w z(^&`OhtS8z*?JXKRb6(uu6_W*;r))BOdE3(+rCCfK+p?4uC;f=m7VUsD@3`awlr2Y z;an|VrT6>*pz7il3^&6yWS`Fe8jqH#cxL(RR9YP?^tQJs_3A)&b~ z}hX!=tdo$g{ zvCztjY^!gMR{P&_86Y0B8y=@jGHN0&xb0?E2_jw3w4iU{%jkV#$D~L~O3I4=6EB1Q z%EgFr%Gkv>&P3L6vE8SB5y zmhUkym`23*^i2X|cm?CIHjfvri5*iSch{6&G#%^^=uTEu%$asiSq{&&eQUhXaD}om zOx@2zF!k5tTx^Ujw0>7|UjXK{-Nluv=y#DPCja{N>!6+#DV0jQ9&>p|U%AtXFc4Lh z+HPjU$0zknc~LcAerS^n$ud&r-(!{cy2i)HcX{T#1n0V%Ua2X`8})d;Tk`L1to-Za zD*{U0I)BuLMJ(t{AAU3%M|hf*Buv!mbEa?3=AkdTY5|L`MC@qMJ-cwhc025=@}uJ% z37X4OPcIVsJkO1~r#?`4+t_ISdMNy5&^=mWmFy|@YuR$7nxlQQd8Jwj_s499D!$kG zlYV4m_;!+OAuXWJJ+s`NbvJlFEPQ~16LHFz)F!D-DC`^?_@!yZ!Rl0nqI65lj+}yiacrTqMY=R*u-bdp(*N&YuPfA=Mzi5El#L!3?~lqouvBpup;| z#Q6Pt?Q1|6|53pvlrASPOMH9G_`hRtyM&5}xXwamW*!%l{mOiHVeUE)5A(~HcgZO)srmX!-{9oD%*c2_Ny*un3h|eK z_XUuM`_0;5z{klIY^H~Ew{+GXt~YtF(0~5?`CVF?5ckW4+4&nHBJ5w64AsvyikW%AqFSk0v<@*66bng0htF5J2mji!D{L^Ly!mzjB;gpBNyL9XT;_B#BO zNf>`+>T#Y}sMb^AkPy|(Uy&Z})RDh_=)^WQLx|Ub&CIX(ccu6A7 zD9~Sc`z>LnM(Qt|K6bGPzptaEr+H~7-o??kTZ07JE5>5lC#~0j$42u^goTNfRpnIF^ z6gO`L?0ZErOX<8!_<8d$@3QJLAT4@bEhnCkkS~qDk`u4i1{_FE2Au>n{^^yobh*%= z`rS^yAD}Py>j$8!lVwDrh`dio)N3}Z* z6RI!1e${^BXEsM;T4{GlSw#ica*mo8b?@2Wk?a$X`Z~uL-OmeYu! z*YePXOU#l+)mdMn|5Bj!NupWh-T+1l6T)Dr7iV!>osE$1BxK3D$;tI8t%8=zt=jY| z?X*Q!6dJVt4oscc1a8?5K?m^6Ul4no)p2DiFojQWye~EduP11AH; zwrI~OF(LQz+*A zVq#*zj*FU^vBvN1aVROFp;6X-_fNNJWAuyWW+e&=3Lt8@OiTMZER6hHd%M1#ZyHZi zW!njLRAAuOVph|75b(IKrlVS>{Nxqr|Nr>^jfa)1o2QVCt%t3rkdLUaxbSU}r>-_4 zPi;LN>|I3c9PGV;cSPpiH_bNWERlWd2ViHoK!1Mn*C;so@?dfIZ0o>BV)z$0&*6053z5jol z-2az6-U91*iGqm&czNmmJyin`h!_FL_a1qIKr~*2AEHS+c3%)Ed61B-_qAM`AoDf%^Og!E=XwWPdihQr zd-;Pl@dXFn$=9DZ4pk-votd)`di4dMmNlCzj=W+^i z1mXD!-DMaN@Z7?G9Zw8Azc9YDL8|@S#l^tho+myoPS4z&#n0EbA8=>U%2|56v=q4x zq$DJI>gwl>O-u}ff|^rRsmNLxbV}gx7+636A3uM%n7H^-SG>Rt5^$40UC8OTGzT4> zoUT6NR8X*ZJ=M~3hw0k2cZQwEmtoVY(i?ByyfJ`4YG9Ovas1*F7N$>oa?G$0d>#L_ zA|y1_P)8^Fkcsf#p1Y3^J?r!l;f)~_Dne#*ZOwU)o-ph`;*yfw$6WqOkSR(HNkv5+4i1h@ zC&GIPSv56@fNP&c?I>@AaIP#bXUE0S?n!`Z(SCk@KhIIiKhYBs652G=rG{(F_FV$G znTm^xTer29n$^sjUF5)jeQ#`R{5F^$)FSJKHzL!cYJwy7i==DkZ*$;@TlC$h=BA)W z``&x>Due;c-$tOPq(S4%(x%Cj<;&$zy^T3kyiWOM;Gtw7`!UOdBhjvfqjgBL(}w7S zIygLF&FQJDD?Dgyaj~FQdryA(AYlHZy(&(v2G$Hq*^~?naB%3Ha?;1t;80nxi=goX zX?(Jo(;Hx#z>gc&;8nV;Jpa(N0V|0NjQ?e9gi<;-6o-^Q#$#qoyhjyy@%+14$G+a= z#)_5~5DE$kGm?1-k-(45cE`RQyQMIlW79d?4iV;{BZ|4*f^iYhc*AAbT|+>ncDbqE z<|(sd^qvWCx$_zk^BSUKWM7LR*aN|VX|5)(^7oI1G9s|S4OJ}WQO$~T2--tM&08jl zlXx3^K&{~q_#e3D^@qT?ksC-R%&y5RKq@K!t}V>9&ZNrhkR~ru$=?(+4Au4y zjl+gwbuTn@>}J7)JzEpO^9OSWChJ;9xa9+5#Yt(r7-DTHKVzi18HdWvJ5B|;1rhcI zuy&>lRLSF)j1y&fH@mymH1%vdYS?LE!|ZKo_S@~w%Lm~xF%0Z&?A)>0`8}MCGx_1dZUmk)4odhBCzkH&$Tk#26X$01r-J2uzuje!^s$Q2li8HLf-MU zIS{3yuksO~Pa>Feg7{k$bJDiL+ee#LbmlHDE;E69l5@_>@T;JbbAM&nQV%FHF;C)t z&TXokyl6qiGbIVMkWn<<^X05Fef`jv?r>&Nkma?j=B^@0dv-kJ?Mb9CJ`}^grr9GSdH*Rk7C+x-i=DdXvTixM#(d}ar4{Wp z8nxDGQCgZS0{qhQkL!g#91^R1??%R$n@@E1u7AdlY9$K4Z)hM33DM9~x8oij8tQLp z0Rg786HEkpVS6UkRCcOV7LUr$o;fd=?=gs2-fZaJnZ+EzESM>Gp2jBC)WOMU7v*quHZgv=6u#4B>Q&$;j(UMv2 z?_=YlSYp?s7N+5d{s#3Z7XRFqV#=nK?AkG>YK(v~_6>{wTr`~4H$ECp4I9OXNA5WYEJ)``)3o@gUf6ID!d-6a;l)`%paz5;k@~@cFd*^CV zAtnS2@W$S-gScq8|G3o&BYNa&AKqp4BW~gnVqOk0XwdV0diOl4ONgmaR*mtO-%}?i zt)HTzGuhH0kPydTv!#=ll?6m6t>JGkfZJ z!_*dsd+^J02!ko(KK%L^jxGyz7%9R4f!6J0;DAx&mJ28ombqWx6`a<8AtxE!B;@EH zm_`u+e-|9g+5YWYxF|Jn-!pR=9lDF&$CHLpxthD2qpKD&&_AG|(=xvC75l*o5Mnx3 z!3Swl6x)a2RC6hchLblph$BLm@xsn4a)|m3XaxO;%V4&VrxtS@*!0E@sr}QZ16^I= zhtG&WEYxT2_Zgn#OU~?V(KhCf{vi~P6Lb0-RMiaJ7bPZe3ST4Pz{J=+rB#urCqs8J zj9|WvB70br971!$;xRgFZhOqj+5f$P!C+@^Z}jpC^Q;CHXln7yr-Y(@{kl&TtwVe5 zz3Rs*6mPS)J_RD;20nbFcp0C-1c6B;;}oJ45TVI9i{Ek>xf;h&oW%!a5!7Z6>*M!D zpBgfND36a@GJ&3fVNT-;Xlmo%g=62xYbCC+^72D7 z#fV|LvmpAfCs_j)Eq;w=4Fea9<(K1$5e6d!cNousSV;fQ{z(w5#O;aOH9xY~hL7j2 z&D|E!bNQ1kd|164z5vzkAq>?EmP;d!FkpOxhT6nn5#or=+BO&DZZ&P7>mYw9xKR2~ zvc@ND!_2^dU+FUlM5glBCL|%pE~J{9^GS2ZeomnWgjzriXnZ#-c%mS6WJmb2!2}ix+fBh4%OaS~$iAfE0%Vo;0lnFZ2$ zsKe&B7pk93-bA?{jrIG1pL7Mr2+TKEsIV3T)hhZ~jF|}~MCpeB7Fj&oa9#|R7N0A! zY6q+|iwC`-bzb6#KlK{|!}|8H3MAx&5j;`b#(E{NxTvTTjRps*gFs$q;!#bXM9`)h zaVx{!ktSXNyJ@)LDA^}5@Nr!HE3Cd9ObrED5S~cjm%l-bjsdlR{;q0?g|YXgIw+Ze z=9+x2#|B^_fFZ80;o0muY6@%<0=I@DW@i&KGjKxA&3Bao_tnB56w|iumWw0icktC0 zh5HTrnpCOfH(nIv=O)T&&};v|r(@Z`+mYB2=Q@l48M@d6`Hi}6Zq9b^7ZJ!Q^si{0 ze0J9@JlwqU$|Jc078Rlx(b*%+^;0VunOJ|S1eM$kuD4Tf!2^z@M|u;+ zz7&-`mSQfa!Dqk-fq9D~4j`}$=V%h z=E{L8Dp3x>AkwgeJsG1`QeO)ezj63RJ%7W4%A$saX~Yuma7w~}yGyKfn4JQsV)Sb4RpZN=VK0> z%%t?^?Owfb2`4fMehW!xhv=UbSR!CNXy zzB8m(U@_vDgUuD;8@D`aYBVXDz*};y!eu#VpUs6CY ztU($OzYI3!7{SbB6V82I6PD??Qj81M#B0Jbmn}hgeQNYlFeCbXC-aR%%R-mi$+(HE z-bpK5bs55{QXDb92KZMGWMXk{Rs5^q;5mDW|E|k${3gXFRe07cQ(HeYi4h#j3ij(j z86guPc*KTN;yHVmfLz_!K{nnuCR4SmY>}Q79lo=Yjp^p3%Cm#{4ZRe3?!^3fs1NTG zDHzU(j{N$#exP3i{NdGeH>2>oNRy8^)+BQP<|w)PKIb2iwAsW?zonet4kQWkCv9!W+f?TgyOGh-2K!>lJ~BkoZ>;F z@_h+UvLE>MX5{WIaRf`CA0n{<(Oy~!sBpeu6s!3x+&d$NOCD?XNT-UuQ|DW2pTlTW{zaNgJ(Uw(7O2CNmpf4 zFvc^_9%kY?SfDPBFo =JxmNIXXGTW(a}GAO79zwd}ZzCEb8!L)t4>IMAOHODAl@ z`4{t_^5MgQ5EIbhs^6G{uTJ&u=W}bvidS(_n(zU1uQ+0OVzb?uZaHF%?GwN4kGsRT zId3~}54`cZ%7rHR`F?Njx9NVzw(fEesL0{(1m$c4)f%aq9Gw%7ZB;W)| z`XA)IZgRM=U+NlAOy2AY9UHqyyfHd@O-8!Tz@X=_0xJbPXCnu*b_4S$p0s=Fy`PSKlg@p&cekJbd z>l+*&XPKyV54N+jd*<)|_&IfL;E}9FgHIGU4-XJRzv@6D)$lXTKRyjmr5j+-CRo>MSoVX723xh@Oo8{;df>!=a%e)u^bb zApojwZ*Lo!nDC6;1%RWTx3`3`v9Z3bEtj#8k)EGloo{b0Svo*o{&a&jr3KY!*G7mpPa6XO*U(q<8R_u+$bXJ=god>9i7?5#d}m#R8L)9 zbrVIv+;VbqpR1~J0aX06J%VAW?|8LOb;DTmLd)T?FdM=eu{*_xK9WP2%cGqDYiHY! zi!TBc2lnGHoNB1HkAV;T!&9{wx!bwRgm`iV@4;GxY539vfP?AXsc5Xb9c&LvrKAgb zGC>F>Mwnm#n(qV_7qMOH`u33?*R>{Glq>Bvb2E;4D^IHF{!j|~&`#gguiH%3o#Fk8 zRL~zOHTNX{gE6%5a!ue$jq1^k>q&J1q!GiKJ-OEl3HL`eOmZzl0v8~Qkf2?N+R-HT zD7^rEa)f5sCJWji%Rb(qKG7RuKl;i3b|0g3Y~#P%fEEgGV@72hc4mb6W1(n)W!;l4 zT{ZWqgFi|qp87#Jh9Hh*k&{gkwI*x;_UiWWZZmj@OmTxqpZ#!(Y)OTE|6Kuf5WX#2 zar1pl*#4r1692Ld`$1AcOwb`FTM_qGx1UF8@4o(_v`4`HU^UajWh0e&&q@;U%yA;xYH0(Q;C zcw!OMBOs!DcTD!-gy%e{gc;bfUB6$6oLDw*<%+!R-)>_+*7Lf&C%HcL^(drSpNVV| z3tNzz@mbGl@ZVpmZ_)q)2lvp4Xn3g!%N|c$#1x=OD^pi>qY*eDXr*lS$t#cRQh~rk zWcDHy5FO$O=gmmC?lT&$xrfYNFvCAi-<9M$pCVD6oO;i_F1MN#b>%5~;3$S5u$~_L zraBqodufHuR0|_II-SFR_9yZi6_~0Sz#GY97=a@Vaq-IR2x`#CCBPNgYPTjfM6(1+ zuWnvDH;$H`^;ocE^`(=yoLQU^o`+J)VVDz|8X6$Y`>nAedVzx_i+I`n`_m>xdVCwn z{@@AOO5vkvIK{ z69D+p&OdRiA0KBefNQV65^?pycV5*s^jyg7j1~!t>ah$<oowLoaL9L1LwBQPn}*_g2*Ic>B-sm#GhTa13dLXxRd-gt-Y%9L;@T8JV> z`wCADPE*`=-0Hc%+Ukb4n-5wXGd3cjO0Be?w20q~bhXD`R=~{;-tL^R(Z|^sr&}0-S6C(sj}cNZ;8`PO3+!O= z(QsGO53LI(sFlQtf;!j7UQoY8*WFPXiw~CbZ35=Y4H z)6Na69a7j`m|DHdMR&=1D=XJi&kJgEb@1B-7ZZ5T`^w^c>6TYWmRd|V+2fmeIqXgy zi6V`&l>9_3^@JQs2?u^t5S!S1XuBr?Vm*2BghHoKaUjywzlZi{m5xVKxVZ?uoC$;k zy(^iNK8XEjV6Fk%pV_%+y$p2LYLjq6E=_m+wlP~XPQn08l0_7gMazA&H(_4I%}sUJ zcoKdEvoag&CvLJ^P>)hD1g=0fRaP7^BoqRs0>Z_k9bmPP{gFvH<5$3LM=O}I8i^yK zh1qW4i)v)?nlSug<#`8>4oI^CqVdvesd&%}Zvv!$q_Qz5MAFzxd8ah9 z+>|2bZD=}fP7|J%hdtT~QOGhXTnOR|F%zB799zEr3ciTfSzW>>0C1`t z^w|z$BTHRiB$K8M8tA7LH#hWV{#1w2tVpL#evq)}%1GS2L=hLtEEfa*j@(Ho<* zKXG%EV-)bA2yjF$=m#r$5pTp_`V0U-5>-ek4!$TLV2zQ$j7!!?o{`Q zQP+VN(F1qy-OT>2HvxbnW${R#zFgb6 zS-Q)9i;Q550%G~}->yh3u<^+KUfV9)!{QYXEHD`mgM`jC0B4C8U3`^quQ!vmgYU>o zGzi#@>x_ou9+Kr^Y`MzcUjRb<=5QxQ#`Cv{9~|-RWi%$>9h=$xP>rXO{E<+ zbln~)E;w3OnFMs_Y!Oes9*#91r5rN7;81*(TqCDC=glgOSz$FRqmDVCbM*)lSj;JT zY>}9V`WO#^ht0%}r5;_~!gjNQ73+G0Zs`Y&g+vGs6(r-fFHQz9_w6J|Mh#r;L#Toe zH-nAzCW@8nN{uNRbrtf>^mo2&IU&E_*aoB5@C3~vF3CUxM+S-rsl5m^L)Yur7? zve&;#dLvQeY-lyn`EpJw_>>TJW8bbc6!vHHPy72(5a{AxTr(mJ&kSok_i5)NZUP9& zCve8V@;q3>8SA(RBzF16xK>G5o7S|Ud}Blyup1JSm|_6=u$euV#uUqa_QiHO2OC_{ zUUD3r8nvG2bZ!VWWho!Fa)9=+p-K4;H&fyM9VWk)-QpP0znDE|u&YBuafhp*7gc|= zZ?CGxe*eBfrols@RV*%t>4w7E3xWw**J4V9*1mq|jY8=y0F!NJnNT#CkK>G$PcyU^ zfp~o*{?xI5EyJ;aEf$*!v3MV?_AC1?!Abg76Eto( zbkgj$5L`@r7&p;W>#XqukY8K)-9-RVxO#Yq&CSk!@4E;hGFiuK zz692A&P5~tdv@+YSBO`#<*JAMdlF>+>WxcXqP+`)^e$m4HB0XT>2m*viUETv{y8aVn`s zuAbdo*zh{e`PouVX6EIJl$xq4qeEiZN-?1S z-b(AZ(gK&uV@&e$@&yRQ-9S|k=*!E$tI^*(FhDcMK>yPgO18OmAtx!4g5Rad{R<&Y zEd-5m#ctfRwOfe&^of&{l+@77Eai|K^xxu@!ldEY_<-`=)~p#~c;<$$rtq`u&EDLr zefV?~8~SB&rIG1lHKLcTUP}X9np(QZiz1*@*)usVC8wq3ei#q~WX#3P%uGQZk^6ep zk>4fx)+(@@ogP79X7w7pa?P&~&%OGF&RtA06>V;4Y7#nG2d2z$CeGC#KYr-h+R}x* zeiNaTQnqeM%M`2J=~rbmbgMoHX;L&ej*;`S*l%1r7iZ`j^7WH-=j3F1YHBL43|G9Y ztn4!z8tcYXv#ud%XpP7H<~607jtlux)}ZNMul8f$In!N*bh zf@Xk{PxO{J>IhPMSBGd^L_ zInfh;7!bfKEScP;srAg)*EGNm6xix0;=wd7z^cZDekAM?gSev#G_8z{vrDv}{FNYYMZ{Sy)#2 z_;24Ku}F4QG`b`;Z)j~4hL19OINtnn#S++n1ggdIcrdoNmn!!r&xgCiJ zDJeJYUsk?8yR3Pz>jNVaF68Uvi{(6pjYH2UHvZ%im~G;%kM8~*rMF9KO-{iJWn$Qa z^Cm+49Q>~b3}ff|&fAmzyBi4_P~Qk$SktGWr_YA7N8UJnZ#@><-rnxapzHlh{xdD| zynyJue<3b|$wsW)@sR{+CoK~TZ_q<&$}^Gn%HuZ?7RNc10d(ALMF~~nzwRZjJwGjk zue$v{WeT>kR3p};A=LzzWcK+`))YV=adO8$!zVm027*Eo*OlRA)4;_4S zCh;G^u6F|!=WePcT`bJkH}<;_ca8o3aDkoO-Ppv?V!{RJ7-w`ZZEye23y64ncuB`n zj=OA`UunLpc>7%M`Tq*pL{p1b_IArt)8WrzG&guT6^xHd+~@)M38F?u=(TlqBZB;# z935$bOe#G+ct!a>W@mrmyLmH`n3$Nrc7VZPok&#T;o%YAE#9QBUpaXtC8G@n2MRJX zUlbJ;6*M)ascUFBSXsSXpKKBcq6dMxy@gwMM@r3RmuDXIgueXQOMfPsk*Iq-$hu*2yDU` zBq=Qb$b2EV`F&!%MV21l?C;;d!(Xg0U(}MV4PfkOM^*U=Ns6w0PX|lP?OwD{n_R1zru~LP)MaNFe+2_k#`=^G^U($9S*x2HZ zx;LySt!5lG5oc(6x8efd>>7sW7*ShSXK3INzIdyzr>7Gv1Q>qlnyGI7F8I6RN=^$b zuPEb_7{l&hW7;Xq{W_UPXIs`yas-7^(~y!Be))WD^?T>9c;y>c`9$-R!l-=4i4^ih3(jvZc3tBKjLRLMJaRWBLV1EiD!& zhC(f`!0aU*jEagY&9XaOp8v#;(?{vR4OI?6whM^{_e@Cu5xD<& zg-kqUgXJ;u9rg;NvzZNsZ-3D@RgK#^I;5GKowsJY2GR*>0E|F$zb65=udWKx(b2!l z4{fN`ldjUCnuWvIrauG7x!yr;>OOAkvHb4X}nT$5!^gHb1`rJ5E#B56B84& z43|}Pgk5MqK2{D9k}5EwXtX_5MmqiFXt)cZ1V)zy0Hk6p0e2~28eEY8)B@m*`S{wL zm=p#8_!f%*QZ*O_K1R`~xk%RvnWOKyFVXCu;vdS*D5~~FQLFzO){)1@WxR*`hDDsCLqMo{M?Noy=tp5N;(@ofbRgS*WB1!pQQFq5 zkDffGupQPmxVw@~j<|7HB#X%HUjA*VlATAFyfyg21r;3Z`Qsjmvhjjyw ziD=o_gsB!lAZe<9pk_m90{M;WLuD~p`<#SfV0SjHf1>Kzn@L-7R`jPHLU<0Ih{W!^ zw}aJ5ZwUkFnNt}{f$E?tby?T5axcU~zcXJ4fuhf9y>7P@8(V+1M-g*=;48LD@JM0c z)1^S{mDck=AB@LE!pWO8ktY127=d^zeAT!DA~YQrk7V_cL)7GMKvN#d9BK~B-BMOm zRE$eaeK0mQw)u$yRsv*7hAYbviKJneG| zJ#T2SUuz}?IwFop_oOty2g?~6l4xJ)7q?b?WKC4`gK@as|-r+!@ga^NJU0gN<} zTF+d;yF6d(&!Y`wPBCjo_qDd(-P0!njjoKgCdQD>Q_B~JM@Q3JfDM5we|`T^1DNuY zf`XjL)CqaMLRh5ODMiVI1Z<3iKsrp;@yW@!VF)bd76w3q%Se{>GzG-G9c-8t-D3uM zrd9N&!|rocRl7qv=*dV$F!oVfL0c1GKcARrX$k!LZIM?y6Q~K#V3@FMix!EIOT_|W z_>4?!`(J5H@g_ze^7DC0OG`WdR~l3A_6n*!BQflUI^UMC-uX~VzKvyN?5|$@q%IVu z-Gg_Ttk*I#a7H7vYI3^1|Hv5~mEQXZ0*!{8;Zocm>g>!~dClS!;O@d#0-5K%r%j4J z_2R8#;CqZ<+wqqT2$sNe#KdlC=RvFg&}`4PKmL3~e+suU*5&_9X0oz})nNqc5poa* zFRurO0dp(*AQ0^t-Ny%}FL)yJwreHNhzd~@jh#GAa<%=ybJO|^1O;KPX!0))_2Kj4 zyasHPd|!n#@u+Sn06V@;0TCk6w3RCo6wl^6MWjzOec#Rw)(44!`*%QAs!wn1Tu4Dd z!6!_`NewEe{Fi1Fm5D#(G}z8U)nbaI6g;J!@NqcymthlI>2muHhwODqZJy!tVFU|;bkZjHqv$38viQIL|-!Cv=} z9OC9zcvNu8v5%YvBmgOOLsBiMp((au5l@(P zLvAEegbbY~2PypgIs67E=bSzH-@z{jQX`ZOr>U2MPIiOlP@s#pb_?MxNd|JR)fj?; zD`1>f=y-^ygA}%SbB&`Jf8Z5Q1nhCu?23Cg=&FAt13T+H`o5;XS~fB_Q7f6JFvs=- z;vkrZuedSATD*8EUkUnl*?&Pzfukw)ouP9-u5>Lm+cj`ORI{^KR1RY{CdwUd4;wpg zw-~DA7haUSUrNK{-gpTqOp2wrHi5YG6vJ3!-yv1%7>PKJ(%`#QG4ovO?`UCtxt{krB_jcyVoSCL!VOf!vidcrmv-?c%EXoZrI70~nmsIBu@L8w%S6 z>~p!3e+SAf1};X3IQVu4zJD)}-eCiQfW7CfL&b+eSY@ZwjkFJr z^SpIFE*ZcM0elUh0yjyg*zeyR?G&+WM((zw%omZm&G$@XUGyG1@F*M%s1+@ye$p%q z-24$i8~cdsD>f)_>26oqVqSf^jOg+d-G^HHj>Lv0@ZqLOVL>(EGsZ$07MB(*vs=QR z{>1h0me5U1t`|obke31WS>_P2>14)~WKO@mDk7{G_$ZAwaAi?o;9#icQkZ+_0=V{$ zzI);PDUFE^2nXuc$D6c((DNDu1On{s$Po){Po#Ud`6OUZqMVyR)Y6*w^FJ_n=FiEc z)k<(!KKhdmI!?mT}7=8haz{ zVez{digzl&5`5X}>#t!O@%9oq?0RTEo?vLsQ{R;Jv%%)lDUFFknWDaHZAXVKAAvMM z1Lh7M2j%17cavl^GTu6Y%? zCflt9?ig|cQ~VlD;r_g0dA3?{ZnioW7}sytj$O-9Ov4zCtEiwLlW=B^@f^sB;3?|a zgR%4Td5Z=ip`qP1FC_NI7ZiDp7Z(0xoE)YrVZ_D7pE^N40&5#1K}cpBg-&41gh?%h zw>zEdG2zBMHEDovkgn5yJvqS$t{A>c(YQOn2DU&Zsv>I|@gJUw&0Pal%q|gcY;4?;sq+utn+&#x?PBpBI2arkDUx{i zKZJMw$!RA?0=dQ*i<=n4#fQrwR18n)@Ac6ls4Q88)>s3ffySu?S2*Nw_=DRDEeUXW&58> zdt)VhEA@jB6k;v`c3WT3d-1q;N_e&f?Hz*XqTV+2UST!+1ERvnNfUU5Xd zduXs7tY-}ufBcDAYX1Ak$iw4xs=xHfT(6FGGEPp;nZ5~orGrOTHr&)|y)ivhSYM>v zmQ~`3+SCL#uqNqf9gF3$hp>yHp_AeWk*4(0=jI-Lxg@-4=XZKbaZ+mPO(@xdN-sVcje+(@ z!do@P3%^CejaULHnYh1cR(}7YS%FN95gZ92Y#^-(+%|;{tsJbbQRTyfUVPpxDs1YM zi{$Emw-hk)CM?#ToYzgwg?pMWk@6Eua)`x%Wk4ixbV& z_{0(8+uIkk#TN0KOU|14I|oXE;eprV>!IE8kIeI_n;N@oJfA&W#q|i4js6I|;@;(m)Gn9(y$~%Uv=k4acp8Wqi_v#p@CL%A z;R4LTzO7UMff4nti+Mk1s-a={WkZwv@)R>m(}I(J(S~Ld0pY`G0(*M#>982rhYzc3 z-_iW#ZV|$VwY9bE6*(y>9yD?0Rl2Jh#}#S|ikM>b@^#_oV-uJZ<4JAw(R8fQq>r`| zCdF)6rCOM1Uo`Z0FW>%TOnT1OWXmH!HHPyuppU#@%_pCD3Q7>VfUDgoeKtE)OxYBG z(YmqqP-3^ZgT)JQ98JN%+AY)}QGI@K>h`;Q@aRV@ z&U-Tk1u;DNqeTrE$V4!D?ReAqqe=a@hoR5;4mVf2#v)ftB+INjYHZzJro(o)+?gRT zt>yg!qaxRU1<{||#t@iaM-Alp{YY6D5X49%;f$+g!=}c52LYOVP8Ok&hD!sRURGL_ zl$89B-|1p{g*`d!JJHkAdw0n6f~t?`kJJ$UbH!iMMo%A}%{c~M8AKeCZya8Rb&5VV z*jUR(<$?!u!Fyk;BXkJ=pM=D?dM|kYToNi+pO{#Fa%;K#Ztix#)_{ofck%1t!oM4q zUIF-`^!f6q(KvaJZHnJ(_#(Uim@z?nm>(zQJe26gKROYZNpXm{#q^mkEolcGt5wJD zEP#l-2`9%u^X_C88^hiNLJ!>BgKmt)H^$Y{xQ4umB{1rgjSa5xylTc8rvPA|PqCYe zAGUx^?l<1rE}(}dI2DOsIE6L^1Q8LD^@9ti;g0R4)i{|(n_mAc=UCi3iR79>Lf;Xqnt-CN`7rLWj% z9sBBr;di-P;i(Gewoeb=+}PSAWD)FPGFy&S$eQLLkOtkk7i@neFLH8xyoNs34!qRz zE-{9klqVi5j)BTTVGt2Fv-hvy8H!abHdj*A?;w)jq zZ!}l@FX^~67@#%4`&}lvpwyD)mL4^VR!wA$r*8t{&v%;{MLcTq{jat@d>4l5@ejPZ zs;YslZSMbIRIDs7-yq{L(JZX9^64;HQ6S)@i`BCCPT3KccJZ6;?K9u4{W?&yoz4bp zY>!Ih>YR6LXS64loDHUom4R><-s|#KEFGr+S3t0)SrDkVfK%G6JO>(~`U~dn(9&Pg ze);oJXcBH>45zRh>8ch}gc-|U0d~)Xg+t!T4zP6b8{OiF(oaqRfF*BM7e_R-n$!^Z zC9Jgh)$SV;6Bs$!?rDf8V6qTAHSQb6U*W$P(Vu`o0a2xro}NB5FmU64;YDPB{K$yw zkr2!8vEIS+izD)?Ws?Yn(*}-EO914OT6!ZPzRl6_zz&mPT>RH{tJCvNgcA2E-lIl} zM=Ehb*6cAzpb0`W;W1s6gPgPRk(*bGD{ z7I=xj(MuyC;-i~3LE+|P0rW__gRicxj%{jE5E2&d>N^j5L3KtoFtIk^-y=~2plhA< zR&oYT;Wr!l9Dr6>!AD7L9I}Y>pQxDn@W6KYVh4jq>k3Spb9UAa6fk81mUj@Z zETA}kHfP&sKCq4ZKGj8B} zfAG-9&wOv59t#{M*}<~`IB1IvJ+dSG^IBm+%L5S*OLY5rG~w89v zO%ZVs5fv3hCd|GNF^)gk34QZs)~to*I-Zz?4cvB_hUxCQWgsoMU$~Eu?Wto#e-NOX z34Q2}TgNklTJ%lLH(1%(8D9E$c^M(v8+Uem>S24IYpt0C&k^_;#>S{{6^2(gV)-iV z%t_Fd$+#v4Krel^J^FJeC?C1n;YN`J1Zx=JKnbDSL5fqJ}y_u0B= z_~3ct;;Y2CgyhDNbD$|{L2mr!&YP*JClx)@1+`dFhQZIJ`Rs*mshGH}DCX=qXyZ zEIN7t<~NzR5IB7Zi1}HB6vI=yg%44sLVkPa^&j|?(p5chlEgqKp|A$B4n9t~jMUV$ z_U8Rz6l!p7tY!|a0D4i~s{q)_Z;dZf;Vz1NlN&7z9n+?mKfzO!Zn7>D^=dsmJ+v%L z!U*?+P*p=^olEieIPjT_V68FC*e@j=nLVyq%!&x&B;WpN|M%}Vi+;bxsMBc{)-BROzYWUddT>R}QHaN!V*0LKARJ`n@b6mWZ zefYsKT>Bn}uC6OCnEU#zcN7uf1k%897ZIp;vW^6dco8M?R9rFIRG_P(QRCyO74CTf(fB!1#9F$CPC|aUg>{a=bD}>j!Y71^9Is)q`M-ZZ?&|D`S9V|l z(A~Sr%7{_sA4=r4z9Gp?!JIO(GO@8+lENAq_Vv$QMIJ`*VeRehHP+eKW=5xSW}mu$ zc&w!rF{=7f`y%K`C!wZK*U%W5N?k1N+;vejT0&8d&`c%0r$^iUMMo5~)H6rNaBd!+ zc10^;glUqLmYeVV8)EQNGLRcwc5td2dHK%>sbT`Y#0vt6kg$LJJnBU-2ccQei(J{t zsfOBG-h>ZQ5)z#?scG5SH!66pdD`VupV1ONl7Q3aws&^&R#%_zB~-R+F#ZYgva+(0 z9>K@`yGHDk(}gU<3+TGKI$%AR{;>@FHvq>}og{kBcKnsD(yPILBn+cq5wL0Au=}^i z)0C^e`E!pfpV({v`_khLg(yr|m4S%~#7VbX5CfZuBXOQ;E{765!^bGx59) z#*U06NM8{W5z$4=P3ETFLNXv)ao5izqrWl783tg_z9VVtQeGs}pCWN-wzI49P#{7= zLS~ni{J>FUyf(~$kp`sqj~f%s3fp^C-km5iczDpsF*BJ{A0|0M3S;qBv-_wpst zUey6L1a@?EG>4ihKbsz_9NxvnrAuU@xqNzh@t zQ^%qIm=m&ytgNh=C*)Ku)bblG>HF)DW-US*42nf4VaA#o8w>LDHO3L_+sM{m{|Fy; zt%+@mce9LJv4mzX&FXOyu%3VX|FBKI(L5kICGda3^D2Q`A_X&t7^Dqe*zR3CG>IBp=z z*m5CpPcql0I8vT>!fZQ$-H5!!{@g#k1~9<4&F`<26%bD%&j|=XN`d{wV}9OT30sm6aJ=#9D8f z+$NOhzg?RWoB{*W&!0bEkd^h4f`XDyl<%Xma@+Uru}~n4>g?!HKhztAKX-QS{Pin@ z(2GG{{*{4&LHmUiZEfw_^70QNA|f{J&wAY+iF}-4Xo|>Z0YZF)D}gQ-M*x+eLy0y)vNcXg}5q8&=5IHr=Rwzdq}bI zj?lTvp;3kV5~Xckxn&U)Ww-VGUHIC0><#Yu($+zJ-?H=j`1sJ$(mr_f=-1Hr_=Ca0 z!A%oVklVjb1q;E!E(A8ChU$C3HUE;6{t)DLQ;lcAQ2oAmyhMyXW{OFIs?=a`gGoYb zSnRWUsXq5u$KW?P zOzD%f5@MXgTj#5GwDlf&Q|8*u8@fG{{$+u9u(Lx&%gn6d?d^SAT%0p#7zDEa$3yiw zPe#V4ARduwVZO9!3#Fil`GhagY$7@qs-Gzrb?!Mk zuCabP{Gdq@6Uo8MY__?zmECvn`f5Ryc7WkSyfy$kc` zYaAXIeatn>W*YP7iUR6d)$|zs}j<8Z!lujGU^(x z%b{)_$I)4!+1B@k*`XaZ!>XsHTrXIz?Ce=O-L}I-Y5mC%Za4&OW`J)}qcjlGB&yB* zWU|V%v$2%}K!QDeVi3Wvomv%KWOVe0jG)VYz6XY|Kmj_fQWx&pH@|9WxS5M6OpbV$=xg>|^ z<~~h1QY&G)Z2=HKfiM^y_K(57Bpkbd=ukCvu!75mFIil=7!wgYeS?$J!OH4x;B6uh z)foj}I<+H@8+S=su;QIZG6SzkQDZ{;IavZRKpR4+eK{2Y7p})ZHx&?s^8*lA?o2c` zoECJrES7%cq0ddfSFLR#E@+K@rRYgE(p8Y~+UtflYr{|mo zGw6xPKQ@T_h0a;l%Q{Qjo^ij*uakjuG0=@jc-1;?LJk9kLdLBkkgPtc8*|BK=G;Li zpsqfVckJFEkjmM_cLxfv5^hLtQaqVniLvh3#R&=RZJyS}p zI^ZyehKIS7fM`he-wBh$p7`cY^#yMO|D#v5{tP>SzKCKX6cA*6c$e^gXkxW1I@ipg z3gY!4EsYhxZk>JS|DE-Dl9-=JP0B-S_;^A-ceu~+JOcz4bNXfIE}jVj^Pb*~rVYg2 z1D=w$=QyK@{*fp^X^n?BHaDsBjbyg+BKn=OPiMP3$p*$SqJ`=(P^Sgq34~`N?C22i z+;;;Xf?9r`9U=*{v$yx=q#_NdpAv|tfyK!GTW}Kv%)wW9np&Yf4D8<%Vt$Us#~!wg zp&DO{Z-Xo1+2l{j3I0x?@D6YuPrT*kZIM^zBGspCkFq!6!rVju4w+It$JG6xvSKvIE801uH93_ z3ftpaTghoD2u#XDJuUQyudbeG!o4KYal_uQw?6CRxwUv-em=hU8LXgkyMMeADVOof zXj2<4b>7^E6o@L%eMYbaYIlkeEC-j~KfWrWr_=T$T>+tV5-)zF%WmejvIx>)g{>xbrTg9%hUcL$trcit zA>^?aOgzGId*Vsi>Wu79T&d&wCy}7J;u*=~s_I(3cEX9S0nm~M-LGn~2-pkibewist>(#gKj#hF-+t}PUN9R<*+nHp0cANy zC*2!XaN&?RA{)b;xq?RsHm%Yp@!G*Af@zk%s+klKPIDfwa)oyn(TgK4{2JbRz2$Fn z(n#La6$uBMeptj;Qwb%d;d%s%1|cw&Y=iF|lNLYlzolypO&^3W;@@aB|CXsA+}Nh` zUk{-)^3Ao3l%Y*T4ff@tkoFJNkTtoUdatdH6%vdkn7m+^*n##n0vknJr;q&>q4^f1 z1F%m6L9|z{+yz3R|8=&B4eGAGZOnv2BM8zbiNT-5L+on|JbF?U57&F~fYlG!7>?I9 zuOn~bGr$8%(X`5{OK36E<(mAf^7JHF!506OYjtBOofDRPpu{Sj<%T9rca#*o2$_jV zNj1~fRS+OWw}u4l;)@y(iK`R9%GBiOH1{fI3CTA|3gDJ9MumA z!r!zt@k;qfU^U^j`Ae2^u_yTZMc8z)MLZ(#R}?X4Y@w6adqUe2eFYn>qG;?o8+d(x zb0J`zfuW$(_0?I2pO)E&WZuZ#u9v5DL=Pmy(^KoPB_$&xk* z*Vi|lK(eGE?Xy>tZ`L>MN5hRYCJ3`M`GqM?$6eAc%se@s{}gAU#PQWt^M3x~x_X{* zc(h22tQ#t^&Gms@JS_~I^LfN+%a9M$?9plb+&iqVEYB5oAX>Cs>(Y;NW=mpV1y3$# zdcpQ)Bqvu}#1Uy88*|YjWax~eL)!o(s-sogE5PrQilsvuIYQx6ZtdVbP>Bs$nss5KWD{)Ynfd$s?0zM8&Bq^33RTO-)i7F)SIf;m zsYNC(K>d16>Rh?D_{9---`7VA$K1w~sNJ95CEnH+)L-Zq3^=fwP_=lK8ivNk zG>(stPrC(?|83C#fkMs9XXjT|1kl904I3M7xYXt~XV43_iT-M)!D_Ox7j6fhd;0>$si4l@q z#`Bx8#{E4BO5m>iz?Z?%w0(3Zx&k0m9>T7xA_bH71qDu1f-}(vP3WsH7j=(kbr%W! ze2!L{kBbX}_7a1xZ1<6Pr)qt%}?71{r*tJo8jjaQKwB%ut6sWYPf_5LJtz! zZH6EmL-z4u---E9#?h~gw=<$dWq`SF%EpWO_dzE)!`p762t7<9_CG1@bLt1-LxXsi zsgI|qRgaFbCkWrjI^T}u6+-_O)ut5-EX{T=1YtNNH;JR#Uqc@|>$B+8O&;&mM9j2w zZKpKvrDRX;kJN3BCKsADaade?qOjfv@+NyA zqO<^SCj|rRD2^b&2Jls2jW#6K@tV2GIA9Ma7DoTY3>JhoDWf%*24D~Ph$HfL@g5WP z0cMB&fK!V-nJ0cxMTqGiIc*qYdchAL(#y!mylsBMAYz%Ll_>l+_S5R>>NlmT-(zF3 z!NKQbWM#v5J$-z*85kHmyuG=kq@*fDzYY$@Ha0eX9~(=7!C>F+g=A!8B`rCq80Pj(=}UxA-LJp0opK5p(e);2bL!otxr7z}|rMRWBkA0OXa z0|NtI2?=BKjkak8PR?L4aq)IkMp~LSFtWIm6fHkLzqpJHUBJj2nVQ~HQ&XEE9~~Gl z;1>|M+6TNRLug<`=woDTtnckDL1=E|>|81>oryrCGchrJGu{TGK5Mw6laoMIRh2#z z+OU`a@$oS*F-bI~Lk$k9G&MC1p->ux7QVM`U1uAcp0=uxeD39C1pC9p%=`(5b5Bl6 z%IxgCU+=TVWYHX$mY0|J%-=uR&d%xj(`6A`BGkfCn6#u+pM{<@qvJVK(S#kh$dQS;sDW`64S8U%GLwdDjB>IaH(_ zY=N(0MpofC7Myg^sbhP*SSNd|y8(7ChtSKyWEIvabWnFPzaQyM!I3v0%SzYsJRHW2!?AR)<+xb*=428Sz13HsZyXT!OYg6q6(N3^wLUsT2+RwRU&}`ht1GlgZfYo;#Ba<&GE`7Oh;*`c;L83EBuLZhk@G$yI>$q?41Yzxkj?}E z;%oIli~!#4e-NG+IL8RqX!dpYNGVi6s6}0!S)2*)m5GJI;9o4RBI!MmiS`7NM-+f! zDm}#+C4+CoZi^$DF!fi*@jLcGfiDL<;j4Z@!c>3}6Dljn&uDgg$!%xSd6%LkZxYox ztfE9{b*LIl2&mAqfWKK{M9<7vi?&e_*nxj3tRiVVC^~bR) z=)g$+F*tS&&*s@7b(3E$b@bt&*qv&s_1nJAzkWnwg_vsnRahRCkf7UEaSBV3B4AJ# zgAwtI?Y}+iUP)lqXnc04)Ws2=w1)CGh(#a)LGC|O8m-IvPj>q`x!Y1oO;S4<(W9@Z zx{4S-Wt?<<%>K-@n3#C9WyZR>j9fYiG=z{;)YZHFRQrKXsL~k_V6a$<*D9l>jn$SE zKDM)mnVn}?EVL)|vw&Mxdf#B^yHmg6WLD&|&cjS5wMiLG?}=DuM86X7wjR&Q3V89E zvJ23FBR2qjc!?t%xOeevw=oT$Kl2Ap;kcZFu zIYgp7X7QIv>VsbVd2Xg?*$p-{_+D$GT+4-!H129bq^UtT@X|r(nI|P&{1{PN8oCT! zXnz>G+`D2O|FMt}y)&)mzh9TgSDKlS?4Q51-R&|YQ-6|>p%^^d&gfW7D;)b7}mh{hV_Bv z5;%4lh^c!VA4|8saz2NR^Z;94RYas;)5`4y`?vr8dIG!DO1 zAqXRD_m@c;Z*icy7c73ylB#KG*k&s{Eh7o%y%7b(@asE@`%OH&guS*(F#Z6RPOOo= zIcwA%YO>mkxAdXR%>He86bbk6NEyHZUhB4eowNE9z8*lRQNe;htl;`UnJL~_av&8( zFdE&(%zTP`+FnpOXz0?19$S9l(wuK`UXRg@oFS8>{7nXY9W3KH{bNef%DM_i7blX; zZYSZ^ufp+9RoIzL_o38STp}T6tHXY(eU-}Gv4kVW9#niQiV2=F@lIX`!lvP z5RYxLq4oJTEYl`vpfKcV7x}Sle62MmcC7ZBdwXaS&f?cQ4OaYD$wHTKZ@YR-xK!@% zdT&S{8+xQ#a&u!Nv!QW>2vl;GAHB1nsm4_YC0%?4H`3hbd6ty_0D#}dRAi^A1ws=o zaADk(fGlEvs^Pguj7Y|KNBf_qJiz1=I^&kTRX{8QyKAb0nKg13zoRpmqsVpG)e3P7 zZ^OPJM>I^EP$3KmNB8h^QvzSHG@%4$a^3tlO>r5#X4Us;6MjQ+!e;j-B&n9aV)uKr zfiN&PI+|+l(SO?&kJ4SE)x0Yzb6y+)l|?M~|HT*yUV;&XxTXd*#D-?#+u&yfdlEA0 z?llA-&F!seh4PJoyCZ?9A$c9YT;Fs6fw}(tVsxGrt+Gn!*SmtBymFdWzT%H%TE%H= z>E_SI(eC{M5&ADhao~wplRtjE!bv^Nc&W%e)GvT=X7%pjdP?;jlHAr^UUupy*DC7 z2+3f95X)5phZEZ$zsZj?wKfp}v7A3EAGqxw9CWs}zI~NFNS%snXF~&F^B*lKLZ!4Z z0QStSI?Bc7xc)w+Ba&U0?($plRl>FZ=@hld$ z@h)2&Hzi{|QtbNNJ4}i&y?9OU-{J_AeIl<6R}>2iO97!l%@znmMSWIAl=t-Xq-AB+ zrHbyQjkm1G$2hG)VOm}M-$zCg2E@fq>2E_IQ1rh;v0@4e3bSh%4FVf1#Skz^rH~j` zHScqEP+vV$Q|YM4$nP;UpcdSjq5bl6Xy_)XqVAO!He$td(eOG(@E|L?4NwkXAAelO zrysMSf8}cP3&A<4mv-4NU%O{vVX^s%8002)mcDkz2^PnIK{B#+da4FQbHh>CLBjH3 z_ttT1>~%VfzxHOnTdi;SKp@>Q#Gn_FXKI>nr_a%Q(7+h% z=#W^v@ra?@vm|^|Zf@=%fqB+&9@J0&uZ~$-a*wE{DEaX4+|o?07VR~9t+#bmM!#jf z`&MzR*Bb6}&3V(ZF$x8ehr9_fw6WoIe*XM>vli&Z;MsvkX}QYEN+W&!`!DZu%%s%i z>w?s{=k?SbnByTo*!(+ozW}x^rpM4WKrT0D;ayD(9RHZ}#*M=2vS`AeCO}^TwJe=2 zXezZOZur-)`%8=;XP4%L5OocHzJ||?Xxi;9v&O@Pi=Ji3J~>ntFbgX%{?4HvRG?(Gu21roDsfU1(?`{*9}X zy#|{lg7zAd_Ivjw+6+rohrQuA!x3e*;R&OWTX*7xIE@As)xFcM8lgn*RD) zdxDJ~qO?Qeh2kuXwD}&X(WWHna9HUN1o+2BMMdFR#)s!HuZxR{p85J-y~M3)()@n$3$LYJFUvC`jE5AHV8CsCcWix{kgEVIOEe8!+p?pN z!tB30-@o8)6rcEnaA$90Tm5&m)qQ7>4v@&Ev5B!h?CCo~x1jh88a0_;k2dXXD* zs#{7yK|4{{B6|(zAA8q$Wz!3ib$lGSSDEqek4!b$dwRwuBqlC(L^0o%kWh<_jlC@@ z%CY>r%4vpd_V7@?w5)7^@W%yXh+jZ0Oz+(qrcFK8tXwY=^niHAE3NFEMJc9iRHfq% zg{7srtEuMU(QmoHNe?y{z)X5P$!-rP*I9B0hLZfgwT?Rl!!E`0RjmSdVtUq2qE8fq2A9u&-2a9yZ-ghtTnSfmi0Py z@3ZSU`|R`C{m8+SH+SR~52h$;RRkPW)kLR7yB$4@4RgbMxoS~$(A3*1{o~^;6D4K( zNwz9_o{`k|)1e9NiUnu?4u!fXZ<2eJI0IE$ynM}b9DCUF19P`r-Xc=2dM8r%x4LOuxowEO-4p@#Ju9=M|@O z$9(;K!zE5{*zg$K@U5z&`d5EsLx$xBF zZHU~dGGh+09(D`rGDlXg?_b+|V zPaTXo3dV6AJ33>=%)1hK0~(;m>foW8K0H0m3UgtU?M0C?t+x|wpNmoZ`W@3~$IEcg z0G0c?+X;nGl!|Gkx%sa&LiC;FG<7!ds0`t00FqM&T9~bh_wU`)T}#^d)faqDz}MgJ z%C*Z!@_0=XcngEGrb4&=Fbmfbf!~C`ek^uR1HzTZE!Fx028z2_w^mVwOXi{s675+ux`dRKVOMA zo^s)3twooIubFxnb`%CwpfNXOQfB-1g5L438vsv0u)oK#U{ZL(wa}UJFGecwApy3- zLLKecYZvaTS{Gw8UcI_@3kHjo;De|dYKBV)?mL9%{-wM1x-BA1)y-#qVtR>(!qwIS&M;pZ8NH|BG&dY()C*PX1MlpJ}!X$Dx()iKCd z3owi1j~_e2!nO&g?}Q#Gm9uH*_;oj-znu%p%Kf4{xr!J5`$;l^7Z;3;g#A6M_NdM@ z{eF?GwLtg7H4%>hHC7lR*w!mxScF?!xl&vd8?0(Q>E%&fgaPSa!DKc&4$5g!S-pZ}I~Rlb?!!uS=1mAW2+mdE%x*C_UoJ}Je0 zbY=%Xe`-O2!t&KkkLF(_C!dA2~+w4BeqSW1S}X>sGg^Eq`$G?7m870FyNx zKWp6^SZglgxl0Uol$GDxoBAeF?ADu!iR!)240NwtxDdjU;DM-G0(5c=OxbE!|6STZ z#yqUiIW=))%MWL>CyX?0)-+lpaXNzGI|=4ybpzwQS|Y%`ksx`}$_W2Hp*JrgBl$eN zynaL-gCv6Q5bs;R1$Fnui%%Ek__t+z$-a1WL2mlFP1X)wqPdt~QT%MtkQR7WR7wV) zNc&nY-LcXsR(90X(OQ&6~Gia>3rwT1jfLV<9)%@mV%3O3k!S9<2S8)R$vcZV61X)uhvmj<%Cni z;QM*mv~mqF>8;WF`)LMopbx)j%O8VV&nj#^*5MhTQtYXuLAU^j`qxQGQaXc>&LD1v zyr$-A!;kLn_};!gBmC5t?Ck7IYkkSk-vMJkCnk>h`uJVn6-;@)|SasC)bEJat8{W2#1|9(_@V=Md7-9!R zQ}&X@%gW1#9X3F|04D9bC%-QxHi4HC0gVa1hlUwjnbx4?hMQJ#Z&14;USs!I<$q8a)4{n)7S34EmDWR1$bYvqqd+wH~*%Z-A*B zOx5sk9F-d$8oFj>mAD!Kc?4eHxdHCnev?c)dQ#f(DdqHTKW`2Er~=KOFg>e8n#IX( zp-x$93=I$KfiE@}ZiL)A^J}#oNgW+}=%)PFR*HsM&;V00FwfT7dbaF0X!yB1G90Fg zc<^6e?J4zbiq_~ zlN`9q2-?ow8y-cU`#mHv_{L_LH}vzEbzzBF7NG_)S<;stn{TEL0^@kAu#6|pfvKv^ z`@rOOlhj$GrkvfW*pg!N2=y-l@~v&nxXX`s*Yz}jH!x2-fKN#UF`C5EzJI^qlgFiRHXdXKQwsuXwiIHga)2xYSt*P;u0)yZ1;`}nO%xBQP|J3u-I=d=gy9%s^jGe z(`k%Oo073K2Fq{j;R!f+bhj6LC2p;!GjjFYD_;8mQU8ybU+^X#0U8FvypOV6+WNcrz>u4)FKKt0BjCQCQd%orw9{Tl zW1VT&pAld>Z-9knaE3?@XJ~LxQs+Fx_1Z5HbGz|eRr-;W`QHyNh}+kaI*%J~{)W-{ z?NU}-IxyG^bE4{g+{1TCLb|q!Yn%3H2jrrJ0@7uAZIdN(MeO_{P zj=bkpn?NsU_RPfvwa&izEDye%?(bi|dSb)Zi@%8eNztuaxAsu4(0K?li+y6=_r>EfWKxh9BQz$lM66-QB4^GVf9cJ&nJH0NnnPfI zd1Gg#HG!yN)iGrnRu0mxY*Ns|j8xQBOVW$6m28Iq!B?$gHLm1kGo_<||Em%vvu7r7W>}!75L0TSX5MFu23a&-_bGgFGO!fX4Uik?ySnFl(Z52gC8fd1)1>{ zRt`Vc^ZL`+Nx>3=jA)pd!R~@A4~rdT<-)}xO<<7g8xg9O7}d6cMS1yz@$Fk0>kbyo zOm7Kswfap?d1-eCzv~oVkO&Y^p*fax417|=>&X@_q-WUtB}3TEiC~0dN`FSBpkC&C z^zKUMZ^nCs9#bF9yq2A!IiI#SAV-(QX_nWz(7mtk21!FkU##NX9`Jn^EHiwoFjn>_ zz?FZ=xzNyX{X2PMOI|SRwA{g4NFp}7G|FbVNS5!iT-&=F&78p}+wfbiA@%%HR*E+q zNLqiB222+O=oPIM@QFk7m8jL#)l4vAyBN}6@=Lf?-ujikB6e>8-+9J^srB4UT(*(5 zN^Cf6#0B%2NRoB+&K>xsXU-9aHQ(;2aaMkA%YTU&ONyV3z|5hnHbDIVV<~1$WF@Az z1vhit5`nNZMkI|bJ=bTTm1b(3e~44J9UVJ{C2RO6u833n(DE(TM_Kj`4%e?-&e4v(VsxHsCSR-JGC3evDKtye4?~UYUAm zZfPkdMWK(G-5j_!FFAuBmWA&o4EhU$!Rx<NGO_{m_)_x9GRfg1#6lYzkYp`Sy_4Z z>iKJ#;^5}gsZ){EdGCzPhR@d*VdMEi0?NHI{lYv9Wr2xw#>OfuT1oEd`74c)5v@#somr z<~KGPUA45d1P==)I`b^kT&Q?i;|f}t`zSiId^K>_?ZrQ6LR@fL+_7sO=b%KZ|1ixm z6ZH)ghMPj%1kOZB$gfdf+{frn=64^S)sg0ZR@ ze0nf;zK8GVN$usK=!Mb1wb8AQ0aZ9drYtG@jcQPjPKYslcz!)EMqSCHreO)3sWcX{ z1U0V`cs+nu*gL$GvO1#DmOxpMzDk%CB^;WFga^=)n>}^*ao1i`bLRX7dJ#%y&=X)z~xYr)Wv-7(3K?Wve-%=m1BLC!1O1`OaPS49RC#yHz2W=nyIsr zu9K#-M$-{moc1PIwy$R?iq=^cyb5My(&LP$tR3Zar*PtrtSNq7kGxxm4P1^*1LLbh z{kUwZi3IB_k1ld1NaDQ!a_s!?=)La-+UF!VV+MN2Nm~iQ#o4I9MDUTakd+}Boud=i zQ&wKHQjX>~2aG7DtxaIo!nE1l&0#Ba!kXh%FoZBY1<557IF{?dg$7`@J$dl0!NenL zDMes7->$_dE-Na{=k#dG+IULSs)O8bTR>`>x6E%P9L=ay#FzUAM5)tq024iK_RWuz zt8PSdbHKABomIqZr(S%WXqm?Vw|xNl9k-_#4&3d zfJG2Y^YN|j4sqe-)x8QM*VMoF8jUoaifw%`lCS9fuJkqfw0B17^~Mh#`D&+K4H68; zUEQ$>8dR&^E#_r|y@y5zT}oTEMhWs(t2zU=bt2#Z+$;&gk0S3o?`4R%| zT6O$-F)+;sm5_tSCr?aF=yr5=hGl1ErA|ydylQG{n#S5j4-4CIb$ECtB1suh+xw$zohu#fiWAqVx+^OTo4R6@nf6R=C z;N5+ow6(QW_ru4J*DhTO%N!cIcj?llJ#XUTjvPC5={Ls->l6 zuvF9Vw@!*=1>>W0G6o{npRJ5!vJNz{CiKNxb85$yVd~dy+9JkSwZa~)Ik6nT{;Ilm ze6dgRL$z1%$GSc+rKhJD%*Mffb!}pf4@~xG)QCwXP4)scVT4KjvoDYGG_mG32rb(! zeslnB1^y=S8)>EKUsVQ zL>1{nMmz8-;M1+(c_0|_<>k%1a{KnX)rhG5tBy}`WD2fpPoXGf}C=*kfh5 znrmH=XcIw2{Es^4+I=anQQtxIfCt265DPMFeJ-bKb`(OciG|&az3e+1*Dua+Jj%*?8@OPwsy2{qd?+ zM5d}DUh{a}eDeB1>o3y@%(^HqiS(`|UH;><9R56y&cGOMP)YZ@Oz1eITKeSN`)kdt zw{({N2lLQqGOOgSxcd?3Qv3C2jwQpa1MJbPkMm_?U~(Pb>c^u2ZSTM41n_%m&CkbX zIXGR^p^29X(EXD)I@}Z5NvVM*a3B%pMn<4=Say_Q}%3YM8 zwZ|N_kjQ*vm_Mk!=QEgXu@>*^H`pEf-N35%W5T-6Wy=q&KmYWKjaT|d$^*B#ZSRls zA#cdNDRg*O83A{>m{jt~sGBA#p1z(jDEidg(eigzn{O|Q!{+~yQBF)me_OBKAIvqy zqe{CJi;BXWqUP}btgUg!LjwZy%HBmf1Ze0B>CHG#w{3y(nw^~{F zsUq;zrr}2ZiDpc`u#Mj{d*Mz21zI^*9A+b1lk*YMKlEF}zqPX;eI?KMrZplCn`W(% z&PRoaP{%5~%5IMyUt-yJMzk~s4xa$bTQwK}-Sn#8Glx(m`%AYYE@AdA>QMb&UwSLk zI1N~(lhT&LfkEd_Jk-F1NAln8y)*c6Y-R5I`3KhWYGpiOU{qWlBfWF&LD_wV{mJRC zmSS6_W5>H;RtGJQF1#hvEUj!XbXN8fm_4hghgM!ts#jcGyx$%2bK4)cR(t;=LRRe? zbh1wr{IU%XPI3#3GVwK4#c)Rj)UT9o*{*)vJ|Jlbj5piDC%A%^Z)Um?Rnl|A#krM& zTNUxim7xniu@WD`mKVf!kvsSa;ZGqjA%8#~Ga ze4e4&Q?H79zBmtGzpF7o9IJ;dAM5zC5Uzz^T||z)B=P|wFAC$AQ}tka7O=KJSA1Dy z6-%B{!H`Y{Dnxkj=o+I zXTi}@<)P@UcY{4PD<2o|z2Hk|J0mU&N!0IyzR86-)TUzH@9TR%On8`czWICZUX-V$ zfw8dix1^T1jV*VfxmC?dt7Zve?C4+Ly zC3ia_FawC1oV3?qGFN&{T#!pG7(b0&f8EP0KC4*$@(iLz6tLRo>YPc#w6Mq})&Vd} z`0;a$V$G3H-nHgX^Aqa{uuzM|N5tKKdIt>eB%=$7*mv))KxcPAdd~hr;=yCbj!Fqo zZ!4}p?OwWr?D1hIp-c>K)jK;3NSI)Y?cm(LN-aHJ6k~NzGeM&&*zI{8J6m#h*41h##m2z#%dKgLr3mt(Dm2d^` z{QqOW=y#&)3frmKee20F!H};@eY3--##onXQUNbF=P9MiBjCdz_y!zcS#8I;5xwsd z{{1=ERCPQtah7k}ws+at$NrlQFe?JeIv^QlW2^^uJ_X~S-u%bD8=9nqz2TQmi1m2qR9Q5$iUGN7Ueqyg1c3kVB#wa7g8i6( zcJ(Bk!HAV`hWtDr@w1AX*4o!6D+l#-b1RcE2>X4IGO};)n-{ns!I}~8#PJ9Qr-F#h zeE%A})q3xqF6#A$GmfI7qC+Di`hcxDC#zdmS9jO{M^h6zpdL);4xSHvBHSv~5J|p; zUQYloFvfCYS=*4)-Vg1ao1f2!j~7{P*#gPyD|HY4_U+pdX=#1DUhpP)9vJ^u=APeZ zs(cWbvwsxyP@7^8?B}T#&qRLlMQ%NS1hp0;8p8YR_ z{U10e{|QU$B$19v%e_pr);gk$UGB9HU=(TLpXnVQY-(!`ah9yZ)F-!*?z?wqpyGu^MTe<>pL7w4 z3EQ8X`}V!ACMm7;2f$|8wNQR7@C{oWmdKnK;=5G;T}bD>oBMqA{cVs$?d0Lb`FX)Y zoB@J4Z5~@al@@faVjMhamm<7SSPVn@zhvt zq$n7-=I|J+vYCe`+?n5?rq5=2Wn^@;9((gQRX_4#y?+05<^uS@--|epAGu>Xoe>P& zCxGTsBfm*Xj<x%&=i52)|*`GJ% zr`NTLfyeR@h1Ir^yMLcXk1kD-+dDh;cVAT)Ou%AcC-pLfuG=)e0PH`SR{)>B*q8X( zq>6&Gp0Zl6U&R>ZyG#!a4PEY5Q#-A!EY0QL(64#f#3cM@{eby#B_$;x-&}>?gyl3- zW0RMcw^uawU}vhDTKTmL_aqOG+_-v`GnVQQVB#Ld7;8V!f#tj6g*y7|sou|;@YwHd z_2F*wbJd5$A+Bpaxs^3F&wl*)F=Y8A9qQP?ZF4#LcUG2P4+;I8+1658Q0`=cf1J8E z{)JxFa?y>OWD}*n!mXfjFAf;9fB`}Ly4O@`>5B24Ej7~bUtptBSQ}^~BXY(!9UngY z)+_hu*}%>&);VPwEu<(7>X`WA#X+jupHPCB#{$0nXjfyG%>x+B|m!BIZnQ;9KMIVXtGk_fsocxBfVmo7O(L zC(NYoy?gfPZ`km7=s4%#!tCr} z37F2@JTv3#yW2aWzqva(K|g%_5URHrpsWKcYRpiVJ#pgZ0>v281vt$%&})^!risdS z&%5@ZmGu9PvQb`>Fr$=xCGJVtM=@z~Z2Ho50I}y^fi6WQB^Q>KmIh(SrdwC9zU&eV zNOs)0`|mKDPzPTe4tG>T!xBI2G<#t$?1He6ke3VX>c4vMprl409nb*WZJ^5E!CNOx z5Qy2*D3K$t5#b{v_RBGa|BB5y5pXBojJVtJnf#}6kMY)co7=>H1@_QRqoq18SzGtT z=iRvecNE}>AU7z&*S9nveE2GVi)zl_R1blSM*YeMHePc3`fJ2sMrGUp)`({02T|13m~Q%ZzF(x$>`= zFR#R;qzAWepFvHnRf)j@0|S?fqW_MoN=#~OG+O?^j*XFm{;zraufDyt^&AGjGEq9c z*4WVSm%P0EvQpb?jQfKJ7gv8^9JlguNI8|0@8e5|qBS>TwdNZX(_VjlI8DE|I$O*95Re3T zkF)EjHI@iI$Da<}q4wSF%#Dq9CMHq%oSdf@P}ZE!rA&p|JFj&F0=0{&$m5KRr?z-! z0_HkLVS-5;WYWkibCmV*zZbVHgFiB2Q+8Q&_H;vbRo2{kbEe~}@^uMfiska^sya3Q z=}mW7#w@8pe%|>9DYSp5(0aPO{)H*wBg^K)&X+=lPG+OJ+u29XMsJekvE(nQtt9m# z=cj&*8q93TSx}*Fnd%q$-o{fYCqVQtE*vG%?TV9ee z-HslO)WApStd+1jTK{GpV+rr`zNgQO$7Gj(9zEN)-OL*<%lC)eAt(0zZ~td@em;7~ zjvYfJ2>7L{w)XipyoyWj3%J75{+$MZ5n}*mdUOO!V+MMP9Pc?g9w!tFKaq!ua8q|| z+x7ys38Y8fq@<+1`}ZIDRn$E(aZF8B^*d$*nDXp7V5na*F^PqdcUB6cpK;;YB_%ge zd=QYopFMqg1$=C^$7UPe^#piN*C)W&*8;y~y>ww=;mWmZuU6ka07{*D7XecudVM@q z34mAA4q?B1`HOn@z!Ukz3szQ%te{%4+d$!?LO_S=x3siKhMxxQn76_GJ7ttlpZ=?i z00`G1I{o+>#NNSyE>LzR^~#aGJD#;>pE`Bwh@|8bO-)VR{>X@k_s^bfQF}89@_0c} zkscs)SE^)vYM*njq^&nN_rL;tSR5GsXMg{@L|uNKb%a84e?1imxw&PXH6fpNtTP+r z_P+JShkQM@o}3W!$aI}fAdur{7Py;cON$+{>*k-k{RHxV{LdY@tGleN zotvGzte1kEqTFfudvII%dv@**99-n>A2@gdCGx{BaYN&9W5vy zPQc4uF*f)wjByh9QC2>^{x|URZ+|PDQdT|*Q8=x1>NN1j$&+9`MWDV4scmxX1sf-v6xp-+}u-iaWZ7c9)d2@Ib z@Ye?SYX;{a`AyJq;6Ixk&KjMCKnkLEuHFHeW4r4G3wH>FzY6@lfe6pM2Z5OCUDQ2$ z!^dW-Z|4^=JLC*E-I+w7BS~aCOR{PByC)%?I^PXn99t~9l{07lX@5@M7QMW|y!YNa z&8QD~O&`04?4LfnZTrx?tj^fL2>Q`hwg4K=PP#UJ0_sb zde`e(#rGM-@pHfEucU;Q2wX+Pt0K}WX1?vT2j%Ne4Gr(<*OqXcX=kp5ZRZ!0wn0|B zL-I>9oPdLw1ObxtwyV!lx5FaYy@TvY&U%2*e9-!r?_8Zs;~ucN%7jDLNJG4BOi%hz zL~fW3?&SgC^L?R3v%UnEvbqyR2G<9Ds-E+ma_%`@xEUxq9lW9&&S5hXK6E->g65cH z#;L%QEx=j7wf*t>=!yfm=L67__J_NGS7yH*>a03lHvxtc0j;ebjjfz2P>bZU>cfJ-F^geVHyN$Suo`!9#sLdM|6?Oyq(=wDpKvRo>T z#c#l6YoI$!lca5!JdZUlmn~(#c^Ej5Qnd~JO0AR<`rxot23o3An_aTuT?N?OAl~7& zY41nd_V1eRxg`!!ji?T1U5A%_h0R_XiVqVSXf5AvGM~9lD{MFux{C<;Nqy@vqRML{ z*xnLPdlWk8B3iehD6ib4UYMAuw)M*4Y6S@IL5l&pzM~Dae3q{7!puAvk&ZR*>Mtq~ zP1$W+Ti|D?PutB03EF_*g&a<=A|)0Sr8oCZVDH8aXHDehyMH8UMLU(S3pQL{*qEsf zVC&ddtsGv+cL1MX-wENBBb4NN zKj7__M`t5cw?cfzqx=j5lTRUdZ@-WN(0y(NoE0|y(+Q0BgGkNV;^X1 z&8pXKSfXSaanb}t3DXYJn85~xM-vCZwdx^cYw%x@xghA^?)f!4>b_#7Q@YYE3~Ju` z*gK=s#8ZQ+EZYFf>fhDhxiyQ^4;u00M^bYarCk-94;%;PTms;H|D$i2N`w-r9jz21 z;z)&+-siCXBXL0m@OYrzL0te&$op^YTXWFuZ*TKuUh$-wT`jcH`@DVfQMpNMxe3>K zHxZH@1d!0<3p_5nGA1VT*UoB)md;xAF9;0rm7iD}C?7lVxiF<6(-ZD^14>v5US>Vk zgqWTKC~`brbt!S*R>%TBfUOS(z?Z^*#~}o={}*y!pF(F`j+bo9Fi|lCMTC2VsEVHttdsX(f&_9mRtVcmf`O%{w_FDlvJoABkD4BJMLQ{Ewwq$K@b8IUTUhHjk(CU z6K5lU;5`_ry7kIKWi;&OitWq3dXbLj2emLEQ1zv^n%u#wYF?`)o5Me|KbQ}fX_O6pFFxF|bXf_g-49Ioh!Pyi z*f!|X;4`ka8pc0pOGN*8DJB0SwJO+-JuknT7$N=#lFx&z=VW4i+P>q%VCtQQRrzID zWkiamQNEbsGgW(lbZkIO%&(oHG<|TJPx7wAbAp4q<^BEr?lmWiefA}qSrmJvM^t#8 zLNox_1sVLqh>m;34Sh8Je3^<%>^{eo7h4R?zrV6OZa47C?v(fJvC@x5h+gFIE|F7z z*~*C>W^0k|^r!%u2%&~nFn5jWxx&%)f;c7Y!) zQ}ugN+r#Q2ZI#T8=WL=LGy~%XtdAQ>v#z)6D>I#ANfjpg9*m1$X{L7;kGi9sq25i# z*2VU(dD|WblzNoY{5J=mh=p19+Z#?_mC z-&CP8C`Bv+oobGljOf;;=SjA#(fgt{oc;svn?vYAY5rQZR?i0|a{S{rKKZ39tF=t2 zkteYZsHrlWT7=}obe7kX-r7$nuE!>(E#z;y7>=N|TZ#oZJWMYj*A9pnNxDuATd1(8f$E1}jBu(={+7=ufd%Xq*dM;QB@%d09##HK zFva+^Os&3i=WwMiJ8DqLA)&Xh+;dPhj@1<{n6w=O;OOVyII2}O-ki-AdggKSV^FIg zp(thJOEj#REOL!Ko|uFlm{c{3<{$bu#45j_#ffzN8TM@?O{-Au-hacyA|JaI(9P&tDo%)Pkh4&3bHi|!7Lv_OSsX$S~r?_o zIg01@xh<6gv%ClnPIKOOBn)c``7Jjh(trZ(U-IPY-al(mtq>-O-oOF{QlzT>)j!m* zn|LJb4-*gW*W3LYcztO4kv}XOV!K!GZ=v-6b^ia-`CCyUhTs)(=fK}$&Izh`xdkW! zb>WAPgFcR=lv9@net+0sJ<^nP+#wP1+^PF>P3{KB5NIduVvnd0j-C(Ze{(#){ZsZG zWBh940-RWdfk~e+#gXpK5P;xb6(TAYDQzOnPW!nw%Nk4MYhZPd;``anFe;b4oa@wEWROfLwM_28U+?7M;t+#DZXT91O4ZvB zfAsrX^68*s>%JqHhRw$%gV8u?9vjVLM6^Wg?W+EnC+X@N{Q9S$tr~9#yNIn zFOuO=>eaA!Fb=5Y1CZUNM)oFOjo2TJ-Vtw-Il=d+c;wt91^3yX>D66<%sF9McvYXG z9{&&fAw|vRn3MtaP@joQ^sr;{i)F*u`a!$n_XY;-=ElXC;ihF1;M7Q8(!z;N9{+lpRt>X<8oU%uQ8NxMNE$0kjuVif1mm=*y6igN z#6em^3Eb~3d;g-{A8G1n3FV3A6z>p4Eb(UZ5hj^O4HW3Q-s;ci@0uDp>#AcN7*Tu| zMTu&R>u8r|!7;BSc)}Q7mp+&oiB|9nNceC1B9f0iq%|9_G}uG^iX7accgG3im5&r+ zFK)4O=^`r@B^Q3my0Y}#;S0PdCHI{Xu~ep0i{xBu+a7!9w-nD4LnQL*Qj78Xc{8LT zMlY76(djomDF;63ZQun->rxtJn7vrCjD<+WUdB7y7@-E>j(PsKJQUsuY&IL@v<46=bwLhw)*+ zkinE)LyO<6KgrkZo)h>nMZ-UKwcJ;E1E5{r4e{rSe%LhnEMxk#DT@EU(0N`U%_lWtZ2vKu_vXM}1)Jwy9v6bG<@SxD_U{Z1 zu3sWVlBH-m)I(B2TLP_4pHtV?(Y_h|0gwajeZlIr{L8^2?1pQ!KZA%KaX>SBwQi_C zmp^TIIK7Gz+J5jtFvZ#Z^tLW_#M_~2gw{A&_OA*p0G7h_;Zs%393%?ADS6soOM1qO zHFZ$xh`-Hr`m~)eQ0cj#?mpt4eTyF}wo>16b|!LLzSuQ(`1!W;)U}XPg zUBsxKa-il%-WE$sUL2otWJcpL_M%MQ{FOpVXKH@RGHc5M@??vXq^bz9h=}1%Qe0xH z3o^um#%4zv6dsMNE9%FIs>X?ji=z1nk9Oo8*^{)((8gTP>X?2~R|HLU)qQVZGTG3z z>J;58_M_w}DfPBP7KJJOE3+atqb0o;OxYKLU6a_mgR=*9y$5{~Y1kdr1$=8mI{LsW zG=h{-v#s?e|Or+~W<4M+Iir+;rJy2gdPQVW~uDS#z^hh9hZ$l(Ov2`BN3lXynJ;H0-fHZusT9_Tf!GiqA=^TORBR9F&0MRmc*P%Za2~ z#Lhqbp*%C#Rq>%xYv)AbqEVEVV9)V9v@KHNTOo1Qf@ZeUWq#W0qXNJkQ6P70T5M3* zs{KD)rJ*~4JOmttijNE~qPuxdWO+8#br z(oh^~f^(Hrn)jlOnIvv#>M~idsCn34+{7WVx5u3FRpR+m;9NZ#?SYv#j)iM zmxSfQFwvTVlgrNV(EWT>$~Ksdt=0Kj=kw4u5CN)HEmB}-VhSJ%$`(8eGUplR#zUVb;(dDC~e7cH$ z7+n+Ee(TPd{y@Ac*-@qh*Gpc6I&`9(Zsyn_Iai>>3Ag6ik+mw@+y7#>LWd`USGYH2>XVY5iz&aHXgVHCN)h;Zuh}+10`J9IkDSk|rAJ^8S z%CGAXRgdhv`9~>7D*hj(C;r)aw<=|EOpmvX4zzv$OKU1rt?veggRL-{gvWL9jr7qU zM`coma1o(AkQ1QGQlQwRdY&@#T;+S|XtHA`1TqJ7eDZ>rs_U8H*)76W2jKxU(c!KF z+rRzCtimRBL-1}9U57i(Sj$gzZ&F)nhCFft_qfl=<5_9imc8BGS+SV1iDS5cnf|jl zUdRl%y}aw1Luep_iE2La48>&z!cvU3LhgYDFVq59pFBJ~zFSh}ggBdgGg44x6-*rC z4S2_>mF_*&V^_Qx0z!3iTh>Vwshsk`V9V@-jHHj7mZ#u><=q=0{p)V)Qmdi-xJfQ} z*3ozXaz=dJDHA1Xcuk&kgg|`Py)`E&oKn&Kw+CH_SZ%*<60Zb#qzM9WR~b#hz~CSv zUY|mbHYUgz#+*w`Brx9i?tjBeNiIT#Me7svEvf-~f2TuZtE9rm$Z&M1^- z4nvxPDSp1cl(Of8d?nV-KH0Lf0T@YWu^`sF&okEIVbsU!g1MjP1!il+Arqevt6jEH z;FM2HaB8PeqPN-xS^bqkZk$C@eT=Ln*z|2At-H`6K?wp$G0icnD?!j2uCY(cqTc|x zy_Jt!x@Cd$D*}{^Yqx5$l4A_`FWlM+{Z!yuKkQ73FFZrV4*rRqGP)r!K~GipVi-^teWrub$Aj2psU zy_7QWlXuwvJgX;DFk4W@xczJ{1s2f%b;I>&PP!d}7n1p*>FH`MeD(R7juYh3W6+`%57P)d*lD#w)oo*2I_L}TR5~9MJVdFdW(qI9zP!1q<7_BkgFC1`^ zx9YU&QtYFM{R-dw)v8YNUUzD5cI!p4r`-BHNp%2^En?nj10L_uuG+<8Anj#v&HK~z z!iNCXRCL?`iM+-oPGM1W?9fCGMj0UJ#*e7$^XXCA*?;nj402+RG1n6&dKmcTfoGk2Sozkjg=YB9JN`(b+HbaN= zpl~bXC;vp-iFN~A$8{C7u)IyK&WDYVpWYKlINYx-VF(a0E~C>UGg2(pk|S>R7ZH`A@8)N30ze7 zr#nFwKfpuF!ViN!gVmvPj|BqGaLqIqH~A`~qr^0%VcZpx-Pq66mBOJ7ki7HIbgENd znJIVIsF6zFd)xlEj`?@uDix~;vckNjXYg8@$nIgcmKTTIS^}-4%(*PG8|B6P(DgtL z*6qj9j4_z7miM$3XXU0}<1UdsPQu0+9z1k)f|hO*C)}itO<`&;|IiCO%%#3)uGd)` zGZ-nJEEcXCZke(=C~O^Ywq#mI&P{G!!o*Fhig!&!&Fy`!7ugw<97+qDZf0&B-0!U7 zJ9n?N|H;k;6&41ym@}8&pTGw1Nz&!7@m^ml9lR@;B^+Ro@6iccw%(UD@i}~WN8xnO zZt9!V^Ur?-QrVx@rY;w_Sd@KFR-?#U$MU^wGOd&__x$nVYTt@Pj38x@Y+DP^`-BRyn&~^9Zu^Pej`)k@AfZylJ972$Y6^EbWv)gZb=6pV z`CjSJD?^XwcReAtUmEEcf*cjlG{fI^$~&<(6+fOEi)lJ2=UFZN6rtgiJ*pz-OL2F~ z!kQ*7ao^sKT*`5g(hTp_`jOkl4#Dm;aE|uWO#OX~{3PA5PEGpur|X1` zqvCi)uUesJguz{742K=hKWX^2|9zS%&%!}6;hQQ!5UNr4~)g=7DT=qkt-kUCper5+TN>1K!1bggq1gIRI@X7_mUrbrYWhQ zF|XR%$;TFyjfb|@C&g|_)%r2wTB0LbJ}WYC1Db=qcN*Gqrf90C$k148@djsS(-keS zoAVMYyP5?KHa>;>=yz+mm&2ryDmK#xhLgvQk}r1d`E?YGL`)TtelQ7KWZ~0ehtMr< zfVz4a6}U>X-+o4_H_FZM=b=fBO}y{oi=Db90a0FTaqi77;(fJ6Q9NoUNFweqByy&< z0OhD#E5O`vzf7@N^LjCy>JoEhU$w$5V-Ec2VzMnHvR>1j_nmW-4mW@ksB={oD4Hfy z*NWG)h9L(Gpqn@*oMTKi_mQ~6H?|-mVy>q+YpzEMyxU!^@RJLGh(B8d3|b1>5~ply zdBKv#P}{}OeXHjL-enTj=!BT%`O$=5&DlL9yfmOQP8&iFw7gdBOmR93-K3WV+xq!_ zi)7)`?1KQ5u;m}-_d0Ve?6*HUzS8Is+I&RF!Y|Uo+akk5J;f2q{fN6gDZlY*%H2D~ zJ28SNv(GDl^oEKT*}MxAth!Tm2&cqDsp@H_c2QR@h#V zCyDN_wy@Qhm@Gis`geAR+7Ip@i#7>dY5VLpeCf}$R|kddrh7|)#i>r*#~+ww04*v- zI8iSRNTMIds4^<%?=4Pr*l#yI3r!!!&pea=Ug106u;)<-+FY7Li*fLw8`(T**S!j z8@qvjRO1|?r%fzE)WC)`Zs-c zCM*9gmEf|7c70`@AXS5naa;}~Hc7)9n4VtSU`bAnp?y>0gP2EMMC~O73jzuUz_JZk zfWQf!yWR|nGeFPGUiT=?r7m0hqoNMzt6c`#bGy3%1^A~TFw>8def6V9%=q9rXX=rx zDv21Q1m$>uK@OrHuX)#sIDE$=*}p-Zy{dYKv72~?>(B6~9_QhQo;1wdF}PorSt)?J zQtZH+l)1g_{G%k{bIQ3$-?Fs z>vFF@qh{CyO%#PZ1o_$_$unlMyO8*&Az*-7prLAae{(8wud#_q)E{8L1DK%>bC}Yv zS$VIFXVkB8*o}K0=>Szgs=x07Cap1BEjY}YrTr!}))DAC=K7Mje%n4`lDP*21iaJF zFRpq2Hy|YNW-*wg0pNhA03hJ=H?OLK1rmPG)N`^+L2dj!VCJqDCjrWAZmwSb@8X5A ztG+}H%AFW676zCu;wtPOor)*?0aP++l zyUUtEyAizx<>I)T%Dp|6Lk$x6IzsYx2ll3vlg%F=cB`@7Da4@d4*z}x^Hj39S+kj4 za%$j&NXH?@sx8;d$KXU3Vhb4EH zn-p&;v}?BMUT})))%1;lQa=AxpmiO02<=E?bu|s2de};vb<8lpdHF3kj%M{2xmP`n zce`gf<5}wqji2B{^g{8f+Mk`{SKWRDSkV3XwsLW()rfx2vJ1NzO{2zr5Bp429H{WJ z;kD5qM$t)4`NFW5^y#r3c;9(}`fP#qaZze4;%Mgf!h5ip1DdP}gfFFHYmi>IFKb`v zNU{HL7yn?%#4qeyAOboXy?;=G42C}(42u#+UgVcR*?>o|WPyq!B&r@%vARG79Rx3v zf{V&%1*3n|uN2MSUFhi+s_+W2)d%6Es8Y&w_4^bK`SFRXrP&0@>tfCh#$Ek;08XCw zkGC=@?F4m;#)~pZf5{|!r1c`0ulskJ2!o+5B8Y&hDVp8*#PnNI(^K|ztRwOAA+*R~ z$;AqI&bC2TXSwtb+nvH46HgNKAXgv>Y7ZI;WG_)HU z(^zzL$nu>!ajWc{(1}~XlA8VKNLDRwPV$k9bs3%0&)_BpMdI{()Ryo9rEag7bCVY- z!t9&M{s8;Tq^Q}PNOuvJ$x(LVg9U|Gk@^GX53KqY4*E165gE}m55v18oGO&}MoYyR z8q}evUb1nYQ5dP;tc7=;a}v>+LX>*8UM|&&BTHY7RuKG19~PC-IU(=DCw|<4jY?P$ ze%8L%w=(;C2;t}+qQ!YAy9p{EO`hhn(YP*Qi1(6i3bD~Jz>?t&%guR|=N9bbAout5 zYfOohW#)OK97#pTuv)~5#IZbem%$RX07R}0%yt^7Te}5QNj?Rr2+xT%arC}q`A8*j5})PkZh`YbjK`pnGN&gSuQe(0d8F4WSZ4POg8(vhLVB>wFDwhrN zl7sV4>3TJ-6fBb97)}@*2Db4ZA z=GZ`Wo)7%xlFs*wOYP7!58igMX5qt11L0*hQ2*NHyEk+$pIW-k*x3USA1o0-OxC_- z%(b^yrzP3z@F?0y)opXRjnfEa#}(y`CLsONE-)+17OPYDAZbR#0{Fu0a5bXSc92c< z4muB2F$k?J)1*bDsBl<;Quv!ig) zW>wfOIv-9e7&nX*ucsWZc8a1_SV_xU{km0_t;xt6R6a7oMY$eCjdgS*k zZP`y?IcBJAm`YhFcu%;k3!Bl5UcGxG`4F1Cm*_=qSE(5*b?Ibs)VjXA_svJjGW?R^ zuLo3H9!UE&>XBxxgf34x_KM8kd@qrpiteLjYEAcGj*2iF%L%o?sxD|$q^;sO$#h{+ zld0sAV(#^jrpiI4j;L8HT41skoJ*tE*2eJpRR!1_=J4{Z*K6w0Hu)l>64^!9Cl_zr zTh~Z;e&R<}SI)ge&9ZA<&O@2@AvF7n(UPTvtE|QI= zLN4ip;!<1?c~Q)Ag?`zu)IN=bhKJ#j!*~%;Nwnf?HMF4o=XT);mS`q&b~HfH>*D|% zopli=Pv5D}k#`yfl!H8CGC^?e{Ty@$0U>x6a~Zd7Igl3i$)G?+NcZ0xCn6qLbG+8(U%l>q>~&-5l!L3%?gS`avUk z)FmZ3$P*@&1%Dk1_foSZq>fhDRMCv5s7blDuF^>A{JF#0(-o@x((`fQ1g}tl9x;l< zmicl>IVZ11qeBL%Ry^MTD=w1e`jAlC!QJ{n zW-;>pgXT(g%*$%TSbZz|vQaHUKen6fUYx^?1DK~TE(F~&T_}&pmENbmh!<}c1?2tK z9)Y35DJpfN_gU(>*0HE0du^WU7)8ds)>{f5oL^l*ENPkqh$HUexQ+bVc2cOB!206z zqE+ozYyq|dEJMKDO0YeM8;v_kTAzGSBrQpC?bRJWt%=g>i>gana=h2!?e4*<)1sn8 zJTdmpM5G^Jf_mQ20%I0`{kd+D#@z|yM_3t{(tN;pMZtUA?A>z{sg1mCGn#}oeNJz8 zIg8p*n00F@k40En)4`4$V9=^gTDaeK&Ol8soM4;GJDuC@9~)qzgKpNDHDu5lPFfTO zE}B#=S*U%}OxP+6XscwZt2?X4uF43EdpvLX@hQyeN#JeMmdBpy3!K1#ERDtk?-Y1c zBHNmiMmr-;J6?Ipmv}xwCSK``ZF1mT=O<(*^?oNWXsKtZ+AP=e$7>9;Ki{p{@%(|0 zcnYfM^75VFNgMTE&4g^dn%OkE`cMIk+r?&`yxgftQ94KP3ZdbzA~cy3{JsG_&A2GV zs(X#SY*Z#Js2U+=8bvcf4SA?>SLeY{Y=*5vy+PAKbTfM_o zeFGJ$*{X_{I|JsV9L7io5mr3#oPOthV`3DuO7gKQyzrd+{1mgtX+D;EfIvP29tFjz z>MN`p@JGVdMc(?EkRb8Mb5$4q^FSH_jHL@O1Tz=A;ky(9RcYd;5i|ZU9QdI{*tOaHgJ_2 zwTx}%Y>L@HvQqJUv%sXH`5BE}{|@*|F(T0;*|3UQk$>d`m4Q~s78m&Blp$=jKcM}^U zXzh-v7T37_PLo_nYR5mR>9h*^>f!&OF%Ul7_s{|d9p)MmT^ayS`Zl1$25)=%_;#r|yMJQgGxG8}9E#@Gi&?mb?Y457kB6v6rU68JgwZJd~gUS2l$7Oi}z99YGHd z{oCM7Fb650RvqLo&P=e*5C?rmXHbjSp$knP1~ZI)?CGPTBpP+N1l&a2z(XKJ|Psh*-bH z4s$zFzP0^!({lirHh$xWmuWg{w!X79!i@(Yk^Nf4Gu%>oe)-T&80*QeqoHsDyPOaW zreOWE*`64yN7kQ6y#!#rrZR}fuII}Gu=t~K(y{tjc@+Tb?pA&~w1i=DdDsE!d2rO+*2RA7CF1XEZ~*H&pr_R_fLM6kG!ybUzc6rN-q$eI~= z>ls$wgdgp;&Zy1CHszb^9DHMwQ9^HL=eE(?Z!UIrFGluu*2@#D3XRv>V49{gNJppD z*-;0)lMdui$_^XGjCoGb>UtMr%BRO#(v{Ym$yyd)#`v!-j|$Rdz59-1Dz5!%uT{?O zb#Ff0X$kZY=}qs<^IJx1Opmqc2z3}7?m=35Su}?2JHDX4ScRPStGD)^>?(Nc`7qay zJ_(<{j&bzH4d-j1R(%@PmCSISOThvDetvtv5x_gZ>mz{2@{48qF7!nb3}XQTm0wz%qSDU%Hq@& z$65&D<-4cJ2b3P(Sf9f*Y;72}psu&&u{E6L)0C*zqP~w21CBpkM*lqoV1#4?)aKl+ ziW+)pkmd=-tgM54VxO#6k|@zD$=?#jnJ{0Ufb9cPq?m>o<~o4f&hIa!e#3yk;^*FA zbU`>*XR2D%7lW+9QQYA5;3TMA4s}s|_?4ktXs4xs*20x9O~|M+>rof~MkSIiy%#`f zd)-cYJ#5YG3+1hnquCdiRo1M19=Euiyk}Bf1wB;;atG$R9G*3JAGg>aB%n{9#WVgm%Q z&cLpCbXbog#56kp^##;?V1$q&2xKOBcBjoOZH_+-0S$j(a!I};@os=@P5ArE?1O!f zpQ!cg-;SNRFL%n7oZczm{gaVq zUemotHN0G6JQI>*9ux}iCSJ}0s5U!Nb?b|IVWPW4qO?GRg=9TR`{+)y+?djNp&zaN zgs3LV6VVchB&KRIvXock)L#log<51&yGa^i_^(2jS03t7jh_nK6Q@QmkUq@X&3eY^ z|D)4-q2|~EYxm*ey27F2P=W7pw_U__^tj6-7X^N-ZkZP(GwsVT9^d4&O!;u?2+g6^ ztDkjxv^_--z4U*;JQA5>H#O(`*{#ya!G4^ZZ@pB4@9o16gf{JmNm@G&E+S6Kkj(8* z(O7##J~r=x$@PspPwgV&#Q(L9*oRJ=N%&`y0Xb(HSCrE4#fd&~`D?2!Q^jfW$f#5H zb|+?8s3K;TyhlBVUc**ld(jldlE+W-)oP8f);fIY=kMxNPTAMa4!6epHKdVCP9c*P zP|+kqD{Rwj_tfA;?ddwKS0<4xC&NV)22LKfPjKB6NLXUXu*%0jV`EwV5Bqiz&w$d+ ztwl*~M83oX=Ev}s_LY|Gs2 z8I6_~`_iII9PwYB6q#l*q#boiqa2R4S}Ij5Tyd^ecw{vdPGjY5T%>hvKPeNJR-#Bx zv-7WQ*)Atqb@l!7U{k*PlaAViKJU5Uf!-{fjuMg98`Ed9qRnFD2ojq_IyuuRZ3rvH z8Z^d!a;jakwux%H!0Pr)CO9&?1lfourAB`UTaMRpYRWeSp}s`0%cr3_4vgJNbTYcP+)t zIiSqp99x_?i<%naWMJA})8>2O{u+5a2N-8&$oM%0 zkWa5|@@+x>h2F3r2+BAwVu85H!LmxBNYQ70iDP^plMspMb4A)Xqw|PdX#_XOHczc~ zffEAP=rL*Hd?xQx$5-3t-z80}@KcAJ?VM@bhsJIO9s1K9D%AF41+Ch>QAh3?Li5Vs zELS^=egKHb191X%n6=u(?Z(a2fGeFo7{yP|e^)WAnSE}lvHzp+yv}g&_{p`&1iJ!n z@?$lCkgP#MGU;2E_FYMi9_lhI7x}oSaMqlAJ~`PZ+jk3OJ>)(=qjoJ>Q)@uXe*6Aa z<+X{xABxdb+Zf0VU;z&bBOx}>fh8^t&sg^{BTwMjz6oko0$1W*5;qxP1LBZ z|B2rH`R9q^CUFt&GQUW{_Y*584jd9ok&tk*2qZtN(zrL)=ijiW=h^Sh9IsRt>}cH} zOk8}*mPC`Iet*tEL32VxkI}s2YEC0Ni={%YE7_Op=Bl54@C~u*T8NAMp1T-EiM7z_ z9l}shPb0Q1krh^jL|)>1k87e`VNHmSaFsF~OFKugVqkc{`8lHEWQn!Oiv*-}6VzWk zUCUb_G6q|**Jj_;+235zK~nXi9(WgIvL&0pAwre^$;pU%R~+7@(@*TpQgItugZR2c zO9$zsT-LE)q)YhMNewX)0fPbd>To2IijDLIb z^y7H39K>I>1N$#kd%#KM3W+vLGkAguLTglYlb1iT^CmI(Rd4Na^^tatv5x+T+h7Uj zPcJL0#XHUi=j=GM@3}>b$TQo_QwXQO#HHNT5WT2BtJCOXskir$GH)ODdQoqVs3zRuEQEzL@;vd*7cs zTuhR<+m@w5*fA}wp;l>}~^WUT2V`##Bw@O_Kr#nUA^5K!(>w)LhxwD(+cR;Qv{VJE>)P#Qa zowt9URjujP!F^GhPJLjr0RqnHML5><-9sPCE&m%P`hRoh`NhOp^z5lGwogx-4&P)( zM!QEva07xPZr&5xv@=-X&8)^Ccf|6DlzO{Y5&I(9oq1(^zjnXGa*WjP;U4-!;oStzhk-<)@#2Mhel* z9N&MP9<)8ky(2WXCEC>x`v_PmG3wc~u@kE#qmoXS;vHy{Lp<~PO?b5CJL3u+I^um-U=V89RAm%FH5F~zwEXY@92MHi0XH4Z^3 z`Jp#Bs_)_TljPO&XW*DMC#FM|v->8TGFmVSrzKbPVaHrA(sa`wh3f@{UrI!N5!6o^ z-kc(2@X5ck%h+hYy~4WG*;Y22@z>olEWM9*N#4I?x5P!OX0@hAecB>fS?pJ6bJ$6l z_SypfkvFK%oXoCBQ zzd3pRaO3KhM8QXVx(<7NANm&sB9+^r!D@;J7|r6a{UPc%3p>l%S=|)1d;rWPJP#m| zVtG4{eC%`XWe@JWQ{?ROv$M89T@I-cMhWz>{72s?C`nL1Ui-WSlV@(D^j11g3eM%! zy+w6qaF@sZtqS|CV|W+eE{5S7a>$J1{Zm^`Cv5KGok{#k*FnqJ$M_6*ZZJ9gH->C?->LuqWvH}ZYi#gfjzK<`Fd zt1B?(zwEgtC^FQa22?9&wB zKr#F3?R05LK}G^YIrtlE6PD17b9&FxRtnL#MGcHEPrSHXlZ4NA2e0oUd}Caxp=58V zuIkrl69=T^UyUh!XG{apgDSg&21;g&U9ScNw9HP>yIj988-1aBM-{RoZJ7;-&c#Gx zL$|)f`7f02DAZ)1ts54jWjI~yyUOgRd@R>~AJa#a&chO8{2M}vIo|)!>Cx!jDmyyH z?jzJ3wmaW=zWa4qeptNjWXVgKe(Z{SiILXJ7@XdtFXlMCGPcr0J@1jy8ud(TtHvxf z1CMqWeNab!IMa3DCe`w9{?u}Z!o&@n?JLImvxSLwHb>sv%aFG`cEfqH_%ynY#?N$M zUiBx?KJhV3+;q$W$bJ`LGHV8Bmln^B?0-Vv%inn9rX$=CmOp)dp=4w=3A_*Z2xK+} z0;=Eq^LE0Kn;x6Vbk(!jBvO>^zV}kS96PtAynDKz!j4h>0-?bGhQCOo`;boq`LTT5 zTxM#%px(Q_+EOco_)cbVQMI$ZwTYJftZn=@;(eT8Pbg8_27`@4E3Nro(A?TW+iTOT zjjE$RuWzxX?-ozM!4{)rnQ?u@oY;SfZiH0gJB4q%cBC0c%4~b1>ejyKxT(D_1y+(I z?^X4c7fu-AnbRbbX_09S;)R7N_phDZpD%#sPWN!eL(j|{L3qKPNdm-Ez!lJbzJ)h!4c%kn&PumyH6SY1xn<@YlvMt;q|L$K9-@9Y_Fe+ zQd{&{-1)Z)S@blUEk3F9o zPSDYS^O|l zK}SjGLuX6_V%Cp<@@WG#!w6p4|UqQoDGYVJb?L~+IS9({YgsmRv8KIfP@rM<+7 zy$ePveeFLJ;x+(XKE7M`>hLMVpl;y}7~lmuQSsLLQR0m<=HQ9S*XuIg9l@7+JxSJX zV?PfS7UQ4OZi2!53p_`-bFqZi@rn*VvQ2Y_#xqhn_3|n8l_!5C`{XE02zDm>O&kT& zd|pmcHw7EH*bU>SG4GuD#5qU{kd(m*(Uc)<%d(UH^FbcUI9jR6K%KJKlWC z>}&;!c`m z>eWzr@o;|VSo*V(qQ|3|;s5pIzmWe){$FLqQ!1wv|1JOTDV5X8O8;N}-~SCi|C#@H zlOF`Kp?f|5?@!%}yCMIz{J(oVz~37v_7Xl22=~LU{J)bNU#zo(XU6tU;qR-bR!&(g z8|d{k9TUAX`W>3CZx$nlzN#Q8C^{g0s#Uq`W5I*N8_peU!A@Xa=*n!rcyM!w&Fz!I zC%<j#gOWHxiW*f`TXpgrzk~_*fi4&+{O_77gV(ZDnQ*&Ov zFRYz>c;UZS*7ZLuGZgpJ;f$M@=&a2~nNYcFOmoyyVahVBp81&4)R)2Lt}(bM zZwdG^J|_Ssk7o@|YyTvdvOTzjc4m!^ga7Z6RV zO&6n6R`30p33pkCJKBeQhjnL;uLWi?9R0QPumMz4ygY80t>vRo4id@ zRx7E=+6(P%h?H5NQXv~PHm3a($*5qgE#d{VmfOd7mos|2x%M~)pLg#7vl2Fr6cOlV z58?$fn2W~#u&5s7JN6l7-%AQ9Scm(X%5?RE1==y_3gwIf!W5NMMdc(@nJ+VvEg0oA z3VRYyM{&7!#KG%c5*787*lG6n(Uc{&cmeYRdu;;kofpV}k=d=Bs4n)(mp-O~Kdg*l z&7?4xkEb{Fc{}*QBnqR54ygNFn{gy(v7F+$62U?Crcg=gRJJIAK{L_8QHVP9LY>u@ zEd+UVDYuC&ev`pwwKcPlDJv8vhh-9>(xbz5_mXf;U_T-Rv$gMVb;=lhOU;9LB3~a* z6fBBOapuaEF_JR~{mj6gHMKH^kvCD>(g&D5H&X}j*l9i2pu*Um`GV%%DG(*Q7JGT)0hT3|R(>IUX;;sb(}Y=<`eX67JdpbrH`aKF3a8o;B%Y zuT2(VG?0}5R&YxSOYA9*&OJsrJ7pD*lh=5T#j~|g5*5#wMZMfFNC5;jXbHhp)OgO+ zVf`Er_mUXH>-hK4JJ~+4GH#D>$|5`Yb94E$KiQw+?zcn?bf^XZXa?rIwu;xD=~p5! z40V>v7xCs~_8`m9i_30h`?0#^mpLZnz}V^XMJ?}TWU~m|h(Qlu(yBs|TG=c8=Siyo z?O_U-HM6miOfuWA2v`rGOS}V!5b|_cJtGL)!z`K(?4*#)QFCo=RZDmeYOsV~7lZwS z%JIN4lrVuf33o0JFxo=ts4=XFO}L-p-RE77lb;U4b^}8PHsQ@m7}4WM=@EvVyy_ zIdEzL>jmIR;Vct3%3*cZvr;u9r81!Ip0aUsG)GQ;l*ozo8 zl8UELNY+dEd@_<0xF(R{&0_oEsND1Z)L!mWt~Y{8Hz8>+9_0e!4mW_I`mDSZtI}Fp z{m3RPEW%kxc~)R-pF@fFR+}#%_8IK&OaJji(56HKzmBIo?_i0nSF*yRNF!Fw_NUo#*UHLO8pB8IEdW zu<;6S4zNv!@H zXULiz0_19-3m^+006p*k!VzrD0r;s30FIM~!;r`d0W;?%)Hy+YJl+6;Ic1D+u#ST^ zyL%Dn{i6zQc_GTniMu_62Vm?qIFe09Q5P5R+6w~${t{<{vJOs%zQK|05~ z+kKJ<=hnOWW*XEMrr9)&K!#ICApN$(~PFIW~>kbQ5 zF0(jZt7|VK1^(ip8e-=Wte`qY?Y{`Su!f=%#@gQuY*+~$65SR7jD?orB?DQ%Qmr}S zD~AA0-&z?wo70if)%_{69xvlti>p(dHsnYBB%hOKuMM%M7~_dP{Rai4B?eL%+^O-@ zmywQj20p4lJ39@9QLlLcjrmQ7mv^)M{TKs07v^}msn?z*`Pc^@Q|sr^^`Ad4;X)L6 zG+6RPV&(f`FUdEJ0=`4dE>qP4&snLFtEH*5VAZ+ZtUD2_)t%c>s*1r9?W^AdyCefq zi^&)Sb>^j0K@=x=w+2z*h?(fB>sjq5sF{<4bfAO&pIdb{vsO$3%hq1p z-drHx%rg5tUzi7TDrSfHprvN8E=T&CXV1B9N5I!y=Dh8Kec;k%!;Gnl;Qg_NA+CxF zvVnp0YJpdqB>jd$?0vUBrr!+UcivU$#&>qrJ?d8cyFBOFx05&j0>0%ykJ}sUN^moI zns@pA5AKQ``Q95_48Or)&FHz!fdK(Hlx$P{`0>A8jgL`f{{Pf!tN9d}p;DbiRkkeSb zXriTE(1mEnwU6_`(NdJpqPlO%l65ra+fO3N;x0U0TYHHoK7ZCpwz_-uHP9i@1|Sq6 z3%6==tC_RU2wPb@U5`mHI?pS z`7dN_YdZTL=tHTrO7eKZFl@;uLH(}t)|b+;H*eSpI?Y}3UX@a*l*T?HpMPI>n8da< z^X{g}YMjk|7Fbbj>HNef`Rw~r*%(cVy>iIu(h-^I3}DK~08r3+tv{a!lQ&Bmg{Lbkv#mb(JRmmYeT9iDZ8{UA{Bq^zt^-3eTGhw`1-^ zVdMGkf}Ml#br+0HaPAiN8Gz6#`2w@k5HeL{Z#+&$S^{(24UAl!wgdRr0oN@j(%q^p zi|-Rb^tL>;(6o!f{s0;%@*Ca0RRa6#<;wfCyysjZWu*-!i&y+2l#pJWmKZ}%wvH> z{OYhgxh1fhJn)m&T!NaVQ&kJjeCiatW4%;;dq8S>NMp!z+%a6@s*FS>sa!-iwVPC) zC-w~!pBe4&sTF`odwJSjIYh&kFry^s-@7!H@YPR7AXcmUzM+lL=66E4JUtDYSgo@Q z`=pnK1nRfsdd{I*$O%Qpas?RA%e{3H(K~O_hoq`ssTAmmF8wTIe^d_9^xb+qsn@nL z7Hz>8Vi)M$a@U2~uz)eP7RWT;#zhC$C$DlObjP|8XnezgM?81(q77p{MD3GzdMtyf zx3Oe}sH3%(_`lwgiQVe($Q^q^ZeX*JTbTU0(k zH(4|2jj`Mz{zhO>Y@d+dDW)@k2gS}U3|;^^Ws`M|2a9Rj@U!0x7U~QR&hpFKA?CRv?lImhB& z0_&IJY<*^-PVsI{&Zike>4~8f2DBwsm=J7WYhvQ&IQuKO2xqws|zwZ&RA&M`X8Hy*HDyX5I0!{%(MP02tgQT;>;} z@J~FGk15Y%?t1Xqw&h0rZOd5PaLJPk(Lohs&PMN*G=%i%Qy!N;)j59M2Z{yMK=}O} zr<;2RwiQPLYzJ}_b77~%z(_I6BDSJ$_U^Cl=XlLDyJ?M*_wNVYj&^X`khcoiFV)41Ej%2L8o4{t0*8pnifNW zx#nlZX!#1fl=i-P+U^(ks$~jmKgpBz-=SKSb_5{oC7*h^%)z|7)(antFBEQjMY1z7 z24@4vl5t_}PW5hDo_nruS5VW8YXTrd3=Vbz5;ya6Ou757TGOAt|FHiME!F=D(3k-D z%?CS&MC5PYs}qNJH=za`H^>wdcRLyYv(ut%U3#auvIP!*Vx+whgwE(q=oi0k`WKFET(Ji^P+({3XR{a^g=s- zjr)GOrdTS|VL35eTgjErhm}G|m^QkgZPC4C;#32*Ka$RP(i-UXA-n*4PNI=-(byz9YOO z;BtFi#}k>Gqu-wPec$crT&E$RAY;BW`QXyffhX`UL!n*`>N2Cl`CouB6hm+)@2Duh zl<^+GYS~QQkueD=(GYkk6Kj~Pchhn%=413QNn`mbErzeTXRdP*k|9P4S_jDY5MZvaZ-~@J1IhGfUpdy0_JNq$J?o7fD%@wvaPYHgLujY{0?bM_EQr`#GyjYi%*2no@m-O?0kffruVn1yrCWWEtUbB0a>uJ1%o#; zaoI_UEZ4`VjR{wbEBRT<{9<#`B&G$R`p<&9okkC}4oLwxoVbOnT`KvdY1gfQ55`UP z)>Ajf!RY|Y{l=)I&ieZu2d_v<=WfTj-8V-;;@|vIs8h-J9I@k-%JT~VmwZg+1KHvI zGk~HlzaKu_{OQQsctC3Ga&&8scU({x71E2l9j!I!y5Xg?#A84*p(=AQE#b6^{!*Z! z_QnEf(h1U7yjIVNC(o5ZDFO(*bMNcWdS(od$mDoWfZ#NL&#@Yuquhy=E%Nfdza`6I zp{qde?q5pg7LKri`(f z;|+he=%sCQ`L`VvZg%ds9aYd;SAJL?vc>R%1rcWLcnIqkpFb) z=t8Oh^1j*ug3))c z8lYR-f11(jm$ivv?pi0q(x7dZiOwyGy+VHKUfV!Ln_PJb;NF!XzZQDvS5bLC^`@LY z-cAjb0u_bh)|>mGk|yG?bP^!J=3ilz3WPVP1{WFU$5iCm))|tZ+8kO!0d=}b0SgCkQbQdsTXT{$tri+|t#^JE^@$YUeKRgI zx*3*^t)^_~JPhBw`~Fggi(_!VBcS@amHes!?fX4Cm^4zSZ@IKN6{}J(y1{2Fpvtjh z&dv+RDf=Z&D6j<5?V@OnZTNcvUuz6P7Uj;5O^NNaK}06&StJSNd42 zmYF)JSSN3uHkEE2skixhNyea}5$c!(I5MU-o8-y?^VxB!-lp2pt}1OC+YRdpa8)xv z=*g%7+Yiy+;grs;1=8zk&j8aR)e4OA%aHXtQRbHc;7!?mvz6uSDe&W6K*W6iwnG^< zeQ%l!Fj3Sez7pA7kIzKQ;mwXo(AiFa_@rA)A{pgV!x_|49T%pR2B*nLCCTL!YPcAq zUt!H{8MnsvdaNYz#KaZSh|6pj{Gtb;PrCEVjGg!=CL)@nC2;dHqT!Y>YHh(mh3e*q z71LS%Dw_erP5E*ijn&ax7z1q#%EDY*4&lA+>gsrh3e{t!kB4@%KB>g390ywqbRpDm zHT+!E`ij=H$b{nI;S8NXIWr9+U@zQ`COt~{HEDo%zY3l2wa;4@aqHerwByRNC}6dP zw8Q{AWNF=CSa-8bsx1q~;7|(cuzNGJMSQ#!7eQMSZdiU z-TFEOO3U?C>fSCXt7*9)+4cMXn|}2R*vbYKb}H*K^e8Z?b@%3_or&^^u+J91>;=G~ zX-RV~9P>oKLEFNnV`%R66ws(?`KDsIG<0+RnT!&RDU<@8N#HMpBMf@tx zX~+kxbvh(#;g*cxYDlI(iQ_4TpHE^W;urHqO`4HY$1_Y&)8lP9YlBN}Ew&%r1%xWL z5pGTcB0LdfSB=hHlSU1oIu>;AZF*^bcBt;KF6`7x8ItZc{jNx%img{=VsBOt+eTHq zBcA9IiI+sXAN zd7-63C^n$P-Sy4xgLp8K?H>%=d|VVSA<~7`X8TxU5{L)*8jUd2LyR z>g7iOQ$Vc0&WRyo{8VGgdEjcCw|eP96&ael;A%LB?ONwv5|+MjkgHrL;fivb#kn@e zWDP=pU3GHBbJ(4`#@b9vV zce%%sS}ZHJ-d5Z#0|SKS_I0D92#_@*qe7Zk9vgR~rw0{eq5ylW1h6RHD2J$_rRHjP z`MU|Ek}eO`$*vX?8v%St4Nhz7CR@q+hzHo;MYA<$hBitX1BNQNZhHV5ZK#xwf?A+S zq)?c6rmO)QduoA|=2w5cInjkXK{5$kolr^EW-kCnrPkWe_?n5f-^x&Win^B1)XO#^ z2D#!{8qR1^f9|Az@|7iP;5QpM^p#&P;0M{kvRMfps4dppExe?3Sc(@ z-T=zk=CR&Y<;r!*BeJe||8oao?SNL4vUjc*9dT~Ji(m5BenFWg<;3%2f=={T-jH=8 zx=u{Uq8sSJX8NH)ZX?j$p73m^Cq_2oXa~~R)S=FyX3k7bhK{er&cD)}kz!hUy>8I@ zq&o^9+0+klJu^8=B#W7Cg#e-%#Xc*A@-=?U>EV8`H;Al|t6FR#aQP9h|Ym<&G0k<)()K~`V2~gy`Km4~l7D@Rnh3sw0zUz{> z^&Tkqg!Jr3A> z6=<9J2;sb^KowLaJ9b6g?}>^UVK&@C9J$akoEdohd{lHeHjqXZ@}sJ9hNmRd`&KAy z6TqtEF@c|^xU%~)2!3q#D$9h2;CVf_K6(F%fa;_GUoqTczCmM(d_ZHhI96*#8gPQE z09n=Z%3N?m2~HVaK2t;k+-_Zf=uPkyXv){EFF|P#?SF#Rsz6`w;ECP1ZOu;0e!zPt z32CRHZKH6T0D*W|_g#F4@tU5$7|tJ#TV5bD6X4~(!fKJ0#@?$l$Hku$+{os4Ys!aH z?JE86W5>4V6Z}^}4u8nydbZqsFB6>I8Cf)`)6kE~DNAgU?$_Pr#2^yk480lAYUT0GsPnbqY@w0-VLt=ev64 z{2vUE&$NRk!_%1Z-MQZDJ1Cjan56@_M*NWvtZQx?4&H%?Z#$-Cpe3ZHYb(7^dF=O|N^a(Dv#ViZO9> zLd8}qzz`sB6(c z0y$62wI&B@!!jJ_w&4ODH(=%b!^NU-!6pKY`8nmw#cfLA#|TTt;gqeCMmEA)I`-pj zI`o*fJ|WB8N8XlWoKkK}vZaAe~=z-8#a0h4mx}>O6;(R0ClJT$b zL@P1$t|)3ai5e3Um9dU(Y#IC5x8L)5kCwB%-k+yJ8kL!A# zQfcUvfp7~DnX}P_S*MW&p`~&vGu~SGiX=;n(%4z0@=Uo-?O3Mh=?RZ0k|XSlHcXgp z?ukyC$m6A$4Uxy#^n{tzAci2I$*Zz@P|_az65#KSv6B4a^R(Op zk~CQMiH+8l8C`u(b;KEGEC3HTb|nK24pkQEsDw!G&WW!xk`42j=c@;+qof z^O?B!3iO?G{;P{d{LyL?FD2|RKt|7^L7gN5suJ8*;GI-MjU&|sq@h!0feNx`ZK-EP zWex3CIC3Eww{h`R-TBfT)oljd0}(nXWyvujn%=gR@>&P(f2-lo*l}iFTT4EceIIaVm>9rMJxl+DwIc|Bw;4VIIPod`jv*(h zS~Ud5HeVBQyFl-?7wwM|q4&0&J5HLbGdMgHjh#<)$F$_lx`r`&XVj>^g^wf*i?5t7 zP#n@H#ru3(mj>Q)uCN9sqTlhAt8R-s95F}p>Ls94UMUNLhoPSi+r+{D5*)g{1HT`xb zKc4kBmC12dJ zU59LM$Ny1ePdwRdbYmIvG*?(8(Z#-Tet3rr=0H>H!aysLF+b>@P&AR7Av0NKCWP0R zsUaA;dku~_ysk+7!DEBf(7u3cvdbMu@Z=zl$SO>$URk45>$xhP8w&XF7+X&Lz@yX5s^&dN=v%v_TtH9OCc zG{q;adNOv%R-gb++U9txNo{JUVRDxW? z!Dwy04h7$1m_gkCKC>YZZBL;Pfyv$&M8<;1@BG&lv6zM zjD%qo+jKoLZV@b+RzJnv1bV7T;=9MUh=gjy%26>ATn z1zlyh9A8XNd?Q^-jo>Ecnus;*J%^_!r^?sL;jYEmyJcX@%Bh7?e$rTItG5k4EzyVXQj(XH!sbD`P0i+SSXYOz|wdwOnHhsAR6h{0I zrQdMFrS^tIp^~Mqh3}r}%nNGbssn#rrVzQ1UIXW{>%n`;K70Ij)lq;5&I@h8j@}fs zkJZX>Nxdop9=Aw>*~A3^tiuG00D_|44+`1u(7A<7`_u$B?ZgLeK&rcTGG;VhTr$!o z`AknMu=6VODt6Chxmlxz@qCa~pV33h`k zB&q5X<-!eT;-gl)N>^F`M>$!2`Em4+kXi)T5IdVzor+#akwk4Bs@KD? z?e#G732CjTX;23jlUwq1J(YaLB5Zx*a}7gL;gbbrZP~q;Ycaktq7&8Ax2{=E(^d9n zB%#Ip?ijwSXt^A^mvxrpqR9v&YZF|dSbQnqE=Wj>4uxg0fY`rHuhB<7+cVMQ=;{Nc zwgSxXeXImmh%%1MJYBW}(fli&L?V=~e-YUo+DRA(2yXb@d$x@-FPDt9$qTqN_xPcO zHaLN8tyUm)_}1O1Abny|D7A>taEgP|a)8RPD*! z`4%vs+V}&AR&W0?`elrjSbQptde?ay2C#?V8Hb__4EBCtr%+T>z~j2 z+gpsTKlrVr&Jojta}fu?2y_7KX>{rC@NhJp~N0Sp|G3rXyRR%rxJ(h1}5JTP5Ds zEU52e&!_|-#yp8$jji)1S+IXQ6V(n<VR}V_oLyaD0E78!W_q?A( z4HR82LE!BU!C&t}VQkNtC(uKnr78tshg78s*gC($QhiFXB9d#D3f>^|TJ`t$_6&F*o={YptawF#Sied5oZ1gH#F(OJIl~U#*DC_nyQM^T0EAj9G8D~z< zn2fv<^Z=MY_Zs1GXT9~%GQdT6_%B|_jq7K|Y2+qg&-mZnpRU~jXwVjgrkaP`NNt=JP_bv>hK%Zd*+ zr+QS3__TusOU&?a;KkgVRg?mov)|u+703f_VZ`7zSY%EBA*Wgn|NeU5lER!G8NFU@NVKWA=RH4|0 z-b)kI=#M0+TH0}{LqsQV6Wtp_rIFgM@_e>VCQavYM_Q@G8h3q0`6?*jo{Bxw=@!_u zS;D|A-3TmUXMH#?C=nrxf?Zi~JB{=WFCBk%p)r9wid` zFt1MVTJavp!i1ZsE(bYoL@|>)zDCx=lT!q4$h!FSSn{U|OFnqhiY~Aew*6PesyLWe zSIFS!BmG`g5L1@_7N5QU2#2 z!$LNs3Xy}!c}%TJL=FS-9*~-Yy~7HXw1+?NiKHjo8i(N+3Mw~Q$HX?meGtiKgS;g z;&lEJ4bp}&IrXYTXkL3{&mp>b(lD>Y)Ei#naQzC^p@e(jL%ru)k}UsD20mM*U*F(l zLJbvYdMOMxzXHGiL~&+r!xfsmM-=X4FJ}DX$qG#2`&p`bue84!W4A0X18lMAD=stG zF^75uJa4KCfJAPIT4t2CYu53I6C!D4b^P#^Jy3`g6!SCTR1!Z$HTk=Drq^JXI0OcK zycef3VBP$iCE!Wan6t4e1m0Ov?k1Y&1st4(oa^sdB#~Up0KBhLMyyTA*IW&V@11g) zVbIBy2)F~XvfJ?`yaJbSGqXT?{p8yW=o|AeT1OBO0*gtjie5&CdnZluxmVu%G`0PB_|-9JO$+C3 zXf^qD{|Jgxd34|4*OxDYzut7%h`PR=4v;wv+gmgf%w_QyeveKqBPuR8wglfJH6eB3 zVd%0ru-E{m6)wFjl=o6tCDAZFoz`^tYp}OTG%O;Aqkb@neay)NHPM(uy#od;+%lry zxFJIZZzeo{L+N^X)Fi!I0oMKeWgAvp8R0)isn~$`r1~41C)w6OssL+#80Zsfmcc!g z{Cr^Iy;*oh_g0MmmBQXIp(1a<0w76J1+h(<^T$Xd8-wpYj&dvqoP<&LD*SX`zG%P2 z^)_tyvgW<`F)UjJgm~~_Kn&8Bu8+VzxY zqm`f(jD)?PBHq~Zk-~i%04w+^McEgzRw4zg%B(u@ofBOOZP~ma-d-qXX@QI_eIrxW z-Arg{G4~0ngH;R*t`L!&`<4b$&x~~$b{B>5a0=+JV6gnv5bzj&$N9t*Yl*NXeg|t1 zYYWt~APLVoZv>K0flQ?HOV?21J(vtqX@@AoTA7ICwBAYHoyV32VAx!|T$ zSGXPhIicR5co^L4CvaWFnJBQNS@wo_>=DGsmmp<+BqhX?&*#+AI<+!H1psE>%}|j} zALa#|;u*EV5^+L;y{EFY_iRHgA=-yuFF76s5QUDl3Oa_ie{l>Q$Y#;5YaIuvhBXpx z0q$Df^trttZ*mz@Kf3tC9?*{RU0V++u{PS)8ELQn5=!2L#IrChBm;z49nCkc47GRB+m5EjR$&O^4N{D$7JBac#7fnsESB zLAT8IZf1KVcp+ntuxz5&C{2YurFr#`Ek6@VH}ywX*u#dfbruaQ@4UJuywbS`eCpjN|@sFV2-EO}uwE(NpX9T|3nrOJ%LES9a- z*qqgvMg`YX{<2_4J#sb!n3kr`_yK+kCI_4IIUf-Qlck6R?x)#2inxcWM35_jz}M-M zR8D5{H{qSEXz`*6ANkG(dtpum@A<_88~uVGgn5uEFrmK(=bH?IhYK(~rXlO`{e~Eo zhQVioY8(^Yal}NIzdRZ;U$f`d(ED@o74m1GAJ`M5M3`9AI<@v}Q|?H!8eV|420yDe zqqTE&23dPO&t(qtyF-Y&>L0pE+a?;x1Fz`e^z%j=ysw2|ra{14AN3^dYG|LJYl9{c?%V%ry`@0`FX8V<9_EK~jv7gPW=&3` zlWJYz+7gH|K$dwXK9^U)DCc}s#Zb$Aj&oMm81TGES$slP@$idTF_EBnEkMNv;GL?1 zAjbg#RrVvy5yhNCNQiswOd3Z)L&SYphs-947=uW4ONf#d@*L2si|n5ao$Xt+YQZHT=QFFyYZJf@Or| zYa4CAW?S?Ba=N00vxueK>uF~HEVw)5IR|%7gt~?i0Y(&V>I7J~+C->O2D{<g_DUA=PmfpDeA2ZSq&S{S_&okTkC=>Y zbaNA_8|f%h9M;|dC92=&W$o-0%}3WVY#8eo>kK5S0^UiKcczVIw?VMaqXe1%br8p1 zLM`At+VuG+Udsb@%HfjD@8n^i0W}i;HREq z$G3vF%F#F1ho;(rpe5^`3jhr?`~_+KqS!9wzAY#oY-Tf^RGQA2c#b2-)P&CD5jECl zY(}=;bwyV!J|64BDGDw)VZxBGF z6YjPxCPU1YL{e@|hKF^q8qU|=GT@Wpp!ifIW|@%KHV|JQkldv`UMt`Q?Hj;t6lxRd z5e2*@(pV)i+?tQlHFY_?MshVNl;P3d#BH?>8Uk{oRHff$bN-mHtY2`*zt@ll*O4Ga z2Js=PnX_4UA9uR(7Hv&50w|~_Pq_3vp*T2fMe)rYKK-Zr$mZ?Y?DrZtn~ zmPAIx5B`=1YSw91?5oF;om5}huLS^xj#dm-D1g$BCzJ?Jtj~9-kw@Y#BL1w-TOOJS zeJ(2;z~{=#tOcNDh1puC*e}ZXH_v;4DY$N?Q&Xw^a%9&v3u5>kUnklEDk}Mf;`Tz< zJ2li&RjQ7;1-kIf+l3-Aj8lXdir^Jb*k1Dmzw=fLQlQBee%C%rfmYJ)NW=oMSrof^LJC6Fs1Rj`p7Lh^i*o$ySP3pkmNu_tz+(G#AYF`_8Xp-BizZ_bRD4tzEZ@#%f3$$-=vJR=Anlpx zGn*EB?n^HhcvS1`HUK=^j+L6oAE;6C8#hD&98?ocz7OJDF0ScXhG<3w5x`ckBsf_7 z56xKM0-L1u#r9a%FE_G`q2vw2`Y22Ew_L-$+m=_Qx^aGIW|QMF*e}%-`zgGsh;d%} zb9RUt+^){+w&hz))V?D5ft5n<<&klh1aW;nk)(7SZ8e~P|G}x}!fUheN#0g)9k16e zX1y>>IYIPAmgktJHMv?n+9jc+fpa*--gF_i(=F9~i$A1pfNU8b`qK6U?i4U;8^%;| z>nt(8(}yY9E+EcV$@2;s@dK zsYici@T-z{M*4Rid*W-{2=RvgvB0{F^4h*yg%&u`Tecw;JYs^5r&L^ z0*{d?;xS4_JVwt*R;gHaWm#NvJxU1##5XVM?Gd3sNQ(7Fs(bx4t0nQ`lfO{A`&C*f zh+b_@O3sHvTOdUTD`$hJLuekk+1`L79*hAP+aehH9L7uk=ofPQ{^R~a5%g$surgBi z0+>_6X#HwRR){imu|UZL+LG$y$G|FU?sx8?0+7M)0sCi~e}y*UMCjZof%l^w{uryz zzy%|}n1!Zq@JiZY^xXQJL~)3PIG@xCc#8){&he?@4s&z^^HJ$njgcfSqWQrx*u}>@ z!&6)(Cx^D`Qox^k-sWlDS^nE@+_$|5N1V_xe%u;^B}!<9Lg&IxSuNgvqzNEf zt}q<0e%YwWvCM|$v3L$UI-aXuF}(J>hF47@xmYoyqKK3pvvZf>j`d74u|<*@1BM!&zg|pg-Cn z!ODo5m>q74p^@FLzPbvEljLC=@HFm1s?m^74 zGMenT0)7V~@GxO!smvX2lJ)S$6UrkBEwaItMwwSsq~x7 z@=nHMUlux}-T3a^sOtG>0|d#+c%XbPoHK+SVuEH@&+-+cKr2yMAbD(hNj%ta$NYXhM-Wg1m`zot|yyFCWWjTrtw1Osp zhpNu^)p*K5;v7ZgY8b;-W41wsT{N%MszDjQXN##-pS!Rk4x6A zIS(eshsam(6+H>4|M%o-SYQD$`U-7gk}Xwx-xiwrgru`!vDCJBIQKV!rq1BprT#k4 z_getIQ{og90k(OoX-Z*@BXWhjPAXC?wSQT_3njTkx)^7=3Sy;nLkyU8ucY0rbL!xb ziO{R5XH=<*ZQAu3_*`mi?kSg4++AJOY}SaBu_HahO2d1uQ*3c%fp+z=N?O=}QviU< zsi7^=3ad*~UCzF8usb*S^VE)*4c;^)Eb;s3#E=nf!CeylynX;;NoX$U$-7ul(NYK1 zX8@>+nWsP6XX#de2r7B;iLk&n6Il;_oINe{Zj^Bzb*cXN+k4^Iy9nq4urv{%@SqlD zD@&bf%3gP$W4!~SeoB_ZfmDlYTIT9fpP}lB+z&JOMIJLgi1Uk{&g)8)Oh+|UFD%vZ zV0gB?n<*Sy9#uHpgp!@ej6!QR#|M>1Re)HSDudJiT9R8IJ=`P$5b>{;NoZ|e%bxQE z96#UGM0h5M;$}!TSr2~T%2G-Q`(yF5K)YQ?b2v;$tv!od@DhTp&l&v}u{Eb0h&v56 zXHsD72dh~3Qh=V9q-2@K&nsm``bDVx4n13BJO%@U%xIg;lSosm%kGP?c`d!uh|Pjz zVfQdgm-n&|pZ9~G`jm@@Z}po~Nk2X=rm!)qcFC@{JN8Oc;jPkltgVzZ$vUPa2gvhC z$fRON1H+%~a9oQt;2hylRbD!;POKWdd@GGv^xE1f>5%1mwWP5ya|u&X4&0k9VvS{S*R|f`RmEhNyo;Q83sXrqAP+5(G0=DncxUfc3X%hUbD>@) zH3Ezx3G3o>5ml-~8^cw+xItm^CRo`X1!_Z09%{bqZHg1Dl!i#x)$ zjWXwRaqCX076i2EPb@R{3It#mkjkvKO|YN+ya3|nI|q=tDcW7%vJVD$c68^n0&RkL z^Im-CHAgWo1(*~*84hOdtl<1Hdoq^<_&;IiFjN*PH`Dr*iUSoNvu*0WRX@MwVi$BdoFLH$>1a;y`>n`EXg2dl%vev`x67|eo%;`+IL(Y|poTz8qU z5aXUs{irr^6wB;_L6SmA3| zSEheej4CuTF4fMVE#j0iqLqw?62n9GJLu#?J5$e0*{Uq5$x37bOLv~`+aKsMuq6Y| zU*H~pB~)_i%>PacIK&(O8=T&`ZR71A6};j{n!iA7)wJxtyt=3+k`%P$#O5f-Hs_2i zOEZ3wLnqA2#3BZ25QgU}%iqBXVYZZG*+@9QqZnL(s3|Kl!98Sv_{W7< z_!`0Ax#_}7Y+8}QabQ#RiCX3y*bPE2&bpVo0Jf!#G6j8_Iw9ZYcXCH@IE1>q9Mv1; z;rs(XV4;Y{&oLH~Y2*^e-LypF@XMvPha_ zMj6#TprZ97j1iv%X7Zn7VpR`VE(P?icLW{^MRFKgmh+!w23Jru<3VKhNA5@DI6ay? zwt@4DM(NNyN4!Y=R@V!t=N0(>duQsqSy(mP!VdT^nm+9Rw}EE~q~)bj1+nOSov2xL zLP&7lKPE^#6`Ny^iuPZTer@^uM&}|ExCs#d?OB zFcHNQG{)I|<9ry_7a`?;fv>t7fNRA4&ncHGsJdm>!E)s!fM#nscM`7ksj}!J&CM#e z4e7?&7`mH-@{k*ENE8)-qPV~Xm zxJJldYF})o&0fp6SKpbZ)5=w+ipyuww9Q5@ODrSNyX}RF+{k-9{d@NuV-l-mEdDUrT4BZi;vypsLYV{0@oSaRBitN?b7U4xrkawi!J@X*1|Z*8FC|4oe%!HONf>rG7c%ur$G`dR5*T(|61V=z>#x79Dinz z`Nv@U$aI2<0k7|D4U{X8zAMYA)&KM@j1=+zq?P)itasm4x`lf@3g7#{>bL&^_eb=w z@ZEnY)c;bb|ECn{*7-qqBe8|yAjdh!mLH24=U4GsaWOi^J@}A0g;A=(FRuc)RBHbq z#X4vh%V}H%E7d4nh(cUV9!X5;BsW%_p|}Wm3gpykEqk|Z6iNzVXLEVY+SZ94M;p_b z_S?S3?0v^!e>!1VDrZ26aQ(#!qBwg(YC>&U^-DYg7sGsB3m;+9X0c;iQ{9}oOJZ0* z;{E(+=+S8MrRT>AX~4tq~YG zCCyR4zcezW{|j3GFNfA&g_Zvhw4TzE4rHWg%=gU@9DI6{#O7uHC0zfFE}#y*P^0m4g+3b zk4d!pDRSmYB7jeDkn@3wdevpvc=N+t_fHRSeuuq>ad&meKsHI~nJCGdQepD(yZ~;L z-=v?p6I;E;cO!~`5|;y>K9*Hcml`KV3Ocp7=cmv6DI>TLaKu3x3<_d-G;Z#KbPwM6ud zP>%A#02zGbwUTx>8$xCeJlR*0x7V}6X(b3GxSFQ>x>z^q8+A>6oY5{YvRP$g**2jG zuCyjmS;c==Jk9C<{--i~ywD!XNtm}2#kVdjOd2_QcQ-7JgF07@F&PG7&;gFsgY=1& zmwIUPg?K~?b_seVTM*c*F9rKeLWfmfFtwoCoG+~W;I#uBgMldEBrP+`!90+SB>_~P z-cgh zFlK$&aR|T{f3(`*Zt0FuIXD`bcn02&q|V3O9YboIU#yS9!ZIMbQ4Udv*kv6#XDfx#W^#uwHt)qjM1$aIn!Yk*@_k_K*kODnjL{*v z0qYFF^ms1b*=*RMSpi>ls2H|AW`LjimHt^FkGk$lZTd^#q(T7}I_DnSy)qa)yk0d2 z%gzfo0jXVODb;7D(*#t~qsel}@V9mL2z-z+m-RR+ApdcHGHqQi;H^&J>E|@5?h?2 zI#&K`Ajto>27(w*m?@q9*Eo=Wl5rq!#2UzB?^KQG=@!q93|UV$d&2H{C_!+=!bl2p zzz7_U`=dkC$_)2Z7Y>nQE=_#hldoMpd`0!8Vp})8duheO$`R844JW+XMMNW6SK-T9 zIAa%~$bbUZ>-l11s_3jb_ZR{%95?4kp60W#&IrkhTUq1Mkvsrf-5K<73uB$|3hsjX&G*dX<_Rq)Joj^BvfAU9&w!ZXJWKOs7 zOL*hwL*0%+9mW8$ZX1}o}kyL4p*2gJTM#1OZ~y))_d1fJ1YL@GvvdR)3`pVHe*sod;rfqeZ6q{#gKs2!qe8E)^pV1Q?va(qA1^?*_hc% z5dnMmrdj;6`B~@I7J|>)!O+>xqI@gfmL^uhxMCsS;Nsgc!AlxyEt8*m=(7&JC4t4Tx{QT)~$(K!{bF&_%xOev*sXC`5a?jMN6IM zlE9pqR>5#KKZH!}%L8y)G&FJCO@(uo04$Qku(o0v&Rwz?b)$wNXvd2tuTAeADGk*q z>>vDq)tKPv$v~0we5{HVIuj01&K|Pr@tqIxj8pRIV0?(Tnv3)eBlk4)7&_)zdsJX1 z(-R0JhD&Ro{p6~m3yr?A+itq#qXNV#i@I*VrGRR=xA1rLN0-5UnnTNYpT8Fu>h z6nBrXf1k$isr5FWzqsYaYzeo~kSl65%JI}4g7=Jk%4E|B_e~?O?wtOR{vgx~x0&JG zgXj=3%0%XvTxXx7cav}9!Zk$&6PVsaJ-&{!4hLPWM7PSd^_tyCz z|F_tWSd5*z;g=)nz^Bbl`AweHzcV&t&mZ|ukxv&iyL+Wo$WQs)`m@`8n6mq?6$OH@ zGnaYxJca@x9aO?rhDw8rHZ{n4$+VSC96(KmbHpUpAzKjX7%=If2>-?=jhOnYM|{T4anqlzn^heyV7xS6lo)lAyT=gTq7o zsk4^c;d6u02Q7w@r17?HbCc!BV~6ou{f#9ufAkFJGD$V`cpZ@6fPXVs3_ZEb98mv^v`uJ*0!Dwc3+OLD|b=~ z=&|}!frHy;i~d}lf#EB)UKX>$=)c>OfY$hmX~mM z^9u(}jZK!miCCk^5rKMk)Je%jO?eIeKAsL)%gGlXbP}cy^XA(j9knBJk%X7jlaON$ z%klN!S9{QT8P=d_;oj?m6sJTg;*uoo^Ar8Bp94J=Kosi#YK_Z!1; zHC|yA-zEH1>h&e+*Bq@{P+}d5%&TE#?fN#*zOJ)zH3Sya!@2lIwSc2&12|FZsSn58eA1pKnVI@ip8*jyTEur17PeX+}nQn6OB=s^3|5j882 z5jCgzkXlLAjg9C=mjgU85L8_MwAb$VzN=+7zCTzl@VLC+_TpbMk|wFX)26;@hQ3~z zLkdMh{8jLR7Jg_AsL8KpDGJwukwz0h!STETNZ5v+b|3BHV~s3o$g{^q+T1he7p zVcZ=!fO4w2LUbbcRu%pFAG#14=;n%61lWd9bfIgDmqEoLuXy@jPp>oWt%6k~FGp|@ z46$mm7-5{EuVhi&U9b~@kYUEFdg0-c$yIszmBQYtjGF#TD*G**sp;a!nU0gv^BSJg zr{?$;&Y{FPbh(u=HWPijz8^%XfHzW~wh_g9Eq`>@7Hxe8Q(wnv+0rQ=>8{s1(>0;9 z&+1}#(Yvh8vnOsANYb+=rnEzr!3 zm0Y+lLeXksx!_i1!w%bU1sylm_F_Q(8de7So99?fNHBH_3vQ{8DNI9-j~$VK$H(r8 zC-22c3d4caXCiHXq4&<~@KQ)7y1hY9$WRE z2SNnCfmsz_vCp16izXIBz&1+}16DfwiJoj<#b9&9mUP^m_m`WbAfhrzL2sM}S@SYloDP)Xf-66b0a`}UY z4r`%1VPaT0Ms&8B&we;}8ysFw^9rM3r#5x>|I9i34J2^@Sc2g2PVF zU}RJ$D46FZlZ#M5RSmS1C-{!uu}F$RYz4-usMs##0Jsusvbn&v^0D94EJr&E4!g0G ztuF@j{1`qyx6j|_7MzJsjODac5UI#e{Pu#MIXxBCF?dF5I!!<=<*iQJwDBKiX@2pc zo=otZW51Y14M+XNr=mIyy{}girNp*T%~qnlvaQkHi2I9TF{tu|NADP2YxumyEwXB$ z_WSN+XY$G%?ARLV-O#1A>bOMpnFo=Q=M?jTFXid#!_$Q{Z>a_R9EqKv_gaJEM*~H>un8|J*U}fnAgcg z6c{>C5-!l4_gfi{otenh!%wjIxw0zM&9j&X*->|c$z6f34JFu77d8Ac(E}bGRz65J z4~+A1zRXOx_(tIPoXv5g4U-myZulzIq2bn_pDxxZFyjCv^PJjD+cA+vr(=; ze(nS%oDnq8-#3xrEsqkK^PGKSp2R&}9OG-mD3-e2BF%P`gOUqb$-Eil)fN%WAX`_a98X+BJw0esq+leS% zNy9Z$diHbA6^S=HQy%MN)Oc2@w&L)M0tu6gbuuV#?%_>*!7o8jP{om1;8}W;o2cHr z{qbZocAjFRzfw^3Gjg$Z#=U9`EX>u@4=P#-|FJU1$+rA8O4la@f zu{VpDIWwgoB$NJ$j31bGZK7o)tgQz7NcsyMKhPd6s@j*n#K%kY3PqS&j#!DbhODT$ zuY`Q{$|XXcc;Oo%|A{8wP49gu);2Y{vo&Ti&S#9?dKDk*TiweoG@>v&p|tp>?@_G7 zK1(Njn)kXXI*sZ(boIkf3(4o*l*!_!AqtEAHf4OIy;$}YyQVi@sI6&gu?nLM++M-WRwhMW zvwgmE0Y+~^GUL@gmyPeyn4al#mG%A9cf{>*N|fgORbPx;PL%Nc_W5fG7&rWDgJM_w z7(F^lQ1$qGqkHqoZ8aL^>L`U`Tn}%5RJ@OAfqG57HO6Q)Ki)k~eVExJ**G;Mx^xu$ zSXRfHn~HHZyKev)ILMCzNr>K-S(IM z8MQ%CKdLrVn)y_ctcEARh6Y=miu4faK8vBCp!wUr8y-Wa`;@%yfcp<1WSFvNto;of zejo+iG5nHwOI*zEb~)G)7r(a99H~y};T#O_IcSe$UoV@6&hI8hezEO-gtlGsb$Dp` zw@Gzz%rETRgZ1l`!}luj8@{>y(3xNQ(VbrHA$)5|mzdZMG70B0%4ZYq{-LFYx1lV+ zD=?V6h2Ovb99U5Ch@tpSyANa8 zgY)wr7V(Zn+Cz>;q~dJf1f`bIw;vpPtewWvQn)h~d)d>nEp9Wpv5u-1IZQiYS%!(O?BI&-J@hLHj zBPmTr=3zz)BL*qPn7Z%iec_@HAH{5_aIrqpmOqAoxKz0M&F^LkD<`JQ;Ci+p`gs}A z{K)X@6KI6n{~x-7mY6-|3$y3@PtJm+UO>D$C~A;CiZDX^zOLGH^B&GH;!lOu%CWm@ z0X-_XRnw`B2-#a-PWd}q#aRjWD{^s)Dl zykAS4=ZWaoP{CYjsxT_XH;tjV%UXui%W2beLtmetkO01AwONzna;+tI=>g)&V%uM-0ZO49qEp*yC zcl~$Pi9PLl9Dv@uOSSiQiKjqfOPC-?Rp z$Z(T48EP(Ll%?+E|LuD%;qMQrhhPRJ=83tk$?C$g)w87WAYWnyj@?^asIpR{j8)01 zwy^sh)mzRc6w~J!L-CfyUX~M~jQOH&3P_1!Q?at~3&To2i|jgE27bnOZehj1R!SGa zNqy!TDSm-O@}6eb&u6I3^O1aT79{oA(jdd)`D`tRYA;$A0^|34ckm4i zO(#)1wo;7Vh<%u&=pd4Xi$ptm#e&WO-~OxpN*)pmK_BRYb7|w=y#&Y4=oq~7jRe8Z zB!?pR`LtME4XhcC4mYYb{MCRu@8Skn6vHZ(4hQkBF0$c!`C2DtR_s3LDCDzOv|5VD7YnB;nwA|mLEQp-XQDA?|5e&?>ZI$Y=}1g zTZAXz>UTJ2jvz`!6jUlkM(EaWX1oVmlL9TxlO~6(Ms9paXqeRUik}QcdG(Gts?Sdr zFYN1-NpbgHkV#qWlCd(^5SzuaI|%kg)r%P7*!x+ldBVkog+6=zUd%baNk_}+_kGqR z23b4O`nWsc8r3%DW#Qrr|8{DMd-3N-A2Jvsp$vZ~`H-O` z->dj(vC@tc4!?d`ieB=g;Hh$SK97{^-%t-)u}jty!K<85ykAr)akQM^3Zx~ZzZ77ZYn|46#Qc!w$;?eh&a(1cnn5wu zcng_bQS^?fFt%N!_Mj+l})w{fTzp8rIKXfU0 z?7jVLWpzMx<=8`_(lhKRSM`%oeh|yPpJ3rVS=fs4o+=enUo=xv<{A4v2LV*8(3eN~ zoyosmd4>L)COd2hY_e<8%j1kj!vai&DJ>mXrp)kffL(TiNSEEt2;0n`Y5a1+X1d>Z z*`*@pujkA@SN0sq!6Ch7Z0G}_sDs@~=`-keZ1Ec31Hg_Lv8`WC7H_3CFXpD|)87rk zcQGz!twjDb`)SGt*>lqiE-4ybrvr(LSykt0p3EX+;=;NIwh=fr zkwvgjzrg9T@v1E4_?m|cT+F0#& zd6FH~a_PuKkJRX|qwE5D_Jf~j%IwK!ttP!*siyQ+2bNW4Rt_c1y0RBer`JTyo;S){ zw%;ZDAD)spujy&{{cO7{%dP(Yltfrep@R22_M&%$VquXKBZ#R}>(r3OCdlHw?7dQC z@Tl>M9<5N6Sn1SI*H#LN4JA^YNfrF$LeVuwis7Q|%t{&i8qZ#Klc1OHDCHB>P)llH;DcW#&G2|_~M0yEY<&eCC#Y>ath zq*GlS&gk8WX|Hi#W;OELYLSLBlqhNi#JYbqVe@-iPu-7hid0hkKTHo9o`ObiwL)zp z*wdws+SB!y=^@k$P}$iO*y`3GtV}G0phiaHu?#$}aTt)<>+$h7|D85$!xwx0I&;sE zP5)9K1)>nIgF&)i&$sERc#_Fl|Z!(0iSUu<>8lj5J}tj0WF zsH-wL<8^imIh?`0*rsHZF?(4xf-P`R_1+BuML>rfi3>A0!{1rkFP)yayfDlbH(CJi zt*<+Fp_jeEsD2`OYFKQHZo*dg#&7a%^_{Dnu}Midm2R|u!lYW@6&pksd&D7_J8kms zaEVXdzl4kg%!s!uN{3xH{<|5w>$Ds%hwh)9xdWEA;c)KW>bBWKoEG>83au|ZmseA=-;p!2BwSRGE||HSX|Gb<<>7F*SjKQ2v zwqDt!%=W^spVi5j@W|<5beoL*R87-~#xR(l!>q~<_j=EKNJwAo?dH}Pjd)h5U0tb1 zTx!6)PPJT#zD@gnLSQ|Qog!>1u?%dj*&z$NC8;gtJTh*cf3L^z1}^C_oDnDP74fQn z(qo7s8xDUr}Xc^b7=yZa1=r7VUY#Jxt(d0w1V!H3N!rc{e11hhN0uziEh z*W~1bCDo`g1~~QHt5%RWKqN@8)MoPkly#6_bh33~G|EyZ!;<}(UNg&XvZc3d@tt~{ zaC5r9_fpMRR06)nbC}?uLK!{onQdixAikfC*d++_$LCyRrr1lG%8*a%>>RMelIwwoaKkHt*mspp%(Dv6yiU$KzXR& z9&fI1APUFEWae~ch6|yco2xh#m*mKgQ=fhu--Fy1u>(Gab??b|X)Ayprc>VjOvEoh6XeAH32*mx4Q9PgX@tRg~Th|Uk6W&}H zHk(eE1mlj~c6r%1a$-1t7d&5`kcD_W39n%%73x{n{donvv$bbjVijsONYTTgtsWq# zChTZlx3abyOZfsNo**=4zMV5*ym9Ql$Vgrmh6*Q)_jEb%R!5A&8t9)!j90$~059qp z2_E(EigQShK+)eEhiRzj%DOVzP^tGAIi{zCmI@EVbm~z3c219BGWx>9P=NvExWI}p zM`G^WqH<2_`y(-5J-&A^(&{O_raz;mb5_|ZNvPKoUDVw~&na3puJA#9XkaXvfHh-x z6bJblF*HhO-p{Z^IS3L4sjn-{K8hsYKnV$v8%i+esrz6 z)OP|yw>9erk5zT5h@1TRO2_pH#>ino)s*J5R=f>f_T_(;7{@OxV|-s3-vm+8ATZ{u;s@Kyn5zKpcgDF2t5 z4>Dlpns#{9)IIB}2vJp91~Oshf%w-6GpoK%m?4*QCd_2O1DWB3`@767pA_&5W=b;b z(avS9RIh~3o`$U&)BS3`7Tp;_-abt|N#1M661it4O@t`d9BSmnEZEOSFUHqoZ$y{5 zIb+dLDoz$g2iC=J|C}=0A963gxmRUJ@JKxqb`sIdpj z8_}IteRh5RxQASV_4H~EFyb=v^PaaEQ`nL5gAyE!Gu3!|JlC|b=)xB*pbcvQ-gUqq z#en`2?7LnuuJW3 za}E;o$m`Vt5TtFy1P+X(+Ci$=kbWX+H?Xmge(8w3fG(miJ3ssM(wsed$b*n!`IqUYAGf4rR(0r;b44!0UcqWR| zh->Jf!#T=`WuwgL#3h#hfNoqm%jiwM@>#J4BW5h&rC#w;hd{>}*dY+`#}0u#f9MeS zSNXgrZsbys4IkUC4r$xiIqDN1xb#CNm^5<5+_baXu7pA(C zG(39Q#T1r(3c+{8K4q~zI;ief{XHK$C&wyG98~5%+gs%xtlx|0OIT>BA|Ct}!f!JIaUY0r z9Vr1bX|Y3QzWq{*X&-h}tFLPCGUt%~;^y&h2Pi%N7{+N!Q18jMPFQ>}k4=IdyGBwI zko1qa?&M6Y1Uvwc@KR_?HFgPOoSP+nWBpUaXwg{)s?y6=!N?o17&`*G$|&lq_zSfO)!=$flHBBLc>5k(kpH9O&6r*W$5kS*E@rX|CVOi8B4v$jAZ zH&${6GWwlVVbK%#%D%8|JUmyESQ3)gWSCuG(fD1L!ohIT88_GqtcCOfA7yTl{>53d z@{OR}mtNr2k+vI-BE7&exS~h*c=ll~^v+57xYR}Vi)nCee{=lj-SO7BOs;hVv&n4ARj%}ys?8eQ&8$sMr~(a@UDD9|?Y zV2i#qR%`3rpIw4S6JjtHNht*P*?h;d-$p8jz-|W5oJOZ6df`ni3&2OPr`q^3hr3CuK^hL2FR`ONTt!BPgbBeU9 z56fybW;DBDi+g3}nz$P!l2`T&?wDI>IWk~#dQXty(fPpI_j-vwFN%qG8)#uZktnqK z0J>===Zs_ zqv0fu^|Nso#+0LxJwO@ex3h0J`EtudZd4UAV?qdIz%tI5P^-ex7c3f2QC-&-FO71} z_+?MBYq)|@s4{8XThV_=V|uk$#@lf3j8hX=RF}1mjjlxrFxRW%D!QGHg#V_WSDfOm z_NH9kLnP9cd?sQCxV-A@wTzW<^(bm5gOgOh@M)AahcRNRH)<+3ybYJ_p+k(DSg(dimMV*M}8H#KpErIBEyBy{LB$KX^&svh2o} zKIbFEl)>DJNt$;j`D$FV45#F4%gW&U9b0T_3a8n7WDCcy zCahdrGm>s*=`-^|Hn%J2VfX#wD|qvy$({`Sbf0WdrC#&KNrqJt zJ$yQ@B3!HS{XgvOUZTvMOO)C3d&-O}Zj(`*^0`fDb8=ti?d#bVwlt@d#T>?RW+;Iz ztsd0Yx5FS+uKh$ucY_Ns4ssY&OPsMZ1oH+EV${*jJgdnQ1>lfn~~HL z%8+IC_de7zqW7L=&WF5iNl?QccbaePYn=&wNZnXQQ;nF!l6AH zK`%Yt{0+y4h!_cSiTMu&o_U3#rb0rp_Tmx4K!uU>fZjfz<*^(GVmDd>bEr2aYwlB! z`o|y*ur{kKlO{Z}u+cfABuswH6? zzi08mjHF3ew6EGDrh>^^sH^JQN}09lYj-zTNkt24PxL@UFN zF~^qe6Zz^x{r%bP==AG?nD<6=t|w9w^7{inuQUv=^x0=!M$?^RnrQGiXq0q?90*Q` zCKhYU9v-5AFi;uFxY}R_5`23uF1scgyx;)?7H%04Kmw$GJby#!dU+IV89-|1`0_s= zTmV}J5M^6(f(h&Ie%D|p{GTR3S@BYop?`D8zM!;-nlrrsp9m@I$kgl3-(in>=ZNdy z&VZV@YpI;!ChxKL7DrBJlk?$u3q1z7{N4t+>a^zYdg0Qs3@@(4clJuxD^R}t!h9NY znL!Lmg4$@URZ`DL9S#;*w^3uQ(SCQD#Asd*?#-%D&xu#JX`UoH#l#1`{eC1=^!f&) z>)hR3_m*Ztos$sr6L4tAiW*!R3U!frAS6M#P6QetIa8t5e4PqqbLPubsIt(dsZcKf zGlJdf{(8jY7T_IQ5w`SC7Wfk0@cmLZgqHM;@5!i`8&9luob`H6IBUs1xQHsnvRA9| zQjGdY4txEmM_s8hO7RZ(Pq{lb6E)@=s$?}NGX-J^jFSr|1OfS>8~IL;#u_dfg<|4w z&+t5a@XgE^ulqX0XqJ}eBaxOM-jgu(IVCTvw?QBov#SrCv=Df~X!$gct_EiAnG%Jz z*xOyGG5#c2DKs@+z)OS~O!BGuAQ$oGuY4J5<4qE~xXnqu_h7^QSGJ6d`&lB($m}e? z0c`Ylz4OEK;&e8z7&hKq22gR&(54x6;gZP&uqKX^ydAa4n?i~Ah5-Hcs;-dtICe{w z#gvJqu0sY@p{$u(nyxgRb-Fg~cbhemhbOage`_l3jQ8R~37_X24M>#1!{Ox~Y9RNn z>XwUzE=iALF_MgII05r)^$!hdO64%fw3TP0g(u>os$3#q7yZkzXtgA*rVBOwB6~!s zMa?qQo@fem1$}L!?^eFo}y23NvFs^jIA=1?jkqa zSJBX#vK>f-y`$ok7c+|p;?~hvGzilAGIcgzdJlb<`_L{dSg+LkT{;=rQ$|u7< zSK}G-y;6b$zG071@z_3}Llwp`!NJ#3WE6_MGLllP-XylZ&}%k`Q47tt zgJ)Wj)#u*uS{{I)BZ0fXbT}~jg&b#?RgbwFYfR(0ul;_cX`qZqzHW84XnmJU@%fYL z%dI{@Qa^PsM0xshdX1S~>&g03hn`@vFfI($`XSr8wdshk*CMPHX2D!Kg|-5)mIu+V zb33z6!^V9VVYN3E3jF?ReB}TR5%+))Eq`6n!?4|?T2?X`1CL?oF3@vmCt)1AamSEz z7>K-G@K|K|F|Q{*RiE#xmAE|h;v)KXaT@l&O)^BEMO}3p?ShtdO=!mjp@BzLnpm8x`tMGuj|JeS!v9ezV9(i z;P#eY)VI zw)XetzV~#t7^u7D0uv?$8S>4@Xwi(ukhn1tTAeExO zKlie<^GMH^mVAypoo!9f`mQIRs#Z{j;*}$Wz|mJ~4sVfJvSXX~#ME2Mb~~9YWz?_3 zuU1uGg440iRy#HDJB0FjH~_BX@)*kD8k7CKeOoE$1g}wcqIc_vTWQ8$s>M;3e>n=x z=y{LkvdcA1rq4TF8wBEB3jJv)R?ttE;X!En<0|;Mx+~4IdQnGadwAUi80Q{fMjoDV9ArRoPkm z62y*jv%^%0Bl^+NDXXvNt-e$;Ql1laT4s-rgdLio;`E6p#c=yP*L%Z9qdc)bjpDm7ZGSczJ!Km6Ed{Yg>Xhr$WV)N{CL2~4 zEixrxH~R#|w4roh*_Zqyot=$qz9rcfIWW{GN{|D@Am}f3+L3&BP6qmN76sJ=>0%4V zNEvs_6CF;5U@%LtW{2^$j?~y=`qv(+VyU8A&M}b?2qMtVs>@z8G zTaQT~mM+vh!!TF{ByhWxE~63W2>^JW?8S_f35<)i%zf-pcgGKS^Igq~+4kMU!oQYn zxnbGXP~CN-NEcy;&xdk zYG*O z^tE-vzP2p`#f9^;yV%aGTzXBY7D2(Wus8SGuEfKkMwXZ7Y?_0kF7jdwudj=LIYWDV z8XY#nQ*78hhu`9&?pJG+>6(}*up$0{NAF0oeQ!v8!Y}JETRx{m;hk%ZxQ8fiRRF~_ z4HgX5N7{-7cvVuhVD~x|IR!(kY0gQV8%bwe3402zw}n=xz%48~_FW?!hi-a>(JZFy z2|}LrGy#dhcct{_=6i7y3XEv-j$!8VBBk$#iB0k{&IJtVz)l42_md=UM){Ke-Ee(z zH|NA=>QN9>kH`@oejD0bX`O?d*-U7M{7}vkmTOV&N0ihiUJ~UmbSrBS53y)V!Yv|` zkEuyjw-p!?OU53g_PlvF(Ogdsj28`ZB_D|BbXZkg{HMb)EIY954o!H{qJF;ed@fFj zwUx3GLAE(d1ADPNR8zxua(`c|ZOD9FzBIiy;9|rV^E+SDWJOc)MAe{En^2D{+s6Z6 zDLGW1NdGtMuW#wSehGIs_b1vKHI9@O&uym@w|Am5`_L)c3n3SLBx(f$(`#m5MkNd# zahM*0!R=*_$#8yp6z_lZ20n+h@|R-NDdr9hT9v7jJgsUz!|_9WW>(<)(_!OKO(-9Au5EY-`0 z8lzmQ+u6{_2a>0lpYM}pzBa(!=h;5}5HCtu*orAi@bv?~b($?PvG9c6`o;%;4Z6__7ov@a#l4sx2;dZYz)t952zjJ24 zFL&Cg;gYHhzBSD`-tNb*$J>>^{Cd2d(9-dCt~B8W==}nF+Ym^fI?rdUY(}AmK%TDO z`Nz@3omp_U9HF6k;!5mG>la^U6ML>N?=Cp>Z8&jHoZWXCu1uq1sAZ2y-+_rP2W52< ztEx@;m-L!fN`T!W`fc+YdFYh*au8YS)j`*SC>gd*At6fb`{`*e=XSwqFox;{X~>Mn z9dR$EI0x&+4TlSoR~<*k)YF_fC+lG%Rv12i*7+0M@L^6auhg>>%9X_YqI_`0Z6N@b zzb@IkEGmQ>x5^2*JmfU`Ql~&pk6ThHFNgka*P*NK9>(AgPKB*VR`v9n*$j$ywb84v z10f5v7Z-cE>Ws9jR6^!@d_*zx`=XV+e)9SIN+lu9i%Xpkio`Om)|{jDstZ{4Jw6u$ zGS(rb%5Lm2c(|Tb&_6IJ5A9-|CAnxa!pPc$p-T-}Ljw=i6)i$lr+ypzK5p)BJ<6y~ z$jgY_%#lc;>P^|!)mx4TtEF5??TO*%%q$*j-cA~BLMg$F2Zt6{UqdqBJzUYpu?wyS z#5Uz$)t4g)Ph1WS1ze?jq*B1hqkbaAd%<%(4jhjn-0Dp87f=Uawuli!uc=_{b&nTV zLmKd>tJZDAtwJ|CsM5OKF8!T3dDEZF$z}VO%*hhE#6vrm%*oUDFG!WM?>-oso%4P= zlrrc2d&XJsfxdnnE8dyrzOmm4UA}$&y_m}p&g`uijT%zazyZIWGF8LO&cFg0ai`@? zg52>xf4+~>aLS3=ZDRD8wOvZWQTc3E)av=|jYi@uJyqgVOhRvCl#SZ9l!Umg)9Cvn znm=ls{wSb1X{HqOf3N3zVUb1QzH6a_C-$-K#L)|DO`T0nXV0hZsF*lWk}aKPN6Qv# z8f}cU+f%7~Uv2G?)AC6_;mWr}o>}&it9!N7t>EoHNd2^oOLx1!jlAu~${(W2_2MG( zCKeZpi(H<5p8Iuj|NE9@%A|zpZi;J7?Y^Ifn5yjKD|;-K zM3LAQ zO=5muOgsO}jJBqk8ket;!qNAPi17;qPxjPg%OWM_kf+Z2t(3^fq7p3kVmk8*!P021 zsWU6j{gTc4Edn{dRiK z-8}3DEViz;G9oKRfe(Z8o4QkF88#t*GmfDnOML7a%s02#`^@3gYePY6)HXZ#>>giI z@U#)r-P*85u=wcdxzFeFwRi;ICck!^N-fxxZ?9s^V3X-TU`^;xJy{$|>X=a6i&+252-#jKVai6Lp zM~3|N!nlzRVoTJIb>#sHb6>Ltpf~HDsk86dCEZgon+hurK`_r{gbfq2Mq@u@YTNgq%0q+HW>@riKLDDj3{(>x@ zC0#FyBxq2l8#cFg*knyyEzkC_=b1GX)D4Q+LiuNhbAo@t>GyGIkjhUD=TrrEryI`A zNfurp*hI=*vp+F4cJ%~P-~AU{R00K)R<&Y89(OD!h_80mV<4CQ>P?t%&*IbATbLb8 z*`#30!_uSW>RtJK$>DZd=c{=IZ}ZfkHg9utJvTzry13_-YVA6~OrCAHWP01ZsRsX; zR3)60EA#H-=1+IaY`~8*Fxy;h_JE5Cveq5`TrO9Vm=M>@3=zN0e_EFZCr&Nfp0P=w zBt5I*qJJ&;)jc*b&eDFB5orhUx}hOIhuxB_#SU*?{bR$L?Yzb<=C?5T$c5s<#j)e; z6AiP56ar&f$Rat>y{ct096QP!5*O_py2jqBw#wICJJ=#@!aa5YW3*;LR5zo9Z3!NpI#u#aPSG9g0Ika>M*1(E zQ?eU=+m;)7RWjp&xTQYrauoWIs?MV-i!cv+DYHZRDYxmv;Cm%lwZ5PZ+v5e#vI%cd z5*qTRWz|1sZz@OK<4&XtXvBhhKH07xoM3IUXX><0o_|8nc3;H{w-drJN%ge)awnU} zUj|J}s;z1XA-~U6?{qk2Ke~NNd_<1w$+ml-2%^)EN(Mzrj*N-k*T46PyUNAw)04IL z39x;h$7QXEjyi!IzODC5bF=hI6s24aY&#Gh$0k2VY>c>Z8?2&Da2qFId(K?PFl$%G z<3Cjep{gvoAA$Y1o%h*Q0xFSLK#$%_9@Atlb1PX8Ig8oFajsVs;Sr+q0D=3A#%6V?*f%h z&d0ydlsJX3vhcH1(tySNqouaIMdc1^Yr%$DIk4>B z%8hq#)}U^I)$u7r@U>v$z!`o+!=WT&K2y~sUA;R}dy+}$jJ4Ydb}MB>?{S~|DB!R8 z?vpp$!DH}sW=9`pVn&?W=rvFyydS^O%h#TL?x`m`PMc3JcDtg+MF%^6$1q;u+s{YZ z5>GX)*A3TAlB5XnePz&S8s6T|2pRw&6Ibe2sumu`)qbGZh?x7{a(d_%!xX z5?EBl0@*K=2)Ef)s1-HB8-1y}e-rSZ2p8Fp-?76xfWCggg4WI;t51>8IpyZMAq9uR zLvr0OiQ|u$2K2CMqLgDcA~~ltZigAjIWmgX-uFMAO-&S{^5*F99X3(Kk6+IaqPU6U zZ1x<;qe(m8Oeq^Nf}j596(c$HL(Y~Hz3t<<+a;}^U;UD91YTy>V25fdBr^I?AL`OK z%}I;*S25V?__=}uH&x7^KQSEoyG_8{v7p`- zmuk#{nUW)Uy4#zPlrkFav{`qnveXmuB^&(P4L^ZjiX=i;cJF-aoOh z?xbJ;n}{hTDJoaCw&~pU>cFay%7oi@Puifbgxy|lyviktY3{nqMUWsz(7Qvrt@jh1 zcIt}SEuYcrd;p9n;6*y?Us}W00}y&;Jh1C5#dJmcv;`~r zOm<{w^E3+7`d`aaQUvMl)cZF(v(9837aGM-xk7!M>)Yf&M2iUUTP78#b}Q}RVEHL= zm^z;f?+8o0)8>qno)VqcAqI_`T)iz*JdJ>|KL zvPxE{_^eCJhXn`lCW=?|DR``neSsJE%9V25JQo|ab()lM!oT29-o7U#l5*5?!#R<2 zsK}`FY`t(EkP8(&cKaMI7b*D3lP%G8clocZRr_hN)foJNM|xo*O}`$!GG{cDB=p3u zcf71$tl*3%JM#B<$q(J{QYea1X~!-P-`+@m6XkP^YsBR@fDtBg{6Cgg-`u@p>Yl%x zZ_&r)4U%IA+4v4yfrd~k<-rh`^`zXR0urtvPlsn@EK);>g2Aozc@$~wpHQ4ECUB@+ z-f#gp}M$t#kMr$vapl z!gt&f&)yWgvClSNhhRX=yL8x*V2O_#^*Bmc@$T$9%sa7nD;JtZTK#-uK(HUT-9Nw` z5r3M=7tDGZJ5ro0plpC8Fn*d+m1rq%wNQD}ibmG3*BM#b4hXhiG_h*7^b(| zTJN&uDFhS%9Q$h{l|10pKDLc-v(DBrA_jnaYspLKEXu)}b(p!&2e zc@L4LA_0sp>6f}R8Xeh3^$6S1QjV1krk_0lpH0Rm8={vZ45t{glIs1nOqqw8K5riG zcM84gpAg2p+h)7-5>1%A!dnb8SQC5i-iX%F9a-;P<_q;vr$b{N3A~KxyN`KPJA5`v z2Zr$nT%nfE^~2+VtoE#hn4=%ROLE^*@aa$;jDJ)7YK`v!oYhr12PdNf+3Ycy+kJlIS!lc94wIcxfQICBr!#*txe~SY^i|Km zOxG$)5zmsu_~*%hjp~{jfdo`YrEPwt?Y6v!EAikAE_9$qQtR>yDaW6}!RiL#<(SPL z28yDf>UMn-L2YlwiqXbVcFz4@tJQ>0>9g}a7anFhRJ+`NHmTNHHH1y@R!{YvSXt#- zP5FI{In!hLF|@FGYA&>0if57G=+pl2N+|ObPUZwHYREg*tJom2Dzd3dVOb=}U?DB< zZKtYL-W38P+}LuR>W;!&##RE#I7wEtMyUhNi^N1tGwcE{ST+d{MrF7Z2d=9K@GRbd zid37sCVO3HyUA_!=^5en5m}!np?jB|mm9ymy8DBir{?9%yZBQJBGr1t7`eny!P7g* z+pRj!)Anqf^;@L2e^O$s&hQ?8b~b~_J4zV|7+ZIm?bV01;Hr10-Y66ilmaE`x{?rheJX&wN5NB z&2eJqm5tNx$3m1LNxRxXi;YRI!Jg<&ue8d>PLywl{8WT5If2}M#7yTY`TTQ5LYOk@ zS-t|uMN}^8?k5qQbxAjxf{~YT$wn|D_4dU+U4i_-QDxFrvXE;wB)`YVHJ>u7`>J2-a?^?}tMz*d*K!Eli+7TN1P+@K;+{v#t+e?mfwz>ijg$vhJdrdz-Y~YjPd|9#C8SLIf~ZfJIKSoy2XXH&B=Gb} zunpCsRGg3fGI;sex$K^mfXnwSk}J#%y9!EO{C$Wh`zWBxO-IX@|tG=6XVyRR@?(QndL{S@a=r9IY()Cc%&>EqZ0!fiQ);6?hp+J2%)|!~NJw&gX*DYf)%~>+$Qq>ljBZ8u0 zBoC(pE?u89&(R&Kcv9lit3`cBceNkgVwKxJc;#KA>x_u=h=FkF)55{^d%Cb^$hyv- zR|;KMC>*MZEAlE(4@zYe$)`s3q~~|#4HighOpFY-w$2t^8Nf_lf1Q$m3XkbARO$Md zY57KYyHHx8X@aWHNaU5SDpFwoP&|+DV37{B{GO1-j}EtcZso`pY>&&d3F)3GbPEcT zu)-?Y4-yN1S!gDeyOh%^qWfI*4KWJMZmsiYKg>@CRb&(>#_g=$X55;$%PzV{kw))w z>3Qp05zUQSZMH+m9Dn+N9?{ILuA%+DjM=ZFx4K4cMLsb@${tz+d;-#aqq1aKx^|Sx z&0hz#x%TP6XWAe+e{kxu0qO&x1_FLve^Pf+YDIO*I90XuxR`Gz{-eEQbzu6 z;Q&Kzg>t~fzS|P^;9J+yQ^am0ybjD@w8`!E4AwOb1?%h!1C9juM_gkCFb5#$kV}c& zQ*;;AdWF}{ipq-UEZ_dH?bC9an8n3la-y=Ntu}teL!XM_?FC zu#gGL-~uL3>wi_iW9CPWNQ)E0eJCX`CAcq}da{q+PmQn!PXYi_K&-#s4Oip^CQ? zC*UkT*FD+g>RksS6eE&%@7SPt^VeqW&^mOpqO63^VFB_N zf($q>B*?ScMu|VxbegOf>E{9K?~pzS7k!fR+Oh;5OG-`W0s8^dL!K#tEQR3ccU+mG zx`_IUxj1lB!sFNbA0rq<^1fSY*_)nUwL$S01%d#RKA04AaKgc3wC_rZ4C(rLdTK`Z z&A_b@`v|vkEtlD=2`TS+pq;!nxz}m!6Ul0+co6KA^?rQga;+!&a`E+KIudgBQMVg0m5V)YZrp7R8hO~&8you|cOo?m6&1&}#RH%dp>w6G!P_lIx|Jll;Hp}aV$(q*_!}*)?>vMI`^b!9$wCv zY34nfBa)+}HgY>WB3FL0&!yfhXyjM9&638gi)SXA#|fAR)%E~^3@Y1%s*$?7jP1x3 z#3uG!=**mUgrOSAnQqbk`QB{lDP<}Cn_F%U-7=qj84#b}!k&tnX+AaWXtE=rv`yK@ zRV2X7(nGF!S9Oa-E3Y-PaaQboPab9TvWaA;LZRCp5=}0+M^SC~=gGM$BegAg6=UvX zwzJ6|>s8g;`dr+}Q<3WKO(%_lT=!|GM-?ZDj*7hMNoRPIc;d_Nyp5%9zu2!EMIzU9 zZjQW8m2wydPphhb9sJD1Q#m^8SLmI*vHjul7zO;{)xzMNDAaZ+c}dwBYTh_;xW3%5 zZ7aylYfV*ZnQ4b3wy9}DK=JU{(j)vvu#eOaL;edDy6pzLYOP1R_b**-y*ZU+3jq)3U9T2~*abk_ z{W$#w5SA|R>m6N!AEsbgAkooO129^d-MSei zlG|K7;*Nr!1Z+mobr--CfawVong-ChPw2de(6UrHMSFG}M9}94S>!B!fGhl?4R_U^ zvLF4W7az`(94?~haSVjQWIOTSc(%cdtAb~Og7npk^EJpY&s}U9n_YjLKFV`X5wieWibXV{d}fQN?U*r+^L9}de#{%*l-h^(X( zJhs~qSY_4QY{KKN-Z20f2oVCNz)dn=v1&qp?EA*CFZPr_FL2rAR|%+sPy^2yBVCd2 z8MdBi!`tLlMo;|d9|$4hHsOF@OE~d>e|gBYFDOgT5;M%bk54lLy`8{%ogp$A_%R|4 z3f$WXAX#iu-)6JE`bk@ap|}&++@rc0QvTo(H8S;v4|Q0xe^uIc>1c%b9VNm>xWFF1 zgoTo=5vg$??L16X@OZn#ss}_kYcYAW`#4yy^U^O-m=J(^Z!f1aVtc+zss4|^%G$GY zeKFU|bXPTQ9p^{GbT_R&E2-+|f_w^n z8rvGC)MOq_Rj^T^nozDb%^(9Bi_aTkdMNg*CK#@n&`M9H2_YIfntg;uqcY(HP&nw^gfmZ&$963|9 zq}8Yf1yAo%?kA-t=N&cQ*8$w_clfy*vt`RRA6TeqW#tMN$<+w*`Ek{8_%sE48t`*I z;{NAzV)lD!iM!fh38>QUbiwED%*+~Lkf!#sP#9jOVThpYpNX=wPF}5ohrstlIhi0L zpi7MOV=HT7gQze?4vz;iBfeD_rQD%b0HVqUv8hFVA?qxp#<;y)GSD8d=QRpxP^Cp8 z;w~*BluHiQ>4vrrpLQ{J2662P|E1B@XZ!C{4opDs_NBmh;v>fJ4S2Bv2hiX(R-4%o zP`gGyDBuE|lDRl&$!trGPDT>fEA6}!Ys_V!HX3SZIPRduP@H1 z7JuM@{|uIbAhHxbFso330OS}kvV%4KPDdFhaoLMr8toQ%^~d<1ESAwA83e10n)hL> zUn(*NWR6#%RvJp2xV_O{6v~w$Xh+Kz+8KHg`y<4^@=LJF(2i5!HSBiWl2#Q<&}V|1emxJO;7Ehp=x9{!kbiWC(E=$|jyqgLw)b4aBi3)T|PKZKFpCc(KGgmJJa z+|H|P+n*ROf0*?-urh38ao~3ZGR%JT*ynP&;|0&;c!UejisP3`h!1tm0HOfV%X&Eo z+aSidp4Y5B0omi(lg5OQ-&@=6{fRuPA>@%mbRc;IznXYXDa39RvL8T5C3AuU{q#?z zt`744{9(7#=Ggjm!T?EfILOM{m<=GTDY&a#2Pn?p*l~FC9aUKgr@qZ6-~|KR-T?+& zlbr52D#iW3lS?%x1wC^t+C}A2pRgtnd78k!Jl?z?L^xa%pi~?Z^Y5WlHmz+{ttbjH znq1=ftXaqCURj{Mv-l6nn zjY-C}HejbccS(M0_7?05$w{W1h^K)iQpu?O zAO^o>hlG}RVAwAqE5M>gwja11@Pso`w72j1D|ssKko&I6$l1wC634+6j;%Dj$7KNa zc%8)dG+S6=)V=*SRtL!`Un-0t+kf5Vmw7g|Ls24^g7b+&^YeU0rF7~-ObvEVmx0_i zfbo9U{TY7FLs2nY*&MRjoD>7s&h9Hmu>&ec;Uj8W+Cn$;+%N53m%w9bql8*@f|CT6 z^BjBQorFGqqt_|bZ)zOob%4mt{MZpbNikHe3`Vb09H0ijQ%)Y9*s7^-ySyIc{5bHD zQP179`N_KtKI=LffrZ8Kun<;T9o7|9rcVMq^xVxRw?^RbXZ#OwR1E&sL8#e`q9{8( zC2JLMxd)eDYizv3;YsCnC`>uHz;;6FV3p(!?;Pqu_Vqy4lVygh8&#d(_uje9lmTx@ z%{gBwgU?iTA8(-SgEeQEcTGHFRwXJWD|oy^VIuNw-%`oW)!~DgEHAwBzFLfw>*i;@ zuSWn73fK@GW=UxmUIS@EVi560g+SgofJEZ>)_LN#!M6ajAX7u>TA0OIdpYbUt>}Z%;rpxSg@PNaBfB z0{o!%i@J%U9OAJFtNd_zqWr8l0CLH{v}J1>t%i91YjIEa_))MddCVmNxC6xdKKa+3 z`vR$7=>aUF*BUW~AEZfAv z%7>czkP=;mxvlSE+C}z0Q~jVUMRzB)CkMq9<;`^ecI_)29g+(9CmH<-J-<~ z+>I}`PXsZvC9`A?R9XAB7VeARuocN8#vAw1Lt8UTti|1vg(LF8Ua7?nJC8h5^3aY# zq*U-nPp3Sl$fwNksgziNLZ5-aH*y@Cf$V4|?4P!39?Fc6(qzmH^ko zN1->y{A539epK9Lb1d`I3Qh$NBsxow=#0PvyTM6x(8eMF9(EkG(QMQKiyA)a)%PTy z84$U|wySGfxe7!+I*i_ka0jrIl7GzK#{pn20P)?j}MW`9oSj#KSJ|{mjBnvodN=)Z1Z)D9vWOqvrzgQn$c0G zfRkLVw*swz2Pq>|_teq-u7Ivh?>`M!)(ie8kOvpqbk?CLU@s-d(#N3A)g^O&WBGkK z$H7J<5j`xAd}|iE5&kW_80LF7%ae%LrtfSBL^W=xpmA7FnC`EkjUOXM)*KS! z$3dwVKZ6Kz`nTDE%}Z}5Q6hzppE_YtF1#VYliDY*|Z z20|Gt2R^;UlIJ*4utKAVUvd${LkHOavMO*j_RRu zWj4neD|*f6V<$H2Cj8mn2vWm7ZBNKRdbTTiUmUq9;bB8(jRQ2l-ue!OA8g+jeq3v6 z8aWP1ni&~?jH}{;qwaGzkJJH+tr0J7g9LEw{|Op_D`e;pIuv*PQ&NQOdq8Zi<=Xqe z%g|8Qv>F1eJsCG_!0+r*D7~H`bl{OlY--q&67&F97^1E~vz?ODi8`&$R0Dt_-IKgqh)ZM%|_*v6T$E^xQ+itz4Df#wt<4~`@@ZF9b zrqFh{?UMC<%#t`Pke!mc-($N?IO}BiEYwF{yh%TX4%B|`q8)4zf2-hlN6h=BFuhex zpg7Bbs0VWHZg&N#v(`#$H8apqOwLaE@sfUQVdNhQOuD8=%K^T&`}|pspDnBwMJ}Sr z-;*r7ZOsFLaHNi@INlXeo~#kd0LxY^sgY$ZIz#omdw&TjtuJ$^Z@YtJkBM^WTSb8v zd&<)bKFDc0>I#tY0o2FMIQ|fQDiV}8BexqSEI zsum@DX(HSKq>^-5yzvb6Ol+ZFXVzu@$5 z7(57br(sQ{XXumU>?+5FiQaK&F$5n9cX=I=WSjx3jCw2hz~_Z33|O+eca()yYOeqI ze4_Wx{?lMFE{QtZtI9FBwN%R}V?KzI_5;8T7hUa5p8(syYJpr0jW7~|FA!?ru0{(Sqxs{H%>_Ji^Tx6zTL)X<(0$l84&^68Ohrn zM?QlET1vrrzi*5oQ4dS!3b;4U}zZB`y=aA(+c$d#zZR(f>`=6AW zXvu~PT_B(WGws-)*R}pUH3v}HDR>FZwEbHic2u1*V1oRl%d++%!s=apQLg_I;ti(fN{Roz&<3BVca z6Kl-3JinU!uiC;ts4X~M8K?$rZ}2CofJ$a0z_WtGu2S>$UFHaRj( zxP-;7Z7$4Y3?5>7s^&_-8@7i7d;$Z#5zlnR&cv7v8+G1|qcBSUAH(#%;{O#)|054l zRbE=e5LMCMLR|UQG$7^JVW&O9(YhM5AqGxAkq8Lk9{X_0$UISN9N~X5u{>J z^AXB&A8gV#A-etU9f4u2$S^Zc_H}41x2&dK?BOh2>>F|cRtYx_Z%u!dU0ufr z{I2VW8^-C#6dMrIzZvJY;o#r56!$rwW1K`oxJym%jxz2A-?G;x6W#;}7&cutg>npn zyHDOwdqU3L3DW2n$J~+}^Qun4(}@KVx@oO;#`f)L;H5qGjJvtb&IWzO5WZAWJqmMz znSvc%_1xXGV%f4qww~spUpjSpI5;40)Qv)5BtLW5_fHAv|E2l=do_RVUUmFMw)np^ z{=aDaO7ilZp^RtQx&<90=wEAp>DBcAg`xIll_Q87J00$OIWou~!yZya@ItMAY-`(= zw0J;^?41E(-xqQtHg;uwk`MwoB9%NAEHT-R!`+SqOCxE(@ey_Yxy?2pD@Rb#PgA-X?L9uU>}lCd}n4OF4P=UjiEyq%*$U1~>ByZ{;e#qXpkmVO+u zi2@vxb;h{G<~c?GoLT}%F2j`qQbLKq#d4KQs{l0(B83mKO zT-RQE?Q89|3p^&?;3dw0H5}k$9FcJT0(Z-kjAm*lJ~v*>T{+JT@Lt410zeJy&j`|r zIF?wugZ6x}GN|)nX|NCoNgdzPGc7rF|`%#~08m>h59t&tyX@K!&&y9Rg`!lU2UwgrNV4n$*`73O_$@5AUqmr*)o3htfK80D3akWPCDQ zV&QwhStQ>~8(hi}lt}ND>p|{txriIeA?y4TU)1)fLjjoSGy|LcQn1!7ojtVay!4?@ z7{kX~#xD{e`SnL&;dTpu z6AI~yKT!|_v*YkE1!aBFjw2#iSGs9kMp|Ht>;2AMp#tR6AzCK?gF2zA?;4}%yfe~@Oj(w`e{!lX|q{+|;DA?C`Qj=dO2 z-CNH(;pd~|!UeHx#aT_DFi3tHxSs#F)$AGgy)I;!mdnoe=GJoJ28!%r2{7!pD_iJ2 zE((0vMq@Puj3ocfnthMWHXW<&#{VmG{hd@vFrNR}UjSH9lvGOhyPv0+ape)UKXs{$ z#yzujxtsvZYV+VC!U~eO!{7bgTmXnLd*%Yke>WEZKCgLTSp|K(SewS!^7a^;7;;4b z2+y9BXbq9WtzZKuSbmX91_J0$2LU+p29UgLd$vJ9tZ5bMeD%+bBS3K8D~9MRqn0{l z(0VUYpVNnf<^exb5LHxd5C}glkL(Fvvv>=DHE4=73dfgg@BP9aZ~b4(@y!JOzm(&T zsGtoUhTr;qF}K?*kAnhJ43I*ZsR5y~XK?z|JGoRQIIh~_&V0qQKet7cRW`-*Hqwf~ zmRKs?Xu1sQx~k^iOD_lWYyx_}Gc^fcUX*AEKkIHOEankO*Cae7W+0M*q`dpPhEn%< z)x)E)!ko@n$Zf>JrFx*MLWat)RVDq*@g>4kI+0Y$>yhs~&`_|jUErb9 z2={+9eSP16AMI50yMK54=_iKowfUy!nk0Zl2lhx1_k{jwt9bu?+%XyV-x?0hu9BYb z)1*m7Q;{pDo)N;rpeH^v{q7@EQ3pJF7|SYg`6>ct?YAI$Xa7rH4lw1Mj0nH@KvB5}U<(1+X-vQLkqTEyR(@24>&E5xfFuXk2f`te+Wc%m6!Kn$!ozvHs@^WZ5p5c{>yI9h!LGh9d{fO>n~_P}Mt zmwczw7M97D0}E8B2Q<9UI}`Ehut_(Gi6(HNoju3qD6pRa6BZ>u1gL?a(T>9!PZv)8 zu9u-@ND=N z{p>OX9u2PGL_p(BFcw@FylKx=s93Mm9+ z0~{wniv}>&-LtFN^S;sIRp`M`2VK=3snbqJwHr;Od}K@f@O6V9tvIn>jthDF?#BFg?t4QEELjIwpUZd>F ziSqq=6ru|j@;e=Hp;^j+IO#O;WDc)Os|YD2i|x^b_lMyIdt!aU#Pctrdxd@=dZU&< z^EWE9;gSI6%~|C<2=-n+be2=t;}L7XQ&3KO0#l?(kZ7z4Kw8j_hT%CDZ#Wc?dPd_3 zt2FYEb71w$an7zZ}m%Afw?1ih@Id zNc2<6DT!RD>>{VY@a4NZo7=?>^GUJ)d)a)`iAf0b7Cm-04p%wq|IIujPfiHfv~por z1Rwl796$vFi4%~sGe7TU!4~3lg>S_ii-3XWaGk8`Id&@%PqP_m{b&}wgWtg}Hd*vF z;6i`4yyM5}7IQ{{7;Rvz{Qeo_`P5;x`Nn%?hmdLjB4k3*FPY46Kne)1pWBzhRDvGO zE%butzLmg|1HK5#9M}vE>`M)xT=_#&?6)c&X`ijqI8CpT7&4m8CStm)rw8zG?c> zpEbvT*)tMAaEcY)1S_;asLINf=wf=yK9|7$&`{jc;nkYx&jJhXP{$XfU8Kz|Sm^U+ z(-7_6US>KxtzXk`_KZe`3Z+dPA0>n%qK{ny)?9oU`a1pgp$?I3B;`7> z@%-d{P;COFH7B3J6Mu?ifS^o^!R6Y@`&RMecjW~C|3dwr3iV;i6>cu8^Fx&+=o-ml zw1%(z&i_oUUXzR;a5a&i2)lMx;k?PYEyjT?L=;j|pTJQa$UY6D~bU(Fh9U z;1A5{D-q5^-SnKAH29S2rbkGL3Gz5!mJ(Sa4W8aQVj*Cr@|9{RNT1go94w=;2u*_Whk;3?u>+E zu!PsCprUB5@o|cHz_;ZC^1DFl4}AY{|0*6MmVhQLn!E9)%?;sd529lTKbfR0!0|lpR;uH$zS-UJ1BXBVNQ3ul&1H3s`^xE^{!xhanTV$C{WM2QN5Z z&%o)@;dwf_m2I#|TE;rG3KT;haKpwhYrQ00(9D23=4lQv7RDCMY{CLFKqEjmHQ*yO zQqPH|(m?2!!tt5r%5u!s+KPF(<=nBTYXWovLVRpKS~ z^icPBpj_8}ER=AnsD`QhgVh-Iu3Y*<@naKsZd&!J@#2|-S%g^)6o>YYXH%CR7{h2% zuhM&|FKCsTF3{fvNI8C{*S0`<9W9Dn0a637iYOzb2NATLv+j5jO^fmXg#q=I93`)4 zr_|>8HWcDbp#l?IQE?I!2E_;D6eB{>`=4*+!H2|pKB^P!CoM0NmWrVqAvR7#`Q1|1CG zJ>7f|6`v=T2)hjyQ+9`#j*CtM9Qvx%fSeCJ0L>pNUJmFbHLWe5b_z!rynGh~WOPI_ z9wCDP3EF$DTW1}OfR&N6r}OivwW%TQ)p%#=v%+tUG}E}(+2dR_7Bt7q=6^iuhNm=K z3}D9I9pv5v&R0TEF{J*_&)cJ9M(Sm^-n|!|34yCV%?Qr~p?%`8m(1H{;|6qo4}gOp zP5k=%;m6BN%?^;X(7r72=h+9XO(KsKg!_oU!Tn3y6)mt80+d=A>xhF?58nSmQ!1s< z^%TN|vmr7L2kzCsd4>g~j$Z6NtfEC8pH53=nd!-99VoI_Vq78B9m3MIK|lo0cNKcQ zSEXW#tsTEZsQ{2hF0AsWaoBUy%<37skF@gvizqNRnbJD)rJaZ8AAw{FJZLcYZxF#y z)te6;cukXQmeK&Uf6yuf{z}!VlLYlL@(eovfn%|jJi`q=Jo0ul0Cw8TTLA3^Y2*9Y z7f|e=@|JpXC5{z-GK+&N{@-jxKwpeT5mKf;aHt8>h=`6F5xuC(Q=z;n76R`dv@Jjd zha@R?mkO#C8`XzZ4jA%w%b^qZsVyWuf7c`D&Q-42F%fzPuXJ^S^0jt((@rnR=KmHs z)Bi$?!sRL~A$tm zV~(QkKb{}z)e0$pWg=NhY)Vsd;<4VpLejni;KuQi6@s$3kO2USmXK#ALbo%|^>YWZ zM98kIpd$&D>v+A~zH72lc~hK2Z^!Qt&YQa4m!HOODg1|<8$hY`A8}X=kxA1W8lK75 z#8PB01_gE{=cGT52DX~_R}#uB4Ld;6{z@9{>1GlPnNd%=4w@(JoxzAk6`!POwt%-m ztFY`H`1jlv4lV?ZJ5ek(djdyV7W?UB;YZ;~h3smY-VdO02lhlbv{sEXu|7vZ_?7kp z6*dt@DTl~chGFEp>*XcWAL5C-pW?6g%wCLo%IXXY1+8O? z2f0I47uOtDN?RflE|w>Fe7JESwAm=XwQn=lg_59pW~%+{RDy5Pg7RcZf@-;m<5l_X z>+6{EhZ>!vN4V#wDIa7p_*A>owe z3_PMD@OTL1f%3ZdSuZ}ljbfy@J4ytnI$RNgmDx-r@kG%mg3=MN6pyIm(8}Lj@@VMqqE1t zD-KU}b4<)YAkoh)f876rQ^|jo7?$n^a@K~z_@k7GVJPX@m)Poi?xMVr<;}_~o{88f zUTcqc+eicsG#!!s^Sr? zfOIci@On$n8+F7w_DH%>g{5|HrHf7XS}gTDDE(F6;p7s|BC_+Z?V^TKio;g%laCNiJ?$ul-Zqv~dfWBv^XQBC zjS>J$XW!y#JzF@Fj*2(;?2w33ea5mHPhGR&6+gs)N6$Sig9e4}G;sp$RF$SW22ol+ zQVs*Q6@tRvO9xlLvJSk?SUQq4a9JaXdf;3cCw4pu{a(++>2^KGDoNupyhEWkWi{1n zsP@?>=fmdcXJX1rIM=?cK1(9uQ|gqw^f3xVqC{BITq^Q+iUh;u??j$zUvx zY3<25Bjvnk3DV1M;`bF&=CG%?{P@e;wNZu%$rDeQO26g_nMVhUO^h)a!J9;*B{-~0 zUDeLVhqVlp{&>M;bWzYyzwvHddUHm_S(6Gc)P0{mtI;T=*X0+9P5pb7&a-#kMousj z!oYh31)J(^!u0LP6^dQy(n`+G4_$lva)X%xOZ)U0W1}9Q!lKH$vXe6d&h|>d%X4z# z8OY&tJ;f#i^~;jo1w$J}c}0^O_qy&6KNibGCKlSedGquX-S2r^QZ(07+!8H$Bzta1 ziA@nma6eL>4i8=QkrAwXuzPm~v>H9v3$R>FvkusZNHf?LVKu2-I*&3hd!x!Gz4(hK z&iO(GJL{pzRJt04Q_{`?r2RK}8RZ$Jo!JB=`({`eAxBS)Zdz-s06!A&_ZNIYD4r0w zQbs4Ja7q9j*IfN3*73^7FJI}@SOQc(@*YKBX>@(X6w>xKO{&VWcj9@$`!-W;P|gsh z;OrbJe#=l(L{iie;NY@u%dZ*TL-^vP!wV2@yzf~%f?tlh2)NX%Q^%IPuTy(T@BLU**x@U|~ACqm(l2CKyhWz>0#V}GLbGx5qi{|=#_{S+_eavYa| zPhop}omv8uDsTSq0&Yij#X@+X&k}1-KNa)Y_NI!#-IkV<;QkF)Rm z;M~@22<}|e(++y6JRa6-`)7G@<+BG9Y@m)8j<$ajT>SO35w<(FtS@14?E(727rH0l zPrPvQr<(I2Xkv=IKxaN=^E*j!@t3uGi$d_EkGD@sO-#osLYHpxvQ2Yg!$Sz#HVItO zSyd_~>m$Oo)>uEPLcnb7z9RpkP-?^YtTOd8t?wR<0fa&;SgyAhPFZd|j0!7E) z<2~tPQ+IizH>U79eWx* z#4VV`A$_Dkzwu-n!;Iq9ZU%;G#nIdb2s4oQT`e(hiC*|r85p@q+0e`;fE}-v*uA40 zH19tP7vmnMOtlX@Y4L-`e?Kl)CR1M>cte1MQw8S59|$E(mcCxaHV`*{p{R^2$L!8>wF96=>o z5@d+ZBPN%!t8C zw{*-2eJ`<(lxP~(|L#Fh0z+C`*K^_wtF|T`>&6Y--Wl$Bc<3A1E?nQr0O|Z-_*wLK zDB78=bqYgv5-73xG3NI*anX_GDdi>1<3a(vF_Cl8TXDSFU$F95xeiZ(LQab3l~fz$ zX8&r1@oG(Ss#{M$%lrvE#_9_MdZH`|Wc5MJkjPm)#~B{RUufm#30jZTis68W9tBj` z&{UNG<&yQ}(kKJ}LK{P^rw0rChv6Z|Xr*vP0IrjcQDSbYO9_gECd@$54m61mC_53c z%;Hp)Mb%!J2is6VJ#aV4FYeA(1QZkl|A!AmjWJZP8nH*j7Xc#P7}%G>`EhJ@8BS&C zcT+3Xyg%Z0;AG2@Lj66iC#0sq4Ar{5gDEj> zMo7Xv;_Pcwyev9D4tQAv5Rhe25!<%ZLrbzRAXDdvh;)1x$BD^=p@!v5bspSxD&-J3 zlYuHc41bob4`RNGmeCO5 zGQ9DxQ1r1A#q4JeX5r*Iej07iT9m+J#d|kIeoNDOPy-%_?2%-!l68B89GjV{;wIh9K>-aDXc@IOC&QC0U4Q!6E zawdc^BcY(ClGTB7nB{WqG4MWlWSJIZcWAhV=>-tafd#88=Jx@|j6NQf3~2DScv3<121(?+a&P-lcyK#_5l3j~Zh%hTCb*rHle(#L`1 zRYJ>zCPkB6={=CbxxRwKCS41cy`f={WbC{Cc9bs$iVwk1P9AB>JP9d1SCQYF7Ss!e z5)43D`X5eZC2GiCYr;a_vYNp*$E$_Qt+SD90&b_$XG1_41+&PFXWgNoJXTvaTRx-L zKwQDx_`Y||qIsbY%lT$!ulvH-y9WY`%}}r5nUNNe*Q7m)vXQ|H96Ic{(_yx?41EJa zW^{7eW;_k>KegaO(NIuMS>$1>{^OP!g(lG6@MDZ_gLf{R@S_3X(fINQz`v^1L~3dA zmF8fm^T8oW#rmgv7&lAwwK&`JO~rq~SKPo*2?=wGf?4dnFI%S+_qW_L68{C97a}>j zpI~TU5dyKOF$8W3bj+c=I-1%c_(18W%tu@VI~cP`nj3)N)=h>_B8*#m)(2DMoV_av2|#}(^$%t&s?m$j6Xr|YIO_C6VH7kc0nNeX?37S_Pq{ypjXSQ*VJlQ_js3@t-;c*)@ck7; z2+kWWe*DN}DO}uA{E2u5M{}TaCSSFh5f79;*vh6_*=8odIV8t-CIBA-XWuKPpLLC> zsOI@uKL6%5Al|Q7)z@;F4Y!>Hkf6H@6)5n{8@Kn>R}4A5s?e;G${667lI*W&u1GZU z(vo)$*)pm`>E1^-GSrk!bt>>oNfLjwThs``&aq;wD(6j?t{O26Cv_OL4{Y1N8v;J< zL42`O`-cd_)`3d=(s0@H6#&9($@8bG;@HeGcRwwU{FN#-f`LWdfP?kvx)<3S4J1Zv zFD^qchBztS(zVk~A?^aHQe#8=*;$_^!dkA<;p6MLu!#-LWGD4(;FlFneX>y=qcQ21 z&~d-%(;VpJ6%vymh*iYKCcPvrQ?BrWR{(>)-uvylg%C;3Qw-%D$yvwx@}b8?b#lo# zHJ6}es%}u1{fHXfGBv%uB;fsM`5oK4#B1q2#qMl4MOrJvMVbf-Y%Oq)^xQX}(va?; zHg-XFk9dMg8|bAYsZ!t^B*eVyQ9Ms4J?&iCBaW%~hL(T2oo24FzovmY8`kOC^5&Rc zuM56*>iO*Sl;1$@_M$tBEu!Zztt0wS9uO85zQ-wl00$V+{6T5H>@>CRM0o64)VS6O zr9Ae?@+PorI#T>tw;bx`-&+7gUzlCYBIA|hyP39`Ml~p7N+SCIV_x%76@dxoiBiDiG66OEP^_1eT|3sm^ z=J3~)Y#wqBzu-c8`jpF}gwSRJRmUBCC!7&00``kOC@cSl-g8c40J$9zfUY^&FJeWMTIhoXFzUd+7L`B~HL9r>Lr z_gByH;27-N$}YDLOhvb>ZvS%MrV*?=wF;5<7uV1pZ6cm;}7N_sl;92Dh(^e^(zd5 zVyQ11E>AUzyyS3JVtMA-O=mNGa##SHT*OJ4&uGwF{59NvjK}>09mBPLlAFyBcOMmA z=e0U>DfpMJ zhL-BFim)`BAH)&ds#Qv{0gySa^#iz%)`M#!C=p zLJ>viI&=5i%MF=z<=ZVC0bMu@`R()!H_jDHFdsGTn|dJ+@2hf)j0M%b6dl@(Fb-Q# zAWQ?EzdE$P%MEQC%;MMxTtaUuRN0?KUlwmlP|-fQPR3YJq&L-7|6wSvk9%)?268pa3z^`b z%yii{rFc6(??V(>YR1@pr39)yb?ytfk1YvzrMn*15+`drlff;=|e>hqF3CH^Qd937aA_uam3S_LEDi~W+!df8dv zbz@Vq_)tnr(nrkBE%s{NNsUdX^<__iS2jQ3C2Ezc=H^4e+J%{Y4pP+e@vFb)^Ud#P zV|`NEn*tim_e@0H%nhbKfuh-@3s9$)BxAj1h*8+=BSG8UP3Cm{6>CDjsrAU9Jp!=r zCOH&-#6fQzFp7`2?x3~Q-yQIH^soI++$P@Og{vsn<>$VR*Zw$d8$YRFzi@}J5+Eb= zgrAekB0cCSYX~IiT72=wN_WYYX0RF`nwJu~NY_bbcMUq+ecNfA;i{?!Wbs?-h#g~JfZV6=}1wCHZUILaW+E@8Zcovde zoPBp5-$gmFv|<&dn3&!KfpS0ra_Z6cR@TrhG1w!Wxu^Jn$uINKdemTviC!g>Zd_AE z;y2RGg=U5Hr4s-o7bO=LYLc%E!H`q!i5oWkg@~T3IX~6fO1CtS`@vLwzfDR^<*!IA zLru?3#DI(USfAnvoF|ZAovP3zw{gzx>s=44cr-rp+4xd~rW8i^P&@kB$lMDCH40(V zJcZNjbC)L4v7YWDF06r02s(Zfa)oG{rq<&EY7=s*Ex;gVMYsPtt<_}^bZ`8< z^<{v%U^U9u=k+l32xl;9n<$D6n3PN4WAP^2)V>P|3LO5Dy-f+Kos5r}-l>=jR$s|6 zGYD|h?b%vqPI_);(8#M`izR@%iime14hGc zrb3RIX?Pmv`53bI{rjs=GC9uOmtK-|+RWAO#X`|xCFn@Gqas*W;bRPYa_>D2hCw7K z_^k6E5w)Agw-7VrkPRar`bWA{i11LaOahaJAY5{F?;GId<%H&quh!0 z!U$F>{<($p>>pZ4&jf}t!#n6u{5W0ygG!aZwj7aze_h_UM$}u`jJ)iI z-nVdlDBd=OQ({h7<#Z&kje-DL`Sw)B>Q0u$<5&@Te-E)1CWXb-PEawvEY0b?3K#SxX#7*~q)sHq=fI>x1TuzQqP;>SYQ$oL>}CNpem-!ww>#-nJX9LpTP$8RPsT6psSwX-MAOU; zJGE51Hc2#9mE>^anRkcOdN-ixaQ$X6WOoRGH-qD82;4;YRY=l2K0SfW$K8OjL*H}C zAXh(!qb5wLqAs&ge}rkYWj4UE^JPg$QfeP*ZdFmxOjrQO=Q?NyB$A?CSV7xV9`;LY zpko{H<^ez9C0_MaJWnpHqdQOTOJQava&E4cV$=J)*r6Vk&dGwVYMn~OV=hlBE zOd%aPFq>6|YI=juKlGrx=ykc&7X_sr47I>de=75`jRG>bP*P<>lRQ#_C4l`_dz0y| z&NmiQys3`v6ODH%+si-H7k~MhFW}x?+umKr`Mp+(5wj?i#Sr*1a+NT1;(4WQ{JqWK zJQ158Nwwb#I{gK`cQ08;jnSsH7KOSB-(pakZ=`eM$1TV3J>H~D^jxU4?&x+Te$W^# z7*IXgUNM(ATJ>z?Bgx69ZmTL;KD==C$Ax=+JRqy)(R#y{NpoO!StTVpR%iiP)wp=0+CqT+ z=)7J-poi(A<^A2(4ae5B9dG%GasF8mso>TwGoKzz?L`|OW!{@!Z62njLS90IBtayo zx92(Z`)qJpQ`bei`Nv=@7!OVmAh9*`cqO(~yu=DgbSA(7OK?wOo9|&NdRA|&fP8TT zQ4ta;9x&N4CWF2&PGT}Y7dMyb*rzCnQ}-_}uTo*;BBr2-Tnrci0M8E&jshds`3_1c zF^=sAvK#ciFa84189%yT&aaU4$SF3iz?#i(RNG)2w&~G8;QG zYcX{sg`*z3IS#Ccz!?zi4f zNVxB{cyUzOD8PcB-;#M1pI>a>?AeW>p88Ka4vGEIacGK%3(SC=xH8)i^Z0=&H?`aw zNhxkmiUi~Z6S6qUitXNgudO>b>!~oYaHJNV!CuBuv;Do)KJnK%K6$}&z9&t^MKDzA z%3%tonWN^BCebqSMi%=DGVy{GhI;HDo0FI9lON4&Sxa?Xp{`&E&0cq_mxz)?3GkTI zCb#lC?tRGeT>RulG-9BnvMx>*_aH+o%f2i4=;I?$bHZb5CFDgj1XuvLLwSK3kV7*x zcvJsn^+$n_(!+Ojk_$_{^7S(0885w-?n)Wm6NYOVYuu|`Ovq-xUmN|tCU58He%-K9 zj_`krt`~+Jjbmc?(t8>5I`q=pRaI+WF%%qM{w<1KTbC(TxFJB#6e{+_$KNKR zM-C;1ns~ui9Kg|Ta$LW1XM9}Wh}>Y{bKi7B^QTV`c+HVnn`RDS5bwRZ^@)z(48Oi zk>t0|0OI^lIgplA!pNC9`lmVDHgohpKT*iykmiUFrz;2RJMjb{K&FX*lgdtmRtE1c@D-Bw_9tiQ&=`h>FYG#Q&R%EhWQ z^ENj4GNe$JwK|psy6-GQ^=nN~y?yl#NvLaZje2?X2LqW!0#a3DdYY^&;3aPAb^X5A z%184MUYN_k1oP^@mMC2AHs#o<-CdL6!_c-<-mP~ZX~T93U4Qna-O+i*6Z@R^H|+HtdG_2V1!^C%a)B8BxbY!FAs{p0QBKRR=ko6^b-A$upB3?Q|+JrlHMP$9j$ zKU(z>q|4M5K(Bihut2I_hox(_X#O zBfP;If5mMrRp`GNX>(2tOJq~g>iKueDTRL&CG^V@U{cBXO%-zh5hu=h^m@pC1=BnVcAMEe*S)Bb7J+4q~))d`Rn$FCoP}qBe^kLLxZpA zX*C3@z}9)$t$8d^8G2iefsB*l!GY<0O%F@IVkd&4^B^(?tPadT#4VyKBJ>5kEhT94 z+*pv|7NcV`*{lr-o_6;uenifXdHT9E*JA^%W;la*;3aZJo{`+R2r=(T2=1b`aXIK6 z`d!n2@#D-v#~pHtN4r~3pzqG@-8`OaKN^b%ys59-u&P|`ILa|ZltycXLSdCr-aLnS z-B8TaAv3R!7+o8QN94w0 zfdDN^v-*T1ul!Yibd;t+zVA$cH$s!8+wDmPE6WqN8mbC98a!5-nmtEOF-$D>hoYU@ z^YFlKX*FyeaBde{I+-W;37_6(oPprL&k!>%BmY(nFt(?%yxSy&RQ|BOJFA|j{J?_d zPOTtjn$pl(gb!x8>cP~ft*~`HT*2i0`fc+MN{k|A*mpgOw>jm~SqK=cmy4#)-05;5 ze0z$$iwx_N#N^0a-j~Yz*amGZo9rni@{E-yq@cm7Gwda5;e3qfNy(&-wSK>*JN$?$ zd_lM0M#+(FWZzfJ%f@7nMBW5tM#rLBg?-lg(PWQ2t!0y0aPxPN0@?`uHV%h_v)AnI z7kN8yM{1W&_#LS=GK6zGc+Nhj%Y(5-$bRVaPyN~HV5$%aFcR6fOs2zQ@BLE!j3?bl z0s@1B|IC(_)MH+3b;%TV5V^4{*RpSiI1$uCyxMytb~ z!96~-JDiJs{*IHt56k`_npaHs&chGx)VR6zUTN~z8~9pl#K5D(U9{JJa=Yi?c{7R1 zAXJaj;)@6GNsGVaa5|P(i_Bl7l))bWuUc{J%Ly z!Lo0{w9p=Q-~Idg=o1D5SI(*>zJfCilF;+#s+|0r2|4)ScQMkQ*FlHsf5GBK1HOd2 z;QoTepK9bQH6~8p<&k?j885}Y*k26w+~lZ`bX}Z;1###rT(t9{=3b3Y(<974|06C< zpjpBX8dSpl)5gSsn>dmWle$%hJP!mT*nN*)@!IRT`mYtHq2@!E^)CYkS?o`UytOGaE&>R`X}4ab!}dJH|n$CC1>DG7tSZRB`*AyA?P?0s7~#D zNwWH}F5|dc;kh(DUpiiUz2~JJtL}28<+h?ZxvaLfb0{RxrR+aT`SW73kPJ1PQ}+EN z!2#9C)`P0(lwHsFz0~#hN*s7ygIivgUqI&5f+XrcR7t_zE}IUo$Za%i^J6339FF5m z;VCf*Zyw2@(eK_RPI^Skw&c}7GDN!LWn$8?}ABns}}~| zTThOh=7Himo+U1Rm3X|kN&3>j#hS1l#_5DhgRtz=NurOrUcbFGaj>GCUq5{QX@nG< z-B@}3Z3Hj9XLUDb^0>Oc5dJ2wZ`*M*P2gha64ceZkHYToDhzf><|r}jD63BlS(H^4u#ZRnlF`j z*Wgw&&tW+v;CudD^thrqae~9DZG`Dyut~D$Ae^okQ+wy=n`aDP42zqND2jDpYRb|g=^lQ8;Be^##A@ScU)emg z_2!!8tsgii>PSfklx0^Cw=Sa;(1s3OJ0nxDXS|uEWvCmi+tF3!(exMA%Ax|Mtv>mWK#_s4T|puYX0y4Kw_#W-pdhD!4~lGw8XK0gBFJ-6>=9_HWrBChenF5?|c z@t?)2)W59Rn#Ip)ClvAjJ@ttKKZe?FR#=8fu-2bXS*7O9PEB^&-xqIuSNfgwwoTUuJBbr=y)V)D zBsLS$UlIA0XdV(KhejLZ)$vSTJlSr0`NEQoOmgwJJ3vIP*k;!OVAhUTw{Khy?8)Olf%iZ*-v`R`Hwp zzAGJ%eP&F_-6vT)az_V>q3F5_y})ea;r@!deLODwID801|IV90&3CirScn5t-kLR6 zOM+g}>0JCwkswN8EFy=~@OcRN-at9AcU}dL>G{SD6)8gdYqDxTfL1QA*?aQiY?4r7 zcD*@*gQ%%Qmnwi}x$;Aw5d_6EyR6A!*9ekQ-Og+xHqhCF2@HOg( z>7>PH80xH@>0(XWWw(v)w%}UD=R@=-%u_hi?Voq|!|oSmGN^g@Ca`0udHw)hIry<1YV!K!QG=$jjgH3P5~ktH z-Gg=3$$jI$TAKuj1Mn_Sm^svY6XYKE?H?GKf9cj!?Y2X}06K zcH8%d!F0veeAQM=Ek<=?GqE?fuQp2BfYa}Z7HVnam&51jU7AIMYeR7c?gx4r5VQeT zmM6nMy!zSMQHNX;u=CD``9*?bqiBwmu47H{F>1qrdd0#QdWLL>zKc-MGP;oHM*_3S|l^tV!No z@>SXDF4tHa%Vt(bCQsQPSI$7(U3fR~J`)IYHz|3V9o;3ctOz$VStR?(Q%;0=<;R}N zzf|6$epQ=M>Y3;ea=E90Y@3>!Q12#*y4))kG50=#4;HNla{81JC;RxrNlM7^1U*q8 zx%5u)a2$jotFy|O`flF?ef7Z^cisZ1ktAMh#TZKrCm8{z;pK_OHP!sJ{R7;nj*KGk8iJW^{KSxgy) z)i|RdrHhk>%caa6xUbOSl|}Kp#D%RBLXk0zE-}NGg*%M=Jqo>~l!Hu)r%>JwiCak= zhM7zaW`&nB&8^#lTf~>hKnF_d2Al(^OuQHcD{Gt zr=`rXDYG~*-F-NvbZ*k{&YFYoqzqs7D-&_wwBtAg1g)NIj9SIrT&q0p5bc|Pm%{73 zlr(jnDw0l4#7||R7T(U6@=TJis~Y<3&QZwwng-4eAF)vO_1{v;X&P8qNHH%|uF~A$ zJB==e?mkfo8r+y&I_u);GlW|Wl%Wi61VLm+Bkf+11E<22CNLwVN>=k3Q5O$D(ocwZVgOgw&4ASA(aA5%0Y+tq|QmPW5fn1dnpB znJp%eN(JMSHTC4Tp-(mx<$wa|S9Wid2>hw31{z2PTIdgSIy3YUw1=HzOPGL3xAldaS6v|H4N5@X(p=IZ;9Dk?9M&cz9$bq#V< zJ314GYDzhAmZL9aYR+{t6++R-_nV}-sKA|;>?-z^ij@bRJ4ej!RAY!yhPCeN>+YNF zrlUkjaO%o74$yQ48aA8{~)Dak1sZ7`HYzn_f?fnP!zb6z$nqst2t z5{5hG3>rU>MSB)=`$!RTyXWvqnqLgmkxdu3dvJ>pIr_u7^%&Cf%)mAwCGCt=_9Y}D zuK@)RhHOEAsG?H&*H_fmli7a?x+*Bm5~CmD9pb#c>uJRuPSgTttoM%KPLNaN22(sj zDjY|3;@$UALm(oo%LR;KNprn#EHGp!C4i4UC|QER)3=^ZY79JOVCe8XPBtf$Z){(h zmO46fuO*p*p*o)Rx37{zT*FTVRTE}E#k007H8iR>1bdXhkon4$cOVT=v=DlZd+Ttx z3OkOK$*G?12@G#sHpKF)=ZAK0*2}E>>?xs)Gw>{4`VdWW1Mr*}RTq4>#}_!N7LetK z$X%RpUY|8_-&-!9TA>9lJuO}v>|DZCi>j&_V^61sx1SrhcbIK|>Dm}X&?5o?83V4>vMif&&YDCaCg}^ zYIrr-4M|wtnyX5b%!pl*9fCv;pZe$j}(bONHz)p-HktOws^JXM#GyY_2oltEwb zp7L_yJnKoR?^9vlZ;mWP8>*~g8X!H|e3hI@N)t9dMVR@Qi0nC))rqL|vO{FEdh)Ua z*#{dc=olvBb6%aT!&IEoIHlq>C}cmiu$A3FUbax(%-`U3Cd$k#my*{j$wzjtuSM=| zm<1_KEdMZT_S$7or3i0q8Eg%91Y(<3uP!L~Y7jYmIt+FOt61ceDbJKwZ;z522RAXQ zRMv^oWoYBeYEqM6xl1Su(i%>%O&r(-Yv>?d6(J<$L2PM;Q{Fe%jpelkcGj9 z*P4y$qQ$8Al{4A-|sCB_)g6{W0Y$xb?F2`|cFyZepmQLvkc}`N;0H zYM}3C@~+E$rzOda!IxgyyKCuH+&Q`6x?YC@~hn}Gw&&6;O@#m703Juzd8sm zs(9$6&yqL!2-$O&p$0FWd~9-VW^@SVb-H4zahRFBnOxNaLc&K5 z?UaE+AxHUmhy3LP$8Mw1)clU;l$8)i%0bSjwQJp%Ju;dhaWB9n ztKw_|=6iGRgtxFsfxBsm=a7uhde2ja$tu3#B`M$u_qW+I4ofu+H)y2aBkw|R_Q@|* zVR({#{2}WNWrQKCZN~}ZI(6eeyx5kQaI@Z z(GL5Has74V<~>iHogo9oZEB7du{$@I)8oKuQ;I65%1UfU!0_&bcx^DU;%$e0n8o_n z;q9S?omwnoT7q|xR=kXR)sAu1iJeX4mgZX2?xO0uZ{A7?opStNj_uNK`QFmPCbWZzskIbfuq4Ev7Jbl~)q8Q=h$?USyrBf*V z9c7Ia8*C&LEoIVw4iY_|^p)ftGz266I*V^PaHjS2n7A~}Z}rB$P0egiGL+>hI~kV^ zce|XlcmeOf)g;n?58zEwgVPWkbjp>(X<9q^L{p?{kVkTOFUaEBd*@8O3mOS{%HU>g znN4J|qcawc{@y0~Xeqko>ahk-Ru>^OD#dUfkB~;cN%~kj-b<>>hoBcv%y!jQ|5}Xv zK~UyB?j;!GZ*H05abXZfF5Vqs)hNjNzPJJHsKrM`~htw>kT%Y2Gu@|w#)vs=w`sy+{vb4vFwW;D%;mf#y_Sly9i=Ro{&DkAk4*0i0UD!s&~Lj zHGp&2Sl2MG4)SCTdlwhEH5MwlKSdPTvl*QG8+J79nJ^W|R+*+1>BBO?TH{W9AyLZ}W5%vuHA~SyY!IzM z?K~oNG`OQmpn15bhAHm`bf-1H#);C8y9KPoasv^Tu@xisl8(j$@p=St^&%CY!FLN6 z*((_)$aEd!t5+CRx28J+I)XjZNljBeB<#*<-t*aYLEAfI4+;ajSMoC=Muqw|N7M57 zyVYO4vWJfuc{gkhOLcDeoenf(C3_8T*7`ZigG$V&(39Evdtvz8JvZ)nU zT`gURwZKMBWsLf-CA#)cn}2K_n3}NJPtR60RiP_&g!9FP^Jb-;sW^pV9c?Z}lw6Dae7@2&_l*#bjKU8f5pI!LDoX_Gkai5|~tbpF#ze(5hXO z{q59LMx}*bcVS-ToI06j^{HF1liPay821wC!V+`A*BW`7%)v0#;MRfByK;D80$Na>#y;}7O5EOSCYcJhE+m2hWaoi$X@_Ky%*rdAED~MwH|7+YT~@F zvHFbEp!?#9tuifwO697`K#Iq&^C>~~EPBInLHw8fTtIJ1U^#4WN$u*azRP^#(N?&D zn1(tu10#nM#7)Um=>|JtAm0 z*78ITS~e?q`HMsMlXP96w(Nw(CCQQ4nJ*ty+<@+dp`O zz-jNB6ks?sxE(0<^hi(UktsVxsf5DK+h_zGQlFRfO9yFjivL73+*PN9R5nwdG3X4t zFG$IsE9HFmwapou)ELoZafTuvhYo&a387k z_{SQH0{7HP=w+*8dviOfOCc{GQ5xre#HUV(`)rtLRBxKqm~GDZLMv7qg=_hQI$b>Y zq4W4!#r>I(mF0%IOIhuDc- zt}pJXNX;>0xm?YK719Yz;`N23h~-0B51$1(W3cej8%YYW@5B)S{=j-VrWKDLj)$rB zYFUO<)XyH@KVEY5fzmCFtQuD=0lP)Q5}&M&_}4;ylhvi#1zjB+uX0=3h__@fzJZ}mDD3t0-oeKgZ<0no#jl)f$4Lx#=~+v`vdZd2 z^cp6)uxmo+tE_F5*_3qC47)lHVUaCiBL_{ZLV5Se`LtJ7I+*YgVA;C)c*HO)TWS35 zyP#r+55TW0oH`^mL4i75ji$VWp)SbVC^u`eN+!ypgzVw|X?OMx@AB-ZKD*z#YU*Rm zx-LFYJp2polnqqsey-ZBRpqUm+N`QVEHq!CI7E?s@!d+bwli`8x3el`d3_0Ej#~$l zp`!L@;x7}&KSp6i*#PbD01l6Jmubt&70*9DnNv|#|XIZa*Op3k(5qi716cx8@C zML~?ExDSh<3pfY~v^&v)#Ll(dj+^xhQ*f?aAtk!4PnJ#HIY_<+dzvZaDfVOu#Sb+S zI3#7pqt_?%1^rY}S$vdQ+fWVM>UfTQ?v4%jYl3MTj2d2XEg%IuSKPU#KLpy+My zrepZ>8D}HbL9QMKR7y-H^o7UHNa{ivYnw)jha<2={L+$cy-O4><;>QPRP1cwwDj>I zulgX@@V*-ch1IvKBd3~(5S$(8O(KL*L~5+m%c2KVIiekkg=+1ooy89B%&rN=9dI^- z8@&T^_Jola6xJ^m<4ctLM0?=6MA~T5nxtc1VQZ(HE=Kpw;`7}@!3j&vuhfc*dgJ8` zSMf6}Pkvxtk6&F_o&aJh@x2YSmo$3L)cM1C2;w zI{JLlM~fGiAtfex@8#KuKrH5*5_s*Fvbs`+g^-iwrd7~kI0-UND&c(ax7*pK{Q4y$ zPZrii8=7l2Ztn%?oMTBd^Svu?HTmQE0-MR5gR9-wbe`v5C#MAc!|=z; z$eD^O{aRx73lCQD11p^^=53*gqY?2)=BW%*&XdV5n)1`{H0G6!e!C*gnZ0Exk8Ft@ zt(nO>!kJZdzQ|MVbasjT?Oy5{$BSRD*r*;$>8wB1lG1QV!GT846h3-IDdCH79aUBct6$JaPZ5<8#8f|{cFcX z*=+o#*ziX5c~ASquTrlO?9~__RK?hbA>EE$<(AG94Mq~3L(<+i?-$>r)Wm3Ptf4|Q z4Z4}olo+$y$ZF|$H?>O5E1Gg>p}RD5r*`n@P2@c7=&g9TP-$yKb&X*ZKb1tL&kAPb z0`0AzFP--L9Nx;Q&d9Q{NwO^|O6*v+cYdfAnPKl{$|EXeJRmkRFzrpvqfI65lEGYm zKk7die#D6%SG^yfxE$v1XQNy{Xp^dRYHWY?DgohnVd2*>Izi~nTi_kCFeZImB4Dzg zGtduXk|9T%xL9?SPnAK@i@$trtPV?DKOG=tPbH412%}OwhAZdr!3lHTRL9Y%7V>;{ zW$ZC~zG=-=mViOfwmsY;?{?W|J8gvxcQW5hWJPRgf*G`p?) z^7AiKYMs&&k4KyMXvojSA!Ndo7FuTaH|xmG7YzdF%>J<>kkT1uEUbBzkX^5EiD z@aPJ(BQSlwK}V4E0rKEbA3|MR<2WAQHiV6lNQ9N91D;0Ur|997D^HkZiI)G4++sOva!Wsxa|kS z;Gbl>i~Kc_f6&n4Vq>|?sPIVs4MXLfJEow{NUfKkvx?{8r3YwIb#SqzBax2bsw$#1HzQUISC#iU7F}cg)syW} zgg>aKm0a+q5>`KU1bFyvaVUN$c`pg)rp;Ygh%MNgyD$-Ty{6dZeEH7PoICIfCllSu zB%QN&0?HYaS`u=XTt+9-JD7r{N~K?z4v&~RH^{c>ykyDxG;}miFTPeo&f%y{#(nls)w$FhQftSw_I@O!&8oexNIt=Nv2T=D z;pCn9g_C;rlq}YsAternlHHvP!VeAnX27HMe|3D+#G@kZk*Z^&sV(wASs5aY-mK6+ zeX_aB?a6y%@mGj|ZDaA)76>lj_m=6W5>|vFZ_KM=cOX^}2UPIgQEf>vex$k8im3HZ zPo~;_O2gV865h2T+KdZOeHD`lAxlLFDz{7YlDqG4F0tLXwWq%##6>o$;vr!rBx$!> zufQXaNeWeFGGM`d0k$hK56l@>nkRl0fq`tPH;G}NPPM3R+dMQa40m3XZ4@@pnuDg z8{w?o5C`aMu|4Y)vJ!gE$jM6HY2C=YFHyWKcyya7E6cNn((&w0(#ZiO#JrZYClAE; zmX$;Bv)>LUb^Sv_bZ<$sH5bh)8`~;$%(~#>PvHMc8?hKUPxzgchYmi}#hjg_*c`8M z$x$l6XKWngft+>5Wxk?6`HBE%BFa^MwO%)WCDf?Y3Q;l>)l*Pyv1d{m2JK`G$nKuF zxP9vHZ8|{K0h*zUU|YXr^TIy$hKIZ!)MF9By2dMq=TtTY|9zZ-u->;K=#K=SU{UV+JFupL z=FmWP1WN_#&iiVK>ILej>P)s-*ewuV&>&YEL-l0iody0^ptbJLJ;nk^GWUdZeTRco9??i#8CVR!%s#D#{YmWEbw?js$%RPY{QgBG9k+X^X^rw`;I!fx5 zV=?v$q6uZ@dY_}D4Za`hI8a@CR~qTLVPwBhG&>hxQHhtZ?KGUn^F)H6^r*du=`4D{DugZj>yT;hL|97A^-}%MQKjQJ>g=uM zJblu9v2hkhKc|IJS-OdMI?&G2;_mbK8+6T4w9P_)$K<|i{h9v$sOq_6vdW8hdWCA}jrN8i0=ach z*I!ICwdebIY3d?V9MrMAf(7Y2J(=S$WeR-!l0%7Nf=k24(Fq>$BmCr!-=26@2cGp9 zGM3IRS2@S|yke_+pvIfBP42E^rlCwWWE`jAE!q-lAP?;eyTGg-(T;wgGRG;r24TM0e2< z)LqnJxB?L59}=9~SC)#pNqoO;lAsHp={8o{_G~MRcHX$)NpIhSQVR}M1Sp5~NPPi! z!zS_4FRg=~IPBj-lAj&)KR?W6flsypoX)a%rqY`587Bga6r(pPiq=N>GQsCFiKO4 zQ%M}5(RF$7xB1Rh`In2N4mTuL-p@{LI)tt8Z0UCFTQMCy8LlPk8CLNsthDmKr^=l^ zR1@Q30oN) zYu$QZIpkXK=7;32$291AG;@#k9jWd7PO+(0ygFPKD~k@RV14S=(Z~GTGQ9l0_=pOc zvdOSIQ1=k^wwq})7sh(b5J`CoTBoQJubilAbVU+OS)r-#Y$!IFd_XRtqW7cmUfD_3 zCowstFsb-_LPch4-^C?adurUwK!1O?@$gB+fWJ95De1S%$AhczwI4N2z+c<$=_X@hT@zCVJeF-zEkZ2jW?aKn^6aaTZf&2^24>;vR&>^b z^|NrG09axe3n-heK}a8lciV_Y27qcbF_!44T@%~(4Cch3p3$f zaR=Q4S*ZW4SY7oQj~|s`sJ!mvlh;hy2L9=7cz^G_WKnenss zac4t%gAMDsX|pxlX@eQDb_eGG#9jesf4|xUzDe3NQcm#lODzHJ(qM;*n>>~85eBTg zOB^s#CYQjkkH`xZg`PculK_3qs+`Hn0g_}OIAh2hO>}~oiEX~1KhG2-EvqAf8u|(E z*+1$sH39n!AnOeOPW$O=a*Bt)spI6rQVqcYOW3R_yDNka7FDbtP%I8`OGkzxhxYU; zN?2{~>Ptbu?!y|1e~~#5AHHrP{!8E4nE?N36*T0}(_}$^xxm@Eo{f`BCzgtGi}<9` zOU0GnHOT^HSVER*IkkhneH{W07Z(A2H2wyu*E&2e$TKF;?Y9AF(klRe*#OS_5B;H6 zB6;aua$!h6atec5Z=?Q50=V{$RKYrqh=f!S@eLX)4)|i%ok;%O=L`7AlZap&B;F*u z%01*?*w3eE} zQC8i${8?uX8ta!owpy#KTJk6;)Xlfv40YVR-4QU?QT3a1Pt(8*vyK2FmH)rj1G?A! z@~0lqe76HDB=38v=izQH9qU4Na{b(bLn*~er1?+rVrW)N%;ur>t;O8x&0pl5o5YNc z06Xe35QE^a(?R>j-YU16idnqwZ))OAJQae#;~NT*({zgG)#CoRUSv?<=93>|BLG&= zttvl_pq6NFEg?Vu{xHCQGm+^S>evQIei6o5$kpQK?o*OPggv2NAzlZ55xM!d4sedV zvwAkv zz9vm<#Y`b?^v6(n?eKOr|F;zuJqUNjjP?9XTzP_+n|Gv~!vAPH=g56=*J4Ahtg_PM z_JmJM!2=S?Q*xjaUJnUcT)~NZnE2*hj|`fjNAYbD4EdIvQtXSNHfv@lWi{=!j&z|~ zz}%)e;d|@%4Pc7_IT60=l}pjTE$G_w(EJ;L{jiFUY~2Ja#v@6KS}Xyj^5ZuVOKb_# zU+LaBv%R#Xp7g{L(%PZE_b^m&yu>Du_p}C9 zim-?zfZReFlC+5#2+JfU4E2(Zdc+k*o{z^E6#Y_v$E#I74}PdD`o3@~hI%LjZgS2g z@y0;P>J~+xH|RM)6H4@7M?%q-$E4j-n~Z~pLk)+v`c6C0JUkzrMM4CTOxpki#bhIc z3+KGZc-<))%Q)$BlD}5dK;^dj(PWKJpU;dN3W%K`52`e(bS z_EkLC@&gdkD@^^0&b_4NfZ31x^cnk=oWGKyUQI~Cp<&9-C34xU50ow)36Oew_?L;- z_c1Ytfc+rj*$#n*7rhEo+zUqk5*J7IUm)UE`})ep z4)WS4ISLfCdyasAuf_UnzY%u+B}|!3y3X%cfU&VPgBasjM8|LyRqxNRzumor;fgXN z@gbIQU>KHN{^P?-rEt(hO-r@bx?`dZ99s5`n3c*ARY05Lnp81*O_v6?#~Qi8gHbyx z@FWHtb9gvj)F4y#QY_l-(vxG2Jm)f@Z)O2~V7UV+t+OlvIfp@3f83{Nn$lO!(I zsb5Zac)BuNn+Y65u@9#K&-c{W5znQU47V_XSO#@;eTwp_gv*f40vK(C((AR!wxNqL zrVt+7XqnHlL4`!i&(&fr=iW(|Rj__tr2`&dy(8{-FH(eJfE zveKjqn!y@a+BJS~@d*UIrTz*@;p%NzT*Z6Kjm0lew2-9$ICQoxh5i7H7)yY45Hnj1 zY1IBdoBi_++K3>jCs$O^lJ7Ewhn{`&3sa)}Qig?VHdSqZ-#w`xU1bqjh5p(Zj#6KX zxY!R)c!i4RPG9@iCd0~KSMj=~Gv9k^RJX$Ub93o|#2>i=+~2i--xrvLxJjzhSW=st z^mQqk2`JJ0CJLiDIAZpe(s=dXJ?kC!kzy79 zodcy*@Yh=FAh?5-SjZ~L{JN8_aRqJsq_G_qa)#0+gYtJu{TZ-~K{LWMp73+Dfxc-? zdyy%r!ixR*fqb!SO>pwjM4NcPKL$!IRd_y(g=VfP{r>0lIZ2;d2J@MC=-~vgi5#r? zNWSMVAXK=9z$1lhh4l8ykF>PD(}1w>HdFZS*rf;YJ%cI59WwzB-zuAm-!J=%Y#2}4 z9+cWrJ6_!Md#lfs90qmhUGXqzs&P0;?&k;rrC?OBY_<#%PqbQ!c9Cr#$igF9|Jof_ zNq#;>ZtUSX7nkpPjY)Z(BjI5Rc?JsebWL;&@6rHN_o`e~fsThm82v9pLO2)ae;uj5 zff7vax(sQmz5yL)XFb#wK=*K#i}gAz_A3}f8NtHIC0JhR60Hqr@xM6T71#m>e?7z% zKsS*`Q!m-dfvC74hIIZPJB@Mj#uALp6K|Z4TQyJo_2826BQUor2DV7cXxKjdgukBdY)oIeg5VRBV_HzSZ9+BmQfT65Bbvgl(SY4~z8&!R_U5cw&Bzhy}3P z`M+sO0$eir)h21K>*v&z)+Pw_UyVosLQo4h^dt@Ve{i;mCo$Hh<|#8zO`->()Dc6? z`@6B~LPYsIQw-caslw9$h@`k*J#2o2d0yb9C*ypncv$VnsU(jp^C>;=WKf`eK+(L@ zrF%^h)AXINq9@($r=J+U*XEm^Ym!*v_ZgR~eQucfl48iZH%MDei%$WEh0uQ$rws>{ znp)k;tP;gmy~A!=WBo|X!1~^w!1kX!dq7|zV2Q<^&z2pZ{wGV2D>DIhc(0r+4omL~ zIBZf=5*vmZ3Y`|=xlB=hp!m~3J&oy?K2qT->AjIhTin9e`Q`S6W#Znm3Vyy+Bx|F9 zgpS5fR+#2K3~VICtq=UWKB3n;XA@nUJ997tWefGX9#7@qgp>JDYgns(i$rVI>+*;0 z#&C`K&{AZ}Yn`&)dX2DJ6DK4Db&k0BTKt@uS7+1hiv~e* zm0y%O^2LcpEiuU)I+a^qtw%0OJ*cEa+&J(U9*Pnret+Hba7Aog&2!wX$*}UYdgZH$ zmT0+3p;y1g_0$GSRkB6DZ7ZLBLFdd5&H3l?rY?q^OqMkA_F)}M_Oy{Vue(br8IJ#} z?DyAyo&BD5;o{=<X*u89FjDLudTb^JE(W~9}XGjeW|04?R{xMoRBK3 z(C*@p!nt%O`_0FtMTxb`bDW5ofs&%SxFX|WMZ|!V_>8fhg?GHw?8eEN2N_5!)ASi* z8~YYF``k+0Dgje7Ru^0=SxiuTL}mHrO@*T-qa3^RQ%QWoRv)i#9^T1lJYL8 z?P77j6o2{M)BE|$GaElFY>gkAB)%T7D7v2{P+ULA?qbtgBs5^*{$;j6xoK9%*|2qf zVe59|kp6tGvNy8zdaE}osnqN=is<*6Az1nNl4Ar+1WWAmS3bGq86keIf8~YN;a-V>8bj9CMB-y(gQ07VrP%dwhjCz*2a^6>ii?T^fpyF?GBBr%@*o zB^Y9oW4BRS&~1IA{;6-d3Vr6uw>jF8`bHxOWfv4OI|4c3r@E27Y!0P!MWw?j;`*9D z=bE%GLZFB#+Wg|yE2I}VR0S5&z}c?M7Fv$>mbY$GZ0diK-;v8Sl+lJVQET~ro>SE1 zo71k#R%61~$+$z=H@Spi8uXuZn7)Ln>k}NkOMX-bDTOPYS|v@|&b7IK6~~&rT#S}M zpLli9%^N46$f&jsttt0cJB=T$GcBrPCuLAxwJEf zccEEr={8X^>waCz236 z_}cNhgHCUAeZbsc_Z#(8iOIH_cx`bI*d6p9^`#D0Sm}D+-WmFOH@#8xj^FJE2=FKw zG`Rcw4AW9wNA}5j>YSIWr zw`Qd!v7}p#VkVj8v>lEb5?UNX457BHlenD=BID9mH z(n$hwtgP>mNxY+d({^K7c&VbG^ANFZ6whh)?PSNpe}7KNM=BG)_e!7R_=mPpYxZZ% za>GK-9=g2(`;ALg-X0t?Owo!bMr%cu;9Y66kpZrBWvsEZb+?0%3>&)pehT;7uC|4^ zyPbG0l3Tn%oNIMrF!Bo*UeDR#n9?e*cxZ!`i$#Nq_+-{u_q#U*-k3PuwldVcivR7s z1X?hR{s#}e8uR0QOv}v21i10PU48OSz4XPWcZYMJcbn+Ut9R%WKa{MW>|lt{B)XVq<2M6`HyqbG6H1+jHQQJuYlmRheP z|JL*5t)`rrWx01>-h+Ip_$*l0@^Ws2^s$PBTo>w`0OCOqjm9(c2V~l>oOV1GE@S{2 ze8t;{DWF>3+fqLr*XA%1inqqP0-sQLrL)nilQs;668*KmVvrkpsLFkkC}|#hy*auu z0QE6IIkPcUzQL+S&}jaC%V8KXNmRFnb?Y;00RPro{=>;zTT|oXJO+L|wRE9{8LkEk3H|HdCMXGt|Wv-B;?z( z-zFLTTI4XcUrFKF-rF;yu`%$&3}!w?6rHEp0XBRx*%Rvt3#I2TqX>BC-XUazlzipa zoaAdk#*iPBqm+lW!sx0mF`)%s+7R8wlEoIfC7sq5ipOrVVO2lJ-Uw2$tnZ!u%4`v` zseQE}twVpiLLHnnN zF2TCN;brP|4#yjM@V8~#5<>;i-f<&QJj$Ar=Q+dWRiAzfFFnM%t^_v2@@3<)R`nKi zq(36!EARmPmmb3U&4#aES<}&jbcN#E!z)W$ZUG;N@SEilbhlEYG^%fv(MFvdi!8?j zTvclF^uvQ{#D&*~A+by%p}fbQ@z`FBoe4dII_p&^!>s1S!HLKpktAV?7{JR$38S!+XaVhha{4fiycZiQHGM z_yyMr)^5s63)zNSkmHb-%G8aStZH4`hds!JG9bkCJ!|zl>jPY@Qoam&NHaU(1Heh6 zeyi!Zl&q>>Km2M@F4%5Kl8BwzDzcDV(-ep$8XWU!SX6@Q?1)Ty@F7qQxzQeclD=`b zL^39mAM36ry$s=nmAM|wKCT6c#Xf(tWpP|iLKbywP;2l|^4}(!M_bq}v^Tg>8&3#n zq&6GZ$c9Phoz&uv4bh64@(+#9wx&5p&j35wTKL#x18c*@-zdcCPMv|K!-BT5vQ9jS zg+h8~kqTwMl~}pV_mGCRzpPxq%(zDuv-@R)M;BDLWPcYPI7A-I#3O8^S5xY(dMaZ;PWV};U&H{&)dCX&`-S#yH>!@pkJlX@Q4IkNpUHPlqrN+7 zg<>0-U?JDLKW_^e`>r$i-VkM7Pxsx<4pJf~^TRjil{SW}dnS55*e#V=NSZmdYKpWh zF^3BaFF8cB$qvdnN$fqjg8*%oa@66Zo#BKOX_C!$s2%FyPd^-gehbxd6G(fOrnB+F z1FjAF{pu0G9rRwf=fo3+489XvF$uf`8KJ9f-m0O%WrH#60fC)ENROa+oaynIJmPPc z7_0$~j@TQ*Qf5)$l6p9y^FjGjAn8#MDG4v-=^>4tD>A}w{*bF=CswWLbdIe{ACSM$ zPgs|3gPfuD&Dzy(0~q}PfO~BLKZikC^s)EPAPwBl%yhN*jE+1|1eOJVERx#!8rX=? zP;Z3ck$xpn%WSm*SFv9~<4ku+c#&-_qWHoH%{e7`DQLiw=XH_{@G416$$7ofowYHe?aO&StkE{JTT1 z9~gDHv;QUUF$CF50PX$2KgK9Uypsq-8w7$XfU%T(G}D;c)bf*eC%u+Iv(*&gTe?zN zXOEbvgem7m8}daydxcW_(KtRlo!4enwYxbgwN+Qu`wT+4z3X~QA|SDX_?rG0X{~I0 zMu#1G3@iFFLQVjA^k}~#CEZl>D!riFgo05DLm$UGd^wdP`5C20B{Z64H50eww@@g( ze^wT~EQ8h-@aEd+&N>M^FNYOE7x42!+!Fh9@J5HlB!Jr_(k=3QpDkqOPYvC2h>3ko z4bdMUxe3=yF@6*d4oP|`=vFd(7`S2;U`@K|l-{;mS>V6gG?MRd5@7eIVZf`M1(p+w zw&6%~8~l}Ac=E~nE9YpcIqu9tU}b5W%GwOQauRk1_rs-RAApcY|2&3j0U#dy{7ZWM z3vb^GV?y9D01-DjVi}TQ<;91K?)#frXE(^CBeFib`A3J|LABt)Y6vA-7R`ID({cDq zCV1M9N>>B;{q@_3l|~-{Tb*zbDMxLZMdvk8nY{kABS4Y^fNL-fFcCHNo7rRFZyMR= zX$)N1^yjrC7k~?m2rzI#yOQj&dwYq*hvU;1Q7zJFHAWrj6KhO=(EeZb!Bao zf1Q21nYcTZ<}0?+n3Pv}`Bb4wds z!f_keYJ#)}i7LC&`EnUF>t@*-(g7qZ^XVmbpA-QUV9Ab7TR8HW2#}*R3WAdq1%XY) zeukp13;s*m*0g<}*+mj9h-R^{pC9wQlW%xLB&0Qn*(|e9IJ1pT(6)rN`w35MISQY$ zPwbt?#Fyt6RzKPt>stblq43T7+b4g@0Urps08c>qlD6=ZGXQdDfnL`oWKk(jAjUJN zcCbglh!#SR9vVJg=m$2lo%-0;ebH=nrhbLa1Gz0BV6F3HfvZk<(Zk3zwH{}!>sy_~ z`P$_5+0|Azs?YLx6`zW4L*mVqjjKvP5YBq56(epL%3G+31lHq3*l#0Ir~SSFFN+4I zX9RtjG^o6SP7{6blo&l>kf^63=gR_G3&#LV1Bf~RA_?NDp{+8WVYuO~FXA=CT9}*N z6T^4fe83A*xYRRpu`;uTp~mnrW$z2m>oTPRdB`15e9@@6bt#}VJf%HPn}taP+xpX3 zN8uuZDx^_%zqm!)7Jo{U~z#i$OqNa7=*F z5zfH$4;_qHyWzJsBU>Xd)lcsl-XscpyY$>r$G&O+I86M=GLN!Yc!iDt%2M_wyL zV4Wt^Gw`>|Xulehrp;&6^4lSUk576o@pD{lvekgoE{x=;e+T=T~TU^aEK^ z*?}HrFcq|Xe?2=T$Q^ucNB3aSS~voP07+YakM?eoMl`qb`y+Lk10(MX+(T&#-}ZM1 zQCLM#9nI?Ouaq4yG>eaUt`#mGu$N@-an*G{U8y6| z?7-c8OE^-d!zlPI}0Qzw+@sFZ!(+dHbUmpsdoV)d`=dVnrcs> zT--mK)ixvRHCJN0a!SkWX&97pCp*PZxL@(op4boG*n{7UYB|rET)A9y+IRBJd*QBU z3#B0K2IB1Xhh0Imp%Joe@PVI0BiIVuEM>#40PL2cRvt>&rC@h%_EI}r(EM{C0M++^ zCw@da_E}j>*60lVEm(IqD8kbLF_s6X0zlfAEPVcz`B#q?$4Z75aGB0>>hyxBi7?=H zh4X&G>nUmUS+sK%5H*1Bx+Vx*4V4>5{xld~D9ucG_9m0|I~4D;4@^Mtsbf5 zOyY*-okT1;voC_F!d#zR3u5K^MzbF^{F>0Ndi}HX$!9z}+uv>*O!vrn%=U(J;u?yS z7c0v{A-z7LOCixTNIVr^5~6Q7Qii&b`T_u>n;_)urM7XmCbTCrHNjC(6Fe%2c^aew zIiqtxj!YYzcM3e~tHjS7i|7Vc-?u@mMHasH^%&7u8Cd+W9f3Ga;eqMwK~r8du(2Kh`xQv|8Z}3xZSxrbLMkGT)K-7@IkidRCOCRJR)VeO z>E=j1CrhAS5d6ilm_xu75I)@ik6D^zFqWzS#68!F1a>Zn*tSh_UTj50eJP){)n6#n zMpPxm0y`<@13vwhh@QwZyEtekxWmEyug#-EbF)@MEVb7GTs9B5wI|M&E^=pS>z{i% z-+JaAGw@5UsZ0qeTXC<#3Ze_ay+~kd5&{rbX8URO3Hc97vPL||XdmQv)-|G_dZw$r zY`yE|pyuz-Ds?g*Ck-TcKn9`LtrenmE7a8QHn?>p?Wmm>148T$X7K~x0kUpdV2NXI zGmQma^M^iRF1ZgmAv%U5I^q07HzxH=(%%=N1Vrq$@`C{UW0vP?;g^euIRb90ytH#P zL7!b0UonV-(jlgDA#B|Eb{dZ(9(tZ^AseOwqlMV(TTf+CVjxHjMv-djv-qFEX?d%q z!I@5CeEE4`wTE3HYRP((<~yjZ+}SE)*IokP>*OvK(1 zX6znFg((1!4uGt)?kVz>p-FkR;2h4GF8b_2a1LkbvoGrxQ$uHE(C2AKn8);f^ot=~ z1weGR0J2jRw#r+P4Fwi7bOZw550EcwJ~NF4V4S^bUj9~HXvUWb2Uh@likdi>02X`N z(^4!<9>@V{LpN=X#tMr&hd^#WUN}}yboj;%r3V>uld#^}AV>&W!?zD%%_Dm_aSkAS z0S_cfIghzF#uu<~+$rZFK1oL3N@9&vMa*dp4@LpI4{=pD?YJ$#3eUPq zF1=kdy1v%T3`xlgYOJWz1R(Cnmfv+cJc6l7*o8UiaI&x^@KS*9enLarYvDQ3H)k#F zCgeNcOL)Eq7=YJx`bqwj5~JLv$Pvvk*|m&#(1$&&**G+}n#T+#^&(!(G#*5-I+_$i z+4O;Ji=3w>V(J3OBX9Yqx!!bYAr5Ba5$$DXR$<@)Y3CuSs(V;Fo(h*@&FuGe+)5OJ zq;V}2i{t`6@58r|$?hM8)1d=mU%_J(Mu{ZegG5|E!z%_5{FIO1~*A00VG*#ULXJs&`5F0N79~uP63lTKjvP8Z6 zc=?j8|5Uv4zhZ^7t=RcW=q5m?!EmCo4aCOy`CjdKty|&87om6?A941@4N4$-#2I2+?!?1k|ynnojwPm z1wp+vfn{qVD1+S4@FHR*Px^#gEK@2rV{huDR;1#kVzKOa)}48B;BeJw{okNX0ia_* zuoUG(Ij>4KoB4s#C8mIm zn+GpAYh?fsLt3_FhFgauX~hG%W=1C7e>NQS6p0j*`hC*m!*0@5#_|w=p3dy?!IK5< zz*@Ov0BmYOfI<3&0+9*00=p0bB>wBvBU5@~tenvB(gZ&olBoCD9+7HL76O~>9-aw4`@ya=^cXm|uNkp~H(76|hS~o(w zd)>hDBuI{;;&G>uLfXuW_tg+Hv^6Wq`r-~4(>m(08Z?NYp^dodjFN)6KIE+MU*{ zl3=n7F3eZLBAJ9)BY>cbA!TS4*9d1j`u58l05BO;^<4&Fj&_LJVt8rqgvPX)DvmwHG}N6kTs`V&CkYhjy=Kj1lNOezCh-&)Bl z8S%23y0B;-ocmFLN;NeZ9}AaQV1`8%Kb^GBK2ZX2$%(Kxzca-82Pq!h2&#IVR#fqU zpZt&}^T}rhOT-a>D-l1H#-ysJHgZUUmlX>n1R3w6iu6-rzCKWVSy&o8ezOe@l1+YD zuR?2Vfh=o4>Zr>7Bft)lHMbd3*9E~z%%>a3gsu>QXNt0n(4@buMrIgW2%Z^rsZ8TG3 zhr+aYQAIr@t1ia3>~p-+Ao#gtt^o|^kTVPjI#a;5UP4eSxm27cqs-fG8_e|51BsU+ zfHySA@-mKL4aojBvHUx!(xNdRY`|=I$eI-+@a2hCkw9WXBQ{$Av2h0Wm&OZMzq9Vp zxQWCT88i@BhX<|B__ZcBb3>)k{J2?)=2qDrrF{Pkas~_Jud>xMa-P?PP*DJG*u7%} z_+CFZREt-E9YKxAchI5TY)jW38%(=XjfllQ7qARHCx;Sp3Z)fvV{3awvUwXJv4`IE z9E*SzjrH&qgB_@^2SZr)=%N=u7a_N+g)h@MYm@NOMRouzfv5b0=Q&Rg3A)sJdDOJ; zypxi@47$5L{95OU5(iMlEg~_wrie~@f5>23&1pu~^Gs$UxMI&}#N8n{gOx?E^A$2^ z+sBBdO903JJqXhX3EvC)!sFU5v;sF`uT-(a4ULk0U+CV}8#pF=_Gb!8n+I?j#%SC% z!OSQUvIkXvD}6>5f`LI+=x!1~QnW8+0lWgli=}&tno4`6i0+rRE`~@-^UoHj$F!>g z68_(r3mBoIxx=$wb&rH(r}X@hFlnZE%*^(Mlq?H%(!T>?n08Cj)BP1-=GsjOea!}z zZ9Io(dhqc%`3{%#@*9qGt2FW{01)SQtdXw|x%NP9#nJ42_OSvF%iKO;QTxakEYmL@ z_VD6SL<8{aS2ivIizN-shZ{7K(*{|Jkek3nXhm3d3PTeOQouT(MS;fz@SJ16d|;JK zx=D|${$Qua2Z_}8!%Z zX`AVpN90DIlpavf(<_5M*_e1t63)BIQ@Pp!zzYi8UBIUWsqKBAY&&}<-@Gwqif$B4 zY#Ms-EeFSX>{oQ8OTjO$?+qzqgrgCh?lVI^Ih-4k@3$r2(+Z-#!8v zI*%5&(Gh^^QfO2c6ml^q%XpZs?8&GU)OzErr9xf6a_lh4%{G(oBm0@h^9_sNmpFYo zOkm`c7e57Ti{}dk$d$u0OG_9 zXtgkafrEbN_IrNlsCTqbc^QbK=k-zy-)qHbvGoD5@W@`Vffy<4MbmBvbQ2SUWza`0 zL%uzupKK&L+}XRp&a^VkY~6L4GlI5~2rx!h2u1);2K9J@*-XOmx`$n!tO)G`4%{V) z*!uVUl)d!rhXC{KCaiIOe3&;U=%JXsOJ}~6NqDt`oyu~@a3tKtSEi~6tSFOsUM+Y;kq>>CD3g{1|t4H=}Jx;9!DVn(Dy^OXf;7b|_2#pVO-XI_g(#iK7A+>%#OX<6=( zN%XJ=paBl0@b@(IQ016vD4Th4rRD9VBawN0!eH6)&jJ@KxQ2nO2;>M|3IMg>(5Ny& zX5+IXhqPic`(N!u+i1U+gVsComfjEi;?~;?^=Ci~eaQhn$~U{gpyOJAl-zCOv|cwY zuaq`X3eFCpGotyFQ$t^v!pD4ZU=2wYtRb!DW3A}@Nu{#bix-{sP{R}zKaHYEoqORV zA}_#>T+oYMPbl`gHR2Gh*RXg+;H_ayKnQCrihr(-QR}W#AHJezk3+>k(P9gdTTK;g zT$5c%%Aa=`$!S|;X1%3+vn*z0$6O+koAszS#X8QujF9OA%_SbQLVkOlj3@x1LGK!t zxkMuiUjqj@h4tw!%1Rk8*zuG9>onlM&>U**D)Yv}ju7!FD@bP0=XXAqA`oMM=QI~Nv%TT5E%C*CUEV~oyKt%bKozZZZx)^LoyIux zl=+ZhT559I&8oN);IkxqX30)Js}^bSIYP19F;G%SO9(ivimBb_;9e`?zgzuLZ#0>a zppnhP_Jztu#PWI7YypaaUjxCfeZmY4rqWulODqVT)!Ufb`Z!iDL|eB*cku{o?JBr z=N)hmN`%brN!=|`wS9|65v>g&H8p(Mp0DG!`|Ahn$KqIJuPU+5{hPl0-#iT?(m<2W!%4be-yPkX0ANkacn zt3rZ#Fx;+2@*42Fe_TiaxW+v2Nq2Ug@#G>U4O7@}XHQVYX3R3F*LJ%&R@1lJ85fO9 z?-Fxj*jNeTq6Sk7bJ#FAn+*jd9q#&%d!sb1c{GmXfK}mlYpa--C3%F!$&N5_bCo7db`XqJxuMY{IUd zy8FT#_i}5p8b=iMBT||t5|r5-#2kXTgg8Im{dCB*(BTt_Dh{yon_))^=ZxjpzaoR}&XKh%H!EjgMb{aVY>dx%{A_lM-_>afH2j#tWB#&fdBb09MOhf>WlKpXa0eug3?ktoX$pn7UiCz` z1@rCFWcJWPJA13^;4tuIKdkte?FT7LhOQ$SjeuWr5h&>Y4liqqo4vgb6!XiMwn9QHfCZ zaOVS^a@9lWJm*iB8mljIzBhawAo}O#iToexLeTlq>T2!HNTQs|gf-X{bYs;zi?0rj z#qM+{!+=Wx1Z@Fs0Oy$EHCbGuMN_N^Ku(+?+Ng`rXXm{DCOK|oE2Rk^4?7c~aKxs& zCQk00Z_kx^Ep~O1E^rb*P=U7roZPn$wS-O^lsPVDVGw)Sc&-dIH$Z2G!CinVE|{^mk2w?w&$;h zCr^ED;w1q7)Zy61ETm*6l|R|7t>d71GSq#n9Q;E13|JG*(R>GjNB~{RV*U{sDN5PS zYyC%M(#~`lEU97(YgFn!wUUvL3Is5*51**H8FR%4A072TD zE$jy2iXbsJ%Iif`XK7D)g)yL1(Ra zu-pB?H!9te%jjH)kD38x}E&UsGS3D(M7O{0N~iasbpAnLu0v5R4;GZ^jW{Dztj!Ef2akx zrQC;3G{4HuuYA*4?YH*~a9$O`ZVh^;JGJobu4@v~9^>tK!rYv(L*(Fn5#O(Tkt;g&n1h@BGOISs6CuN01O zq>2TMcl2H3peW)$Tgk(+s4pwQ-#s0`v3#fdJnK_n3V^GktsbS!daJEk4H4Gi(IBx+ zWf5C2-sQEn+cLRLbb_Alsqt!vA_Q^<)Hp+A#Kv&`#d+w4@pWYTa_LXnk zlM_NE5MHM8@6^H{zNwU+%N^ZmcmQ+;FC!Amy(4Xu3SLLeyF49^?7Xrj0K^d>M?u|F z_menM!Wxlc&Ea?EuSWxP;^L9g?v8)zu>{xDNZL=Im{dKDIj>?JehmnH`$%eFtQZCx z`QXbRSJ4E&w&L9AIVD}~x4mhA?3_5jVt_#+_dz-3H$Jj3EA&0P_m&l>c6wz28)uGD zT?1+&ZM<+OIIB+<3DQ|9+6!|a<(~Gif{Qp4A{2ond3DKmNp*YdlH=xn!G!)-kN(DZ zUph|AKb?IQU*`Mu@4CrT-}@sY5IILH4g--8ICPu)4bDAnjJ)=s^&TfHw;NwS?aGsb zB)$0$YkTbD83~dCs+rX6y{u27tha+Kt{*RZy&8KEz)miB821>1#c~y1>dk+7IvHtu z8ha7Ayy8HZ23vWdJ7F4t9#sJJ7`S{~834BeK!#M_6=c}Wixou{fgQy34Ay`$C`Mvc zWQ@<*>!IkwKH-_v&C9nfKQ|4c@^a`MUaiIJK{kJFkGRxtTJ5nST zI^U-UYMJJjNfpB0jAdWd3S>B#m{?WzI0HZ2&dN{gNi}Ew<9~wL)On~>v}nL5+xh*h zh7!m?LHfs1lhm7BWQF(hpx8<56s?^BV%a#qJeZfk4{61EJ|C-pc>L{MSTx0jgQeU6-{BGP@sDB6^flpa zDWWt+h|E)#|AoLAP#0DLZy{09`!WSy(B(8hZrZ*py^Q%w!nio|oDE0}w*HiSj4yD( zSY(CO-`3_YQ#}#$3vgV|J6%Ul@m&XlKtFQSfycdF@15;ZtXlPfVo|y*_I`XfaO$V- zUyM+DQ{Zv`@n0FJBTJh0pDs^^N5rw5=X=NxKU$eeFR7bqT8kPUP@AsH%|?c2LrH3p zayK*#ARi6q>-ilHSIj9@@Q;uLc2bEP(o2)`J`n`o!1L_|z)M6FdckTkwI%K7A5Vc8 zWzCbI0@^Mr=h!ZF1#tnm_e<|@!0*f5UA<|7*wIy*5-IPQ9M20p4~k_~Z!`N;j!Xln zd4|Z+NzfQ`lL;faPH)L9-Ca~(tvE$Ji$1v+(!L`tOkV&n$F*kwmpUNQVZUTnO=Dw` zVaty0SI?HhCgrd`K(Y$CPqca3eU3U<>s&G5Wjf;U{Gi%=ov>{@0%_F*uy0OdqTC0n zC6LlOuW$xFnyI6rnVw5}mKXK>jVDSNni^ zOmFZRErpZHk>MBMUTSs8A-^Jk*Ko)d*MuUmJaw#bkT`&gNeMkSFYFYj4u=Vp zAj30iP0GyFHw1v2=(W@|ACJJ7yMR5kI@QR_gO3#kgZx}^y-)WXn1AbG$oXNx+&lGx zyU0}qwT{m;s`!onvZSLG%$xrz=~%bJfn(z`7_#$j=l37DaRAP4uRb2`1#(jGFJJ6wGU4rh?Pb^9Rf!Slg(I7G2lU$`I{8byZV3ydS`CDj)z56qzsedvl%2_g&zNOUEl;CUkYZ;w;U2`@8jiNr{AdV(0iL=>o8!5o z+IJL8{36CFUlP*Z_08u0LU}@gqOa|=5WzK)a8IAN)Y3`6jqtM$#6PRkt@BMNzC2d3 z2@3v-bCk?K&VkMB6L9SKNpM<=#$}>tIMO7|svcN1Js-`~1+Y@vWaLZ!TOG($ai`R} zaEJH*JW>Fi%t(kp0GU&Ccc=h3jH$MhCAI-ypSw37%ogX7lGEA{$bHIGPy++G&7fRf zy);-Q9m!PZg}ZNFVX~myKaCUQ6gMP+?oNX=oK`%jN92aPjl>=t1lT+=L{qmrSXBm2W|7B^@Bc^Wu&B&zFGC7XZ_ zAO+Ik7~&ol4c^l!x&S6Y<#&Qami8}ohhj^sO@0BMw~!S#O5}NWt20m!;+}fZT+n2R z4w@|e*=M?Vb3@S*peT`OW~`xq%q6%-S`O0S3<)gCR*iwBIxFDO^lV&ic4Knybh^Zk zvVg7rxz@XO^S2o$qu1tgV`sry@k6dij2{kU6f1jnTV4ME5`e_NiwrC-5YP(_ z?#*5YunCY=zo;Ueb06SgmAIOwP)I_#I+IgK_2{U|;>+vcGQIzXE@OSxMs*qCDo8fy zb3w0s58qx|QN&(O-7i^qm!#*>y?^KF`G+)@|AZx*2+@iLsH?6z=eKX|3^#y2OI57W zlMi|ziq2zRURC;2UTcP@I3=RNt`-P+Mb7Lz+?QFy=;ihJ=f}PSkQQXqw#W>s4p`w5 zwoCbIA^}?`kJWROvyn4jY}+1o!!axs&d&42&yt5Aq4u-h_~3P@!w8FVy}fdfe|(?* zI7=Y;@hJFIfmrzZ$VE+7ISt75c5Q-6wmjPB4S%tyHmbG1avi-euSZZ9dtW?5i9Etm z8viLI3>J~Q_$gJ?OOLRdQca4GlHfVI(;wa5B^!OEwoVuXp3Mz>WU>Ei<<;+x^a!Rz zSZjN?hvlm>3F)WI$o${)rC;8upZ69`9h%Z|6j;2DBJ55fl7B(-Y?U^ zN%+No$BVYQ%HWTt>cozyXdeHgPB?q1`M_IRnyhD>ELOxG0GBxhNUj`BP{W`bUv@$7 z$ECZ}(4i1x;sN1FICdn6Btk4RsFYB^sI5G9l z?4tKmDGud>Lvd@F2bJf4+-IoyI)Mzl-!3GHpT+5n?U+`F)2lb{uFQiP!C%sEeMx$d z8@zq+`hI{Aodq+7i6!l!Du{$ie!1tc^tLQSOt!|7?b9b#P|e?I>|q`U$#_}ugIH)s z->t<5P?YcqwkyU z$HeV`pp+IH$5K)6{?>+J-%@z^BmiM{5SZ-Wn|y{HdBvi0M!{f)*{PWt0w<3bWP)aD zp8?WSxxMk!oXsP{=r2vacj-Gq!Bnj%-lCMh=_P=4V^j5dNA_#CH*;5xF9Re4tAoos z+Chok2_J(l(51u`AcRNY0N?z$llyMHV8)g`{F|TyM88bimJ(Y_0QeMB(G>8lCzhQ# zTKr3&(`^je$YIHZH6660if?M$7iFCxiv>;r%+kVD?)?8?Eq3WI6408TfCD5hi}9gO z?2ppiZT0~{FuvmzUm2XGf|FOh3wBT4!}6|7x>$;`gu6+GDW5uq)4%2e0YtEVH1j@@ zcfx{s$x(Z~?_*5TCh+|5aA@KG!Y^Og*l< z*0%bMd}OUii5s<7JR2{=bBiJw*EHF?2^oIjZYI#T)iQ^ca~ zfhAMui_=!&U{j?gk|!G}sW9>G{|RkNPT3hrBkrwY4Y`!C5jJ9^<7?j=Bd&f-N=2rC;v%$ zS;*m$gBIxcvY%PAq3v~IBE|%OXZ3ZD*yh{?OC89RFJL`H`*Xf57Mu>T>%C6-U-C2{ zL$bn$P8UmxVJO=As+EtGr~b~WoGmvlu+@IzjfAqM$60Ljoi=ThrQLY#Q4;_Vy}ZhG zR7F^CK$06CK<@9p&R(4c!}g)*E7Ntp)wG>~%U8dXMMIk)=WG+oymfynMK6?am@7HN zBlfq(2wR0Kf1hBCG?!=t(Kh#J`W|7A;XrRevKQQu%|o@I(+VI=eT_XGrO z*6o)a0Xf_w74$L1p^_sMT^`UF#-}~5=XpAJJFfJq(x_geDJxz_ zjA0eBaz`^8d|5TkbD-#Evep@hf~|x6WC_;%lSY$|Tu@dd?vIDyc`DALF?{Bxy{aUA zn8g3~#PWI9eXNP)RIbfsr-iq*e^Jk=6kCUbBn5iZcAhob{nJf$iBDOh)B5tO0aK)*-az&<**=_&j+x3`k&_r z4?yMPN8;`*vdqXqZPqL@ICm`@p8-6CDFUUxq=7ANlMY6zCAgr?OqFH0(y}ujCMz0W zDh1>h;7v+7=vwf<%KYP%h-%53F9}6=b$*?Rxi;=^9XrShXCZxGp)Fvu;8iL2{f>@BP>#Gaex%Xm z?Mged+ebiyM&HvPnXAuJFhE!mwzzdKEacbnO6huZf-+tqN897V)5fRwdR!e>YPtN> zDaC*5B(S6w0G0+{=y>T(0dq}*P8ranYS9(|T(c)%m71v!Zk#j(=MrPhw`M9%IhbYL zm|+Fz|6$JH_{~^O7?Z-5TnfNUAo=w5U+z<)QFjM~1^zzBB_;GCxi)|$NB4TJWx}Eh ze^bW&H|T=>EbxnM&p#2ldfrjtGfPc&)*=3heXoKkk=NfHI5-PWY*Q}+!2DBEbw`c; zlj|IWR*l+=39c2$nKqB^MUW#%HpTHm%`xBq+Z4g|drTF_0xx5e!X>1)_2;Bfl=X1D za?p?&IBNu+)#K-O#`s^Z?r%A$y#T=Sl=sM;ik7bQ0~|^XfMft|xHI^NE?8Ik$4HEq zHITvb-rsUQRj3E58Bgw(vytEoR8piizjEL3KzWF%!cHgVNEH(M^j695>7aVaTaw_m zVDq-<6{vw#Pv4n3T4mB0z^S%`*@G3i({?967IA3V+M_`7vR8I_Q=YqOr@nyE)O{|4 znYbbLJ{9=<08>D$zodHCU8yTO4S2f#-Sn=Yvgf5Tak{L-m^Tg;^{!J?V9A-1Kr^GRtVuBe1_eZ&?n&?vz_C3$ROkT_W~n7OU04;v1=?t6 zB^gd1OF(RB-jG`PAJuP6{pa)>Wy7KOf>f7zx71d`E0!h($^}cSi1Qm8;puJF=Brd8 zj_n46O&%V_$T$Bri3d1CYePcu_%bwo#k{x8*K`Ib+oOGlRhiYQ0$bh5+Y1Av&6V(A zatc1uV zI8zHX0QG^aeo&@y)@;j$8`F1iW|KVY)3@w1u)aNS&gnOP!0*z=Z+m&BBuOTp{v2Ap zkIloJC0mDcUq>(N&R>%fi>C}E7K2oS-BMaa+Fk*EzjS+!Np(lw?vMdE11(H#?wIs5yp(Ipz!pG_X% zy%Rxe4^8+W04Ku)++OQ}LrPYeyB1ox1<0A%x3iJ9N{d?qjum{?dIY|92ueUjO8eky z^^nN@5opU_Wg-r0?F`vtRMC;k0K9~HZtf4)76a>KaeBwD)`W+s)#meu^(nR)_Y2B@Fh&5=6%WiyKt480Cxxwvg?sGqA0#K1b+x)p^=BmejQHUz4Oi5kwSVA1$cJx_!_}+LS}j zUH^}@>G75WVLI;uf=5)kl$5P660GRAkCH9BdKdXscq%0A_{m7e-$~Ks%tQa04W4N%BZVWOz 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

(1t3Gf+=q|pF00c#Q7I& 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∓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

>P$nX055j3fSslH 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%0A?Ti2SlF=6PP5O?CtFw0H^c*r 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

{M|XZnlaUZ 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 diff --git a/aops-ceres-v1.4.1.tar.gz b/aops-ceres-v1.4.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9ee15b4c582bb371059ff5e42317bcf223623cc1 GIT binary patch literal 569462 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