# Qualcomm Linux features Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) This section provides information on the features of Qualcomm Linux including the following topics: - Metadata layers, which are included in the Qualcomm Linux - Recipes and configurations in the Qualcomm Linux metadata layers - Software features added Qualcomm Linux by Qualcomm - Tools introduced by Qualcomm in the release - Instructions on how to build Qualcomm Linux images and metadata layers Note: The Qualcomm software release is based on the Yocto Kirkstone release. For the complete index of the Yocto Project documentation corresponding to the Kirkstone release, see [https://docs.yoctoproject.org/4.0.18/singleindex.html](https://docs.yoctoproject.org/4.0.18/singleindex.html). If you are new to the Yocto Project and want to know about builds, you must try the first build using the Yocto Project documentation at [https://docs.yoctoproject.org/4.0.18/singleindex.html#document-brief-yoctoprojectqs/index](https://docs.yoctoproject.org/4.0.18/singleindex.html#document-brief-yoctoprojectqs/index). The Qualcomm Linux environment consists of several community-maintained metadata layers that deliver recipes, package groups, images, and configurations. The Qualcomm metadata layers are stacked on the community layers to provide additional software components required for Qualcomm reference devices. ## Overview of metadata layers Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) The overview of metadata layers introduces the layers that are included in the manifest [https://github.com/quic-yocto/qcom-manifest](https://github.com/quic-yocto/qcom-manifest). This manifest includes all the layers that are required to reproduce the reference build. The layers maintained by the Yocto Project are introduced in the following sections. Qualcomm maintains the layers specific to Qualcomm reference devices, which depend on the community layers to realize full functionality. The following figure shows the layers included in the Qualcomm Linux release: Figure : Qualcomm Linux metadata layers ![](data:image/png;base64,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) Table : Qualcomm Linux metadata layers and descriptions | Metadata layer | Description | | --- | --- | | `meta-qcom-distro` | This layer provides a reference distribution configuration for
Qualcomm products. Image recipes and package groups are defined in
this layer. | | `meta-qcom-extras` | This layer is an optional metadata layer for registered users.
This layer enables source compilation of select components, which
are otherwise present as binary in
`meta-qcom-hwe`. | | `meta-qcom-qim-product-sdk` | This layer provides Qualcomm's offering of Qualcomm Intelligent
Multimedia (QIM) and AI SDKs based on the GStreamer framework. This
includes a set of GStreamer plugins, sample applications for
multimedia and AI use cases. | | `meta-qcom-realtime` | This layer contains changes specific to real-time kernel
configurations. | | `meta-qcom-hwe` | This layer contains recipes that build software components for
Qualcomm device support and value-added software features applicable
to Qualcomm SoCs. | | `meta-qcom` | This layer contains Qualcomm device support and upstream OSS
software components. | | `meta-virtualization`
[https://git.yoctoproject.org/meta-virtualization](https://git.yoctoproject.org/meta-virtualization) | This layer contains packages for constructing OpenEmbedded
virtualized solutions and virtualization tool stacks such as dockerd
and Kubernetes. | | `meta-selinux`
[https://git.yoctoproject.org/meta-selinux/](https://git.yoctoproject.org/meta-selinux/) | This layer enables SELinux. | | `poky/meta`
[https://git.yoctoproject.org/poky/](https://git.yoctoproject.org/poky/) | This layer provides build tools and files that provide various
software components needed to build an embedded OS. | | `meta-openembedded`
[https://git.openembedded.org/meta-openembedded/](https://git.openembedded.org/meta-openembedded/) | This layer provides a cross-compile environment. | ### Qualcomm BSP metadata layers Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) The following layers represent Qualcomm BSP metadata: - [meta-qcom](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_ebf_3dd_51c_vinayjk_03-18-24-1703-23-746) - [meta-qcom-hwe](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_tg5_3dd_51c_vinayjk_03-18-24-1703-34-31) - [meta-qcom-realtime](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_atv_3dd_51c_vinayjk_03-18-24-1703-35-26) - [meta-qcom-distro](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_yzv_3dd_51c_vinayjk_03-18-24-1703-35-206) - [meta-qcom-extras](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_n3w_3dd_51c_vinayjk_03-18-24-1703-35-429) - [meta-qcom-qim-product-sdk](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__section_rpw_3dd_51c_vinayjk_03-18-24-1703-35-615) ### meta-qcom The `meta-qcom` metadata layer is hosted at [git.yoctoproject.org](http://git.yoctoproject.org) and provides recipes to build the Qualcomm OSS. The software image is built using the following recipes from `meta-qcom`: | `recipes-devtools/qdl/qdl_git.bb` | Qualcomm downloader (QDL) flashing tool.
QDL communicates
with USB devices with ID 05c6:9008 to upload a flash loader
and uses this to flash the images. | | --- | --- | | `recipes-support/pd-mapper/pd-mapper_git.bb` | Qualcomm protection domain mapper application.
pd-mapper is
an implementation for the protection domain mapper
service.


The protection domain mapper service allows
user space applications to access remote processors on
Qualcomm SoCs. | | `recipes-support/qrtr/qrtr_git.bb` | Qualcomm QRTR applications and library. | | `recipes-support/initrdscripts/initramfs-module-copy-modules_1.0.bb` | `initramfs-framework` module for copying
kernel modules from `initramfs` to
`rootfs`. | ### meta-qcom-hwe The `meta-qcom-hwe` metadata layer is hosted at [https://github.com/quic-yocto/meta-qcom-hwe](https://github.com/quic-yocto/meta-qcom-hwe). It provides additional software support for enabling Qualcomm device. - **BitBake classes** See [https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/classes](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/classes) for an introduction to the BitBake classes. | `classes/uki.bbclass` | Implements logic to pack a kernel image as a
unified kernel image (UKI).
The UKI is composed of
the following:


To understand the UKI image, see [systemd-boot](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#systemd_boot) | | --- | --- | | `classes/image-efi.bbclass` | Implements logic to generate images to pack in an
extensible firmware interface (EFI) system
partition.
The generated image contains the
device tree blob (DTB), kernel image, and
`systemd-boot` manager
binary. | | `classes/qprebuilt.bbclass` | Implements logic to use a prebuilt package
instead of fetching and compiling the source. For
any recipe inheriting **qprebuilt**, this class
allows to unpack binary packed in a
`tar.gz` archive and provides these
to be packaged using a BitBake task. | | `classes/qmodule.bbclass` | By default, Qualcomm BSP enforces kernel module
signing by enabling the
`CONFIG_MODULE_SIG_FORCE` in the
kernel. However, some out-of-tree modules might not
be properly signed. To avoid module loading issues,
the `qmodule.bbclass` inspects all
packages providing kernel modules and signs them if
they are not already signed. | - **Machine configurations** Qualcomm Linux machine configuration files are available here: [https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/conf/machine](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/conf/machine). | `conf/machine/qcm6490.conf` | Machine configuration for the development board,
with Qualcomm QCM6490, such as RB3 Gen 2 core kit,
RB3 Gen 2 video mezzanine kit, and RB3 Gen 2 vision
mezzanine kit. | | --- | --- | - **Kernel cmdline** To update the kernel command line parameters, update the `KERNEL_CMDLINE_EXTRA` variable. `KERNEL_CMDLINE_EXTRA` `DBG_CMDLINE = "${@oe.utils.conditional('DEBUG_BUILD','1','qcom_scm.download_mode=1 slub_debug=FZP,zs_handle,zspage; FZPU','',d)}"` `KERNEL_CMDLINE_EXTRA ?= "root=/dev/disk/by-partlabel/system rw rootwait ${CONSOLE_CMDLINE} pcie_pme=nomsi kernel.sched_pelt_multiplier=4 rcupdate.rcu_expedited=1 rcu_nocbs=0-7 kpti=off kasan=off kasan.stacktrace=off no-steal-acc page_owner=on ${DBG_CMDLINE} swiotlb=128"` - **Include DTB** To include the corresponding DTB, update `KERNEL_DEVICETREE`: `KERNEL_DEVICETREE = " \` `qcom/qcm6490-addons-idp.dtb \` `qcom/qcs5430-fp1-addons-rb3gen2.dtb \` `qcom/qcs5430-fp1-addons-rb3gen2-vision-mezz.dtb \` `qcom/qcs5430-fp1p5-addons-rb3gen2.dtb \` `qcom/qcs5430-fp1p5-addons-rb3gen2-vision-mezz.dtb \` `qcom/qcs5430-fp2-addons-rb3gen2.dtb \` `qcom/qcs5430-fp2-addons-rb3gen2-vision-mezz.dtb \` `qcom/qcs6490-addons-rb3gen2.dtb \` `qcom/qcs6490-addons-rb3gen2-video-mezz.dtb \` `qcom/qcs6490-addons-rb3gen2-vision-mezz.dtb \` `qcom/qcs6490-addons-rb3gen2-ptz-mezz.dtb \` `qcom/qcs6490-addons-rb3gen2-ia-mezz.dtb \` `"` - **Include additional DTBOs** To include the additional list of device-tree overlay (DTBO)s to be overlaid on top of the base kernel device-tree, update `KERNEL_TECH_DTBOS`: `# Additional dtbo to overylay on top of kernel devicetree filesKERNEL_TECH_DTBOS[qcm6490-addons-idp] = "qcm6490-graphics.dtbo qcm6490-display.dtbo qcm6490-camera.dtbo qcm6490-bt.dtbo qcm6490-wlan-idp.dtbo qcm6490-video.dtbo"` `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2] = "qcm6490-graphics.dtbo qcm6490-wlan-rb3.dtbo qcm6490-display-rb3.dtbo qcm6490-bt.dtbo qcm6490-video.dtbo"` `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2-video-mezz] = "qcm6490-graphics.dtbo qcm6490-camera-rb3.dtbo qcm6490-display-rb3.dtbo qcm6490-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-video.dtbo"` `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2-vision-mezz] = "qcm6490-graphics.dtbo qcm6490-camera-rb3.dtbo qcm6490-display-rb3.dtbo qcm6490-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-video.dtbo"` `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2-ptz-mezz] = ""` `KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2-ia-mezz] = ""` `KERNEL_TECH_DTBOS[qcs5430-fp1-addons-rb3gen2] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"` ` KERNEL_TECH_DTBOS[qcs5430-fp1-addons-rb3gen2-vision-mezz] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"` `KERNEL_TECH_DTBOS[qcs5430-fp1p5-addons-rb3gen2] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"` `KERNEL_TECH_DTBOS[qcs5430-fp1p5-addons-rb3gen2-vision-mezz] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"` `KERNEL_TECH_DTBOS[qcs5430-fp2-addons-rb3gen2] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"` `KERNEL_TECH_DTBOS[qcs5430-fp2-addons-rb3gen2-vision-mezz] = "qcs5430-graphics.dtbo qcm5430-camera-rb3.dtbo qcs5430-wlan-rb3.dtbo qcm6490-bt.dtbo qcm6490-display-rb3.dtbo qcm6490-video.dtbo"` The package, which is used to generate DTBO, must be added to a `MACHINE_EXTRA_RDEPENDS` variable to set the dependency. For example, `qcm6490-graphics.dtbo` is added to `KERNEL_TECH_DTBOS` list above and the corresponding package `graphicsdevicetree`, which generates DTBO is added to `MACHINE_EXTRA_RDEPENDS` variable as follows: `MACHINE_EXTRA_RDEPENDS += " \` `packagegroup-firmware-qcm6490 \` `graphicsdevicetree \` `displaydevicetree \` `cameradtb \` `wlan-devicetree \` `btdevicetree \` `videodtb \` `"` - **Firmware recipes** Qualcomm Linux firmware recipe files are located here: [https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-firmware](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-firmware). When the Qualcomm Linux source code is synced, the firmware recipes are available in the following directory: `/layers/meta- qcom-hwe/recipes-firmware/firmware`. - **Boot critical binaries** Critical boot images are required to boot the kernel on the device. The following firmware recipes provide the SOC-specific boot firmware: | `firmware-qcom-bootbins_1.0.bb` | Handles fetch, unpack, and deploy for
critical boot firmware binaries for compatible
targets.
For the QCM6490-based targets, the
files are packed in the
`QCM6490_bootbinaries.zip`
file. | | --- | --- | After the build completes, the firmware binaries in these zip files are available for flashing in the following directory: `/build-qcom-wayland/tmp-glibc/deploy/images///`. `firmware-qcom-bootbins_1.0.bb` recipe fetches the boot binaries based on SRC\_URI, unpacks the zip. The binaries can be found in the following directory: `tmp-glibc/deploy/images//`. - **Subsystem firmware binaries** Qualcomm Linux includes firmware binaries that are loaded and run on the corresponding subsystems. As the Qualcomm SoC boots, individual subsystems execute the firmware as they come out of reset: | `firmware-qcom-hlosfw_1.0.bb` | Handles fetch, unpack, and install for
subsystem firmware binaries such as aDSP, cDSP,
modem, and WLAN.
The firmware files for
QCM6490-based targets are packed in
`QCM6490_fw.zip` file. | | --- | --- | `firmware-qcom-hlosfw_1.0.bb` recipe fetches the subsystem firmware binaries from the remote server based on SRC\_URI, unpacks the zip, and installs the firmware in `rootfs`. - **DSP libraries** User space utilities refer to the DSP libraries and these libraries must be available in the `rootfs` image. The following firmware recipes provide the SOC-specific DSP libraries: | `firmware-qcom-dspso_1.0.bb` | Handles fetch, unpack, and install for DSP
libraries.
The libraries for QCM6490-based
targets are packed in
`QCM6490_dspso.zip`
file. | | --- | --- | `firmware-qcom-dspso_1.0.bb` recipe fetches the DSP libraries from the remote server based on SRC\_URI, unpacks the zip, and installs the DSP libraries in `rootfs`. - **Installation of boot, subsystem, and dspso** When the Qualcomm Linux source code is built, the build system uses the firmware recipes to deploy the prebuilt firmware based on MACHINE\_EXTRA\_RDEPENDS configuration, which is set in the machine configuration file. For example, in `layers/meta-qcom-hwe/conf/ machine/qcm6490.conf`, see the inclusion of `packagegroup-firmware-qcm6490` in the variable MACHINE\_EXTRA\_RDEPENDS: `MACHINE_EXTRA_RDEPENDS += " \` `packagegroup-firmware-qcm6490 \` `graphicsdevicetree \` `displaydevicetree \` `cameradtb \` `wlan-devicetree \` `btdevicetree \` `videodtb \` `"` Note: The `packagegroup-firmware-qcm6490` recipe is present in `/layers/meta-qcom-hwe/recipes-firmware/packagegroups/`, and groups the firmware recipes to be used for image generation. When Qualcomm Linux is built, based on the configuration in `qcm6490.conf` and package group recipe file, the respective firmware recipes from `/layers/meta-qcom-hwe/recipes-firmware/firmware` are built. - **Kernel recipes** The Linux kernel recipe used by Qualcomm Linux is at [https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-kernel/linux](https://github.com/quic-yocto/meta-qcom-hwe/tree/kirkstone/recipes-kernel/linux). Qualcomm Linux supports the 6.6 LTS kernel and is maintained through Yocto recipe `linux-kernel-qcom_6.6.bb` at `recipes-kernel/linux` under the `meta-qcom-hwe` layer. This recipe refers to Qualcomm kernel source, which is publicly hosted at [https://git.codelinaro.org/clo/la/kernel/qcom.git](https://git.codelinaro.org/clo/la/kernel/qcom.git). The Qualcomm Linux kernel recipe is referred to as `linux-kernel-qcom`. For example, `qcm6490.conf` is a machine configuration file hosted at `meta-qcom-hwe/conf/machine` and supports the QCM6490 machine, and that selects the kernel `linux-kernel-qcom`. ***Kernel configuration*** The Qualcomm Linux kernel recipe uses the following kernel configuration fragments: | Kernel configuration fragments | Description | | --- | --- | | `/arch/arm64/configs/qcom_defconfig` | Base configuration that is aligned to
product/performance needs and upstream
kernel | | `/arch/arm64/configs/qcom_debug.config` | Debug configuration fragment from upstream
kernel | | `/arch/arm64/configs/qcom_addons.config` | Additional Qualcomm downstream additions on top
of upstream aligned base | | `/arch/arm64/configs/qcom_addons_debug.config` | Qualcomm downstream debug enablement | The Qualcomm Linux kernel recipe supports two build variants, `perf` and `debug`, for QCM6490 machine configuration. The default build is `perf`. | Build variant | Defconfig/config fragments | | --- | --- | | `Perf` |

  • arch/arm64/configs/qcom_defconfig


  • arch/arm64/configs/qcom_addons.config


| | `Debug` |

  • arch/arm64/configs/qcom_defconfig


  • arch/arm64/configs/qcom_debug.config


  • arch/arm64/configs/qcom_addons.config


  • arch/arm64/configs/qcom_addons_debug.config


| You can modify the kernel build configurations by updating KERNEL\_DEFCONFIG and KERNEL\_CONFIG\_FRAGMENTS variables in the kernel recipe `linux-kernel-qcom_6.6.bb`: `KERNEL_DEFCONFIG = "${S}/arch/arm64/configs/qcom_defconfig"` `KERNEL_CONFIG_FRAGMENTS:append = " ${S}/arch/arm64/configs/qcom_addons.config"` `KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_debug.config', '', d)}"` `KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_addons_debug.config', '', d)}"` If the distro supports SELinux, then the SELinux configuration fragments `selinux.cfg` and `selinux_debug.cfg` are available at `recipes-kernel/linux/linux-kernel-qcom`: `SELINUX_CFG = "${@oe.utils.vartrue('DEBUG_BUILD', 'selinux_debug.cfg', 'selinux.cfg', d)}"` `KERNEL_CONFIG_FRAGMENTS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', '${WORKDIR}/${SELINUX_CFG}', '', d)}"` Kernel modules can be autoloaded for the Qualcomm platforms by updating the KERNEL\_MODULE\_AUTOLOAD variable in the Qualcomm Linux kernel recipe. For example, the CoreSight and STM modules are autoloaded: `# Coresight and STM modules for QDSS functions` `KERNEL_MODULE_AUTOLOAD += "coresight coresight-tmc coresight-funnel"` `KERNEL_MODULE_AUTOLOAD += "coresight-replicator coresight-etm4x coresight-stm"` `KERNEL_MODULE_AUTOLOAD += "coresight-cti coresight-tpdm coresight-tpda coresight-dummy"` `KERNEL_MODULE_AUTOLOAD += "coresight-remote-etm coresight-tgu"` `KERNEL_MODULE_AUTOLOAD += "stm_core stm_p_ost stm_console stm_heartbeat stm_ftrace "` - **Licenses** Licenses used by recipes in `meta-qcom-hwe` are listed at `/meta-qcom-hwe/files/common-licenses`. common-licenses/ ├── BSD-3-Clause-Clear ├── GPLv2.0-with-linux-syscall-note └── Qualcomm-Technologies-Inc.-ProprietaryCopy to clipboard Yocto provides support for automatically creating SPDX SBOM documents based on image generation. To enable this the `create-spdx` class is required to be inherited in `local.conf` as follows: INHERIT += "create-spdx"Copy to clipboard After the class is inherited, the user can rebuild the image with BitBake command: bitbake qcom-multimedia-imageCopy to clipboard The SPDX output is found under the following paths: - For each recipe, the generated files are available in `tmp/deploy/spdx/` directory. - The top level SPDX output file is `tmp/deploy/images/MACHINE/-.spdx.json`. ### meta-qcom-realtime The `meta-qcom-realtime` metadata layer is hosted at [https://github.com/quic-yocto/meta-qcom-realtime](https://github.com/quic-yocto/meta-qcom-realtime). This layer provides additional software support for building a real-time kernel for the Qualcomm devices. - **Kernel recipes** Qualcomm Linux supports the 6.6 LTS kernel plus real-time extensions and is maintained through the Yocto recipe `linux-kernel-qcom-rt_6.6.bb` at `recipes-kernel/linux` under the `meta-qcom-realtime` layer. The pending preempt RT patches can be found at [https://wiki.linuxfoundation.org/realtime/start](https://wiki.linuxfoundation.org/realtime/start). These patches are fetched and applied on top of the Qualcomm Linux kernel source, which is publicly hosted at [https://git.codelinaro.org/clo/la/kernel/qcom.git](https://git.codelinaro.org/clo/la/kernel/qcom.git). The Qualcomm Linux real-time recipe is referred to as `linux-kernel-qcom-rt`. When compiling a real-time kernel for the Qualcomm machines, `conf/layer.conf` selects the kernel as `linux-kernel-qcom-rt`. ***Kernel configuration*** KERNEL_CONFIG_FRAGMENTS:append = " ${WORKDIR}/qcom_rt.cfg"Copy to clipboard - **Enabling `meta-qcom-realtime` in build** To include `meta-qcom-realtime` in the build, export `meta-qcom-realtime` layer to EXTRALAYERS in `bblayers.conf`as shown in the following steps: 1. Source the environment, following is an example to source the environment for QCM6490 and `qcom-wayland` distro: MACHINE=qcm6490 DISTRO=qcom-wayland source setup-environmentCopy to clipboard 2. Open the `build-qcom-wayland/conf/bblayers.conf` file and update the EXTRALAYERS variable as follows: EXTRALAYERS ?= " \ ${WORKSPACE}/layers/meta-qcom-realtime \ "Copy to clipboard 3. Run the build command to rebuild with `meta-qcom-realtime` as follows: bitbake qcom-multimedia-imageCopy to clipboard ### meta-qcom-distro This layer provides a reference distribution configuration for Qualcomm products. Image recipes and package groups are defined in this layer. - **BitBake classes** Following table provides an introduction to the BitBake classes, which are available at [https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/classes](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/classes). | `image-adbd.bbclass` | Qualcomm Linux provides support for SSH and UART
serial shell. Use SSH or UART for accessing the
device.
Some users find it easier to use ADB for
debugging issues when IP interfaces are down or
large files are to be transferred. For them ADB is
provided as an option.


This class installs
adbd into the image.


The adbd daemon is
disabled unless IMAGE\_FEATURES contains the
enable-adbd.


You can disable adbd by
removing
`/var/usb-debugging-enabled` from
`rootfs` manually. | | --- | --- | | `image-qcom-deploy.bbclass` | Deploys the image files under the path
`tmp-glibc/deploy/images//`.
The
generated images are deployed in the
`` subdirectory.
| - **Distro configuration** Following table provides an introduction to the distro configurations, which are defined at [https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/conf/distro](https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/conf/distro). | `conf/distro/qcom-wayland.conf` | This distro configuration file defines the
`qcom-wayland` distro that users use
in the following example command.


MACHINE=qcm6490 DISTRO=qcom-wayland source setup-environmentCopy to clipboard

This
configuration file includes
`meta-qcom-distro/conf/distro/
include/qcom-base.inc`file, which defines
common DISTRO\_FEATURES and adds following
DISTRO\_FEATURES:

  • wayland


  • vulkan


  • opengl




These distro features are defined by Yocto
Project documentation and they are available at:
[https://docs.yoctoproject.org/4.0.18/singleindex.html#distro-features](https://docs.yoctoproject.org/4.0.18/singleindex.html#distro-features) | | --- | --- | | `conf/distro/include/qcom-base.inc` | The INIT\_MANAGER is set to `systemd`.
For Yocto documentation regarding INIT\_MANAGER, see
[https://docs.yoctoproject.org/4.0.18/singleindex.html#term-INIT_MANAGER](https://docs.yoctoproject.org/4.0.18/singleindex.html#term-INIT_MANAGER).
Other
DISTRO\_FEATURES enabled
are:

DISTRO_FEATURES:append = " pam overlayfs acl xattr selinux ptest security virtualization"Copy to clipboard


To
understand the purpose of these DISTRO\_FEATURES, see
[https://docs.yoctoproject.org/4.0.18/singleindex.html#distro-features](https://docs.yoctoproject.org/4.0.18/singleindex.html#distro-features).


This
file selects `systemd` as
INIT\_MANAGER and `udev` as the dev
manager. | | `conf/distro/include/qcom-security_flags.inc` | This file includes the security flags as defined in
[https://git.yoctoproject.org/poky/tree/meta/conf/distro/include/security_flags.inc?h=kirkstone](https://git.yoctoproject.org/poky/tree/meta/conf/distro/include/security_flags.inc?h=kirkstone). | - **Package groups** Package groups are defined in `meta-qcom-hwe` and `meta-qcom-distro`. These package groups help you to understand the features defined by the Qualcomm BSP. | `packagegroup-qcom.bb` | Package group that contains all the basic
packages | | --- | --- | | `packagegroup-qcom-multimedia.bb` | Package group that contains packages to enable
multimedia support:

  • packagegroup-container


  • packagegroup-qcom-audio


  • packagegroup-qcom-bluetooth


  • packagegroup-qcom-camera


  • packagegroup-qcom-display


  • packagegroup-qcom-fastcv


  • packagegroup-qcom-graphics


  • packagegroup-qcom-k8s


  • packagegroup-qcom-opencv


  • packagegroup-qcom-sensors


  • packagegroup-qcom-video


  • python3-docker-compose


  • camera-server


| | `packagegroup-qcom-test-pkgs.bb` | – | - **Image recipes** Qualcomm Linux metadata layer `meta-qcom-distro` defines image recipes, which are available at [https://github.com/quic-yocto/meta-qcom-distro/tree/kirkstone/recipes-products/images](https://github.com/quic-yocto/meta-qcom-distro/tree/). The following table lists various images, their IMAGE\_FEATURES, and the functions that the images serve: | Image recipe | Description of the image | | --- | --- | | `qcom-minimal-image.bb` | Defines a small `rootfs` to boot
to shell.
The IMAGE\_FEATURES enabled are as
follows:

IMAGE_FEATURES += "splash tools-debug debug-tweaks enable-adbd read-only-rootfs"Copy to clipboard


For
more information on IMAGE\_FEATURES, see [https://docs.yoctoproject.org/4.0.18/singleindex.html#image-features](https://docs.yoctoproject.org/4.0.18/singleindex.html#image-features). | | `qcom-console-image.bb` | Extends `qcom-minimal-image` by
adding more images and enables a few more
IMAGE\_FEATURES:

IMAGE_FEATURES += "package-management ssh-server-openssh" Copy to clipboard | | `qcom-multimedia-image.bb` | Requires DISTRO\_FEATURE Wayland and it includes
all the multimedia packages in
`rootfs`. | | `qcom-multimedia-full-image.bb` | Provides an extension to
`qcom-multimedia-image.bb` with
GStreamer support. | | `qcom-multimedia-test-image.bb` | Includes test packages in `rootfs`
to test
`qcom-multimedia-image`. | | `qcom-multimedia-crossesdk-image.bb` | Generates eSDK for
`qcom-multimedia-image`. | - **QDL flashing tool** Qualcomm download tool (QDL) is a flashing tool that communicates with USB devices of ID 05c6:9008 to upload a flash loader to the device. The flash loader flashes the images to UFS or eMMC built into the device. There are two ways to set up QDL on a host PC: - QDL tool is built by default in your Qualcomm Linux workspace. The QDL tool is integrated in the build workflow for ease of use. The QDL recipe is found at the path `/meta-qcom/recipes-devtools/qdl/qdl_git.bb`. This recipe fetches and compiles the QDL tool, after which you can BitBake the recipe. The QDL tool is integrated by default due to the `image-qcom-deploy.bbclass`, which adds it is a dependency for the image being built: DEPENDS:append = " \ python3-native \ qdl-native \ "Copy to clipboard When the image build completes, the QDL binary is generated at the following directory: `tmp-glibc/deploy/image//`. This QDL binary is for host architecture. - **QDL is built as a standalone project** Clone the source project, install dev dependencies, and compile QDL. On the host PC: git https://github.com/linux-msm/qdl.git sudo apt-get install libxml2-dev libudev-dev cd qdl makeCopy to clipboard The QDL compiled in this way can be copied and moved around on your host PC as it links to the dynamic linker at `/lib64/ld-linux-x86-64.so.2`, which is native to the host PC you are using. **Prerequisites to run QDL** - A one-time prerequisite on the host machine is required to use QDL flasher. To enable the host PC to enumerate the Qualcomm device for the host correctly so that QDL can flash, follow these steps: 1. Change the directory to `/etc/udev/rules.d`. 2. Create a file `51-qcom-usb.rules` at this path. 3. Add the following line in the file `51-qcom-usb.rules`: SUBSYSTEMS=="usb", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9008", MODE="0666", GROUP="plugdev"Copy to clipboard - Examine if the host PC is running `ModemManager`. Note: Check this every time that you use QDL. Some Linux distributions come with `ModemManager`, a tool for configuring mobile broadband. When the Qualcomm SoC-based device is connected in USB mode, it is identified as a Qualcomm modem and `ModemManager` tries to configure the device. The `ModemManager` interferes with QDL flashing and hence, if you have `ModemManager` running, you must disable it before connecting your test device. If you are using a Linux distribution with `systemd`, `ModemManager` can be stopped by using `systemctl`. To determine how to manage `ModemManager` with QDL flashing, see [QDL and ModemManager](https://docs.qualcomm.com/doc/80-70014-27/topic/debug.html#qdl_and_modemmanager). **Flashing using QDL** The following is a generic command to run QDL: qdl [ ]Copy to clipboard This sample generic input depicts that the QDL tool expects three types of input files. All these input files are generated under the directory `tmp-glibc/deploy/image//`. When the image recipe completes successfully, you must perform the steps to flash the device. If you want to use the QDL generated as part of the build, change the directory to `tmp-glibc/deploy/image//`, as the Qualcomm Linux workflow generates and deploys QDL at this path. For example: cd /build-qcom-wayland/tmp-glibc/deploy/images/qcm6490/qcom-multimedia-image/Copy to clipboard Run the flash command as follows: ./qdl prog_firehose_ddr.elf rawprogram*.xml patch*.xmlCopy to clipboard **Copying QDL to other locations** The QDL binary at `/build-qcom-wayland/tmp-glibc/deploy/images/qcm6490/qcom-multimedia-image/`, which is built as part of the Qualcomm Linux build workflow may not be copied or moved to other paths but is used as-is because of the dependencies. To understand these dependencies, run the following command: file qdlCopy to clipboard The output is as follows: qdl: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter <workspace>/build-qcom-wayland/tmp-glibc/sysroots-uninative/x86_64-linux/lib/ld\u0002linux-x86-64.so.2, BuildID[sha1]=430c23d51190ef6c225586c5d63d2a7c9cd50430, for GNU/Linux 3.2.0, stripped This output shows that there is a dependency on `/build-test-distro/tmp-glibc/sysroots-uninative/x86_64-linux/lib/ld-linux-x86-64.so.2`, which is due to the way Qualcomm Linux builds QDL. If you are interested to run QDL independently, see [standalone QDL](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#qualcomm_bsp_metadata_layers__qdl_standalone). **QDL advanced options** QDL supports more advanced options that are optional flags passed to QDL from the command line. These advanced options are described in the following table: | Option | Description | | --- | --- | | `--debug` | Prints debug logs while flashing the
image | | `--storage
` | Use this to define the storage type. If this
option is not provided, QDL detects the storage
type. | | `--finalize-provisioning` | Irreversible one-time provisioning (OTP) for UFS
storage. Perform the following safety mechanisms to
prevent unintentional device locking:

  • Unless you intend to lock your device, set
    bConfigDescrLock = 0 in your XML
    and do not use the command-line parameter
    --finalize-provisioning.


  • If you want to perform OTP, ensure that your
    XML includes the property bConfigDescrLock
    = 1
    and provide the command-line
    parameter
    --finalize-provisioning.




Note: Provisioning is not performed if there is a
mismatch between command-line parameter and
XML. | | `--include` | Points to the path where the images are present.
By default it is NULL, that is, images are present
at the same location. This is useful when QDL is
built as a standalone, `--include` is
used to point to the path where images are
present. | Example usage with the flags: /qdl --storage ufs --include /qcm6490_images/qcom-multimedia-image /qcm6490_images/qcom-multimedia-image/prog_firehose_ddr.elf /qcm6490_images/qcom-multimedia-image/rawprogram*.xml /qcm6490_images/qcom-multimedia-image/patch*.xml Copy to clipboard ### meta-qcom-extras This layer is an optional metadata layer for registered users. This layer enables source compilation of select components, which are otherwise present as binary in `meta-qcom-hwe`. If you are entitled to receive this metadata layer, you can use the clone steps shared in the [Qualcomm Linux Build Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254/introduction.html). - **Firmware recipes** Firmware recipes in `meta-qcom-extras` integrate the firmware ZIP that is generated on compiling other subsystems. | ├── recipes-firmware
├── firmware
│ ├── firmware-qcm6490-boot_2.0.bb
│ ├── firmware-qcm6490-dspso_2.0.bb
│ └── firmware-qcm6490-msl_2.0.bb
└── packagegroups
└── packagegroup-firmware-qcm6490.bbCopy to clipboard | The recipes in `meta-qcom-extras`
override the recipes in
`meta-qcom-hwe`.



`meta-qcom-hwe` uses pre-built
firmware binaries by default, while
`meta-qcom-extras` builds the
firmware from Qualcomm proprietary
repositories.



The `meta-qcom-extras` layer
ignores the pre-built binaries found in the
following .zip files. These recipes instead search
the Zip files set in the path FWZIP\_PATH as
follows:

  • firmware-qcom-bootbins_1.0.bbappend:
    Searches FWZIP_PATH variable for
    QCM6490_bootbinaries.zip


  • firmware-qcom-hlosfw_1.0.bbappend:
    Searches FWZIP_PATH variable for
    QCM6490_fw.zip


  • firmware-qcom-dspso_1.0.bbappend:
    Searches FWZIP_PATH variable for
    QCM6490_dspso.zip


| | --- | --- | ### meta-qcom-qim-product-sdk - **BitBake classes** | BitBake class | Description | | --- | --- | | `qim-prod-sdk-pkg.bbclass` |

  • Provides a packaging task to pack QIM Product SDK
    artifacts into an archive. It is invoked by the
    qim-product-sdk recipe.


  • The easy-to-install artifact archives are available
    at the
    <workspace>/build-qcom-wayland/tmp-glibc/deploy/qim_prod_sdk_artifacts
    directory after the recipe build is complete.


| | `qimsdk-pkg.bbclass` |

  • Provides a task to package Qualcomm Multimedia SDK
    packages into an archive along with an easy-to-use
    install script. The archives are generated with
    packages for deployment, debug, and development
    separately.


  • The artifact archives are available at
    <workspace>/build-qcom-wayland/tmp-glibc/deploy/qimsdk_artifacts
    directory.


  • Invoked by qim-sdk recipe during
    the build.


| | `tflitesdk-pkg.bbclass` |

  • Provides a packaging task to pack TensorFlow Lite
    SDK artifacts into several archives for deployment,
    development, and debug. It is invoked by the
    tflite-sdk recipe during the
    build.


  • The easy-to-install artifact archives are available
    at the
    <workspace>/build-qcom-wayland/tmp-glibc/deploy/tflitesdk_artifacts
    directory after the recipe build is complete.


| - **Distro configuration** | `layer.conf` | Configures the project layers with the following
information:

  • Recipe file path information


  • Yocto version supported


  • Qualcomm® Hexagon™ version supported


  • Qualcomm® Neural Processing SDK version
    supported


  • Qualcomm neural network (QNN) SDK version
    supported


| | --- | --- | - **Image recipes** | Recipe | Description | | --- | --- | | `recipes-gst` | Consists of the upstream GStreamer recipe changes
(`.bbapend`) along with Qualcomm recipes:

  • gstreamer1.0-plugins-bad_1.20%.bbappend


  • gstreamer1.0-plugins-good_1.20%.bbappend


  • gstreamer1.0-plugins-qcom-oss-base.bb


  • gstreamer1.0-plugins-qcom-oss-batch.bb


  • gstreamer1.0-plugins-qcom-oss-metamux.bb


  • gstreamer1.0-plugins-qcom-oss-mldemux.bb


  • gstreamer1.0-plugins-qcom-oss-mlmeta.bb


  • gstreamer1.0-plugins-qcom-oss-mlmuxer.bb


  • gstreamer1.0-plugins-qcom-oss-mlqnn.bb


  • gstreamer1.0-plugins-qcom-oss-mlsnpe.bb


  • gstreamer1.0-plugins-qcom-oss-mltflite.bb


  • gstreamer1.0-plugins-qcom-oss-mlvclassification.bb


  • gstreamer1.0-plugins-qcom-oss-mlvconverter.bb


  • gstreamer1.0-plugins-qcom-oss-mlvdetection.bb


  • gstreamer1.0-plugins-qcom-oss-mlvpose.bb


  • gstreamer1.0-plugins-qcom-oss-mlvsegmentation.bb


  • gstreamer1.0-plugins-qcom-oss-overlay.bb


  • gstreamer1.0-plugins-qcom-oss-qmmfsrc.bb


  • gstreamer1.0-plugins-qcom-oss-socket.bb


  • gstreamer1.0-plugins-qcom-oss-tools.bb


  • gstreamer1.0-plugins-qcom-oss-vcomposer.bb


  • gstreamer1.0-plugins-qcom-oss-vsplit.bb


  • gstreamer1.0-plugins-qcom-oss-vtransform.bb


  • gstreamer1.0-qcom-oss-sample-apps.bb


| | `recipes-qcom-ml` | Consists of two recipes:

  • qnn.bb: Used to package QNN
    SDK


  • snpe.bb: Used to package Qualcomm
    Neural Processing SDK


| | `recipes-qim-product-sdk` | Recipe to install QIM product SDK that has QIM, Qualcomm
Neural Processing, QNN, and TensorFlow Lite SDKs | | `recipes-tensorflow-lite` | TensorFlow Lite recipes build and install TensorFlow Lite
for the following versions:

  • 2.12.1, 2.13.1, 2.14.1, and 2.15.0


  • Default version: 2.15.0


| - **Package groups** | Package group | Description | | --- | --- | | `packagegroup-qcom-gst` | Package group for upstream basic GStreamer enablement
along with Qualcomm plugins:

  • packagegroup-qcom-gst-basic


  • gstreamer1.0-plugins-qcom-oss-base


  • gstreamer1.0-plugins-qcom-oss-tools


  • gstreamer1.0-plugins-qcom-oss-batch


  • gstreamer1.0-plugins-qcom-oss-metamux


  • gstreamer1.0-plugins-qcom-oss-mldemux


  • gstreamer1.0-plugins-qcom-oss-mlmeta


  • gstreamer1.0-plugins-qcom-oss-mlvconverter


  • gstreamer1.0-plugins-qcom-oss-mlvclassification


  • gstreamer1.0-plugins-qcom-oss-mlvdetection


  • gstreamer1.0-plugins-qcom-oss-mlvpose


  • gstreamer1.0-plugins-qcom-oss-mlvsegmentation


  • gstreamer1.0-plugins-qcom-oss-overlay


  • gstreamer1.0-plugins-qcom-oss-qmmfsrc


  • gstreamer1.0-plugins-qcom-oss-socket


  • gstreamer1.0-plugins-qcom-oss-vcomposer


  • gstreamer1.0-plugins-qcom-oss-vsplit


  • gstreamer1.0-plugins-qcom-oss-vtransform


  • gstreamer1.0-qcom-oss-sample-apps


  • gstreamer1.0-plugins-qcom-oss-mlsnpe


  • gstreamer1.0-plugins-qcom-oss-mlqnn


  • gstreamer1.0-plugins-qcom-oss-mltflite




It also packs the upstream GStreamer packages:

  • cairo


  • gdk-pixbuf


  • liba52


  • libdaemon


  • libgudev


  • lame


  • libpsl


  • librsvg


  • libsoup-2.4


  • libtheora


  • libwebp


  • mpg123


  • orc


  • sbc


  • speex


  • taglib


| | `packagegroup-qcom-gst-basic` | Package group for upstream GStreamer enablement:

  • gstreamer1.0


  • gstreamer1.0-plugins-base


  • gstreamer1.0-plugins-good


  • gstreamer1.0-plugins-bad


  • gstreamer1.0-rtsp-server


| | `packagegroup-qcom-qim-product` | Package group to pack the following packages along with
an install script:

  • packagegroup-qcom-gst


  • packagegroup-qcom-ml


  • install.sh


| | `packagegroup-qcom-ml` | Package group to pack Qualcomm ML framework:

  • tensorflow-lite


  • qnn


  • snpe


  • libgomp-dev


| ## Qualcomm Linux software components ### Filesystem overlays Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) Qualcomm Linux uses an overlay filesystem to create overlays on certain mount-points. It is recommended to have a read-only rootfs, but many applications might need read-write access to some parts of the filesystem. This is achieved by `overlayfs` bbclass keeping the base rootfs read-only. The `overlayfs-qcom-paths` recipe creates `/var`, `/etc`, and `/opt` as overlay mount points and it inherits the `overlayfs` bbclass. In the recipe, the variable `overlayfs_mount_point` is defined as `mnt-overlay`, which implies that the `mnt-overlay.mount` systemd unit is defined in the BSP and it is installed into the image. At boot, the systemd unit `mnt-overlay.mount` mounts the `/dev/disk/by-partlabel/overlay` disk partition to all the mount points. The variable `overlayfs_writable_paths` specify the writable paths used at the runtime, that is, `/opt`, `/etc`, and `/var`. To include `overlayfs`support, it must be added to the DISTRO\_FEATURES. - Overlay for `/var` To see the `/var` overlayfs mount point, run the following mount command: sh-5.1# mount | grep var overlay on /var type overlay (rw,relatime,seclabel,lowerdir=/var,upperdir=/mnt/overlay/upper/var,workdir=/mnt/overlay/workdir/var)Copy to clipboard - Overlay for `/etc` sh-5.1# mount | grep etc /dev/sda11 on /mnt/overlay type ext4 (rw,relatime,rootcontext=system_u:object_r:etc_t:s0,seclabel,stripe=128,inlinecrypt) overlay on /etc type overlay (rw,relatime,seclabel,lowerdir=/etc,upperdir=/mnt/overlay/upper/etc,workdir=/mnt/overlay/workdir/etc)Copy to clipboard - Overlay for `/opt` sh-5.1# mount | grep opt overlay on /opt type overlay (rw,relatime,seclabel,lowerdir=/opt,upperdir=/mnt/overlay/upper/opt,workdir=/mnt/overlay/workdir/opt)Copy to clipboard - Overlay for `/home` sh-5.1# mount | grep home overlay on /home type overlay (rw,relatime,seclabel,lowerdir=/home,upperdir=/mnt/overlay/upper/home,workdir=/mnt/overlay/workdir/home)Copy to clipboard - Resizing the overlay partition: This is performed using the recipe `resize-partitions.bb` and `resize-partition.service.in`file. The resize-partition service runs at device bootup to create and set the filesystem according to the size of the partition. In resize-partition service, running the command to resize the overlay partition performs the following: - `/sbin/e2fsck -n /dev/disk/by-partlabel/%i` checks the specified filesystem based on its partition label for errors, without making any changes. - `/sbin/mkfs.ext4 /dev/disk/by-partlabel/%i` invokes the `mkfs.ext4` utility and formats a partition with the ext4 filesystem. - `/sbin/resize2fs /dev/disk/by-partlabel/%i` attempts to increase the size of the partition. - `/sbin/tune2fs -O encrypt,stable_inodes /dev/disk/by-partlabel/overlay` modifies various parameters. For example, `encrypt` allows you to encrypt data stored on the filesystem and the stable\_inodes option ensures that inode numbers remain stable across filesystem operations. ### System initscripts Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) System initscripts added to the image by `meta-qcom-hwe` are as follows: | System initscripts | Description | | --- | --- | | `mnt-overlay.mount` | Mounts `/dev/disk/by-partlabel/overlay` disk
partitions to all the mount points. | | `var-persist.mount` | Mounts `/dev/disk/by-partlabel/persist` disk
partition to `/var/persist`. | | `android-tools-adbd.service` | Provides adbd daemon on the device. | | `logrotate.service` | Archives old logs. For more information on this service, see
[Logging shim for syslog()](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#logging_shim_for_syslog). The
`logrotate.service` is an upstream systemd
unit.
The `rsyslog.logrotate` configuration
file is modified in Qualcomm Linux to manage on-device logs. The
modified `rsyslog.logrotate` is at
`meta-qcom-hwe/dynamic-layers/openembedded-layer/recipes-devtools/rsyslog/rsyslog/rsyslog.logrotate`
directory. This overrides the default configuration file
provided by the upstream at
`meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate`
directory. | | `pd-mapper.service` | Configures and manages protection domains. The
`pd-mapper.service.in` file is updated to run the
service as a system user instead of as the root user by the
`pd-mapper_git.bbappend` in the Qualcomm Linux
BSP layer
`meta-qcom-hwe`.

do_install:prepend() {
# convert the service from root user to system user
sed -i "/ExecStart=/i\User=system\nGroup=system" pd-mapper.service.in
}Copy to clipboard | | `property-vault.service` | Provides `property_get` and
`property_set` functionality. For more
information on this service, see [Properties](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#properties). | | `persist-property-vault.service` | Runs `set-persist-prop.sh`, which sets the flag
`le.persistprop.enable` to true. To use persist
properties, set this flag. | | `resize-partition@.service` | Resizes the filesystem at boot time according to the size of the
partition.

ExecStart=/bin/sh -c "/sbin/e2fsck -n /dev/disk/by-partlabel/%i; if [ $? -gt 1 ]; then /sbin/mkfs.ext4 /dev/disk/by-partlabel/%i; /sbin/resize2fs /dev/disk/by-partlabel/%i; #COMMAND# fi;"Copy to clipboard | | `rsyslog.service` | Redirects logs according to a specified configuration. For more
information on this service, see [Logging shim for syslog()](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#logging_shim_for_syslog). | | `sys-kernel-debug.mount` | Masks the `sys-kernel-debug.mount` point when
`perf` is built. | ### Debug tools Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) Debug tools are added as part of `rootfs` by `packagegroup-core-tool-debug` defined in the `/layers/poky/meta` directory. This recipe is appended in `/layers/meta-qcom-hwe/recipes-devtools/` as `packagegroup-core-tools-debug.bbappend`. This append file adds `valgrind` and `ltrace`. For more information, see [Debug Linux user space](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-12/using_open_source_debug_tools.html). ### systemd-boot Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) systemd-boot is a unified extensible firmware interface (UEFI) boot manager. It presents a menu of boot options to control the boot flow and loads the user-selected boot loader. systemd-boot can support different boot loaders from different operating systems. Pack the kernel and other related information in an EFI partition. The kernel must be built as EFI using `EFI_CONFIG_STUB`. systemd-boot supports Type1 and Type2 configurations. Type1 configuration is not tested. Type2 configuration is enabled where the kernel and other details are packed in the UKI. Type2 is enabled for better security. UKI contains all the information for the device to boot. Signing a UKI image ensures that all the entities included in it are secure. If UEFI secure boot is enabled, only signed images are loaded; therefore, signing is required. For more details on systemd-boot, see [systemd-boot](https://wiki.archlinux.org/title/systemd-boot). Note: Signing is optional during the development phase. - **UKI** A UKI is a combination of a UEFI boot stub program, a Linux kernel image, an initrd, and other resources in a single UEFI portable executable (PE) file. The UEFI boot stub looks for various resources for the kernel invocation inside the UEFI PE binary. This allows combining various resources inside a single PE binary image (UKI), which may then be signed using OpenSSL utilities. For more details on UKI, see [unified_kernel_image](https://uapi-group.org/specifications/specs/unified_kernel_image/). The content of `uki.efi`is shown in the following figure. It contains: - Ramdisk image - Uncompressed kernel image - Architecture information - systemd-boot stub - Command-line parameters passed to the kernel - OS-release information Table : uki.efi file | Components of uki.efi file | Contents | | --- | --- | | Initrd = Init ramdisk | `initramfs-qcom-image-qcm6490.cpio.gz` | | Linux = Kernel Image | Image | | Efi-arch = Architecture | `aa64` | | Stub = System-boot efi stub | `linuxx64.efi.stub` | | Cmdline = Command line parameters | `root=/dev/disk/by-partlabel/system rw
rootwait console=ttyMSM0,1150200n8 pcie_pme=nomsi
earlycon
kernel.sched_pelt_multiplier=4` | | OS-release = OS-release |

  • ID = qcom-wayland


  • Name = “QCOM Reference Distro with
    Wayland”


  • VERSION = “1.0”


  • VERSION_ID = 1.0


  • PRETTY_NAME = “QCOM Reference Distro
    with Wayland 1.0”


| **Image classes** `meta-qcom-hwe/classes` contains two classes, `uki.bbclass` and `image-efi.bbclass`: - `uki.bbclass` generates `uki.efi`. - `image-efi.bbclass` generates `efi.bin` using `uki.efi`. - `qcom-minimal-image` inherits the `image-efi.bbclass`. - **EFI image** EFI system partition (ESP) contains `efi.bin`, a vfat file. This file contains all the details necessary for UEFI to enable systemd-boot. UEFI mounts the ESP partition and executes systemd-boot manager (`bootaa64.efi`). systemd-boot manager parses the UKI image, loads the kernel image, and then transfers the control to it. For more information on the structure of ESP, see [EFI system partition](https://wiki.archlinux.org/title/EFI_system_partition). A sample structure of the ESP partition is shown in the following figure. It contains systemd-boot (`bootaa64.efi`) and UKI (`uki.efi`). Figure : efi.bin file ![](data:image/png;base64,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) - **Signing** Secure boot is a security feature found in the UEFI standard and it is not enabled in development devices. It adds a layer of protection to the preboot process by maintaining a cryptographically signed list of binaries that are authorized or forbidden to run at boot. It helps ensure confidence that the machine boot firmware and HLOS boot components (boot manager, kernel, and initramfs) have not been tampered with. UEFI secure boot uses a digital signature to validate the authenticity and integrity of the code that it loads. All the keys are stored in UEFI secure variables. UEFI secure boot is achieved by using PK, KEK, db, and dbx keys. To use a secure boot, the keys PK, KEK, and db are required. While multiple KEK, db, and dbx certificates can be added, only one platform key is allowed. UEFI secure boot is enabled only when PK is registered in the system. It is advised to provision PK key in the last step of the secure boot enabling process. For more information on Qualcomm's implementation of UEFI secure boot, see [Secure boot](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-11/secure-boot.html). **Host tool for signing HLOS images** When UEFI secure boot is enabled, the EFI and DTB images must be signed. To streamline this process, a host signing tool is used. This command-line Python script runs on a Linux host machine (preferably Ubuntu 18.04 or later versions). It automates the signing of EFI and DTB images in two separate operations, invoked after the build process completes. **Overview of host signing tool** The host signing tool runs on a Linux machine with Python3 installed. It can sign either the EFI image or the DTB image in a single operation. To sign both the EFI and DTB images, the user must invoke the tool twice with different inputs. ![](data:image/png;base64,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) The host tool expects unsigned EFI or DTB files, along with certificates and keys, as input. After invoking, the tool unpacks the unsigned image, signs the available items using the provided key and certificate, and then repacks the images, replacing the unsigned version with the signed one. **Working of host signing tool** - **Prerequisites to run the tool** To run this tool, the host Linux machine must install the following: - OpenSSL and sbsign utilities - Python3 - pip, subprocess, shlex, socket, and shutil python modules - **Configuration of the host signing tool** The user must configure the host signing tool before starting the operation. - **`config.in` file** The host tool expects users to provide necessary information in a `config.ini` configuration file. Upon boot up, the script reads this file and signs the image accordingly. Following are the variables listed in the configuration file: Figure : config.ini file ![](data:image/png;base64,UklGRr6hAABXRUJQVlA4WAoAAAAQAAAApwMAJQIAQUxQSDAAAAABD9D/iAiYadum0Mt8CPrOEf2fgEwu//Ef//Ef//Ef//Ef//Ef//Ef//Ef/72gbjNWUDggaKEAAHDSAp0BKqgDJgI/AXazUisnpKKpFdr5YCAJZm78afwRb3ob1EUVI5ZH/mcM+w3lRsx6ZnMfm1/e6+vmy/2djnv3kG+99+3/p+pj+3eoT/mvLx9TP+U/+XqG/dH1d/+36uP776hv7getR/5P///6Pgy/vv/e////5+CT+n/7j////H3mvVi/xfpPegB///b36R/p7/ff63/if/n7//kP7r/tP8V+/Xn/+U/Yf871BPzbJ/6p/lea384/FHpD89fcT/v/4/xt+VP/H/nvYR9ufsL5LuyZ27/fftb7BHtP+L8k77Tzc/VvUD/bzjCf5HqP/vb1W/9zze/n3l+F6BAy49xhqVY9pKR+x96OGkLoHXmLi4eeqq/Dilb1NjLysGbWAgv7mKtTsDNm3X2QoGpdkKBqXZCgal2QoGpdkKBqXZCgZgqfPKsdEI1J/2nln07EAdy8ajbkBdJ16FnlSCt7uppHkMWtcssyaFhPLNnTioNaj4aeA4E+5uTnKHGfxcKMQDT6gqDWpPuWaO3OfUESQ3hYeKat3EIZJ2L3bYp7zuA/AIn+uiSGFYzSJG2LY+tWAlXhuzgdCNInn+4isEdqAE1Wf2RIGbU1UqhAK0pO+xn3NWaVpG8ky5uXWNSObrxFxZ7UzKc1Da9cQ31yW/3DU/ivB3WJT7tAa+4030MES5Deg0Fjs+NBeX8gl6J/JdL5JLff/vZjOKdBrWbPVw9iAtnf2lEf0/3myWNR2tjsDD7+v8xsby1RpOzXX2cXg2RWu0ZvepE3PbnL9Kz2PsEdsvLFBbNSvfQey/eOI3KpXY/MjHYpi52tSetAtKfTSt11bUvcZBmXYJfYDJoinJhwD0sWPzbr7IT+aJJANrC4pc1sIdKWd47Ug+zOyuGaJUuEpF4+BIPd1bg49V+Kh5JMhn90dg+Kl+5djOfH1kCqKjmhhx2sFWRyaa2EzNm50JIfDCEz1M2bdfZCgal2Ql/OUleqeFzdxtaY1xR8d4reRv7LRCwkaynhPZIGscMW4GXnG7gWwSmAoJYi+Jaj5GU8vD0H8QcM1LfY54r5Waq5tSnVvDqzZ/ffx/BwHkrQY+DaGCVT+lS3FpuGcOXurAzZt19kKBdygfU9jDAo4xygIksOoTvt0Z9vViLsnLhegzDGci2hPlWQ0SVaPwfJhfY15URvcTz8k4csRR6spK1ukLukNhKfiQbCneckU7M3RCcK6M6HH83WgPB+wx6CivB8Pjh0SNVsh2/aE3P3xca5ztfa2yQfEd123yT61KcS9ybirvNQ2EUAR9uEZsiDXzRq+H3c11G1UQijrGzS7gy+VyIWfiBi0QYsDwSyGBvFinBHgRnA54vJ0jviTf/dVV4FnUCi2CZddRsMLaskQps6gssQKJhd17xgfSX3tr5jRSbxTb3qimBZZvTFCVqXWJrvAF0YxiAelix+bdepfsq2pzjSs9FsuaVasHhEogQqfEjciLRHIBYWjrIrKeY0i8TRDcIhrLNY7mKz3TlLJ0buHLfh/HuGl7Heu3txBPUbd93Li3lSXAvshQNS7IUDUM46P4J34RuEL9OGXofv5scAPlI2vEOyxiL6A6zAPPN1D3i1caU17twwaQ1C3FP+RZnV892AiX61ogKC/jP2Rs/femROJ34sfbDYS5hVtUXupkppwHUwH4HOx7x6WbUsdCNR/n6tWDbbb3XPT2RaXJTieBx195zP+HN8405haMtuKt6MZnx0MLfFuI9LVB9d/gXQdZDxBiCGz402RpLP89AaYnLSz3JUfRdUwxZgdPd4yGaZKd+aJKzxQXcoFRlrFbCkE1jZHo/dCgJSJl5YYqQNMzzQWHDsxanqDHSTATuvzbzXuD8MrPWDPwJ4lSZ5/G5YBSiM2tbrzhZa563DWaYft+srgOABMIwMw9wc0ukVD6ay6lGDY6FG0CW9FZ3j/Yj5kKPvHf13OEq98sgKJZVFLR4OY6Nw94OcTS6tWSDkWsjIIp6sRT79/FlZrXyvR/8FLhRcjYUls2HXud0ZLUpDJwSvsCG8c68r0zyrQIPboKIR5jqzOg4bxqttDeKVBKb1sP5NVK0vIswPkccuiYNTb4UwEg9420gMk6eFK5EBbiaUImXbIYwpPiVAYIgIF2DVFs9RY1UXsr2wuvc0PxVbyNUTJrHtK8fpbM1RVAM1fjnlN0UyzODvoBxe+drJlnmqBr+aoX0mgpHt3VmoOQEv+LRksNF/sfqxgVDjKgep2FbJGVqlODfFtQc86ohTKs43524QUjaILjvoC/J2PhkZJvT4+K7mKsX1uFrePMv8CWZQPSDNm3X2QoGpn9s3AJgZs26+yFA1LshPnrYGbKJaa71cSU6ch3pWby5luSEN0mdY/NuvshQNS7IUDUuyFA1LshQNS7FTPgETaneiaeYtx8arExA3wSNlBAPl2KQqmDapTnNeDxTUJnI+OtJbeyOxN1E9m1p0i/cQJgRHVn5PCR6YSFix+bdfZCgal2QoGpdkKBqXZCgal2QoGpde1fv9r2/ZDInet8H/nU441DvETf7aev/+ybkoFO20mPIhLQrPEuHmko+k/HxV0ZWz200IBbq3Bm8re7OCUEBVUX92JBQD9kMi79243ihvGK4tOT0bYHuSaLD6qfyTmsDNHABFGvXImahiIaTUNVXmfdGRSeugtJSH3nXrgrtXAsKRgropBaaNThi/3Jvg8ESJLOIUJzDwynCcRoBgvA5rF4XmNdy/QxYylwt4u7Vw+7e33EmF9kkdchTvMYWpSEuHIdDLnXHsEr9XgTEF73Ld86CjrMcqg18Wied1+YTx07OGALBr0MZVEJj7SaSzsVF4dkdG2hrRb/xZ+bBbjjX44/3uFFpn4Q26VJP5HgTjm7Fgm3izTPZQk8kaOZL/YPNF1BchUB+rYQHogd8AkVo+amULmI8pyMlBEyM1/0XtMSvoxXkGPBbG+fXJ2psc9EjI2vmc231AqO6Vyk8otKeUi+2Ef1ybtBZEOOma52ZaOgLvJbKGaM0CIZyzFcGDgPnafzdKznHCt8z9qz1+6bOdriD+9hAsLUDbPa8/bptt0L8hg0iAil86mYcQ1PHKBnnXqabPedIlEfmIjZG6TwO+vwYepdmDoX+LHss6A9gXXzpNdi1TB9V+JVUxcWw4n+NGC6iVDUOb4oZrMFMIYnxw86Thy72951zgRXkNKIUfFlupw6SClNT37jV7iACOznMBaGWqFblgNeOEcgSlX5SnQX1tgfqqXXuRFmGJhEUts5yI/IXL/MKZmvz7BDeHOLnZSfJi7Nmoe//RuZGc5sjmtE9XF2/PJUaO4ACFH3o2mSViRnOiI6jMsZRXsPS+aRkRjVvTG4BorWoEHc7ru/WHHS6RGSDFvi4S1w04tg0XsMNpEgEbOIqUWXULmCRlMf/Bb9mvXsrwEi6gwB+U4vnWsi5ZFimS5Zq7iTQ1RjgsphXg5cwWwB27khxytIV0D96J9KTicTyC7oMXNucmz8VZ8HzY3lsbYNqbHi4x04+tYvB9qXb/c53SOHnUt+CPE/x5jhbbjr41JV5Pj8pLZe/7f7EpTgWy8XCiy7fufxKQQ7CNYTOhJN0pP/0HULpStaltFtH0CjZcwOBjPttTz7JP4kC4l8BPhaewX7hLcxggejmTE/d7G+KRn0w9Ev8Fq+gHMeZ0H6KLJ34zqC158HJ99Tr/3SY7KjTZfdTT7yb09BlWspJuSQi8S6jvXliXflTj/ZYDwKksZXFcNYd3Jszpyzr++3M8zPqQ2ELIaD577FnnHmD8S8gSvfwXXuIrfidP6oVO0qhDVc7ioS4Zvx4zyDqjXU2QcndXb2MCjyp2Vlov2OH4gbtj6C0w9aOgwCnSs7WJc42QpL1+4eC8+Jl9nM2DGc+U22yuBw72gat6W9YnFh1jsehScPa3upZWRk7dh34+xZxTmhtN3G571ZMPHZ9VA11gLiApzdIaReQ902ziyKryd0pbdgOvAtVJic+1Fu8aSvNZH8vR3Xy2OdVUnqSASC2oa+Husway2smgK/o3bPk4Js0T9Clgasovkrd4ELgy7QoVGrlM77i20BkjtXWRB3CfQW7z5AObk9k+h7Vi1DCZmL2yY/KPxOMNCI/c/DI1+fwteR7p3ngtKYLxWphDpNZ0gh6un3b7cKtBA2020b7yJpNhvpaWBUEm3Xx/e8flV296tRMwqWVgRVyQDZUcYhO6QRU62KA0Dok9Le+J2KxSPCaLVtTbsa/+5mF4s0dudCFRSzKIGox3QEF8pJJTyu7H/WYYtILj9L1mLGEm8+61ITwN2Jy9UFix+bdfZCgal2QoGpdkKBqXZCgal2QoGpbur/IcDHCZ7IN6n3hXICGqVlymmwRv6hn8w1nPxFoyukmKEStaK0VoYct3oiGdFky3nk+JdtBj7UKt0NjjEA9LFj8JN18mbNuvshQNS7IUDUhHdfY/AQk1h8pA6kVMEF0hNf0Yo5nmhZ7x9oIxP4lLZQq/VnTkQuonl2mm1sgtoagV5c8JBwrJCfXNbnkqOC2uXmHfjXDLW+YZL+s3oVpfStXZe1vMqpdzUWuKiXlbpLwU3mTntaWtEMPU81gGDagqmCsSV8NMzvP5gCZoHOd8EdxcxFvInzFkK5mtXbO3vRLK6e1bEVd0YvXIRfaxObbLiNmmDk9sfAxgyagXNWTNtWvgkreVUzEYcyqBnvmc5PqUYSfBFQPqsK2sVr7GD4y8/DNkqp3CIAEaRWyYNZ7gzAhF2PGjCNZhvKkgA6Oj+KAqiwRZe2hhUNk2m4P5HdpKnCfNRsOsmAZcdn46UdCuq0vyoE6M8PJNAVAzgbp+HdcU2aDSev03ZKnrYCUhgMbT7B+hFDazVQa7C8PXIvGuMaWGiQ6B3+CMXFiiubiaFpyEiRPEP3jl6+A5gwV58O15oPyoLxQA2uY3cyzqqnZ8F1jvM8X16qNJr3M1m4Cn5QUPc1P03Q9ybr++YJGs3LcX7Xw6UoTOZnBWrcCzsQl4AnCqnSIS58y3PM/VTJHho2lE0oWu4QedxFiJUDBARwtkGa/gg3AGuNB9X9j8q3dFQycwDBY4uOSpZOraOAzXRDgwTZAJ8TYVVUTNSNqjE9Ko6+JXG3fH7Dtlrfz9o0d4byEaieYydcbuMOVTR+FSc7HrzwpvgjnP++RMEMJTNX7+3YWZyvcmplJEAsVoTk9POgV9Ihvu9Khj2eKfxoP6trZRDC1ZCbZBz4rU3M5uY4bFjxoBO2dEwPjRMYdafYufNmInXDeynbIch33Y2/Oa/5BguwYCkDoNHRD6HjixMi66PZcRmS3pQaelBQJuG2IG8bZ2yMnHdPgqJgYRI8Y5fjJXTjxoL4y2kTfRJ2ZDi0N/qcV7CTvaNFAfaLArvsiP8/uGrKpVVJMxs9pKdFP2YziMSKL8njH06V3KOyhEV4as/jYSF9PjTu4Ge+By+vXsLGrZbHqb6z2kC2zfIsbVvwMemU626yLrY8mnVtxxcrtIj1zFSnNFCEKdrk4C6Ta8Gyqg3w+LzVhGZtmjtCWW6oGwF/x1YYSyHdKn2JPmhVMUIoXaCVwTIab06gsj2da/9p+0PTNpwOfeA+TZv+n4lihEnY5RA9Fjwf2Q/hoPVX0GEW0j8QCCS6fP61mBVAPu7FAKLWJkmmv7OFwm4rbxgEmzjXPg4rULkwZCDPWrqpC5Whfs04stf91ZFItoK7OalXI7hJTzXOn1ai3hy7iZEIfDAjxcpRk2vYyZs1jam5TC+FTYZY2nDfZwURTtpb1hYsb7to0bswVFnQeWcykqEap/DWBmvoy103bMEfeSuWlH/b88fsXqIN+oQSqgs2ZfhK7RBCnGP/B8tsJnLDzfrvg4qeo2mTtzEKCVzOhCpBzjD7sZ8+L+gKAt8VyEM7yeT0/CHltZ2DGUOjwE56ixY/NygpqrckMwim4OI2UjKcHNAwh3BYwbvyiBqWst0/NLVUES2peEsDLVosAKBXzhZSpknNY0PlHjyCUZA/8/g6vS62SjQogVgLUjdGtWBh/w6EkNHqSxFUq7IqR+vL9RYsfm3X2QoGpdkKBqXZCgal2QoGpdkKBqXXIPhEcGsWEHvrdqA0LRPK9qGhrIZNF3/hyK7HWYsMuYWzXK+zSugA8/hC9wfaN3v2q9U+gVQLJ/44Urt1vDBuN1kh7yxmKvGAp+DZ1tZWMtBvJu150YjT1z7fo9FNqvYryv9ELP4UZCXOMXQbyJrriGuajFwTEbPetQ7OdAbcRGiYn4GG4cZ999qwocnkqZZBU+2t2NZjhQqLSBN0s186qG7x8JjQb/Q4STe/I2L3x+DH0Qb06I2GFsdjtNYan954drWo7Vqnp4iUNY9KazGPWPfzPADPwFzPoAR/Olwwcy6y5xNRKs7U50H8vP6XJxZyeIS2UBXqhLJhQMBoT2GuZyvackSET1mTtKGYbT6wbqXdqKaDxEu4FpXbkJha3kUsim2mK/MQ1r0Qns1dnskY/0PJNRVQMFOaDXYkHmEkRjB9oiiGrcnVgp6SWBg4/Zuc2omKjFxUXf/IgYgIiKLm6YNByLJdOexcjkrpXmaT5tQDBpF31+o6C5OQyAoNdY0axBWWpGYvGIKooL04dPnDA0gfJOdBmkEOUpHZSq3NwOUFTWm6I4LsHyguU8CoT9s1uVjyq2gt/RB9iJobRoX8Ub4LdqCAozjpYxO25ouZcsbOZYTwIrfpGykt/lKgdvXS8GQib26nweh/iap7Jjx4y8fJpj1rPigjX0Q6oVvfHB6v4ItWkZZ5XsViJlvqRXHpR0c+/D/gLHXr8Og3pg5RuatZaW4Db1oxFphjjZTrfWXrBDXXP78rGrIPzPrKTs3M9qXZiWjCVV1D3uXbdzKCXpwflfyGuIbHahGvj9DeitxabJhu4tO2BjkUWvCXnP4+v0z3TTSpCnid+m5xk3nbsZ+PBBhetISihEmVR9p5+OMfFnJlLs6nXYV4Fot/IXvO33HulFfdBAFcuj7aLTXYkOD+lTnMRWIV0BtDY79KvdC4p1Lb00NMYlwSEYLgOwE5+XWxRRjcAZ2EWSybRFRj75MG44dh0jSBi+DckpS8XhAfFxrTZ7393hnVsBf7E7kHYIfYSHazvGuTT73vJRhs99cS++EBqjX0BDesYW0/E5ui9kInVukV1iZarYEGGONLaUuKynC5KDKHKmu2DUzdY57nvydBxQdmG92C2g1KlM52JomlL/OAon0YNmRWxKa51iUmGqEVMvyv/J6nOzCJJBagYwHZnasgiyVSdTDIvbLyzyOotjzOMYKmklbfwqaD38k5cq/hy59QR0sgx+q7q6pYHHhbjuvfATtVlhZYHN0iXOi+pDaGnBpivceNwOvWLGcr9urfuZe7JCFfmXAGsLgeJf7C/7tf658HDbzfo2/pZtr4mV+cEKJKCg/FpP8IDWrOIFp0fyzngqkHCEjuL17p27jWLhH1b0h9WpjRH+p8KGeTfCblAkPeOIgJ7per21HGdTYJxLdkMb8QdrAsO87EfRHVr8L9j/r7mmoScLQsExFLFSqwokp5SXt7//2kC0G/4lTWe4UCsZqLvf/FxdEubcLGJ7jjc4c2TWVo/WKJgZs6MLH5kq7av+Tcj8qbRFrrXZ0QacPLDZLZvNdKvcUido3DoWmHeyZvJ6LrUq2HeShoRJm3X20ydBQNVaLAfBOZKydfZCgal2QoGpg7GniYkmbNuvshQNS7IUDUuyFA1LrUAA/vaSIcAuXzlIhiAmU8y4iJSTL2H7a88g3ukLnbM2YabBbg6ZaMwAI/AT2R4xKtfiFe1BZ73S5eBJSW9pjZli10vs1OvMaCI9+/vL6MasLUbErAP3o5WgwWYMfrduF9Mi1l91ih8H6KhJ8Cr82qAgmSbhy7YyfnG5AZGV2eav9fkxVfoO0fzdqgrC3aqdJOWqA8k5kqDAAz3f5mpjtuyswD5Yj7dheAoDWLnFcafPODensMqVS0sJldMZ/yEot1lmwlh78qNO9HLEB0TK/T/cWSyKBqE4SLeZINkAYGvKcNI41Hjc9SR8XPZ2FsyYgo1Rmkw8SaQHotuhtLz2L3KaG3ocTMUOGZ6bEN4YOvhh7ysV8AlrQkyvgEtaEmV8AlrQkyvgEtaEmV8AlrQkyvgEtaEmV8AlrQkyvgEtaEmV8AlrQkyvgEtaEmV8AlrQkyvgEtaEklKndEdPPTzI6J2svxWTzgSwnGLFai4zVFeA3ot0I+OvonyGodIjWjQR99CNmLwtsFaFiY6oAvFax1s9P6AaIHi3isadlni2TDczbES770gCT16cONg6q0KAQrwI8NFkQ41vMMFU7ViY7o7HDoga0LyfqlzdK/OGh+Ce6OJ6ffsCMejRcwQO/b/j+CdN3M4EMwKWO4+WlELzdG2IBVYITDbq6wG+n74h8r6W6l0NK5UzV/lvS8K5Ji3DJ93uduC+jKOxmDNjvbK9cJeID8tnpK3InTVaXGXt1RfcnLZr9VutMquKFGamZsGLAYJ4lumaY0B3MO7h8TSMvZvrmW2Nq/crrDc6omfwretCPXnykuP2FwFdVVMGFTQJCUbKEDanlStl7COgxgiT/u5f4ADTSy+4I6kwZ4Sm+TEHcwlYWf0fDIggE7DAwDH8hY8pb4XYiEuYVmzP/8QViU9i4N9kkMWpbRIYYalZY+ItcAt87IerGxEFGQAAAAAKBBiusXWZnY3DRnPE9sdxnQnzQvWYqooBXax73Jew0jQPJ/CEGxvdUcZ1sjkYscPycoxiccK7COKZsWBOemoDwfaWMYGRpYKImvZ87XbkKntYazJCd8R155yUj6jpMqlMBxKuytzZF3J5I3fy/IVuMwRazruoUJpjTDePcnU4GM5dA+NkpsQeKU2ywj4dv22DWNAUyuAjAfoQWQ7VvnFp+z5Zem+/NCXp4Ll31b4GWV63DOZkF8B04m7a27bRbyGUaEz4FIoJRlYG17v7m5j2viH2UbL4pg/dyeiwM+pR5H7YkJ40EjUErDnOHpmUzrO3Sb4hyVBWc5cYBOWhdt02uJ35Pj0C+SJAFgL1uBoov3oIOKXIipc8fQZRyabxzvH3jcX294l4kqQQ40mDOGazMTIlRw8kdgjk2c5BI0+Et9UiKI3dL8YxqPfqE8jqGF4+XA7kHzqsTNzQ9taL41dCPRVHIzvd7kfco+hMKAUMmJwW73rmdY+BlBfPjKcCcumTorePvFnsxnkmC6Pgf0H81VI0n88S1nnb0v/rewhZVEvisLCRNfwUK/1yzQ6vkgXsPCUXRZvn44qTYQ9gclGwnNMLEQX8sRO6D85luOx4QkCNwQGZ667aWO8VVYcHTzCvGPWTxcb5UC91Sn5zssgYiObI1sbHGw44HrG1szKEBpidXZFKHrIIPTiHBbcbR2QsRR4hkXxIuPPBGWIEX+7N2AAp1cZogCEvoM4EI0UZW0WwoqbKXLq3D2x+qRBdG2c8PTJ8wGJSK2RM3yXJyquwlm39jBjf96sDpAT6XREOFcQph8YEPCTG8NmmTIEj/P72dOWbLPOT1/8AZM1zjUhk4psUM2Ji5YEv1bNpmWJwriJDE+y8CAkpK5cTUamT4eAPPeFbSS+ZZazHkZazX+V0iepeIWLOmztuxQbB1/BcV2dTB6MJH0LjWzpTi6RwSaib6H7stq/YqzVSqL6E8Ku6pEDFEEsTKIVRhKSryM2b83QZo1D//nNAhUkFLc8jCVuYV36pctG5R0Yka8xQzrd6CYzciKKEQUT3ppcpv+3SC7RXC8Vf1F/eKlTXuKFhrNZDWLy1PMUhVs4ZLT4WKiinL5nLOJ6MMbwvGEusha/COsLQZ9es3OryEgglhQmd3bf3L2Au/vtnx2e4N5t4Zxid8ENqpYtLGz+0Ch46Q1A0sZnpwj7tLP6edMC0NlqbgvVfr6Jw1DWpDVp9fX6FfcFrxFXMsd8VEKkrVzVQbk2yAUHJAMzAKkBF8/CygFqxvuP+ZndadcFlE0028MXWFOeRUSQZtaDoEtcdCgjqbzm7mtii1R/St1TKyPZPNY7Fv9uAPRKYww3Rn7o2uub3hkr644XmCI1Su+zgdMBCaF/iTVxupr4Ko+VmRYhhulfoPMFEXR4/OnRKbVJtzBFkHTXWdT0WlnUF3FtvFFBIc5W4lcRqafDh5aB2GmUS2iR+dgbuUPQpVIT0ECOgI3tIMAa56tNbkWBI3H7jt8b6yecMnsq/+Z35TdzyKIamWxohjCCnRpH13nSLrrqXRApnr8OkNEz+GRzuCkIUjk0AV0Eiqw/G/u3qOZ0bgz+/xz129cmpOVk0F7SsertNwXVO1XH8Fs63X/jANnjNkxqE/PM78QlcVhXH2QnMlUMfSN2q8uIrh7gxhf1DPYs+YtTG98zb4pNhSOp00HpNM7r5CB0Vt4VjRf6uKywBYMkC86U8+B8b7hT0zkRIhtr44UJHXzMM5UlJM/fJwo+oOcCw0rE43wDr3/42YA3Pkkkdw+0LSB0I9n2SE86KObRc1xRmzCkbGeVxHfkkPDku2LOS7EitNv7T1XxOGTXkkSgfLoCI/DwezyJ6C26ngi6vTANcjnofZBO2Rzc28poN8EHg01ZxQBT0HjOaXRU/Xlp6VFTWvp/74/jG6ClFT2qnAAAApT6adv6mjGhcYpKNCheA2OBsQxiBXdK04jOPptexDE0YOIA3K8dmpzvjNq76FOs/4RF/nWxU3fvZ6vRaz4xI19kK0OBgIs6ynEqOJ6OMPamf4sTAFCS+9OMHX3EuGvSP1i3AxCahY20yirjPmptzrLoCtg2gZm8MzXeqt2IruSiNlLaf59K024bdETSQdDK8AZmlB5GyqIcCrT9+AXOm+n9UgCW2aB0uBQNJOVpbZxgwP7DfNdKLH4Aen9GscCvVd6nbSFdWy+XgvhJEBHUj4rQbbdHFal+MXhuSiSxQ4KPelDn5zNIXUSwRKrPt0YbDTB3pZBT60Q7f0b/B1dHb5hEB3JYwXXmDpOY3Z7vfMi+9FAu4XzQ1MLEa2qW6fuvwF6E/Cdxl3dyxnjt+qjw82jsawmendSs+fnMLgHkujiDGwSYbba8gUwGJwG+5aUKYec/0zPnk0eSWThvcmLPVTGmM2JzezH6G5dB/MR+EI+y6wYihexmlTw8loZfa81OmXKAePkDM0HaZBVCPwbZK4swZUbZAqZOWWh+fZDeT+WwabvbXhN5i4DrDXM+HuxHbF+b6slmLBbSAx58jYHCJTRzt3VpIOXA3kEyPnhQap9XLYE+lxHrcWI679GkGwzcxUaKBycCtB1PXn2f/9qr1pjzuYV1AAAAAA78pmpRdEwqSMY9Y258bt20qfFHSRpyvYd6ZF9cieYRJFQF6Sepbt/GIK2dPxakyemqm51joyAJC6dVxTiSVmZLLUXxd5aT3q/nSgr5sT1wZZM+QLRyHIWAFSIuViM+JxUWGkZmK0i7w+aHMjvcBOJx0rV7tSkgAFkcuBKikVuub3XzT114E2xrIaksYdz0DXpfu/t8SS1h0AXeQbBm0u342AKdFYVIsz3om0cQHvblHfEb3L27EujCB8LKcujL7I5+HPQLJtB0satwkkPfikNjyK8E7TR1TzBnvgofbkYpigcQDNbFHXrQ1QwkaM6A04xQAlfm/cMRUzYPtB5CFfysCp8pCTyLOZfCDPBPHxXt7S32CY0KgFok72mwffMKgSqiMO6J9nk2iwSzUWqDIQAloDRndfGYFmpwpxkyrNnBjLsj636XhlVq7h5uBJmgBq1gvSq20pakp/SyRWkqVEr5L8WxWceZgNTt5a1vO2yf+yYOJDZUGyntUAVqQUKYDKf9ewsxdvUlp3P6hfLFsRZgVxu2soOzBHI8bWobYjYtBtw3wIm9n/1WGaoAm1J67QqHrUPahQf9b38PJrBDudaFoXfFwyPOHm8RkwwmJStMeLISo/pZdmGpBdgAAqxTbTg8yoo3UdEFTQTV+8R8wBUmqlO7tDf+JVkoMeB5ROeNrkK2joG+TUQ5r/ovvr2VCcPTUVkgc23Jl2EpW7MgLM6ddTfLQXNBu01jP2haLLlGTM1dloWpdw00ONyHgS4YeTkr5z1Yt0iHCBflTr1eVkfyjJoZq9slPlgdqQ7p+oqxtvhGYCWVdkkQjySuUlY4+n9hgMKn1e7KlNm0bom8OW5lIourzOBROKWfx0LsvDBXBO1BSn1hREAhJi+Pb/PR0yKzHohw74CYfFIu8OR7WQxHUj3i0L2WoiscrXAYXqDzbPsjqtHZNwqa7wWTuBSS5rbaiA7v8LBqqi7Xe+PGMqPxGlw0fcw5gSGpvCt/7jtXJYIHig6ZwxoWRC8i+6x1t9T/uovGTgZ+ulu05U+fRShpqu9kTfmyWKR16ctWKkHKSYi8l+SVV1N5IkWHf3oDa50wGiqutk7CREEHoa3UfshuHwA/wS3S8yCXEvDwI5qSaMXq0SxNtqwkEnj/RPyTeMoaHKyMvtSog3gy0J5r5p2vc3vz9mte/qy9KDjPOpEHJNnsgM8kjrs39NLjJ+V0ytXwRuEMpmIple40+XXZL0dzRlesGwV2EQjP/DGjT0L49OeyjtgmQ+7IxPDLgfRY6pWks5VTZiwsrmuL2lfryU5qHACk+uCIHivUQsdJOTESwGOBeKapT2Dhiav9zAWtGLganHWDQrXahJBuhRu8KqKGc1zuWVv2JyeGgeLUGgFMBK1fYwmRUR1ISU47+sBAlXHR3KQV7MAQFyHshvGYVWZLQZfBffykIL0/3kuHlDryPD4RuID3n7iA4rmfSOUNtpDtTWRt8aujadXGJ8BfD6etKlKuMj+DLn/anuAzfyCUaiBDjMevZdkbW/rDlHyUAvI/afJdObmGpm6Mz3ZFGf5htyKhAFIYmEKFfJK9VVxZJQw+lNJ4yedccynRRYpeUujTQnUIHWCGkAKUkbmdB6BCrBgGObTIPsaS+Z687qhBPcFCoHPxWyywnB9KTV8AwHntek2M5f7qgebdYqnsMCCaqEiyOesWm+MQCDumwCSq9jVAGGt18mU8oE7FCJK0vOPZ3yoCt1lS0KD0XxEjXuFsWMI/8yY4J4c/BEbxZl/bnLZgbBeTSaG+4CyeHdX7k8zycWi8Yyl+i1oo1UoaymuL99fNXPnFOPFINpgSnX6bbCXgm/Ut1Zumv/GuKX6RbRR3ZYnbOopnpUmQlGkL/tOHmS+VJYbsKW3nMmZ5kkzWT/2zJExNkVLltEmCeCCX7+sp9qzevru6CAOT2ia4TamIpJGVowtVsv/Jdsh6yupce395oaiPf6yVCt8Jcch/WUEpz9jqv7NVAHMhLDdel0zWoPf3kaO5PfC6DwxA5grA7jbBxRtR8+FgFzpU2dxAKDng/1686GDWlhRehYRPs1fmjHV9sVJK+ohv2JAExObWP0Z9K99KUhsAitM35Eggf+FWV5AfkQUX2Ir8kyXuy5a3JzLdiIn4BAiQ87Koi5XqeP2zpvWjfZ0QlXI+vleCdMPNw37eH+9qgA0DxXzuLr3DCLLg86z/x1vkwcaZepoJaesQTMVpo9HXbxKj5k58u1BVn+HR3PDkhUxyWOl/zkCzeeC45UrgechGWmPPw/8SV/kP8IYTI+IdrcqEDPVKvyDfWikFfXbq05p1GM+b4FjsDgW3SUV9LzRDdTy/am5URLdf3SAf338YpGNDtIpWyuz9sILdWQYHVwSNINYO8dz7WYxUxl2Sw+RN2piCqUuf5WQPEsZkwq16UgioSul0uSzaxUNS9BAftsyd1FpejVPl+MFwUglkeQLNfaFOy8GxAIM1FaaiyLnanpwI3XfZEaQA91mcO/oGvV2NPWXIferhjZQw8MID1b9W13wkPdca+Ol2CXY3yd+NEP5XowomlCsmS04vbCYXi/BknJh8lHJvd+fUVflvCel0PfoqBXNpPLI1ntK3RQXXkVIQIAA4ZWBSgJPP3xHbjGZb+NlVxwhkqhrAK+/7BAqjmqLmoBBQ8th8QPiN/glWY8TzbTPA+8+wJjASqGaaMzlhD1RwK64i7s1NhD0vQcYS/ezJ0Ozczfk87a7ZbAUUIlOS7y/KmTOFIsEYtKdr7O2ChtsXe6cMDt/w3mu1wsWchmYrdemjbXV2Iq+6mXG6XeA8NPLYZ8ZlvBD9W3OnGBxTFLFAcm14fQVPx7x7od5t2CnSDwPpzRHsmv21Vk9YdI2QRR9iuCCKwZvRGmEpgV8zMC+eogVrg1fX8IqAb7xMQ1kuxzKjjVIhpMSAU4KXgZxNSV7h7PTn+DdjoSIDItv2SBaLfbyAF33aHd5l1APZO/KwoJ1bl59/bv7vB+OhCEvn1V8ptJWop9ZitqPRDmJ7JczTa2hwx5y7QDL3RiIz1k3SmeSghecuI9knIC7nCT7cU9YFpmbUbmH2IliAZjceFKWFHPuMGA8gSx+GlrMKwS02bBGqm4LuiJVW2LaKk50elRGyElf9PmsilAB8LfesZv1AnwsB+c6U9PBuB9EIt19NS/XttulEGTesiAStI9jOn0pncmHzgxcLIh4hI1vosHdbDEiF8SgAqz2ZWbz0GTFYAAAAAAAAAAAAAN7MVl1Jd8i6smS70/VjYitBTOKcnMMCy2gD5EOzHjZ00U5GIYM2yAMY4xbBkkAz9TaVlPZ2pU3C8BsTnvehTTAJSGtaHENAyBnX8OyXShIQvceHtlb1HjlLzq3WDuI5m7jiSLQj41BfpVsuaH939morMMJ4EcxyIgWp+z795CEnwAe+Y/rjwXA0jsUYaDtiSYBGTuUlSXVXyULjQmSkdykqfuEuhYqMdZpMU57QGSQxdNiVwwnXIiFcEwPfAxaVjUXxTaE1QNkWzquq62r7blVLIrbrxBuQ4ECZogZ7o8a1n19W9QGM5k/Mg3H1viudWJ4xmU0h6GKPv5luzB7Z5PDtE0fTTJd7pItU/lBepNqUU/OLHVTgb/bJwz/2G383zAACKY6DYBLVZJcLvEwmi8VDND23FKZUMVHW10rWK96RMDfUecjhBpwam4mbw14dVzzZdqi7Ne71/ONBMgpALuGtuED3HwDTrPFGyepjh6ZnHqWAnAEOG2WN6BuG0vxq3BZVTOphuQ98QmYtIyF7vKWKzs1K3Hk5Wgqq6Uqznu/nF592gHbvW9dIinu1jhsjIA1xKWFXhplTTJtVzq8Fkoaq0F+df0SFCJezDEKLRxEsBU0iBQwclc610dnuRtQcg/sXbJ6EPIAW06Ur3yoGONy+jLDb8dRkxNVohR3DXMVwJ+DtI05424MYRvkACi5FEytiza1NuEFV5H/d/99hheDNzljx+0EBVRtfCj/8ra45Cc8OxywRQGlDxfxhXLV+NNAUjlMufLCVgHLZhbij5lvx0XKDiVY5OjtN/5Z4GZTMAP+84iqvh1qGsV+AJAIqm42ZKNFlaCcvkuQrQLFpRMOroYLXs8er6QmIUXOCkHO5rx/ExanquWiSKPdqeP+sQwelWZOFW40LoXi96yrn0QlpQLdfxpSkFrC1/Ltw/4wc+mV5huI8qh1H4WmofTKJaExO0/9bkve1e21LLOA3X5VyAoAiLsLYe7UFPEPIbMBZj6RUWGqORAI/Knqxp5nwHy7e50/qhjj7ZUa56HbORD3bdcWaMkb8L1Pb9ry7s5hIuhZ0Ou4+cJsBRNRVmPjPbYe4g+nvznqQ2XomMZ9//b5ZbtREJOhqSjkbO/GXLQPr162HniSL7Q4x6WtPjj77QkpL8Xo6D3aE4SU1JPzUWAzES73qV1aBr+D0NnML+aSejDuTtZWFeF+JFY1LlPWdkye61inn1sAbXuuISNIH8oyc25GtCIxmxT9D1ezuDwbj37LWYoEKNsYreE0OWqXT32rNexT73JD63JNT/NOb6T3kVd2MrNbMk8ih7dnPyU36oOz4w7G8vSo78qSvGTaUgXnDH+RTg0ESblgwZwD65a23tumrzGIkQDNygHDJw2vpLIGFQQ976/wZA1lH7NyZzkUrMpf+Z/Gryx4dnyG4YLktO3eeyo13U3IkjKqrnSTLs/g7gwcu2k+mKWn0XkkYLZ4y6oyeJjrHx3VXQfI3/9+FG7RzOzeVCg3ROqy9ynjzFvwjkWtC0Qg/eTdBdqz63kWrefeuS6klAVg0wlbLcjSNctsfh0WmF1KUOV0rE5y6SHpT+1HC9dKmpovTQF07PAonn1XTItC51kcVJNd6GTzcbha5GRY/gQ4oTNYTz373IwIPZFfCA9BkxVXCNU3lPyyM8GXFTYVc05jl8jZygNqP9AdLjuEvZbSxGZA04t/HUOTTptQS04WBMvBqjCPw+be5mnUwcEJfZ58clyeJJCSZGBIIm2oDNTOxTPE9UDvomvpZrbofEuj9yXG4BTzA1R+EIp0F3R8JbvK59yd1CN+qNippZDMtJ5B/9RjcuIUN9R9rnRyRdzQtshs/P1ZwQEEI36th6I5/P3m4/iGb6WG1653L6aQRRscW0/6GrXb3e/WZlCt2x/X3DbgcVJgnlgkiVKy99tGmvjcdylOJRimAcuRyfAaiivpqx9gqratHAKY9la0P9/AncekecFTl1/ErGPgejmZHlpkE3bSU/T72kvDF1K2FNDBw0n6bARzkZZuYV735qmACj9HBYcG5dJ6K8RbzPkIN7k0+drNNeEPKPL0yzCGyaJX8I+/nXMQ9FopxzYrLzFrrnoUa6gWgCnkxP0KXQviiMuf+jEF9xyMrX7xhbQPLWRdQ0FwqtsuCimZ6Rr0F1HytYzat8Hz19n7wqKmmOs70COkSknR8jM3vM1RosMviZ40d9zB2hNjzFK7fvV/yjkir0P/yUOoRlwtEjB/gYEpVRS/1vPl/wxd78ueabf5/g0qImi9jxo1dLIAuuJhduELz/Z1NrQTMsOP6giKkDv0xLhgPhO3tBofe/s8L6N8wzGRrJvgC33LWO+qICK/VWJpCcpBuR7CDquh5PCQyV5WwdIDjcDnIejCGDVFdrjKf6J8ltdVeEtZ4BKIdq0TLlZzmG7I5s0V4ulBNd3SV2xv4Lj73UvXFD4ebtWQ63Y5CIMNcQOvRE2fbFZZ/ITa6PHf9BApjx0J9zTu7jjtkZpFDOZXdkO1RHcJdZHLXFBvBTC6djBSDTkFTTMP4eFb+SY8mBW+HExfsYmZp3S1JJqFyCXhDarnbzRn9KizoEB0ulescjKsSLB6YxG9IFZvtR/a7xouc2DGKJ1gURjUgiTTyD5/GIAfqVoF+0eRXLs7lmLRmOdt2CwhvKROxzVQo2qDesHukFkwJ2YdaIQ7Qq2cQFNVBw36DVGtox7w68sIfv71j98tBiA3OzPQ7UgnLKQuwIx0s/P5HbB23QPD5/e7QlpNl+pnQwWd4V+OLOEpAXSF/3gmg3dTCChKjvvglS2yk8LxK0wS9Os1L5KvmgdKJ6zxAnOQW2rhkezs7S6EWhWhjfHQpBmtYfMXaZenkRXshpMJGo78EvVbaaVe+HO3bTH9xJNU+Zt0Ua0zYgAo1qsj6Rn9a7zxfy3KJp4VzFdHXeCW6xQiSzyuQdTgztIMmf0sg0cloLIdOEtiuLBEGCycnfG+38NFs2MdpzIk640RZzjbkJIwssAaNcrqiMpS6g6AWZvrPcQosGDt2vOW+1LbIk/bv6WFKCg+hVj5CFd5wAZMvPStE6/j8ADIYsTOmLPHkWdjzsZZTcWA+c7ObzdEjOhKvz5KNN3zTbGOgZd/lqd2pN8USWmNQAZvdOp/pyffkSllACzMc9ZUbFqpcVINFgrdvg/zy2FRhKi8cYyJ4/DerHHUu/nSG9Vqx/8Ox5BzdFZFlMtovtM3Q63qMTTeoV0sktsAa73ratFT4dJZQXzhNLGK1LiJSh0cF/dSVSGjSBfvRXefgJe6EucBI3+mL9q1A9XFB6QqrFDxbQ8oQXv7cxChrmRB9HkKnG47ElP4kkBgEg+QTMfzbe3BQQ07HlZIJrH0n75ArLWyovK7dnw2pKB0b0RfjNwe4iYDdHQEJtU69bvDOW5KJ7Q1QdGAXiTK7QF0l84PRXusUKErqT/cWaKFNDvQnm7QuU14iDJELxSQKcDNNAd5MOnVy/MbkqdPn2+YUvQVvSex+gULrXqyDUA9v5v+z+2m2ha8no0t/xt+U3dQHygZOVx4v5dTZI7IB5BVxs55VBRX+0yUC1ieZEVyt9iLhjZKd0heqPXxJrgXwzRiU4FWLYzGWP5V6Rv3n0lCKGIluP80OxYmWPTLddpoa68nhz60Od+9Z8HLKU0uhnPiHGVk3p103VVEuzb6s6L41faVy9t+WCLwLMg1RxetzKnlmqnwiqGfkcjlTMTKIBcYtV4shLR7T1xPA3Bh12CxlVoj7QYEhqyReeSfgpGtg3YxBUcQguFjttXaV+ubuzClNF2U1EMsfFOOkWbnEw8y3VfMhsUCOz5c9C0NMrK5bju+p4y7VeoT2puNLKZELe33pcUdTJelKP36xGMd4OFeqrUlaRwmEDc3ge5ihi0wdVNaVu9jwg/4g3Dy1Gx+oBfsfkZAENAdXO2xYAscA0vLggS/OG0NSlnBhCRkPYb/dEgyoHVEwG9e2EnJJs10HJtIaOTZ74nADZZUjZ4TDK20zL9RxcXJhe1c/Ouu1E3NJFXS2yVUP2he6Lkj0SDpwFPZf0W1i9sBnuHMbxMgsRg0HQ3o4T0pQpn6UxyH+3rbzMTJD3Glm+lADWBgNaChdQG9jwrhpyQx7svhT/fWfahzniTc91wM0Y3fEMsmLcO6jBp1IdiaWdtAOztsHgmNzfvEYjo6bDih5lCT3WYinsqRCr70+EzNx+FqBY2+PTyRtn1Qlpq5nGXymHJVrqPyR+iFcnB3evHxGPOnzJV3hJUQ9UJU9blfd9rL3H+f/O0q9K4/4i244V7XsbZRR0faaoeLdR2t1hmeLKYFgxYCwNPeYVJQt8rVHS+krBxbxphkOC59QmxudKYd3wh+Op9PvWpVxxNd45Rg0+Q/D7Lf9W9BAnUfzrK55f0JGVl4pwAAAsrd9AB6xgB28AFQmAoAAAAAAAqyBvRgp8qvwVLtUQCqVuUufuak1kMVZShB7QewDQOvP4+MMYmF4oUQXTqBLNS66Be+1Urg99INeK4WQ71XB454s1wIFdLyGNHa5golibw29nH94FMFisFd7H9gHMpQjJt6KWGI//UFwH10G1dRJn6GygdS9a7XiBVZweh0Q/qc3GHYEUpVAabUwdtntvHcuiipuj892dXaUO4S/AO9VF9Bp3EtIsM9kDGhIflHjiUPfuq91qR1LTyY7DMatAn3puN5HLJpzUJ5lCxkIL0pxgvTfX5UxI0F/fsrvZ7c1Eo3h8aZKMUi5KaVWYF/hGNf14J32h11V5ok4PntMj670NkWI9DZtaDggUj3wzVtdgCptywBZLYSIxlsbnFWT/M/3i25cMRW0nMSjqEEweVGCMgBq2H8nDaGNDsAYh243lkRPNswo1CQnlsl2ODUoAAAAAAGL+Qa77YwCjoP2mZ4AmZGGIn+hBSDZofODXlilZ3Mhg4yDMQukRQgENMaRAse1UDPwJRojes+Lz0qAAAAAAAAEMBne4PgIQc6ZJaPcjLKtB1G+5r8OYxbIpyAXOkAu9mIMDuHMVWRPbwS+i6CBxSN7M19WgNvbqqudE/kxaAcSfmMet4+vSZFGAWicsBxH6YvC8xysxS8Ka8pThfH5h9Cpgpe6JdkSdDZQOMM+9Bh622olLcNuisMNmfaQZbv5PAAo9i6ablDEwiRzoSQdtiQalurW3O0GUqz3M4vQNT+weo0IRdoGxAC4lt9oapYI4Ea4qsWSvsu2uKLjm3UAmCExCid/D7qZoXH00Qpj23mbfdKKP2DkJbi5HjVUv8BfhXFazw97Kbe2SFhn7zDh76nm8lhp8OdhvPHcX1bLubf7pmsX+UW4NCTw3lCzuThi/VuhMNzBRXTPhKH8qDBoT3dOvpwPN9mXQ6aSGOVpS1igV0CY9GODzmXYl4S70v9si4FWsf/xonanWVhPypgwGZx7MwU5Sml0tZHHAOYRz4HZlMRXe0ngu0s4KdarWB2DX8Nn3zLRi8OpP8/MKPCFMDhaDIuXIFqO25tJDPZxd9PKOaUtZskxVjKJgnHBQmwAAAAAAAADPJeyaNYGTzlq43rbROpdptwqTPjEg6PmMOJ/CvvXm4BZkz/fHLDtcMOO363N6TOOnk4eUVee+E/qZzWM2tasbSg7HnJd4rss/wloimTyMvDhXAIAT+YDOKGcC2wfeXvQ2B4rewGyrn+HIqB42g0XghJp4a3RP1r4RxiPqwUKjM6Eb8IW7XEJnJhGNA3nl8HtmnQPu5noFbyG2mx6nOwaBKaYe7DmdMfwfoIyaKsa1Gw6Nsgc+zzQ/TR4dk5EdiytLdhzJbpGpCfjCDtwjqkeVbhdGfsxD1qI3ITRT7z1RsolvCO+Pk+Q3HbQVYq+7QvvylxPzdvJmg/5uUWijVrrxxLh9t/t3nItSF+A0HPUeqf/LuRX0E94A3H6Fh/oq0vY8txm7o7LxyNEW01ubM2lbd45uYBlXgF7XC5mgJzazNNK2bFbkBksekvoEj53mP3961SpRH4rDAZT7KpAkQalHyP1zeBvJ31/OV/3zcM9cb6tg3eGupM79Tf8soCHxVAl756IGb4VjvtSpEn9HmY8QBeL/smQy0YNPBOIzH9uZb9ycrgifT23pRazNlyT8hpiAEELMRpPSin92YLW+jGmO31a1WS5j8b0g8N5VGkDZ9JXYe5PvRwiH9B73/QRqTDgcGRcP+X0EFEBkS2GrL60XIkTPGQc7EXoOYAy9EcxAeaUsmv1Gn8kwKQsJillD5DRQy6FJtnbayy6T+ZU7lecPyoNVpw6+e0Hc8sGrnvDCyJFvvUesmjb4AdICJRbrogMnOZLkIhRm6ri1A6fUcUIBJv2DBwuKjh5jT0WgpalBZR1MEuCjIJtjrX4mQwOwvKWWuPA2Bei6YwMgCCnRPSooLbid236GDJJMI11EhN1igHqMmWrmll3hveox4CwFB4maSsBewVYpJw2FMNxF5zJ+ATW832M64u29DNIOXsNFsEwenCCeKM8cdsOboH+POhR3ywTz9b8ZeiYvY6761aVr6XJ2UcoOjPINip4P7WLySmC/2BcLs/1SVbc/how/PBmK2fFsBtncb/yot7E0SsUA2N20TyNcXNrjQADqvbSuHemo17I+qkX6GU3QqYET6QZwTsBoEU6hvJbDMaw11FJP+3ul7LEJF4FlAf1diAjytwroic7JYbyktf/ukiaMnDncnuboGESoOqfpuZRlz8ZbeaTkVsyk4hyhe54QQfwfHGpzOJ4Tdh8iEcFedb2b9zmJTCzBqZs0yv9N4UNM0+dgBVMJuZFJPTHFxALZ/nwGo3jbgcWmJtdKblC4sdfnxraAWNijGWAmmVhqayCfmZsxKNO/P+LI3nQ4MwCyDAjbZd3uuEupD0t4zkiaAlKShA/XXLznigD9Vf0fm/+kE01x/hjCZcD2Awsrs78BQjdvKHGlBBawlNqOu6o4vqWtGOG70Y6pdDWLpyixGeUFBIBI2pqY41vXPzRuS9m3sFIXYSfkkg46ySBZHX/lTno3g2qV9ZETYaVOEVtdx4qw/CPCK6bzUlffbr/TQRWDvNR+3Um3U+lfsvvCEldW8+CZ/Pj2yhd9HlEKUySQWH47Q1WgZz10idbOWLyhHsp6yw7DI6S8hiQsF9HSKICrhDFu/GVfUWKRyWhCVda6OERd+rPdtRWOdoYUMzqFtVhYjXUyAPwtL+dDQ3g+FgUDX60rHziPeeDmrDqho0M2mRtRED5FKoX/DZ3KfijGFhgloHz8P8SSN0HZPDzjxpFBBu9WAeIfVxs/dGzMgWg7KqWa5V4/uPMfzReOlPd2v9rT6XwoY/8r9HD1o48nOgxVB6qBGPNkx+zxPJVyA0UULaO3PLltb+JB3XcUJmktP2wn9XRIA01aTiDJPyJhQUw7rxQrt2VcFzEgKQlazgVVhxHwBi+U/dBS0UW6c8+pjPFPU9mpHuLGtgOkORZnvC0vjGtonYFAQdKeAY34hZ+Kv5+AiCFGB4AfD8uheVN6lPNQ/BFARN26Kj8f1e5VVlcz1zq7AMsk/b/6mISZcGtcJIM9q3rDNms4H8SEdf2ZiIkkBqE4q4wjnLRBI/kW8WBOAoLHT4H4RXhjHg443zdhx7jzjc24cVciX9O/gd5+/m9idEbj4GvhKEIX6LmbCec+LbMC+8bB47riRZsVToldMgpT/2V94mKL47jGgXj9JdZOi2cdUpfkMkGAIzv0GHZhp++umqfjZcRMz/H0ZF60s8pZzeNOyYeeHzlB5L1pYaT9hl2SjY54yIefc29y7BTW8KBaIHnzzJ7fpoGuGYBJou5yM+piMcsa91TOwIH6JxsN872I2p6/jziysoPowqoj2v7jMmrf/9Lf05lVB9pCd3xHadbOKGOPAv26WtMRFWgxnqif9KKbcWcJnHdBeivqiKbE5DPWP1vEEHvoRF3v4UspdjQWxMSdhPY+OeAmIMka2XFIzoGY6Zcg2VzlWIV6qZHXc4KLWd2ILSCbDcekcevTcwRjJJTq6FtFHlg1D+pBssdBxNdX5HjhRC8OVv04g8QBv6SLyrik6eCxjv4EIthamFCg/+hTgdKPA3A2NLqEvFoQqljjddphvMoeW9nDVeuk58u4xghCoSJgczInH6fVtkvu7Y/7UwNCGRyirjcSfKfrHIm9R66yiDVEXkX608HkSh/lnJmWUEzML2w8OL0NGlv+fHGk2fQ2KcnLJELbYDsuyEqoh83EPa9EeCPFeonhzP/+kPjs1CdFOfNFNx5/FwLKXbs9gc8jYmHCYzH41rAscZAoHpRCf/jLtghdyRDQqCUwg3r6uRCsRt9dpA55tjX6E1PBOOkVJSK2UKf0FHaJ6GN7Sv55Lkd9h9qtfpy185+I+rz1911Eue7QdD+nMFFgPSS6C/LXqqt3C8aUn4yNEYWRCkLfeynRyJ4MokJJ1RoLIAkPJCSMaJ4uSZPASH0owW4aT0lJlsIFBvdjwThOWUo1udZIsUGxJc19rSeLymnmMvWl2g0UMmsvQYlX1kv577oD3LWsXtB27hHwupTi1fKWX3g5eiw2Sz+sjnjp+P7ucxu5Qj3uxS03UOBPjj302XEpU1+AXq5MlHE/lOV9jd3E5Mp8PHc4YbRGpazalQI166mUMxV3s+GnV+vQDh6uzGzQvW/JGBUi1xRBqVkoz3iXBR4485hQGI+fSfcvDDZ8DYNPcZSJ1beSZz5615kKBOr2s/NN3eXxq84CRGapOisDAsE1mbW8U0GuxuRjOztQkQ5/Qbbwgs0qEDpnLwq1+cGE6NQo3KahEJ9dM7eSdpYVoPhq2hMqRTnqUqBkHbd4L71z96s+xcXOloVhMOr8nQAol/alEwgqsQvTyS3c2DXGxPDWwj7dewMaJbSsxUJqBmKbchk1+bh88Dmw5v296BEvECOOGPerZygzJmXnMByZzyxGQdIBsVUGiOXNFfkV1jKqqiPAKiKXLYYWSZIoNAMs9vxQWfFROJv8wYlQrqlr27ApmzLSpNUiVyiYPZLJxUvsdnM2bQQLn+VY51sA7bDRzYvebz8OZ+AE1prQ5Y0u9kNXOaHH3gdQTvtDpACv33KV4/ZiX8y+KHaqhn/OkNUngJdoPd5tVL7j9zRjX4Kzjk8R89AQVoZZxSf+elV1DifuP44hiffCoNbiRQd1BoYKvD9QO1cutA8lGYEL8RthCV4b7n/lfAOp/u4veHalwKem/yWBKNS+BeureZdreWRt4lE3CX5W0L5203+xfTLe5EJ7ynAljbjC7aihaLWxVWHRHpBr9Iuoo/yna7/epTDbcphvsaRziv1aupvNwY+ZrK7a0b+tN3SDNoHrEhOE0It4WrPz5DPie3YPKwSkGqEwjmMoDmfHSzllyIyD/eqB3ntefRdKRk00wVahmF2+oN4MfasGN8AljuuVvU4PlPk6sPd5cNwQvgg5VPubH7Y7TnADF4d/nTXb7G4fGDx/wlFuWbKhB552Izu9/QALBRwxIJUeMlJpe9ZoO9WjipdIIOszhyV4LRJWMe0jYgRGReSo8qylE/g2AyFJBVyXBe0ldCgLJzv3xZ0thmeWFKf4qrRQnNJrKhFcPTk905oJmSYT2w2UvpKrkSK9sODfIg6cmLH70Rb2xbpYwT/XFSJAitPSNZGoKuLIvJQhIKN532NzH6sp62Pf/nep3xGup2/rclH0+PQFZZnDGtNN9w/jFyBppgSihi6JF7sGBkxqU5bJCxOZXZO7nAw+pNUIHaOWHOtcZRWStQduMK0lAf1gTvrVMgI17wbpNgAFPddos/WTgH2vAql8mVYo86u7c4vGfYxF9P+HerXfpSGcDHDg84U/pg+hAsL4K2oIuVKwZpwTG/ZQffEtuNQMWRuMahRV4Y393hZ2Y1UMAUvrfy1ZWTOdoeGK2x/Ub7zMafETPB3n5jBd/xqyRA2Uo9cNhsO5CXNcZFiFhCHMULS1LME2c+1KROUU9pczDZ7eloSiGkjlmqvkyrU8OxBdKx+hsjpDeBJ9LgInPxI9zEJzDQn5KV2gv6lVGan8JT9r9+um/jhDoNc1EqMBnrCeaJ0jfAY1Waql8RzF4yxl7b8WQtS0/L81df280PYVZmArNWCGYXGMQ2R56JtCh+WIAOsURaWL2ru+rjfabcVk5TETuQ1uPwHRhh8G2/IVchj9ihujbY30WqHZDKE2j40eTVLssqsMKjRQpbzgxIXp/Dg9FvlPQMQWP/m7W9scXcyxTXCKFFV4OYTnpH+jiCgBa/2j0UsHy2sVqvgDVu0g0TUBklggadc5eO3pdS16bz+Nof3MY68lpCAs2VXNhqlZ/qu90k3RJDpj881R8lvBHBguF4NicJbkVrOQp/DBR1lg9Byrmxhp9KEf0CygxvDR8yJ/cqYQZsPmgIGnuhFB3Cmx7KFp62tkUsW4EnZcZ6wTfjda9LCvNTfPpuFWVK3YyFFXZDeR/Cyo8zS8ImHXHSFa3lNo5YFcbt/tVBlTKpcQMq/ENBy+Evn6203T0FgW/XEhmxtr1gj+ttN0ME1BZdbywBIVTOVtkgoc9ksByUi4VhpgRr2SsWHqt6QQ9ARKlY5wgiVCfgXRRzd1SDS/JpiNKT4miBwaXrk+Sra8TMxzWHcTdQ7UoMZ+/6jHjkOAjh/RiRL21feSXObofagpFG6ofeQ7ouVKArGsxgtpQl/6xrx/YBmRa9KZyVcqLPjXCHJUts7sTvHNNy+66nSjDO51cnMV4U1XiPOplR/7OvXeJtUQPNYMDjiUY0ZMrHDRL/fa+WCBpI++qEaByK6gQ5V+BzI26S4lP+MkPkDF5uqiCovooUU6w2m6czqMVLp4aI+VfcYLX6VL1nUt9IZQZJ4jHuzjmXSBKayKZ5Dcx8ukdww7L9hC0zfYA9Y4nYRF/xbWxh8vlcwks1i8sLPQupQtx6eqyxGzxay+2LkzQUBwtKhfK08Oxn3BPl73Z/hNGsUuL+76xnxf+EZtjjRB/tQzbWv2ZM4d3CQw9SZreAb7MgzKfA9RMpqxDmL+jGgdoSCZgtXMpY4uvgfpSnVEJXT8hBOGC9wOd40Fm448fJfbhjlkQgp1qMswSnB5GCiMcVlZvwFY9MGWAcQY+1VVUzt68EvbMhy6ctLUNuD5pTxZblJXJGRhMcXoSOGhko6qeJR1jlI+LA2gev6KmzqaYv1Ivd76OXn1Yutz5aO9fWEbrGBsws78gZlMwfbBQmR3TxaXeduZdYsPhuExwCXEz7z0t+QAnO/jtkFKSVOvOZkFsiGVimMuciDkXvKEuISaFA2bq2vz9sx/yhQLfqe2YYaCG33zsdhTQMmjYmPxQE1ltVL5ntPR3q7qtGpUn2iBUJXdrSlpJ0+26zMm4wTn2mMHpq8l8X+sMGTc3cRwlN4zve9ywXHvilgoP3pK63LRjWwYTl3ketTv/6QiGEhg5d0eMn9gACks/wbAZBtI3Gb8inUnRLRvexusqcAGD6kclr3wMvTh+6W3w8oaj/hzpVHjI44e4Rv62T3TCb+E6LE5ohFRzGE/bfPdxMAQiZZZmeSjBS5xpJWngNugIP5e45UF9h9rSJHXiAafGlAfG65O6eJzTewcW7WK/dEB+9ra1s4PwgXVJxvYL46FDENMyrpiGeA1j6oF4sgizS0+QxwkF+N3sumLm9CEFzYivcI+/4HEsoW1TjGjsNoGCrGQBnX6o8KA7llT1hOXmKF9TvCtKMLVJPocNfSj59FTteJQx8p3r9+VeRnR19efFkN8Ar1nih5seXzdSDAE5n0s24Wy5FcshVDCF7bFbtRvx+tjgafHbx+ULYwqOkYeWb+UhPMMpggo5B1IzouMBeWEhj3UCDMvkjSZNP5alJCO+3XUZTYvchldW2xYGgErJliIr8zR/TXKnRG+hnt4HVq2LmpZFBV5buktB3XY0hPqg/G1QoTuLxLm8VjAQPk2inYZwT4fVHlehhpvjZBQkpcmHs1TjZdbVA9zYZuR3G3h+dsFmfi8eGnZCrYlHWzV8b4z23H9XWCvt7xLlb6PmGHy317NXg/LqfwPB8XNfryQydDTUiNocrjFQfOS2yI4y6/9QRJL63mYe7nFW8q2+VrlXEMfUVjuBPQzv/95KbT+LHCNIzxD1Z0G1qqIK+2P+0xqdoeIw3Lqm4F/bCVWR+LYVoHwUv/bqNle0Mz6oJZQLYfCX5clpn4y3Uj7+tBSQsVjmmEvje4KtSg+t3ZIdSu5+DIZqEfOniRUfczLq+3eFl1ewfMgiGCqoCtiu0wzT1KKSU6pJz7/zEboPxoW8xKdZeqU6bmXddzGSoIlOdLvggonIoGcvNtZf2wBYqFX9XwE4Ne9ZOP8hwo1gDIaEhSbyDi/rZCj9hsw6O/t/Lh0bm8IFXJuqoiuaHn9WqQLcAtqVUVZwRJmaedc6Rq7oFTGQBK4EphxcyueI7qUQ7m7ZsRkLptvJ2sjP0MLjy6LANJVT4atX8g5wDqnAZS/n+r5Pt64T7hLhc7PWU4IyU0ShrQezVAzl7FCyD5Lt9PfVlyj+6+E1jRSur166WWjTVrps777Fx/sn8QxGP69y8d3Z0fiXc6o7hCXCBeYTAmbm0+yLUvoJn9uXOZuPMqeRAVrWqE2FsEipMl0e0mJF/EJaRynX+pWYVK5P9A1z+QGWUZiCY5f879bJa/yoHm2vZYowBwx13TIjz58mvj4mbs1eZvYDWeZpjVUZeCtY8shk6eLpUUlgzinG6M3wOXRt7hCeohxF+AqIkuUplAvT02TwssJHMrG1nvn09ZFU+JaQvtsKKusi+BBlDSsKjmd+S96rvLAY9uU3mY0hCpExaCDlTvaAl4jkmHYO77XF47E9NcQaVbLjPpzzE+Sgx8sokHZJIRAyWRRt61bKowmZfBGUG4dAn0FWJuSqDpiY6sZY/05G5wmFPqs0urY8zI9kqH1ancaEU0oc50EToJfa9ni8/EgOg/ZWOKTrc4BatUHYGPZlaT5Afa/YIGW0wVaWKc+CP5RsOG5TVw9RO+4KIon0hw1uzkzw1uNEr/ACoov7qrZ2Gojs3N1sPisZBvbywPIrT6x+BSqTtwYJ3EXlz7xjOh9+Havas0KyE1OK2aikt/IDLEl2lOjoqhl/5XCKACQKE7zXFDMWLozK4YyBmnOF5GjO3PRA22kSaWwvKJ8LXLXJQlH3paVUPuBd4ObtXU13ItQGXXMa24dIaQM9RiGFvZd5joVEXDRdpGkZI7X6TP2PCfVMgnAzbzLREQhiCC+0jZhvvgVyVKapmQA8QdfuMi3waS5CQNiy/YIgpwhIgDM6D0nYsopCsqhL5CvjNFyFLFnwM8gSMvNcPMMpC/RsXjKkvVfkJNKMAGxdo6PLcOMPFsVTq5haHf+cwvZwa0/DqTm/E0qr8Uge2zZHO+XluUGBII49Y8DRu9487uC07KRZd58TA3hDFIt7mjt5MCwLPiy1+8yUsoLIht/iLPz0nTGX/yx8Zg89jlPPmdDHU4CZxWKxg5ZyvqRV4MeMXJLVV+SiGE+tqoprMDipCELRbrupHLEU5pzqXyuBlJOSYKfrIuSk7BpGTqXy4pA2VzEAX6IPF3ual2CEALnZji2DdtYH83hgWk5PDDN4yzBj7Ur4tnvEe8h/xXSDIvoQt2IDx0u7emmYJdjoA24msrv5CEjfNBhLebI3RroyofIAe9mrVrN2/x6JjeVpwbOrW5EI0jRC/kAmE6ARsN5jxOsTODrQ28NvzPJ0APZlsbbj/XlTPNd9VqGlZISQ0mJX9QJANBF1ZZJOerK3995LM2/dRWlXmlwsbh36VlPQXFpx8vH7vbimeAkhpvDuyHLpEP/HdnvrtARHlO+POllOHvDwPztLYC61Q251ene4LbgidvvLbhPwDbCAroJfOoLqKJ+evusueqJ2tzkBt2Wcgzxj1g/8T+IreCi9sTvWUbdEhT28Z2HOhN17YPtnn0+Ghz4Yo76jknooHForYC+jFJJXS8ssJ/Ee6nRQdM3yZzUpuaTLvixb/RcFVV48f9w1+jnrs5ZcwCrFnEaX9K+/FCjkVpD+V7ot7rQtPE9ytRwTxFrpGc4Qoh1lh4iBQ5+dBZU5NUp4Gy7c3eGcu6YjgybbxXXrsvUktWYzik9zlibIE5/OtSRo3jI81+/Y4jTK9FbMgwz5+GEK/IVRNORtXYCQFFBIsbK2/QX+VFjRpLdUrV4AZS7QV4bY42SOncT/7W7XFZpBxYpCOiqaYRYZiEw0PKh9GgGK+9JW7htH+ca2jt/3cSj5tQu4K5spJZABQ7ObSjPQdrhFc3qvgTVV/CC/F0QZOR353zsXCBGIysk0XjKB7yeQU8pSl1ktMkrGjsh5VpqYIs9Fsk3N8dUSPj09vhz3/uHxIiQW9CX9Qu3bTg+Q0cknQZ7zXr1G7b1X91NIXqp9THnHbnhGK4Sf1mnWo9UUOsPGP4CcmiiMzPQC1Wc+hJStfYAFyegRMhPSpKVFwyMh2HBaxTBSmeF+GpRXdLZG9XNoxzZBtSZtVvDBw2sTG+QbK0pAed0HJcEaTgdHtyH+BQJFD73jFlj98WXdp1ClMHP6+b4J/Dp94w8z1FIWP9pr2lHBk7/SjPA2ZSOPlY2z8xJkvQtRKROulXQhWXdg+X7xku2AcyMivOqYCvw8UmC1hDZiu1xzX3dGn/q4CBO2L9x5hkGFW4eJqNibAdt62uiNLGcHAeV7tuIjmHmRQhAF4somCnzc5y935tMoDPCFnKptVvLZIWto1Sgrna0azQ1x9pFvGJlZkyrOJk6Q7y9U3ga+mWYUzQRJQA6vQYV3IAS+l0G5GO6SKWQ12qoAK6GnS+Amfk4FCHfg/3hOmV2WFtMEJmhp6H+fAjQ7INaMNyNdDUpOMRxUiGR/7UYJHeZXbnGkguOxCdVjKBXzg9KtchE1wMNMjQdjzhZoRCDFFHXwFHTWiikB/gjVpzxNRKnMtwanRV192Dfsr557Lhupiw/MXNlSWaT2onBu8dG1evhmKmjjwOvBO2aB2IoHKqpJWrfhw6aW2dTgUKFzQdasIyoMpl4r5SHsE2JOdF5dxfH4y5QAfLbuaGk5GBMSxGRkh6qyZlmPRopJHXglCLXCEBUtfe3CgjgNcIO2YvLFmJzZ1qbx6MpyjDzdtHlYPnc/ZT84/m9SyAD9X6LMwPCHF1SQGs77OdiXkB3nAyQIop+PJ0M4IqU0JCH2HfbjLopkLmph5RGI/48B41iv36V62BhmkuTfM7hqEOuIJe6zcDE08HmT9z6JXpD24CJqaQQjFzQu9M1OreqrNrPY9XICJ3fdztnZ8FNIXAIrp9m0b/e9Mo8S1e1EaRS5BX9w1jMzcNgauDbrDJta7oDMCZxIlbuzz6JOq9HOBRPjj0Orgh5Hjs32l+0i3ZOjQgFyAa5BzdaKwQ9y9YH7TH6l412GR7DE2vHkjA1B3gS9OD0wKW9pkIfkX7wPKLsJ6PuLGydEGeyLHMOtxuFFCrl4NAkhvBhOPEkGpKBDpypo8XgiLxTwmP5qXtXSy4u6ni22dzPDLARPgfLWTa431lEiDkSCZvJRym24NegBjTienIZUnKwmActbnnSSDx76SoVJUE2l0T9axoJWhB+lqwiBsVVQlwNuNSYXLYsrIAAAUcW9Io9TvgggkN2hP2hi8+nUdCdU1JxZNgfe2g0113AJTDb9U92VLJkcvzXfvl8jvYZeagJalkp+GhPH5mp1ipH4jZbm2hNE1uPlMm4hfJAhjG62/uiAXXwinZ38i/9fQbUI+T0KX1skUHqTDcf3APIHe410XcX28jcq/JaYhvXUpNI7YOuM0NWblWHhotLhGEmVhItsb72Qm/xIatpjY37I48eBrOpnnHdYXZ/2kviKDop2inOZmFy38GHFHa6rKAfV1PtL+0J9Eab37jBt1NQw4eAijwZ6qNNEPMJ7rVmxF0vRhGMy9/cCfW1LPvRfx0aUcg4EEmXYgODCVXTNgzC8Z4U5dqtRAkx2blIDsGfw1W3+sGIzH1AdUaXfRTJVIi6gza/ITv/VWlhi3wxs9kT7cXTcPbRk0XJUp33VKIk5uHGTQaadIe59PRYF3uUSYZ/+VTfuWJYsvygeao8wJEwdo22nubt0rX4JWF8sKpcb1Gc4PsOPh33NvGJlL+ABZl7AsyZIj5hmdNiDbcurxuBAEi9vOaYnflsnZfyppUVw6J2hw1lz6BhE8aLSe7jB6h62UEhD8aGPcxm226DXUy0znzpSmNvGSdozharGfTqEdx2EtVK2PQUhOO0AV/CKQqmrJFMVLdmmmjUzTrfNbP1DNq/uXP+UZWrfPwFwDL7LDXPXK5xdEyQD/tCavVVmN/KzE0nb+2k8p17gW2Q+/blammJv7H2rv4trBlk4EFW1X4NlwFfQD6affk1v0/3rK74IM4nmqwOY/Fek3+a3b8roWWcVYf3pzJAiCKuxYpuHI9aIo6T8YTPweqW0G6HXh0DUZteh0Q2pjDOF7XQwzbVdYXhVClz/peZiU2B3iYHPaojTGqH15VMnxjB67TrwPWUvrmo4j7zWQjkOhnmu1uIEUXi0itCpHqVm9qi1aCrlXoz3NuQLOgmGd02IF/mp0AqGo2v5A4zl1Ly8Qp8GAAsCH6F+2zhiVYmVeXuln4TbAt7bC8m6oFpmIZbi7PTkIENacZ8Far4K2YyK64nOwPfGtenz8FVQ+QnIpp6AFWNvNlO5nqV8VW9fSBzjVpFPfOufv/VuUIl/PAKaP6qF+bygI5aL1FDjbX8AiRlj6YPaz9DL+u3qj/s/J2eDUiF2Rmiv8s6GBxpX0G6M1GEMmxL0F2UqwVGT+7Id9KIIhd/e34AAAAAAAAAAAAAAAAAAAAXH+pk5L0optknAUYjksbECKjwPd8i6arRd3pwc7U4Gknbl/1s8MjFwWY1k9zzhmvXHtx5qJE3mAqLXQj5Pkxa2ZKpTAz/clDhhGW4VrwIjSaUFpbu+1yL0m+k3OVmeSnPyXRqnv9JgoH+WzeDgmtMT0WD9zdFzidfUpOaRPbRfALAXVOONUnbfwJEDvFanmKJYxALuTUbEyPPltVjHzRV4fxCZm7Txzj/cuRfGOupTo1X0basMFuu0M/K+uuLeJhslR6MTveJMjYbWr6Sr2Trpy09D/J+7/+uGW84bjOjfAXgm/ab8zgPexfb+YfKSRcRGi4/RhJpfeCW6f1+vLL2W9wgnxOslooYC/runvDxhqxkArQ+tbEPHrJheHcqhr6wHjW7aSDl1BxlDTd6ouRhcOz2WgzYmm4mXRNaHKfHHkapdrG4tOkFK3E8AhZX63F8ZHqYsydUCwzyUCowpSUY4AAAAAAAAAF/0OcmAvQomHkyTtRP28L0cuCCiyijfHXKmmtidDyU/+92h8xYVa/0rA681gKKzX4XaFVy2iZJyafuVnBHJygrjGBcoX5Bn4n6TSTNhQVRVT06HXf/nBoXVpMJXfBImY08/L8qy2BtJQP/Hf8r93kl7nH3/U17nCFbhtbRGdAyLQHO3kL6JPhBeyfFJdB9cZEmNVu7AHFO/1qKVDBHRiNMvex1ZVRMAkPtwYM561Qssqa7i2v6UAQBkrf9bJi8DpH5/cMldOyMwppmh2E7ZdLKCD7nYKOfIP/S2QC9OaqUKxUXSO6WShd8/pRQ3p5bm5aKJ/OkEysWhmi5y48fxvS1c3uIBTzRl1qNLovS8prRPp0L6gSQx2fny8ZE1DLWJX2yx3UrKuj0avpbC+7DKJLvrAoC0Kjs28XG84o96j4URXh9htWUN2KcGE5dL9QZSjiulrnxxQv2ZA3x3Zw1mLKsclafVl8QpS+9d8dsiKygAAdg22qtFMRqczkYAAACdifXjqzw1m15EdYsLd/j2383hRCoER7mB/Ysgq015UrziKOpnddC47aMiNen+ZztJdShsNFjlHkEYPavhIeyeXuFtlIe6mIP4nNuU2l5jm/zDnS4hGfEKJH4/eKl3G9CbEN3vSudroyuyHQAoJwcfQX047avjtZa+8cLnkpNOl1ooaTGQbyqtQ7qh6tOxpgudJ1ZFlib/Bn1GubcyvsyW128o1SzZ1pu5P6jkFaezQo8yF55SQIBc0jwFTM3S84Q/HYPRvyeM7Hz1bYfYYWWHcub18LZ7p9vlIA8UMKRIniiA+CmwIvsSsZTkxGPGW2BN1XtxgEceBpU2E2YauJHocENUVoLVf5ZT3ROfqPEKylYK/uEwXyhVZvDzACvQiheXsoqEsNDuyb4OUdApDvlp1SydG6L4GB8g/sQV/sby2BLhPKm9E8z7XVGm62DatxY+gST0wwD/Rvj7RRPIjJopQ2q2kuC7+NZNbbkuyFHHmLVbBUyMu/wJwvKrOhhWzkwpDN8I25ThisYTIpDRyVHmwHG2DNGe1NO+aTPLrGrfvUvavbDE7ohxm+NpEYplkV2rlBxmtLpx/3dFrip2V7+Fu7fxcFnNoYfKtfPQRDqrvMQ74kqzH9JCsJRsl/HbndNti6utEcRRHlt1ySloIicjPwoors5t7WqKvQHLu8kBmk2asEpLni5z+aO8lAjB/wO5grx9AMYskjWo6CvePNYkhFULvgaaFhOCNx0P5qIG0gPvFZ8FK6RWQNIfZz1kgbgCQC5iPuAwFPaqRQE3HCaJLti1YdnyxQFtP42b9Ox8DDTWV0PrVxtITWieQitYvda3L8LXoJKj0tc6bwupf9l6eJGNsXIYoCWhnIaKpl8feyP+O7m+wliIky4jgkp5vhkp06lC46IMUsgsVXnbKLEE3iIttxa71hu3njpMjVxk5JH1DTLF1kECrde1tJhvpoylzmfurslrEioLm1KNANNlzBlcohbzMxA69ZKRRp51p0jFun6qDeSqKMEdLImFu5tcIGGl0/mrLzLZ5nVKWtdS3ho22anRgkpRxV6us3qXRdD6ybnntOADS2alAGaBZn7hBkhG3vBF02Dsl6p/zewwcTONTmfMk4UodNqU2LJs21ysWFQkPj0+Xah7DCXsRhP/ZpKnpwBEJOZnAcwRKj+zleg6Y7xxe6BCpK6GVo7rp3ayiEDtO4NCRHl2kVL4nsplJopHDN+GwB42H8mNGHjU1dxifLevFckFWwVKtpDvKutzQyGX3maX2WoA2EV3m/v01mIdBfe//GV//jQKmqqy5C6e42VlGIdzru2ffsgdibOxIybFjEDF+vFCW43KJKkfrzZ1Il8buRvs8gBSn7ckbU/KZTCEYTjjYY+VtBE4ISSxOpQZg9yxPXvZsN/YNsK0j89aV8dE/7kWJ+rR87BpNj1t5T3E4JsPMJL2PL8lbr7aZPvVAyE/lL2EKw9pdtF9Im7bg84KpWQPEn4DyIqg6cdJYDcbp2ni/SLyeLRrSq550EkmBd97eqVdXSXEYg1/OkJlQog2qkLe1+xMpneUuY21X+Lr/cB2gUYu7KysOZ0Tkw2REeugfnuEvniHOYK+6/fDLgdw9GRFqxdbBhnpxiNtz+7Tg8MxuX1MnmdZc6j6mwW0s9MEUTECX3OCypBTok7DETzS4JyW724XwFmEAX1smUATaNQKZLamzjmhmr6MmOYynUGqwxqggaRa8/BYA8y9lLueOuuWInN2S4MT/UH6yAjuUVeugnaMC+QSRSsnWy2qfG/EYmghBLSERK36aIiK/wO8mgVRQhYbjWSaR7GYXryo4CIFv1NDwNf3nbLaW23/uBhjjKFRNjDrkpcic4ih7QDUc0K7tjqpJxPwToUu18Ieut7ffC2yC+Cf6LQc8vj5sRAcgdSOsZ0auFDFKTag9/zxBizglSrS6qjMSWxe8WLAMK7uW5ETlgF0u14Hs+FhdLChEocLakalWE1xIJt8n3kS2fd4LzzqQVQRK777mp8l1jbJX5CG8rzM2WLIGbsBFjNVa9h8nG+DM+MAScFwS122Q5lZ6K2B+XUS0E7FRxXhAhYHCjvnIpr6MkRMrBAeSc+0FkiVn8pxOhTJdlEQBGFiu5yFK/nzPTiX1f/ockddtmNErsRr2IQVcPkJVl287h7Nasd5uS3oFPKZUq6284O/+fEBRwZvj5XQrnfumdYlhrPgt1YDcurbjmAaOPv0vas5js0AmSE3S06i9XFKUS6vBmFnGJ3q/Gqz11ZSg9GYklSNEVY4ZVFsudOc0LRVYhEpYOH8uaRpjR43k8DQmYl8txAFUhHmS+x/FV0nHBuRelIVP0Oin4lQxS7hgZEiFfl4k2ijh99i05ybELMWPxP6JAmr+NatndL+1SOEDTkVIMeP3EBjDz51Im3+NJOOoF+5PUo1A9tHHXtt9pkGfyRGPF1SdxIY8A63bBlJKEOirIbTppsipQxgbslN6kx6QmMfDMxosb+UmuQHGmhMN8ABLrozAYEVqZCJ0vlRK1ZU/frEUKizI/kPlOJC51gplIJka0GR3Pn3iRZGZIB/1hQvYfEqSuxGJVQDvYr/7COLsLa1V9jK6TlgW3XZvTaxPpJUG8CHAjTLKEfzYYuH9gCXgl6pgGvRkR5DTzkebXtvHpQ8YWEUVScYxBg5wBvK+hjp1sDjpQYvq/OWgOHi1XpLIql2LRaG01UAfXSwsvFRenUxmAoFjoOouu7lpT4DSZLqlTVsQXN+B8e2tIKi614BgFRysmPnFSFBMSXirSJ56ZpfZ4kf1qLfVobuBKRuNQ7p3bLncq6pyU5ZYmJdLcKFgcDiQcAMUd36+uWjoSx4M9poNwgMGOHY75uUPO9nTMou/lU1GNxiwARqq8vNkl4+u3ORqz8VGIctPxkq15G2ZpupOh3x8115v+LLEH/WupNdLqG/vbBjSk0gsG12oauR52M0EY8DmyXbzJIcrjV1ZXfs+Jj7uDN8ihLuqbdXyRbw3axksANomQIedYg2+zcAg2eadUInNJGhNLi8y2gGTVtOBHESTpe/eoPFMB29m5db6lPMt5ofECSc29JW6+iT98nmyPUg5G+rzMj+j7XWablJeaYjFEDlV4KaPK4Co+oW9glWmahqegfc8N62nSHYriJ9AcY4Z2Sq1uPpltdfQe1JrQ3nEabS0wAHNCkWnkDKmEz/3lAtl4Iq1cVLfQRWNW8k6DpdXgYaxiEn5yh15ZYgcQxK+rMM4c1htzqSGh/GIvYw20jTm8ChOA3BVMkTcf2VLHfZ+arCaDLFBnB3PhpL4TQgND8rT0UtMLBCZinQkBU5GFJeeHK/ZXvm3nVFICvIu92zyZLAm9wwzRR2XKwlHO+KHmwjTuUbMSXfA25BGOB8K0dJO21smo7uNM73CrX6kY996MNERHnNS4QEta9mveJrSJWQR7mZFb0aQD4KDn5JRhDmm26tx//AhnFoNrE6EcXMiz7vBRlPE9pX9IcGBlejhtT+EveLG08d2dzTR1P7eyt1/+MH/jVSDYj1GAiB3x2Y+uqUedAEx8qH8+aytxPmrQ2pzoxN61A7GPRH0DnhURIw2dvKjKZfzaNMo7ADNS+p6/1eKDkgm0j1UVx1E6D0jKpWYlSi1YVIpIPAL020tETKV6r2yMBV+fUpyf4JoggK03/4jLYRDSZKIWRrMt5OiTVVTm9EjKZvz3XRJ2m6qMSX3QNPMY/Dpq/76lO9diTpgyS42n+nRQV4WFDg904YWIOglrSQ37QUocYA+xVxw7issbl2Pf+Nt8RSZsbVBgE5fv0J8rdnwjkvwGgLFItndhHCDN5KVRjsYoIMcBcSAmNwHVN0SKoeWvoRAtRz22G8ZQulg4XCTxkw5SuooH56KReNfrHCVCfooKf9U0yH+VkyrnAV28Xdp+edNLG2cXDYNYXLbwY0FkWe74dW2QxDiw166kcEif1OkMCEARVgG1v9snoEK53Ai+PDYtIWymIfs996pHpxRhVL+ksINd70IrzIElrDQyFR+T9Imk85ZGDSml58Pom3N7WZC6Fw0aaBs4sDSjzyfayPLnsvjYLd0KsiFN7c3zHJqjtPOOZcEnrR0Jb4lYOhtPdAsTKZaCOYKgtdXKBGFTXkLDzARs5+0YiAKZX/5ov6fGt6gtDI4WjiTPRONJ1LngVciT8EXhJB7Se/gXcQKEoyGX5x9Q/bOlB2DDSoFHyCn3ptj4rUEbfC/edRiCA6ipgv5NSAzCQsvw2em+/5Q5WvM/8sehS37dvxPgARFF8zTK8LHCFfddetaN7YlAmHEqrRD9KIlM2PgKr20ZFllFq5b/w44ysyMvFx00RHbIE3wg3xA1dFjX3iMf3ef6vHlnufOb1oOvrTD+gI/AQjOp9OPPd93CfIQQyAl884XSGixDT/uqWPn/7GFxjc4Cn+NtNaAQOlwFk+whESDAhtBr5E2FT8cRrpLtjCmr6rzL0CsuynuTF/rDizh1Uu4HmOr/J0EGjbrk8csWSU6+0zT9OKxGmX6g2W7+yLNTzEGAbN9D+Vr4XbxL3lXJ51g/Fk66J/SOXusPeEYc508CvuKi3a6z//pEMaOlqU9j9nvutrbNMMFnwsyjusvEWKVljpJCnOAWrtodEMONy7dx78VrczEx74tGRaHtQnL2SrpI4FRMeAx+Fp5wMkZkFFFwvvRk3yS9fnxTTsXBMBWhnXggkmVA0ebtenDgmJixhL+Db74QLArjUJFsn/F0gl06uaWeqgVxCBZHLTMUv0UxK6TfCYdzpB5ozn9ya7rlMkSWoKTznKTETd/55tNx+9HY/HzilUoxAehyQL9BiZ/Oe3ZWOP4RZBhQ9hw3eAO5WeVcSziU8fvShJStLlgQFhII0fPPJCwLUK+21Zsdkmf17N0auWPiE2huaY70rSeHXWA8YvDPPCGShnlNDYvvJrTaBqMN3Zu6Hk2I4lkoADOyps7MuEefF9A96YIZg2CQhgIbEGev59+KVlwMjfj+wm68ypt32wL7tR87ItG+YHmCyZHDzIqiMnsJ1jtiwLnSACJpMYuboco3msSGi0Xg1ZFH8sI4m3JClmkju3j6a2u338I10MMUQPAWIVHU8Zbu6FpM34eJzJfgKoRkeXwl+V2G6kqJVfcU04Ldh3GeIKzi4+YYYR//WR5g3bl4C0r2AEtRNT5nApFMT255JxJTzMf6/esspKRSikCa6BkWvV1z6Z/bK9YKNvM+QP9HvtHKSaDwfJqx0Qy1vKCGR4YJomZ/AsLep2adnSXVCsHnrUvyQrvjmFI7BeHKcpNxPtxEndsJPqSfcDIeha5EeLvGtwZ5Zky1UM1+FEcS8dTN/H1AJd6pIqcTOFQ9h8XdAnb77zcKo0pbKSHIaN3o9IZ8HktYo+fNwIqepnRuwKpIC3RLbirQUmYax4V57C3gFkmupBphljQ96cgbEwGL+M1NqEhNATSL4FW/LkSc5xR/SoSaKPbg9unkw6mmdJZ9O8oOh9zxs8o16mbRUMuKzYqE+IOaAdTfuR0NquzQ/yBKonBv3bouwWMOOR3p3c5KsxlJODBycRePjtgrCucrf6eFJl6kLNKYQwsoMic1wXG6ua+FX/20fpal/LLbOnRMNXhsSmQgbOUb5nbl6Gn97BIZq8LS5HyfFt3eGaTVcQ56E978XJX6NVjlDTXowMRiLHHjNpLbOT2Cw2UKEhtY89uwe296rbvsFkEGnznpF2eZ+YMg3qFeW7oHLUlF6Qv/lWxr78138h8KCVQmL0mhAGW2CEr0rZASo0cQlaMsSK05+vlOk05IrBAaPHsg0etJdSZ2a9Yeq+Y+8zZZ13AShk01dWqcdkMKTMTVjPa4YfzM9JY5yNHy+0Ry/oIOWL24TeFEGE4Ecmoao9MV6Wi5O2mZqEZ/RWF/C5qlhGiirTRvW09Vl7iWHthBrAJbdKouZK+kJIDuHx767HQHKELzuJUypv7GJH+kbJWRspik9LqsuLW7x2AKjHN4mYEdnPtd9B7B/2MbknPHmxE6c9H2s5AH0uUY3gQFpa+5KkYuppJueKclSfwLmjm+H0rx1/yvQ+r4A43LAzD037SjK8vG+ylYxmqamZDF9pkVKK9qT5DHQUFDiTOdBwsjgJQBrfqasBqe/C2ESHZPO+GHILqP7yF6N3uwSd0xqWRQe+LcvXYqPx3xRi2FPbCMwVooTEvwh+4GP9RgxjHDogQYPz3/RjXIEvhORaGjbVqhbhdtYrNzCFVCDtdGskqVYtiNEPEd8mMUTuoDeTOKzotIo9HoKGCV4/bI38EfRQLXlu5kFj3emErSkPb5aF6F530D59xeox/5A0kuMReFNuacBHDE/2OTpfTHTSR/5BayxERyMngGl/62AgUPpjYaJW6LP+zB4O6Pg4GOTDRCKs4kzZpBuLx+udzqcBG2DfQZDrmzAo7MTGEsSt4o8XIELIkjF5EViUW50mmTkUqjLHRAN1aMsLnogVSRSy6G7HlLbpKDTn1uCK7ROGSVJSlBVEJybi/2Cp8EibzrHiPCm5Eg07NF6tdOAU3M3JCj332/aXtPk6ca3ZEwKNbDCT3h5iJQGl/uA9GV5JDLcHH/oqzWhK5hXjPngS6Yd7EzQnjrSLLxg9cDS0KuZEJkNNE1kNi1zJiHUR+hgZ6Bju3gjanHa/PplFyxiWFC+jzDmVWsl2FQCQ3Q2hflai4/qzF0eQKoM0vkunYGkjd8hWdGd6qKHIpcKiKoHboNsN1UjvQuCBMEn9D7fP9ywt4KXX3PrzszJ4mchcSoT2loW0Y3/mzvpOBSsaU0+fFA/VlNzuBI8exR0eZfZzfDqR8xRXPyeRxZrsK07yg52CkVip4cFC/dHLE6YaSsgO7CtYZzPS3m0Um0G61u23SpPTYaleoeQBMH4SlcA3REW53622kY8/sKGnBA77UZKcsPprQhvmLKw2V7epjCM/erDNHXFvnbx4EdZBDyaHMkj+nYcsM7lfX8bzpqci+wdCFDRv+08BOmNoL1OoIn2gkcR10imTvbhviujk92pKHe7GQI0jKSF/QjxvMuWp9opCzE4De4H1LBDr/v9vLapn270whBN+jBedtO908GcUFJOX2+ZPLoZuyK3YCdSwbXrajh9Z2sJDo5y9xu1AwXq2jQLn3j9GHU3PYFLMGZO5r5gX8bqk8vb13gpeXKTx7SDB5K8++KiUbam5quaJfj+IgyybQq6aFXMb5HNBC6Pc6rkOExNctioyh6k4+m21Zw1Dq16lA3rTwXpT7vnST9QCKID0JOJh9wmD6GmczXxc67DY/Slgwx0OCogPXCJyHFNI0+sCehfEaBvkmqG3MUCKNXoDY445OdInE6E0XvozN1oGPyYqaChQV9xLPyqktLaYZgL2c9zevUjpkY5SoXYjKF2z7bRHvl4Vtyb9ponJ/8S2nVPNzG4KErI5RunxKUYVG69KDzUNuTdyC85JcA27KDWMCpKYxGzircy9HAnOQNH8G28Y8ZMlhvP1eqsQcOXzD6VxqDjqqT+UGzlzJ9A67gBiKzsZTtwF/mnJ3VEmztsGs5wRWunf32/kwHM16WiZLvmEJDmYq871ok9+3H/CMHV4WLfB2mWq+CSh3Cn1037zU2p2hF+o5dfUMIqdXB9JRZTzFiC71oso6JCA+x0PpgWwRyTIs+k9Tc14AY+wuS27I+lTQvpfsZ7PvVugimMhnWY1v+gEdvvIhwHDnz7dfFM0YsFkj7PEreyGyg/cH8zX83WQjVx8DEIcMCZ1glJYkzTrTcaMN1zr+ITEDeT/dQo6zslyPnfNrwk6GTI5/YyHCYxxXFoTZmgwqJb3J8HDJnUgFIqPRIo1QFzBzHGA1xRrQ8qXyeaU8Q7g7pVxqGrUIFFhfK+GgoVzx7AqCgkRNOr1LsKYjkF3Jzs+EQj5JWbRMOTUGGqqCPxFaoQ50Ihpudx3waeSjr9l9f0BUGaiQKu++bNWR6K6k++UobJVV2etJsyFU+CZVOb+/Qz5G+D8lZX9Q9tqSMA+AUz9c+MDE4XFABm+r51wHi1jBObaUeQVWc0P9U0LJ5C7ruBM+n1rXZnYs7oqsumwkyXeDr03sLY8XXBzgzm6vx6kOyRrzH6kwfIxCgFr4qvdlk/2Haq9a7P47tBfsxu7koL5m6xzFoDiTo5MosY4LdRUQ4rOnFRUB///IXU2bmNoH5i1Rn5QPrw+V6eF8dd3IthrjvH+mqxMx0HcF43BS9UoHmm+ZznOS9sDF5EIYKcdxzkoI65hnG8+EYT5cvP5F0KO4SE0kzXkENydER6hlvWm9E6qGPzHBWlQ8InEiKgoHCqj9GKxkFMm0BP/xubYd8hEpMnulg1roxPtimD5vdGR7lREhYErk4zXm2REHsEeAAQjqoWdibTE9BhOKIx34kbGg0pj9/6z1qE+/O9o4MnkR8J1/5GGZO/Uau2PVAl97UbPZgrWqiAF2XRPyyJcxKg8lsmzj0rS8x9p4Iq5PXKXOlVSAUNSW7zO/VnvFvT7W4RsTEvYRilxARR+Gm6dfiEsrjEm3SoqxUihW3P9CsQshCInYlYQGRClaSSao9t2nty90+h/p4QrmNdWWT4gwLovgmtEoBMduLwj+yf5G1f8cJMxwMGwzvefy4TGLB73n8R2qlcpQmioxwAP3sje+zUYVZm0rRskHx+DlCacdc1e4Fs+/DZJnGGEwdz9QwzCuwHGhZcbY9j1r1eK9WLu2peFROwosxBTZSsXpoWpdABX+R3op71CNKjxWjOJCSCQj+csgoVlcwQ2mxkwftucMjgOoQfP+Y9YS0PrPjCeLaeBmbPOmrS3Jdqd7M5sLs8TOPn0aT3UAK2DOWLeMeirEvB8uC6NfarZcLT74FUeVHbDPuOcwe17Og52fpr7T6GT+AyLGeUXMD3OeXwsMuzLgNlpAtrezU2MMOUnnPaFZnmPGzBwRi0YYUnjQukrychMLmwLh4wynpPzLBPio/8RikKZph2elHpViWSuK0753EyIOHeZ8DEVLuDkR1KhnbB5p/SQK4zjPoKI5/DaPqdlERwfJGckqejs3L0hZAgrpsO8Bl09RKbpBVJ0xPgl8KqW96QVpsJ6WitTRJvkW3E8kCPMYIYjlHhuMsGmNBbrjWAUOuovVHTZEUzmE+3Hh5f3nm9e8Y8Vl/sP8wJd507VN8N8KDHMjg+9qEKQzawTuicC0J2anB0fccJSVqaMlZxXj9JyLVD32BtfO5G0M57soNVU4RZRMUNw4c9VhUis9z18zPuMJP8sRhYYMC46Z3Ne1UsSvjhbih56RJZU2PwzUv5C6l7mkksGKCh4NBDhhgYUHwtcTk3hayJrMDeviTG6BlUl6O4lKol1VkPM0PJqLDGrAhZpL9dsRgvsTCkTrFbiiA66iCxN/cdHHuu6rlYeE8Y6jnlptmDg2ty9CSH0nqTpid8HTSkIRsk0WHHZYF/r/2M/RA3fI2vztPsMdtSeBxcdfAquyYv2e6dLs81UiUIwMvWZ3zVLANW8QJ8znKzvqfY/57NPMdytkBLT7mLmFYKy/ierQ++jDfqD4zxLqH4bYM4p/jzXN4Vej1ihDv25gd/v30JnonG5UcUeB609Ry3qCdntSnwzjEy+y8C7H7oho6tmR3/WK18XCh+ttEWWXWbYU5MM/mDYUS43fV0jqdHReIoNTVxnYSINIwTYXpGd8EDV8KtvedxJd3WoaHLnod2qnpfLzGvqWUIjUYRowjT+9XDwWgec+bWlPLYRVmCo/gFWXcP+Y2GASaaSMvPZttBhcQMB2qAi0n0TxpYF9HM4ItT4ju+ijn9tIH4MFe1JeBpjLuf2j3kOAbDWrfEPjwqALR6q+BjobrKKIZlvMTlj/VorW601YjJtn4di1QeaszLsgJEYlg0t3LXUZwxT8EV+O3GMQlYoNguZGeALL8iDoXhLA+/OVsHpRW6lTc3jKwBrGxYpwc5LDNZohVEfDYDfu4vNEM6guJygs03mw+tSy8fW2BYao2DqIXVzqAfYBzaLYYDXef5OxPT7IALw438pg2u7FP21LJfPon2B89iECsMguksVngS142BIsmzKehWlLsOBiDRnRCjM74ii3N4n81TlYWhxKacbPZywpj/ZoEvClNi2QOgz4S0WkIf+j02W9Kl37hZCIniPHgmFZDglUutHJIyx3aOuXopMBdnGCwEEaCgcG3FWMaF7BWqkosKjSfKPXVJautXVeJmg8ir4PVCnjTkjHPFmvNXFldWnYCdQi10w6ZSmRxxsH3jzieJE/qt611y25+G1q6869FJJzE9TGIUsODxKk5bZBJwv767XsQi4eFA+W2Pnaousraq0LDlFg/SDdbDJsElDXiOK9ciXmMqzZBtYeRhRfyuxEe0VYpVkxvGsNNQ2UgKd/FsSytsX6oONwAZjk1CSsKQdBArMb8YnCu19gpEhPke916DngRiKIhyjmyATSi2SuC1kFcdGYk56hKb/Ao9mkbA5f0SAlj6pg/SlB01ia4NqXTM06hBI/lvgGdY+ozjXh/i1pYrjopCjGJP9iJJfTvOm3w5GyOlFvRA1jOk/zigT1bcxEoUg2p8lc8LF/DA8txrNCD+/VCtwrjXbCN6tV6pA5mMBGX9uOEZSVbirVBL/z2DtDCO9XcqpjePHt0sGidraFE4kpISDOOj58yE16RoLTjpCjtcygso/bN9tqwz3dvYGT9qtfwh3YRMImsUeA/EoqDxFjKRap5XCfFVT22aA8Azp0dznovzwCtIi/QlIVZDGaRj8gfynWjHX5Blga0nJ6Y+VhTUFm6xXPK5T9gAgT3HVRwVHf6p0l44jCaESqTL87Cr3oUqrs3z1TXkMYkPulaBqUKryIpISS0N54jUpEzbvJriyUNzT4cGQ/iU3/52us+8UArqdqF3H8z8T08hUrm3tW6Jv0MqIAxrCvDLsVu/FWeChnjJ1UxuDGyx1iPsLM2awdlgqh6tTOmQW2TeDt0nUQ07yUOLgc4DgSDIJF+VQQMV/BQuaFb5ONAsKjpegNwqMo02sV5QnTJUuJVbPCCwOUvLBo4dw2qJPbCuH2UMDH5R7qMgFL9xOd1BTe2te2DrZuHT/lV5gB14fyXHDtkW9APKQgvlUffJQ8PF7QJbqZ+8O8VFn2McpiD+wZuppV1avaPK5xPJsOPYfqr/amPp2mU4iGsIaj1vQlN8nZ0OesrcYVSCjJDZtoSnDNKtzks0dBvp1aty7PtACk1pjuaRQWgK4m8TYTKDdhWKZRSTrqr5xEX7DGDSVHEeQu1oR+SVxhQ/rklvB6AAAAAAAAAAAAAKek9B1feRU7Ll6HsLnVqeX5wAk71GKwda6Ias+cgGG7OggozxUqC/a9dr8ZkMrEKQNUZ7eiYXs6IoHnWicwWWrPTMcc8obBpzDrF6fGK3vKk0bnbW568hZCMVHva4udF7/h9p95u6MEJVmkmXIInAmdKXHgSlAgqx53V+HaD6WHzthc69pJj7gRMa7U+0uD98hch0456BpaRqLoeYDxbsrdqOae3AzzgJcByaF9Dxg9/1F1qg9wAXzi42yh+FhmBdfyrV9VXA839Rtnw9HwH5EK7Ggk0eHSKArcSVCmSkYU8QS02L3i/BR3uLNvrzVizUQxcXiwndaPfS/Srwmdz6sKl7nS/TBENZXa3SyOzeg8mlxNfMD1HpQWUBqfVBOiFtpbB+E6AqqxaOYtuls3JrHLpGRdyQsBkC1C4Ru8Ork9nVenzX0KW+bsoclAQEmIk1iiwVJ9M1JByiR6iEwR1xx5p4GD74iDoiio2wRhtG1yI1jKObYgJJakV+j84yEYxsD4GW3T9G7aGc6CoeiHEL93Emq4Z6jL/rxGjJDH81BvLXJktnyA1H9fXwqcr9KM+aZfIcz8fpX1UEr7IFTN5hj5W2M5/BpsXL0nHO9ij0uxMn7286InVX4u4Euj9bZOU8Kft7jxoDj/66BCahz8mw9na5CohuZ6oO8fObOzC440ONDZo7wAAlXlflgAAAAAAADfymRAFJLR+kpaOsyEw0jntDuvn9TZ5Y5CPXgqemR3FubuPAHOpccASSIEACMziYmWpcejH1DNURaoIkpwEVApLxGOF6TBJzP/x0ZHdzdnpqbhI5dK4eAIQsBW+yRfGS6eQu9r8rI/FotIYLh1hpAdfyy4BYt81AkCLa1vhbkidmhmgq94ccZCE4/Wr9Q59Wuz0Y9UE5JOdp8hSeG+Hfp5RHJkAzx9l0I3EdgVL/uPAdgz+1sMWRXY9srZj/7lI75+nWDzSDTG3eC6wlrFQ59/uHeHC7+2FasIyHRVr3ebrVWJYQAarQ6DXMElZAoxjsumv/15W9sbyqvlXFilitQUJkzobgDHqfnt4pYnrze3HVNDa5bflljenN1zoe/Ufe9hx9euzzWYb2SmrNPZflT2e9yiDerYEclAZMXX4mG0SmitXC6xNGHadX/G4dGmzPw7VBWnj3a24bqh9Fuo6/LiZgoLg7z7YW3wJMPPJaG6oK5pPspEA81fzFu1Vlbq5XyOhSVT7kbKUFi4ZuLmhAQIzkkpkeTKvEF8/e7KeCMxgUmnavPYWyBkW45nITOeZCYgKzMO/b0aTGOLdT0N8KlE1nuXhl8UBOlwt7E/YtjMEUTjXwXB2VAR1qg12QRYMitunc3XX3wjvLjE5BFTG8d2K9fZHkLtJobN35aEevS1PTv2xVqjC9VfGO69Td+lbNcNDm1Bv/VlJ1/OBzOAaa0tBKLTFZY3FNkCEjrcoRAYyKpdZ3511+6oSlsXzAYm8QnEPvcVCYfLmifj0SUa1Si4V+FfnMGk/re+iEXOPVHKTUt98pvnMX/MvwPnEhaP46M/zWKV9KxIvvLCicxhbmU/x+DpmhDO+oeYfjLu+4nnttBGMfFqS8j4TrGhKbPaYQFOtEPLZMwymoa3vM2UPnkACdXQicXiI9mEZJgn0JEQj4MX8MfAa42sPGA9cZFd4gbepx4ZGwmOsOOgRT23/mgYqS+WRQTn4nrHBynO05U8GcLj3SRf4STruHt703p/42g1x1+neCkGXzpGT7j+dEEIsVWfXLr2XT0LemljPHBnQmn2AvJuIbCnoDEwZ2VHuZRq606uzIMf6gvT9zLvCl1Y888sPZjA0f+4TbwmHqju99GMEEk/l0FbuvJU0zArfk3OqjkhT/q08E3EC8AOT19n3klSQirwewiz/khUw3y+T0xyGmKwM4pld1Vvy14r2OCmnh24D6szLSbQm4H+IoZVc2/P+R1pkkfHQlWQSqyUSDhc7PxdCM7Ex4tntgd3RqK/qqePUkzf3egTvbfkg9L9mSaidyOxQXd/6Kww2kNJvyDBhbc3TsvbSP3g4M/qXvRZSoOG7GzVDt3w/Y4tj/fqwPUcQCNUZAu6mEX/UI88eWf5w0oX1CfzqNHKx0NBBZBECSEM1GIM3+j8e1dXxu02f5EqkFDQFxf/8Jor+0/Gx2xW5CEGyAK6z4ZA/3FnCucA64+fnhgrOeEbmyHt4V8d/5RCZXUyAoKcqW3xoSamV52Zr4ORcD9o7ug7aF4doonxyUZ/QXXZx15ju1GQ9YY1EcUitOVV2licjnCcikn0KovwZ/mcVJB+H9sTGOhiJISwngF3/vC8befqxCHK5RydHNZK25TTz4SlJ8fqjUYUx1GoEApFnUkPBjU4YSxVAdMTH9pIovREY6jxPOU4oEyWv0ZLYawMkGZM+wSNgbhpgH5T9jcQ+XvD8RBTJosajI/9SIdQM7RxyYIhn+B3+2Pp13zkj7Miptxas/i52xbEKMueD2RsWYOfVBZLhTldi4y9qi5WasQv+gluGdVC5EJ7+MrLYVnDAAiAEmww926/Z2zpUSlhG6ltSGOhhslvAwRhpbCG0qRoJtVK1g7knGPvShsSsHzgeQQtviR8U46fvlat1EINC/J4mEK6csXv+ylkFWexdhoR6wxwW4jA/wHyECWNpaq//H8XLbOviT79b6FroHBOTXe1Fs2k9dTz8Ee/U51ASYD1xBr+pNOl3Kxv/DFTonQdSGvvkmkKfHwStesUiIrRCAZUfaXjeKiaZXVEA9HjJ+BV1KztDugKPIkh2X/Gsbz4IqDmnwG4IYlfuK0KqbIR08ThpP6nGb0nLXQNbIs+0x1yjux5WIGD0BYT3/1efjX3HttB/C3H9nDJx0yPznXfCezpQIk/lhZR9+LzR4tHs+sOr+mZJgk5uoJsahPQfWipSEgn8ZFrn56mFqFz7SuJlzee6kXm8y+yed2unXc2xY6CwN9k+WsHKoti5hYB1ltqpVeG7LeIMVdhZdqxdwBBHkryV9kXA8J90vWMBrf+P/zav/nh/EJ7QZPlT/T7hnBS92G6y6fyCWZgjO0+3gB+TKuZmr9ewiq8wxpOP1CCqTn6xuxV5ytLDYKIwoMBoTfTlkzfhzYoe0LmNXN07q3kyr6tbZGX+vSaHaETqS+8wb/Te7MBGxz+FvA4+gMXcfimPCEKtq5u/mkl0z+udX7b8wyLq6+e2NyHF7Bxn2H/fuzYRm6lGwpr6FL6M6z75faxbt+vaqOu7WkXP4CxiwllElP1kEAyqdzQ9DIxKD/fb2VfLRyKhP9KUNCzeuuDVUkBCegtdLTc1DS2BAehowOOYtCwg+6KnvpMRtlio15Yob/jWKOFYjP/2QYZ4xe15Ez8f3IwFAoYxWR48BFD7j9e73PhVdB56hsTzqP73se9oftIkZLlPrAuH7yjMOCRAwWKmyx0TtiWMyFf6dKrb4WW+f05N12mgYOLl43HALLe4Ns4IL0tUQykcsMnTxl8BH5FENSR401IPK20YxW7LoJAuSHh5mt33DRxaNgEknVwv6wjvlWj/INWVdTzTlRrinemb9vOxR8n7eqdoZrn0Gt+oCYEkzeOH6kYZxLcRJkvKwWiJQIBfLGNc+zURI4EIGAbVnHM4O2iDiwMv3utOXPbuiMu16KkLgvztfMyzn7byKUJMb1xedFOXAXIpRXC9Jh5h4CKzEwF0EtTXeN9LM4lhp4YIxqcsW3IVk28Km6qD9mNxCgo26XL/TOluYp61U4X/xvLKFUoG16f4qwhuYJLbDeuud9ndYkvdTPnBQ/qcnSpg6KXx/CWNPBBT9epoHB+hNagkwoV9qERxKe4YJuoC8EgypibM1Tm0Ay9vaKDuT+JTeMR/BTnw2fRGddNMOxk0ShkDCZyd29giSZq6rwAxCuhwPvKJ/h6CmVxmdBzQyKZ8OoPtKzs6MtL1+QhDURv93HARH5xPUkU6yaFpOS3Er4jjlagp2p1KEeuQNVxx5mPDbl7G81+aPg6sxnt57Vdox8SQvZfiI/1PTscWqKxQfPqxlytIeIf3DfX6rEKjcxUBjWthFIFDNBGqGTLMh7OLxb0exmmy9VnHhMaLg85i8aPj7YBDIVdzcSIuxMYKmyllSrrjePZrToU31oqcf521ye43y69ubWm7c61G1RIwhAfHWm7pOHjD1o9n3ofgyC9D/xBQMUOqvXNcSTZlRRMhIL1fQD4GyvoeGn9LHTK3eS+35v4W3A0L4AO0jCSvUtRxqywQXwPFV3L5C4om3dP1A1LXHNBXo/w3Vlkq8U4qL02e9Ky0rjGaz1S6HIbjfO60Tb3qISvnoKX/S9UUUEd5bLtNgnWYZTV0Bb4wiOItrGWFI5zC8FMQMWBJfIlbkxAG6FpfgNCeXEGWF/eU+dS9RgBnzCDuRLYTmJshDK3pi4/ORBalKajUPL3gBTHXv0oLtFTplUqir5mR5RYoIvRqyNqoitTO50XG94EUJjPkkNTNoPu57MHi3mHMdilh3M7bRboOfq0yXaS5Mr5+dU+rkikJtHjGou3B4uCbLoSrPFhAeO4YoMMuUzMwg+knFzKtdnxk4r68L4sfz28+u3unSb9b8j6UW1UgLRQ0Oar0LsIIPKxbtZCKDPxRw40+8LCJii1mVFNN2iWQdkaSkbkj2ZTJ0EyGqRiLHIDWTwkFpakpvIFxMgQo/VlRXekxVs4B+yhhmknAwsQABtfY2Wm0YiaJtj6YMsQDZpyi7WxGgCPtarrV5TnLKCBA6pTlOVVkRkQo8FmYwqQPGjycOgFr7/B8XqNVpKqlrfwP0XdOZCm9PLwy8smCAJstKX+psqf/6YmVIWS+51jGYGuA7eY1tA2Aq8LVQchMkmDrUFOafdVRTl3Ukd2/wzg24HMwBrLYftaGHJ/ZcWpU/VSBgw7gKVChWfJnqX2bDvZX5tuhQTGT+GIttwLnVs1ATkPCsqGIGU67a/xXVH8El46jtw+JXgfbrO+FTqrXVrRL8Pr3ZU7GMg3yDVcXHoSFx6Opmlrdqfn9yMEVlT0lDSyTpXTzFs+HQ5Ugv0DVjzWB5urroVydsPOmyO98asg4PvzneamGeRXtu0eiYe1gazYrw/dJ2wyvQlC0dTszvHi7qV+2RkeEZjz6IHmSceXUBoKkjW2lJkM293vynAEoCsCwIWOzt1HFDDoy3tt0LL7uB4gJOKNmoq8KtaH1qExeO1a9fTIYq08csXrk3gEkOYmbrA9zpc+vU7VtlyNyHbWNBQTXqwnv3jaGzp42eQwwDTWAILmlkUZ1L1fNdv2Yi+ARgxtI+9roGWLPnQgWATdoeoPraNnSvu0fTgYEPfcqeuQv9+mNX0sLzpNA9TrNwh0s8AVyHqu+fs9kxcj0xfX4tLmkEborYzsnwEo3oNccXgFj9XCCjhtrqopWSmZ4Xf0O6MJ2NaegGE0AuMpM0X9eFK8+TEN0M6DXszEe8LKdZh5ozx/K8tDt6oPRBOFE6qcxJ+JfjYmvlaJiYRC6xgM42fkeRaKm0Oj4rgglHTTgvKB5xByw7u4U4CBohhT4ADa+loCyCzikJOstTB9qPpEuQjNv3ZMNQfYTFcLPp5WU2K/ocVpC3deG+Xx0FaiY5Zlw9DdgYhSWJwdgkF7nd0feU9QVmURvzYAjapUkw2inOwLb+qA90/zWlsvDm3YiJKPk0Ts0niMygiMc4f73zXW6dLdm6qOSeKSgcMnJ406vb5zRNs2CGlk9WG8pUXcoUWEYjqCkmo+C/QCuB9elhjnYQ+1HorEvKxv9psu2RJyw9f1vbK5UQouUlTBY16FlDZvHwc90OG7YodLjQt+3nDAC28K+STFwtIggc9vNExjg8qxjDT5dS04lIY1Gy5dytl77ZfPoXmXv9zZ01+XqpuZAFj1hPXgRzngBF/iPmnFJ+Aikqtim1gQ6a8sDQOoT4vG8G3OfSeS3nMDLmJ36kG3baGnNj35QN4Nu9FV7Tljv7kufFOvahcgw3zMLfmajghqFyWrxa3wOWE38kcQev6I6Mi80H4VGSX2Rt35WnDuLPub8ZlSSe3dK7KarpH63q9E/WT6EfEQvEyj8/xI+rpTd46Ic6rT7xYcX4ptUsFjtgHUQeGg1TJEnwgDngI96L4Nj/pDEBCN542wfTN0i1epgDDvi4VCbqRLz4C5zrAMIQRkwGdzOBrNpfJA4WJFuBY92+WsukPRqjeut1owV+CVTATC+4TzqcZnI9TOsh2Jz1SzEUhylW2A9RKcd3/ekvvhiLnYj7rqde2Gr6b131gwCcB2PYbmiGprWyvCMbHurkoInT/+pPIFjMSFNoQI78ruCnWIet0VJQupyctMRwU0OUkhd3OJezwDSMzPQr3JGcQqMGHk9pGj2yT52TZWfrqDXa705LxOSUj0+lwurANW7lVPIrRe0asDgVBOkS3yU/JHBiqPu02CXq4k6MrrP8vT0YkuoejN0tHZm+2PgmegnYbPoXlExDOZQEfEwhbLM1N0872JJpfzcNKwkzu8Zs5kAC33X8fVxTm+G+qsRTYedLqfhYFiv8LmNzeQ/dCW3tTB3iPTCSbbukRbzcHTRnRmeifVnFskjIBCoZXVJqPN1IEjNE5fAX2juGtiAB8dtll34k/1SgaXfJ0SRQQyyFB/0awCIrFGAGg8lRAVdCaZKEPxKUaetS7QBMc/zb+2wPxMJyf9Qvy2JW4hl5Vn1scb8ALFt0VfLoURbwAqAlU+LKlNlASrbloMGUtjCT48s0MCUa+jifgFG/znoMzJmUnlvW5kPRtHG5GVK5yewalhepcVi0MighQ778iDP09jsPlhvyQnRsoEz7C1amDlWtW3ZlVcpsgCq6oRHrqYaKiGz18xMmLpP+uGKP14MfoNdxRn1+1QwQHUOPEyfumZEFpjMu2M9b8IJRcd+F9XpZj14HiAVhoTIgTVAAIop1V7VkoCi84kD0CG+YkRTBL8ErVtMTzIExTaig8MIApyPR1a4rNDpUgWioLhprUBVpb6H+LN8u7l8nCqCWmDY0GyHCHW21Hm/KLHks913vLG7L5cklPyL2+QMP4HsE8IjGoOMucpck4IRFXdoWBNIgkXHSUYEUJ42T0LcP8TthwdS98VNVCgzn2JMjlQXU+/iL575vZlra4CJ99YU+SCIh9T4R85rzAhCTc88x8EYjKQW06yqOT8Uf/bR0rXcGC+rQg8iQ3y3qxt31rmN7p7cqzxyMOjafOt2+4rIdwTfFJt/MPk1UZ2W+ltk0GZLqORYHBA6rlS3eqBVC7ESNN1ZdlVvSyTbqaGsrtkKFT2K/Ak0gtDM11FCe4IZYLX7VDjh88oz+Q/BVbKJ3m9+P6Vfpw8Qm2rugApV8JvqmQ2TNeile5dYB2KF4EPKaLM9SshMSv0aL14ei23QVeIVuR6ESlYbpvlbu6HpPDemxXJ7Vvu+rkGd2RmgfCkh1nW7S3ArgjJzP9Nl1VETeshrMw9bHbEipRwr0VI24Z+MfpzaZYu91UhGSpE2WC0tedeFnYAfeQfZZoScFqb+JlCSLvA/YLI++DD+HKUI2b+eCx8nec50n9hWYKAT4MIZbX9D/Z5UjmPfkHEUrtVgN1QGlhzZTjLi7e++LLWsodYz41UNBAJYwnkBQ1APS8BGygiXJYEuNCIUd9/acGeTfliTikkLfe1OezCZfpNkIlavRzEwL2v3pTsFfXC7nZgHJjd6ziVrYZxZae/oqZ4AS2cjxGcPO+zE4bmlVeKsiUxOxUBAn/RxWXOzSvfsqtrsptxreS/gZw4PXLun6KQYPExQuOrYDneVeytN4RFYhWXBWV1xrU+xaIy6BlPAwgxUqGtnwwUoct7QzagW9avo30CbjP3ta01sCVKaWQ+FT0BApc0kWy2K+2uVEqaMsFUoAzbVQC00YKNkV7NSrstOHBOv1wbBNYY1BHIuNFKAxtyJQRINsYpriLlv9nuBj4BgEhXXbVJG9XsgpRKgbKwT+/axnpasoNCtMV22cujlyt90I5PeIDi0Vcwx3OxsnGpghQJO0/+ZQ28L13z3C+oWLAMOPs+4CficwRiWNvLICwCM+2rudifByW3HtLZTb55M7/0goVGHksSM1kntZg5o2zs0lQcUDdCBT9AX4qi0UHFFDDB0nt6J1lG93lVCnYX4edELolbxsrDfGt4viBXdeY8A7fZOrEE9mUwsr1X9+kNCeXzi2CV8sw1GrFOsc5arfpmzGQsz/sk7FjZx2bcpYVO8BCVbyUgQkViP24VL+392qniWpsBfz94rvpv1S4qpdvTMbT8+L9p5Z0Pdtb5EPQT6dX7gAKBlfrdOUmiM+w+IeWWKhl2NJ8A7/tkP73734yXohjhOmt9Pc1OYUUi82l3buRVZBgRftvcB40u2IpARwM+4MoE5T/OFbB60xJUTM2cdN9meLzrINRY5KjOmqHubZKiQbevSVQn4nVaNyO5NnFyU3bIUGjJw2clwVZMuax2fRgW3A1y36CJzVTo6ZwOekbbLLP+UwccZ6PwaHPuVh2ZZdFip9JEjiwM+fgLbf8t71dDBns7HHOJdvJbIrFopkEC9tAD8B4uIlWXxkTnRnrRNHResKAmFWTSYp/g+IT9f1p7zoA8SWkJaKH6jn/Nxly6g2+CKiB+rD19y7rpA5Hk1cB3Uf44Ocsgb5IiIVImSJPm7tr/IsddYNZ61WUMJDYce+oMRzV8drr1Yl1dhkblbUUPlcdl5e7CLiU4HMqHaxukBZ23mbwe351eH5VsMMZWvAGEKOr6RW3Z0DHbSRtO9ABYr7DTN5zEbcLGmqT9e1VcVBXtTWEmzOi2Zgvm3xbQszzpDxrETU8Tkaaf+QpCFGMBjli1osOKtnrSDbf8lXHQ2YHzySr8aL9tEKGlF/1oQ6g6rIRDA7y9CltQea02Ga2/VTC4bx52QviOsEqRVsGJznfwxEoIdmYw3jcU3LbupV5buISbpwoGf3f+kSr4BG3vGqEzO1FXJc/4sNXiFlwhO/Zq7P0nd3ujEm6cKB4d9Wfg9c7gtI//3P0x1J5tHiv51TJeRqDViM1JkVwJ59OdE7E6Pei2eM05O1II/PFjYj877M2OBB6+7xoRQy4Pef9Gl6tBJORQ83XCbnXBAYZ+wLvrMpIZIHKZ6jzGXvTj6+l2d5CvVcLa9C5N/uMAWGL6fJrz71ioS3s4L+X3pGUG3mSvyc24vwaDy9O7KbGwv8jfo9R6QEmQmKnLeKswJQ8g24FCHgpXLJmRBqCVfQ7qSF4i4+deITIGYpj4yc2LfgFlsYoxxq73urElf7Ts1jLzljsxZN2Dd0zsPCZ+TEdOHnUi0e4wLpa31Yl0WkBrwLKpFoAxa/lx3aBZLphcfJK1oEc449v1DEGzar/a+KQ3U8KNDSKHp1E9LNL9Sa82D9vtXmSk3hRAyrNLbXYLIBrQXFExfe2+/Qj38ibtuuK/5CjB0wt0j4eEfXxhwgKEY5VYA6a9APLEMMsTzbMt1mp9rlJruUygaSV/6Uh90KFgFsxzlprSU3mvCu59cVNkz79lV/I2ci8Z/td9MrtuEnI1QfVBcVegiaTQ6O4haiW6FmJIIQI+BUSuMILavapuwEtIlHI3DF4hhXoA+1vNXBT07Kg1mI7OD5+4Yd7alJq+VynENog7FNfWwHwsudeLygY6/exnkFy/Uy+fb4ENsG/7T34Ynhvojq5ZcNE9V0rneKaVZaxtehqGHIqxmBXkvchZKhCM16GrwieBc9pARB0M6qqsUXEl/y8BaGYfcQG7N+7M/jgfFT6Rc8bo3dnkGZdNAEl5uuZaO+O/t/8PIRxbjkkgJwWaekfTuRb1v/9clSrCSqRF+R1/cKoGy/lXMfVCiZmxoZ/4BEgVbumihPaTnp9rZVou3nA4Qw2AQIiRA4Ituixi+H6n8iWQi/pVRZi/ytAZB8/d8BmnH9RXW31RMirnN6oiyRRN+yp3iaLF1et1AoW5ga/p+qXXuEaXQx88mEqOwi4l5Rjf/ZqrDQiZLlJ2gph5zKha6w7kvzgFI33SLCY9gs2sq/osoQfVzVhZB7r7hOaTFrqQs85mxOVYQh88pLBNYpiqTPrVCREDvNXRp8B2EdMhETMZUosNMPUIadHNkmLPhXfgBSiACQ8bSJHfJIQAJJtR+gzgp8v5CN6VKuu52mrZowrvQDWa9s6Dwnp1ZosenTqO1PPAensGA6uPHG4VC9pHdFYwV7lvE3YqkDLxpj3T0+oCTeRzDvVj46uXRWeeTs6eVOlI3tFHZIAQniDQYSiIs+e8XYb1FN80Fg71TF9LcNfLC4a6DsKu9WRY/HlBNNM80iTRkiHZety0/eOXaTJ5FBlfYxTjAiD8Uiz0DlY+g/T1PqtLlPp7ctSz3U6UAucaE31oaoCgjyQizJ1n4LlSMamRQ/u9XU7Z/Xdv32kD8XpNInRsW41iKn7bN1Oe9YGhhYWlbIQ6TzpikE6VQ/NH6XVsptRQSLz6AZqXOBY2l9XzEstO1jMC2Pkn1+QauaR1L+SMw7NS0wUHOcxd0fxvNXc1kNxB/e9bKrGxzyAGFvDmyB5asvxzQdGt6xKFgkW0B8Un6qLZoE9+wlT+49wMHcH8ON5xoST4nIzSf9PN4VzSPVALZ+wQz/TNg73SLt+oSjjivHaXhLek/Ax5uNOMMhl+xUUvVgFtkC/f0qh89DS2V0CA5hLVjRzbHhcp1vxY2X5tOHyBLHkSWHwMV1KHZvHTLVmzHAV7MKSppZTJe6sxAhY1xrgTN/Ml+qaCvA7g88hUWeyjlmg7VwHv9whWAizNksF/++A0b0PkfzktI1q71+MKocV5oUJA1GhyGeAFxtGG7lc+/RHBXsjNERCRtIR+U/cNelOxyedaS8wOKpC/eQR+Ly+V7JAHp9R4jwofsSX4iGmDjN+ZBdJo7FXu2LmvMarKQ05yMG7lVvfstyg/LaB/6yZ8cteBS9qtFjHHfOVXqmCz7Y1oODgzJeX3Ogc4dq/dt1ViYZiDix0T1wXwjOHXED46PhmBcjCwOHS3ev6RjmzjuvcDFn14h5wX/YuKL4+EXuc4DuTbm7cEmo1SgD397BtEts1kVyiR8aY5CDkol2FFM0541Yp1ONJjEtd6hULYxMiHggpVog6bjLKW+jRv81YX28AOcVsU8qiftKEFnBqZe7qou5gtPNhpX2N2mBFiZNyDGEhzvwIhwmkwB3IpSQuEYzooXBBwrzD//mAlJY/qw4CcmN5uActD8fvRfxBCD1oTYtoyokauTAMMs9E57MYOpQkSpGeexlMl1c0dacmNa4F7VsUYQAL1S5JWLbSRJ2WO867kv7wcCU/kJp0+O+G0socILV7HIDmkxgLOUi/9HD+/8UDHw4OkNhejk+Kw8iAzZWevIJAgwAfB7xx5wTRXotUewVlR7nR9pMsPlUYg2uZozx1znIoeEqc3DSyQEmAH2VNYAbzdrYFhGN+gGmiNXa2+mTHy/ELMSImZkKJoZr+8+X2JRrncHjZRoH8qAAAAIMgvdoqH8UK6kUAAAAAAAAB80XVQBFkAAAAAAAAAAAAAA=) Table : Variables in config.ini file | Variable in config.ini | Values | Description | | --- | --- | --- | | `image_type` | `efi/dtb` | Use this configuration to select
`efi` or `dtb` to
sign separately. | | `file_path` | `local/remote` | `local` - Keys and
`efi.bin`/`dtb.bin`
are present on the same path as the
script.
`remote` - Copy
`efi.bin`/`dtb.bin`
and keys from a remote Linux machine to the
current path. | | `local_machine_private_key_path` | ` machine>` | This file establishes an SSH connection
with a remote machine if `file_path =
remote`. | | `loader_conf_timeout` | ` seconds>` | systemd-boot wait time to let you choose to
authenticate the binaries. This option is required
to sign `efi.bin`. | | `efi/keys/dtb_remote_hostname` | ` Linux machine>` | If `file_path = remote`,
then the host tool selects the host name of the
remote machine to copy
`efi/keys/dtb` file from the remote
machine using SCP. | | `efi/keys/dtb_remote_username
` | `` | If `file_path = remote`,
then the host tool selects the user name of the
remote machine to copy
`efi/keys/dtb` file from the remote
machine using SCP, provided the user name is
created on the local machine. | | `efi/keys/dtb_remote_filepath` | `` | If `file_path = remote`,
then the host tool selects the path of a
`efi/key/dtb` file on the remote
machine to copy that file from the remote machine
using SCP. | - **Configure using config.ini file** 1. Image selection: The user must specify which image to sign by setting the `image_type` variable. The options are either `efi` or `dtb`. 2. File location: The user must indicate the location of the unsigned EFI/DTB image, keys, and certificates using the `file_path` variable. If the user selects `local`in the configuration file, they must manually copy the EFI/DTB image, keys, and certificate files to the local working directory. 1. Create `unsigned_binaries` directory in the same path as the script, and then copy the `efi.bin`/`dtb.bin` image into that directory. 2. Create `keys` directory in the same path as the script, and then copy `db.auth`, `db.crt`, `db.key`, `KEK.auth`, and `PK.auth` files into that directory. If the user wants the script to automatically copy the required files from a remote Linux machine on the same network, they must select `remote` in the configuration file. In the configuration file, the user must provide information for the following variables: - `local_machine_private_key_path` (mandatory) - `[efi_config]` section (if `image_type` is `efi`) - `[keys_config]` section (mandatory) - `[dtb_config]` section (if `image_type` is `dtb`) Note: The script supports copying from another Linux machine over SCP within the same network. 3. Loader configuration timeout: If the `image_type` is set to `efi` in the configuration file, the user must update the `loader_conf_timeout` variable. 4. Handling missing configuration: If the user misses any configuration information, the script runs and prompt the user for the missing details through the command line. - **Run the host signing tool** 1. Invoke the host tool: After completing the code build process and obtaining the unsigned `efi.bin` and `dtb.bin` images, invoke the host signing tool. 2. Prepare a host machine: Store the host signing tool files (`signing_tool.py` and `config.ini`) on a Linux machine. Ensure that both files are in the same working directory. 3. Configure the tool: Set up the host signing tool according to the configuration instructions. 4. Run the tool: Execute the host tool from the command line using the command: `$python3 signing_tool.py` 5. Interactive process: The host signing tool displays user selections and operational commands on the screen. It displays errors on the command line. 6. Signed images: After the tool completes its process, it creates a directory called `signed_binaries` in the same working directory. The signed `efi.bin` or `dtb.bin` image is stored there. The tool deletes other user-created directories after signing. 7. Repeat for both images: Follow this process twice, once for `efi.bin` and once for `dtb.bin`. After each signing operation, delete the `signed_binaries` directory before starting a new operation. - **Host signing tool workflow** Following figure shows the workflow of host signing tool: Figure : Host signing tool workflow ![](data:image/png;base64,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) - The host tool requires the `efi.bin` and `dtb.bin`paths (absolute path or network path). - `efi.bin` contains `uki.efi` (Linux kernel image) and `bootaa64.efi` (boot loader image). - `dtb.bin` contains `combined-dtb.dtb`. - The host tool requires the path of `certificate` and `key` (absolute path or network path) to sign the images. - The host tool mounts `efi.bin`/`dtb.bin` on FAT partition, which provides the following directory structure and follows its separate signing process: ![](data:image/png;base64,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) ![](data:image/png;base64,UklGRkAEAABXRUJQVlA4TDMEAAAvVkEoAAXdbNvq6NFbwlcCJRA6dEgJCh0qdKhwQ0qgBEpQSAmEG1ICHXBdv/gOGs942ONE9B+2JLlxm4Ffbu8C1AE5wQeMj7FRljH+1MAyxo9lxv2xgPHTxPexgNE+/vM/E0RQW1ICUJaUA9SW9eGP/3z85+M/f1WIiP88QEgyfQvloVSg3hBkMHiTDZvF028caOYKEB5KAcrDBOF2FgOCxdP7oBHSc5FAD4eQ3gZqPBcReDhA/KeHshNoKzPnRoA/2gyh9uhAe/uStwH+lIgO4GoJSZSJjZ8E9OgheRpMlIhN0IY5gmJQT9YGuDhTwaLM9J2uVL06GXPk6QyNiaDMXCaadfQ4C4qMwzO1fJEymW6WWSeqg6yuMRm7iCZIQzOoZncK7w1IqaqvTQF8HT2CvtiBo42eCagzQOx9Bwi+jOqBLuhpo3igMiSZIxPctPbdtFnVjZUvAGlcqmQUQcod3aCarDbaBpjugPLsvb80ntku/soFE12B/YKvTgf4Picrcz1cn0Zm5bg2/cQzGrANyVXzMoogBd2gUn+aHCUbVJmk/Mo0iKe6O9AFBTMHM4M+lLodPK/OJIfttD1PwbwJHlz8KaMIUtANSnRBjjchHHf2J+MhMbkXUmvqlRJQ5yxxhkYUXNrkzEAM2VWRUQQp2AzqwoOESdKLIq9/YWGJCfv1NBFvIbHD42+EJwmJ8bRUadGM8XbJQBHw8p326xkyd+68Kar8kg0kKHDjFuKhyt/BwcvsXPz5hVWQgm5QKUe8/5IOHC/9Y49jZ1/VTZtM4kWOd0Hmp2R3OOSySa4qXdwTlKYDjW7QlKwdDMKhflAEykuTgHC1IYRp0SHObYjrt0Hs4yRQv0MjUGxj1OTSXATKo6ttiE1QAfbRTpPBAM8WwNau/oYTriKejbchoycgvPhPk7vY2FbPRLg67iF0pjiHGbbsedcsyiDljlHQZD8YDUJO1nYwTrFpzphdtFf/xTcHgPY5jz2FK5GpD+WqdAKp13LafB2lqnIS11GlSzwIzNRo7NqLQ+X5tQq6TLmoGFS/I3vA55GxjfnmgXBtkXDT1uOOvqx/n/Dxn78y0PcFjG8WFjGWllWNj/98amHDppFAj5vVtzQEBI0IGAGiTAHCClGB+mAaIa0QBSiPQI1/ZLkx+U4Y8QIw6qSpM+7N6qsg9q/g/X1jnXxnIjNNnXFrVl8BMs0q3/jNOPnOdAf+HD0CG0ef1acAypPK/X3vym2T7yzwBb8BjWGe1SePcQlw7xvj5DsTnW9Imd3RZ/UpnPwIuwj3y523Gc45zGO6ZL3lX4Q0IN5/yQmcDH1W32pwa/JdBU71gwKoM/RZfYuCcfLdVcSeeRtSRttZ2SKo6bP6FgXj5LtDapoD0+TZTh9Fn9W3KFgn30UHuiQk7OO8NKXB6kzNPKtPvuxeQeP/7WIAAA==) - After signing the images, the host tool copies the *Auth* files under `/loader/keys/authkeys` directory for both `efi.bin` and `dtb.bin`. The *Auth* files must be available with keys and certificates on Target or Security team hosted path. - The Host tool must configure the wait-time in `systemdboot` loader configuration. This wait-time stops the Kernel loading and allows the user to review and select `systemdboot` menu options. The `loader.conf` file must be available in an updated `efi.bin` file. Note: This process is not followed for `dtb.bin` file. - The host tool configures `/loader/loader.conf`. - The syntax for `loader.conf` is as follows: `timeout x`, where x = timeout in seconds. - After completion of the image signing, the host tool must unmount the `efi.bin/dtb.bin` from FAT partition. Store the signed `efi.bin/dtb.bin` on the host machine on the similar path as the host tool under the `signed_binaries` directory. - Following is the directory structure for signed `efi.bin` and `dtb.bin`. ![](data:image/png;base64,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) ![](data:image/png;base64,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) **`efi.bin` signing process** - The host tool uses the `sbsign` utility to sign `uki.efi` and `bootaa64.efi` images separately. - `sbsign` requires `certificate` and `key` for the signing process. Check the following syntax where `dsk1.key` is key, `dsk1.crt` is certificate, and the output filename is the same as the input file: sbsign --key --cert Copy to clipboard Examples: - sbsign --key dsk1.key --cert dsk1.crt bootaa64.efi bootaa64.efiCopy to clipboard - sbsign --key dsk1.key --cert dsk1.crt uki.efi uki.efiCopy to clipboard **`dtb.bin` signing process** - The host tool requires the path of `dtb.bin` file. - The host tool requires the path of `key` and `certificate` (absolute path or network path) to sign the images. - UEFI secure boot requires PE format files for verification. Non-PE files, like `dtb`, cannot be signed using `sbsign` as this signing tool requires PE format files as input. - The host tool uses the `openssl` utility to sign the `dtb` file. Check the following syntax where `dsk1.key` is key and `dsk1.crt` is certificate: openssl cms -sign -inkey <.key file> -signer <.crt file> -binary -in --out -outform DERCopy to clipboard Example: openssl cms -sign -inkey dsk1.key -signer dsk1.crt -binary -in --out -outform DERCopy to clipboard This command adds the signature for dtb file in a separate file (`foo.dtb.sig`) and does not alter the original file (`foo.dtb`). Hence, the host tool must keep both the files where the `*.dtb.sig` file is used during the UEFI secure boot verification. - **Multi-DTB support** Qualcomm supports multiple board variants based on the same SoC. For instance, the QCS6490 board variants include the RB3 core kit and RB3 Gen2 vision kit. Each board variant has its own DTB in the kernel. During bootup, UEFI selects the appropriate DTB based on the specific board variant. To facilitate this, all DTBs for boards sharing the same SoC are combined and stored in the DTB partition. **Combined DTB generation** To enable multi-DTB support, all supported DTBs are appended one after the other and a combined DTB is generated. ![](data:image/png;base64,UklGRhIEAABXRUJQVlA4TAYEAAAvz0IPAI/iqrZtVVlHnmsEf2gS+kISlxAMPr2Gq9q2VWUdea4RFCcBNCXQS4BDCAaf7qq2bVVZR55rAncgwYtAer69AgUYzH8A//+/NE1FUURViQhVZWZEhJlxd2VZUlVmRkSIiCAIiAhVJSJEhIiI49jz2WAEnKxZsAHcscbrdROGdyzBFEvABHDBDXCid/X9/jweX03TqetaXdfMjIhwd3Vdc/9gwABgdgfcJwPghjvgihtPHAGTDYI94MAIuNj9wR1wwoARbLcLmLF+OC6vmGJ/BUewB+sDO0CibdtpGz11sMzMTZkhndB4HCgFZ+b//yZ+evLTulpLg4novwO3kRQpfYyV6cWDDxi5bi4DrKvLEOv6MsiK2Zaa/HXxaTnA+jAZoOr02HKA9X48Yls6cZqf8x0TYI1fBqh6/dEEWEtnEdvSs7OR/4z8Z+Q/v6156BOvuc6XjGKfxFovCcEaqzWB+z2iZlkNlmvx+EdKRKs1NViuj0eWqxa4lpqXNAtVjji+kVCbpSyHTLMsB1kvcQ5T8gKU62sqxNQC5doSh1sHVEulma0ZidBaOcfCyxGszW4dEPkByrVFQiVKUF3bOnBaalGgGGQjW6vvpzRMYC+chCUVoz2MckBWlh7RW9cLUK6v9WxL4YkvpHVAubYamet9n7mqgGopXwM2diMQu4XUqObFytIsZ6xVTM8LSK529TyA6PqaqkFT7Q2TFCIQaRW7oUKaoDwB5CpQ8ACQq4MNowJMtZUFiEGkCOsl3co4MV4BcnWcbBgdeK7FZ7ZE14GjagdJTCQirG5zYVXjq/ELmqv9PokSGFdHkLWq0YGlWsiCRiSmp4W2Kn7BcXWeK8FxFWlsV5RAqb6mw3AxTdbe8BD9CixECDA9R5B2APBUPaYYxVfaxvrEbMPrFTjXArEtaC1442vuBkxXdQVJtWUliuKHSLF8PgTJVTyqQRtfOxq1VQ9BUi24vraMQApsismJtGzz+UJgri1+1IM0vt72FpbOkFQdNKrR+D0O0AmWaytlRw94HV+cEyTVVlyePB5pvww2j13vNwO5CtOhD5Bci/3VWmmYYo+UH04uncG1FOJmQbCRsJatVdhP1zZL3Lptv5L1Br4AUwXH8ducfDhXvj3xB0I6gFwdqtTWgeRa7BMvdl0FUEtRcH+hWmCtKva52WuaOVmvZMfwBJpqKGyWjJJG1bjY0AHk6mJDB6jrZkkHUEuRSUIkCRbxt+ydkjEOnMHYet/rCZRrwd8J1vg+730f8jP7IkkHjqqDdbArZYgrYKq/n//nNfKfkf+M/Oe3OCuXAdbn0wBVT95dBlhTOxHb0h0Ft8sh1sx8gKqLs0EO70yIrtMLIbZ0ajnEujR/U5cB) For RB3 Gen 2, the following DTBs are combined to generate a combined DTB, `combined-dtb.dtb`. qcom/qcm6490-addons-idp.dtb \ qcom/qcs5430-fp1-addons-rb3gen2.dtb \ qcom/qcs5430-fp1-addons-rb3gen2-vision-mezz.dtb \ qcom/qcs5430-fp1p5-addons-rb3gen2.dtb \ qcom/qcs5430-fp1p5-addons-rb3gen2-vision-mezz.dtb \ qcom/qcs5430-fp2-addons-rb3gen2.dtb \ qcom/qcs5430-fp2-addons-rb3gen2-vision-mezz.dtb \ qcom/qcs6490-addons-rb3gen2.dtb \ qcom/qcs6490-addons-rb3gen2-video-mezz.dtb \ qcom/qcs6490-addons-rb3gen2-vision-mezz.dtb \ qcom/qcs6490-addons-rb3gen2-ptz-mezz.dtb \ qcom/qcs6490-addons-rb3gen2-ia-mezz.dtb \Copy to clipboard **DTB partition** - `dtb.bin`, a `vfat` image is generated, which contains the combined DTB image. A dedicated partition named `dtb` is created and `dtb.bin` is flashed on this partition. - The UEFI parses the combined DTB present in the `dtb` partition and selects a matching DTB for the hardware. Figure : Create/sign DTB ![](data:image/png;base64,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) ### Partitioning Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) Partitioning in the Yocto workflow involves the following entities: | Entity | Description | | --- | --- | | Partition layout file | Defines all partitions for storage in JSON format. | | gen\_partition tool | Reads the partition layout file and generates an internal XML
format handled by the Qualcomm Ptool. | | Partition XML | Defines the Qualcomm internal XML format. | | Ptool | Provisions Qualcomm partition tool that converts information in
partition XML to GPT binaries. | The following are details on partition definitions, existing partitions, and the tool that generates the GUID partition table for Qualcomm boards: Note: The following partition layout and examples are specific to UFS. - **Partition layout file** The UFS on the device is partitioned to store various images of bootchain and high-level OS. Complete information regarding the partitions defined for a specific board are defined in the configuration file. For the RB3 Gen 2 board, the UFS flash partitions are defined in the following configuration file in the workspace: `meta-qcom-hwe/recipes-devtools/partition-utils/partition-confs/generic-ufs-partitions.conf`. - **Partition layout file syntax** To understand the syntax of the partition layout file, a few examples from the `generic-ufs-partitions.conf` file are discussed as follows. One of the first entries in the configuration file defines the disk type, disk size, LBA size (sector size), and whether the last partition should grow till the last usable LBA. # select disk type emmc | nand | ufs mandatory # disk size in bytes is mandatory --disk --type=ufs --size=137438953472 --write-protect-boundary=0 --sector-size-in-bytes=4096 --grow-last-partitionCopy to clipboard The following are a few examples of partitions defined in the file `generic-ufs-partitions.conf`. A couple of partitions are defined in LUN0 and each line defines an individual partition: Note: In the following examples, GUIDs are taken from the `partition.xml` file. - Example 1: `ssd` partition of size 8 kB defined for LUN0. This partition does not need a file flashed. --partition --lun=0 --name=ssd --size=8KB --type-guid=2C86E742-745E-4FDD-BFD8-B6A7AC638772Copy to clipboard - Example 2: `misc` partition of size 1024 kB defined for LUN0. This partition does not need a file flashed. --partition --lun=0 --name=misc --size=1024KB --type-guid=82ACC91F-357C-4A68-9C8F-689E1B1A23A1Copy to clipboard A couple of partitions are defined in LUN1. Each line defines an individual partition: - Example 3: `xbl_a` partition of size 3604 kB defined for LUN1. File `xbl.elf` is flashed to this partition. #This is LUN 1 - Boot LUN A --partition --lun=1 --name=xbl_a --size=3604KB --type-guid=DEA0BA2C-CBDD-4805-B4F9-F428251C3E98 --filename=xbl.elfCopy to clipboard - Example 4: `xbl_config_a` partition of size 300 kB defined for LUN1. File `xbl_config.elf` is flashed to this partition. #This is LUN 1 - Boot LUN A --partition --lun=1 --name=xbl_config_a --size=300KB --type-guid=5A325AE4-4276-B66D-0ADD-3494DF27706A --filename=xbl_config.elfCopy to clipboard A partition defined in LUN4: - Example 5: `aop_a` partition of size 512 kB defined for LUN4. File `x` is flashed to this partition. --partition --lun=4 --name=aop_a --size=512KB --type-guid=D69E90A5-4CAB-0071-F6DF-AB977F141A7F --filename=aop.mbnCopy to clipboard The options used for each partition entry are as follows: - Mandatory options: --lun (mandatory for UFS, optional for emmc. Expressed as number) --name (name for the partition, a string) --size (size of the partition, generally expressed in KB) --type-guid (GUID for the partition)Copy to clipboard - Optional options: --attributes (Optional 64 bit attribute, e.g., 1000000000000004) --filename (Name of the file that is flashed to the partition) --readonly (whether the partition should be read-only, values true or false) --sparse (whether the partition is for a sprased image, values true or false)Copy to clipboard - **Linux HLOS partitions** | Partitions | Description | | --- | --- | | EFI partition | The EFI system partition (ESP) contains
`Esp.bin` and a `vfat`
file. It contains all the details necessary for UEFI to
enable systemd-boot. For more information on this image, see
[EFI image](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html#systemd_boot__efi_image). | | Rootfs partition | This partition is used to flash the
`system.img` image file. This image
consists of all the user space libraries and
binaries. | | Overlay partition | This partition is left empty. On boot, a filesystem is
seeded into this partition that is used as an overlay on a
few of the `/var` mount-points. The image in
this filesystem works as a writable storage filesystem.
Associated IMAGE\_FEATURES with this image is
`overlay-etc`. | - **Partition tool (Ptool)** To partition the storage on the device, use the `gen_partition` command to generate a `partitions.xml` file, and then process the `partitions.xml` file with Ptool. Ptool generates a GUID partition table binary that the QDL tool uses to partition the flash. The Ptool workflow is shown in the following figure: Figure : Ptool workflow ![](data:image/png;base64,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) The `generic-ufs-partitions.conf` files present in the location `/layers/meta-qcom-hwe/recipes-devtools/partition-utils/partition-confs` define all the partitions. The tool `gen_partition.py` processes and generates `partition.xml`, which is a mandatory input for `ptool.py`. As a final step, Ptool generates the files `rawprogram.xml`, `patch.xml`, `gpt_main*.bin`, and `gpt_backup*.bin`, which are crucial for the QDL tool to flash the device. To add a partition, make a partition entry in the configuration file, for example `generic-ufs-partitions.conf` with a universal unique identifier (UUID). After adding an entry, run the BitBake command to generate all necessary files: bitbake Copy to clipboard After the image build is complete, flash the image: cd /build-qcom-wayland/tmp-glibc/deploy/images/qcm6490/qcom-console-image ./qdl prog_firehose_ddr.elf rawprogram*.xml patch*.xmlCopy to clipboard ### Containerization Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) Docker containers are enabled in Qualcomm Linux. To use Docker, ensure that containerization features are enabled in Qualcomm BSP, which are integrated and tested. To use containerization on Qualcomm LE devices, ensure that `meta-virtualization` layer ([https://git.yoctoproject.org/meta-virtualization](https://git.yoctoproject.org/meta-virtualization)) is added as part of the workspace. - **Docker** Docker is enabled in the `qcom-multimedia-image`: 1. For the image recipe `qcom-multimedia-image`, `packagegroup-container` is included using `meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom-multimedia.bb`. 2. After the image is built and flashed, Docker is available on the device. 3. To check kernel compatibility, run the script `check-config.sh` on the device. To check configuration, the required kernel configurations must be enabled and the image is rebuilt. For more information, see [Kernel compatibility](https://docs.docker.com/engine/install/troubleshoot/#:~:text=Kernel%20compatibility,check%2Dconfig.sh%20script.&text=The%20script%20only%20works%20on%20Linux). 4. | `systemctl status docker`
output after any docker command is run on the
device. | `systemctl status docker`
output if no docker commands have been run on the
device. | | --- | --- | | Inactive (dead) | Active (running) | The following use cases are verified with Docker enabled: 1. Images pulled from the Docker repository for the `linux/arm64`platform and tested to run successfully on the device are as follows: - `busybox` - `python` - `alpine` - `ubuntu` - `postgres` - `mongo` - `nginx` - `redis` 2. Load Docker images from tar files using the Docker load utility. 3. Build a Docker image from the Docker file. 4. Save Docker images that were pulled/built into a `.tar` file. 5. Load Docker images, which are saved as `.tar` files. 6. Run multiple container instances of multiple images pulled/built. 7. Check for the list of Docker images loaded on the device. 8. Check for the list of active and total containers on the device. 9. Inspect Docker images using the Docker inspect utility. 10. Obtain logs from a container using the Docker logs utility. 11. Stop and kill container using Docker stop and Docker kill utilities. 12. Remove containers and Docker images from the device. - **Hardware node access from Docker** Applications running inside a Docker container might need access to device nodes and files from the device (target-host). Applications running inside containers can access device nodes. This is performed by passing the respective device nodes as an option with the Docker run command: docker run -it --rm --device= --device= Copy to clipboard The device nodes to be passed can be found under the `/dev/` directory on the device. Depending on the use case, for example, in a graphics scenario, `/dev/kgsl-3d0` is one of the nodes to be passed to the Docker using `--device=/dev/kgsl-3d0`. Storage partition access from Docker files/directories from the device (target-host) can also be exposed to the inside of a container. Exposing files/directories as bind mounts is achieved using the following command: docker run -it --rm --mount type=bind,source=,target= Copy to clipboard Run a docker container exposing multiple directories, files, and device nodes to the inside of the container using the following command: docker run -it --rm --device= --device= --mount type=bind,source=,target= --mount type=bind,source=,target= Copy to clipboard - **Docker-compose** Docker-compose is a powerful tool for defining and running multicontainer applications. It simplifies the management of the entire application stack by allowing you to define services, networks, and volumes in a single, comprehensible YAML configuration file. By default, Qualcomm Linux release includes Docker-compose to the image: - The `python3-docker-compose` package is added to the `packagegroup-qcom-multimedia` package group in `meta-qcom-distro` metadata layer. **To run docker-compose on device:** 1. Create or copy Docker-compose YAML files under writable path on a device such as `/var` (for example `/var/docker-compose-yaml`) to be used with Docker-compose on the device. 2. Ensure that the Docker images listed in your Docker-compose YAML files are available on the device. The containers started by the Docker-compose utility need these images. 3. To run Docker-compose for multiple YAML files, use the following command: docker-compose -f .yml -f .yml upCopy to clipboard Docker-compose runs and initiates Docker containers as configured from the Docker-compose YAML file. After the Docker-compose commands returns, run `docker ps -a` and docker logs `` to check if the docker containers are running as expected. To know more about Docker-compose, see [https://docs.docker.com/compose](https://docs.docker.com/compose). ### Kubernetes Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) Kubernetes is an open-source platform used to automate the deployment, scaling, and management of applications running in a container. It helps orchestrate containers across multiple devices, ensuring efficient resource utilization, high availability, and scalability of applications. For more information on Kubernetes, see [https://kubernetes.io/](https://kubernetes.io/). - **Enable Kubernetes** - Qualcomm Linux release enables Kubernetes by default in `qcom-multimedia-image`, via the following changes: - `packagegroup-qcom-k8s` is defined in `meta-qcom-hwe`. - `packagegroup-qcom-k8s` is included in `recipes-products/packagegroups/packagegroup-qcom-multimedia.bb`. - Qualcomm Linux kernel has the following kernel configurations enabled in ` arch/arm64/configs/qcom_defconfig`to support the Kubernetes runtime: - CONFIG_CGROUP_FAVOR_DYNMODS=yCopy to clipboard - CONFIG_CFS_BANDWIDTH=yCopy to clipboard - CONFIG_CGROUP_HUGETLB=yCopy to clipboard - CONFIG_NETFILTER_XT_MATCH_COMMENT=mCopy to clipboard - CONFIG_IP_NF_TARGET_REDIRECT=mCopy to clipboard - CONFIG_HUGETLBFS=yCopy to clipboard - | `systemctl status kubelet`
output if the device is not setup as a Kubernetes
node using `kubeadm`. | `systemctl status kubelt`
output if the device is setup as a Kubernetes node
using `kubeadm`. | | --- | --- | | Inactive (dead) | Active (running) | Kubernetes operates with containers that run as pods, which allow users to package an application along with its dependencies (libraries and configuration files) into a single unit. This simplifies deployment and ensures consistency across different environments and nodes of a cluster. A node in the context of Kubernetes refers to a device or a machine. The architecture of Kubernetes has two types of resources: - **Master node/control plane:** The master node is the device that acts as the control plane for Kubernetes. It makes global decisions about the cluster (like scheduling), and it detects and responds to cluster events (like starting up a new container when a replica field of deployment is unsatisfied). - **Worker node:** These nodes are devices that contain the necessary services to run containers, managed by the master node. Each worker node runs `Kubelet`, a process responsible for communication between the Kubernetes master node and the worker node; it manages the pods running on a machine. A pod is the smallest unit of execution in Kubernetes. It represents a single instance of a running process in a cluster acting as an abstraction to the containers run by Kubernetes. - **Use of Kubernetes** The following is an example of two devices connected as nodes to a common access point: - **Master node**: One of the devices is designated as the master node. - **Worker node**: The other device serves as the worker node. Deployments and pods created from the master node runs on the worker node. Deployments and pods are created using YAML files. These files define the preferred state of deployments and pods at the time of creation. Users can enter the shell of these pods/containers for debugging, monitoring, and other tasks from both the master node and the worker node. - **Set up a device as a master node** Following are the steps to set up a device as a master node: 1. Connect the device to Wi-Fi. 2. Run the following command: kubeadm init --ignore-preflight-errors=SystemVerification --apiserver-advertise-address=Copy to clipboard Note: `` is the IP address of `wlan0` interface, which is the output of `ifconfig` command after connecting the device to Wi-Fi. 3. The previous command initializes the Kubernetes control plane. To start using the cluster, run the following commands as root user: mount -o remount, rw / mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/configCopy to clipboard After successful initialization of the device as master node/control plane using `kubeadm init`, `kubeadm` prints the command that must be used for any device to join the cluster as a worker node. - **Set up a device as a worker node** To set up the device as a worker node and join the cluster, run the `kubeadm join` command, where `kubeadm` prints after initializing the master node. Note: To suppress an error that Kubernetes reports when running Docker with the vfs graph driver, run `--ignore-preflight-errors=SystemVerification flag` with the `kubeadm join` command. Note: Each node in a cluster is supposed to have a different hostname. If when trying to add more than one device with the same hostname to a single cluster fails, change the hostname of the device using the `hostname ` command. - **Create deployment and pods from a master node** To create deployments/pods on the worker node, run the following command: kubectl apply -f Copy to clipboard Create your own YAML file at a location such as `/var`. Example for YAML files: - YAML file to create a deployment with the Ubuntu image: **ubuntu-deployment.yaml** apiVersion: apps/v1 kind: Deployment metadata: labels: app: ubuntu-deployment name: ubuntu-deployment spec: replicas: 2 selector: matchLabels: app: ubuntu-deployment template: metadata: labels: app: ubuntu-deployment spec: containers: - name: ubuntu-depl-pod image: ubuntu:latest command: ["sleep", "3650d"]Copy to clipboard - YAML file to create a pod with the Ubuntu image: **ubuntu-pod.yaml** apiVersion: v1 kind: Pod metadata: name: ubuntu-pod labels: app: ubuntu-pod spec: containers: - name: ubuntu image: ubuntu:latest command: ["sleep", "604800"] imagePullPolicy: IfNotPresent restartPolicy: AlwaysCopy to clipboard - **Using Kubernetes pods with `kubectl`** - **Using `kubectl` get nodes in the cluster** To list the nodes in the cluster, run the following command on the master node: kubectl get nodesCopy to clipboard - **Using `kubectl` get deployments present in the cluster** To list the deployments present in the cluster, run the following command on the master node: kubectl get deploymentCopy to clipboard - **Using `kubectl` get pods present in the cluster** To list the pods present in the cluster, run the following command on the master node: kubectl get podsCopy to clipboard - **Access the shell of a pod from the master node** To access the shell instance of a pod from the master node, run the following command on the master node: kubectl exec -it -- Copy to clipboard - **Access shell of a pod from the worker node** To access the shell instance of a pod (container) using Docker, run the following command on the worker node: docker exec -it Copy to clipboard Note: `` is obtained using listing all the containers using `docker ps -a` command. **Changes made in Docker and Kubernetes in contrast to the upstream solution** - Recipe `meta-qcom-hwe`/`recipes-containers`/`docker`/`docker-ce_git.bbappend` changes `/lib/systemd/system/docker.service`. During this change, `--exec-opt native.cgroupdriver=systemd` is passed to a `dockerd` command that runs as part of `ExecStart` of the service. This is performed to keep parity with `cgroupdriver` between Docker and Kubernetes. - Recipe `meta-qcom-hwe`/`recipes-containers`/`kubernetes`/`kubernetes_git.bbappend` changes `/lib/systemd/system/kubelet.service.d/10-kubeadm.conf`. During this change, `--fail-swap-on=false` is passed as part of `KUBELET_EXTRA_ARGS`. This is performed because Kubernetes expected the swap to be **OFF**. As the platform software of Qualcomm has zram enabled, swap is set to **ON**. - The upstream `kubelet.service` attempts to start automatically upon device bootup, even if the device is not configured as a Kubernetes node. However, this behavior consumes resources and impacts power efficiency. To address this, `kubelet.service` is modified by removing `WantedBy=multi-user.target` in the `meta-qcom-hwe/recipes-containers/kubernetes/kubernetes_git.bbappend` file. Now, it starts when the device is set up as a Kubernetes node using `kubeadm`, rather than automatically in `multi-user.target`. ### Properties Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) Properties (`property-vault`) provide functionality to store and share key-value pairs stored as strings across the system. Any software component can share any value for a particular key and any other process can access the value by using the same key. `property-vault` gives an option to define persistent properties across reboot. Components can use `property-vault`to share specific information, which might be relevant to any other module on the device. These key-value pairs can be accessed using the command-line interface (CLI). - **Properties using CLI** To set a property using the CLI, use the following command: setprop "my-key" "my-value"Copy to clipboard To access a property using the CLI, use the following command: getprop "my-key"Copy to clipboard # Result of the previous command: my-value To set a property using the CLI and persist it across reboots, use the following command: setprop "persist.my-key" "my-value"Copy to clipboard - **Properties in C/C++ source files** Setting up to use properties in C/C++ source files: 1. If you must use properties such as `property-vault` in a recipe, for example, `example-recipe.bb`, add a dependency on `property-vault`: DEPENDS = "glib-2.0 property-vault" RDEPENDS:${PN} = "property-vault"Copy to clipboard 2. Change `make`files: 1. If you are using `automake`: `configure.ac` ... PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes, AC_MSG_ERROR(GLib >= 2.16 is required)) GLIB_CFLAGS="$GLIB_CFLAGS" GLIB_LIBS="$GLIB_LIBS" AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) AC_CONFIG_FILES([Makefile]) ...Copy to clipboard `Makefile.am` root_sbindir = "/sbin" root_sbin_PROGRAMS = property-test property_test_SOURCES = source.c property_test_CFLAGS = @GLIB_CFLAGS@ property_test_LDFLAGS = @GLIB_LIBS@ -lpropertyvaultCopy to clipboard 2. If you are using `cmake`: `CMakeList.txt` set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -lpthread -lrt -lm -lglib-2.0 -ldl -latomic") target_link_libraries (techteamlocalibname propertyvault)Copy to clipboard 3. Modify the source files to `get` and `set` properties: `source.c` #include "properties.h" int main() { // setting a property property_set("my-key", "my-value"); // getting a property char paramstr[PROPERTY_VALUE_MAX]; property_get("my-key", paramstr, ""); // value gets stored in paramstr // setting a property and persisting it across reboot property_set("persist.my-key", "my-value"); return 0; }Copy to clipboard ### Logging shim for syslog() Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) Logs from Qualcomm proprietary and open-source projects are logged into `syslog`. The `syslog()` is used to write logs on the device. Use `rsyslog` as the logging system to process logs according to specified rules. `rsyslog` can accept inputs not only from system and kernel messages, but also accepts logs from applications that use `syslog protocol` for logging. When an application makes a `syslog` call, `rsyslog` redirects these logs based on its configuration. `rsyslog` configuration is found at `/etc/rsyslog.conf` or `/etc/ryslog.d` directory. Use the `logrotate` service for archiving old logs. ### Persist partition Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) The persist partition defined for the UFS is used to store persistent data that BSP software components require across reboots. User-requested operations must not erase this data during the device lifecycle. - **Persist mount point** The `/var/persist` directory serves as a mount point for a filesystem, which is created on the partition named persist. The recipe `overlayfs-qcom-paths_1.0.bb` is responsible for creating the directory on the rootfs and installs the systemd unit `var-persist.mount` to `local-fs.target`. At boot, the systemd unit `var-persist.mount` mounts `/dev/disk/by-partlabel/persist` to `/var/persist`. The persist mount point is displayed by running the mount command as follows: sh-5.1# mount | grep persist /dev/sda10 on /var/persist type ext4 (rw,relatime,rootcontext=system_u:object_r:qcom_persist_t:s0,seclabel,stripe=128)Copy to clipboard - **Resize persist partition** Resize the overlay partition using the recipe `resize-partitions.bb` and `resize-partition.service.in` files. The resize-partition service runs at the device bootup to create and set the filesystem according to the size of the partition. ### Secondary virtual machine Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) ### About this task This section provides the steps to build a Qualcomm Linux image with guest virtual machine (VM) support, including VM management tools (`crosvm`, `qemu`), the kernel image, and a minimal rootfs for the guest VM. Once built, it generates a Guest VM kernel (image) and rootfs (`initrd.img`), which are then packaged into the system root filesystem. The following subsections provide a step-by-step guide on how users can enable VM support for the image. ### Procedure 1. **Setup the host** Install clang on the host machine using the following command: sudo apt install clang-11Copy to clipboard 2. **Enable meta-rust layer** The meta-rust layer provides rust compiler (rustc) and package manager (cargo) to compile crosvm, which is implemented in rust language. Add the meta-rust layer to EXTRALAYERS in the `meta-qcom-distro/conf/bblayers.conf` directory. `vi conf/bblayers.conf` EXTRALAYERS ?= " \ ${WORKSPACE}/layers/meta-rust \ "Copy to clipboard 3. **Upgrade the rust version** Create a file `meta-qcom-distro/conf/distro/include/rust_version.inc` with the following content: `vi meta-qcom-distro/conf/distro/include/rust_version.inc` # include this in your distribution to easily switch between versions # just by changing RUST_VERSION variable RUST_VERSION ?= "1.73.0" PREFERRED_VERSION_cargo ?= "${RUST_VERSION}" PREFERRED_VERSION_cargo-native ?= "${RUST_VERSION}" PREFERRED_VERSION_libstd-rs ?= "${RUST_VERSION}" PREFERRED_VERSION_rust ?= "${RUST_VERSION}" PREFERRED_VERSION_rust-cross-${TARGET_ARCH} ?= "${RUST_VERSION}" PREFERRED_VERSION_rust-llvm ?= "${RUST_VERSION}" PREFERRED_VERSION_rust-llvm-native ?= "${RUST_VERSION}" PREFERRED_VERSION_rust-native ?= "${RUST_VERSION}"Copy to clipboard Include the `rust_version.inc` file in the `meta-qcom-distro/conf/distro/qcom-wayland.conf` path. `conf/distro/qcom-wayland.conf` require conf/distro/include/rust_version.incCopy to clipboard 4. **Add VM package into image** Create a packagegroup as `packagegroup-qcom-vm` and add it to the image via `packagegroup-qcom`. Update the packages, `RDEPENDS:${PN}` variables and add `RDEPENDS:packagegroup-qcom-vm` as follows: `meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom.bb` PACKAGES += "packagegroup-qcom-vm" RDEPENDS:${PN} += "packagegroup-qcom-vm" RDEPENDS:packagegroup-qcom-vm = "\ crosvm \ pack-svm \ kvmtool \ qemu \ "Copy to clipboard 5. **Build an image** To build an image, use the following command: bitbake qcom-console-imageCopy to clipboard 6. **Launch VM** To see the expected output as mentioned in [Guest VM build support](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-3/features.html#guest-vm-build-support), launch the VM. ### Handle out-of-tree kernel modules and device tree using recipes Source: [https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html](https://docs.qualcomm.com/doc/80-70014-27/topic/platform_software_features.html) For building out-of-tree kernel module, see [Add kernel module](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-3/customize.html#add-kernel-module). For device-tree/device-tree blob management, see [Platform support](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-3/customize.html#platform-support_0). Last Published: Jul 11, 2024 [Previous Topic Overview](https://docs.qualcomm.com/bundle/publicresource/80-70014-27/topics/intro_yocto_linux_qualcomm.md) [Next Topic User customizations](https://docs.qualcomm.com/bundle/publicresource/80-70014-27/topics/user_customizations.md)