From b883f22f031b1314b7abb73d5a6b2188ca56e499 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Mon, 4 Mar 2019 12:09:42 +0200 Subject: [PATCH 01/42] Docs from "PSA core 5.12 PR #986". --- .gitignore | 2 + docs/api/security/lifecycle/generate_png.sh | 3 ++ docs/api/security/lifecycle/psa_lifecycle.dot | 11 ++++ docs/api/security/lifecycle/psa_lifecycle.md | 26 +++++++++ docs/api/security/lifecycle/psa_lifecycle.png | Bin 0 -> 73977 bytes docs/api/security/platform_service.md | 11 ++++ docs/api/security/psa_attestation.md | 51 ++++++++++++++++++ docs/api/security/psa_crypto.md | 20 +++++++ docs/api/security/psa_internal_storage.md | 20 +++++++ docs/api/security/psa_protected_storage.md | 15 ++++++ docs/api/security/security.md | 16 ++++-- docs/api/security/spm.md | 13 +++++ docs/api/security/trusted_storage.md | 3 -- docs/reference/technology/psa/psa.md | 45 ++++++++++++++++ 14 files changed, 229 insertions(+), 7 deletions(-) create mode 100644 docs/api/security/lifecycle/generate_png.sh create mode 100644 docs/api/security/lifecycle/psa_lifecycle.dot create mode 100644 docs/api/security/lifecycle/psa_lifecycle.md create mode 100644 docs/api/security/lifecycle/psa_lifecycle.png create mode 100644 docs/api/security/platform_service.md create mode 100644 docs/api/security/psa_attestation.md create mode 100644 docs/api/security/psa_crypto.md create mode 100644 docs/api/security/psa_internal_storage.md create mode 100644 docs/api/security/psa_protected_storage.md create mode 100644 docs/api/security/spm.md delete mode 100644 docs/api/security/trusted_storage.md create mode 100644 docs/reference/technology/psa/psa.md diff --git a/.gitignore b/.gitignore index 6e92f57d46..64f41bd5cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ tags +.DS_Store +.idea/ diff --git a/docs/api/security/lifecycle/generate_png.sh b/docs/api/security/lifecycle/generate_png.sh new file mode 100644 index 0000000000..5f48ebae6b --- /dev/null +++ b/docs/api/security/lifecycle/generate_png.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +dot -Tpng psa_lifecycle.dot -o psa_lifecycle.png \ No newline at end of file diff --git a/docs/api/security/lifecycle/psa_lifecycle.dot b/docs/api/security/lifecycle/psa_lifecycle.dot new file mode 100644 index 0000000000..215cae34ad --- /dev/null +++ b/docs/api/security/lifecycle/psa_lifecycle.dot @@ -0,0 +1,11 @@ +digraph { + PSA_LIFECYCLE_ASSEMBLY_AND_TEST -> PSA_LIFECYCLE_ASSEMBLY_AND_TEST [label=<ITS reset>]; + PSA_LIFECYCLE_ASSEMBLY_AND_TEST -> PSA_LIFECYCLE_PSA_ROT_PROVISIONING [style=dashed, color=grey, label=<ITS reset and reboot>]; + PSA_LIFECYCLE_PSA_ROT_PROVISIONING -> PSA_LIFECYCLE_SECURED [style=dashed, color=grey, label="reboot"]; + PSA_LIFECYCLE_SECURED -> PSA_LIFECYCLE_NON_PSA_ROT_DEBUG [style=dashed, color=grey, label="reboot"]; + PSA_LIFECYCLE_SECURED -> PSA_LIFECYCLE_RECOVERABLE_PSA_ROT_DEBUG [style=dashed, color=grey, label="reboot"]; + PSA_LIFECYCLE_SECURED -> PSA_LIFECYCLE_DECOMMISSIONED [style=dashed, color=grey, label="reboot"]; + + PSA_LIFECYCLE_NON_PSA_ROT_DEBUG -> PSA_LIFECYCLE_SECURED [style=dashed, color=grey, label="reboot"]; + PSA_LIFECYCLE_RECOVERABLE_PSA_ROT_DEBUG -> PSA_LIFECYCLE_SECURED [style=dashed, color=grey, label="reboot"]; +} \ No newline at end of file diff --git a/docs/api/security/lifecycle/psa_lifecycle.md b/docs/api/security/lifecycle/psa_lifecycle.md new file mode 100644 index 0000000000..cc12842b10 --- /dev/null +++ b/docs/api/security/lifecycle/psa_lifecycle.md @@ -0,0 +1,26 @@ +## PSA lifecycle + +The PSA lifecycle enables fine-grained control of the target root of trust (RoT). + +The following is a state machine depiction of the PSA lifecycle: + +![lifecycle](./psa_lifecycle.png) + + **Note:** PSA Lifecycle is not a standalone feature; it depends on PSA bootloader support, which has not yet been introduced in Mbed OS. The only lifecycle change currently supported is `PSA_LIFECYCLE_ASSEMBLY_AND_TEST` to `PSA_LIFECYCLE_ASSEMBLY_AND_TEST`, which you can use in testing to reset the device RoT state. +All of the lifecycle changes represented by dashed lines in the diagram above have not yet been implemented. + + +You can specify the lifecycle during build time using the `MBED_CONF_LIFECYCLE_STATE` macro. The default lifecycle value is `PSA_LIFECYCLE_ASSEMBLY_AND_TEST`. + +In Mbed OS, the PSA lifecycle is implemented as part of the [platform service](../apis/platform_service.html). + +### PSA lifecycle class reference + +[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/lifecycle_8h.html) + +### Example + + +### Related content + +* [Platform Security Architecture - Firmware Framework](https://pages.arm.com/psa-resources-ff.html). diff --git a/docs/api/security/lifecycle/psa_lifecycle.png b/docs/api/security/lifecycle/psa_lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..9d90e6ce972f85bedd04c2e8d63640bd148b835a GIT binary patch literal 73977 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 QLx6u?%d5*($ykK^4+lC7*Z=?k literal 0 HcmV?d00001 diff --git a/docs/api/security/platform_service.md b/docs/api/security/platform_service.md new file mode 100644 index 0000000000..5da0558f85 --- /dev/null +++ b/docs/api/security/platform_service.md @@ -0,0 +1,11 @@ +## Platform service + +The Platform service introduces System Reset and PSA Lifecycle APIs. + +The System Reset API enables you to request system reset from a Non-Secure Processing Environment (NSPE). + +### Platform service class reference + +[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/lifecycle_8h.html) + +### Example diff --git a/docs/api/security/psa_attestation.md b/docs/api/security/psa_attestation.md new file mode 100644 index 0000000000..5fc2c22f55 --- /dev/null +++ b/docs/api/security/psa_attestation.md @@ -0,0 +1,51 @@ +## PSA Attestation + +The PSA initial attestation service enables an application to prove a device's identity to a caller during the authentication process. + +The initial attestation service creates a token that contains a fixed set of device-specific data, on request. To sign the token, the device must contain an attestation key pair, which is unique per device. The service uses the attestation private key to sign the token, and the caller uses the public key to verify the token's authenticity. + +The PSA initial attestation service is based on the TF-M attestation service, which is available in the [TF-M repository]( https://git.trustedfirmware.org/trusted-firmware-m.git/). + +### Specification +The initial attestation service exposes the following PSA interface: +``` +enum psa_attest_err_t +psa_initial_attest_get_token(const uint8_t *challenge_obj, + uint32_t challenge_size, + uint8_t *token, + uint32_t *token_size); +enum psa_attest_err_t +psa_initial_attest_get_token_size(uint32_t challenge_size, + uint32_t *token_size); +psa_status_t +psa_attestation_inject_key(const uint8_t *key_data, + size_t key_data_length, + psa_key_type_t type, + uint8_t *public_key_data, + size_t public_key_data_size, + size_t *public_key_data_length); +``` + +To generate or import a key pair and export the public key in binary format, call the `psa_attestation_inject_key()` function. The function stores the attestation key as a persistent key with a specific key-id. + +The size of the token that the service creates is highly dependent on the number of software components in the system and the provided attributes of these components. The caller must allocate a sufficiently large buffer for the initial attestation service to create the token into. + +To get the exact size of the created token, call the `psa_initial_attest_get_token_size()` function. + +You must call the `psa_crypto_init()` API before calling the attestation API. + +The initial attestation token consists of claims. A claim is a data item, which is represented as a key-value pair. + +For the list of claims that are included in the token, see [the TF-M Initial Attestation Service Integration Guide](https://git.trustedfirmware.org/trusted-firmware-m.git/tree/docs/user_guides/services/tfm_attestation_integration_guide.md). + +The token might also include data about the distinct software components on the device. The bootloader must provide this data encoded in TLV format. + +In the current implementation, a bootloader does not exist in single and dual V7; therefore, we have provided temporary hardcoded boot status data claims in the `attestation_bootloader_data.c` file, including `HW version`, `Boot seed`, and some `Software components` entries. `Security lifecycle` should also be part of the boot status, but in the current implementation, it is provided by calling the `psa_security_lifecycle_state()` API directly. + +### PSA attestation class reference + +[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/???.html) + +### Related content + +* [PSA specification](https://pages.arm.com/PSA-APIs). diff --git a/docs/api/security/psa_crypto.md b/docs/api/security/psa_crypto.md new file mode 100644 index 0000000000..470e3c57a0 --- /dev/null +++ b/docs/api/security/psa_crypto.md @@ -0,0 +1,20 @@ +## PSA Crypto + +### Description + +TODO: Jaeden + + +### Specification +TODO: Jaeden - describe here about APIs being available from NSPE and SPE +about differences in behaviour if any + +PSA specification can be found here [PSA Secure Storage](https://pages.arm.com/PSA-APIs) + +### Doxygen + +TODO: Jaeden - find PSA crypto APIs in doxygen web site. I was not able to find it. + Perhaps MBED_TLS_PSA_CRYPTO_C macro should be added doxyfile_options file so PSA crypto docs will be generated + Once addded Doxygen will be generate - perhaps on next day fix the link below + +[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/psa__prot__internal__storage_8h.html) \ No newline at end of file diff --git a/docs/api/security/psa_internal_storage.md b/docs/api/security/psa_internal_storage.md new file mode 100644 index 0000000000..9fec074e10 --- /dev/null +++ b/docs/api/security/psa_internal_storage.md @@ -0,0 +1,20 @@ +## PSA internal storage + +PSA internal storage APIs enable saving data to and retrieving data from a PSA internal flash. + +The implementation of PSA internal storage varies depending on the target type: + +* On a single core ARMv7-M target, PSA internal storage APIs are implemented by calling the default internal TDBStore instance. +* On PSA targets that implement Secure Partition Manager (SPM), PSA internal storage is implemented as a secure service. The service uses an access control list to ensure that it only accesses entries created from the Non-Secure Processing Environment (NSPE). + +### PSA internal storage class reference + +[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/psa__prot__internal__storage_8h.html) + +### Example + +### Related content + +* [Storage overview (Mbed OS)](..apis/storage.html). + +* [PSA secure storage](https://pages.arm.com/PSA-APIs). diff --git a/docs/api/security/psa_protected_storage.md b/docs/api/security/psa_protected_storage.md new file mode 100644 index 0000000000..36ac679365 --- /dev/null +++ b/docs/api/security/psa_protected_storage.md @@ -0,0 +1,15 @@ +## PSA protected storage + +PSA protected storage APIs enable saving data to and retrieving data from PSA protected storage. + +Unlike [PSA internal storage](../apis/psa_internal_storage.html), PSA protected storage always runs on the NSPE side and redirects calls to the KVStore instance. + +### PSA protected storage class reference + +[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/protected__storage_8h.html) + +### Related content + +* [API specification in Mbed OS](../apis/storage.html) + +* [PSA Secure Storage](https://pages.arm.com/PSA-APIs). diff --git a/docs/api/security/security.md b/docs/api/security/security.md index 09c84749bf..0e8a8e1361 100644 --- a/docs/api/security/security.md +++ b/docs/api/security/security.md @@ -2,10 +2,18 @@ Security on Arm Mbed OS is divided into the following parts: -- Platform Security Architecture (PSA). For information about working with PSA in the context of Mbed OS, please see [Mbed PSA asset protection](../apis/psa-api.html). +- [Platform Security Architecture (PSA) Secure Partition Manager (SPM)](../spm.html) - Accesses secure services within a secure processing environment (on PSA targets only). - For full details, please see the [PSA site](https://developer.arm.com/products/architecture/security-architectures/platform-security-architecture). +- [PSA internal storage](../apis/psa_internal_storage.html) - Saves the PSA root of trust (RoT) state. -- Mbed TLS. For information about working with Mbed TLS in the context of Mbed OS, please see [Connection security through Arm Mbed TLS](../apis/tls.html). +- [PSA protected storage](../apis/psa_protected_storage.html) - Saves data to and retrieves data from PSA protected storage. - For full details, please see the [Mbed TLS site](https://tls.mbed.org/). +- [PSA Crypto](../apis/psa_crypto.html) - A reference implementation of the cryptography interface of PSA. + +- [Mbed TLS](../apis/tls.html) - A comprehensive SSL/TLS solution. For full details, see the [Mbed TLS site](https://tls.mbed.org/). + +- [PSA attestation](../apis/psa_attestation.html) - Enables an application to prove a device's identity to a caller during the authentication process. + +- [PSA lifecycle](../apis/lifecycle/psa_lifecycle.html) - Enables fine-grained control of the target root of trust (RoT). + +- [Device key](../apis/DeviceKey.html) - Implements key derivation from a root of trust key. diff --git a/docs/api/security/spm.md b/docs/api/security/spm.md new file mode 100644 index 0000000000..fa93238fe7 --- /dev/null +++ b/docs/api/security/spm.md @@ -0,0 +1,13 @@ +## SPM APIs + +Platform Security Architecture (PSA) Secure Partition Manager (SPM) APIs enable calling secure services within the secure processing environment. + +### SPM class reference + +[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/group___s_p_m.html) + +### Example + +### Related content + +* [Platform Security Architecture - Firmware Framework](https://pages.arm.com/psa-resources-ff.html). diff --git a/docs/api/security/trusted_storage.md b/docs/api/security/trusted_storage.md deleted file mode 100644 index fc4ab0003c..0000000000 --- a/docs/api/security/trusted_storage.md +++ /dev/null @@ -1,3 +0,0 @@ -

PSA internal trusted storage reference API

- -Mbed OS uses PSA internal trusted storage APIs to support PSA specifications. For more information about PSA internal trusted storage API, please refer to [the documentation](https://github.com/ARM-software/psa-arch-tests). diff --git a/docs/reference/technology/psa/psa.md b/docs/reference/technology/psa/psa.md new file mode 100644 index 0000000000..72260aede8 --- /dev/null +++ b/docs/reference/technology/psa/psa.md @@ -0,0 +1,45 @@ +

The Mbed implementation of PSA

+ +The Mbed implementation of the Platform Security Architecture (PSA) provides root of trust services and infrastructure for developing IoT applications. + +When Mbed OS is running on a PSA Security Model compliant target, the Mbed implementation of PSA helps to protect cryptographic assets, credentials and critical code sections by providing an isolation between a Secure Processing Environment (SPE) and a Non-Secure Processing Environment (NSPE). The Secure Partition Manager (SPM), which uses the target's hardware features, manages the isolation. The SPM provides standardized Inter-Process Communication (IPC) APIs that you can use regardless of system architecture (v8M, TEE on Cortex-A) or inside another chip. + +The Mbed implementation of PSA bridges the differences between PSA platforms and non-PSA platforms for application developers, allowing them to use the same standard PSA APIs on both platform types. + +The Mbed implementation of PSA allows you to choose the platform type at later phase according to the final application threat model. + +![diagram](https://s3-us-west-2.amazonaws.com/mbed-os-docs-images/PSA-standardized-Interfaces-diagram.png)PSA diagram + +### SPM + +The SPM is a PSA-compliant software hypervisor that creates and manages independent secure partitions on Arm Cortex®-M microcontrollers. It increases resilience against malware and protects secrets from leaking between different modules in the same application. The SPM complements other important security features, such as safe firmware updates and secure crypto libraries. + +The SPM provides hardware-enforced partitions for individual code blocks by limiting access to memories and peripherals using the existing hardware security features of the Cortex®-M microcontrollers. It isolates software in partitions, managing the execution of software within those partitions and providing IPC between the partitions. Correct use of SPM prevents malware from becoming resident on the device and enables protection of device secrets, such as cryptographic keys. + +#### Isolating partitions in the SPE + +The SPM and the secure partitions are located in the SPE, isolating them from the NSPE, which contains the application firmware, OS kernel and libraries and other nonsecure hardware resources. + +A secure partition is a container for one or more root of trust services, and a platform may have multiple secure partitions. Secure partitions provide the execution environment for security functionality. + +Platform hardware, such as the Security Attribution Unit (SAU) and Memory Protection Unit (MPU) in the ARMv8-M platforms, enforces the separation of partitions. Other platforms may use different mechanisms to provide equivalent isolation for the partitions. + +### Platform types + +The Mbed implementation of PSA supports the following platform types: + +- Non-PSA platform: These are single core ARMv7-M targets. On these targets, the Mbed implementation of PSA provides the same PSA services exposing PSA APIs as it would on PSA targets. The PSA emulation layer allows seamless software portability to more security-oriented targets. + +- Asymmetric Multiprocessing (AMP) systems: Multicore ARMv7-M targets (for example, PSoC6 featuring CM4 and CM0+ cores). On these targets, one of the cores is dedicated to PSA use only and implements SPE. The Mbed implementation of PSA provides PSA API proxy implementation on a nonsecure core, which redirects execution to the SPE. + +- ARMv8-M: Generation of ARM processors featuring TrustZone-M architecture. PSA support for these platforms is based on a *specialized* [TrustedFirmware-M](https://www.trustedfirmware.org) implementation. + +### RoT services + +The Mbed implementation of PSA provides the following services: + +- PSA [RoT](../introduction/glossary.html) internal storage. +- [PSA Crypto APIs (on GitHub)](https://github.com/ARMmbed/mbed-crypto/tree/development/docs). +- [PSA attestation](../apis/psa_attestation.html). +- [PSA lifecycle](../apis/psa_lifecycle.html). +- [PSA platform service](../apis/platform_service.html). From aeddeda38393eb48b604c6b948485d5524b4f68a Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Tue, 5 Mar 2019 11:09:26 +0200 Subject: [PATCH 02/42] Update docs.json --- docs.json | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/docs.json b/docs.json index e34d9004f8..b434850cf1 100644 --- a/docs.json +++ b/docs.json @@ -518,16 +518,25 @@ "path": "docs/api/security/security.md" }, "sources": [{ - "path": "docs/api/security/psa.md" + "path": "docs/api/security/psa_attestation.md" }, { - "path": "docs/api/security/TLS.md" + "path": "docs/api/security/psa_crypto.md" }, { - "path": "docs/api/security/Devicekey.md" + "path": "docs/api/security/lifecycle/psa_lifecycle.md" + }, + { + "path": "docs/api/security/platform_service.md" + }, + { + "path": "docs/api/security/spm.md" + }, + { + "path": "docs/api/security/TLS.md" }, { - "path": "docs/api/security/trusted_storage.md" + "path": "docs/api/security/Devicekey.md" } ] }, @@ -598,6 +607,12 @@ }, { "path": "docs/api/storage/NVStore.md" + }, + { + "path": "docs/api/storage/psa_internal_storage.md" + }, + { + "path": "docs/api/storage/psa_protected_storage.md" } ] } @@ -687,7 +702,7 @@ "path": "docs/reference/technology/storage.md" }, { - "path": "docs/reference/technology/USB.md" + "path": "docs/api/security/psa.md" }, { "path": "docs/reference/runtime/Memory.md" From 4fa65b2f262b9c0d402bdda3634d2f5e7c0ba6d4 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Tue, 5 Mar 2019 13:48:52 +0200 Subject: [PATCH 03/42] Updated docs.json and file locations. --- docs.json | 95 ++++--------------- docs/api/security/psa.md | 42 -------- .../psa_internal_storage.md | 0 .../psa_protected_storage.md | 0 4 files changed, 16 insertions(+), 121 deletions(-) delete mode 100644 docs/api/security/psa.md rename docs/api/{security => storage}/psa_internal_storage.md (100%) rename docs/api/{security => storage}/psa_protected_storage.md (100%) diff --git a/docs.json b/docs.json index b434850cf1..db0d30d97d 100644 --- a/docs.json +++ b/docs.json @@ -107,26 +107,6 @@ } ] }, - { - "title": "Mbed OS bare metal", - "description": "The Mbed OS bare metal profile", - "slug": "bare-metal", - "type": "markdown", - "chapters": [{ - "title": "Introduction", - "intro": { - "path": "docs/bare_metal.md" - }, - "sources": [] - }, - { - "title": "Bare metal APIs", - "sources": [{ - "path": "docs/baremetal_api.md" - }] - } - ] - }, { "title": "APIs", "description": "The APIs of Mbed OS: platform, drivers, RTOS, connectivity, security and storage", @@ -356,40 +336,6 @@ } ] }, - { - "title": "USB", - "intro": { - "path": "docs/api/usb/usb_component.md" - }, - "sources": [{ - "path": "docs/api/usb/USBSerial.md" - }, - { - "path": "docs/api/usb/USBAudio.md" - }, - { - "path": "docs/api/usb/USBHID.md" - }, - { - "path": "docs/api/usb/USBCDC.md" - }, - { - "path": "docs/api/usb/USBMSD.md" - }, - { - "path": "docs/api/usb/USBMIDI.md" - }, - { - "path": "docs/api/usb/USBMouse.md" - }, - { - "path": "docs/api/usb/USBKeyboard.md" - }, - { - "path": "docs/api/usb/USBMouseKeyboard.md" - } - ] - }, { "title": "Network Socket", "intro": { @@ -656,22 +602,19 @@ "path": "docs/reference/technology/connectivity/cellular.md" }, { - "path": "docs/reference/technology/mesh/thread_intro.md" - }, - { - "path": "docs/reference/technology/mesh/thread_commissioning.md" + "path": "docs/reference/technology/mesh/quick_start_intro.md" }, { - "path": "docs/reference/technology/mesh/thread_faq.md" + "path": "docs/reference/technology/mesh/thread_intro.md" }, { - "path": "docs/reference/technology/mesh/wisun_intro.md" + "path": "docs/reference/technology/mesh/quick_start_hw.md" }, { - "path": "docs/reference/technology/mesh/quick_start_intro.md" + "path": "docs/reference/technology/mesh/thread_commissioning.md" }, { - "path": "docs/reference/technology/mesh/quick_start_hw.md" + "path": "docs/reference/technology/mesh/thread_faq.md" }, { "path": "docs/reference/technology/mesh/02_N_arch.md" @@ -762,9 +705,6 @@ { "path": "docs/reference/configuration/mesh.md" }, - { - "path": "docs/reference/configuration/BLE.md" - }, { "path": "docs/reference/configuration/lorawanconfig.md" }, @@ -993,9 +933,6 @@ { "path": "docs/tutorials/using_apis/flow_control.md" }, - { - "path": "docs/tutorials/using_apis/Mbed_USB_WAV_Audio_Player/Mbed_USB_WAV_Audio_Player.md" - }, { "path": "docs/tutorials/using_apis/connectivity/light-control.md" }, @@ -1314,35 +1251,35 @@ "sub_chapters": [{ "title": "Introduction", "intro": { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/intro.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/intro.md" }, "sources": [] }, { "title": "Stage 1: Evaluation", "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage1.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage1.md" }] }, { "title": "Stage 2: Proof of concept", "intro": { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/intro_s_2.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/intro_s_2.md" }, "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/1_hardware.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/1_hardware.md" }, { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/3_connectivity.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/3_connectivity.md" }, { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/2_software.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/2_software.md" }, { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/4_security.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/4_security.md" }, { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/6_example.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/6_example.md" } ] @@ -1350,19 +1287,19 @@ { "title": "Stage 3: Prototype", "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage3.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage3.md" }] }, { "title": "Stage 4: Pilot", "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage4.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage4.md" }] }, { "title": "Stage 5: Production", "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage5.md" + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage5.md" }] } ] diff --git a/docs/api/security/psa.md b/docs/api/security/psa.md deleted file mode 100644 index e27bec41fb..0000000000 --- a/docs/api/security/psa.md +++ /dev/null @@ -1,42 +0,0 @@ -

The Mbed implementation of PSA

- -The Mbed implementation of the Platform Security Architecture (PSA) provides root of trust services and infrastructure for developing IoT applications. - -When Mbed OS is running on a PSA Security Model compliant target, the Mbed implementation of PSA helps to protect cryptographic assets, credentials and critical code sections by providing an isolation between a Secure Processing Environment (SPE) and a Non-Secure Processing Environment (NSPE). The Secure Partition Manager (SPM), which uses the target's hardware features, manages the isolation. The SPM provides standardized Inter-Process Communication (IPC) APIs that you can use regardless of system architecture (v8M, TEE on Cortex-A) or inside another chip. - -The Mbed implementation of PSA bridges the differences between PSA platforms and non-PSA platforms for application developers, allowing them to use the same standard PSA APIs on both platform types. - -The Mbed implementation of PSA allows you to choose the platform type at later phase according to the final application threat model. - -![diagram](https://s3-us-west-2.amazonaws.com/mbed-os-docs-images/PSA-standardized-Interfaces-diagram.png)PSA diagram - -### SPM - -The SPM is a PSA-compliant software hypervisor that creates and manages independent secure partitions on Arm Cortex®-M microcontrollers. It increases resilience against malware and protects secrets from leaking between different modules in the same application. The SPM complements other important security features, such as safe firmware updates and secure crypto libraries. - -The SPM provides hardware-enforced partitions for individual code blocks by limiting access to memories and peripherals using the existing hardware security features of the Cortex®-M microcontrollers. It isolates software in partitions, managing the execution of software within those partitions and providing IPC between the partitions. Correct use of SPM prevents malware from becoming resident on the device and enables protection of device secrets, such as cryptographic keys. - -#### Isolating partitions in the SPE - -The SPM and the secure partitions are located in the SPE, isolating them from the NSPE, which contains the application firmware, OS kernel and libraries and other nonsecure hardware resources. - -A secure partition is a container for one or more root of trust services, and a platform may have multiple secure partitions. Secure partitions provide the execution environment for security functionality. - -Platform hardware, such as the Security Attribution Unit (SAU) and Memory Protection Unit (MPU) in the ARMv8-M platforms, enforces the separation of partitions. Other platforms may use different mechanisms to provide equivalent isolation for the partitions. - -### Platform types - -The Mbed implementation of PSA supports the following platform types: - -- Non-PSA platform: These are single core ARMv7-M targets. On these targets, the Mbed implementation of PSA provides the same PSA services exposing PSA APIs as it would on PSA targets. The PSA emulation layer allows seamless software portability to more security-oriented targets. - -- Asymmetric Multiprocessing (AMP) systems: Multicore ARMv7-M targets (for example, PSoC6 featuring CM4 and CM0+ cores). On these targets, one of the cores is dedicated to PSA use only and implements SPE. The Mbed implementation of PSA provides PSA API proxy implementation on a nonsecure core, which redirects execution to the SPE. - -- ARMv8-M: Generation of ARM processors featuring TrustZone-M architecture. PSA support for this platforms is in final stages of development and will be added to the list of platforms supported by the Mbed implementation of PSA shortly. - -### RoT services - -The Mbed implementation of PSA provides the following services: - -- PSA [RoT](../introduction/glossary.html) internal storage. -- [PSA Crypto APIs (on GitHub)](https://github.com/ARMmbed/mbed-crypto/tree/development/docs). diff --git a/docs/api/security/psa_internal_storage.md b/docs/api/storage/psa_internal_storage.md similarity index 100% rename from docs/api/security/psa_internal_storage.md rename to docs/api/storage/psa_internal_storage.md diff --git a/docs/api/security/psa_protected_storage.md b/docs/api/storage/psa_protected_storage.md similarity index 100% rename from docs/api/security/psa_protected_storage.md rename to docs/api/storage/psa_protected_storage.md From 2ff667ef96979ec6688c5061c9dab909bbbe9a43 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Tue, 5 Mar 2019 13:59:22 +0200 Subject: [PATCH 04/42] Update docs.json --- docs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs.json b/docs.json index db0d30d97d..ce6d41dbfb 100644 --- a/docs.json +++ b/docs.json @@ -645,7 +645,7 @@ "path": "docs/reference/technology/storage.md" }, { - "path": "docs/api/security/psa.md" + "path": "docs/reference/technology/psa/psa.md" }, { "path": "docs/reference/runtime/Memory.md" From abb31525918b1981359afd305e8ca3d2d61baac0 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Tue, 5 Mar 2019 14:40:42 +0200 Subject: [PATCH 05/42] Removed doxy link. --- docs/api/security/psa_crypto.md | 6 ++---- docs/api/storage/psa_internal_storage.md | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/api/security/psa_crypto.md b/docs/api/security/psa_crypto.md index 470e3c57a0..f56ef16ff2 100644 --- a/docs/api/security/psa_crypto.md +++ b/docs/api/security/psa_crypto.md @@ -13,8 +13,6 @@ PSA specification can be found here [PSA Secure Storage](https://pages.arm.com/P ### Doxygen -TODO: Jaeden - find PSA crypto APIs in doxygen web site. I was not able to find it. - Perhaps MBED_TLS_PSA_CRYPTO_C macro should be added doxyfile_options file so PSA crypto docs will be generated +TODO: Jaeden - find PSA crypto APIs in doxygen web site. I was not able to find it. + Perhaps MBED_TLS_PSA_CRYPTO_C macro should be added doxyfile_options file so PSA crypto docs will be generated Once addded Doxygen will be generate - perhaps on next day fix the link below - -[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/psa__prot__internal__storage_8h.html) \ No newline at end of file diff --git a/docs/api/storage/psa_internal_storage.md b/docs/api/storage/psa_internal_storage.md index 9fec074e10..a0ec27547d 100644 --- a/docs/api/storage/psa_internal_storage.md +++ b/docs/api/storage/psa_internal_storage.md @@ -9,7 +9,7 @@ The implementation of PSA internal storage varies depending on the target type: ### PSA internal storage class reference -[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/psa__prot__internal__storage_8h.html) +[![View code](https://www.mbed.com/embed/?type=library)](xxx) ### Example From 4841be18d036681940c6ab6fb24e7fc3543a6d6a Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Tue, 5 Mar 2019 16:06:25 +0200 Subject: [PATCH 06/42] Updated links. --- docs/api/security/lifecycle/psa_lifecycle.md | 2 +- docs/api/security/platform_service.md | 2 +- docs/api/security/psa_attestation.md | 2 +- docs/api/security/spm.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/api/security/lifecycle/psa_lifecycle.md b/docs/api/security/lifecycle/psa_lifecycle.md index cc12842b10..6354b8823b 100644 --- a/docs/api/security/lifecycle/psa_lifecycle.md +++ b/docs/api/security/lifecycle/psa_lifecycle.md @@ -16,7 +16,7 @@ In Mbed OS, the PSA lifecycle is implemented as part of the [platform service](. ### PSA lifecycle class reference -[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/lifecycle_8h.html) +[![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/lifecycle_8h.html) ### Example diff --git a/docs/api/security/platform_service.md b/docs/api/security/platform_service.md index 5da0558f85..42964db211 100644 --- a/docs/api/security/platform_service.md +++ b/docs/api/security/platform_service.md @@ -6,6 +6,6 @@ The System Reset API enables you to request system reset from a Non-Secure Proce ### Platform service class reference -[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/lifecycle_8h.html) +[![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/lifecycle_8h.html) ### Example diff --git a/docs/api/security/psa_attestation.md b/docs/api/security/psa_attestation.md index 5fc2c22f55..32d1f34282 100644 --- a/docs/api/security/psa_attestation.md +++ b/docs/api/security/psa_attestation.md @@ -44,7 +44,7 @@ In the current implementation, a bootloader does not exist in single and dual V7 ### PSA attestation class reference -[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/???.html) +[![View code](https://www.mbed.com/embed/?type=library)] ### Related content diff --git a/docs/api/security/spm.md b/docs/api/security/spm.md index fa93238fe7..de379ea85f 100644 --- a/docs/api/security/spm.md +++ b/docs/api/security/spm.md @@ -4,7 +4,7 @@ Platform Security Architecture (PSA) Secure Partition Manager (SPM) APIs enable ### SPM class reference -[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/group___s_p_m.html) +[![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/group___s_p_m.html) ### Example From a5f2ccb8bdb7f7728f05a80d5f75914531c6bccc Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Tue, 5 Mar 2019 16:19:18 +0200 Subject: [PATCH 07/42] More link fixes. --- docs/api/storage/psa_internal_storage.md | 2 +- docs/api/storage/psa_protected_storage.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api/storage/psa_internal_storage.md b/docs/api/storage/psa_internal_storage.md index a0ec27547d..f989879b4d 100644 --- a/docs/api/storage/psa_internal_storage.md +++ b/docs/api/storage/psa_internal_storage.md @@ -9,7 +9,7 @@ The implementation of PSA internal storage varies depending on the target type: ### PSA internal storage class reference -[![View code](https://www.mbed.com/embed/?type=library)](xxx) +[![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/psa__prot__internal__storage_8h.html) ### Example diff --git a/docs/api/storage/psa_protected_storage.md b/docs/api/storage/psa_protected_storage.md index 36ac679365..0af3c2f0dd 100644 --- a/docs/api/storage/psa_protected_storage.md +++ b/docs/api/storage/psa_protected_storage.md @@ -6,7 +6,7 @@ Unlike [PSA internal storage](../apis/psa_internal_storage.html), PSA protected ### PSA protected storage class reference -[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/protected__storage_8h.html) +[![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/protected__storage_8h.html) ### Related content From 78263e52755ad868ed4bfbd30d411428a6de106a Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Tue, 5 Mar 2019 16:54:22 +0200 Subject: [PATCH 08/42] Added psa_lifecycle.jpg. --- docs/images/psa_lifecycle.jpg | Bin 0 -> 109090 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/psa_lifecycle.jpg diff --git a/docs/images/psa_lifecycle.jpg b/docs/images/psa_lifecycle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e446f336e036a0c5d0db2b617a07cb56d0b19fd5 GIT binary patch literal 109090 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%0AQ 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

f;h>q)oWYtQ!t){fO<3txU{Iin7!bIy1y|~fr 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 U`hBGw0e~bJMm|SB` Date: Tue, 5 Mar 2019 17:53:45 +0200 Subject: [PATCH 09/42] Delete psa_lifecycle.jpg --- docs/images/psa_lifecycle.jpg | Bin 109090 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/images/psa_lifecycle.jpg diff --git a/docs/images/psa_lifecycle.jpg b/docs/images/psa_lifecycle.jpg deleted file mode 100644 index e446f336e036a0c5d0db2b617a07cb56d0b19fd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109090 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%0AQ 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

f;h>q)oWYtQ!t){fO<3txU{Iin7!bIy1y|~fr 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 U`hBGw0e~bJMm|SB` Date: Tue, 5 Mar 2019 18:01:42 +0200 Subject: [PATCH 10/42] Adding psa_lifecycle.png. --- docs/images/psa_lifecycle.png | Bin 0 -> 73977 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/psa_lifecycle.png diff --git a/docs/images/psa_lifecycle.png b/docs/images/psa_lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..598dcd2af21f4ce75476825689c83a36392d8efa GIT binary patch literal 73977 zcmbrmRajMD)Hk|q1rcc^RisN4q`N^HMOs0mq*GEsMOs?AyOeGOX{5WmHX&@f&)EFm z_gtKF^F7bEFLW1c%{AAYV~k&n?X4&;iG@Lefj}Uzq@~1^5s2$l2*jn3o0s98#=<>6 z#HFjz(qh7@j-zW6H(Ul(k8fV9&`zG z_rDe3aMJ%C;~eBs|N9)VaZ3#SLgph|?ZtZzLJge8|NChf?c=mt|NCMCOP2i- z0wI)|JhZxvLZP;|jWrY%e;Z4z)Ypr&rOopH3wtBs95`I^ZHJE30Fo z?$`cGUA-sN#*uzOv3_(kD(xjk=e!FkDXGjWQ^h+330D`!=(zd@2g7lZp^7x?m_)QN zOjR34r#lG5v~C1EA|oSXV`D=?Lc+qrqN8PRMOjC6Ka^QoT2k@Auz45fA)_pyz+Ib= zAQYSue4gjac~)Q(^JR{TjQv+pQBiU6i#ZxH_n9ACE2xc)oP1)`?xXNz`SnzisZcw5Fl{ zZ=|$bxQ4iibBv4M6D3CXjifw*{>Br>=U584IXUnjcAnCWiPtV2)r~lGcSNl2e#cwXZ{yOF zIwVt274;%xn_qq~H%-Mn%h*5`E5ow_L$Q6+O)#4=&4q7eZ@+lez@#rPFOOYz2+>Ib z!y9);4^N20pClzUHI<>aug|!x&={jF(fHjv8tNxco*2m(d)8U@=_)D}m6W6fxcZZD zWGpF=J8!IK|3XAr`+ZC^p_wbgU7#Yqn)CCgBB|S~l)*if3L5T$%*Zx-icxtlqAJSEdzcpbm=x%}aBXu@cb~#QK30B`!h`7|-;rddrlu|*w!>;$ zGBz<`kjpe=F}i+F{naZ)i>h}WQ5^XF*y;3kRopW<(=|MDkiT7 z=g(Cr2J2J|4GsMkKO)n9{`@W~Z#$PEdeU#iq`<8xyK-{kVkd5DYU<$NfQ^k^5$1?o zSXjtZ#N#mO&)|}j(RHvwpLCq_V*15}T_+kE8V(K|qi7yI%22UhALT&qSmS%^^2(iR zZVaNhFgLcMcH9_;#zK4Uef42tWc2mIpn-Xco|(3Aa;i9L>}_iLDk?uYIazEn@Feo+ z;9$ITNNT1N0##Yp#f2TG|NQw_9w$3N%*CaOhnbFUx>n}p%a{GasWll6Y%oS-LRJs8 zn%Yp-ke!%2an^6FxX@7B_0i&NwS3gDsEpB-=AnGurPY`;TcTq+lc7902ZxCYyVd?o zQDd3z*nlyJk_jl06o@t()&2eb?Gdca4Gm(9bXMZR6Y^*3P7oFp6cjdI^@birhE8wY zNr9U=kZbep?6K+%*lDA`Lr4r3m!GF%im-rBqo-Mr@cuFn^KkRV)o0Wf^82`3pPug+KOWEkdRQu{yr5uKRa7r zUE{Qi+zLH7JRBJtOI~Ta<;jYW35kgzBPVxV>7_oxPokGBUD@`UQjw2;y1P1rje&u2 z`}X_cpAV=>I81D@DeK@Se;o5bFYQpF{2|>k%Lg#Js#juSS8F9(J34Ydc{tf#x^$_( zIGNrcsRuDF;Op(}?c?L4nt@|^M{poVJwzZm>Y3SSnbjPPTok+M;NRxvbUlh|u0%xV zsq5p}a#LrQ?%Uo$D8@eMy^26cz&#SQUmI@KTk4Euq@zo4^N5e9-0zd}ypClgbIQq1 zgiw9XcZ90)NS-(Bic9U{)R;#iM|0E*34OwuHI*wKp75pOrUqRVrp1?QcTS)tV3{I3 z3)>8NH?&V%bq#?aAV%MW0o8Z!7I7M9{&)pa@RN{}Gt(s_qBt!&V}DIgPs2F5czBX> z5edq&Qc_&WTpv*LnJVe^fBs-%U@$Q=N5kc$$wk{^95rPBWDR_ZH4#eCR&MumMd!MQ z%t*Ms5Z*q=!HpYiZMP5!Q9`hw5=gxL{U@rO_v84T_x?>O#Ii^SS5;Mw(rFZ%5a8k} zmzrxA;UZMcU=_hN@w=TIC^i1lZ-xv9_i3!eY^>a7$sE?|+VGa!wGnFd?y#pv$}*~w zq#925^`rV@Cx?&y`Cq%>A%u!Q!<`Z$hzJkg8`5<@JzR?Cb=ZJ-T~ttjaqHGfeS(FOzojKFn#&)N&+~`k1zeA&>pYJMh*)(X?Ld&++uY31t#y0-Izf^R7CZz1)@xyh z5vz8Z*nJbPvQHAT-8Gd$z0cJ?Az?nxdC=KAD=i}+4~GqY4WOcAQ*$h>VnM9USsgGc-%h zV|nagf3B~tw%3*$>+9Q$IlpK=J6RGG(X01=kBNC$Yq9#St2`*#^}2sei>$}^lGVh| zH%;R1=0t`apN8tisIY2<|^D?V?Sn^6oCobV? zqKk{m$?2&l{>iZedv;$Kn~?Oqng+J0nD;Z;ji}GJn$|d{@Y5BD&W36D_p63eeGgia zJ)*Pu%ww!r&s{Y)H-i;ozq_mFk_spvERxRTlcT7xF>^&ew}vzhzxr^vU+;}KD=Ye$ zK#*`fh3>kop=fHGmqSo2^Y9qPtbc^g3>JC?W1-jai-wJf%B8OOTB|t;1%)nQ&+Gih zYlZ7$rTIp>8%uv9Z5G-HieL8cnsg@!*Seh|`!kcndscTb37Li~>`dRidzbw(m%?c| zk$~~#`^l>E2CO@z&)zrr-CH={LS4CWCr6`LCN>qL8)7xKNZa9tFKX#hDd6i`jFq9P(0o-*zMndC-8qjt2UOX>qjg_U&>g~Z6^F^d@83cuzsAS47$k0)#me&aVhbGHr=m(OimE+ajE1PPAlU1A zymz`gq^puH&um3MU^$qhJ~J}|D{Z|$Go-ksO-l}SwwYL8zwf$S8 zbQzu+c0%Q~Fp?@85yx#Kp^XkKO34zp+I~i~hR|jo;?c_IyvTmZO=|gXvKki2V+$ek zOFR_`3HR5F#rzLppxK4}M(*dQrS{@HgsiNr8rhP86bmOo#VsvTJU9j}=6t9YDlcqG zmUTZPR?^*=UXDSy5xX(rhC~W{TVmqJA3Hib&rbKJ+z%Isj+m0ZraD`WmsyQsvsmvU z2ikpniCBBzNYLTp;Thv-uggV0OEs;8HG8tR^+ZERUh3|_Q?qk{U;4C%&0(`u*Xn2f zh%3Z%^R`B+*VlRKRqnMlH@JVvmacCj5cxNWqICbJ=|*(4gCi!)!gQBj_-r)s^T$V9 zQ<#s97v5r;jkO-%!QfaE@2MZ|5&Dh}W5JgY3BhBPS?75}rPJ@;(~Q8QQPX^@E zNQXf9T^lbCi4cILUWLwl@oq=Pb4~u0_Ul>ZhkqlVGHaHkBs;^h8Oqg^ym3%>gVJ)x z@Z@0Yy62leU$LOZs9J^mYu5;?ep zo_~5%Wy=?Bbuvbb3yY4-V#f{RK71_+iHg#gjVvfB+2~IE)8tQ@X|`h9C*K@Eo=w;t zx1*-(8m8OymsUIX(e6M5v*tTxX&zSFIu*^W_O+EwD8~LW3YA_jMIQgFjZZpQE9~lz zfe0UP?`czCUr5wy?fGfGQ)Xz-M=L8UDha=7W0@SQ|IyF;;%c!``9rJwkX&wT%*_=Vw1-22@w|auQBk2>XuHz;Wz=M}$k6# zuR^>)HJ@Dq_T5ogNPhxH%gNU;2{%<<|Eu1o(Ecmxb*H$XAc;}Yc_h?PqD>&3UDg{C zS5{?$UXibQ;k(SrjF$LPTb^Z-J9qA+W!0eC7;ULTwc}VyAj7%AtlP$CVYBubBZu;* zlEi&kbZfNgc}CQO6GE=m-6eb%qg~kabB9z%uPQEv%-{D8*|hpfzw}|UagzZSsZtHQ z^Pc}Y89xoD`QPj?*9Vg$Q+~LEPo#PigjKQ1Q@Wt)$q+!-gBcAODyJvgT`CIJ{TWK5 zzs1D&mg3!&CEKT_YBTa5N<&>3^YJ4hir@W=FO|~m;7u`~T`zzWg;*Yg8hQ$xxs8pu zkPsV9JEM^T>Rc(;xn7J6D%Yaph2obvuM(L*%+z0NV>P2EmxoowMNUCsZfYvqj2g43 zHEt*4waP>cq@<+H9qRG%aXLdtQ48g&x3B-13lx->g-n}^h23+{%FWeG(?O6N5;hGz~NS{$?wA0|OW3gvb=urw3P5nCO~A8L}Q zuBtL>gxI&qRJ{I!4e%J%j#Wdhp_}|leVUEa(T;J5wx!X43lRaOwlgG`bQ^w)$tsi= z{t7-BzmsiGlDLB4DZ8$PttsoPpZA%W*B7NiwjOYDGigUzlk*epUfqDVAGXx2$4XE&)u@D})af*o@ti_X+xAjxARj|9Mv#u1dX4R& z#OCsLxpI1^>fg=z5Y+jZTB!R*6`#wG@wD9j-0Z4(Q**@1mpUz*Oi2ghVZ{^w>xhgJ zTjGIh2t{eAr~ps+IQ29KQtCpvy?exfI#6HNml+l3d*mgG=%)_w^GhK^ZmX1fVcJ62 zs(1^Vj%F++V5Cd%d^|zebAEoF(*0zs1o>w!CByfX#H9c^BU8=U%Djxr{l-jY#)^vF zCx_eR*L0lMi($**P)Y2p4k>5?40;O@XJllAZw!)&abMcjQxzy_=bj_KrKP3ys+x5@ zDcM_$w#d?)`}D|w(%Acu(sc(1E<3%^m#D8!*+awAseG~P?X5OO3&+9wdcDpV?pwER zji%c64iLbal%eGp5I74DOVO#&_)3|Sf&l|H@@3X4`-v?mkunnMe@B|Dx8Y{8T1^>sO-B~6R!Mqno*EvmMfVAo7$C?$_o(6pNiO_B>5aa&IR2F#Ro z2r!d{g(Y=D_tE3WmH=FBZ2=QerdQ3T-!3UBK_1Z8@E6PKI<2IR7Mn&4JH0>JS#go* zx5=7pv3;Y`p|7uROoUVkS?t$Vb%Dqr;J7&rfl-{3NjvW(I8C#ls3@h&tU_uz}z*kvHSU1b^ebXfXMhY^q0 zo_K0Txz^3qY!T|7`h#DwsKkw5US7>m=PZkL55CORFi`%eZ)l5Odv=sw)%x!bwtl6hAHF4QPoF%AiH-e$DdxKOvq5FNrh2Q9Q#PE5el8_i zaq51FK|5g-Ij{YDfG8IGX$jY%URNWvgtBB&KPtl;;{5Z*459sviGdzzN|((#$khG8 zT>{5Btv_f=%qMs#-0U<7p5C)e87;Rl95GBe;j}ic%n*C{@F5`OIH)LjCqsC{C0{qj{+~2>fCrL|;h)S>iHQ|9{id63 zc+a8oS`bne68hL`8b&RBglcEaoQHY{fC0e7Qi~~_v$oJfD#g<8K>x+X#f67UOq@aP zq^6~fW~J^=PD=&2HGcx-LS- zLQ86d4pix0{g+QX7&Nl^G#Rly>wXW^xSbyLBuhpxsVg@z#&_gu6f@A#Wr+I{p46C7 zG^KJl?HFafc=>X$uuFjVZOdIZ$tO3gxGpy`M#b2M5LK&KXywiW%p_#hd9N%@OG`^Z zxetIb`;SM>@kZtJ^y`4}uy4;~36hi3+E=<0MIStPKwYC!#SRtu0xG`>)i#)`xzfO_ zU9n@&%3$*QD;BBp6_j^0r-hDp;0R7$F3n5soOa&jB}2@N`FR-DX>ertqoN z_IpK9?wy|pjY}TY)mpD!lbNuaWxeYUc_%8+g!cfOm=4L*xVPT8yXw#Dw0JL3{qZSn zGp*01OCGAPnfi*eV?r1|f4=EU*vd~4JQd5N{yEs|ZE^`@`1}iuaV<4`LlAGyOQ0*yJcED9(?k&eIg)Co3H+D994YHJ(6n z)zsA7@KCO0%$HGC^9lK6UKv%8YE_l zTsUevN|MqwGy;VueIk)=tsEb=y}R4d($dYsa6Z_^o#riBdDp_i0=d(>c6NH)t~&q| zf3EPsSr#Zx!D_pfHR>m@npFSr_j8RpJjkTgJ~ieG3F)LVYRj94Y<}R)=jP3UjhV#w z=>GlJfV_}%pGVo`OrDFKD)&Q%8y+4WGZCVAwy?C+toeh}Vv>9uzx2HjMc-TNH%z)U zG0p69FXB_IUqr$$)#Whp#ox??9%0fWS!_8dw!(hIsiXM+y@j9L1ccu1rTNnx$bUm zXH)Ly)cNZ6KQ{btq3;)&Na?YP-(Ve>uq_k`9&#ATu^L zF1K5Kxtl9d%E6L+n}0mlSD!##UHyc`hS?6y+rCilSo#^-dhFTu4EQME`jlp2 z0kC~g!l`|h0XuMs?dbT}rWg=@T|+4>^= z>u7iN-&pCtcGlVyeQ8d6;+4~smMQJ5?CeD`&aLh3$&BHQAM!W!cKsgF(DWMUyGgWhrI$JO6O5H^Kx?o=Kg%u=wzIrHU#2^I1(>9=kFctK_RlAnhA%mUQQg0zytx^!d$ zOsJpqlXY%$cbS9aN3vd^Pzy;BUc`hfd?S+f_Uw5DhJhtC*2)EzXZ8MONQP5I4j^(# z(R8J%%=zg*_e=#;pMv0vVUq9(JIEvFPzlu>A+rHw3!WX!Ed~}|yL$BmVh1J>ONuzU zc&m0Qu2_aj3qbb|E~}*EB;Yzga-dsD%&qjR|AGJb7GKXA0Dhp4v^72fvFETl=-*dY zSLcC}S;N)c)6yVo`18jT7nyPQMPHg+dpSp*@;ynDnwHkq6;Et|3<%ELtK~*LNuiN0<&`(mS zFM`dnH2B%sZDG-EFLor`q*PbPxV&s{Y)l2<3g4y zdUS{4FO&O~EC|EniK1SR3qM`CktHarRsx(yk8sbYBGaLbxbbNkGv!eOl_vl9)@G_r zU2iHr0&%viN5NsD3e4b*+r*a5(K64UrzrRVlw?saXc!zU>F=Ub|Bltx{+s%b9CqK~ zQLi`^iN0uKWJffSxQ9$2Gioo>Z@3`L%5C=1gVNt+m@?-T5&F!R+rez?e$a=7P}IH;^sOSj-TG)4 zj|D);)AHw)#z29ij1o_N`?XhR1NOVs?c-0ErcAr&OJEZUe_(2PyWF=v z_`PD|L?rUbWi}0fxg>m!md0N|8=+B%i;0LRg`B{mUGYjoLpgRRN8M)M%(+tYsi1Ne z0Tj+Rxbzyn0gV7BHFlrN5rZmubuiaAARw*qJIHP-Suc+F)_0vw(X4{O89+uf%#Wh@ z^$)guxvA^Ua!;>3&wx7riumc9LLmyZ-bektKi~X;P>b2to+uy7Bi^ihhS#PDBbVf9J3Vc31ig&(BUtIn7n6#1?3!dx6oDyhEu3 zMcrr%kZN(x8{BM1GCc$YZfTm zHF=t?}2)sKX^`ZWCRxR%kNGW%I)?0q_mkGStTL(}DFl$4@)uew)ULR_dZ zK4$2$Q8HH0-3=x?^Qo?Sme~`(#?R5wW58%#47Nvd|s@G=qlb*NS2+ z(q}0;PTbBDsdlD@9Z`1e4oBf7c}FI+c)%5 zj%d!MQu-}pJ3BiL!4;(Qm;U6(f`oaGIGusUJ$jOM3y-Fooq+*4pr*S(i*=Zl9E_BZ zc^?Te$8tNX%Q}4UBW(EoXRk-pc4IlFfe0G7@o0N{+s4MGI1Jcq^-BBPL+s0;uV#Q> z_{8E3Bq(}$IaroPSrj%5$L|%e)dq39ZekX;oy2nw$^V zL#-Fobb<^!pV;4UF}VfAUv<^|(>EwTh0prUjRV=&&Jp^D^_RDXbXQJV0|l70WN{-{ z@N#n+)#EWlby8ME&+H>N8~LDif3p#jWFjEgQr65}_{FqUL~>W|Bp3+x0SuiN0J<}w z$PEN8tF6t4#~N-K-mVm*{aZgTrPv%8qD2kD?!B>?Ck8S-q#v-p0!(#>s;j62mfNOt@?nR{r%#`d$8niMN5HId8g-+q zpv7n`42&dHU%CS87IS|UhsKbLX@AS8Mn@cf<#KM_moGGuZGmJwyu9gYY1WZYj>qyk zlo<8QhFg#+K%6BYVtVyDI6gYM{h!z3sj^^H0k9 zVg~nO1jgLbE70gcb!u~G4K2KM>%1uG(6sPSiFci}j+Dcs;epiTo%6J~)KqHiTgYD# zD)RDo)I9gh3%+%I3kgv%HcV--k@0`0?DfQ6=@J^bfeK)2pzNHbn-cFhd#gg;yqu*N zL4G`5ZgT^h;xB7al0R@DAAtWyi*LJs+SvanD$`#f3hSiXj}Q)~dg%8LQ$d>EiohE) z0yRPx&&#S^_ImuAsumA#`ww?&3Hge56_;JVQVO!9rbaF5Rx(i2Ml3mkteS zfQTIar4M0!d}5;6pR^Q!FUrq3r;8i2+pIP5sL$E?bR6C;FP^=H{R} zTvY3l0c32MOKo9{0}g!LJUjyDC)=<LpZ|}WHF1Zw}2?QUrU~@ z&(GEvjnKw2wvwjEM3LQm5!{I;l0Sswp3GT6R!GSf$MU^;{kruflRQ8|wr!#G$PDU9 z8oOiokk4{jh+{sTKX=jp4_3>AT7Ze(8@!zs16c#WgSXqThNfQv-$llym4L-Wp`r+G zo5dgRmjIeANeI{>LyuP7T+I43KtOPX34kgkHay&3vy@>%h1n;*BB_r}ui>U$Q0qPV ztpfVvn5chA_Uofmk^wnC;`40BdKbhb>t-IT*ADeE71v6CII{fa<1-2~4W#e#I6vqd zwrj{Aa#68-A5ef;WN#Nwk&!+buP~>+W|dOV7EvuHdgv+AE7y4Yfblj0p~3kz=n6u} zKr(g`O>ILK0eVFdf?sCsXufVO=%0~-dMa;H)6$T;PT1Ii01zQ(0KYw$uRB#=pX3vp znUa#Sz0_r+wYK4oxi)FOK4l3kZWgJRn2NG83A<5(s}BRvFeifmE-0nT&-1_92tpZ zId1X+nRu}y`uOlLl3z=4am;t#x_WGRFx8ypLBzhlbnv0`GZ|gAdRcDp0yV`;T}Y&H zAd!M5YX_HpjJ?`h{%RF zH&eR*&7URwJ2}6bK(Yxmk?YY8Th|g&?#JUdu&KGMB3QJeo*1+N4#C94EY9D5vb4Nx zWNfT1IkUQ|nXkhy2%?+&Ip}S6DVq1@D_!OG$eSEOPfZ4y%PCH*sbk+sE>>3NV%#Tz z0RCSo7uML^Y%x}{4s^)DYJM$%D4oK09eI$QUP28lbNpBKg*C{35V&xu0oaW<3Bo1@|9>vCeU#A|bVnK4Cv>-OQpQoUHVc2U%q;%p!t~m+0$?hRwuV-ku=IK;ia8E8NBRrF$W0 z*l&zWpJo8Ls2tzc*2eJYQ3?#t3?H^)mJ@d7B}6C;@Hd~nf7#eaq` zLG15c-G%!ActT26wy>xu6n~Kv97ggA3bn^=;}a^zsi8sF)T_4d2bRb@3Do}C=-c8}os$sfV+^r6+_sd!_;H%^dP znJ?B)WmOd)Qifb5hVMggZ+|qd_%GNK0C2!nVLVzyU)w)8GIFou8X`>O{rfd_aYx4k zAQeGm@9piSn`&>*PE88)a4-7BN6Joo8zy7|Z~`#fzaR#CcwCN^hsqN`EaPJI0cb1~ z_~=tk)AU>U`1$d{V!L!u{HA28!0e=dsL4$#VB6bK1vgYRx^nl z{9OyteO2oW*dGT6r@uLQrBSc{ z*1RBNKtRBW=@i4+ElcF?%oiGjVhP+j#zvqs$?)*-$jRkyMGdU(s{RJ2pMb(;pKA=D z{IfOSLRNct;q9m>TdJe6xpwVZ1V@IulnU}8Q2)fYuQR-U^JZplPDN4)R%9G5xD$6N ztfCNE-k`WN!=tfri@jtRWJV*Lh+l<;!1(NLZzmh`V;wadlnQphu%`nqrskZdT1O$a z^~Vq54T-F385yl=r!d{i;#yi-AUBxM(_I{Y7sAQT4gl$)l}*nPM3|_K&LqdRi8e@WB83XssDVwhE9(Aa^ngt z36{*hm5i|!cq}Z4dxKS_C$takc>?we^5i#(ODALCzziXvr>D2g?nQIg($dnQi`}@b zfB&ks^YZd$j?5Rf?NmEXvwactus%gJHdwTPti z;UFM$PRh*AW<;x8M#$M&<-#AHo>xW*g?u-X0Y<>Gh|;Nbi%qlLR}zU0ek5*h|7^;< z$Oo#QK#85r&CR{NH2PHThijP$&z+r}?T8$aSa6rxMA4QmhElj9Btm8X2hZ+Fa@)j0A`vX3l<38d zK>I=v)WB;=ChlcnRWc4y(0qpl#)l<9)?*I zuz=m6)?9Vme5UCMxo+$xsEg&MOuV{Vc%8mw`efM?{(7?dziUY!uGH zV2ce2`C}YFWho@%PyZu@8&|mP?1~vUAd`PWSq1eO+|D{~@ZF|dm80*tWoPo{OH3j4vKFK#`96Nm0w1R zr0N@r-mJTObvHCw{+59d40Pp0pcwBI#^3lkXKTM}FqADALsZOZBFbyU=RF-VGD+7zi=8hzL zfA{qT%M?*8cgr+3y|#rKafztdU2>Uf(aF{}FQ z*)x+Gl1>$U7n7>4G-7NX8xVAx6Ebg&ig46su_d6F6c0M$AP_#A8I%&n6j&*DaFo+S zyYzjzIz0X8I=J~-q<9yl=qO?z8GU8l>hI|ApEL4!R~BNqji93-ZFKw_+A73whjfbx zyGprP2O_kUz>=kycOMrzN+Qm$qr)U(`qM2etlgcRo!wn=6;(6h4%n`WuG6kb@Y&}5 z8OrLcE1x6bc^3A?*Wnrb&E$UryLhpI^*_g{6Mcbxk!e{x3h+{7uGf{fLK$WF37V zMT7s2iS0+{V+5Cq_?UGSl01wu=B=GFJBKa=EwFChyBLLHkCXvZC62K2S5fbRs48_k zawh8bZ@(a6{`S0xqX^Zz${%XtzeNdQP#gT>dQoqmMaB31CL95q@V{C3*qWv*+eXTO z>-&{OItu4GZp|e61bjjV4A;?L`#~qgi7nF`2C~Y(r?@04mM=j%_;{yq{s zud+P&>A0e-ZpwTN?b-W<$U>=pjn$gKnVbsQKKmCi$4awyl|?Aja^H(ZeZUE6rd@^z#;79B-A;p zww?XF*(>XDxJeg+qtZ0ud@^WBPbIpv=F&yl3~9fi!R7pPA5xM-VJt+fDFVRSRr`i_ zyOz;c+Of$4c2$JqYd>KhC%5`P{8y=wDW<(*Mcu9CAL@N5Ka2Z*KChwT8ytJpnIEtj zU;0@=Abf9wU~TN7chf++`@=gfFNryIxLkyWveQ`vHVEI)d@{5{)bg@|J(3PyU=@g{v}Gd%W5dCef(NellMTI| z%QL?wtyf>7x)bXcjPz%c6Ggh>^vv_BoQgLcDL*u`gpdGn;sz9!=-1o82CkD@R0V~F zH6B9g=?X?8VAHKo^R3`gtp?o5sFv5CcL1)p+JjkNuz!*OSpihJcVPOx+h3ui7ToPu zflEH$cRwFOdrF62wM_v>3##Pt&dSpdsJ9`_8%AONq?~t1*q2*r$|`+vkESN|}Sg?O+A~dVU(!3o&tVV6AtdekrO1`vwGut7?y7F7e$X zFILk}n&;n_d0Pv+qF93jj{lZrC|DSDD#kF%2H^x3hNLvar?6<>PX8k_{_~M^k+~8Z zCui%}SXnWp+jr4GV#6iZ2meN?9oAlJ@vMu^?Qy;jURz%{xJu8cg6tPR+e}VcuX_B- zd`f5Xmx@M_R7rO$hpEg^UYpex>IS7$o918tF>i&(BgguI{DYv?LDdZ|cv{+YG|+!S zKk-Xn^61Xu+#DVm+4D$9ygacRn=^l^27$N8+ysDXV{I*PvMI`7tnlK=c0DHRrb9Vc z0uB!kmGl6H{;NHAD>a|k1IF2QMVXN?8x+@GiHuFC=`#`Q8K5r1_CoU{BOkUG(aK0D zS_WGL;I+3lGPk-a+h~MY6_HtK{?7}gj1;|G_1)9onoXYYpr zGveanS`wgV^P(6-P!!$5d#l7`ks{5YV}BMyhASeA_IRmeLlb@Z~|BgAmeu0$@ua`{Q2|StgdUnnvGUq-7*tNM)kL$ zBP6>lZ(B#+m^zQiHb7R+Zg4}1B|qUuhz?Ntm;Izs`nSh$!2zYL`3`! zW+YEEQlm>2=cvgD<}Y0lkCiu?k}t!hq8zqh>SG!%>%Z>}YIkZ_OgMw>Izx^QbIE&V z7d~xbevOS@_0VfuLmW+J0^5E}QV$0{wH@EM8LTtnkD89#+bWrj5QTd1i-vZo~kKt0%vpG08 z=-$apkLz8r1t<7n?fJ2wXWe7qsMJ5iJO)H?|Gv;Mf}D9)>_0Cu9x18w;@?Q{#-zfk zRK2IuUu>$D_2TW@N6fGri3Z9+(m@hB?Qa0W-vG}q(78Fwq05^Wney>@6FOmTPLDgL z+a9_h4h2X1~j3Ql?RF^!risj=X$c)T2@+e`J0QmK!^ z0)6l&qjOY;iA^e2_+_F}A|i%jxNV??WN~?U7%Wu10TRa*8=IS!QJ@S@4aX%l5O7cR z7A#ZVVbv;|UR!gSZwXRt94R!UqM`y{wBl?9P|9h>7abd4pJ|9`noia5TlhEY7)RKH zV>1nW-Ob|YswnjWNgx>h4&lg&rTQg=6j>GWy>0OiyG(KulaNG(o4Y=4g4*RzkVRBj ztUr}^gR8T}niAoBifR3qn`|87uZm@~eu?bt;3{}|E9`Kv*xBP^U=iNHo+|1%J?>{{ z*Sn>g0d_*0F8)%W0%1^h$az9_{cU9-P_R#cn?;TwT-N+{0DGqF`q~;aRXwj40>X*G zN*gv#6p-S;F+73#m4`<|TNU80@U4&!j*g0Y;E|^Bt*Wk;L&8NM6zkP^;lGbJL~#8@ zzdxU)C;NRD>-yZoKXUq^wr+0qQ5+^Y&98FQx06C6B3c2zzbIiP@DgiC`05dxyOlos z>|7@_ES_rbA1iGWxHVc0yD(U59>ojLvt!_PNVRkx^)2NjA@kE?1 zpzvEc_u`FWph|KzO9g8xc$t^#cpD_ zxZnQyCKrj=QSp)feW~4j|9G$o8T zS{xG1No3BDC6+Ub>+k*ajktPeXZ^C8pZBHH&q~Q(N~dr=qT8888qAxB-nTzB?B!`< zlaq_Sb#`XGu7MinyvnQj=ATZvHt8D_e&Q6~!`$5t&L(C$3z;W1DlY3JAI7=NPGgN( zJ${-DWI>Xw*`IUS=Y=c=KZB{;y{^}fch<+$()$h%4qy)Sfg}typR78BWCEsLM!J83 zQIFr$1IY*8XjZz~tNYLm)9XX45cj@6BZ$ri`X>VU_lQ%$!+>txf%>T}${(AAy#=JS zmmuEM6&SR00bh4YhIr`a<_0d%*%L_0Xa{FwBQ>y}&;rJ+QIuekp*dD&mF(pu2^zx` z$c?{${|3sjXYT{fdg#ld!a`CW+hu6_0gn<11x2SX&^XbIR{XlUQ=oTF>!HIcOtAPNjWEU*C4g84eo*gG_qg0Py|u)G|eM zJUpWv9dfzBZLc54@H>Z_3|D=yITPp0g(-pSI5;}8R(w82QzQ)B_sL~6(9HNB+_|{i zLq$QM1OC|2=i5?!xq1rcX|t|V8JUiOiy#L0XeCvy`jw1%%AO z-WN7BD|7L%RCxUy4Gb6=>F-luLxX<&XfalQzyOMQ6o-wKm9Qv!0#ud% zgW>yum6ersufOA;bZN7vvKu08c`gV51Ovx^GjwKUX9pbvPr8W2mD2m56*$ow{`~*_ zxCXVix7fV!T&EYHM0z^y=neQVLHWN*aDx$A%y!GU&1!)0DJ*>Y|M?K|3&?+V;gZi* zYtLh zDiyIGT`dwzAdVB*d2xYQXg?A}lHb_fTTg8rp$icP*7hHjL4k1l7y!cG=;&zD#jVRi z{Lgy$`RfA9qQAmVKuAb( z`+5|}SE6jv!9|6BHbyu%yonb!Z7gG^pYP6ajk+24fr+5^dS74PwT0?wzEp9ZSozpg z`Yt5CiAd_=t8qVTpuaw3y|W&LkbuXvi$24CI5nELNqG4E5j`w*00+>Hq!yH(aCHfv zkZ{qo`(axmJ#*^FU7 zKvI(!*L}Sg&zTeYR{9+=6h5@`(MWYHDT#!>{KJL}wWh19C2JP->i;EP6`Gms|9Li1 z+T-0ct^(L=C&tIis(1!l-!6xQ+y4!*!RkNW@gytAHet*iS)5}#%(Z=CftiOUODOJZSpS&Ex) zL0u&M7AF&9@buK zYpc$mydU=AeaIg~AwjGrG)tB(*BLOYb-F}*i}d>(|B}dYbBU`|_!zZulSRzehYl_p zG8%v-u}8eVYzH>z;>Z&nXo|&q1WxxDw>qqxR8YsvJ!QiWMpKr z9)kRm1~j#?4^Z0M^w`cldy|>}5b{TH;j1&1nnZ6d}+ zuX_rUvrF~?2_Kggq!^Ns5%p(FMWg-1mr{3(1*2kGHm1Vl^$9+lFBA*Si)D~yNXA08 zPqI2avg@2l!0kX4LEn7$?fsvHh1rSI=1*z+S&B%MX5kZMkC(!pq61XY$}e9M2KK8o zZ{Wz=ybbSG4(LLu9&4p1h^2AO&o3@EsmyL{fVwCbrCgEbf%{DwcBQHUda{3eO2&>s zhYJ)NnSJ2Q``@Cu3*_M0<14YfL0X|zc~>!B6PD=46OHt|}J8X46$cD?VvE!in`eM z@z^1|o5jh+K`b`LA%W2+T)trA%td8n+Q4$9ucrqlBYGSnA_sBdSW)TVGQ(vMa$1z9UY_0p+|M^dM>e?dl3l13O!K zCT#d9NG;RC7idK0dsvvA(wy}#_!S72X}EnLG9!BqkB*cL1CJcx^4V9{*Zqa1fh2U} zX=H#~q^GCHHB1hIn(^+Hw!Xf?xTKo;sVTwx_dg2cY%)BXi)f-~L7sgKLW7`-91(r)XSWGDg43<~E)Yb~_)^YuwUtazu zapj}TI-E>NNeK+qe&4<&T)i;}9i&D<#l;-1%jlmzu$pU!a`#Auai(h;YdXYA? z3Tn19kXc~okAd3)re5fQ54A8f9Qyf26sgh^TJeHCwT93jsSz5&rDSAy+|N$FU=ndH zf|TZVh%%54hMsz$b|Cf-R(;rpW>o+o1pq6IK%x7HLTAbZnM8Bk-3S0?_#`Awpu5A^ z!LV)9?Cm568gRdBk}(LRwmjrfm=KVoqtTc7)JMe!ev(1>!>WpuloXWJWAsq}e<^{4 zMRx_wMu+Lx+wXzf)c)V3TpwUkEsb_@lIGw_Afkdv+Zw>&*NOul;nq7Fn zNe$I65L24!>WN_x!xH=ZRgbFpGZGZ0i;CEZh$5g=7ChPf19k8#=(Fh-gJWL47%QgT z`)A<2feubU3Wo3A0kQNGn8OJIFkTu_B0e6A2B-Y|`4jp`mVnoq1fQCTiHVTVZ#)G) zHfX>B`{?xk8tf9Di|ND#<>wr#Z#QTF2ZO_(wl-vtBt_!c-{e364dBEuUUWeX$pkEX z(-g6it&L5x4A5knu7%z@`MN(}*8!k;`t+%0vB_??D0Z$^xi$EEsm(2c1&((?c?Sk6 z9Iie#XbXi=B6GJPsQ%t@g|Rs0QM3&(6+3JRLQQas-+*(<^i04Ekxo z9e0nER1=DOVB_F*_+A;@2)LxUinNo6h%_kCNco-EQ^EcV=GYwbH?s}i<65w~p~Gi& zYp&Tintd!m_{v3JwFc*-N1vZ%uFq>p5AO@%>Q9wHdW&aK7|B^uya-Lw+lJ@d7z%Yu`K`u(OqP$ zvW>D8cZJdSYuP@_yp;I?d}Pm6bU-dGx115#E_~kHX!zM8d&~r@qUc~&H9Je^nS;sz zXtnvZXBxSQfHA@6(^UxWE%0AsrLRmTdiD;sO-{PO2$3HW{rg&bJ$y5XF-gjKk{pj+UCD62#n7pW;u5k*`anv(a z`vfdcRp!vE2P|}=wi>^(NU5l$<>Pc{%a9}b3y%6ct#T3n=Zwm(FY|Ryx0)$U^MCu` z*(GK5Hjjenafec1ZDwW*I(5;^$cF35Dg4q3QtCS5BZi-oIv&k)OIRQQvzS21LxJzjN*6xj(+A{T1zQm5Ns4I#EDh2v7UxO`u%5^_>)L%hX*4N*koK5d) z7ciRzkjruh;1Ceqz$_$NZJYIA0eG!6I9kyu@SLu|6a#uap7z8pGecYP6%`W(%Yjh^ zV1q8;z17$6OBB6P!Bl&KlHE`Z zBh9@bPP3W&PGiSF|O?-&fXS?RjTC$PJiy>Q}rj zRFxwp?t5=-=~fr3>k$JZqvnBYr-K&-Oqx$s$8%zFuur@Rzqxvl{bn4w!aZ^E?b^?w z$m-6!bzN1p11gu1T$8V_ISvd3)hA|bZ~kxp}gCL}It+k5xfoD^C56=Z6a_Q1`!CFxST zDPXqYHy14XTt=Fc7zxB!G=vy_M7N3kbs3G6U(Z7t!MA%WY>UUwY#Y^+_j=;gBq%L( z`QX8W_3`((7>*Lg=d-rAQzfps>d#JC6@~Jrcg5H_qITX_nVXqmNvy?!t-H91i%?#6 znVwHOJCNQzx46jDSr57aw!P{RLUh@9Xf!B&Tgq&$>mMARlVXb_EnY^cw=>8~&3axx z;AX*2fJ}>e)sY=YKULY zv89}xoUXW9>^4ybJg)r_#M8s-ZcAFtXQnuJ5=SH5d869ieDS4pQ+<6!b>&;N;qgW@ z9kEZI>r24aBNK!KYlS4-0?gO{EVe9Rrm_8gJ5T)@$U@0N-sanDD=*t(TJ+FUX zrVzT~4G{J>2alM9gd#^Y0R<1hUG-IX(~AHSsBn~Zbabq(XTb1G#chTI-!M2HF;b{4 z(&^k#3ajTE%bQ4lK@Z|sOV|g%bCHfdcUze#>Z(&$SBD!lOr-%Wa&jho?ib4z0ofPz zIZ3;QngXywt_PnN%j>D=urP_CGK9c%^?E#d^ak4cH>oqQO@-CLsHPM%bM zprjEsz=a!Lq|ee&cO#JD{F<`Eepq2&hQ8R!_41w0>&O~!{t3`XFFt@xe#e*p4v(Zb zF0LQIYMby4v1>xNzq0b5#OVp$Vje=zyxNQ z6}pw%yBIZtfHO8vrhv*qLxN76md7HhFpbEH@V$%GXFC136=_9Vsz=#VR7TlbZAUh9 zYlj6?!4=g)P&z9ZEGFSnI%m?rtoX8#^b&w%!=+Q$E3q4j(OTj=uProb8N{>yGlssu zZ4=SBP@&H2e+;A-!I+Iml{xg6yJ+_{-Gjbajunoj-ZVo~phBzY3$&2|ZG|M3tQRvyj@WoiMH(g{8g-+*Pa6vRmQ!TWWryie|*7o=f{Vg7kB!Hy!L>jn7=9HxBm2cXX)%~ z#`;x?{!@=0(Qf5?&-OW^e-qP>`|3#=wi?bF&VRoad<7h6*WEjj)7E8s`*x{?d3wS8 ztJ~e$6S@UqT~7IZi<_8^F)h+%ZoPDjv|_40ua+ZH^vcC!(~j%E-^A3)Fg6Iz%6y(3 zczz2`1N8SlQFWGJYu4x4hhjXZOJECgCyeqOksgC;B`YauHKz}fmta3|+=oX+y=o)Q zUMDCOnrDcwd!RZ*Ar<*pHfS&ioq}v~p3@Yx(UPuBC)6 zo60y5OJfD9**PwJz+al~V)7J77ch$JkciLWwMF1DL@~G&fA-k1eiR!eihOeOvoLtC zai5c(qqYm{oVvFtkfh*q?``i}Um5v;Jo4 z7B!+@$n`hvOYe%?|H(A5E};*kL8zGFro;uG>dE99P(xu@SF+(}@0U}j6l61CYC2jUEt#S3zt8DD4UnW(1;8@;W+V9e#pu(whvpG-oA~Na{=s{ zdif%>-Zl$U#Y0E=Ls}1Y{Jrhc^WvvP*}RIAGmsVogI`#U&x3JG(+)>G|ek(y2PCoYEJ8OgsoKbDf@nImGqxx-)crxQk8Q3+6-ir zDp7M1IbS3vBioQDI{_9? zU3d0zw|Z$K`z>&Eg%)FKg;d!7?yg5lr#s7S5JW7J$WL!?H-uNKO=q7ujAs?GhPPj-wKM@%C-vo zpV^Rm5eM>7wAYt!*x1-0?C)ftpx)9xj0UzpjIQL~{CtL$^+hoG^a$lEZV;Ecr*FEI5&S~R)E6;?8hLNmwy`=tDTtVmXdstU_;d`$Be{yfu& zmx^o7JzNefI4k`K+cym@t@=!r<;?~US31bXR8$|?Ae$&)B|}w1qZFwf0`{E1UgkDv zhdK7vO)GEt;NN}qIvH;D5)M_azd3e9ICtw?D@pg$ENPFO-oK(JUn@P z*VILK%H}+>vVXz`=~$ z{5sF?`i7POs*QZUgRc$c3d&|L4Mm7>sHnCW1~qD++@|ce=ZI{RG4;E0B7SxZr$~D% zq%jV4ra7#q*R_@}sTNt#RYXOn!YR?AB{426+}#+Hn39=UK9*Sulos96qY4NS|FdjM z{pdy3N~g*-5Cw;|f{x+GW3RWKviW@O@4={y)`ua_^YrA1*|?#(`2^Z0v$p6Mep^!; zn|#@1eb>RU(MI*Ov@~qzP#MObML9jqc2^}9)D#uZL&-GyxBT}<8l1;K23Ii(oADrh ztif#RYywNJ%P2Jm3yV+h^+iamvLh>45xP;1rg=fS03$lO&5llY{<2pc3%8%mFLd{O zd3%2gT+I4>3kJZ8D7`<-n3W^c3#Gcy>Cm_H4T6_P&>8YOIL8^@_3`&Nl;6oODjY2C z?<15r4IHD$X$nwCL}Vm%nBnNh^Xq#1L@Nu=tJJ5Zn33Fw6f1}}84kKG9G`&p|Lejg zN5WdmqoSmgqQsKE@4BDie$%Npayd)0dTkC`Nbh;_|B)N9ubtP`p#z!-xKu?-@2)$+liq5OXrPv$#de8ARHLs1y>Z*Ogt zBh_F!FcY7I1NWg*73RmnQ4P#|LCu)#v&zfYBDU#J9BDDW;KKTFruAKy8LJ=saqfse!uN>!&12qm zfR4_*pyAmw%29_F;mF9y43#nfCz$pid%>3`Xghj9L-poOnF5}Bs}6-{oH!zr;r8-# zr7fU#ngSIMJ(*E*hvG{a-Ks+EAhQM~GH#D23~5*Sz3qGMkgls1VR)67h*+RKeE2HI z85S0F4(DB$ZPI!A;BW?^V>4=EE)lW+%$9X#gg~6#U0L`1ychl9e4TfjO^>5jbsBtr zD}}P-J%RmcZQr`p1-sUamn;k8Z%Ii+^n)?;4vYeY1x-fs^hk%x&3oYMEC%YQ2-CfN;)j5wmPnfVzre5n*G4<-X7Ra7ArDuk`J zwl?2s58Yu5N9IbO7nVo+oy*F~2ss7-FhHfhJq~I?MQ_H(b;!<~zbBm0uCxdF2}Dp0 zifaK6y&y1(*k-JNvNq^PPzjj!?szF1yf6G7w` z6E5pNv=0|qUuswlg=IhfNL(~%NCd34B)2>*M?0Y+&}w`EnFUO?X`M#_Y#}ky!uA-t zMF8T^UC8#RhC}7GJPhSbEWfSKSA{SxVc|Z`L%M3Gs>f{jYtpi{$GPP-<-d1+v|&Y{ zW_H)H3m1Y-1FNYI9+ark*F9FCek~n1@0S>H5rl0KQaU$j6O$3leRT_03+AAk>0*BS z^rS?})9I$Y{I|{clm}66JLNTwR-vB)MWw_-6=M4N$?;tt#Hf;%o}Smm#&z2CzFAT0 zYRdYzr-j!F-jNQba04ebE?$5n)J1;eu7E--dhqlFg>>VomejsrDMRq~Z8I1co3>R6 zhuOVG`o%)Mw6Zc)My}~2~)^Y zzIk&MnIGcFDpszI6^Rwi|N}Be&57F(}|t?fV>0&;P(G8jV}j zZvFZdH2SCx2BcdC1_*+Y%j&S(>y? z+UzZv=_wI|;D|b-G-{7azj5%#74(Q+QBj!x^o*GrP*a=0gK5Zf4{8xjT_%+ zq`AP&eH5)V(I*1a1sJT%(pI+EN1(U4`%+V25gPU)I&7=6>KS$bPZ9j`7rk;#O-<^J z^G^{CEr?{mr;@EhxBC&=x_Wbj^~BpD2Ffp(VHzd*wSs{A7DP}-&-*7SjL@OZ1qp|_ z?n*+kCO+$gc~E$G$2)mJypg&KN9us9137nrtQO1|8fgDR=YAAL;dd9xV1*+gY2QXL z$`VyZnw^l$F9zGdBV2HGZY@Al>bU*kck~}1DEN`bj9!C7 zv&4WqGBF{65#m$)7U*G_d2(=m8w3wW9LL?!ZFB>25=`gM2ZcH~JO6Xt$rF&<=z)2! zeb-4yqLbT9(HS({1@#db8v3=h^;C!y5`Ex+KOa!ZI9@bc;8!|?h3U3oV5ev{zHm!j zo@WFr$tX|l#8a}voCZvA*m=&tQr#a|1GZ5xYAPrys)?k%c@q^{T2g||A&#mfCPsc# zFnlIhmm<01@TP5Z@0R&4kPMU88r{WEQPH8kTwVyxhl(75=S?(-mE8G%Wy; zHRr0Vq;%z*K8|5lwlin+MQnO|dl46{Iv0gx@tMU%i8kz~9x~$7h?e3xT)nz;H=le% z26|URA75YO<}+ zjh_70&vR;{-@o7A1q;wHH}R9-+MbWBL*_juw$@LOO6o+HJ$v>H@jTVlQi)BUjSLab zJu|d*>sGvyyp&@#x~u9lAyTcUNX{|_UCmHwIVi1`t{{8o&bg$y`Goed&McMUo3h_d zvF6vk?_q7GqojoBAs~Wyy*nG9e*)U3~*N9DA0Qc@n5Jbv{}@;P2Bud}u=Sn?Fa zYWHYir>usxQBl0jXJ(=|f|Mj63BR9^@SuDXlX7|+t74x|IlZy&?oZy%s+(MoPv0>O zg={sKqy^D*ajP{$)O;l+4PP-M>(S-pVj4)GE0b4KGxm~3znp# z)IA#VTJdr^;->BkaM1dTUk*E@>FuJfsHmu^dF`;&ZS|%Q$=jXh&vaG|L-7$7E|sJw zuS0!Im%@g+6<7S_aGiqZ?k(?$(VQ~$KG3RL_-UT)hr%4}|w8_r-k7^=OQ;%9S%ob0E zNTt?Xb2SNN;SIjU98cbH>AB3u(7d8)=8La)@xRwOdjY?!ZTK}GZZplyf0D%NbA_f+ z+O)`w&G(GFl)%zDy-QE{$#}WX>RD9O)=9x)I%?G%?`%x)>Q!zIZ!;(V^U)yE@t zl#jJ?c|m>8Ses&X$?~i9>k$zVT`RLJ)V_wC&*7|2MJuXGPi|iGQ;Kkr4TY|ZBY<@1cxcE8#oMBGE@_yk9hE^qGn(EmalbuPe zPmI}o8FGY*mYP_V3}`xED5WYXe1zk0fGXn;gIV}dS;CCkV@9lO5}R{a#Ghh1J|A%U zq7bU}Q@*7h_Xr3SqgM_q|E8e{*$A;X{U0>(2Nr%p1Zmo~j<763n-zlkSzbl3w zH+w#wH?GFQM{rjwhFjn!(9|A51JOf8mJ)BiPc#(hno+#on{W!2*Rs5+Wvf{+V zkhXJ!O?XwIkbzYdu2mio=oB|hz zfDFCE+z)Cw8$L!{xVu>QtEaX(u5?E;~dByrskfDr$NZi{Q<4>$hZJ@bEPP;LG>IXC_w?)E=*r4TZz z71_gn?j#I=B(9z$6%!kOj{l33{wHjmJG=Ugur0(jybZ_s{_ofDk^f=p)ZDURvE2BR z;UgPsWaHmO+y99#oyZ1#Q9J(k+g8-jNN*XDLyw5p{O1U5)CXs;pr+>SMEvIP`Tvj4 zK>P)g|Hpd}y>4n^auKp2oRx<+-j!(J@3}c8rUNO&Lvt6t?Cy4oc$~y9(XjvH({23c z?pu(#u>`gbV+f%#Y6S~KBAUf;i3n#Cm`kx0=XX^_PFBpIfB?Mz5l zofNdR2wqWBQxik(8t^NbNbU(Z;F1OecyW>exN%#m(FP(O{rc%OgmdD2oD0S5|MBBT zA~EjMC$9;qtaeZe%K$J@^74z&40N~@M5GYAuR;m7cnO%5iKj;;B8Y=T+Q(7 z=TD&NQ>q#KU>eY|LKd@!mREG;x|Gy=LPtn4Otzuh#TMba%P1hQ67O|%*Nz>p(b5TMn~ob_zO{C7kGHCM_d@eDluSID3K!Q!4SiMvC63(f+y^5IHu6Y#UPPBT^Z1Tx1XQP_3H5a!)V`u6!ygD)o%ex`DaaSl$!z zNMS=39&*#$`qF^eo<4Po_c(E~lQeo%Ov-H|{w4jh0jIw>?zu87hDW6R3*)I5N-WF} zh#{6?uQv>qV(8^oyU$^P^y&NecWa=YAN8Y+B9^~<{Xa>$lb`6Z zl(e*jT2$F35AdS)ckiwsmd~fM8Ffw+Z1VCqffSMCcJ4p33ai)Xb1@IKDR zw`5E8M_w>(&tJf!7R6h)*c-#es-A!^|A-A}RS9YY6ra znI(LUe*uW3r=%Q$E+?aGAXLMc0s#tUmIRWHfUYfDwwUNwL+X+UzRJk{W2f3Yc6O6= z_3H0HH|Wn8WQnIJdh0(`dJr_TR8lj>Iy+g5Wp8V|i|R*SUK$x~rUj-2PRIpA6b_UU`XrYo_dxpk#(&unt{|qyeEl|6aCNAPW&s04S6jQzDgoQw!XNrmi`r7 z_oGJ6V>fv&r)(7b^nb6uCv|t_Wuc>^|KqCHHdN#h(UQCe5NmLpq`m_D~9;y=`#p>q2V`A~CRMIYw_tqASH7P-m zI;Ig7@ooISqTNfRh1aRQ)lgRlZZk?OkN^H7pNjkSrp3@MTsd*^FaCgp_rkwDs^MLw zm!!aaV68oH?|sq!u`%Cj;=Nee{Ch!rWGm&VKhPK={?78h;ZfErJ&Jzcm936LV-JEt+(00Q|uwg0CHMP8%8@9nS0GIiRr?xu1vK3}RLQbqJ<+k7KJ}_YZx1FMcFCxgDIdWHfjx|*cG6YwBWiN%D< zd8E&$@4*7m4KyxTvTe97CC2%2eMjP_Nm?k1+`X`p|vk!nNNA2gOqrQeTiW zT~58po*br^b4a=Ou+q9ynO0&`E6};GUvuM*mc0;+j#dva-1@|yIj?6+G#6C&AyQ(e z0~F{3ii(O5*i@tFsiHf`fwwSBv$0xVtNDrR;~EBx_0r&sk?bWUEsaXXjQ6rsL3k@z z$=<=<R!6e|84 z$RggLzj$RK-UJyrIXN1n-MbTI&?zkmP0V^;3)uz(u|f(ee%OKRatVv z0nW(@!N5DjF9ZWjNFd@$;%GJsL_fA}6#9jYfP3iFl5m)e7SZ^N$IBs``U>4V@JRsW zqa}GyPacZfS{9_9QQqw1UvUyhK)zJG9NAGp2Y}d@`M_u(IxXcKu?DP(XC>;Uq^xX< zhVd?KwVY*-0q50I&xVJG5AC7ZNx5&|@enC_&Hlz#Q?7z(1UKPB`bNQSzq}0?46aHz z0yF?XJM+LfCgPajryz!n;e+|=6X+tY#|Sz?IV=Ua*|yC@`}tVq+_`gelzH8vZjFtN zPXMF=5{Za#LUf=M4ok^X3F*hc37tE42Q3LGj;aCtOcEaAIx&*rJYYc3&{~Jz#cg`` zMfcLt2|-2+eP#stlvFl++QCdoB?10o4EfM1c6z z$B3#Qmt`Bicn3GcX{)LZ|NIFJV|Y#!GDf}(SS#(DGn%WEIktDsb8Hwb=qKJ=^-(4k z76Fi&e}^((KZY0+vNz@`D+lq!-@yDutYDwO%CRUO2*rI63Q%QxFK_Z{l-83e1TY{Q zEByD&(C4Qo0p7lUw6o}LLPCPo5B!w3y9nJ{e@e=hH}Ks9mYo5wbpD7x8gbC2qvl1u z)O2*ckt-7<0W~^jaT|^q#Sl7gaCr!U_=em`AgFRkJ|ua&u}T7lAR_KX<{i&B7Zk@y z1ij+t2{15h3#{8bEQ`Se0@ev|l?xNy*nxBK5Z6CHk2Z5FafCHCY#gF{5(^9M=#q1D zXCORCj+wya5|1t&H{BjbYH}e0h5$G44N!ud(R>EqNYpv~?d*g@ynZLbrPo#d}{D?8QK+nb#)VP-Qvc)OvzK13h@5t{@rewrJ}7} z0V0=>7bAU>&6;J%G4K8SDvUIAD<<$HHTi`id3W+d|GCEHW z4^#ncmV%;ppoRA%c&*rtzXV4n-ZYx&F23l^X`#rFE5`^F8bY+Kd`wJ_weHQg-GC6^ zKn!4LVxmzb0lubzjA#-bL92SIEnF*$C$cV|;2_r4+r32*6KyG(q)_vKO)dAu&nk-s zjA?{wj@x_{gbkAB3^+R>cV3Dv>eQiTzjs!zEPs=YQSp8uL;^*!{5VCVC&>D>(E)!sIRN5Yj5WP zf1Y`;>sH{+JmCC@#ZG!D>saD|MeaR?vf#d!gxVcfw2avr^cV2?yAVRsIFxppP1YvU z_ z+&;!~8Bu)@-hNm!fZQ)5KK|XpAt-589WEs)AdGBeei^#W?3_~+g41s?UK0v!2)`Vv ze5g=4z)`TXu;{G>*9?H^>!?-(aSO}I#ZS2qd9O`F-XXpMmf$ml5E3gr*acX*s=AOF zzzXvnH!f(Q=7w-Qd#9rc5}eItvUrGvg{9*?dL|H}jcag|e8KWov~A*kWf2R7ABfE5 zn<|6wI3t{lJN*YpGPA4>?9(zM!)E3ulBZgukcvt0Qq%=5cwB5_YK%dhlP-`cs@PuQ z`qKUdI#o3WtfAnLkfu$!VRLpkRw|wzxr@W6Uv2F?);< zA|B(6woc30C#g#L-MB%~*}JdnG_%l8K%D zW6@#ECF>if?wkTPkDaY;lB~n&E#lD^z^jjbTp!b3*W&=2b3x}ViTWkid)zj|Uo|WT zc!Y7ij<2sY4%-PlNiPv3_5S`kV$-hd4wkKv2Dijan9V{Hx^wFTJl!yD%7X`QshN51 zlBrp8#nw@q7{bHpL6AsI-aFokr8>*e(a}HT2)aO+j(CmQxO+gDhZmG?Y&Cl;5#NEE zdTKc0r4kjfbiihtEZsrbPO6TAcf*+vq!D#ojyBbTulXlpMOlit{5h*#fB3x7bjVj_ zTO^^Lt8RJ6&BdiQVTx4-zt4g7XF{j$KyEc|h(?CyOc8k2G5%lO7N!1$YM9q5xCI0V z)0o*II;t#Ej#w-S(xVRU5r0u|A52{!s@LWquFWK(mU9H{ju!<>er&$h^3OsMd%O}0 zoA#c=oWDXfEaGd48*74sE*rw^attb*P->z*0lX4*?nf= z+uA}=K#$7v=;&)Wv)G+S#>ZC!-BuGp@;wxo(uvMiru2SPnBUb#BJ1q+b81S&u=+qX z3dvA}m&`33sE7)3?0XI(3vL+}US0>tqH*1c!xD!yv9qbjd@zKS#RJ zLuAcDbMOj!Uc{-l3!G70)cH>HRPq80IK?+(qN81*iHGK7`upVnoJVr5L`uw*E*h|Z-OYlrd}gO_D^(oRuJ?e?WTIE-1ltnjGMjH3s!k|t(*I8 zeJ~p6XiY~ar`*s5NOBhbFc29}t0ULlBH-Uq&-l1V&~mXG@bw%&ab*uSGY)4b-A;sS zbu{`BVySpJL4<1se=Bpg2W^PAe{l&t+r4tDk7nFiaAg55f!LBF1Ht9ZV60mUl1w?8 ziFj5F1-Eabk%f;yw~fe2vW>#;!8J$Rc(c0N0v)Z@kHJ}syG3^gYjuO%1n!)CSZLOH zB18)4RXGp|T)+CmZEeWy&q&lCO&I34l9F~$!WkOWru#{a${EI1JEL7iFuw>czeWoV zqYRPXf{L7Pg?>d-;dBLV5?SIe?rZt*1~(R=^P}{wB2v-XSQ48$v{J_poj3B^f3U0s z#V}BtmoSBmdC-q+$I1SWC2A~{`@{=KFtc=WR5^+N|B(MS8HfJ2{P&v+?os`J%YT_D zy|HYVa1Vko+xOV6ugYCCi*u0mefs!u&j40inx*H@{u~a@9Kq>*l-n$P|3S0d2=&Jkb=)NOl_?$LajH4yKRN9h&mHBnepJ7M zDmOE860us}kYN%X-Tn3IX^Icr9ndXf>0k^zdEx|Niwq8KHOg61NNqDMS6ZNfEfc@& ze;k$Skj_kuiM|UV07(fc(a1KIB0U`<$<94*N7MiZ62WmkRA*wGMwz=KU*Nhf!ZM0l zcAe=!42&ML4I)D~u*fEQOBYc;VEt5NIshtPJTV7t{t&oD904rm`*i z0}gm#vq4|x;If?FUt)hXI@|kg=l*Z6RA9XZqn_@ezB#vU-Tq`T&wc__r`)-DlTr4g_|!2KYL} z6Cs>H6zM96d)vmZ&SI40uZLT}cnO^i;0pmY;;OnNBwD9(eKZhZ!{P``t3^f zs7hEV2xrP08Y8S0D)$3v&f*AvDtU#A&vZE@^46=Ws^QSwX=M%3TYpN7&gXmcxG=d|p6LLA?gLzBy-{#j=!F7I zPl+Cj$pmwQ|HdfAKN=kw}N+xOu+{H&pHyQJD%~FO$l*F&ChMwXt?2BU|o33 zqas*ysf)QVdH@YLMzOuSJaAp2=cV}94!?f@*wrcRTwj}7?}~|7sJ=>Cvtj;xppsso zp01KkG|wwZ3FO3RSf|%rasCW1Z+HNMfIy@+Cpro4_m8g`wLay)bN6nkQFLP{2#ADQ zyb)HOxbx61-iJa)z3q@Rnq}ew+vmUwG(6if)mREiyY;{28t!hR;gV-j4b;AJM&*?Q zPO*{K<02fysQV8HjN@^FO)3VRBUlUgdS9096<=gxW3&A+Xp*Z*wQt{VsHtzmm-p%s zq#)=pcg`;@HB#EnSLx-nl}YEn!?(nohg%D{{R3Q)C=qOW;RyHTy{^;)I7kJcw1IrX z&hp@yQ__bQbPBMLxfkK`6Fbdb4VtbdG@JJ`?jqd0WeXv{M8uE+(*a*Uyuj7M?ANayV35SsDEg%!<#Z*gr6xc0 zS|Tub_Q)+B^P2g5lp`t%b;t6zp7$D6~|02Ahrltv(ai`}md*s`G5&2qIC<_go zr0opEx?NfOO-q0t;r44@yYWN2spJb9C0a6JTeYwa_%kCo*La!r6c0uYG`IHCGCAhM ziXDF#%e36!PF^-kr5BS9E_}c-zdbnxN9Aq zA@P-#tha#Q!Ds7;m4*@#29Ah`BmcMNk%mY1#8W6qTrjtpO`z}Tbe<|1%ft#_(?s~i zfWSI*YxpAUs?Xvu#D(mIIg+QI)eM*&+C7VY;bn62H)OY&Ssc4BD(Zo>i1|l5_y5s@ zfh-Z7ifOD=(lZL@F9w`7Umg;-sLyH){`w_H{u=z`e^ig@N@>K1Zt4YlHKgPxx+5>e zhhrBYl>gP94`>6_3jkpUa^tW^0K9&ZkmJm$3?bakfDjAq?dd0qOG*$5RFf7bWi>Ee zpsO~%fH*_!Lc}(m2MQ-B7`4s5)wDoasGIt2p=`?gCI0w4OO4YA{JM3k6TY%<-(vST zqLu;x&Jcp30#jpWy$J^EUlZr%A}m?<=n(z8s2+(xiijF+>hCL*PN&5Ca7)4D@fX zoBPfdoy$V*jm}vBNEs@T&!3Nc|Gw|Ykuy==71sA|~b$8>@Zg%2r>~-fSR} zT{OPANcplEx_`6W<+*V1y(I*hs3>7dIO~| z(XS%HQLXRV;A0{T1GG@O2WvA_Z&R;-?ulBgZ$0%e;!P^FdjMmIL6f2$K5 z^}pD}DRivp1CeMSXN_;weIts5Hm1oKs>NxFC_g_xTnB>>*lS(G7Mx4kvE?oKZ3_!r zb<&zeThcgeEiEfs4lfk^!1u=p#>#91TymAVbLTfW&c%st2@_r2_`pB{tN7%1`0@zm z!e7>WX*>EOz-Gg7de0Bd>~p+rXq7R8!}=u?e)b|`P`nR*TAa|v+!2dUZ;x;;fQ9l- z|Ah-ihlhv5vND3^1A;Ttoo~H&vqfXtCL6+0g~o#OIV-#;xH1?MH8L|meWx(sM-K1U z00y<8jB9lh?o3Nbkvz5+L>>inl^-7O3kG$MQI}6ZATcwpp=HDdRRT90AgUhWk;#7Q z8Pwia08+rs0c$m&ilh8COzZ>!^?K9)hFK?j_(t{f<{)YWUC`FX1pp#+f1UT^$4{h^ zQrNAGO$#E_9k2z&#XmC0YH1z)yIF}P1Ru^nFfb4RlMQ66!2WUH@_#XgZ!3lb>uYPV zwe-M7C$%0&@I0oROYsmp-$yA!HwCZ|*Xaa%dU~E%-CCvy2zt-ZuG6@!1MedLi3;-p zAHcnMWbqleFH&9~Ke}z zsB|l6)2O!{`ivjDt6%OkePvv~lk$xlVWFYaR8%1lom%4$jKAZ|g!BM;{i)0f-Mb6k zdJ@iQ@Kj32@CtJq-y(^{qfWE0g=rZX<`x!qrgS?C05AZb1(=6|vNrXqwA2~VQWX^y z^q<<>!)AhW-yls)jwyfkPCos8QFl}O9dv?fpjR?f@aiyh$f@I|tgmUXwuLrsH*yF4y!kTwI*1x`%VDX9M#8TrELr;vK(O=_5a z#Va5etr-1Gg&E*zph^mEH!WCgI7_f-E_1iJ@SVH6lc-aI5FoEyc%%3ebgZSZu?{m= z74EcX6(JtaKV3o>WNi8B=8B3z_%9+iZA)x|%+I=V1*0Vt3BZY|GQjVsNvWnh*!5N- zG3xau)-Bt~rnBE_m6Vo3dMP!MgpN``f<5fafn7ZX?N^o7A!0e={}LL>OsX;id>-;7 zoZMX0!>{=6%sS?1tF=lFzd_AM2AxzYUykGn!wzZglnKU=*dq#e?&Ktd$S_v&VO_gN z5*NRaSdsNwtsL6T25)Yj^N%^FvQD#?F-wqPIHyTsJb-$`=knorIZ5f1sNh^tPxs3; z(L`_;tXQ1+S29#8=9;C!vY54oXq+J~m@uTJ_D^64j#pa#_CfEQG(!fHuV^IF(=NOK^ifQTS_&iyp_wJy2y@YOunc{-|8A@;9!8bKE z)pTkoH5h(nyC1CVV=&&`ZSK2mq1lW(FW94viRwO*sy&QbBL6%>?esZ+B*h&+fMr?<{0%O<>cqjhv|rfA}OKW z;37zbeq|ov|M0R91A_UUTHF$%f7yXw;nZpN@#Z>Zc@>pVq*3{cOl-a%7S;|%$wFs( zU#X&B_C-;%txw+R#D&$-s^jTga!j|P@SWM4M!Vlj%wvbf`^{I8GLcAuK&Cf_#$UKs zuXrT;&ARFDJ5!zggqprPfx+f0)5$@yLuW;OOXHAY$7~ z_f^Mb;*Iu~{3AP(f99O-dR9U1(|c4*THNo@_qauJ$ShEMyZUP9V?{h&vW0 z3cRe)Hb0ew56N{__yNmz96GDyp5RxNjte>Oj@*(8atog{u}_sw3gW&?7j1_}M}3x2 ztK4r>#zXJ%_Pfp5S{qDqAP4h^dpTYyv4Gos`0!!p6|p@|{Wix~Led})-jh}*b%@hI zGIBO-@hI?ip3*gsOS*D$a`)~D)0|IgGOmvmnVOsw27FK}V{?sVPYsHnUAiWg+)*b& z%0Tz;*caq($eFN)8koCM_M5|6gm@zJnKO#%ZL-`s+_?Bc3TrA;iN$$I{t%g`Mffty z*|XW86RUo9Oq*w@I1`s~#i9fF5Xt|z*LHYf!u(bw21*o3k8NL%;8VqY+YltsZZ9 zBF;;;a5fhRVy;BJfS%jDXKW%cn5rRQ+qh*?%>zRLC|=&`?|H?wrKg)uQTw{OxS$A{ z)8Bg^3ZUMuayadthtNtxz0Ns2VVvZtO4TCW0XCJr!T8!5qlq)qy)OYu0ijd%#uq+* z_|Rb?T1Lc1@Xnp<+Ib%22Fe8g!fo+@Q zL;VevR(*j)*4K~;{?s+?m0=8ON~-%P6cQTB&CQ*A7hFdBAbB>i6P{E!n6EdX%V;#m zTkZ6d9)CKDu?we>S=XTOUB87-=MIx?PkRIoJdM=*%8#ijdP+*`I#-n&H(G@0EM6W@ z^TCkBUvWa7=Wo^-ph#$9{gaj(uHz77rG^Mc(fsG;aW$JSJXXVg`FvBn=KUY)N<2#N zRIQF}v^CceG!_p0``ORILB_C}mA-R@2Tc^x+i-@U{>%0x4*XqRotDXGM;W#UT))2F zdvfm%kM{sRaUrFW>{Qr>7U2#9v^=(u?c<>eOcNwXtXxp ze~ZJKh4k*JZ-ST|ak|<6crODn3RrPyIH7L>JT3(x8CYzhkRH>IE3hs;WG? zUL*>pQLyF=ZHI!bG3;vO$w*_WXf>G%99E5a8((@RDwHP7TV+ngH|s4PCn_-p&3ErQ zcZduUcO@F0h0lD$lpu5ucwa#n#V0=z*KXuPAeFO9@0?pYo#F5b=}+Qzo09!R0k%3> zYm{d=8|8Lkczzkoe}+oU;1BeWh7I1c z)6=4hwO?_OG#Ex)iwxzIbhL)d_Fs?ps*j$At`e|WozZ#C}P-ZW8gox8zi@!(FU%MT5B zI)C%@U_oPId-39w5>!xc$u}%W6}QdIU?k*^W{1kKpy~G>miMMSgRq97`|MqK>{N5U ztxpZU&}xtgfq`K)1H2di-h|l!J3mraLR|~_2it|d&tM~EZ@I3siDcM5r6MCowD&Yx z452gWSIggp0`=@?3XzggwAII{jEj|uT%!!H#FY(;qPT-P2Br%{#k>3EGT+YRI%S}J z$YjNsJu}{Ex4M6FoNR$u*7z0uV|A?TC-ht_+nk z8>I*OHDx-}!R?TncXf9=Lq;g1y1n}y0qdXvwmD8l$KSdZ+St$(b{dN)$*D~E?Af!N zoRkEU|Ie58t;zU;-J0b$kFrH!_dTN^B$V_|JpJ6=-Tmp)Eo7<~Uy6Pj5dr0l^NU*+ z72eHi!ftCWurz_4l-+Oh1ga~$w!!e1C=g{@96?_&OMQeePPF0y;nP~)lh=vhjxpX= z^F0(4i;&3mjx&;f90|HCG8_lpGY&?GIL{U)NlTuh9KE;L+L@mhn&}JO2Q+A#wrpoQ zuq%prxRJv|zO*7~Y-|i7k}9y$yP(BR+-@{P+_K~P{qzOmavfg&(FR<1*xJ@6 z54J?{dSCQURG5J+VI=&B;*E{Cjm*m_RxL1?T3Pg5rUwRDAF_id`(RPfVp_D>xuK$xrj&+0TIqA$;OJ8NmDzE~a>0giX8a0G_Y$UBO{bLbOZlphLI6(zHpK_ zp0h{%S07I7aMkvw6QJG?2EtvR7~bRB&qdZ@VpY%hYQPD}qrLqiz6Uv$uo_E;*g5lc zpz*jxUf4tcrW z!9^NkZM~@t=hOZ{;*HxvH8M}@;_3?a6UF4l-xCn`-UMe~=P>y6uh*x=_oMzk zJ|&q&5Q6=k#t&cnqmS-YB&)11E<5{4bO0v)xtW&xV|y$pgT7qRHiY~M>ateKl>0d; zK?uXrV)YT&J`!1!S@Ys!-<9*h=r>%c6x#NUKjE&T`Lt#<*Y2gxTiO;-e$q6>>1UVG=;XEuM0*{A>c+JICzIPIA86wZdZ4kr);rV@82}8pHKwHjhtB#}65Q{~! zJaO9{eTSb8k`J}Zmn#9ERkMV~-@RxX^ZdDq+K`>>SIB<41nJN-C{dO?PPt{Fre5-R zxFpf&YiyQ))hjDMRo2Xm3^sOl?#Mcrry?%=719g5GHjky^^J?fy}a=bx+Q^O3CE#t zDNV-2>C4euU-q;<(mg)C2KInXO*^Wps>(7P{*-PfX(S~YlE!V|mWI7nK-r|~_teo} z6Y&@!y(22>u9d~{D@wq=9@ht7+b<0#yA%y!G8sQuEP9L=x{d*p6{N&9rnPH1`)dg! zuqxljtsRi032_?^-H{Bvb%VhhO`&E~Wwf|vNRDZ|aF0U!er^pTSCr&!9?L$NB_dg31`>n`uP_+^ z+~x-Zq5}{pnbUG{1oo5jAbATHFqFO$F&VNkzHns4)?&yYr{x_xsdRn=fei2JvCI+} z_8PW4%w@8isDf@Yj6~CqcpM~jUc`ZHVI_*?^~yX6n1)0e%HzVq`LIz>aoVw9$Li#Vqsh@`LWvORk@YVlDiz zu%L?W66wg0(w5l$DR5mYd3Y~?UBQs?hr+7B*Kyi!W=M>ULcXrkEO9SjsNX4DJ`4b;E?^(A7WE>1| zRzdqxdYk&f5)9z~ZP+m^^(pzCKMF{7{NPd@FYXe!QHAy^-;L!hB*PFrm)OnRNbgEK zX__^vZuZhMsVlL3*St(uI)9gjtZaZXD>EP8bJr&WS4X^V>_r;Nu5ATEHEH?}cl>F& z$o9M$&7}yWA?A}G($2Mv#L?yQ7nz+_8p>yA1IkrA@#P3ExW;H}oDt0zf-e}#TU`F~ zc~N?0)Ry$EgSBco5gMkCKf&>`n9om~(gCuMSA^kp;)bHe`{Lk-fMe zDA;31wQ@QyD{HDw;4M`Q7Bqb$1NZk40S?=1qsRL?jn*z^Ak8mTj`ZfOsfy#J}>!$e_ z5ycbtxna~=-ngc?OSIx9czA>tT@s0&cM_rrHdrbR^3NTKUKB#LkzXeC0wU$e4qb-U zr(?~=C`bi1KY#w_am~=bvk*8-CpAMeoTCf{=&u{{L$NBj$U85LF(|cWg$hjqgeYbx z!Shxn88Mwt{})MD8Bpc6MCm$oN_R{X3>1LSvptt08?T#1FSD9E?!Wtjd{^@)dpUTP3KK1kF z8z_<&tta!cUtS#kWh7z?Wm6=*gGSOp)A5CsDK_QddlR4T#s^QGe!TN4H!=PE*#N=? zYG2Sgy*HWF-8Lb?P*qf<#FfDyJyARfJiWLcx=22HmfheZJmr#fbp80zw?L#(IT$eb z<$2`VtY*R{#7TdEcofC-d$)7hAVkr9)u>iX`aA=8x+Olt=C2}>E2+q3$FVN!oCd1 zP!e;V`tYZ)fEmou2QEsz+!NRyQQKt;LG>WSS$Vbe@hWoGRuU9I5pWGgKI~4G zwM6n77mN4KfOlXO)V$lc4IE}>2QHCNVc=fenTCDg6jq9JIcD%2>gASUD_->)j~uMB z?F(TBMvBM2(*u{R{FBV=%ddVy{Y=|t`I`X01Oz=A~vHU;qm zWyY(?SAQ8Cx7P>Kp_2&iXHV&%E(tQ)p=0C)Dn=e(wOn z9z4jOyxP%fO>l^zjD%NsQ6l+u&&I&We)$p>NU+3%tC6CLV0S@t46+n}@<9|j@)<7K zZVE$uMtQSCH#l%WzgYGRSzTQfFKe)WAj%p+JQQi*?u|XZ4}Ic#v3TEPoW%T{=PA32 zS$8vpyMNL<9)V$_UDn0#3ZPn zIYE9}E_4O2URlO(_>O;s)&QPo-qmkA@v9C)4!^fS+~jz-$QJ))aeW|bBFBqFQ`Dlh zcIx~7q@<#xxVTM^LC_+^$xR8MTGQ;q$_EquUH}I}$qYR0{Qm+=4T`cvr z075{=osE6JPB1B}VdGJO7t-yh(R*jhMa39SnQo2JeFFpGU*qsY&dz-EI6)2KHe3XM zz-59VI#vw-Cju?CJFm5!U0O;CY}!=eyxAYkQf2K{~;y@mHaFmDr8Gtmfn)Wg;C@MpT z{urKW`Y;e|d(~9YU}rG)ToeAw0(&lT>{i!#GTr<4F+SiD5`r+`bxsz1iOM9pBU;Ju z7luMyrXhjg;JP~ia$Mxi85V}W^P-LMOda*wI3a~Ao z3Om9GK+N422JXxY+X&lCI3b#tgNER(0arbEzJT|i7pe9bdR&5qjI^`~z5gxKPGE5{ zT|&P;0<{f|0M^L)rQmm6QV5cbt|CGi#MB$sh z-QMh*_(#XnY5gxssON`BIN=Wq@^#Y{>0<3q#`W)deX-Lm&=nQ1j&&=nufO4mm1Y4$ zQezAlc5r24Wjerb%7=S#x~BlN5WpG?5%ByPIqf?Op>ovG0ROBE7RoW8R=IO$q(@Iw z9JoF(nnCi^B+ITh+%Y5Z;4}WDmzx|l9#q$`6@}$so=Z7IpM?n&h!ny1RESz|fq>_c z8lkTv^#-}iexCnI*T|?I{DCExVW~UU=tV1Np$LxL&Z zlFF?>@$8+aMmNpXS_5~zGp{$|;X=w8pCpE_MKm^=MOpA`~D`j)rI0k&uti9+QYGX<7g*XNWTKl0;w{%cQ461TY0oF zkjPm`2O^kK)6$|NBD8X(AJD47)7rxN?^RgCrfYIUz)uGZ2aY4?-GH=Go|09j61fYN zqkmvP1+jvY<`0S!X=8Pg^vP-)O|XuDb{ySY73rZ5;TmH)GJK+<_hobn?8Ue~6H`-f zUcLi~3{0Jk-SzOc)T{jWeM{**cz{emg#9!uJm6LFIDG?k;K_if1shVo1;5{I@P3rb zeq28cCm)_89Pbxx7}j3!#XM~E#J!YgYJZM&SX*9M@ggiy9=)9i*}5>6!CP7j#+EEB z%9OLHnQpK%!3+KGw2H9G$>lr_Cm{W^iBd!W9FDhTWftDJI~6-c_9T7q*?807aGp_v zM^HAP?n4PY(6`=&|6_cqvsy!ubGCm709* zRkG_7UbX!}F*jM37rSuMzj4#@>mO6RFd!=H0hTCr@y~Yf&~)A)DJkFHO}x<}uiYtEx;A|!<1cup_O-rNRW*(~F@ z`QBL;?i<}2?%$B_321!nS6B(a|FAoDz_*h@#=8PM&fdL;g46y`GI%T>I83N}VMn>1 zHZ95pICLAN_>qO$Kr^y{Pz+d|{8tM+%xZCazb&;N!xaOJJ!!w0B7GwZKn#h+fFblM zMc!6sqMox1>jPdlDDko#ILdn9Z^9sc14kN-%pXV_@HWi-GK31td-*1#{`DE08ff4n zaKoZ|LU|;gJ&A#@5$sdp5`EA3e})g&G1MC<0@pg>t!UvWF1L?p{;0y74<=nSWI~*V zolsRs{t(%G_91s728;9R(w@w%O zup3U`H#honL`oa)*3;W?7eWud)XtC zQsI+qeUXr$@awfc&0~h9k_`BVp<#ooNc>zaL&Zk2XEo*z|si_dVrR~4qhqewr!y_UxY=sggN{TE1H70bBdBe{B%M`I}2?ZX^!xqya zB@%zw30T2sSQ5@omDfFO(gnZEk-;$SGaAn)yZ|KzraMjV# z@rrv5uq#*YrMpkiGz)Y$wxl8pDGDnp9KkFf?uil?B^xBt1=|<{gP%a6BOyns3z28y zayK4SS3tLCS_$lw&6Ek?A=eHUZwf>1nCH+YMx^~vP)TlqS77Y*%01C;4Y3DcD$|@?QS{dJaXz`qNfwlzqj3tt3rn>-N0qo5v z*dkf>QFDM=iuCp?7>Eh5xUyIVP?rK{;3p{Bp3l%qxfgpQTdGl{vKcJNf1)10uAk;- zW^Qlbysxg_52m?}&YZI4&?KMFj^BeP;|x#6GNBE|dL;^I^xajp!H#Wv0BS2=B?F_9 ztYq9D*+MMLvn$>K60wTjUJV2V<$kHG277z}5e;55Ptbryh$EFXfjuJZU2okG>pG-1 zTJT^zXcen%LHgN$@g}gyU_5^Sh&!Hz#?R>c;f#6-)jKif>KPjrsA3>fd!2wb9uXON zfU`))a6qv=cfl_q;RE?u_I4hL3#DN&DHdD{C_Np8K1V}G=XSF9J1n`<>EWn-DPwgz zL2hz>CXz&fHu?@$n}x`JdS$Ld)1RME5L4i*2k)JS*ftW42Z#MboQy~Xa$DxnM4$Zk z_gKlpTbWAlKTwhXTTaz&2Qh*)dek3Ql2f#-s_6r(DRz?7)vftIJqjVSnCi2_;C|`x zr8xJp+g~(a{Yk~T6mMeg9Xm;~0Jh(^!&pC7MP;*NM58?!{A-)%39V&wlW48#JwS(H zAc=?h!Ob=kia#haY@2X^;}mpdQHDM%W7Uj47WY_P%&7BD={TCY#uK(n=7>?p2=;?` zYSauN65Lz98q4&!9uc0|*;ci+{Y>{tK1;07A7XAhHMiB@Hd54*<7-gI6a7<$DzI;w z=})N}?jM9N5<>HV6c#9kx8aDf3VwC6Yf{v{h}7t1vV5 zLe{IewqH-k`k5Vh&6fIHA_40Bx)Hq+X$Im2wE^I%1bZ;P@73QHa!!k#k@LP(okQxI>1;MZ?99>6)-;7}R=Mr4;^Myf7YLei zd?=)`Rb?aZ@jsRizSXDU^f9Qk+s2dj&J)s%KBHKSn;rhP)+|eSUnQd#qG;PPq(k8q z^Dizb0df9_EwMe(+cTh#0*RF1qEt}V^&AEvHbhUz9Tq0PG(>+aogI$|@4Hdj=m(__ zliIMc)Or%wkF4UQ5q7v_Qk%~)^9~5Ljhps5DEHC>Zn83pix(77mQ=FWvL!Mj64e|x z1^aWV90w}Ydxo_7Gr|{iUL}&>FiBwj!YlaUm0+|D|NN@>+X!PakgivAyoak`AJwQ1 zFx4AsM(PZf#12A3G*u~rG3S)~D#6nD;g~7mFAn9l?^~#ADJH-Dc4_}}h0Ehf*HIBs zZ!>A!+n#R(xpW1$QYGKl(7YV6)}iiHm?5bF!w)qL5p04H!A^KNG;#W{Sl*}ZW^?9Y)c$ULQ(YI7TNjv_C)VMJeW zdjHa)Wpp#ffTcWC_@-Y3@$%#kW%PJy9?`LJ@@q;hW&#^9ozfAr@Ux`UBR0)2B_I^f ze21ojrEQVT>n4Bn`S3fBNU7$Xc`7yfA$?*xztk#v!s!vWwAnYR@8}R#4EndDjW+R> zGLlJ;2+9eVU)G{@@~OQIHTwBaTg#U+ubO~h8YC}~=7;a5FJ4fha@hunX)&6hu)m?X zXX;1zgRE7o*Mfc0)*yzJVA(QR>4w8tU23(HdEvm(;ogA@j{GZaLTM~Gx$!Lz=t^@`92O4ke z8rVez@)&-Q1+D?0IzyKkhuC3I$Gjmw+N9dwi9wo*fD+c>~YTh)^3w`Y22zmDhfv zp){GAGv!|__Lzzib;b-dTy8Jz32?Ll2~=7;Mg7;1>Z(duJzv ztWP&aN!~6880!hP}S~ zR6LLpervreuUH_aMwPABledPCqw{)15_%Z7kfJ_4YTJBk`<%xjgS?t2Q(7uBC82FD zt2fxP)#LRwGSvLDj%D?Vc>Ku;2>aO33SkFK58htsk)8uTa$f^5SxJ=Ew_moFRL+UV;FIeWGFS3ZYR6Or8;yG;{{Ea7`&1_y}fzv zU%3w`brn6wyaSql<~ekrEAz%P$Z44R&7vU&`7?~!BI*G%AV$!!tE;=U>&b7;LMLj8 z+A6!!6tcGL3l{iXAIsiN^1ORD7JxotPPa5~e>^Id2``y3ZjF(n=P@wDke9Pt&rfvRUftOT==mFQq1%m3NX<>889u)b^ zFFg4qUpg?X7$ptW=qw)fAJ;3|9al>}4R04oz+fXTZ8z=w){qd&JM~kvtdK9ix;lxU z{Zo~2aHQCvEV%z4uEM-yPoSLg2+RNEcR$+rd$G@2JpH1~wvwJ3#M*3lqTU<#=|-D` zAEGItq3d~a#&Pg+B-Erx>%jQr}7LZq+kRfQW6L!KFgQ#M1dDS5IvhJEwn zhr8QY8`;Zl9c}%4g%EEzjJ+*#XXT~66nwVz@`9D0rllq$0&ql|0`@0XnqNhi3`T{(vOA=JyvXlt z-!fgZlA94D(4r?*_G<;UHX96eH|X+{Gv<@rwXi&apEd1DuP*#Z=q`PSgz z_yKOT)}qlY;qry-5{>jve}NZ!L%TbWDm(vc*gX}e1|zCdZgM{52bTEoA=X{on{ztF z2m8`qzrHlTW1*c8RyW%jCS{(kc0+59gvBECj#n!thK4L~QkH>SrMO-SGxtlw&3|n> zmaktYCgwM=0Z{lVCuit28Ckm)-VxWudQxew@Bx~6iTf^ebP=c`fBh#0RkansH+jeCUR*L?gx|5_alz2MKLUx zf20n^1}8kmbIK>!DJW=YG|+jD%uytlWVZ_caG)15tE$5iW4_5p01uF-c9N@ZhdBTe z(0OANI%Cw=S8tN@k$_Mp#^4?SI1nuM&3z>)P#hw8&&JM9KqJZpRzDjf1(p4%NkLDp zwSa282X-}I`=dJJ^ z=$%}XB7tSwRrVwH|31u{>_L z7Tr=AliBwJipWB~MZh?+)543a^`K7+tN8rA5?7^M2*goJ;aFmthsAG2v|&mGjPiad=>$PwMQnk8Sl6}_vRmR3UiT%V&zyCGkqT$Ynbg6H$MZg5~lD(vIq%4 zV3Ul+2cs5mP*Ih>UstuUVXt=w8wXQ9CVS<_SjIEqUJnhvVT${WV0_!?t?|Vl&Y_tp`8!k$Au2k&&LB8~7yxzq?DS+Kw3eMtvU- z3_wCcuXyBrRqaQ<&Nr>f8JNHz1Y*Ayx0Txwnn1{FZ*RBH)}sVL0DKv)0po8iVU(^7 zk(+`Q6`%yke2#OCVsdiyf8d(BA>lmxmXbp&edLaiCc0gwt5_F>U>Ys&q9tIG7Su}2 zR{SK-nLmukVNz_BbDLm;%TITV2k{|%^<^N*0+E_5-x=_AU{7fJYb6g-QsDdc4bU-& z?A0Pf;Nph9O?!UzoDwZ~j0gFlyi`Yhxp;V1#4Et&s@mZ;h|AaOSk8nv5v)(_Q}pxT zNCLLe1fw{t?3m0z35qSUY`G-DbOI|oe3p`!7@QO&T(qc|SPkKd5UA(~E=YhJL%~zD z$&(M%k=dz13guv8ffA`lshK=h&< zP#IyM$3D9Pd)$~~^qbSoej>BK;F;84(D~3?GVka8hlP2jCZ9MwUWD}zQd-&Q#dEqa z2^csmbKw?jSYD|a(?O=t_kmV#s>00&KG5I_0H0Bl40k|4#SmFZA4EB8S741=#U zuPsU#O9Z$qQn8C=81u5ISFk1koUe7q*(r_!(fF z1rQVZx-&ei2FNM_DjsblC=x{YU^OozFaPKk0CF`rcz1Mku0eDJW;bMAXi$Fu(5wgP zl|aKP=^i)d-3*S1+mK&(@Dyx(!8!r9GvFtC1)n>#n@-p|#ycFI^f-ZFDa1I2V*Z2N z40zI`aG${0ei-=Y2h#8%^@5w1*R0wacXvJb-^Bua8hF>1+QB2&3)VGo^vBYWnp~8- zw?)|(y|+_~hGIa50_yS1CVFPPuY-fX$4ZHM=hp`_#>@newmre1{06@i026xPDlzw- zvQao|CxRD8l!5|YEqBy`6CfQTZN7kX$m}REI1MXlNvP2@^dU6D+R%DFgK!{o5ZS{S zMy3VA$CcY_K0<0aww55hCrSq6*O7zU@1O5!t!h6FOAlnHH$r~`Ay@%$azLaIlLLpQ zO~syL9aG5!C}Dvc1<}n5=w-WL?2wjV@mk?>i3k*%Yud<=x3#T?4Gz$#tObK4c({vC&OQQ0e)t6G?&9I@z8VBJcy8^ORP~~f1VFEB1}?}$ zlS8m}>iXmM3+`_uW#V3fQYXXv_mK%~G2aW~a0cMmT?5x9V80z(9uqPe zZR&;g&>&MN6T+!FD>g?8I)T2x#0G`IBR8SMcPWx;Bpluvz`ud%Jx*b0#(W+NPk71T zVFh|~4g9kcZ^W2v4@usU!;}_WHRKe*#%og3x6rB^0v|vD=#pQhxM25AEl~^4Z>V1VSM8jAV*}`&g%kDCW@2u*}9*!?*uq4N(}HG)5r(-B3>|$P9*wi zyi&)o;P=3%?%A*EWe9(y=m%&m+Gb?mIcwPT7PpSLwzSD1yuWpG#Xc-dZ=e4NTb<={W%=ISl#7;qaCQF<)k^q-SOYezhu1WSl#IobVR!!7T~$$EU>eQQH+_Jey*x>cd$R{A6P#v)&6Z> zOb9w=J<|he_VI_1T04w3ZT|O9yd|db=A5L7f-hzkEK(m{6JAE{p1e)h(Z()$nC!bNJqE0wE2U+ll4RI-m z=NV;v6LT3%P-@Yf8RTp0UvfIi@SfNK=NHa$ku6j?D1_md;tvmQW3q6h;~YP8b=^-f ze1v;}a+8SIUG&YXMqDfmDQPdVf_7-NXw4*?D8D%b_brx)x3B%4Z<$%Z1omx6-}p;4 z$3s`79>0H-a$=FOpd0A}Ke#Xtr}B7b0c?K2b1W%kpSc~gg9B15#mRg7IqaoREfTd+ zQ_}K(T-DC4kYwK_qPyBSZflwG$Xd5>Z<$oNp)N|5J8frF1x*eP{znDyPh$Lc);lai zWyi1%N)YlnAAqKVyufJTFF9uo!-63CtXnVr2FY#4)iLNA>OI8%dhw5D@MXV3WPXda zCpnGc6w8}%d}Nv?2i60XWxOjv`MQbsf>neo_xI_vw#chP%-W;z+kT*fW5VJP+%(j} z=yHwV{baeVsuN&pmlx6aB)^db+%DG-Ygj_(Ht+gTnCq2{*A{4}cCHu}@j_|VOX<%_zw-F=^#>yXyAm7~94Ti9C6Ac4h6tAU7IpOwDfVYKr6&NJA> zgmqqlfjUJTE&^wpi3;fj_7$-#9`I-%DCELf-AEIFY67iY+w+A6`eWS_kuMH{4J(qLVkW{Bst!h znP4PYG}mHj`_W7sN_BmRUGp6x?_w4@%r7BAGd|05mo`^awt4y*^CgxOT5%xw=m?JD z>~Y@|q?hgO;n+9JaRg4T+dM@jaOG<$LYZF3z_)YIL+rH7==K;4?A{&q?1xZ2^n7)J z{x?}&a>JHg6^B7K5-&(F`|;#=q|Ybg#h-0#dWpznw(pA%4Q$%;IK6?$cOa^I&0tLW z?!`w2-^EZ9YSd2;{+-mdHq^ZP)a2G#yBk%Ys7Uw}KS{ZDWtc>1NmNuoU$#Ex6TK=U z?C;7qHtdnY1X254xFcTLDjgMSyFS(_TDl*6xdQ#~NNWtr)8FQjJH#${oI!-4uVq4s zP|{HF2)9a!LY@{WzUegLCuD#Z;L1D13k^2reXhC(+n5hd2z3Wa2}h z4dGx(lN3B=N@n$+eVa8eXSBs3+ha1P5_i(89>0J4(wMDAq*;5EenTcRC-vtzeekON zck1R5qybk{5pWg;H4?KW1)g+PCVF}8`P#pbcAlkQo9c?yh|G2)M7x5O z?mu{p!yOmSh&R#Z*~WT{=N!Q^5@;{IJMsMIKDSgy?iocUy-9eh?GW6RJF<-42@5P5 zSHS5zpc<)wDw}#5g~DjKzdX^ zmK}!8q9%1p{Cir}AqY#>SVa}!sYnyD9O3pd>GcB`A7~Bum}8AIcbhc77^x;K6;_M{%dK@JiEU zb$HL{8a6ojh-iGqb^=XF`z2nc-%6as*WU6EjW1Tv#b+@7Mua9Fmz^RSEx^T*?iPud zB^@|y^r@-%!H;y8cO-U3mslYe{32CNh}J`u8al)Fult}3s_fLuw-z3H32oo;Zv~xo zGP+NaF~WI#DB{S}t%0?U)WAU4>D*q#ryUD(Ekmr=xGHqCw1}cje%un20at#<)EffR zX0BP6s}-Myl?ir-GRV|gUjE|X&osH`atLdIT zq0m3fFDfIT1(MHBaxukhCT@q{W-}6JtEBYNV37h#zK|O!D)~=Qd9r~SFIuVZHJvSD?&pa@IqirDRy-y zAYC1)#M?g|MRL}bqXKj;R`ii3Z*B!$+J2}$f# zUfaTdU-08?SgYH!WKy|>9X+9o$I2QPw?CbH_b59WcqQSd=M;8|=I;IMmpFggJ>Ha- zHZ9;EDS;Db@i-GYHv;^kX5J8+BRy=y@9x1QQ_DUe z`E72EleVa3sZhms?liF8@+A+L;0X+C<-iquXL+ONmXh>|fH*S}Rn68R!oA6w$ zu&L!y;!5D7Z|nIqC$i>F^q=h$6XPtnb`q4VtVU|vUxFF(;-1ifM{u3f-ergLWOla7!n(Hc$?Z{-+{p!)5Q~gt>}06C zcbb^~T~F3}F}LUVr330$z*k1+1Zq!04VjPqsL~}0`66HkS)G%ZlSA-h?vovn0t>m? zoi-BL(GNf!`7c;Rq@G6BB+sz(VZ-bv+|!v4LSw)-eO8U|Z}(gay4p4$IL5eb&crut z{P|Zx@wOAy@42SBRz%}tV8_*#rh3ZIoWqT}Jgsao24uz_q*(0P3TcNHgjPU>sGy((MmU?PHjn1 zhfBZA#DolZ3|2JWH4*ywb5gY}lGgSsik`GnBzN6zFlu@Cl5t|#kpM%$z7ihR6h^L1 zoFkg+kAk7}w&nH#1(4UD+MS+ z`;u1*^8RRyNxg|ylU~1$IMSx-Ml{#lY@%g&^~{I$3F*&IHklzH>1yifzm|81ox#lz z-n^UQ+PPdW)1tO%?r=AvJ$qrPne0qTSm`AmVW#&@Uk3;7*>r&~XN4&TXeOjBxIa}y zGM5d5n<1ZhBP`3gv0rY7bWxAgi;QOdmV^?j*O<1zNiX;MH7}_M;u^=$a~%d`kA$aP zyqD1OuZPrFvmsv}h;h{T=5I~bVCR89S(In-t{Gt_>q?Aq-}Ii;b;rFu=HlK;Wnlp` z3@S3R$73IrbPYGOm4i~ghrWM|1f#Bmb%=o~$?wIZXXFl~Yv#52G-zDaNM zmXuw-4_g1i=hX(Z{^x49KP9(q@#4}EGhNk(H#r{SDAT9Pw83e{}4()4{mS^D6 zNwPZYyAt;@eycSDvyovU;sSF${Mzbin7&FNX*;-~^2sR49(0k(KS#kT9`@gIHqw$= zL%Shy!<)4I9{~ZiFCZEgy^G&6R2N0(fPTb5vKX+7W5J4Mdl!ewr0U^&LXH{(_%ojc zlbL(Sim@6jS=6^hFG6nmlR=_!P1KF zxfcP7Usr>#kMaQbSLC=A@^CfJpaz&<-{bPC^Mt0Y5Wjm=BlA z{MNUmdhAaRrsi-EIdj@u);=quR0mP$n@7K7#2Wpe+^nda&-RSo--iv#&H8Tx8vni; zjLG({%hlDj2`4AXQ_v}q$3*d@n~=46ZVZ9nFt1T%$Pp{eYBgYT&0FuvEd-Iq;eYFU zwW-M(d@BKni*$BhXQi5p;8dThadH_C!QY)%f?qTca(0p}k>I5t(?3mOzw8d)S-veQRxboLL3iVPI$| zGBDab2)4v#yY{(2qJ8~z35=X7D}@oS#-2#ZeaB7L91945*|2nt>B$wiiW1xXhkVWb z+E9|S9?_g zw-3x(FwFCF>bn79Xl|DpP3%ptEd zOv;b2JdiL$eGah(V{mRBJ=+n(#fD&QSL9IKv(CS~v^(Lq1nWT!qK2e zJB^{4+bytN)L)!3_AQh4th-x{qm@ra#b;9U?9};#<-hnf1XFNKkLkv$kxtdc)VH7$ zkPWs`Y>yUUSM?o?CmqQ|+jW;`Apw?a#^e z+Adlm&llWb4%~gsOLerS?*S6JumN-u|JeG&1K6L(t<;+N`223eT)=t$jf2=n1n!RB zSX2~P8C`t*<48K~p*M9vmy4-DGcoGJDyFAVI^krYR7ZETJwN0ks=akdSr+f)Cv)Ui z1`PFrP+V(lXI83AUR8JH$CFzau10R_vl9!fB(ButF9&Z?J&a%oO=-Ku5O}QTv8`Pi zS#^bJj@?c#cUb@)QIXmfS6bpidGsx9fpq&-u&SN&AwPtWUM46IZ&c)XWEKeoUDw%ZgRSuozOt{ zFey2C;-fjy8?;ho`@uBS)4hdY=#sw49^rRMb8@c3v}s)LTHvJ25fmnf9~RH!`uI~% zI{nt5O6MU%ZOBPfOHKVXP|kl2pu$ALgw4zv-eddtJX2Dt_oO6qD#H z=F6*l$g{|yE@jaR`yG=l%kCR`F~6#Z@(Xfh(#$icR%_EfH|D|i2Xud(FO}1f+J4Y} zWQNlsL+#mIVf5zee78)OQLc`B zU!*g}8aeqhNSPG0<}68zM`4RP0f<=q&vLGdD0DO)i=zW_BXlx9P<3#dqn#*;1^Z-j zO^NG?-n3GDo`3cF^)YC6()C}PvPa+`XB?GHM^zMWP7<)L6=x-pL}kg(OvG8;sTI{% zCaY9{ow+b;c&-G>zaAM9S4}ZalD;388Ly;Kwt_cCm}jNZ>uObrA=h*C7L^cDd{6`x zm(Rvn$K-VwXHznb=s=|QzA0xG69*#*j{W@37XV;q+J0Yx+=^G|yraOKX4ntKW^k2f zvLP+~!Icc6OupZ;gWb@%3i};e>wX7wRr~X&n3L*9wNGXAX%o;fyTT>qgg7;)19UFw z>*#tqug`iF*0$;E%gcRgg-t1#tGLBo8T!cQn`Rb@@k{?L%AfEnVkkSMe6AA5RLcUn z#5cQt%hA_=C%W@q$v`q^asG4+>9s;16*F=(;qYhD#w4|0AQ;f+y z<@gbe;6_}fFlW$`{y4TkO_%wijNN#ioOg-Q_&hNP_Ge;GG_E8blc?Z1q@C&ybU$V5 zrCFgt4YU5zf1TEP$!>nnfJgkmxnx8YTv+8@n&d;U`J=k?-sCL*>{+Ofp-DWav%;=I?ftwzAep7dgJ{_x5%8cI!?{|w%yt;hM2s- zuqVF@XwJ4_nvRyFDLyJM1|${lbw zGLg-j5Oc9BTy5S3T&)|dzZL*)2*7S08lDe08cGa@vb#i05|RFt%tB@K)Kyp76uIKk zJqKTY72eE4B>)~SU^gnv_C<)=2?2*@<{&uO|L4(n<$w5G7{l_^bD>yVt|fNk=x9r z=p1NUheyx`55Pvg{q;&YY)rs_d%GkgRFlb~a*xFVJfBm2P?MkQ?F)lg27mnm7IvaG zzHr$~cDy(@v+cGO64CeC_({`FF?T31JfKXPjWA??5J5~B+U^p3VS3iS&q+LRz;k;p zyWJYCw0+J}&2`L2^6sz}-rqV)tzEio|!_wp@A2>Ake$WF<}0Ge}fn=)6VMa$-jSxl}LKJNkj|aGZvS`g<|k z(fKCWf&VNBpHuH}rmT!>tuo-Iq!lw=L#OjLI!)-uw}%bPD)g?~@9Vz6QvKM^#OyUj zi|fP?@IKNRcs(Hq?G4hnJA$n7xyboD)C>&kYrU17qgWnf$`>e1PEUQ<)V2t}(&3-z z*wvF?2H2f+$z=KNA@uJK%{VI(%}$Zz-|Vp>Rc@5fnd^AbwA+YasR7A2)X#sAlyTlI z5VXWk>gv0ghGl%Q@ZPA31(b%2f%1{9?>EdYrC&M4@c8w9=@>X@mVY+I{xZxL3ETIy zgk~bmPkdPNBPAxdFP`Sn^t0se_pv6duCLFyJ1w{gEqQ(cj>F=60O0ivY(JwZ)-wG% zB=N?cw@mz;$3kU&?;SL&Imqm-Cn4{dwKgmWO@0pDVkKtqa41V_*$t}*?3R4>eO(N; zM;H_UXBh)MU?C(XcIIT^ooPfTX20vj6Vak;el&FE_{<$4w;5l4!Im_yxwSvcsT(w1 zx9Sh!4t8lW-Th{VzJP+~^R>2b_A2ZTE)&$3r;YDpV$S>@53f?8f{rKLzJP?wqBO^w zCUd$eMEz69n&kk9ms|rAle1AyBCk49&TAi&ofQFt0{eVArRVX+Hs%QThofa0yu7qG zC@S2*qtOqZC{Vwp(tr7AcYd8t4xM?F52yMk1!Og>sGn=-(c*qKJBnNn+jc4X(1_ZF z#U5Fp@(k;mGJHrG11|28Ts)F-jk^zz`?_WSUh?6WXgxj5sHTR5A`s!^qlrc_h5g-I zWiO#HEdQiHu>RfLYIs#(j|vIVEH$;+n?cEu|M)wBrBpkMl9V(|=eRD?J7;PYVy)G( zQ?s%VrqRI%4Ia^_cK`bC2Dw8z0QkE~G3wTbcP;H^r?W(~KDM`>S!gef$?VuXs+DuE zi}ju8OB#H85I0;H0*MCdiJx8b3CDIu-x1T=m4A10-*k?U+s$g4NR~MF$M!7zCf9wd z9h-ng74vkec=(!L&;o@H1?NVXC8yq3QS6=!3-!{lESE`p8%0kMa5i&Y_?p7=Ftf$r z48X|%@HK!1y4p{LT3z1>?ev_E4&}d9*PfqxsI2NI83k0tfG%g*Gm_UX)iYVE4 z`+hK9?_=M<$ogbmnhd0rAPBCuw;~5kI+OOxw3|8G8R+wKy*x^fI1GkPggv;}TusF2L3eby;;E7(fky7vAqu z2_Vx!*f2Ze-v(Jd4Y?yy(!`%uF0~M*3cf5I=W8{H;KwwuTViyZ*&V_`^!cc0Xv5_| zay=FH0a;IX7m=x9=OuiK;VTQs)lLJG|A@EJ*)G3cc5D3p1U=5;Qf!tO9fc>A;0MzK zev6XCgd0L(rb#MQ>JOEEV(0|mzYCg+dJb&^!TdTKnOIq|)Ty<=_BfFLhJ*3mn3lSFs7!a< zB?*P=L!T?u_o#Ib!L1@O0`zFDhhKSg6Aj38>W#*w$&}t7kLQI(3OHw~Wj(1U3sqq6 z5Cg80Swy7h98(x9lY2@xQ}1V{jW?JLF_J*ZZSQ6a!-0##PX4XJ^}7d#%eF|yM&55= zM+s70*Z;$G#A(_CMBHmS0yqO2`n8np3(j04N6nu(lH}+bvv#4I9IeypEguiNNrxZTz?{s)-Avvs(lQU5@2lkCz(? zLkXVdGd*HB7;t%W%ZDP?z6cWdfJ-K^#=Pn@(!*Wc!-tY5w z?cfva9pEsfW$4%Dl$T#_#;Ca;Q%wNK`tN{&JyiP)&{1)>1|D3jma+h+Is92t*?rJ~ zL#Z#nO=PBg$LE9EilTUPG=;82Kdqn#2JIjCU0x%Ie%1c^Fu36e9MH-WEz*88b*h42 zhQJ{Z`&z4=>MEc2T43$yy15Ic+RJdp%eIvo(oao+C*1vLb*nB|1|cX69GRHjC?wS8 zt&d%d^Rntf_aF=lm|LSNweS7V$+EXz;*6bBsG`#2(lS3|@Tfk3*ZiEsiooU>;6ypJ zk?zhUp4C0HA)4)e3GVKGep1DZR?)%#035Pb0F%RW3ZFvofT-P(<)m+aDi74VLjkZ5 z#VK_gg3Fjn47z!aI-|zDFBkReHpa$Nz`Iin0@9B6Bg&{0;~iN0tScNo*|#dgE*^C7A(qV#k4c2Y5ZO_1fWkeC@W<|koPfhM< z9^+_4<062nmUovda~9+QL9-X-LYxXkp5K5X_hfNiuMJ3H+uRl?6Q~8$Z=#gQ{XHOQ zi$!GCh|t`PQts64<%<^`-z<-vCL&VSUS%W2o|uSDAuT(TCj`ZAk6L`w+uc=wdt zLIZ7CbecuJ13Wrhxt+7ZCVR%Mbc`ZDsz^nkbnfy_-Hzhq`QQ z(iQJNA}MQ_PIwjCI?9w!Kx_#KIW=2-PK@eOYR`l%9b20`r8yT zstE~0vzEYSZc(wvwn+&Nz3^P3ndLKSvn7M!=@2q-5MqMAKUy<6r3rsD;`3ruQQs z_DGa>RC+i&yeFTXYPFUYjctgO6{WJpm@xljOE5!Sh%{$`dLF$Nhs?*IV^$j+yptf; z5xJw|_tY&!qvK6zi}HjDCR5vDQ_n>cw0yvdy%98kBskTp@Ws>3$xYIDk%^DQI{Q~C z=(w-`#0ImjgaI+9#_*YwJMr>GY`ay+4(Kc(18d3}+T0Efq$m88>dSu+_UVUaW@Rea z#~!_Vb8ikETYG#8{q(!!S&F6+>Z4TJ@W|%XB+bF00vXQ@a5K;gdY$t~^@HOmbp)yp z%n@~c6c+Wa9bk&I6ySiX5=C<*9aE-XdqCEJ-H_k>=3=^4VrR*k$SN|VPau$c1E{(T zs8OUj8lSwt&d1u?dXXpM?fq_eZi>&e9ZF_MtltOud{a~8YfyVR8`UsMn#~~j5s582 zHoC!43x)_QppZ84e#O*OT6*~5`NG$0r`p%pblf#4F9~nD(Pv{d{ev*t=~?sim*pS7 zn55DG*>@M%aUSxB4_Fsrtw(-hUFU~eY8xnD#6Il_+ReMna0UVXKgQh^=&l(|23AqY z?^!K6Mk-^74kYa{ZlI}pA_My3BUqIf}fwz z3hBLaiBUT5v z7NQ$HdKbM*(UKs-cet+m{+{Q@`@X+s$t*F;ah^xt_ibDEq%R!qJ^7S;G}xmp_*C43c7fI5$xh>pP;z z#jQ4ZZS+g@{S4MnM2dehu2)Y&iP09P z!eQ=)dSG`HUqaV1(PEa#9xyuwMu`q^BCovp@$zOkR;J6^`@uCP-FJ}BiZOjukUsI# zC14QIT!Rx}nf|8@IIQ+)W(U5Uyb_II7{VZ=6&cyZXa~FYbq?7hcDLsB2oUKVi19zC zC5D{+03pfiSj(#oPzv=rtRBT1S`!VKo3|H!Zo|usW9I*@;fm*qSI`?hIr&p9iRRbE zhKf9!di!C@L6OCew9+2WM2pe8vRxJtAgPUt`3`j06&I>*La?hOz#lR5p3&EmJPv!3 zrT%8yWBff4v*)$*2Oto$d+DK^n~;X9wAZu|ffjXT_~m ziHI&S^o{)Li|1?O&Qp1UMO%Dfm9-w!25awML{OaH$6`6hBj1znMwjmH6W5*F8@zy0XtEIElG-NkacRBG#+=*{Er=i6YaSLW988` z834B#_Nlt8ECUpjBnmvjnCINpd>R}FWSO0W8^(ZBdt0gd_3N!1vAIdKydGOn1WP{h zIH)l<@4#KS3^!*QtHlIEY7?B@a#P+|UwSk}<*(H(tx)Q0Vy-v%FWB_lsljX}S0{C( z_QE3~YE0x)b5-ihglH6Ei%ZTpr76pPw*C%sTHDKY6Cz0Z#~ZNnBttGN8mrepGjaxG ztVw6F2 zT}PEW6(<9c4?xs0@P6v|VZx*V?#ie#B9d!R$MD&=MG7)9!0KEE_eTZ~)hQp2UYy!n z9a(5Ij`e{(2x|kd@6(62L27D{=QU`W33g;<_`EaBD|oYv@hsMutgJF3UY@@XbLvLL zH5v$toc^>mXHq)pm;AullmUKkrK)MgWOGT->9bJg%OH10pnSV69%tkS zY8~BHMFLtSFtK1| zaJ1BA5HCjHftRljgw5R)%ky9^uL~psHwI7t3|h%s9-96AeHdl~n`zF`%frWHsM37| zzc91k8_{tg^{UeRg;&|xtw6Y%G=2H=uuB{4+3`_P5c$yz0b3A~C1Y2Ig+assa0I~O zOg}hI00Rs#_~-qj(X7K6YGZnhN2{{wS_#=ph^9_Q*5AK;E0 zdY17yfDD~q)6ii09b2wrbs8ufO(u!)urwpV#n)G?ElgyFyA8g}m6P3+Xd(o1X+YuM zi0Zzz)ASIuNB|A{SRFsW9(J}NlW_GgezyTP$N5=6cz+NY1}fnWUcK~?9I)(}E;MVz z3R+f0=r*wFpF7(f0KNK!kQl(mfcSVqR)|3aKtPYP*~GhXyR5Wj{>cYL*>j#PJ^^sJVSDcmGLTZfn0NBqP9P3jvd_!f!Q{lL-`FtYF@uWu16&YLyslo6mb z+VnpUy6sB5oNCy^SK$=l9RZ&-;hA9A}iWESM1NLIB{Cl7#=ptb! z*>MF#cQEoYgr1PLJ)G}kwB(a=D*)ECu2W`eaQ0D>4C)88a{Ri8FIER2-YGfI4g4@E z$;s0xx8SXCh;=s*DgzhhFC!V3da&^%CnqyHr>ueC8Nt8h!dQ4dlPD%t=#ig2byM{58h15+LpXSc@+06EFkKP$i8U5G1|k}}z8 z!SNa3_QypN0Ep=PJ;;87SVM@o-I+h&_b;0QBHRc2l)1VSJ^&qR<#u2826#f?1tTUC z1qyMH+w8Wa1BH28l3V&7I3PWML|kOp6)%c;oExx$WM{L@tiF+vk$HTbd(V&nYO*Oa z0esW8C3x{TjRwyE3rAH$gxmwq)gMG5F~e+4Ye4$SEwl90-Mb6`V#Q8Cevp5sDC@`MB6 z>;Rk#QV7PmCLIW#0q!|APqA@O!x+HZh=Xae@5WS1b97<-Ema5;48@Hj$sk8!ujmL+ z7>~sak5>nqSb#~}$)n;2=(`lAyLYiCh5*6{OpQSjk9j-7$e!dl8eu1(FHu)q_Gh%pxQ@ilxE>Kp)KJcSCmfEn=|+@yx(!2H%h zk!*u1c?ON??|`EUDg~%J2?m?s5tX^=8iTUHbvF;t#6%O|?yv$&VQ>v^AaKUil!r9i zQ-mmqu^wfC%5Nm_LD+*}thsV6Tt!oPu+m391wYTl^-BCcX@ZbV8W?y_MQ6YTS?Dix zaA!p5B2HY^(5!K^r2%S76jl^ z-FU!*TeD4cS~EpH1irp9o{R2PO@KpiT?0l8$!@~kt*vobD4Vszdf@Ma89e0-OW#d8 zT2N!I`508@sA;8vaf;7KNJ}&PC8eQ>Igd)|6Z62&Mb}a?rvf}F;Fl-ObAN|9m<0Sy z?$Okc`y=b_aFWPNQU71!H3*ICBv9zgNoJ!5ti&f_Ky#hod)H{K*+&ZxCg(L7EH^Qm zl%B3UM*S=^w3;q7d|%9C1G>x6#S{8s&pBwbnxkw2CIgWAwOS;~I3o65d=j6O60(cxpEKM{7bvp@i3*u)(B!;iWzsEeE`D+jgv`Ql*>Syg?>PZAJ zoFPf(I&}Mi3*cYlzs`pcL(%Wi>yS}V&4GDKjdu=XFb@X{GL(Dm5EOOb1r=X4~@9(q_dL7G%QR8aft zH0v<>={{y$#m#X3afL7*aG^#WgNzM#5dvW9-+J#)hW|-JXmIze^Kkh-S;%Ck0`63n z4>DsOz1g8Fx=O^%MXMm=S8Q6xJ)Cb8Ekhm1v3ZX?{u^&kRTs&S+6{F?#%8rcJ4BfS zLFas74a8a*QahKNbOmi2JhHJfrn`bfCAGJrnZJIkeGV!F zV47>7JN2!*CxjP4rbbIBWM^Hdcl^XTc)32fhZ!#5niS1AWI27P&wrfYpS?yc_L!?hrF?^#XVFYX00!Zr}|r8p&X=_v3;$eF}Tp^)@&bLop>) zn=W*_wsti;-_h9`V8!SkX};DXF`QNT8u=7(>wI7h=J!=tSSbU#ddU)A&2%d7)&e=! z$3WQv$3C!vgTj=U?~h?qXn3J@ehLpNaizPbJ8$ghO9D*~=iZ@|M?UEGJK~VgD#(FYoPN8r?P0bOAN!Lt@ zb>oCN4YcVPXUDm*1v6%g^P3NocyMk~Q&P@;G_8zx$ZE^4tW=k?e8u{?-s)>Gi_;n< zW0(kr?Kv9Vu|r!IqKNQy?yHFQ75xcP0Cty4%uJ}m@nkhX*^W*llN!oK&r;VD_~X?W z!iP;f!b0|1^~lla<&#OY^Og8*6fzHjXkNpu7-?4?#0Z1S|x1xU{FI+PaA%`qev( z0~~h}dksr}tG_iyIoSU#-`5&fOH;4dGBr+;HGJ)T&|Ziv1Vt`e?mEF69-hTMkEEe5 zp~v(KZH@*~`pEF`S9b>RNB}#@INGzDXU(vz{}sbA#ZcCa{s)@QmT*$pFEYqJN^KG6 zf#=YnvaTkFPj;`he@y9rpRX<23dfmxneyBrY4o_yKsu_*aTuUwx469%#)rRp!wbe5 zgH#>UDwzstal(^z`~+#aKK3B`%~@3^wN+%Z$Iu`s;W#s~HRau*9QmQ=s2$P_PZ&Qd zYnZsUX@nl*0-HIiII~m+T8No>`O1($>CVM9n&(L7BN0%21F;ParCrC4Vs@8nMr&3s z>(`MZEdPygEp_Cj#dU`98Rs|*kj8O3t8$MUmP(Hz%$+WWxW|JdwAYIUk4v>PJ-Li1 zm6~eXjmJNYkjJ3pL4=?H6A>cb(_Q&?sNO0z=a@vP=k2W8mijYd3mLekB(7wHeyH#j zCBrcnXJ=5p)$C>z;^3l+26r1VU=1SUWw^?(bs(*^K{PO);@o1?^Xa3gL_3*0ZsDuh zFi$-#2##H{if--MtBlChM7pIEI@et%mH5vc0FRrQf{q01k;g=tc)0=sJ%@z*33~fi zMRv?=3$FT)2vWYHlfq4IHICj|%Go1Weg4@rcRK+#1Y-0QPQ<@SH62x9i*d+AFE+Km z(y1!=!_8EuSMJQG>!MhKxH_{`1UH&Zj7ZT--ARGxuRS~?u|`9&7Eht|SsXE|UQ$Re zQBW_wm|XmQY8iVKVY!Mf#FzVY7swh+a_vyJ2)|I-7x%lW{m`BgZN;ZLe{D~4AlfK02`N~<18qfF)>Xqo)q=%z? zW;SC&T@uF&$ILm#wqeBX&_u=T1XFln1G)(GSFgyN{Cu$BTO+=QNWpHvRa41R&U;9^ zw@q*LDV*CkY>-(w$>5yFIZW9F^R$RK<{=mQiCPUt+1(B?=W{OdFprU<>0#weJa!?w zKYMm;b%_s^L~Ib!b=DfLq&p{rmUe8`yic*Evr@Y)_Y`LFUgE5-tKhQe9|sHs#ebRq zqiKw{Cj6F;mNdt=1+#MDzP-u8)=sDtLi*zUxSJ9-65_anh^x^wuOgux~my`MI z+YjGQQhs*@xtm1j^6O3N2?b9}n4lb*&ARwg$oTpFO`2d|@;KKkZ_&p{!9W4eD2Icj zS9rTgi1jGM;YF$wSUSl^lO#p@As4TH8J^IT%viy?SUQ9SSu`VcU5LMt6C|m{6zj{` zFqxt>m^lRV5h-3fW)L|iU-G-A0nQ17d)l{5U5if3*AF?i@Sf-F6jP+|?WLX+otN9s z@Yny+6?tH8YGQf9UfNnopI~TN^SoF&gkf-e0V_TO(mj!eW{0lhJId{@5VH=);Ex{n z{puLBdZPY~3Y?j0Ae{Wa*0Uf9y~E?No_2~mnz*qKX%sUw&(&laovNU$zbxfwPeP2` zC`VNK(^>?TVXS5ADnW7So|7L`D{l$PT4`VCxEtVQz5Q0F;AqaL%tleJ z(SQ!5@50smb!$Fc*x9Z(Td;nF1SeZrGqmDCHGr*;5|T!aEHHh6^{ug7^ojhA{K@`P z>@L|ud+nbtMU1w*$ycq~$$mm_rCR91+w5H5BY9Ji38^EPJM+y*^z^C~IyFPLTdp@v zXwb+qnX%GN%#ayVru>#$!a)-u^o7qs1^kED?&OIIeJ!SNH;a@q&4@4u;zNEw!9Rdv z&;oF71b=^v-+<>2Bmd{0|9ne;aSOoy|NqPFcQpSJ#Q*nqLipDVVqU!{QFXgSP;w3O zP*GE%TFxp&+K5(Of9V=6_sL@EKpx*C-04y_w@EG*+o=hkLMc=1@9&FTR?ktQPE%X6 zI~!#p!=*bP`RR3c5N^ob#;3i*6o;B^W8{ynr85)}hcSy1W^S>w&DkC24ztaF;n~f? zbJ6M=&O2;(?lva(Ock#LnNwwoOdmpCV0&ZMC43Z#<$cd5qI2S0;ljmgHAFx5zU9uz z*_kamZHMNAdVS)LU;P>g!v9KtFEEcDDQs)p{(h}VroDHf?wHb9iafnjn%q)*A~~)V zB!@JE~Yb^$l@xo5rauevNbt#lueVxrK<$DdU@)EPPh zsIK?(2Mm;^OUcjtqKuC&bJp@t>b`o3mPJ<4QdMLkK9O0z`tgS7GM z-!^$lmTnPtxfe9Uk9%vShdzC@GqfFE&YU>v4;-oJw@D1Jix~;_7&TB2pPX5FnQiTi z%tK}!IvDM(CjWrRAm3BMSE^yF~0f@U5;hyqp;YxaKaoEH7eKV;D6< zTvzwH6#*rA$NWxdW0G8gnoK*HB?_UlF@=KYrqy0!rhcM$0tmAPivd;j^FKdWPj#NU0gp6Qn@wu_%Z#F?klf%oJ9zxG` ziNEw1WIy;TiZ$8dT3k*~?r97SDL8OvDjure&u>pwCKvx;y~vl6tYW)#PgUgd?sn>R z*H!5ArTj`Od#-0Tq#AUx(3=W^3BF`$cCsC}`j+=`8PArF3%)RoTWzS(bEIErO7pJ= zWRBVAWv9mc_WOW2giPD~3FK1E9jE@8v$#i! ze!++bmw1Z-gZ{7o?u`pb%r+o*F!x%YJU;M2mRKNNrL#6Vepb05eYsGYs0q$17}?9E zpm9vcV$3nzj(bu`IPwo|&*M&vbC(WaR8EJI5w`thwMGJ>@L~U=s0NCWcr-MlF6k-5 zo{CK8?8W8!*~a8zPSpjNkIjo7F!5Phai%PHPqalD(kt3>9Gu%v@=^W(~aIY@xTSATw`rV{7bv9efe%qnb~m-3cqYEs_focN$c$d$r;z-9iV%}sWbXML_HECfheQ?p{{KZ#+ z64G~x>PL;t;z$^9?^=p{Gn5$q>~kSC)O8|;gj!s?rNqWaICf_p0A+wzy3zIn`LREf zG?#hRe~#{G(41E`%m`5UU^y(1e89M zC%WXVG%Ofr%F-_X6_-1x6=>V$q4oc4G>GNMttQk}=r*gF+b>MYo2;H+pJrdA(uIFm`s_NTfnN7*z9od3*o-+HE|tj-4KSf$;}IwsF7bErLpvC96wZpfA3aX;a)c z#eCCE8aQDL*q1BRjZ79)a}Ek)d7q}6o+J9P@1GEu5xr-bU{C5_`ySVJ`b7iBFf-MA zv)lR3=_i%E#u8~$XlU)&cPcHRv@vSa1dXeHW8Ei>&PevsoHF;yVvEr$}Uu!V6$+@l`|5+Oh28 zj2-V=hF*0WbaQs`t!RWd3 zveIT#0?R{WqrOBkmFMEj*3dvx!3EVjy86*M?J^JK{3=~iW-)@17q0w!{Pm}>3ZIOn z&{7RlK+0+0`05Mu$$pyAGz-H5+9d%VI=QvRnX*2nKpbmyP(XCH~9C3R$$ZLK7ZOrOCKaYJPfd{cAZ2DA8(6eG1FC^_m(;lc+#RgB2J_<^`ZhJo#RonB3T|?_7uo zrQHeex;(A8yMmX|LZz18yF5kWXd9e7P=HyBhE@^<;FH3^7iya=#lAISD+eQ+@G(UuV4T7eSy~&L@eWQ6s;9d zSf`=?pjU#731|1~eXNC@rS=(O&HxLE#w+6 zDrw^ii)D^_Utty1&u<%p4q!!J3W7wW#bHvDJ!QSM)37pBP2}OSj;~f7u zTAp`PExWO(Rj?j)?TV~1R(6JvIxw5)ZQzEKL_GYb8$q)=^`JEw@_+c8CCG`nogWw7 zLos66py*$3aSUg^UVr8u!`EBxx7@gEbbzx%ryeLy%o`-mo6ndQi1=JThsE?A=3Ns^ z9hjT)PdEP4n^ykBoy1T$PM?($iwD3Y4QSg)?!;qtAk zyzqOr+YwUZ534CBO)-J4NU%bc;e-Xt4(hVUjLs6T*Wv`q&sW|^oPPNcI2TR~yCYWP zrEty|+#R#_epfb9;9PEW?4siP%bbb1k2}1Gd#pwUz!?-wL6- z02t~TRmXWBE=!_s0MMbm7i*62h}z4VYjdzw=)B6&PsEMhbme^VmpIA0%7Bz*55QL} zXl1D?*pfa)HAQsH2G^=oml}1rWr^SR@Tgpnei&kzi-4!0Funzd#oF)-0+MRk{vJ#G z>Y*)&+k3~3ABZ1v$x&CS;2tb<02=uGl!G$W#^Pb-_38~57fmxF`F5^#1~Ug8 z(z7?89mDd(S))=RBq|%KJ>s3|9E}mjGfY8$unr=i4AWFNGQ=U; zk=l-(d{M*^DgwbzLq6RTBY(`IOn9Jif+@$-1J1(o+IguN^apo`J50l%ByWHpHM&+K6&%N^8622I4&LB7-Zf^Gr zN+|L9q$MJA+p3TW@1yQs#VCyPekjk2dqY<2bh!44$^$o*fhwv{gJ{SQpMj3HrG6q? zPBc30#z4$!x#~m3L!gO!GXd_p=$^eE4WV;c@u*~B|Lpxv%5rfCpZHUvvF~?eK z3Bdete+tsXpqlZO*2{H&)rBRdyuTerIMC@)do);#e*NV#QHxTUHI! z{nZ0f&rIL~#c4V%#Om6wh^zNG!kzVG2(sD?(^%Px`o;0{p%l1qnUn?E6U7rCM<$sk zf*xUxD2Qr0+UrO1HqP<^pI8LCzfEz25Fb$J7=--x-cJvM>s&|FimH5XbG8b<=k93+&?N4A;j$4+k&vHs#<6jVMKXM-?P?0BBOb?u zozS}^KV{Cu;5VxO4E%gNw5^XL+l2x&bwrmXlWWO-d2w@o44WQ$8K~wsp3E_}%({i3 zKhnxW(F1nSpjWu2xO;lRo8DoR{DrTy75Mp;c1U*We#lV2`ge1sLT}EsmK#=hw!#$5 z`IqdtQ7Y!T%x=%STHiW{?D2y4?V>os9Hfu`t)hbGU6m@Vguj}7l2&J<3!`(qu3L`D zgYbG&yAA*6%a78;h46ol5##ZYA-hX=LIaN19_F!39^{0$ex=BR_z;<)$Kgk2y{$VT zFv-1su;-a81~rDWJ*|fJV(&7W+7dCDB}v>Z(G8C4(r(glWjQrR z?HfM*IXfxk+|EHl9S)JJsY7~JOEE_D&S>@4n57orcM26r(mk!I6r+cYdsUyOR(qA0 z)iSyN)8!blkS-R3DHx;n4r!W)d8pPsqD#%|#5pw|<$KhpWxRcSp1eCYxDS~YE6W&so)FWMQ|{&nWlCUD(X&Wm@y%^)NvTdnW;K2mUX=1*Wdpl!rwxpeY{HBq z0{Z!z9xjQ1$-Y8H1-bl0O5=HW3lpFs>h_)L zG5ZnQll>ZdY|rGLa%;Pcg%)&{7HvoHO!-JH42gXc{f34naR@7qGd!9kb=dOyWJNjE zGrQe$G*!rrS)FSj$^}IhJgOX|zdc}DTIM8&?h>t*PR zVKmAI_L~U==68Z6qC}X&B$A(oD{(`!l%NEpaw==%RH~gaFxyqCr&=bYid%v!5s*;E z5J5urwhy80+GMMUt(FrLJ&_|z%cZ^Sy_1)N8Hj~=GRy17`g;GK9k7ETs=AzJMG$_} z=FNd<%PiH~H^}Uf^zGgwrW1mg9$J3uyL3<8-TaQew>vNQyz*apZOJ}1M}f9Tk>W>q ztQfZ4a_!toNF;nlysDU;fc@he%OVBR#50l!S3T?*UDitum)5+rp%<2nH(FqMsfF=l z$8}FlTD`tu^^Zot2d&PDq{?HH{Q0%?-jrS^wDZ!RWpB6mvR-p-e#BZ$iJ&*%bKCVk z_d|L4dd5#7J&wPJO;7k?d!h}JwY*mo3E`H1N;D{*ISU*Nf5bRdyXzNrcl3CaWV?R??}8& z;SH}cr1H{B{Ijjxn#1v%FbR&AaK85*yt113yM1uhMZ!GJ_qIHRp+Aa!O$Tn8v6$jK z%$@Nvix1Xb_TdbBYGmM)iyoVKZsK zU=qq1aYT4*c7-wa`M!`vuRrzO=FegxY1F@4&!c%QSWbwR$u8ok=U#k7wfM#~)_kM6 z*pz6)I_9+AQuYlT5%+z1lQHhr_-3HV9l0kS5PP0p%j6xj+aIwJx!B$4-1g>BV$F?N zi+po=>X-DK>Wa$T&|!{N)#{Pb^s#Qs-MsQPi#)ZX673Ma+;pa!Q^FbAnMi!Hf9___ zpnGrG22x2J4Wr`h2biuMVb9Kfo?bq?o?=>w^n5_|KDq-=8e<42Rg#MEkZU8D+w6KN z!O^-AcD$_h_3jDv=|+i5@nMczd2Ksi+-4ifKYaV;QAON79n!;`C9aM4_=M)-fQ8>a z$H65*m3IR1z2q)z<)!*Z0u$ z>doQ7`EU~2-6s<0Fhwy|vuGxd4C-(j$HmWmFz;}6yUmwbbb=YAZg_n;>U`!>ng8C% zYRX~!oMdA%WziOM4FmGMzFT(}H(vEec^uOoo5VRIhF`>_7qE|KUlKHOt{#z}k}F&i z(MJ|-#cwo#E-=gPzuWM)UvMM-+|na_TR2Sezt^ekct{)C33-C!2+3y2n#t~wOpIDP z^L3QF1sy#*{f4J*9->1^;1|N8=?={jyh+$0eNHT$TLF>OnB=1n8sx~GFZP?24ZT7J zJavVP@M_Bpj6cJfk&QbX9fsw#C!Nd1ExgxO-&X30LkVl$fK=bGX(z6?iQS|cK#$wv z1jSJDDf_I47TA^*7*RLDYB&@AMyBIT<0I|Qt^6r*~a@d;SQ|GrH3r)~WnjHAZAbQ8KQZ*Eq&E6~QVz zsA3~|!qO{jLH0TJ@Fv-E+z)>p&#RN{b%30t@_y$7T`3Nt^n%om=+0-i6Y<+sweh?E zoTmSuA67`>^XrDehYqa&4G{b%PVj&EXe0$YsLS@_QMvzV@oks_H2nYcaTqFdk7ah( i)K2q%ZZ`j(@&Avls!~|HL0cUN;$&+cn*HBN!v7C-hmQsT literal 0 HcmV?d00001 From e3e6e04012d1f8c1bdebeda783dc9176a78e809c Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Tue, 5 Mar 2019 18:56:29 +0200 Subject: [PATCH 11/42] Updates. --- docs/api/security/lifecycle/psa_lifecycle.md | 10 ++++++---- docs/api/security/psa_attestation.md | 8 ++++---- docs/api/security/security.md | 12 ++++-------- docs/api/storage/psa_internal_storage.md | 2 +- docs/api/storage/psa_protected_storage.md | 2 +- 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/docs/api/security/lifecycle/psa_lifecycle.md b/docs/api/security/lifecycle/psa_lifecycle.md index 6354b8823b..24c704de89 100644 --- a/docs/api/security/lifecycle/psa_lifecycle.md +++ b/docs/api/security/lifecycle/psa_lifecycle.md @@ -1,18 +1,20 @@ ## PSA lifecycle -The PSA lifecycle enables fine-grained control of the target root of trust (RoT). +The PSA lifecycle API enables setting the lifecycle state. + +Setting a lower lifecycle state - for example, factory or test state - allows you to control the target root of trust (RoT) and change the debugging policy when testing or debugging. The following is a state machine depiction of the PSA lifecycle: ![lifecycle](./psa_lifecycle.png) - **Note:** PSA Lifecycle is not a standalone feature; it depends on PSA bootloader support, which has not yet been introduced in Mbed OS. The only lifecycle change currently supported is `PSA_LIFECYCLE_ASSEMBLY_AND_TEST` to `PSA_LIFECYCLE_ASSEMBLY_AND_TEST`, which you can use in testing to reset the device RoT state. + **Note:** PSA lifecycle is not a standalone feature; it depends on PSA bootloader support, which has not yet been introduced in Mbed OS. The only lifecycle change currently supported is `PSA_LIFECYCLE_ASSEMBLY_AND_TEST` to `PSA_LIFECYCLE_ASSEMBLY_AND_TEST`, which you can use in testing to reset the device RoT state. All of the lifecycle changes represented by dashed lines in the diagram above have not yet been implemented. -You can specify the lifecycle during build time using the `MBED_CONF_LIFECYCLE_STATE` macro. The default lifecycle value is `PSA_LIFECYCLE_ASSEMBLY_AND_TEST`. +You can specify the lifecycle value during build time using the `MBED_CONF_LIFECYCLE_STATE` macro. The default lifecycle value is `PSA_LIFECYCLE_ASSEMBLY_AND_TEST`. -In Mbed OS, the PSA lifecycle is implemented as part of the [platform service](../apis/platform_service.html). +In Mbed OS, the PSA lifecycle is implemented as part of the [platform service](../apis/platform-service.html). ### PSA lifecycle class reference diff --git a/docs/api/security/psa_attestation.md b/docs/api/security/psa_attestation.md index 32d1f34282..ce6a96d393 100644 --- a/docs/api/security/psa_attestation.md +++ b/docs/api/security/psa_attestation.md @@ -1,13 +1,13 @@ -## PSA Attestation +## PSA attestation The PSA initial attestation service enables an application to prove a device's identity to a caller during the authentication process. -The initial attestation service creates a token that contains a fixed set of device-specific data, on request. To sign the token, the device must contain an attestation key pair, which is unique per device. The service uses the attestation private key to sign the token, and the caller uses the public key to verify the token's authenticity. +The initial attestation service creates a token that contains a fixed set of device-specific data, upon request. To sign the token, the device must contain an attestation key pair, which is unique per device. The service uses the attestation private key to sign the token, and the caller uses the public key to verify the token's authenticity. The PSA initial attestation service is based on the TF-M attestation service, which is available in the [TF-M repository]( https://git.trustedfirmware.org/trusted-firmware-m.git/). ### Specification -The initial attestation service exposes the following PSA interface: +The initial attestation service exposes the following PSA interfaces: ``` enum psa_attest_err_t psa_initial_attest_get_token(const uint8_t *challenge_obj, @@ -44,7 +44,7 @@ In the current implementation, a bootloader does not exist in single and dual V7 ### PSA attestation class reference -[![View code](https://www.mbed.com/embed/?type=library)] +[![View code](https://www.mbed.com/embed/?type=library)]() ### Related content diff --git a/docs/api/security/security.md b/docs/api/security/security.md index 0e8a8e1361..8eada1785b 100644 --- a/docs/api/security/security.md +++ b/docs/api/security/security.md @@ -2,18 +2,14 @@ Security on Arm Mbed OS is divided into the following parts: -- [Platform Security Architecture (PSA) Secure Partition Manager (SPM)](../spm.html) - Accesses secure services within a secure processing environment (on PSA targets only). +- [Platform Security Architecture (PSA) Secure Partition Manager (SPM)](../apis/spm-apis.html) - Accesses secure services within a secure processing environment (on PSA targets only). -- [PSA internal storage](../apis/psa_internal_storage.html) - Saves the PSA root of trust (RoT) state. - -- [PSA protected storage](../apis/psa_protected_storage.html) - Saves data to and retrieves data from PSA protected storage. - -- [PSA Crypto](../apis/psa_crypto.html) - A reference implementation of the cryptography interface of PSA. +- [PSA Crypto](../apis/psa-crypto.html) - A reference implementation of the cryptography interface of PSA. - [Mbed TLS](../apis/tls.html) - A comprehensive SSL/TLS solution. For full details, see the [Mbed TLS site](https://tls.mbed.org/). -- [PSA attestation](../apis/psa_attestation.html) - Enables an application to prove a device's identity to a caller during the authentication process. +- [PSA attestation](../apis/psa-attestation.html) - Enables an application to prove a device's identity to a caller during the authentication process. -- [PSA lifecycle](../apis/lifecycle/psa_lifecycle.html) - Enables fine-grained control of the target root of trust (RoT). +- [PSA lifecycle](../apis/lifecycle/psa-lifecycle.html) - Enables fine-grained control of the target root of trust (RoT). - [Device key](../apis/DeviceKey.html) - Implements key derivation from a root of trust key. diff --git a/docs/api/storage/psa_internal_storage.md b/docs/api/storage/psa_internal_storage.md index f989879b4d..33f33fe9ee 100644 --- a/docs/api/storage/psa_internal_storage.md +++ b/docs/api/storage/psa_internal_storage.md @@ -15,6 +15,6 @@ The implementation of PSA internal storage varies depending on the target type: ### Related content -* [Storage overview (Mbed OS)](..apis/storage.html). +* [API specification in Mbed OS](../apis/storage.html). * [PSA secure storage](https://pages.arm.com/PSA-APIs). diff --git a/docs/api/storage/psa_protected_storage.md b/docs/api/storage/psa_protected_storage.md index 0af3c2f0dd..10f0e00ff6 100644 --- a/docs/api/storage/psa_protected_storage.md +++ b/docs/api/storage/psa_protected_storage.md @@ -10,6 +10,6 @@ Unlike [PSA internal storage](../apis/psa_internal_storage.html), PSA protected ### Related content -* [API specification in Mbed OS](../apis/storage.html) +* [API specification in Mbed OS](../apis/storage.html). * [PSA Secure Storage](https://pages.arm.com/PSA-APIs). From 504b8b4e49df6df41baca9f3396d8c52a53d8593 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 11:52:36 +0200 Subject: [PATCH 12/42] Adding links from storage to PSA storage. --- docs/api/security/spm.md | 2 +- docs/api/storage/storage.md | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/api/security/spm.md b/docs/api/security/spm.md index de379ea85f..48fe76c8e4 100644 --- a/docs/api/security/spm.md +++ b/docs/api/security/spm.md @@ -1,4 +1,4 @@ -## SPM APIs +## PSA SPM Platform Security Architecture (PSA) Secure Partition Manager (SPM) APIs enable calling secure services within the secure processing environment. diff --git a/docs/api/storage/storage.md b/docs/api/storage/storage.md index 8d94cd9602..e28e67fd0b 100644 --- a/docs/api/storage/storage.md +++ b/docs/api/storage/storage.md @@ -6,6 +6,11 @@ The storage APIs present in Arm Mbed OS are: - [File system:](#declaring-a-file-system) a common interface for using file systems on block devices. - [Block device:](#declaring-a-block-device) a common interface for block-based storage devices. +Additionally, the following PSA-compliant APIs are present in Mbed OS: + +- [PSA Protected Storage:](../apis/psa-protected-storage.html) PSA-compliant API for a Non-Secure Processing Environment (NSPE). +- [PSA Internal Storage:](../apis/psa-internal-storage.html) PSA-compliant API for a Secure Processing Environment (SPE). + ### KVStore The [KVStore API](../apis/kvstore.html) is a common get/set API implemented by several classes. It gives you the flexibility to build a storage solution by allocating several combinations of objects. @@ -24,6 +29,8 @@ The [FileSystem](https://os.mbed.com/docs/development/mbed-os-api-doxy/classmbed #### File systems +File systems are the strongest persistent storage solutions in Mbed OS, providing an extensive POSIX API. We highly recommend using the little file system for embedded applications because of to its resilience to power failures. + - [**LittleFileSystem**](littlefilesystem.html) - The little file system (LittleFS) is a fail-safe file system we designed for embedded systems, specifically for microcontrollers that use flash storage. - **Bounded RAM/ROM** - This file system works with a limited amount of memory. It avoids recursion and limits dynamic memory to configurable buffers. From c594daa68426bb6fdc452b83957ce7c423d8b70d Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 11:57:29 +0200 Subject: [PATCH 13/42] Update psa.md --- docs/reference/technology/psa/psa.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/reference/technology/psa/psa.md b/docs/reference/technology/psa/psa.md index 72260aede8..77af367c93 100644 --- a/docs/reference/technology/psa/psa.md +++ b/docs/reference/technology/psa/psa.md @@ -38,8 +38,8 @@ The Mbed implementation of PSA supports the following platform types: The Mbed implementation of PSA provides the following services: -- PSA [RoT](../introduction/glossary.html) internal storage. -- [PSA Crypto APIs (on GitHub)](https://github.com/ARMmbed/mbed-crypto/tree/development/docs). -- [PSA attestation](../apis/psa_attestation.html). -- [PSA lifecycle](../apis/psa_lifecycle.html). -- [PSA platform service](../apis/platform_service.html). +- [PSA RoT internal storage](..apis/psa-internal-storage.html). +- [PSA crypto](../apis/psa-crypto.html). +- [PSA attestation](../apis/psa-attestation.html). +- [PSA lifecycle](../apis/psa-lifecycle.html). +- [PSA platform service](../apis/platform-service.html). From 9f4c39500c57dcaa6a55746074b79e6c83a1738e Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 13:12:47 +0200 Subject: [PATCH 14/42] Update psa_crypto.md --- docs/api/security/psa_crypto.md | 57 ++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/docs/api/security/psa_crypto.md b/docs/api/security/psa_crypto.md index f56ef16ff2..78754790b0 100644 --- a/docs/api/security/psa_crypto.md +++ b/docs/api/security/psa_crypto.md @@ -1,18 +1,53 @@ -## PSA Crypto +## Mbed Crypto -### Description +Arm Mbed Crypto is the reference implementation of the cryptography interface +of the Arm Platform Security Architecture (PSA). -TODO: Jaeden +**Note:** The version of Mbed Crypto shipping with Mbed OS +implements PSA Crypto API v1.0b1. +We have adapted and [integrated Mbed Crypto with Mbed +OS](https://github.com/ARMmbed/mbed-os/blob/master/features/mbedtls/mbed-crypto). +On PSA platforms that support it, Mbed Crypto comes integrated with Mbed OS to +leverage the platform's segmented architecture and isolate cryptographic keys +and operations from applications. -### Specification -TODO: Jaeden - describe here about APIs being available from NSPE and SPE -about differences in behaviour if any +You can import Mbed Crypto from its standalone +[release](https://github.com/ARMmbed/mbed-crypto). Mbed Crypto as integrated +with Mbed OS does not include all test code or scripts used in the development +of the library. You can find all of these in the standalone release. -PSA specification can be found here [PSA Secure Storage](https://pages.arm.com/PSA-APIs) +**Note:** Mbed Crypto, like Mbed TLS, needs a secure source +of random numbers; make sure that your target board has one and that it is +fully ported to Arm Mbed OS. You can read more about this in our [porting +guide](../contributing/index.html). -### Doxygen +### Configuring Mbed Crypto features -TODO: Jaeden - find PSA crypto APIs in doxygen web site. I was not able to find it. - Perhaps MBED_TLS_PSA_CRYPTO_C macro should be added doxyfile_options file so PSA crypto docs will be generated - Once addded Doxygen will be generate - perhaps on next day fix the link below +The Mbed TLS configuration system configures Mbed Crypto. Please refer to [Mbed +TLS documentation for how to configure Mbed TLS and Mbed +Crypto](../apis/tls.html#configuring-mbed-tls-features). + +### Mbed Crypto examples + +[![View code](https://github.com/ARMmbed/mbed-os-example-mbed-crypto/)](https://github.com/ARMmbed/mbed-os-example-mbed-crypto/blob/master/main.cpp) + +[The Mbed Crypto +example](https://github.com/ARMmbed/mbed-os-example-mbed-crypto) covers some +basic use of the PSA Crypto API as well as factory entropy injection. + +For further information, refer to the readme file in [the example +repository](https://github.com/ARMmbed/mbed-os-example-mbed-crypto). + +### Other resources + +The [Mbed Crypto project homepage on +GitHub](https://github.com/ARMmbed/mbed-crypto) contains the following +resources: + + - [An overview of the PSA Crypto + API](https://github.com/ARMmbed/mbed-crypto/blob/psa-api-1.0-beta/docs/PSA_Crypto_API_Overview.pdf). + - [The PSA Crypto API + reference](https://github.com/ARMmbed/mbed-crypto/blob/psa-api-1.0-beta/docs/PSA_Crypto_API_Reference.pdf). + - [Other general developer + documentation](https://github.com/ARMmbed/mbed-crypto/tree/development/docs). From a4964afdaeb8fe85414980aded186fa42a3b4302 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 13:13:42 +0200 Subject: [PATCH 15/42] Update psa_internal_storage.md --- docs/api/storage/psa_internal_storage.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/api/storage/psa_internal_storage.md b/docs/api/storage/psa_internal_storage.md index 33f33fe9ee..6c8bfebaef 100644 --- a/docs/api/storage/psa_internal_storage.md +++ b/docs/api/storage/psa_internal_storage.md @@ -11,8 +11,6 @@ The implementation of PSA internal storage varies depending on the target type: [![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/psa__prot__internal__storage_8h.html) -### Example - ### Related content * [API specification in Mbed OS](../apis/storage.html). From 7d49741850b6e171a5af73093e79df9b7f1a961c Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 13:18:00 +0200 Subject: [PATCH 16/42] Create testing_psa_service_compliance.md --- .../psa/testing_psa_service_compliance.md | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/porting/psa/testing_psa_service_compliance.md diff --git a/docs/porting/psa/testing_psa_service_compliance.md b/docs/porting/psa/testing_psa_service_compliance.md new file mode 100644 index 0000000000..ffdb91cb54 --- /dev/null +++ b/docs/porting/psa/testing_psa_service_compliance.md @@ -0,0 +1,67 @@ +

Testing PSA service compliance

+ +Mbed OS provides an integrated version of the Platform Security Architecture (PSA) test suite running over the Greentea test infrastructure. You can use these tests on PSA services that you develop or customize on PSA-enabled platforms to verify the compliance of the services to the PSA specification. + +For information about PSA compliance tests, see [the PSA compliance test repository](https://github.com/ARM-software/psa-arch-tests). + +### Test directory layout + +The tests are divided into three groups, corresponding to the PSA services: + +* Cryptography test suite (`components/TARGET_PSA/TESTS/compliance_crypto` in the Mbed OS directory). +* Internal trusted storage test suite (`components/TARGET_PSA/TESTS/compliance_its` in the Mbed OS directory). +* Initial attestation test suite (`components/TARGET_PSA/TESTS/compliance_attestation` in the Mbed OS directory). + +Every test suite contains a folder for each of the test scenarios. Each test scenario may run one or more test vectors. + +### Compiling and running tests + +To compile and run PSA compliance tests in Mbed OS, run the following command: + +``` +mbed test -t -m -n mbed-os-components-target_psa-tests-compliance__ +``` +Where: + +* `` may be `GCC_ARM`, `ARM` or `IAR`. + +* `` is your target. + +* `` is: + * For crypto tests: `crypto-test`. + * For internal trusted storage tests: `its-test`. + * For attestation tests: `attestation-test`. + +* `` is: + * For crypto tests: `c001`, `c002`, and so on. + * For internal trusted storage tests: `s001`, `s002`, and so on. + * For attestation tests: `a001`, `a002`, and so on. + +### Cryptographic configuration +By default, the PSA compliance tests run using the default Mbed OS cryptography configuration (the configuration can be found at `features/mbedtls/inc/mbedtls/config.h` in the Mbed OS directory). When you use the default configuration, only tests supported by the configuration run. + +You can override the default Mbed OS cryptography configuration using an `mbed_app.json` file. For an example of how to use an `mbed_app.json` file to override the default cryptography configuration, see the [mbed-os-psa-compliance-tests-example repository](https://github.com/ARMmbed/mbed-os-psa-compliance-tests-example). + +### Sample test output +When the tests run, they output state information to the serial output. Below is an example of a successful run (running the first crypto test scenario): +``` +TEST: 201 | DESCRIPTION: Testing psa_crypto_init API: Basic +[Info] Executing tests from non-secure{{__testcase_start;Check1}} + +[Check 1] Test calling crypto functions before psa_crypto_init +{{__testcase_finish;Check1;1;0}} + +{{__testcase_start;Check2}} + +[Check 2] Test psa_crypto_init +{{__testcase_finish;Check2;1;0}} + +{{__testcase_start;Check3}} + +[Check 3] Test multiple psa_crypto_init +{{__testcase_finish;Check3;1;0}} + +{{end;success}} + +{{__exit;0}} +``` From cacbe002fcf81cd5328650428fa9dde22dbc2c6a Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 15:08:58 +0200 Subject: [PATCH 17/42] Update psa_crypto.md --- docs/api/security/psa_crypto.md | 47 ++++++++++----------------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/docs/api/security/psa_crypto.md b/docs/api/security/psa_crypto.md index 78754790b0..449d0cf049 100644 --- a/docs/api/security/psa_crypto.md +++ b/docs/api/security/psa_crypto.md @@ -1,53 +1,34 @@ ## Mbed Crypto -Arm Mbed Crypto is the reference implementation of the cryptography interface -of the Arm Platform Security Architecture (PSA). +Arm Mbed Crypto is the reference implementation of the cryptography interface of the Arm Platform Security Architecture (PSA). -**Note:** The version of Mbed Crypto shipping with Mbed OS -implements PSA Crypto API v1.0b1. +**Note:** The version of Mbed Crypto shipping with Mbed OS implements PSA Crypto API v1.0b1. -We have adapted and [integrated Mbed Crypto with Mbed -OS](https://github.com/ARMmbed/mbed-os/blob/master/features/mbedtls/mbed-crypto). -On PSA platforms that support it, Mbed Crypto comes integrated with Mbed OS to -leverage the platform's segmented architecture and isolate cryptographic keys -and operations from applications. +We have adapted and [integrated Mbed Crypto with Mbed OS](https://github.com/ARMmbed/mbed-os/blob/master/features/mbedtls/mbed-crypto). +On PSA platforms that support it, Mbed Crypto comes integrated with Mbed OS to leverage the platform's segmented architecture and isolate cryptographic keys and operations from applications. -You can import Mbed Crypto from its standalone -[release](https://github.com/ARMmbed/mbed-crypto). Mbed Crypto as integrated -with Mbed OS does not include all test code or scripts used in the development +You can import Mbed Crypto from its standalone [release](https://github.com/ARMmbed/mbed-crypto). Mbed Crypto as integrated with Mbed OS does not include all test code or scripts used in the development of the library. You can find all of these in the standalone release. -**Note:** Mbed Crypto, like Mbed TLS, needs a secure source -of random numbers; make sure that your target board has one and that it is -fully ported to Arm Mbed OS. You can read more about this in our [porting -guide](../contributing/index.html). +**Note:** Mbed Crypto, like Mbed TLS, needs a secure source of random numbers; make sure that your target board has one and that it is fully ported to Arm Mbed OS. You can read more about this in our [porting guide](../contributing/index.html). ### Configuring Mbed Crypto features -The Mbed TLS configuration system configures Mbed Crypto. Please refer to [Mbed -TLS documentation for how to configure Mbed TLS and Mbed -Crypto](../apis/tls.html#configuring-mbed-tls-features). +The Mbed TLS configuration system configures Mbed Crypto. For more information, see [Mbed TLS documentation for how to configure Mbed TLS and Mbed Crypto](../apis/tls.html#configuring-mbed-tls-features). ### Mbed Crypto examples -[![View code](https://github.com/ARMmbed/mbed-os-example-mbed-crypto/)](https://github.com/ARMmbed/mbed-os-example-mbed-crypto/blob/master/main.cpp) +[![View code](https://www.mbed.com/embed/?url=https://github.com/ARMmbed/mbed-os-example-mbed-crypto/)](https://github.com/ARMmbed/mbed-os-example-mbed-crypto/blob/master/main.cpp) -[The Mbed Crypto -example](https://github.com/ARMmbed/mbed-os-example-mbed-crypto) covers some -basic use of the PSA Crypto API as well as factory entropy injection. +[The Mbed Crypto example](https://github.com/ARMmbed/mbed-os-example-mbed-crypto) covers some basic use of the PSA Crypto API as well as factory entropy injection. -For further information, refer to the readme file in [the example -repository](https://github.com/ARMmbed/mbed-os-example-mbed-crypto). +For further information, see the readme file in [the example repository](https://github.com/ARMmbed/mbed-os-example-mbed-crypto). ### Other resources -The [Mbed Crypto project homepage on -GitHub](https://github.com/ARMmbed/mbed-crypto) contains the following +The [Mbed Crypto project homepage on GitHub](https://github.com/ARMmbed/mbed-crypto) contains the following resources: - - [An overview of the PSA Crypto - API](https://github.com/ARMmbed/mbed-crypto/blob/psa-api-1.0-beta/docs/PSA_Crypto_API_Overview.pdf). - - [The PSA Crypto API - reference](https://github.com/ARMmbed/mbed-crypto/blob/psa-api-1.0-beta/docs/PSA_Crypto_API_Reference.pdf). - - [Other general developer - documentation](https://github.com/ARMmbed/mbed-crypto/tree/development/docs). + - [Overview of the PSA Crypto API](https://github.com/ARMmbed/mbed-crypto/blob/psa-api-1.0-beta/docs/PSA_Crypto_API_Overview.pdf). + - [PSA Crypto API reference](https://github.com/ARMmbed/mbed-crypto/blob/psa-api-1.0-beta/docs/PSA_Crypto_API_Reference.pdf). + - [Other general developer documentation](https://github.com/ARMmbed/mbed-crypto/tree/development/docs). From 154f5d886f943becf3a135c997b29958a974ab31 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 16:57:30 +0200 Subject: [PATCH 18/42] Adding PSA porting section. --- docs.json | 2759 ++++++++++++++++--------------- docs/porting/psa/porting-psa.md | 3 + 2 files changed, 1440 insertions(+), 1322 deletions(-) create mode 100644 docs/porting/psa/porting-psa.md diff --git a/docs.json b/docs.json index ce6d41dbfb..e6d2bd86f7 100644 --- a/docs.json +++ b/docs.json @@ -1,1346 +1,1461 @@ -[{ - "title": "Mbed OS API doxygen", - "description": "The full Mbed OS API documentation in doxygen format", - "slug": "mbed-os-api-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "master" - }, - { - "title": "Mbed OS 5", - "description": "Introducing Mbed OS: the overview, architecture, features and licensing", - "slug": "introduction", - "type": "markdown", - "chapters": [{ - "title": "Introduction", - "intro": { - "path": "docs/introduction/introduction.md" - }, - "sources": [] +[ + { + "title": "Mbed OS API doxygen", + "description": "The full Mbed OS API documentation in doxygen format", + "slug": "mbed-os-api-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "master" + }, + { + "title": "Mbed OS 5", + "description": "Introducing Mbed OS: the overview, architecture, features and licensing", + "slug": "introduction", + "type": "markdown", + "chapters": [ + { + "title": "Introduction", + "intro": { + "path": "docs/introduction/introduction.md" + }, + "sources": [ + + ] + }, + { + "title": "Versions and releases", + "sources": [ + { + "path": "docs/tutorials/mbed-os-2-vs-5.md" + }, + { + "path": "docs/introduction/release_process.md" + } + ] + }, + { + "title": "Glossary", + "sources": [ + { + "path": "docs/introduction/terms.md" + } + ] + } + ], + "tags": [ + "introduction" + ] + }, + { + "title": "Quick start", + "description": "", + "slug": "quick-start", + "type": "markdown", + "chapters": [ + { + "title": "Introduction", + "intro": { + "path": "docs/tutorials/quickstart/quick-start.md" + }, + "sources": [ + + ] + }, + { + "title": "Online with the Online Compiler", + "sub_chapters": [ + { + "title": "Importing and compiling the code", + "sources": [ + { + "path": "docs/tutorials/quickstart/quick-start-compiler.md" + }, + { + "path": "docs/tutorials/quickstart/example_walkthrough.md" + } + ] + }, + { + "title": "Debugging with the Online Compiler", + "intro": { + "path": "docs/tutorials/quickstart/quick-start-online-debug.md" }, - { - "title": "Versions and releases", + "sources": [ + + ] + } + ] + }, + { + "title": "Offline with Mbed CLI", + "sub_chapters": [ + { + "title": "Setting up and compiling the code", + "sources": [ + { + "path": "docs/tutorials/quickstart/cli_setting_up.md" + }, + { + "path": "docs/tutorials/quickstart/cli_code.md" + }, + { + "path": "docs/tutorials/quickstart/example_walkthrough.md" + } + ] + }, + { + "title": "Debugging with Mbed CLI", + "intro": { + "path": "docs/tutorials/quickstart/quick-start-cli-debug.md" + }, + "sources": [ + + ] + } + ] + }, + { + "title": "Further reading", + "intro": { + "path": "docs/tutorials/quickstart/further_reading.md" + }, + "sources": [ + + ] + } + ] + }, + { + "title": "APIs", + "description": "The APIs of Mbed OS: platform, drivers, RTOS, connectivity, security and storage", + "slug": "apis", + "type": "markdown", + "category": "apis", + "chapters": [ + { + "title": "Full API list", + "intro": { + "path": "docs/api/api.md" + }, + "sources": [ + + ] + }, + { + "title": "Platform", + "intro": { + "path": "docs/api/platform/platform.md" + }, + "sources": [ + { + "path": "docs/api/platform/Wait.md" + }, + { + "path": "docs/api/platform/Callback.md" + }, + { + "path": "docs/api/platform/DeepSleepLock.md" + }, + { + "path": "docs/api/platform/PowerManagement.md" + }, + { + "path": "docs/api/platform/IdleLoop.md" + }, + { + "path": "docs/api/platform/CriticalSectionLock.md" + }, + { + "path": "docs/api/platform/Time.md" + }, + { + "path": "docs/api/platform/Rtc.md" + }, + { + "path": "docs/api/platform/Debug.md" + }, + { + "path": "docs/api/platform/MemTrace.md" + }, + { + "path": "docs/api/platform/Error.md" + }, + { + "path": "docs/api/platform/Assert.md" + }, + { + "path": "docs/api/platform/NonCopyable.md" + }, + { + "path": "docs/api/platform/SharedPtr.md" + }, + { + "path": "docs/api/platform/Span.md" + }, + { + "path": "docs/api/platform/FileHandle.md" + }, + { + "path": "docs/api/platform/Poll.md" + }, + { + "path": "docs/api/platform/PlatformMutex.md" + }, + { + "path": "docs/api/platform/CircularBuffer.md" + }, + { + "path": "docs/api/platform/ATCmdParser.md" + }, + { + "path": "docs/api/platform/MbedStats.md" + }, + { + "path": "docs/api/platform/MpuManagement.md" + }, + { + "path": "docs/api/platform/ScopedRamExecutionLock.md" + }, + { + "path": "docs/api/platform/ScopedRomWriteLock.md" + } + ] + }, + { + "title": "Drivers", + "intro": { + "path": "docs/api/drivers/drivers.md" + }, + "sources": [ + { + "path": "docs/api/drivers/AnalogIn.md" + }, + { + "path": "docs/api/drivers/AnalogOut.md" + }, + { + "path": "docs/api/drivers/DigitalIn.md" + }, + { + "path": "docs/api/drivers/DigitalOut.md" + }, + { + "path": "docs/api/drivers/DigitalInOut.md" + }, + { + "path": "docs/api/drivers/BusIn.md" + }, + { + "path": "docs/api/drivers/BusOut.md" + }, + { + "path": "docs/api/drivers/BusInOut.md" + }, + { + "path": "docs/api/drivers/PortIn.md" + }, + { + "path": "docs/api/drivers/PortOut.md" + }, + { + "path": "docs/api/drivers/PortInOut.md" + }, + { + "path": "docs/api/drivers/PwmOut.md" + }, + { + "path": "docs/api/drivers/InterruptIn.md" + }, + { + "path": "docs/api/drivers/Ticker.md" + }, + { + "path": "docs/api/drivers/TimeOut.md" + }, + { + "path": "docs/api/drivers/Timer.md" + }, + { + "path": "docs/api/drivers/LowPowerTicker.md" + }, + { + "path": "docs/api/drivers/LowPowerTimeout.md" + }, + { + "path": "docs/api/drivers/LowPowerTimer.md" + }, + { + "path": "docs/api/drivers/FlashIAP.md" + }, + { + "path": "docs/api/drivers/RawSerial.md" + }, + { + "path": "docs/api/drivers/Serial.md" + }, + { + "path": "docs/api/drivers/SPI.md" + }, + { + "path": "docs/api/drivers/SPISlave.md" + }, + { + "path": "docs/api/drivers/QuadSPI.md" + }, + { + "path": "docs/api/drivers/I2C.md" + }, + { + "path": "docs/api/drivers/I2CSlave.md" + }, + { + "path": "docs/api/drivers/CAN.md" + }, + { + "path": "docs/api/drivers/MbedCRC.md" + } + ] + }, + { + "title": "RTOS", + "intro": { + "path": "docs/api/rtos/rtos.md" + }, + "sources": [ + { + "path": "docs/api/rtos/Thread.md" + }, + { + "path": "docs/api/rtos/Mutex.md" + }, + { + "path": "docs/api/rtos/Semaphore.md" + }, + { + "path": "docs/api/rtos/Queue.md" + }, + { + "path": "docs/api/rtos/EventQueue.md" + }, + { + "path": "docs/api/rtos/MemoryPool.md" + }, + { + "path": "docs/api/rtos/Mail.md" + }, + { + "path": "docs/api/rtos/RtosTimer.md" + }, + { + "path": "docs/api/rtos/EventFlags.md" + }, + { + "path": "docs/api/rtos/Event.md" + }, + { + "path": "docs/api/rtos/ConditionVariable.md" + }, + { + "path": "docs/api/rtos/Kernel.md" + } + ] + }, + { + "title": "Network Socket", + "intro": { + "path": "docs/api/networksocket/networksocket.md" + }, + "sources": [ + { + "path": "docs/api/networksocket/socket.md" + }, + { + "path": "docs/api/networksocket/UDPSocket.md" + }, + { + "path": "docs/api/networksocket/TCPSocket.md" + }, + { + "path": "docs/api/networksocket/SocketAddress.md" + }, + { + "path": "docs/api/networksocket/CellularNonIPSocket.md" + }, + { + "path": "docs/api/networksocket/DNS.md" + }, + { + "path": "docs/api/networksocket/TLSSocket.md" + }, + { + "path": "docs/api/networksocket/DTLSSocket.md" + }, + { + "path": "docs/api/networksocket/SocketStats.md" + } + ] + }, + { + "title": "Network interfaces", + "intro": { + "path": "docs/api/networkinterfaces/networkinterface.md" + }, + "sources": [ + { + "path": "docs/api/networkinterfaces/EthInterface.md" + }, + { + "path": "docs/api/networkinterfaces/WifiInterface.md" + }, + { + "path": "docs/api/networkinterfaces/CellularInterface.md" + }, + { + "path": "docs/api/networkinterfaces/MeshInterface.md" + }, + { + "path": "docs/api/networkinterfaces/NetworkStatus.md" + } + ] + }, + { + "title": "Bluetooth", + "intro": { + "path": "docs/api/bluetooth/bluetooth.md" + }, + "sources": [ + { + "path": "docs/api/bluetooth/BLE.md" + }, + { + "path": "docs/api/bluetooth/Gap.md" + }, + { + "path": "docs/api/bluetooth/GattClient.md" + }, + { + "path": "docs/api/bluetooth/GattServer.md" + }, + { + "path": "docs/api/bluetooth/SecurityManager.md" + }, + { + "path": "docs/api/bluetooth/BatteryService.md" + }, + { + "path": "docs/api/bluetooth/HeartRateService.md" + }, + { + "path": "docs/api/bluetooth/iBeacon.md" + } + ] + }, + { + "title": "LoRaWAN", + "intro": { + "path": "docs/api/lorawan/lorawanintro.md" + }, + "sources": [ + { + "path": "docs/api/lorawan/lorawan.md" + }, + { + "path": "docs/api/lorawan/loraradio.md" + } + ] + }, + { + "title": "NFC", + "intro": { + "path": "docs/api/nfc/NDEF.md" + }, + "sources": [ + { + "path": "docs/api/nfc/NFCController.md" + }, + { + "path": "docs/api/nfc/NFCEEPROM.md" + }, + { + "path": "docs/api/nfc/MessageParser.md" + }, + { + "path": "docs/api/nfc/SimpleMessageParser.md" + }, + { + "path": "docs/api/nfc/MessageBuilder.md" + } + ] + }, + { + "title": "Security", + "intro": { + "path": "docs/api/security/security.md" + }, + "sources": [ + { + "path": "docs/api/security/psa_attestation.md" + }, + { + "path": "docs/api/security/psa_crypto.md" + }, + { + "path": "docs/api/security/lifecycle/psa_lifecycle.md" + }, + { + "path": "docs/api/security/platform_service.md" + }, + { + "path": "docs/api/security/spm.md" + }, + { + "path": "docs/api/security/TLS.md" + }, + { + "path": "docs/api/security/Devicekey.md" + } + ] + }, + { + "title": "Storage", + "intro": { + "path": "docs/api/storage/storage.md" + }, + "sources": [ + { + "path": "docs/api/storage/KVStoreAPI.md" + }, + { + "path": "docs/api/storage/KVStoreGlobalAPI.md" + }, + { + "path": "docs/api/storage/FileSystem.md" + }, + { + "path": "docs/api/storage/Dir.md" + }, + { + "path": "docs/api/storage/File.md" + }, + { + "path": "docs/api/storage/LittleFileSystem.md" + }, + { + "path": "docs/api/storage/FATFileSystem.md" + }, + { + "path": "docs/api/storage/BlockDevice.md" + }, + { + "path": "docs/api/storage/HeapBlockDevice.md" + }, + { + "path": "docs/api/storage/MBRBlockDevice.md" + }, + { + "path": "docs/api/storage/ChainingBlockDevice.md" + }, + { + "path": "docs/api/storage/SlicingBlockDevice.md" + }, + { + "path": "docs/api/storage/ProfilingBlockDevice.md" + }, + { + "path": "docs/api/storage/BufferedBlockDevice.md" + }, + { + "path": "docs/api/storage/FlashSimBlockDevice.md" + }, + { + "path": "docs/api/storage/DataFlashBlockDevice.md" + }, + { + "path": "docs/api/storage/FlashIAPBlockDevice.md" + }, + { + "path": "docs/api/storage/SDBlockDevice.md" + }, + { + "path": "docs/api/storage/SPIFBlockDevice.md" + }, + { + "path": "docs/api/storage/QSPIFBlockDevice.md" + }, + { + "path": "docs/api/storage/NVStore.md" + }, + { + "path": "docs/api/storage/psa_internal_storage.md" + }, + { + "path": "docs/api/storage/psa_protected_storage.md" + } + ] + } + ], + "tags": [ + "apis" + ] + }, + { + "title": "Reference", + "description": "The reference manual for Mbed OS: architecture, configuration and contribution details", + "slug": "reference", + "type": "markdown", + "chapters": [ + { + "title": "Overview", + "intro": { + "path": "docs/reference/reference.md" + }, + "sources": [ - "sources": [{ - "path": "docs/tutorials/mbed-os-2-vs-5.md" - }, - { - "path": "docs/introduction/release_process.md" - } - ] - }, - { - "title": "Glossary", - "sources": [{ - "path": "docs/introduction/terms.md" - }] - } - ], - "tags": [ - "introduction" ] - }, - { - "title": "Quick start", - "description": "", - "slug": "quick-start", - "type": "markdown", - "chapters": [{ - "title": "Introduction", - "intro": { - "path": "docs/tutorials/quickstart/quick-start.md" - }, - "sources": [] - }, - { - "title": "Online with the Online Compiler", - "sub_chapters": [{ - "title": "Importing and compiling the code", - "sources": [{ - "path": "docs/tutorials/quickstart/quick-start-compiler.md" - }, - { - "path": "docs/tutorials/quickstart/example_walkthrough.md" - } - ] - }, - { - "title": "Debugging with the Online Compiler", - "intro": { - "path": "docs/tutorials/quickstart/quick-start-online-debug.md" - }, - "sources": [] - } - ] - }, - { - "title": "Offline with Mbed CLI", - "sub_chapters": [{ - "title": "Setting up and compiling the code", - "sources": [{ - "path": "docs/tutorials/quickstart/cli_setting_up.md" - }, - { - "path": "docs/tutorials/quickstart/cli_code.md" - }, - { - "path": "docs/tutorials/quickstart/example_walkthrough.md" - } - ] - }, - { - "title": "Debugging with Mbed CLI", - "intro": { - "path": "docs/tutorials/quickstart/quick-start-cli-debug.md" - }, - "sources": [] - } - ] - }, - { - "title": "Further reading", - "intro": { - "path": "docs/tutorials/quickstart/further_reading.md" - }, - "sources": [] - } + }, + { + "title": "Architecture", + "intro": { + "path": "docs/reference/technology/technology.md" + }, + "sub_chapters": [ + { + "title": "Networking", + "sources": [ + { + "path": "docs/reference/technology/connectivity/connectivity.md" + }, + { + "path": "docs/reference/technology/connectivity/networking.md" + }, + { + "path": "docs/reference/technology/connectivity/ethernet.md" + }, + { + "path": "docs/reference/technology/connectivity/wifi.md" + }, + { + "path": "docs/reference/technology/connectivity/cellular.md" + }, + { + "path": "docs/reference/technology/mesh/quick_start_intro.md" + }, + { + "path": "docs/reference/technology/mesh/thread_intro.md" + }, + { + "path": "docs/reference/technology/mesh/quick_start_hw.md" + }, + { + "path": "docs/reference/technology/mesh/thread_commissioning.md" + }, + { + "path": "docs/reference/technology/mesh/thread_faq.md" + }, + { + "path": "docs/reference/technology/mesh/02_N_arch.md" + }, + { + "path": "docs/reference/technology/mesh/04_N_networking.md" + }, + { + "path": "docs/reference/technology/connectivity/lora-tech.md" + }, + { + "path": "docs/reference/technology/connectivity/NFC.md" + }, + { + "path": "docs/reference/technology/connectivity/securesocket.md" + } + ] + }, + { + "title": "Technologies", + "sources": [ + { + "path": "docs/reference/technology/non-stack.md" + }, + { + "path": "docs/reference/technology/firmware_update.md" + }, + { + "path": "docs/reference/technology/storage.md" + }, + { + "path": "docs/reference/technology/psa/psa.md" + }, + { + "path": "docs/reference/runtime/Memory.md" + }, + { + "path": "docs/reference/runtime/static_memory_optimization.md" + } + ] + } ] - }, - { - "title": "APIs", - "description": "The APIs of Mbed OS: platform, drivers, RTOS, connectivity, security and storage", - "slug": "apis", - "type": "markdown", - "category": "apis", - "chapters": [{ - "title": "Full API list", - "intro": { - "path": "docs/api/api.md" - }, - "sources": [] - }, - { - "title": "Platform", - "intro": { - "path": "docs/api/platform/platform.md" - }, - "sources": [{ - "path": "docs/api/platform/Wait.md" - }, - { - "path": "docs/api/platform/Callback.md" - }, - { - "path": "docs/api/platform/DeepSleepLock.md" - }, - { - "path": "docs/api/platform/PowerManagement.md" - }, - { - "path": "docs/api/platform/IdleLoop.md" - }, - { - "path": "docs/api/platform/CriticalSectionLock.md" - }, - { - "path": "docs/api/platform/Time.md" - }, - { - "path": "docs/api/platform/Rtc.md" - }, - { - "path": "docs/api/platform/Debug.md" - }, - { - "path": "docs/api/platform/MemTrace.md" - }, - { - "path": "docs/api/platform/Error.md" - }, - { - "path": "docs/api/platform/Assert.md" - }, - { - "path": "docs/api/platform/NonCopyable.md" - }, - { - "path": "docs/api/platform/SharedPtr.md" - }, - { - "path": "docs/api/platform/Span.md" - }, - { - "path": "docs/api/platform/FileHandle.md" - }, - { - "path": "docs/api/platform/Poll.md" - }, - { - "path": "docs/api/platform/PlatformMutex.md" - }, - { - "path": "docs/api/platform/CircularBuffer.md" - }, - { - "path": "docs/api/platform/ATCmdParser.md" - }, - { - "path": "docs/api/platform/MbedStats.md" - }, - { - "path": "docs/api/platform/MpuManagement.md" - }, - { - "path": "docs/api/platform/ScopedRamExecutionLock.md" - }, - { - "path": "docs/api/platform/ScopedRomWriteLock.md" - } - ] - }, - { - "title": "Drivers", - "intro": { - "path": "docs/api/drivers/drivers.md" - }, - "sources": [{ - "path": "docs/api/drivers/AnalogIn.md" - }, - { - "path": "docs/api/drivers/AnalogOut.md" - }, - { - "path": "docs/api/drivers/DigitalIn.md" - }, - { - "path": "docs/api/drivers/DigitalOut.md" - }, - { - "path": "docs/api/drivers/DigitalInOut.md" - }, - { - "path": "docs/api/drivers/BusIn.md" - }, - { - "path": "docs/api/drivers/BusOut.md" - }, - { - "path": "docs/api/drivers/BusInOut.md" - }, - { - "path": "docs/api/drivers/PortIn.md" - }, - { - "path": "docs/api/drivers/PortOut.md" - }, - { - "path": "docs/api/drivers/PortInOut.md" - }, - { - "path": "docs/api/drivers/PwmOut.md" - }, - { - "path": "docs/api/drivers/InterruptIn.md" - }, - { - "path": "docs/api/drivers/Ticker.md" - }, - { - "path": "docs/api/drivers/TimeOut.md" - }, - { - "path": "docs/api/drivers/Timer.md" - }, - { - "path": "docs/api/drivers/LowPowerTicker.md" - }, - { - "path": "docs/api/drivers/LowPowerTimeout.md" - }, - { - "path": "docs/api/drivers/LowPowerTimer.md" - }, - { - "path": "docs/api/drivers/FlashIAP.md" - }, - { - "path": "docs/api/drivers/RawSerial.md" - }, - { - "path": "docs/api/drivers/Serial.md" - }, - { - "path": "docs/api/drivers/SPI.md" - }, - { - "path": "docs/api/drivers/SPISlave.md" - }, - { - "path": "docs/api/drivers/QuadSPI.md" - }, - { - "path": "docs/api/drivers/I2C.md" - }, - { - "path": "docs/api/drivers/I2CSlave.md" - }, - { - "path": "docs/api/drivers/CAN.md" - }, - { - "path": "docs/api/drivers/MbedCRC.md" - } - ] - }, - { - "title": "RTOS", - "intro": { - "path": "docs/api/rtos/rtos.md" - }, - "sources": [{ - "path": "docs/api/rtos/Thread.md" - }, - { - "path": "docs/api/rtos/Mutex.md" - }, - { - "path": "docs/api/rtos/Semaphore.md" - }, - { - "path": "docs/api/rtos/Queue.md" - }, - { - "path": "docs/api/rtos/EventQueue.md" - }, - { - "path": "docs/api/rtos/MemoryPool.md" - }, - { - "path": "docs/api/rtos/Mail.md" - }, - { - "path": "docs/api/rtos/RtosTimer.md" - }, - { - "path": "docs/api/rtos/EventFlags.md" - }, - { - "path": "docs/api/rtos/Event.md" - }, - { - "path": "docs/api/rtos/ConditionVariable.md" - }, - { - "path": "docs/api/rtos/Kernel.md" - } - ] - }, - { - "title": "Network Socket", - "intro": { - "path": "docs/api/networksocket/networksocket.md" - }, - "sources": [{ - "path": "docs/api/networksocket/socket.md" - }, - { - "path": "docs/api/networksocket/UDPSocket.md" - }, - { - "path": "docs/api/networksocket/TCPSocket.md" - }, - { - "path": "docs/api/networksocket/SocketAddress.md" - }, - { - "path": "docs/api/networksocket/CellularNonIPSocket.md" - }, - { - "path": "docs/api/networksocket/DNS.md" - }, - { - "path": "docs/api/networksocket/TLSSocket.md" - }, - { - "path": "docs/api/networksocket/DTLSSocket.md" - }, - { - "path": "docs/api/networksocket/SocketStats.md" - } - ] - }, - { - "title": "Network interfaces", - "intro": { - "path": "docs/api/networkinterfaces/networkinterface.md" - }, - "sources": [{ - "path": "docs/api/networkinterfaces/EthInterface.md" - }, - { - "path": "docs/api/networkinterfaces/WifiInterface.md" - }, - { - "path": "docs/api/networkinterfaces/CellularInterface.md" - }, - { - "path": "docs/api/networkinterfaces/MeshInterface.md" - }, - { - "path": "docs/api/networkinterfaces/NetworkStatus.md" - } - ] - }, - { - "title": "Bluetooth", - "intro": { - "path": "docs/api/bluetooth/bluetooth.md" - }, - "sources": [{ - "path": "docs/api/bluetooth/BLE.md" - }, - { - "path": "docs/api/bluetooth/Gap.md" - }, - { - "path": "docs/api/bluetooth/GattClient.md" - }, - { - "path": "docs/api/bluetooth/GattServer.md" - }, - { - "path": "docs/api/bluetooth/SecurityManager.md" - }, - { - "path": "docs/api/bluetooth/BatteryService.md" - }, - { - "path": "docs/api/bluetooth/HeartRateService.md" - }, - { - "path": "docs/api/bluetooth/iBeacon.md" - } - ] - }, - { - "title": "LoRaWAN", - "intro": { - "path": "docs/api/lorawan/lorawanintro.md" - }, - "sources": [{ - "path": "docs/api/lorawan/lorawan.md" - }, - { - "path": "docs/api/lorawan/loraradio.md" - } - ] - }, - { - "title": "NFC", - "intro": { - "path": "docs/api/nfc/NDEF.md" - }, - "sources": [{ - "path": "docs/api/nfc/NFCController.md" - }, - { - "path": "docs/api/nfc/NFCEEPROM.md" - }, - { - "path": "docs/api/nfc/MessageParser.md" - }, - { - "path": "docs/api/nfc/SimpleMessageParser.md" - }, - { - "path": "docs/api/nfc/MessageBuilder.md" - } - ] - }, - { - "title": "Security", - "intro": { - "path": "docs/api/security/security.md" - }, - "sources": [{ - "path": "docs/api/security/psa_attestation.md" - }, - { - "path": "docs/api/security/psa_crypto.md" - }, - { - "path": "docs/api/security/lifecycle/psa_lifecycle.md" - }, - { - "path": "docs/api/security/platform_service.md" - }, - { - "path": "docs/api/security/spm.md" - }, - { - "path": "docs/api/security/TLS.md" - }, - { - "path": "docs/api/security/Devicekey.md" - } - ] - }, - { - "title": "Storage", - "intro": { - "path": "docs/api/storage/storage.md" - }, - "sources": [{ - "path": "docs/api/storage/KVStoreAPI.md" - }, - { - "path": "docs/api/storage/KVStoreGlobalAPI.md" - }, - { - "path": "docs/api/storage/FileSystem.md" - }, - { - "path": "docs/api/storage/Dir.md" - }, - { - "path": "docs/api/storage/File.md" - }, - { - "path": "docs/api/storage/LittleFileSystem.md" - }, - { - "path": "docs/api/storage/FATFileSystem.md" - }, - { - "path": "docs/api/storage/BlockDevice.md" - }, - { - "path": "docs/api/storage/HeapBlockDevice.md" - }, - { - "path": "docs/api/storage/MBRBlockDevice.md" - }, - { - "path": "docs/api/storage/ChainingBlockDevice.md" - }, - { - "path": "docs/api/storage/SlicingBlockDevice.md" - }, - { - "path": "docs/api/storage/ProfilingBlockDevice.md" - }, - { - "path": "docs/api/storage/BufferedBlockDevice.md" - }, - { - "path": "docs/api/storage/FlashSimBlockDevice.md" - }, - { - "path": "docs/api/storage/DataFlashBlockDevice.md" - }, - { - "path": "docs/api/storage/FlashIAPBlockDevice.md" - }, - { - "path": "docs/api/storage/SDBlockDevice.md" - }, - { - "path": "docs/api/storage/SPIFBlockDevice.md" - }, - { - "path": "docs/api/storage/QSPIFBlockDevice.md" - }, - { - "path": "docs/api/storage/NVStore.md" - }, - { - "path": "docs/api/storage/psa_internal_storage.md" - }, - { - "path": "docs/api/storage/psa_protected_storage.md" - } - ] - } - ], - "tags": [ - "apis" + }, + { + "title": "Mbed OS fundamentals", + "sources": [ + { + "path": "docs/reference/runtime/Execution.md" + }, + { + "path": "docs/reference/runtime/Bootstrap.md" + }, + { + "path": "docs/reference/thread_safety.md" + } ] - }, - { - "title": "Reference", - "description": "The reference manual for Mbed OS: architecture, configuration and contribution details", - "slug": "reference", - "type": "markdown", - "chapters": [{ - "title": "Overview", - "intro": { - "path": "docs/reference/reference.md" - }, - "sources": [] - }, - { - "title": "Architecture", - "intro": { - "path": "docs/reference/technology/technology.md" - }, - "sub_chapters": [{ - "title": "Networking", - "sources": [{ - "path": "docs/reference/technology/connectivity/connectivity.md" - }, - { - "path": "docs/reference/technology/connectivity/networking.md" - }, - { - "path": "docs/reference/technology/connectivity/ethernet.md" - }, - { - "path": "docs/reference/technology/connectivity/wifi.md" - }, - { - "path": "docs/reference/technology/connectivity/cellular.md" - }, - { - "path": "docs/reference/technology/mesh/quick_start_intro.md" - }, - { - "path": "docs/reference/technology/mesh/thread_intro.md" - }, - { - "path": "docs/reference/technology/mesh/quick_start_hw.md" - }, - { - "path": "docs/reference/technology/mesh/thread_commissioning.md" - }, - { - "path": "docs/reference/technology/mesh/thread_faq.md" - }, - { - "path": "docs/reference/technology/mesh/02_N_arch.md" - }, - { - "path": "docs/reference/technology/mesh/04_N_networking.md" - }, - { - "path": "docs/reference/technology/connectivity/lora-tech.md" - }, - { - "path": "docs/reference/technology/connectivity/NFC.md" - }, - { - "path": "docs/reference/technology/connectivity/securesocket.md" - } - ] - }, - { - "title": "Technologies", - "sources": [{ - "path": "docs/reference/technology/non-stack.md" - }, - { - "path": "docs/reference/technology/firmware_update.md" - }, - { - "path": "docs/reference/technology/storage.md" - }, - { - "path": "docs/reference/technology/psa/psa.md" - }, - { - "path": "docs/reference/runtime/Memory.md" - }, - { - "path": "docs/reference/runtime/static_memory_optimization.md" - } - ] - } - ] + }, + { + "title": "Project structures and configuration", + "sub_chapters": [ + { + "title": "Project structure", + "sources": [ + { + "path": "docs/reference/project-structure.md" + }, + { + "path": "docs/reference/build_rules.md" + } + ] + }, + { + "title": "Configuration", + "intro": { + "path": "docs/reference/configuration/configuration.md" }, - { - "title": "Mbed OS fundamentals", - "sources": [{ - "path": "docs/reference/runtime/Execution.md" - }, - { - "path": "docs/reference/runtime/Bootstrap.md" - }, - { - "path": "docs/reference/thread_safety.md" - } - ] + "sources": [ + { + "path": "docs/reference/configuration/mbed_targets.md" + }, + { + "path": "docs/reference/configuration/Platform.md" + }, + { + "path": "docs/reference/configuration/Drivers.md" + }, + { + "path": "docs/reference/configuration/RTOS.md" + }, + { + "path": "docs/reference/configuration/Connectivity.md" + }, + { + "path": "docs/reference/configuration/mesh.md" + }, + { + "path": "docs/reference/configuration/lorawanconfig.md" + }, + { + "path": "docs/reference/configuration/Storage.md" + }, + { + "path": "docs/reference/configuration/bootloader.md" + } + ] + } + ] + } + ] + }, + { + "title": "Tools", + "description": "Details of the tools available for working with Mbed OS", + "slug": "tools", + "type": "markdown", + "chapters": [ + { + "title": "Overview", + "intro": { + "path": "docs/tools/tools_intro.md" + }, + "sources": [ + + ] + }, + { + "title": "Developing: Mbed Online Compiler", + "sub_chapters": [ + { + "title": "Getting started", + "intro": { + "path": "docs/tools/IDE/online_comp.md" }, - { - "title": "Project structures and configuration", - "sub_chapters": [{ - "title": "Project structure", - "sources": [{ - "path": "docs/reference/project-structure.md" - }, - { - "path": "docs/reference/build_rules.md" - } - ] - }, - { - "title": "Configuration", - "intro": { - "path": "docs/reference/configuration/configuration.md" - }, - "sources": [{ - "path": "docs/reference/configuration/mbed_targets.md" - }, - { - "path": "docs/reference/configuration/Platform.md" - }, - { - "path": "docs/reference/configuration/Drivers.md" - }, - { - "path": "docs/reference/configuration/RTOS.md" - }, - { - "path": "docs/reference/configuration/Connectivity.md" - }, - { - "path": "docs/reference/configuration/mesh.md" - }, - { - "path": "docs/reference/configuration/lorawanconfig.md" - }, - { - "path": "docs/reference/configuration/Storage.md" - }, - { - "path": "docs/reference/configuration/bootloader.md" - } - ] - } - ] - } + "sources": [ + { + "path": "docs/tools/IDE/oc_tut.md" + }, + { + "path": "docs/tools/IDE/compiler_publishing_code.md" + }, + { + "path": "docs/tools/IDE/updating_firmware.md" + } + ] + }, + { + "title": "Source control", + "sources": [ + { + "path": "docs/tools/IDE/compiler_version_control.md" + }, + { + "path": "docs/tools/IDE/compiler_pull_requests.md" + }, + { + "path": "docs/tools/IDE/oc_pr_tut.md" + } + ] + }, + { + "title": "Collaborative work", + "sources": [ + { + "path": "docs/tools/IDE/compiler_multiple_authors.md" + }, + { + "path": "docs/tools/IDE/compiler_collab.md" + } + ] + }, + { + "title": "The Online Compiler reference", + "sources": [ + { + "path": "docs/tools/IDE/ide_ref.md" + } + ] + } + ] + }, + { + "title": "Developing: Mbed Studio", + "sources": [ + { + "path": "docs/tools/Studio/mbed-studio.md" + } + ] + }, + { + "title": "Developing: Mbed CLI", + "intro": { + "path": "docs/tools/CLI/cli.md" + }, + "sub_chapters": [ + { + "title": "Installation and setup", + "sources": [ + { + "path": "docs/tools/CLI/cli-setup/cli-setup.md" + }, + { + "path": "docs/tools/CLI/cli-setup/cli-reqs.md" + } + ] + }, + { + "title": "Working with Mbed CLI", + "sources": [ + { + "path": "docs/tools/CLI/cli-create.md" + }, + { + "path": "docs/tools/CLI/cli-compile.md" + }, + { + "path": "docs/tools/CLI/cli-device-management.md" + }, + { + "path": "docs/tools/CLI/cli-collaborate.md" + }, + { + "path": "docs/tools/CLI/cli-test-debug.md" + }, + { + "path": "docs/tools/CLI/build_profiles.md" + }, + { + "path": "docs/tools/CLI/debug_builds_cli.md" + } + ] + } ] - }, - { - "title": "Tools", - "description": "Details of the tools available for working with Mbed OS", - "slug": "tools", - "type": "markdown", - "chapters": [{ - "title": "Overview", - "intro": { - "path": "docs/tools/tools_intro.md" - }, - "sources": [] + }, + { + "title": "Exporting", + "sub_chapters": [ + { + "title": "Exporting", + "intro": { + "path": "docs/tools/toolchains/export_to_third_party.md" }, - { - "title": "Developing: Mbed Online Compiler", - "sub_chapters": [{ - "title": "Getting started", - "intro": { - "path": "docs/tools/IDE/online_comp.md" - }, - "sources": [{ - "path": "docs/tools/IDE/oc_tut.md" - }, - { - "path": "docs/tools/IDE/compiler_publishing_code.md" - }, - { - "path": "docs/tools/IDE/updating_firmware.md" - } - ] - }, - { - "title": "Source control", - "sources": [{ - "path": "docs/tools/IDE/compiler_version_control.md" - }, - { - "path": "docs/tools/IDE/compiler_pull_requests.md" - }, - { - "path": "docs/tools/IDE/oc_pr_tut.md" - } - ] - }, - { - "title": "Collaborative work", - "sources": [ + "sources": [ + { + "path": "docs/tools/toolchains/exporters.md" + } + ] + } + ] + }, + { + "title": "Debugging", + "sources": [ + { + "path": "docs/tools/debug/debug_intro.md" + }, + { + "path": "docs/tools/debug/debugging_mbed_os_apps.md" + }, + { + "path": "docs/tools/debug/local_debugging_toolchain.md" + }, + { + "path": "docs/tools/debug/memap.md" + }, + { + "path": "docs/tools/debug/DAP.md" + } + ] + }, + { + "title": "Testing", + "sources": [ + { + "path": "docs/tools/testing/testing_intro.md" + }, + { + "path": "docs/tools/testing/unit_testing.md" + }, + { + "path": "docs/tools/testing/testing_greentea.md" + }, + { + "path": "docs/tools/testing/testing_icetea.md" + }, + { + "path": "docs/tools/testing/icetea.md" + }, + { + "path": "docs/tools/testing/utest.md" + }, + { + "path": "docs/tools/fastmodels/fastmodels.md" + } + ] + } + ], + "tags": [ + "tools" + ] + }, + { + "title": "Tutorials", + "description": "Learn about working with Mbed OS: getting started, developing applications, useful design patterns, debugging and optimisation techniques", + "slug": "tutorials", + "type": "markdown", + "chapters": [ + { + "title": "Overview", + "intro": { + "path": "docs/tutorials/tutorials_intro.md" + }, + "sources": [ - { - "path": "docs/tools/IDE/compiler_multiple_authors.md" - }, + ] + }, + { + "title": "Serial communication", + "sources": [ + { + "path": "docs/tutorials/serial/serial-overview.md" + }, + { + "path": "docs/tutorials/serial/serial_driver.md" + }, + { + "path": "docs/tutorials/serial/serial_communication.md" + } + ] + }, + { + "title": "Using APIs", + "sources": [ + { + "path": "docs/tutorials/using_apis/how_to_api.md" + }, + { + "path": "docs/tutorials/using_apis/events_tutorial.md" + }, + { + "path": "docs/tutorials/using_apis/flow_control.md" + }, + { + "path": "docs/tutorials/using_apis/connectivity/light-control.md" + }, + { + "path": "docs/tutorials/using_apis/ble_tutorial.md" + }, + { + "path": "docs/tutorials/using_apis/intro-to-lora.md" + } + ] + }, + { + "title": "Debugging", + "sources": [ + { + "path": "docs/tutorials/debug/common_issues.md" + }, + { + "path": "docs/tutorials/debug/debug_fault_exception.md" + }, + { + "path": "docs/tutorials/run_and_compile_time_errors.md" + }, + { + "path": "docs/tutorials/debug/debug_with_printf.md" + }, + { + "path": "docs/tutorials/debug/eclipse_pyocd.md" + }, + { + "path": "docs/tutorials/debug/keil_uvision.md" + }, + { + "path": "docs/tutorials/debug/vs_code.md" + }, + { + "path": "docs/tutorials/debug/debug_microbit.md" + } + ] + }, + { + "title": "Bootloader", + "sources": [ + { + "path": "docs/tutorials/bootloader.md" + } + ] + }, + { + "title": "Optimizing", + "sources": [ + { + "path": "docs/tutorials/optimize/memory/memory_intro.md" + }, + { + "path": "docs/tutorials/optimize/memory/runtime_mem_trace.md" + }, + { + "path": "docs/tutorials/optimize/memory/runtime_stats.md" + } + ] + }, + { + "title": "Migrating to Mbed OS 5", + "intro": { + "path": "docs/tutorials/migrate-from-mbed-os-2-to-5.md" + }, + "sources": [ + ] + } + ], + "tags": [ + "tutorials" + ] + }, + { + "title": "Contributing", + "description": "", + "slug": "contributing", + "type": "markdown", + "sources": [ + { + "path": "docs/reference/contributing/guidelines/guidelines.md" + }, + { + "path": "docs/reference/contributing/guidelines/license.md" + }, + { + "path": "docs/reference/contributing/guidelines/style.md" + }, + { + "path": "docs/reference/contributing/guidelines/design_guidelines.md" + }, + { + "path": "docs/reference/contributing/guidelines/workflow.md" + }, + { + "path": "docs/reference/contributing/guidelines/ci.md" + } + ] + }, + { + "title": "Porting", + "description": "", + "slug": "porting", + "type": "markdown", + "chapters": [ + { + "title": "Porting process", + "intro": { + "path": "docs/porting/porting_full_process/porting_start.md" + }, + "sub_chapters": [ + { + "title": "Setting up", + "sources": [ + { + "path": "docs/porting/porting_full_process/porting_reqs.md" + } + ] + }, + { + "title": "Porting", + "sources": [ + { + "path": "docs/porting/porting_full_process/porting.md" + } + ] + }, + { + "title": "Testing", + "sources": [ + { + "path": "docs/porting/porting_full_process/built_in_tests.md" + }, + { + "path": "docs/porting/porting_full_process/demo_testing.md" + } + ] + } + ] + }, + { + "title": "Porting targets", + "intro": { + "path": "docs/porting/target/target.md" + }, + "sources": [ + { + "path": "docs/porting/target/serial.md" + }, + { + "path": "docs/porting/target/lp_ticker.md" + }, + { + "path": "docs/porting/target/us_ticker.md" + }, + { + "path": "docs/porting/target/gpio.md" + }, + { + "path": "docs/porting/target/rtc.md" + }, + { + "path": "docs/porting/target/spi.md" + }, + { + "path": "docs/porting/target/QuadSPI.md" + }, + { + "path": "docs/porting/target/entropy.md" + }, + { + "path": "docs/porting/target/flash.md" + }, + { + "path": "docs/porting/target/bootloader.md" + }, + { + "path": "docs/porting/target/thread_porting.md" + }, + { + "path": "docs/porting/target/hw-accelerated-crypto.md" + }, + { + "path": "docs/porting/target/tickless.md" + }, + { + "path": "docs/porting/target/sleep.md" + }, + { + "path": "docs/porting/target/ResetReason.md" + }, + { + "path": "docs/porting/target/Watchdog.md" + }, + { + "path": "docs/porting/target/itm.md" + }, + { + "path": "docs/porting/target/mpu.md" + }, + { + "path": "docs/porting/target/usb.md" + }, + { + "path": "docs/porting/target/crc.md" + }, + { + "path": "docs/porting/psa/spm.md" + }, + { + "path": "docs/porting/psa/crypto.md" + }, + { + "title": "PSA-compliant targets", + "intro": { + "path": "docs/porting/target/porting-psa.md" + }, + "sources": [ + { + "path": "docs/porting/target/spm.md" + }, + { + "path": "docs/porting/target/crypto.md" + }, + { + "path": "docs/porting/target/testing_psa_service_compliance.md" + } + ] + } + ] + }, + { + "title": "Porting storage", + "intro": { + "path": "docs/porting/storage/storage.md" + }, + "sources": [ + { + "path": "docs/porting/storage/BlockDevice.md" + } + ] + }, + { + "title": "Porting connectivity", + "intro": { + "path": "docs/porting/connectivity/connectivity.md" + }, + "sources": [ + { + "path": "docs/porting/connectivity/Layer3IP.md" + }, + { + "path": "docs/porting/connectivity/ethernet.md" + }, + { + "path": "docs/porting/connectivity/WifiInterface.md" + }, + { + "path": "docs/porting/connectivity/NetworkStack.md" + }, + { + "path": "docs/porting/connectivity/CellularInterface.md" + }, + { + "path": "docs/porting/connectivity/MeshInterface.md" + }, + { + "path": "docs/porting/connectivity/MeshMAC.md" + }, + { + "path": "docs/porting/connectivity/LoRaPortingGuide.md" + }, + { + "path": "docs/porting/connectivity/NFCEEPROMDriver.md" + } + ] + }, + { + "title": "Porting bootstrap", + "intro": { + "path": "docs/porting/target/bootstrap.md" + }, + "sources": [ - { - "path": "docs/tools/IDE/compiler_collab.md" - } - ] - }, - { - "title": "The Online Compiler reference", - "sources": [ + ] + }, + { + "title": "Porting exporter targets", + "intro": { + "path": "docs/porting/target/exporter.md" + }, + "sources": [ - { - "path": "docs/tools/IDE/ide_ref.md" - } - ] - } - ] - }, - { - "title": "Developing: Mbed Studio", - "sources": [{ - "path": "docs/tools/Studio/mbed-studio.md" - }] - }, - { - "title": "Developing: Mbed CLI", - "intro": { - "path": "docs/tools/CLI/cli.md" - }, - "sub_chapters": [{ - "title": "Installation and setup", - "sources": [{ - "path": "docs/tools/CLI/cli-setup/cli-setup.md" - }, - { - "path": "docs/tools/CLI/cli-setup/cli-reqs.md" - } - ] - }, - { - "title": "Working with Mbed CLI", - "sources": [{ - "path": "docs/tools/CLI/cli-create.md" - }, - { - "path": "docs/tools/CLI/cli-compile.md" - }, - { - "path": "docs/tools/CLI/cli-device-management.md" - }, - { - "path": "docs/tools/CLI/cli-collaborate.md" - }, - { - "path": "docs/tools/CLI/cli-test-debug.md" - }, - { - "path": "docs/tools/CLI/build_profiles.md" - }, - { - "path": "docs/tools/CLI/debug_builds_cli.md" - } - ] - } - ] - }, - { - "title": "Exporting", - "sub_chapters": [{ - "title": "Exporting", - "intro": { - "path": "docs/tools/toolchains/export_to_third_party.md" - }, - "sources": [{ - "path": "docs/tools/toolchains/exporters.md" - }] - }] - }, - { - "title": "Debugging", - "sources": [{ - "path": "docs/tools/debug/debug_intro.md" - }, - { - "path": "docs/tools/debug/debugging_mbed_os_apps.md" - }, - { - "path": "docs/tools/debug/local_debugging_toolchain.md" - }, - { - "path": "docs/tools/debug/memap.md" - }, - { - "path": "docs/tools/debug/DAP.md" - } - ] - }, - { - "title": "Testing", - "sources": [{ - "path": "docs/tools/testing/testing_intro.md" - }, - { - "path": "docs/tools/testing/unit_testing.md" - }, - { - "path": "docs/tools/testing/testing_greentea.md" - }, - { - "path": "docs/tools/testing/testing_icetea.md" - }, - { - "path": "docs/tools/testing/icetea.md" - }, - { - "path": "docs/tools/testing/utest.md" - }, - { - "path": "docs/tools/fastmodels/fastmodels.md" - } - ] - } - ], - "tags": [ - "tools" ] - }, - { - "title": "Tutorials", - "description": "Learn about working with Mbed OS: getting started, developing applications, useful design patterns, debugging and optimisation techniques", - "slug": "tutorials", - "type": "markdown", - "chapters": [{ - "title": "Overview", - "intro": { - "path": "docs/tutorials/tutorials_intro.md" - }, - "sources": [] - }, - { - "title": "Serial communication", - "sources": [{ - "path": "docs/tutorials/serial/serial-overview.md" - }, - { - "path": "docs/tutorials/serial/serial_driver.md" - }, - { - "path": "docs/tutorials/serial/serial_communication.md" - } - ] - }, - { - "title": "Using APIs", - "sources": [{ - "path": "docs/tutorials/using_apis/how_to_api.md" - }, - { - "path": "docs/tutorials/using_apis/events_tutorial.md" - }, - { - "path": "docs/tutorials/using_apis/flow_control.md" - }, - { - "path": "docs/tutorials/using_apis/connectivity/light-control.md" - }, - { - "path": "docs/tutorials/using_apis/ble_tutorial.md" - }, - { - "path": "docs/tutorials/using_apis/intro-to-lora.md" - } - ] - }, - { - "title": "Debugging", - "sources": [{ - "path": "docs/tutorials/debug/common_issues.md" - }, - { - "path": "docs/tutorials/debug/debug_fault_exception.md" - }, - { - "path": "docs/tutorials/run_and_compile_time_errors.md" - }, - { - "path": "docs/tutorials/debug/debug_with_printf.md" - }, - { - "path": "docs/tutorials/debug/eclipse_pyocd.md" - }, - { - "path": "docs/tutorials/debug/keil_uvision.md" - }, - { - "path": "docs/tutorials/debug/vs_code.md" - }, - { - "path": "docs/tutorials/debug/debug_microbit.md" - } - ] - }, - { - "title": "Bootloader", - "sources": [{ - "path": "docs/tutorials/bootloader.md" - }] - }, - { - "title": "Optimizing", - "sources": [{ - "path": "docs/tutorials/optimize/memory/memory_intro.md" - }, - { - "path": "docs/tutorials/optimize/memory/runtime_mem_trace.md" - }, - { - "path": "docs/tutorials/optimize/memory/runtime_stats.md" - } - ] - }, - { - "title": "Migrating to Mbed OS 5", - "intro": { - "path": "docs/tutorials/migrate-from-mbed-os-2-to-5.md" - }, - "sources": [] - } - ], - "tags": [ - "tutorials" + }, + { + "title": "Porting tools", + "intro": { + "path": "docs/porting/tools/tools.md" + }, + "sources": [ + { + "path": "docs/porting/tools/build.md" + }, + { + "path": "docs/porting/tools/mbedls.md" + }, + { + "path": "docs/porting/tools/exporter.md" + }, + { + "path": "docs/porting/tools/hdk.md" + } ] - }, - { - "title": "Contributing", - "description": "", - "slug": "contributing", - "type": "markdown", - "sources": [{ - "path": "docs/reference/contributing/guidelines/guidelines.md" - }, - { - "path": "docs/reference/contributing/guidelines/license.md" - }, - { - "path": "docs/reference/contributing/guidelines/style.md" - }, - { - "path": "docs/reference/contributing/guidelines/design_guidelines.md" - }, - { - "path": "docs/reference/contributing/guidelines/workflow.md" - }, - { - "path": "docs/reference/contributing/guidelines/ci.md" - } + } + ] + }, + { + "title": "Mbed OS and the Pelion IoT Platform", + "slug": "mbed-os-pelion", + "type": "markdown", + "description": "", + "chapters": [ + { + "title": "Introduction", + "intro": { + "path": "docs/pelion_ready/introduction_chip2cloud.md" + }, + "sources": [ + ] - }, - { - "title": "Porting", - "description": "", - "slug": "porting", - "type": "markdown", - "chapters": [{ - "title": "Porting process", - "intro": { - "path": "docs/porting/porting_full_process/porting_start.md" - }, - "sub_chapters": [{ - "title": "Setting up", - "sources": [{ - "path": "docs/porting/porting_full_process/porting_reqs.md" - }] - }, - { - "title": "Porting", - "sources": [{ - "path": "docs/porting/porting_full_process/porting.md" - }] - }, - { - "title": "Testing", - "sources": [{ - "path": "docs/porting/porting_full_process/built_in_tests.md" - }, - { - "path": "docs/porting/porting_full_process/demo_testing.md" - } - ] - } - ] - }, - { - "title": "Porting targets", - "intro": { - "path": "docs/porting/target/target.md" - }, - "sources": [{ - "path": "docs/porting/target/serial.md" - }, - { - "path": "docs/porting/target/lp_ticker.md" - }, - { - "path": "docs/porting/target/us_ticker.md" - }, - { - "path": "docs/porting/target/gpio.md" - }, - { - "path": "docs/porting/target/rtc.md" - }, - { - "path": "docs/porting/target/spi.md" - }, - { - "path": "docs/porting/target/QuadSPI.md" - }, - { - "path": "docs/porting/target/entropy.md" - }, - { - "path": "docs/porting/target/flash.md" - }, - { - "path": "docs/porting/target/bootloader.md" - }, - { - "path": "docs/porting/target/thread_porting.md" - }, - { - "path": "docs/porting/target/hw-accelerated-crypto.md" - }, - { - "path": "docs/porting/target/tickless.md" - }, - { - "path": "docs/porting/target/sleep.md" - }, - { - "path": "docs/porting/target/ResetReason.md" - }, - { - "path": "docs/porting/target/Watchdog.md" - }, - { - "path": "docs/porting/target/itm.md" - }, - { - "path": "docs/porting/target/mpu.md" - }, - { - "path": "docs/porting/target/usb.md" - }, - { - "path": "docs/porting/target/crc.md" - }, - { - "path": "docs/porting/psa/spm.md" - }, - { - "path": "docs/porting/psa/crypto.md" - } - ] - }, - { - "title": "Porting storage", - "intro": { - "path": "docs/porting/storage/storage.md" - }, - "sources": [{ - "path": "docs/porting/storage/BlockDevice.md" - }] - }, - { - "title": "Porting connectivity", - "intro": { - "path": "docs/porting/connectivity/connectivity.md" - }, - "sources": [{ - "path": "docs/porting/connectivity/Layer3IP.md" - }, - { - "path": "docs/porting/connectivity/ethernet.md" - }, - { - "path": "docs/porting/connectivity/WifiInterface.md" - }, - { - "path": "docs/porting/connectivity/NetworkStack.md" - }, - { - "path": "docs/porting/connectivity/CellularInterface.md" - }, - { - "path": "docs/porting/connectivity/MeshInterface.md" - }, - { - "path": "docs/porting/connectivity/MeshMAC.md" - }, - { - "path": "docs/porting/connectivity/LoRaPortingGuide.md" - }, - { - "path": "docs/porting/connectivity/NFCEEPROMDriver.md" - } - ] - }, - { - "title": "Porting bootstrap", - "intro": { - "path": "docs/porting/target/bootstrap.md" - }, - "sources": [] - }, - { - "title": "Porting exporter targets", - "intro": { - "path": "docs/porting/target/exporter.md" - }, - "sources": [] - }, - { - "title": "Porting tools", - "intro": { - "path": "docs/porting/tools/tools.md" - }, - "sources": [{ - "path": "docs/porting/tools/build.md" - }, - { - "path": "docs/porting/tools/mbedls.md" - }, - { - "path": "docs/porting/tools/exporter.md" - }, - { - "path": "docs/porting/tools/hdk.md" - } - ] - } + }, + { + "title": "Device Management for Mbed OS", + "sources": [ + { + "path": "docs/pelion_ready/device-management.md" + }, + { + "path": "docs/pelion_ready/device-management-config.md" + }, + { + "path": "docs/pelion_ready/device-management-test.md" + } + ] + }, + { + "title": "Integrating with Arm Treasure Data", + "intro": { + "path": "docs/tutorials/treasure_data.md" + }, + "sources": [ + ] - }, - { - "title": "Mbed OS and the Pelion IoT Platform", - "slug": "mbed-os-pelion", - "type": "markdown", - "description": "", - "chapters": [ + }, + { + "title": "Going to production", + "sub_chapters": [ { "title": "Introduction", "intro": { - "path": "docs/pelion_ready/introduction_chip2cloud.md" - }, - "sources": [] - }, - { - "title": "Device Management for Mbed OS", - "sources": [{ - "path": "docs/pelion_ready/device-management.md" - }, - { - "path": "docs/pelion_ready/device-management-config.md" - }, - { - "path": "docs/pelion_ready/device-management-test.md" - } - ] + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/intro.md" }, - { - "title": "Integrating with Arm Treasure Data", - "intro": { - "path": "docs/tutorials/treasure_data.md" - }, - "sources": [] - }, - { - "title": "Going to production", - "sub_chapters": [{ - "title": "Introduction", - "intro": { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/intro.md" - }, - "sources": [] - }, - { - "title": "Stage 1: Evaluation", - "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage1.md" - }] - }, - { - "title": "Stage 2: Proof of concept", - "intro": { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/intro_s_2.md" - }, - "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/1_hardware.md" - }, - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/3_connectivity.md" - }, - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/2_software.md" - }, - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/4_security.md" - }, - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/6_example.md" - } - - ] - }, - { - "title": "Stage 3: Prototype", - "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage3.md" - }] - }, - { - "title": "Stage 4: Pilot", - "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage4.md" - }] - }, - { - "title": "Stage 5: Production", - "sources": [{ - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage5.md" - }] - } - ] - } + "sources": [ + ] + }, + { + "title": "Stage 1: Evaluation", + "sources": [ + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage1.md" + } + ] + }, + { + "title": "Stage 2: Proof of concept", + "intro": { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/intro_s_2.md" + }, + "sources": [ + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/1_hardware.md" + }, + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/3_connectivity.md" + }, + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/2_software.md" + }, + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/4_security.md" + }, + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/6_example.md" + } + ] + }, + { + "title": "Stage 3: Prototype", + "sources": [ + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage3.md" + } + ] + }, + { + "title": "Stage 4: Pilot", + "sources": [ + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage4.md" + } + ] + }, + { + "title": "Stage 5: Production", + "sources": [ + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage5.md" + } + ] + } ] - }, - { - "title": "feature-hal-spec-usb-device doxygen", - "description": "The full mbed OS API documentation in doxygen format", - "slug": "feature-hal-spec-usb-device-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "feature-hal-spec-usb-device" - }, - { - "title": "feature-hal-spec-sai doxygen", - "description": "The full mbed OS API documentation in doxygen format", - "slug": "feature-hal-spec-sai-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "feature-hal-spec-sai" - }, - { - "title": "feature-hal-spec-spi doxygen", - "description": "The full mbed OS API documentation in doxygen format", - "slug": "feature-hal-spec-spi-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "feature-hal-spec-spi" - }, - { - "title": "feature-hal-spec-watchdog doxygen", - "description": "The full mbed OS API documentation in doxygen format", - "slug": "feature-hal-spec-watchdog-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "feature-watchdog" - } + } + ] + }, + { + "title": "feature-hal-spec-usb-device doxygen", + "description": "The full mbed OS API documentation in doxygen format", + "slug": "feature-hal-spec-usb-device-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "feature-hal-spec-usb-device" + }, + { + "title": "feature-hal-spec-sai doxygen", + "description": "The full mbed OS API documentation in doxygen format", + "slug": "feature-hal-spec-sai-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "feature-hal-spec-sai" + }, + { + "title": "feature-hal-spec-spi doxygen", + "description": "The full mbed OS API documentation in doxygen format", + "slug": "feature-hal-spec-spi-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "feature-hal-spec-spi" + }, + { + "title": "feature-hal-spec-watchdog doxygen", + "description": "The full mbed OS API documentation in doxygen format", + "slug": "feature-hal-spec-watchdog-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "feature-watchdog" + } ] diff --git a/docs/porting/psa/porting-psa.md b/docs/porting/psa/porting-psa.md new file mode 100644 index 0000000000..026ba7cce8 --- /dev/null +++ b/docs/porting/psa/porting-psa.md @@ -0,0 +1,3 @@ +## Porting targets for PSA compliance + +Follow the instructions provided in this section to port a target that is intended to be [PSA](../reference/psa-api.html)-certified. From d1ab27a1e8694b860fab522ddfdce570624f2403 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 17:08:22 +0200 Subject: [PATCH 19/42] Update docs.json --- docs.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs.json b/docs.json index e6d2bd86f7..ce6e9cb47f 100644 --- a/docs.json +++ b/docs.json @@ -1211,17 +1211,17 @@ { "title": "PSA-compliant targets", "intro": { - "path": "docs/porting/target/porting-psa.md" + "path": "docs/porting/psa/porting-psa.md" }, "sources": [ { - "path": "docs/porting/target/spm.md" + "path": "docs/porting/psa/spm.md" }, { - "path": "docs/porting/target/crypto.md" + "path": "docs/porting/psa/crypto.md" }, { - "path": "docs/porting/target/testing_psa_service_compliance.md" + "path": "docs/porting/psa/testing_psa_service_compliance.md" } ] } From 8c5340bd3e67c8e5003d30c09387d706360bfd82 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 17:24:44 +0200 Subject: [PATCH 20/42] Updated docs.json. --- docs.json | 2 +- docs/porting/psa/{porting-psa.md => porting_psa.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/porting/psa/{porting-psa.md => porting_psa.md} (100%) diff --git a/docs.json b/docs.json index ce6e9cb47f..dd5aabf889 100644 --- a/docs.json +++ b/docs.json @@ -1211,7 +1211,7 @@ { "title": "PSA-compliant targets", "intro": { - "path": "docs/porting/psa/porting-psa.md" + "path": "docs/porting/psa/porting_psa.md" }, "sources": [ { diff --git a/docs/porting/psa/porting-psa.md b/docs/porting/psa/porting_psa.md similarity index 100% rename from docs/porting/psa/porting-psa.md rename to docs/porting/psa/porting_psa.md From 60595e6e45322e76a184f3a26c4ca381229c97ba Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 17:51:56 +0200 Subject: [PATCH 21/42] Update docs.json --- docs.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs.json b/docs.json index dd5aabf889..b8cd0b3be4 100644 --- a/docs.json +++ b/docs.json @@ -1202,12 +1202,6 @@ { "path": "docs/porting/target/crc.md" }, - { - "path": "docs/porting/psa/spm.md" - }, - { - "path": "docs/porting/psa/crypto.md" - }, { "title": "PSA-compliant targets", "intro": { From cb46a909e8b05de998469139b720c6a71d22a76c Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Wed, 6 Mar 2019 18:43:57 +0200 Subject: [PATCH 22/42] Update psa_lifecycle.md --- docs/api/security/lifecycle/psa_lifecycle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/security/lifecycle/psa_lifecycle.md b/docs/api/security/lifecycle/psa_lifecycle.md index 24c704de89..b8b40d19a2 100644 --- a/docs/api/security/lifecycle/psa_lifecycle.md +++ b/docs/api/security/lifecycle/psa_lifecycle.md @@ -6,7 +6,7 @@ Setting a lower lifecycle state - for example, factory or test state - allows yo The following is a state machine depiction of the PSA lifecycle: -![lifecycle](./psa_lifecycle.png) +![](https://s3-us-west-2.amazonaws.com/mbed-os-docs-images/psa_lifecycle.png) **Note:** PSA lifecycle is not a standalone feature; it depends on PSA bootloader support, which has not yet been introduced in Mbed OS. The only lifecycle change currently supported is `PSA_LIFECYCLE_ASSEMBLY_AND_TEST` to `PSA_LIFECYCLE_ASSEMBLY_AND_TEST`, which you can use in testing to reset the device RoT state. All of the lifecycle changes represented by dashed lines in the diagram above have not yet been implemented. From b46d327f2072eb2d5c909638d3da910351ede2df Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 09:29:22 +0200 Subject: [PATCH 23/42] Updated doc.json --- docs.json | 30 ++++++++++---------- docs/api/security/lifecycle/psa_lifecycle.md | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs.json b/docs.json index b8cd0b3be4..9c807ebfec 100644 --- a/docs.json +++ b/docs.json @@ -1201,23 +1201,23 @@ }, { "path": "docs/porting/target/crc.md" + } + ] + }, + { + "title": "PSA-compliant targets", + "intro": { + "path": "docs/porting/psa/porting_psa.md" + }, + "sources": [ + { + "path": "docs/porting/psa/spm.md" }, { - "title": "PSA-compliant targets", - "intro": { - "path": "docs/porting/psa/porting_psa.md" - }, - "sources": [ - { - "path": "docs/porting/psa/spm.md" - }, - { - "path": "docs/porting/psa/crypto.md" - }, - { - "path": "docs/porting/psa/testing_psa_service_compliance.md" - } - ] + "path": "docs/porting/psa/crypto.md" + }, + { + "path": "docs/porting/psa/testing_psa_service_compliance.md" } ] }, diff --git a/docs/api/security/lifecycle/psa_lifecycle.md b/docs/api/security/lifecycle/psa_lifecycle.md index 24c704de89..b8b40d19a2 100644 --- a/docs/api/security/lifecycle/psa_lifecycle.md +++ b/docs/api/security/lifecycle/psa_lifecycle.md @@ -6,7 +6,7 @@ Setting a lower lifecycle state - for example, factory or test state - allows yo The following is a state machine depiction of the PSA lifecycle: -![lifecycle](./psa_lifecycle.png) +![](https://s3-us-west-2.amazonaws.com/mbed-os-docs-images/psa_lifecycle.png) **Note:** PSA lifecycle is not a standalone feature; it depends on PSA bootloader support, which has not yet been introduced in Mbed OS. The only lifecycle change currently supported is `PSA_LIFECYCLE_ASSEMBLY_AND_TEST` to `PSA_LIFECYCLE_ASSEMBLY_AND_TEST`, which you can use in testing to reset the device RoT state. All of the lifecycle changes represented by dashed lines in the diagram above have not yet been implemented. From c1089cfbde772d3b24590835a1659c8e718b3b09 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 10:02:57 +0200 Subject: [PATCH 24/42] Update psa_attestation.md --- docs/api/security/psa_attestation.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/api/security/psa_attestation.md b/docs/api/security/psa_attestation.md index ce6a96d393..60d5e39794 100644 --- a/docs/api/security/psa_attestation.md +++ b/docs/api/security/psa_attestation.md @@ -46,6 +46,10 @@ In the current implementation, a bootloader does not exist in single and dual V7 [![View code](https://www.mbed.com/embed/?type=library)]() +### PSA attestation example + +[![View code](https://www.mbed.com/embed/?url=https://github.com/ARMmbed/mbed-os/blob/master/TESTS/psa/attestation)](https://github.com/ARMmbed/mbed-os/blob/master/TESTS/psa/attestation/main.cpp) + ### Related content * [PSA specification](https://pages.arm.com/PSA-APIs). From 49faaecebd115aa1933ab1277e5aa2dd1f0e9fa2 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 10:17:32 +0200 Subject: [PATCH 25/42] Update psa_attestation.md --- docs/api/security/psa_attestation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/security/psa_attestation.md b/docs/api/security/psa_attestation.md index 60d5e39794..2f5e5cc920 100644 --- a/docs/api/security/psa_attestation.md +++ b/docs/api/security/psa_attestation.md @@ -44,7 +44,7 @@ In the current implementation, a bootloader does not exist in single and dual V7 ### PSA attestation class reference -[![View code](https://www.mbed.com/embed/?type=library)]() +[![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/mbed-os/development/mbed-os-api-doxy/group___p_s_a-_attestation.html) ### PSA attestation example From c2acf2a22aee477728d77ade829cb89870093b20 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 10:38:40 +0200 Subject: [PATCH 26/42] Update psa_attestation.md --- docs/api/security/psa_attestation.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/api/security/psa_attestation.md b/docs/api/security/psa_attestation.md index 2f5e5cc920..7295da27fb 100644 --- a/docs/api/security/psa_attestation.md +++ b/docs/api/security/psa_attestation.md @@ -1,4 +1,4 @@ -## PSA attestation +## PSA initial attestation The PSA initial attestation service enables an application to prove a device's identity to a caller during the authentication process. @@ -32,7 +32,9 @@ The size of the token that the service creates is highly dependent on the number To get the exact size of the created token, call the `psa_initial_attest_get_token_size()` function. -You must call the `psa_crypto_init()` API before calling the attestation API. + **Note:** You must call the `psa_crypto_init()` API before calling the attestation API. + +### Claims in the initial attestation token The initial attestation token consists of claims. A claim is a data item, which is represented as a key-value pair. @@ -42,11 +44,11 @@ The token might also include data about the distinct software components on the In the current implementation, a bootloader does not exist in single and dual V7; therefore, we have provided temporary hardcoded boot status data claims in the `attestation_bootloader_data.c` file, including `HW version`, `Boot seed`, and some `Software components` entries. `Security lifecycle` should also be part of the boot status, but in the current implementation, it is provided by calling the `psa_security_lifecycle_state()` API directly. -### PSA attestation class reference +### PSA initial attestation class reference [![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/mbed-os/development/mbed-os-api-doxy/group___p_s_a-_attestation.html) -### PSA attestation example +### PSA initial attestation example [![View code](https://www.mbed.com/embed/?url=https://github.com/ARMmbed/mbed-os/blob/master/TESTS/psa/attestation)](https://github.com/ARMmbed/mbed-os/blob/master/TESTS/psa/attestation/main.cpp) From f24f40734cb767717c46e3133d4f7fab1a7a18ad Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 11:11:39 +0200 Subject: [PATCH 27/42] Moved PSA main page to the Security landing page. --- docs.json | 3 -- docs/reference/technology/psa/psa.md | 45 ---------------------------- 2 files changed, 48 deletions(-) delete mode 100644 docs/reference/technology/psa/psa.md diff --git a/docs.json b/docs.json index 9c807ebfec..a234af0e14 100644 --- a/docs.json +++ b/docs.json @@ -682,9 +682,6 @@ { "path": "docs/reference/technology/storage.md" }, - { - "path": "docs/reference/technology/psa/psa.md" - }, { "path": "docs/reference/runtime/Memory.md" }, diff --git a/docs/reference/technology/psa/psa.md b/docs/reference/technology/psa/psa.md deleted file mode 100644 index 77af367c93..0000000000 --- a/docs/reference/technology/psa/psa.md +++ /dev/null @@ -1,45 +0,0 @@ -

The Mbed implementation of PSA

- -The Mbed implementation of the Platform Security Architecture (PSA) provides root of trust services and infrastructure for developing IoT applications. - -When Mbed OS is running on a PSA Security Model compliant target, the Mbed implementation of PSA helps to protect cryptographic assets, credentials and critical code sections by providing an isolation between a Secure Processing Environment (SPE) and a Non-Secure Processing Environment (NSPE). The Secure Partition Manager (SPM), which uses the target's hardware features, manages the isolation. The SPM provides standardized Inter-Process Communication (IPC) APIs that you can use regardless of system architecture (v8M, TEE on Cortex-A) or inside another chip. - -The Mbed implementation of PSA bridges the differences between PSA platforms and non-PSA platforms for application developers, allowing them to use the same standard PSA APIs on both platform types. - -The Mbed implementation of PSA allows you to choose the platform type at later phase according to the final application threat model. - -![diagram](https://s3-us-west-2.amazonaws.com/mbed-os-docs-images/PSA-standardized-Interfaces-diagram.png)PSA diagram - -### SPM - -The SPM is a PSA-compliant software hypervisor that creates and manages independent secure partitions on Arm Cortex®-M microcontrollers. It increases resilience against malware and protects secrets from leaking between different modules in the same application. The SPM complements other important security features, such as safe firmware updates and secure crypto libraries. - -The SPM provides hardware-enforced partitions for individual code blocks by limiting access to memories and peripherals using the existing hardware security features of the Cortex®-M microcontrollers. It isolates software in partitions, managing the execution of software within those partitions and providing IPC between the partitions. Correct use of SPM prevents malware from becoming resident on the device and enables protection of device secrets, such as cryptographic keys. - -#### Isolating partitions in the SPE - -The SPM and the secure partitions are located in the SPE, isolating them from the NSPE, which contains the application firmware, OS kernel and libraries and other nonsecure hardware resources. - -A secure partition is a container for one or more root of trust services, and a platform may have multiple secure partitions. Secure partitions provide the execution environment for security functionality. - -Platform hardware, such as the Security Attribution Unit (SAU) and Memory Protection Unit (MPU) in the ARMv8-M platforms, enforces the separation of partitions. Other platforms may use different mechanisms to provide equivalent isolation for the partitions. - -### Platform types - -The Mbed implementation of PSA supports the following platform types: - -- Non-PSA platform: These are single core ARMv7-M targets. On these targets, the Mbed implementation of PSA provides the same PSA services exposing PSA APIs as it would on PSA targets. The PSA emulation layer allows seamless software portability to more security-oriented targets. - -- Asymmetric Multiprocessing (AMP) systems: Multicore ARMv7-M targets (for example, PSoC6 featuring CM4 and CM0+ cores). On these targets, one of the cores is dedicated to PSA use only and implements SPE. The Mbed implementation of PSA provides PSA API proxy implementation on a nonsecure core, which redirects execution to the SPE. - -- ARMv8-M: Generation of ARM processors featuring TrustZone-M architecture. PSA support for these platforms is based on a *specialized* [TrustedFirmware-M](https://www.trustedfirmware.org) implementation. - -### RoT services - -The Mbed implementation of PSA provides the following services: - -- [PSA RoT internal storage](..apis/psa-internal-storage.html). -- [PSA crypto](../apis/psa-crypto.html). -- [PSA attestation](../apis/psa-attestation.html). -- [PSA lifecycle](../apis/psa-lifecycle.html). -- [PSA platform service](../apis/platform-service.html). From 2da1aebbe4f79d6ef4eeca7af5ae2714c4b36be7 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 11:24:01 +0200 Subject: [PATCH 28/42] Update porting_psa.md --- docs/porting/psa/porting_psa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/porting/psa/porting_psa.md b/docs/porting/psa/porting_psa.md index 026ba7cce8..4e6fe5ea35 100644 --- a/docs/porting/psa/porting_psa.md +++ b/docs/porting/psa/porting_psa.md @@ -1,3 +1,3 @@ ## Porting targets for PSA compliance -Follow the instructions provided in this section to port a target that is intended to be [PSA](../reference/psa-api.html)-certified. +Follow the instructions provided in this section to port a target that is intended to be [PSA](../apis/security.html)-certified. From 2a4f96127db4a907c7920c1611586d2e9f979ed8 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 11:26:24 +0200 Subject: [PATCH 29/42] Update security.md --- docs/api/security/security.md | 52 ++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/docs/api/security/security.md b/docs/api/security/security.md index 8eada1785b..4057927251 100644 --- a/docs/api/security/security.md +++ b/docs/api/security/security.md @@ -1,15 +1,53 @@ -## Security overview +

The Mbed implementation of PSA

-Security on Arm Mbed OS is divided into the following parts: +The Mbed implementation of the Platform Security Architecture (PSA) provides root of trust services and infrastructure for developing IoT applications. -- [Platform Security Architecture (PSA) Secure Partition Manager (SPM)](../apis/spm-apis.html) - Accesses secure services within a secure processing environment (on PSA targets only). +When Mbed OS is running on a PSA Security Model compliant target, the Mbed implementation of PSA helps to protect cryptographic assets, credentials and critical code sections by providing an isolation between a Secure Processing Environment (SPE) and a Non-Secure Processing Environment (NSPE). The Secure Partition Manager (SPM), which uses the target's hardware features, manages the isolation. The SPM provides standardized Inter-Process Communication (IPC) APIs that you can use regardless of system architecture (v8M, TEE on Cortex-A) or inside another chip. -- [PSA Crypto](../apis/psa-crypto.html) - A reference implementation of the cryptography interface of PSA. +The Mbed implementation of PSA bridges the differences between PSA platforms and non-PSA platforms for application developers, allowing them to use the same standard PSA APIs on both platform types. -- [Mbed TLS](../apis/tls.html) - A comprehensive SSL/TLS solution. For full details, see the [Mbed TLS site](https://tls.mbed.org/). +The Mbed implementation of PSA allows you to choose the platform type at later phase according to the final application threat model. + +![diagram](https://s3-us-west-2.amazonaws.com/mbed-os-docs-images/PSA-standardized-Interfaces-diagram.png)PSA diagram + +### SPM + +The SPM is a PSA-compliant software hypervisor that creates and manages independent secure partitions on Arm Cortex®-M microcontrollers. It increases resilience against malware and protects secrets from leaking between different modules in the same application. The SPM complements other important security features, such as safe firmware updates and secure crypto libraries. + +The SPM provides hardware-enforced partitions for individual code blocks by limiting access to memories and peripherals using the existing hardware security features of the Cortex®-M microcontrollers. It isolates software in partitions, managing the execution of software within those partitions and providing IPC between the partitions. Correct use of SPM prevents malware from becoming resident on the device and enables protection of device secrets, such as cryptographic keys. + +#### Isolating partitions in the SPE + +The SPM and the secure partitions are located in the SPE, isolating them from the NSPE, which contains the application firmware, OS kernel and libraries and other nonsecure hardware resources. + +A secure partition is a container for one or more root of trust services, and a platform may have multiple secure partitions. Secure partitions provide the execution environment for security functionality. + +Platform hardware, such as the Security Attribution Unit (SAU) and Memory Protection Unit (MPU) in the ARMv8-M platforms, enforces the separation of partitions. Other platforms may use different mechanisms to provide equivalent isolation for the partitions. -- [PSA attestation](../apis/psa-attestation.html) - Enables an application to prove a device's identity to a caller during the authentication process. +### Platform types -- [PSA lifecycle](../apis/lifecycle/psa-lifecycle.html) - Enables fine-grained control of the target root of trust (RoT). +The Mbed implementation of PSA supports the following platform types: + +- Non-PSA platform: These are single core ARMv7-M targets. On these targets, the Mbed implementation of PSA provides the same PSA services exposing PSA APIs as it would on PSA targets. The PSA emulation layer allows seamless software portability to more security-oriented targets. + +- Asymmetric Multiprocessing (AMP) systems: Multicore ARMv7-M targets (for example, PSoC6 featuring CM4 and CM0+ cores). On these targets, one of the cores is dedicated to PSA use only and implements SPE. The Mbed implementation of PSA provides PSA API proxy implementation on a nonsecure core, which redirects execution to the SPE. + +- ARMv8-M: Generation of ARM processors featuring TrustZone-M architecture. PSA support for these platforms is based on a *specialized* [TrustedFirmware-M](https://www.trustedfirmware.org) implementation. + +### RoT services + +The Mbed implementation of PSA provides the following services: + +- [PSA RoT internal storage](..apis/psa-internal-storage.html). +- [PSA crypto](../apis/psa-crypto.html). +- [PSA attestation](../apis/psa-attestation.html). +- [PSA lifecycle](../apis/psa-lifecycle.html). +- [PSA platform service](../apis/platform-service.html). +- [PSA Secure Partition Manager (SPM)](../apis/spm-apis.html) + +### Additional Mbed OS security APIs + +Arm Mbed OS provides the following additional security APIs: - [Device key](../apis/DeviceKey.html) - Implements key derivation from a root of trust key. +- [Mbed TLS](../apis/tls.html) - A comprehensive SSL/TLS solution. For full details, see the [Mbed TLS site](https://tls.mbed.org/). From f22f92bfa8e40b4ca16bb1468851af38a6346a43 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 11:48:26 +0200 Subject: [PATCH 30/42] Update security.md --- docs/api/security/security.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/api/security/security.md b/docs/api/security/security.md index 4057927251..712e343597 100644 --- a/docs/api/security/security.md +++ b/docs/api/security/security.md @@ -38,16 +38,16 @@ The Mbed implementation of PSA supports the following platform types: The Mbed implementation of PSA provides the following services: -- [PSA RoT internal storage](..apis/psa-internal-storage.html). -- [PSA crypto](../apis/psa-crypto.html). -- [PSA attestation](../apis/psa-attestation.html). +- [PSA RoT internal storage](../apis/psa-internal-storage.html). +- [PSA Crypto](../apis/mbed-crypto.html). +- [PSA attestation](../apis/psa-initial-attestation.html). - [PSA lifecycle](../apis/psa-lifecycle.html). - [PSA platform service](../apis/platform-service.html). -- [PSA Secure Partition Manager (SPM)](../apis/spm-apis.html) +- [PSA Secure Partition Manager (SPM)](../apis/psa-spm.html) ### Additional Mbed OS security APIs Arm Mbed OS provides the following additional security APIs: -- [Device key](../apis/DeviceKey.html) - Implements key derivation from a root of trust key. +- [Device key](../apis/devicekey.html) - Implements key derivation from a root of trust key. - [Mbed TLS](../apis/tls.html) - A comprehensive SSL/TLS solution. For full details, see the [Mbed TLS site](https://tls.mbed.org/). From 00642e271596655238f3d3ed72f3d49a25e8a1f0 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 13:06:18 +0200 Subject: [PATCH 31/42] Update spm.md --- docs/porting/psa/spm.md | 88 ++++++++++++++++++++++++++--------------- 1 file changed, 57 insertions(+), 31 deletions(-) diff --git a/docs/porting/psa/spm.md b/docs/porting/psa/spm.md index 0bf926d233..5959dee41d 100644 --- a/docs/porting/psa/spm.md +++ b/docs/porting/psa/spm.md @@ -1,6 +1,6 @@

PSA SPM

-Secure Partition Manager (SPM) is a part of the PSA Firmware Framework that is responsible for isolating software in partitions, managing the execution of software within partitions and providing interprocessor communication (IPC) between partitions. +Secure Partition Manager (SPM) is a part of the PSA Firmware Framework that is responsible for isolating software in partitions, managing the execution of software within partitions and providing inter-process communication (IPC) between partitions. For more information about SPM, please refer to [the SPM overview page](../apis/psa-api.html). @@ -8,6 +8,12 @@ For more information about SPM, please refer to [the SPM overview page](../apis/ ### New target configuration +#### Platform types + +For information about the platform types supported by the Mbed implementation of PSA, see [Platform types](../reference/psa-api.html#platform-types). + +#### JSON target definition + When adding a new target, add a new root target node to the `mbed-os/targets/targets.json` file. For PSA support, define specific PSA-related fields for this target: - A secure target must inherit from `SPE_Target` metatarget. @@ -17,7 +23,7 @@ When adding a new target, add a new root target node to the `mbed-os/targets/tar - Both targets must override the default configuration by specifying flash RAM and shared RAM regions. The [memory layout section](#memory-layout) explains this in more detail. - The secure target must declare its corresponding nonsecure target using the `deliver_to_target` field. -The example below demonstrates this: +The example below demonstrates: ```json "SPM_SECURE_CORE_PSA": { @@ -55,6 +61,20 @@ The example below demonstrates this: } ``` +The following flags and labels must be added to each target type to add the relevant version of the source files to a compilation: + +| Label/core | V7-single
(Target) | V7-dual NSPE
(NSPE_Target) | V7-dual SPE
(SPE_Target) | V8-NS
(NSPE_Target) | V8-S
(SPE_Target) | +| ---------------------- |:---------------------:|:-----------------------------:|:---------------------------:|:----------------------:|:--------------------:| +| `PSA_SRV_IMPL` (component) | ✓ | | ✓ | | ✓ | +| `PSA_SRV_EMUL` (component) | ✓ | | | | | +| `PSA_SRV_IPC` (component) | | ✓ | ✓ | ✓ | ✓ | +| `SPE` (component) | | | ✓ | | ✓ | +| `NSPE` (component) | ✓ | ✓ | | ✓ | | +| `SPM_MAILBOX` (component) | | ✓ | ✓ | | | +| `MBED_SPM` (label) | | ✓ | ✓ | | | +| `TFM` (label) | | | | ✓ | ✓ | + + #### Memory layout Typically, PSA platforms share the same RAM and flash between secure and nonsecure cores. To provide PSA isolation level 1 or higher, you need to partition both RAM and flash to secure and nonsecure parts, in a way the following image describes: @@ -78,7 +98,7 @@ To achieve RAM and flash partitioning, you must add start and size values to a t **Note:** For isolation levels higher than 1, on top of the partitioning between secure and nonsecure parts, secure flash and RAM must have an inner level of partitioning, creating sections per secure partition. -### Linker scripts +### Linker script concepts Linker scripts must include `MBED_ROM_START`, `MBED_ROM_SIZE`, `MBED_RAM_START` and `MBED_RAM_START` macros for defining memory regions. You can define a shared memory region by reserving RAM space for shared memory use. The shared memory location is target specific and depends on the memory protection scheme applied. @@ -186,32 +206,17 @@ define symbol __ICFEDIT_region_IROM1_end__ = (MBED_ROM_START + MBED_ROM_SIZE); ... ``` -### Mailbox - -Mailbox is the mechanism used to implement IPC and is **only relevant for multicore systems**. SPM uses mailbox to communicate with secure partitions from a nonsecure processing environment. - -#### Concepts - -The mailbox mechanism is based on message queues and dispatcher threads. Each core has a single dispatcher thread and a single message queue. The dispatcher thread waits on a mailbox event. Once this event occurs, the dispatcher thread reads and runs "tasks" accumulated on its local message queue. - -#### Requirements - -The SPM mailbox mechanism requires the platform to have the following capabilities: - -- IPC capabilities - the ability to notify the peer processor about an event (usually implemented with interrupts). -- Ability to set a RAM section shared between the cores. - -#### Porting +### Porting SPM (asymmetric multiprocessing systems - multicore ARMv7-M) These are the guidelines you should follow if you have multicore systems: -- For each core, initialize, configure and enable the a mailbox event (usually an interrupt) at `SystemInit()`. +- For each core, initialize, configure and enable the mailbox event (usually an interrupt) at `SystemInit()`. - For each core, implement the IPC event handler (usually interrupt handler): - - The handler must call an Arm callback function. Refer to [HAL functions section](#hal-functions) for more details. + - The handler must call an Arm callback function. See the [HAL functions section](#hal-functions) for more details. - For each core, implement the HAL function that notifies the peer processor about a mailbox event occurrence. This is a part of the HAL, and the section below explains this in more detail. - For each core, add the `SPM_MAILBOX` component field for its target node in the `mbed-os/targets/targets.json` file. -### HAL functions +#### HAL functions Target-specific code of silicon partners adding SPM capabilities must: @@ -220,11 +225,26 @@ Target-specific code of silicon partners adding SPM capabilities must: The HAL can be logically divided into two different fields: -#### Mailbox -This part of HAL allows you to implement a thin layer of the mailbox mechanism that is specific to your platform. You must only implement it if you have multicore systems. +##### Mailbox -#### Secure Processing Environment +Mailbox is the mechanism used to implement IPC and is **only relevant for multicore systems**. SPM uses mailbox to communicate with secure partitions from a nonsecure processing environment. + +###### Concepts + +The mailbox mechanism is based on message queues and dispatcher threads. Each core has a single dispatcher thread and a single message queue. The dispatcher thread waits on a mailbox event. Once this event occurs, the dispatcher thread reads and runs "tasks" accumulated on its local message queue. + +###### Requirements + +The SPM mailbox mechanism requires the platform to have the following capabilities: + +- IPC capabilities - the ability to notify the peer processor about an event (usually implemented with interrupts). +- Ability to set a RAM section shared between the cores. + + +This part of HAL enables you to implement a thin, platform-specific layer of the mailbox mechanism. + +##### Secure Processing Environment This part of HAL allows you to apply your specific memory protection scheme. You can find a list of [these functions](https://os.mbed.com/docs/development/mbed-os-api-doxy/group___s_p_m.html). @@ -241,12 +261,18 @@ The implementation of this function must be aligned with the SPM general guideli Processor access |Secure RAM |Secure FLASH|Nonsecure RAM |Nonsecure FLASH --------------------|------------------|------------|-------------------|---------------- -`Non Secure Read` | X | X | V | V -`Non Secure Write` | X | X | V | ? -`Non Secure Execute`| X | X | X? | V -`Secure Read` | V | V | V | V -`Secure Write` | V | V | V | ? -`Secure Execute` | X? | V | X | ? +`Non Secure Read` | X | X | ✓ | ✓ +`Non Secure Write` | X | X | ✓ | ? +`Non Secure Execute`| X | X | X? | ✓ +`Secure Read` | ✓ | ✓ | ✓ | ✓ +`Secure Write` | ✓ | ✓ | ✓ | ? +`Secure Execute` | X? | ✓ | X | ? + + +### TF-M SPM porting (for ARMv8-M targets) + +TF-M HAL functions are defined in `tfm_spm_hal.h`. + ### Testing From 7048afd0f08f05fb7744b3ad8b9963e0d7ceed72 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 13:08:37 +0200 Subject: [PATCH 32/42] Update storage.md --- docs/api/storage/storage.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api/storage/storage.md b/docs/api/storage/storage.md index e28e67fd0b..788ada8b34 100644 --- a/docs/api/storage/storage.md +++ b/docs/api/storage/storage.md @@ -8,8 +8,8 @@ The storage APIs present in Arm Mbed OS are: Additionally, the following PSA-compliant APIs are present in Mbed OS: -- [PSA Protected Storage:](../apis/psa-protected-storage.html) PSA-compliant API for a Non-Secure Processing Environment (NSPE). -- [PSA Internal Storage:](../apis/psa-internal-storage.html) PSA-compliant API for a Secure Processing Environment (SPE). +- [PSA protected storage:](../apis/psa-protected-storage.html) PSA-compliant API for a Non-Secure Processing Environment (NSPE). +- [PSA internal storage:](../apis/psa-internal-storage.html) PSA-compliant API for a Secure Processing Environment (SPE). ### KVStore From e0a96e936ae15b44f72683c8fb8fa1ea9e220fb6 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 15:06:39 +0200 Subject: [PATCH 33/42] Removed empty Example sections in API docs. --- docs.json | 2 +- docs/api/security/lifecycle/generate_png.sh | 3 --- docs/api/security/lifecycle/psa_lifecycle.dot | 11 ----------- docs/api/security/lifecycle/psa_lifecycle.png | Bin 73977 -> 0 bytes docs/api/security/platform_service.md | 2 -- .../security/{lifecycle => }/psa_lifecycle.md | 3 --- docs/api/security/spm.md | 2 -- 7 files changed, 1 insertion(+), 22 deletions(-) delete mode 100644 docs/api/security/lifecycle/generate_png.sh delete mode 100644 docs/api/security/lifecycle/psa_lifecycle.dot delete mode 100644 docs/api/security/lifecycle/psa_lifecycle.png rename docs/api/security/{lifecycle => }/psa_lifecycle.md (99%) diff --git a/docs.json b/docs.json index a234af0e14..5140d2b0d9 100644 --- a/docs.json +++ b/docs.json @@ -501,7 +501,7 @@ "path": "docs/api/security/psa_crypto.md" }, { - "path": "docs/api/security/lifecycle/psa_lifecycle.md" + "path": "docs/api/security/psa_lifecycle.md" }, { "path": "docs/api/security/platform_service.md" diff --git a/docs/api/security/lifecycle/generate_png.sh b/docs/api/security/lifecycle/generate_png.sh deleted file mode 100644 index 5f48ebae6b..0000000000 --- a/docs/api/security/lifecycle/generate_png.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -dot -Tpng psa_lifecycle.dot -o psa_lifecycle.png \ No newline at end of file diff --git a/docs/api/security/lifecycle/psa_lifecycle.dot b/docs/api/security/lifecycle/psa_lifecycle.dot deleted file mode 100644 index 215cae34ad..0000000000 --- a/docs/api/security/lifecycle/psa_lifecycle.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph { - PSA_LIFECYCLE_ASSEMBLY_AND_TEST -> PSA_LIFECYCLE_ASSEMBLY_AND_TEST [label=<ITS reset>]; - PSA_LIFECYCLE_ASSEMBLY_AND_TEST -> PSA_LIFECYCLE_PSA_ROT_PROVISIONING [style=dashed, color=grey, label=<ITS reset and reboot>]; - PSA_LIFECYCLE_PSA_ROT_PROVISIONING -> PSA_LIFECYCLE_SECURED [style=dashed, color=grey, label="reboot"]; - PSA_LIFECYCLE_SECURED -> PSA_LIFECYCLE_NON_PSA_ROT_DEBUG [style=dashed, color=grey, label="reboot"]; - PSA_LIFECYCLE_SECURED -> PSA_LIFECYCLE_RECOVERABLE_PSA_ROT_DEBUG [style=dashed, color=grey, label="reboot"]; - PSA_LIFECYCLE_SECURED -> PSA_LIFECYCLE_DECOMMISSIONED [style=dashed, color=grey, label="reboot"]; - - PSA_LIFECYCLE_NON_PSA_ROT_DEBUG -> PSA_LIFECYCLE_SECURED [style=dashed, color=grey, label="reboot"]; - PSA_LIFECYCLE_RECOVERABLE_PSA_ROT_DEBUG -> PSA_LIFECYCLE_SECURED [style=dashed, color=grey, label="reboot"]; -} \ No newline at end of file diff --git a/docs/api/security/lifecycle/psa_lifecycle.png b/docs/api/security/lifecycle/psa_lifecycle.png deleted file mode 100644 index 9d90e6ce972f85bedd04c2e8d63640bd148b835a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73977 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 QLx6u?%d5*($ykK^4+lC7*Z=?k diff --git a/docs/api/security/platform_service.md b/docs/api/security/platform_service.md index 42964db211..bc40f22ac2 100644 --- a/docs/api/security/platform_service.md +++ b/docs/api/security/platform_service.md @@ -7,5 +7,3 @@ The System Reset API enables you to request system reset from a Non-Secure Proce ### Platform service class reference [![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/lifecycle_8h.html) - -### Example diff --git a/docs/api/security/lifecycle/psa_lifecycle.md b/docs/api/security/psa_lifecycle.md similarity index 99% rename from docs/api/security/lifecycle/psa_lifecycle.md rename to docs/api/security/psa_lifecycle.md index b8b40d19a2..ed5074002a 100644 --- a/docs/api/security/lifecycle/psa_lifecycle.md +++ b/docs/api/security/psa_lifecycle.md @@ -20,9 +20,6 @@ In Mbed OS, the PSA lifecycle is implemented as part of the [platform service](. [![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/lifecycle_8h.html) -### Example - - ### Related content * [Platform Security Architecture - Firmware Framework](https://pages.arm.com/psa-resources-ff.html). diff --git a/docs/api/security/spm.md b/docs/api/security/spm.md index 48fe76c8e4..e5ce0fe614 100644 --- a/docs/api/security/spm.md +++ b/docs/api/security/spm.md @@ -6,8 +6,6 @@ Platform Security Architecture (PSA) Secure Partition Manager (SPM) APIs enable [![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/group___s_p_m.html) -### Example - ### Related content * [Platform Security Architecture - Firmware Framework](https://pages.arm.com/psa-resources-ff.html). From 01ef6b003568d6d8160c82b1411440d0bff1cad0 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 15:11:41 +0200 Subject: [PATCH 34/42] Delete .gitignore --- .gitignore | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 64f41bd5cd..0000000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -tags -.DS_Store -.idea/ From 2e355c7908ccf7c88141e668847750d4b6f19362 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 15:12:13 +0200 Subject: [PATCH 35/42] Delete psa_crypto.md --- docs/api/security/psa_crypto.md | 34 --------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 docs/api/security/psa_crypto.md diff --git a/docs/api/security/psa_crypto.md b/docs/api/security/psa_crypto.md deleted file mode 100644 index 449d0cf049..0000000000 --- a/docs/api/security/psa_crypto.md +++ /dev/null @@ -1,34 +0,0 @@ -## Mbed Crypto - -Arm Mbed Crypto is the reference implementation of the cryptography interface of the Arm Platform Security Architecture (PSA). - -**Note:** The version of Mbed Crypto shipping with Mbed OS implements PSA Crypto API v1.0b1. - -We have adapted and [integrated Mbed Crypto with Mbed OS](https://github.com/ARMmbed/mbed-os/blob/master/features/mbedtls/mbed-crypto). -On PSA platforms that support it, Mbed Crypto comes integrated with Mbed OS to leverage the platform's segmented architecture and isolate cryptographic keys and operations from applications. - -You can import Mbed Crypto from its standalone [release](https://github.com/ARMmbed/mbed-crypto). Mbed Crypto as integrated with Mbed OS does not include all test code or scripts used in the development -of the library. You can find all of these in the standalone release. - -**Note:** Mbed Crypto, like Mbed TLS, needs a secure source of random numbers; make sure that your target board has one and that it is fully ported to Arm Mbed OS. You can read more about this in our [porting guide](../contributing/index.html). - -### Configuring Mbed Crypto features - -The Mbed TLS configuration system configures Mbed Crypto. For more information, see [Mbed TLS documentation for how to configure Mbed TLS and Mbed Crypto](../apis/tls.html#configuring-mbed-tls-features). - -### Mbed Crypto examples - -[![View code](https://www.mbed.com/embed/?url=https://github.com/ARMmbed/mbed-os-example-mbed-crypto/)](https://github.com/ARMmbed/mbed-os-example-mbed-crypto/blob/master/main.cpp) - -[The Mbed Crypto example](https://github.com/ARMmbed/mbed-os-example-mbed-crypto) covers some basic use of the PSA Crypto API as well as factory entropy injection. - -For further information, see the readme file in [the example repository](https://github.com/ARMmbed/mbed-os-example-mbed-crypto). - -### Other resources - -The [Mbed Crypto project homepage on GitHub](https://github.com/ARMmbed/mbed-crypto) contains the following -resources: - - - [Overview of the PSA Crypto API](https://github.com/ARMmbed/mbed-crypto/blob/psa-api-1.0-beta/docs/PSA_Crypto_API_Overview.pdf). - - [PSA Crypto API reference](https://github.com/ARMmbed/mbed-crypto/blob/psa-api-1.0-beta/docs/PSA_Crypto_API_Reference.pdf). - - [Other general developer documentation](https://github.com/ARMmbed/mbed-crypto/tree/development/docs). From d09b9aa71a65db74724ea041cb0eedcc92e347eb Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 16:22:13 +0200 Subject: [PATCH 36/42] Update platform_service.md --- docs/api/security/platform_service.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/api/security/platform_service.md b/docs/api/security/platform_service.md index bc40f22ac2..9a9e4dcceb 100644 --- a/docs/api/security/platform_service.md +++ b/docs/api/security/platform_service.md @@ -1,9 +1,9 @@ ## Platform service -The Platform service introduces System Reset and PSA Lifecycle APIs. +The Platform service introduces System Reset and [PSA Lifecycle](../lifecycle/psa-lifecycle.html) APIs. -The System Reset API enables you to request system reset from a Non-Secure Processing Environment (NSPE). +The System Reset API enables a Non-Secure Processing Environment (NSPE) to request a system reset. The [Trusted Base System Architecture for M (TBSA-M)](https://pages.arm.com/psa-resources-tbsa-m.html) specification defines that power state must be managed by the Secure Processing Environment (SPE); therefore, the SPE carries out system reset after all critical tasks are completed. ### Platform service class reference -[![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/lifecycle_8h.html) +[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/lifecycle_8h.html) From 0fb5890616459518fd6b6c0fc173adf19fe531ba Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 18:03:31 +0200 Subject: [PATCH 37/42] Update docs.json --- docs.json | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/docs.json b/docs.json index 5140d2b0d9..db084b979e 100644 --- a/docs.json +++ b/docs.json @@ -1202,19 +1202,18 @@ ] }, { - "title": "PSA-compliant targets", + "title": "Porting security", "intro": { - "path": "docs/porting/psa/porting_psa.md" - }, - "sources": [ - { "path": "docs/porting/psa/spm.md" - }, - { - "path": "docs/porting/psa/crypto.md" - }, - { - "path": "docs/porting/psa/testing_psa_service_compliance.md" + }, + "sources": [{ + "path": "docs/porting/psa/crypto.md" + }, + { + "path": "docs/porting/target/entropy.md" + }, + { + "path": "docs/porting/target/hw-accelerated-crypto.md" } ] }, From 374812218b957392bc4f9bf9d1e82ec3570b93c7 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 18:05:02 +0200 Subject: [PATCH 38/42] Delete porting_psa.md --- docs/porting/psa/porting_psa.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 docs/porting/psa/porting_psa.md diff --git a/docs/porting/psa/porting_psa.md b/docs/porting/psa/porting_psa.md deleted file mode 100644 index 4e6fe5ea35..0000000000 --- a/docs/porting/psa/porting_psa.md +++ /dev/null @@ -1,3 +0,0 @@ -## Porting targets for PSA compliance - -Follow the instructions provided in this section to port a target that is intended to be [PSA](../apis/security.html)-certified. From d4840a60056d4edf82a46223db4e33c6ddef4e5b Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 18:05:17 +0200 Subject: [PATCH 39/42] Delete testing_psa_service_compliance.md --- .../psa/testing_psa_service_compliance.md | 67 ------------------- 1 file changed, 67 deletions(-) delete mode 100644 docs/porting/psa/testing_psa_service_compliance.md diff --git a/docs/porting/psa/testing_psa_service_compliance.md b/docs/porting/psa/testing_psa_service_compliance.md deleted file mode 100644 index ffdb91cb54..0000000000 --- a/docs/porting/psa/testing_psa_service_compliance.md +++ /dev/null @@ -1,67 +0,0 @@ -

Testing PSA service compliance

- -Mbed OS provides an integrated version of the Platform Security Architecture (PSA) test suite running over the Greentea test infrastructure. You can use these tests on PSA services that you develop or customize on PSA-enabled platforms to verify the compliance of the services to the PSA specification. - -For information about PSA compliance tests, see [the PSA compliance test repository](https://github.com/ARM-software/psa-arch-tests). - -### Test directory layout - -The tests are divided into three groups, corresponding to the PSA services: - -* Cryptography test suite (`components/TARGET_PSA/TESTS/compliance_crypto` in the Mbed OS directory). -* Internal trusted storage test suite (`components/TARGET_PSA/TESTS/compliance_its` in the Mbed OS directory). -* Initial attestation test suite (`components/TARGET_PSA/TESTS/compliance_attestation` in the Mbed OS directory). - -Every test suite contains a folder for each of the test scenarios. Each test scenario may run one or more test vectors. - -### Compiling and running tests - -To compile and run PSA compliance tests in Mbed OS, run the following command: - -``` -mbed test -t -m -n mbed-os-components-target_psa-tests-compliance__ -``` -Where: - -* `` may be `GCC_ARM`, `ARM` or `IAR`. - -* `` is your target. - -* `` is: - * For crypto tests: `crypto-test`. - * For internal trusted storage tests: `its-test`. - * For attestation tests: `attestation-test`. - -* `` is: - * For crypto tests: `c001`, `c002`, and so on. - * For internal trusted storage tests: `s001`, `s002`, and so on. - * For attestation tests: `a001`, `a002`, and so on. - -### Cryptographic configuration -By default, the PSA compliance tests run using the default Mbed OS cryptography configuration (the configuration can be found at `features/mbedtls/inc/mbedtls/config.h` in the Mbed OS directory). When you use the default configuration, only tests supported by the configuration run. - -You can override the default Mbed OS cryptography configuration using an `mbed_app.json` file. For an example of how to use an `mbed_app.json` file to override the default cryptography configuration, see the [mbed-os-psa-compliance-tests-example repository](https://github.com/ARMmbed/mbed-os-psa-compliance-tests-example). - -### Sample test output -When the tests run, they output state information to the serial output. Below is an example of a successful run (running the first crypto test scenario): -``` -TEST: 201 | DESCRIPTION: Testing psa_crypto_init API: Basic -[Info] Executing tests from non-secure{{__testcase_start;Check1}} - -[Check 1] Test calling crypto functions before psa_crypto_init -{{__testcase_finish;Check1;1;0}} - -{{__testcase_start;Check2}} - -[Check 2] Test psa_crypto_init -{{__testcase_finish;Check2;1;0}} - -{{__testcase_start;Check3}} - -[Check 3] Test multiple psa_crypto_init -{{__testcase_finish;Check3;1;0}} - -{{end;success}} - -{{__exit;0}} -``` From 6eb99c671d4e8c23fe922a967bd5669591bc8619 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 18:07:50 +0200 Subject: [PATCH 40/42] Update docs.json --- docs.json | 2725 ++++++++++++++++++++++++++--------------------------- 1 file changed, 1345 insertions(+), 1380 deletions(-) diff --git a/docs.json b/docs.json index db084b979e..6e3ec5c624 100644 --- a/docs.json +++ b/docs.json @@ -1,1451 +1,1416 @@ -[ - { - "title": "Mbed OS API doxygen", - "description": "The full Mbed OS API documentation in doxygen format", - "slug": "mbed-os-api-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "master" - }, - { - "title": "Mbed OS 5", - "description": "Introducing Mbed OS: the overview, architecture, features and licensing", - "slug": "introduction", - "type": "markdown", - "chapters": [ - { - "title": "Introduction", - "intro": { - "path": "docs/introduction/introduction.md" - }, - "sources": [ - - ] - }, - { - "title": "Versions and releases", - "sources": [ - { - "path": "docs/tutorials/mbed-os-2-vs-5.md" - }, - { - "path": "docs/introduction/release_process.md" - } - ] - }, - { - "title": "Glossary", - "sources": [ - { - "path": "docs/introduction/terms.md" - } - ] - } - ], - "tags": [ - "introduction" - ] - }, - { - "title": "Quick start", - "description": "", - "slug": "quick-start", - "type": "markdown", - "chapters": [ - { - "title": "Introduction", - "intro": { - "path": "docs/tutorials/quickstart/quick-start.md" - }, - "sources": [ - - ] - }, - { - "title": "Online with the Online Compiler", - "sub_chapters": [ - { - "title": "Importing and compiling the code", - "sources": [ - { - "path": "docs/tutorials/quickstart/quick-start-compiler.md" - }, - { - "path": "docs/tutorials/quickstart/example_walkthrough.md" - } - ] - }, - { - "title": "Debugging with the Online Compiler", - "intro": { - "path": "docs/tutorials/quickstart/quick-start-online-debug.md" +[{ + "title": "Mbed OS API doxygen", + "description": "The full Mbed OS API documentation in doxygen format", + "slug": "mbed-os-api-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "master" + }, + { + "title": "Mbed OS 5", + "description": "Introducing Mbed OS: the overview, architecture, features and licensing", + "slug": "introduction", + "type": "markdown", + "chapters": [{ + "title": "Introduction", + "intro": { + "path": "docs/introduction/introduction.md" + }, + "sources": [] }, - "sources": [ + { + "title": "Versions and releases", - ] - } - ] - }, - { - "title": "Offline with Mbed CLI", - "sub_chapters": [ - { - "title": "Setting up and compiling the code", - "sources": [ - { - "path": "docs/tutorials/quickstart/cli_setting_up.md" - }, - { - "path": "docs/tutorials/quickstart/cli_code.md" - }, - { - "path": "docs/tutorials/quickstart/example_walkthrough.md" - } - ] - }, - { - "title": "Debugging with Mbed CLI", - "intro": { - "path": "docs/tutorials/quickstart/quick-start-cli-debug.md" + "sources": [{ + "path": "docs/tutorials/mbed-os-2-vs-5.md" + }, + { + "path": "docs/introduction/release_process.md" + } + ] }, - "sources": [ - - ] - } - ] - }, - { - "title": "Further reading", - "intro": { - "path": "docs/tutorials/quickstart/further_reading.md" - }, - "sources": [ - - ] - } - ] - }, - { - "title": "APIs", - "description": "The APIs of Mbed OS: platform, drivers, RTOS, connectivity, security and storage", - "slug": "apis", - "type": "markdown", - "category": "apis", - "chapters": [ - { - "title": "Full API list", - "intro": { - "path": "docs/api/api.md" - }, - "sources": [ - - ] - }, - { - "title": "Platform", - "intro": { - "path": "docs/api/platform/platform.md" - }, - "sources": [ - { - "path": "docs/api/platform/Wait.md" - }, - { - "path": "docs/api/platform/Callback.md" - }, - { - "path": "docs/api/platform/DeepSleepLock.md" - }, - { - "path": "docs/api/platform/PowerManagement.md" - }, - { - "path": "docs/api/platform/IdleLoop.md" - }, - { - "path": "docs/api/platform/CriticalSectionLock.md" - }, - { - "path": "docs/api/platform/Time.md" - }, - { - "path": "docs/api/platform/Rtc.md" - }, - { - "path": "docs/api/platform/Debug.md" - }, - { - "path": "docs/api/platform/MemTrace.md" - }, - { - "path": "docs/api/platform/Error.md" - }, - { - "path": "docs/api/platform/Assert.md" - }, - { - "path": "docs/api/platform/NonCopyable.md" - }, - { - "path": "docs/api/platform/SharedPtr.md" - }, - { - "path": "docs/api/platform/Span.md" - }, - { - "path": "docs/api/platform/FileHandle.md" - }, - { - "path": "docs/api/platform/Poll.md" - }, - { - "path": "docs/api/platform/PlatformMutex.md" - }, - { - "path": "docs/api/platform/CircularBuffer.md" - }, - { - "path": "docs/api/platform/ATCmdParser.md" - }, - { - "path": "docs/api/platform/MbedStats.md" - }, - { - "path": "docs/api/platform/MpuManagement.md" - }, - { - "path": "docs/api/platform/ScopedRamExecutionLock.md" - }, - { - "path": "docs/api/platform/ScopedRomWriteLock.md" - } - ] - }, - { - "title": "Drivers", - "intro": { - "path": "docs/api/drivers/drivers.md" - }, - "sources": [ - { - "path": "docs/api/drivers/AnalogIn.md" - }, - { - "path": "docs/api/drivers/AnalogOut.md" - }, - { - "path": "docs/api/drivers/DigitalIn.md" - }, - { - "path": "docs/api/drivers/DigitalOut.md" - }, - { - "path": "docs/api/drivers/DigitalInOut.md" - }, - { - "path": "docs/api/drivers/BusIn.md" - }, - { - "path": "docs/api/drivers/BusOut.md" - }, - { - "path": "docs/api/drivers/BusInOut.md" - }, - { - "path": "docs/api/drivers/PortIn.md" - }, - { - "path": "docs/api/drivers/PortOut.md" - }, - { - "path": "docs/api/drivers/PortInOut.md" - }, - { - "path": "docs/api/drivers/PwmOut.md" - }, - { - "path": "docs/api/drivers/InterruptIn.md" - }, - { - "path": "docs/api/drivers/Ticker.md" - }, - { - "path": "docs/api/drivers/TimeOut.md" - }, - { - "path": "docs/api/drivers/Timer.md" - }, - { - "path": "docs/api/drivers/LowPowerTicker.md" - }, - { - "path": "docs/api/drivers/LowPowerTimeout.md" - }, - { - "path": "docs/api/drivers/LowPowerTimer.md" - }, - { - "path": "docs/api/drivers/FlashIAP.md" - }, - { - "path": "docs/api/drivers/RawSerial.md" - }, - { - "path": "docs/api/drivers/Serial.md" - }, - { - "path": "docs/api/drivers/SPI.md" - }, - { - "path": "docs/api/drivers/SPISlave.md" - }, - { - "path": "docs/api/drivers/QuadSPI.md" - }, - { - "path": "docs/api/drivers/I2C.md" - }, - { - "path": "docs/api/drivers/I2CSlave.md" - }, - { - "path": "docs/api/drivers/CAN.md" - }, - { - "path": "docs/api/drivers/MbedCRC.md" - } - ] - }, - { - "title": "RTOS", - "intro": { - "path": "docs/api/rtos/rtos.md" - }, - "sources": [ - { - "path": "docs/api/rtos/Thread.md" - }, - { - "path": "docs/api/rtos/Mutex.md" - }, - { - "path": "docs/api/rtos/Semaphore.md" - }, - { - "path": "docs/api/rtos/Queue.md" - }, - { - "path": "docs/api/rtos/EventQueue.md" - }, - { - "path": "docs/api/rtos/MemoryPool.md" - }, - { - "path": "docs/api/rtos/Mail.md" - }, - { - "path": "docs/api/rtos/RtosTimer.md" - }, - { - "path": "docs/api/rtos/EventFlags.md" - }, - { - "path": "docs/api/rtos/Event.md" - }, - { - "path": "docs/api/rtos/ConditionVariable.md" - }, - { - "path": "docs/api/rtos/Kernel.md" - } - ] - }, - { - "title": "Network Socket", - "intro": { - "path": "docs/api/networksocket/networksocket.md" - }, - "sources": [ - { - "path": "docs/api/networksocket/socket.md" - }, - { - "path": "docs/api/networksocket/UDPSocket.md" - }, - { - "path": "docs/api/networksocket/TCPSocket.md" - }, - { - "path": "docs/api/networksocket/SocketAddress.md" - }, - { - "path": "docs/api/networksocket/CellularNonIPSocket.md" - }, - { - "path": "docs/api/networksocket/DNS.md" - }, - { - "path": "docs/api/networksocket/TLSSocket.md" - }, - { - "path": "docs/api/networksocket/DTLSSocket.md" - }, - { - "path": "docs/api/networksocket/SocketStats.md" - } - ] - }, - { - "title": "Network interfaces", - "intro": { - "path": "docs/api/networkinterfaces/networkinterface.md" - }, - "sources": [ - { - "path": "docs/api/networkinterfaces/EthInterface.md" - }, - { - "path": "docs/api/networkinterfaces/WifiInterface.md" - }, - { - "path": "docs/api/networkinterfaces/CellularInterface.md" - }, - { - "path": "docs/api/networkinterfaces/MeshInterface.md" - }, - { - "path": "docs/api/networkinterfaces/NetworkStatus.md" - } - ] - }, - { - "title": "Bluetooth", - "intro": { - "path": "docs/api/bluetooth/bluetooth.md" - }, - "sources": [ - { - "path": "docs/api/bluetooth/BLE.md" - }, - { - "path": "docs/api/bluetooth/Gap.md" - }, - { - "path": "docs/api/bluetooth/GattClient.md" - }, - { - "path": "docs/api/bluetooth/GattServer.md" - }, - { - "path": "docs/api/bluetooth/SecurityManager.md" - }, - { - "path": "docs/api/bluetooth/BatteryService.md" - }, - { - "path": "docs/api/bluetooth/HeartRateService.md" - }, - { - "path": "docs/api/bluetooth/iBeacon.md" - } - ] - }, - { - "title": "LoRaWAN", - "intro": { - "path": "docs/api/lorawan/lorawanintro.md" - }, - "sources": [ - { - "path": "docs/api/lorawan/lorawan.md" - }, - { - "path": "docs/api/lorawan/loraradio.md" - } - ] - }, - { - "title": "NFC", - "intro": { - "path": "docs/api/nfc/NDEF.md" - }, - "sources": [ - { - "path": "docs/api/nfc/NFCController.md" - }, - { - "path": "docs/api/nfc/NFCEEPROM.md" - }, - { - "path": "docs/api/nfc/MessageParser.md" - }, - { - "path": "docs/api/nfc/SimpleMessageParser.md" - }, - { - "path": "docs/api/nfc/MessageBuilder.md" - } - ] - }, - { - "title": "Security", - "intro": { - "path": "docs/api/security/security.md" - }, - "sources": [ - { - "path": "docs/api/security/psa_attestation.md" - }, - { - "path": "docs/api/security/psa_crypto.md" - }, - { - "path": "docs/api/security/psa_lifecycle.md" - }, - { - "path": "docs/api/security/platform_service.md" - }, - { - "path": "docs/api/security/spm.md" - }, - { - "path": "docs/api/security/TLS.md" - }, - { - "path": "docs/api/security/Devicekey.md" - } - ] - }, - { - "title": "Storage", - "intro": { - "path": "docs/api/storage/storage.md" - }, - "sources": [ - { - "path": "docs/api/storage/KVStoreAPI.md" - }, - { - "path": "docs/api/storage/KVStoreGlobalAPI.md" - }, - { - "path": "docs/api/storage/FileSystem.md" - }, - { - "path": "docs/api/storage/Dir.md" - }, - { - "path": "docs/api/storage/File.md" - }, - { - "path": "docs/api/storage/LittleFileSystem.md" - }, - { - "path": "docs/api/storage/FATFileSystem.md" - }, - { - "path": "docs/api/storage/BlockDevice.md" - }, - { - "path": "docs/api/storage/HeapBlockDevice.md" - }, - { - "path": "docs/api/storage/MBRBlockDevice.md" - }, - { - "path": "docs/api/storage/ChainingBlockDevice.md" - }, - { - "path": "docs/api/storage/SlicingBlockDevice.md" - }, - { - "path": "docs/api/storage/ProfilingBlockDevice.md" - }, - { - "path": "docs/api/storage/BufferedBlockDevice.md" - }, - { - "path": "docs/api/storage/FlashSimBlockDevice.md" - }, - { - "path": "docs/api/storage/DataFlashBlockDevice.md" - }, - { - "path": "docs/api/storage/FlashIAPBlockDevice.md" - }, - { - "path": "docs/api/storage/SDBlockDevice.md" - }, - { - "path": "docs/api/storage/SPIFBlockDevice.md" - }, - { - "path": "docs/api/storage/QSPIFBlockDevice.md" - }, - { - "path": "docs/api/storage/NVStore.md" - }, - { - "path": "docs/api/storage/psa_internal_storage.md" - }, - { - "path": "docs/api/storage/psa_protected_storage.md" - } - ] - } - ], - "tags": [ - "apis" - ] - }, - { - "title": "Reference", - "description": "The reference manual for Mbed OS: architecture, configuration and contribution details", - "slug": "reference", - "type": "markdown", - "chapters": [ - { - "title": "Overview", - "intro": { - "path": "docs/reference/reference.md" - }, - "sources": [ - - ] - }, - { - "title": "Architecture", - "intro": { - "path": "docs/reference/technology/technology.md" - }, - "sub_chapters": [ - { - "title": "Networking", - "sources": [ - { - "path": "docs/reference/technology/connectivity/connectivity.md" - }, - { - "path": "docs/reference/technology/connectivity/networking.md" - }, - { - "path": "docs/reference/technology/connectivity/ethernet.md" - }, - { - "path": "docs/reference/technology/connectivity/wifi.md" - }, - { - "path": "docs/reference/technology/connectivity/cellular.md" - }, - { - "path": "docs/reference/technology/mesh/quick_start_intro.md" - }, - { - "path": "docs/reference/technology/mesh/thread_intro.md" - }, - { - "path": "docs/reference/technology/mesh/quick_start_hw.md" - }, - { - "path": "docs/reference/technology/mesh/thread_commissioning.md" - }, - { - "path": "docs/reference/technology/mesh/thread_faq.md" - }, - { - "path": "docs/reference/technology/mesh/02_N_arch.md" - }, - { - "path": "docs/reference/technology/mesh/04_N_networking.md" - }, - { - "path": "docs/reference/technology/connectivity/lora-tech.md" - }, - { - "path": "docs/reference/technology/connectivity/NFC.md" - }, - { - "path": "docs/reference/technology/connectivity/securesocket.md" - } - ] - }, - { - "title": "Technologies", - "sources": [ - { - "path": "docs/reference/technology/non-stack.md" - }, - { - "path": "docs/reference/technology/firmware_update.md" - }, - { - "path": "docs/reference/technology/storage.md" - }, - { - "path": "docs/reference/runtime/Memory.md" - }, - { - "path": "docs/reference/runtime/static_memory_optimization.md" - } - ] - } - ] - }, - { - "title": "Mbed OS fundamentals", - "sources": [ - { - "path": "docs/reference/runtime/Execution.md" - }, - { - "path": "docs/reference/runtime/Bootstrap.md" - }, - { - "path": "docs/reference/thread_safety.md" - } + { + "title": "Glossary", + "sources": [{ + "path": "docs/introduction/terms.md" + }] + } + ], + "tags": [ + "introduction" ] - }, - { - "title": "Project structures and configuration", - "sub_chapters": [ - { - "title": "Project structure", - "sources": [ - { - "path": "docs/reference/project-structure.md" - }, - { - "path": "docs/reference/build_rules.md" - } - ] - }, - { - "title": "Configuration", - "intro": { - "path": "docs/reference/configuration/configuration.md" + }, + { + "title": "Quick start", + "description": "", + "slug": "quick-start", + "type": "markdown", + "chapters": [{ + "title": "Introduction", + "intro": { + "path": "docs/tutorials/quickstart/quick-start.md" + }, + "sources": [] }, - "sources": [ - { - "path": "docs/reference/configuration/mbed_targets.md" - }, - { - "path": "docs/reference/configuration/Platform.md" - }, - { - "path": "docs/reference/configuration/Drivers.md" - }, - { - "path": "docs/reference/configuration/RTOS.md" - }, - { - "path": "docs/reference/configuration/Connectivity.md" - }, - { - "path": "docs/reference/configuration/mesh.md" - }, - { - "path": "docs/reference/configuration/lorawanconfig.md" - }, - { - "path": "docs/reference/configuration/Storage.md" - }, - { - "path": "docs/reference/configuration/bootloader.md" - } - ] - } - ] - } - ] - }, - { - "title": "Tools", - "description": "Details of the tools available for working with Mbed OS", - "slug": "tools", - "type": "markdown", - "chapters": [ - { - "title": "Overview", - "intro": { - "path": "docs/tools/tools_intro.md" - }, - "sources": [ - + { + "title": "Online with the Online Compiler", + "sub_chapters": [{ + "title": "Importing and compiling the code", + "sources": [{ + "path": "docs/tutorials/quickstart/quick-start-compiler.md" + }, + { + "path": "docs/tutorials/quickstart/example_walkthrough.md" + } + ] + }, + { + "title": "Debugging with the Online Compiler", + "intro": { + "path": "docs/tutorials/quickstart/quick-start-online-debug.md" + }, + "sources": [] + } + ] + }, + { + "title": "Offline with Mbed CLI", + "sub_chapters": [{ + "title": "Setting up and compiling the code", + "sources": [{ + "path": "docs/tutorials/quickstart/cli_setting_up.md" + }, + { + "path": "docs/tutorials/quickstart/cli_code.md" + }, + { + "path": "docs/tutorials/quickstart/example_walkthrough.md" + } + ] + }, + { + "title": "Debugging with Mbed CLI", + "intro": { + "path": "docs/tutorials/quickstart/quick-start-cli-debug.md" + }, + "sources": [] + } + ] + }, + { + "title": "Further reading", + "intro": { + "path": "docs/tutorials/quickstart/further_reading.md" + }, + "sources": [] + } ] - }, - { - "title": "Developing: Mbed Online Compiler", - "sub_chapters": [ - { - "title": "Getting started", - "intro": { - "path": "docs/tools/IDE/online_comp.md" + }, + { + "title": "Mbed OS bare metal", + "description": "The Mbed OS bare metal profile", + "slug": "bare-metal", + "type": "markdown", + "chapters": [{ + "title": "Introduction", + "intro": { + "path": "docs/bare_metal.md" + }, + "sources": [] }, - "sources": [ - { - "path": "docs/tools/IDE/oc_tut.md" - }, - { - "path": "docs/tools/IDE/compiler_publishing_code.md" - }, - { - "path": "docs/tools/IDE/updating_firmware.md" - } - ] - }, - { - "title": "Source control", - "sources": [ - { - "path": "docs/tools/IDE/compiler_version_control.md" - }, - { - "path": "docs/tools/IDE/compiler_pull_requests.md" - }, - { - "path": "docs/tools/IDE/oc_pr_tut.md" - } - ] - }, - { - "title": "Collaborative work", - "sources": [ - { - "path": "docs/tools/IDE/compiler_multiple_authors.md" - }, - { - "path": "docs/tools/IDE/compiler_collab.md" - } - ] - }, - { - "title": "The Online Compiler reference", - "sources": [ - { - "path": "docs/tools/IDE/ide_ref.md" - } - ] - } + { + "title": "Bare metal APIs", + "sources": [{ + "path": "docs/baremetal_api.md" + }] + } ] - }, + }, + { + "title": "APIs", + "description": "The APIs of Mbed OS: platform, drivers, RTOS, connectivity, security and storage", + "slug": "apis", + "type": "markdown", + "category": "apis", + "chapters": [{ + "title": "Full API list", + "intro": { + "path": "docs/api/api.md" + }, + "sources": [] + }, + { + "title": "Platform", + "intro": { + "path": "docs/api/platform/platform.md" + }, + "sources": [{ + "path": "docs/api/platform/Wait.md" + }, + { + "path": "docs/api/platform/Callback.md" + }, + { + "path": "docs/api/platform/DeepSleepLock.md" + }, + { + "path": "docs/api/platform/PowerManagement.md" + }, + { + "path": "docs/api/platform/IdleLoop.md" + }, + { + "path": "docs/api/platform/CriticalSectionLock.md" + }, + { + "path": "docs/api/platform/Time.md" + }, + { + "path": "docs/api/platform/Rtc.md" + }, + { + "path": "docs/api/platform/Debug.md" + }, + { + "path": "docs/api/platform/MemTrace.md" + }, + { + "path": "docs/api/platform/Error.md" + }, + { + "path": "docs/api/platform/Assert.md" + }, + { + "path": "docs/api/platform/NonCopyable.md" + }, + { + "path": "docs/api/platform/SharedPtr.md" + }, + { + "path": "docs/api/platform/Span.md" + }, + { + "path": "docs/api/platform/FileHandle.md" + }, + { + "path": "docs/api/platform/Poll.md" + }, + { + "path": "docs/api/platform/PlatformMutex.md" + }, + { + "path": "docs/api/platform/CircularBuffer.md" + }, + { + "path": "docs/api/platform/ATCmdParser.md" + }, + { + "path": "docs/api/platform/MbedStats.md" + }, + { + "path": "docs/api/platform/MpuManagement.md" + }, + { + "path": "docs/api/platform/ScopedRamExecutionLock.md" + }, + { + "path": "docs/api/platform/ScopedRomWriteLock.md" + } + ] + }, + { + "title": "Drivers", + "intro": { + "path": "docs/api/drivers/drivers.md" + }, + "sources": [{ + "path": "docs/api/drivers/AnalogIn.md" + }, + { + "path": "docs/api/drivers/AnalogOut.md" + }, + { + "path": "docs/api/drivers/DigitalIn.md" + }, + { + "path": "docs/api/drivers/DigitalOut.md" + }, + { + "path": "docs/api/drivers/DigitalInOut.md" + }, + { + "path": "docs/api/drivers/BusIn.md" + }, + { + "path": "docs/api/drivers/BusOut.md" + }, + { + "path": "docs/api/drivers/BusInOut.md" + }, + { + "path": "docs/api/drivers/PortIn.md" + }, + { + "path": "docs/api/drivers/PortOut.md" + }, + { + "path": "docs/api/drivers/PortInOut.md" + }, + { + "path": "docs/api/drivers/PwmOut.md" + }, + { + "path": "docs/api/drivers/InterruptIn.md" + }, + { + "path": "docs/api/drivers/Ticker.md" + }, + { + "path": "docs/api/drivers/TimeOut.md" + }, + { + "path": "docs/api/drivers/Timer.md" + }, + { + "path": "docs/api/drivers/LowPowerTicker.md" + }, + { + "path": "docs/api/drivers/LowPowerTimeout.md" + }, + { + "path": "docs/api/drivers/LowPowerTimer.md" + }, + { + "path": "docs/api/drivers/FlashIAP.md" + }, + { + "path": "docs/api/drivers/RawSerial.md" + }, + { + "path": "docs/api/drivers/Serial.md" + }, + { + "path": "docs/api/drivers/SPI.md" + }, + { + "path": "docs/api/drivers/SPISlave.md" + }, + { + "path": "docs/api/drivers/QuadSPI.md" + }, + { + "path": "docs/api/drivers/I2C.md" + }, + { + "path": "docs/api/drivers/I2CSlave.md" + }, + { + "path": "docs/api/drivers/CAN.md" + }, + { + "path": "docs/api/drivers/MbedCRC.md" + } + ] + }, + { + "title": "RTOS", + "intro": { + "path": "docs/api/rtos/rtos.md" + }, + "sources": [{ + "path": "docs/api/rtos/Thread.md" + }, + { + "path": "docs/api/rtos/Mutex.md" + }, + { + "path": "docs/api/rtos/Semaphore.md" + }, + { + "path": "docs/api/rtos/Queue.md" + }, + { + "path": "docs/api/rtos/EventQueue.md" + }, + { + "path": "docs/api/rtos/MemoryPool.md" + }, + { + "path": "docs/api/rtos/Mail.md" + }, + { + "path": "docs/api/rtos/RtosTimer.md" + }, + { + "path": "docs/api/rtos/EventFlags.md" + }, + { + "path": "docs/api/rtos/Event.md" + }, + { + "path": "docs/api/rtos/ConditionVariable.md" + }, + { + "path": "docs/api/rtos/Kernel.md" + } + ] + }, + { + "title": "USB", + "intro": { + "path": "docs/api/usb/usb_component.md" + }, + "sources": [{ + "path": "docs/api/usb/USBSerial.md" + }, + { + "path": "docs/api/usb/USBAudio.md" + }, + { + "path": "docs/api/usb/USBHID.md" + }, + { + "path": "docs/api/usb/USBCDC.md" + }, + { + "path": "docs/api/usb/USBMSD.md" + }, + { + "path": "docs/api/usb/USBMIDI.md" + }, + { + "path": "docs/api/usb/USBMouse.md" + }, + { + "path": "docs/api/usb/USBKeyboard.md" + }, + { + "path": "docs/api/usb/USBMouseKeyboard.md" + } + ] + }, + { + "title": "Network Socket", + "intro": { + "path": "docs/api/networksocket/networksocket.md" + }, + "sources": [{ + "path": "docs/api/networksocket/socket.md" + }, + { + "path": "docs/api/networksocket/UDPSocket.md" + }, + { + "path": "docs/api/networksocket/TCPSocket.md" + }, + { + "path": "docs/api/networksocket/SocketAddress.md" + }, + { + "path": "docs/api/networksocket/CellularNonIPSocket.md" + }, + { + "path": "docs/api/networksocket/DNS.md" + }, + { + "path": "docs/api/networksocket/TLSSocket.md" + }, + { + "path": "docs/api/networksocket/DTLSSocket.md" + }, + { + "path": "docs/api/networksocket/SocketStats.md" + } + ] + }, + { + "title": "Network interfaces", + "intro": { + "path": "docs/api/networkinterfaces/networkinterface.md" + }, + "sources": [{ + "path": "docs/api/networkinterfaces/EthInterface.md" + }, + { + "path": "docs/api/networkinterfaces/WifiInterface.md" + }, + { + "path": "docs/api/networkinterfaces/CellularInterface.md" + }, + { + "path": "docs/api/networkinterfaces/MeshInterface.md" + }, + { + "path": "docs/api/networkinterfaces/NetworkStatus.md" + } + ] + }, + { + "title": "Bluetooth", + "intro": { + "path": "docs/api/bluetooth/bluetooth.md" + }, + "sources": [{ + "path": "docs/api/bluetooth/BLE.md" + }, + { + "path": "docs/api/bluetooth/Gap.md" + }, + { + "path": "docs/api/bluetooth/GattClient.md" + }, + { + "path": "docs/api/bluetooth/GattServer.md" + }, + { + "path": "docs/api/bluetooth/SecurityManager.md" + }, + { + "path": "docs/api/bluetooth/BatteryService.md" + }, + { + "path": "docs/api/bluetooth/HeartRateService.md" + }, + { + "path": "docs/api/bluetooth/iBeacon.md" + } + ] + }, + { + "title": "LoRaWAN", + "intro": { + "path": "docs/api/lorawan/lorawanintro.md" + }, + "sources": [{ + "path": "docs/api/lorawan/lorawan.md" + }, + { + "path": "docs/api/lorawan/loraradio.md" + } + ] + }, + { + "title": "NFC", + "intro": { + "path": "docs/api/nfc/NDEF.md" + }, + "sources": [{ + "path": "docs/api/nfc/NFCController.md" + }, + { + "path": "docs/api/nfc/NFCEEPROM.md" + }, + { + "path": "docs/api/nfc/MessageParser.md" + }, + { + "path": "docs/api/nfc/SimpleMessageParser.md" + }, + { + "path": "docs/api/nfc/MessageBuilder.md" + } + ] + }, + { + "title": "Security", + "intro": { + "path": "docs/api/security/security.md" + }, + "sources": [ { - "title": "Developing: Mbed Studio", - "sources": [ - { - "path": "docs/tools/Studio/mbed-studio.md" - } - ] + "path": "docs/api/security/psa_attestation.md" }, { - "title": "Developing: Mbed CLI", - "intro": { - "path": "docs/tools/CLI/cli.md" - }, - "sub_chapters": [ - { - "title": "Installation and setup", - "sources": [ - { - "path": "docs/tools/CLI/cli-setup/cli-setup.md" - }, - { - "path": "docs/tools/CLI/cli-setup/cli-reqs.md" - } - ] - }, - { - "title": "Working with Mbed CLI", - "sources": [ - { - "path": "docs/tools/CLI/cli-create.md" - }, - { - "path": "docs/tools/CLI/cli-compile.md" - }, - { - "path": "docs/tools/CLI/cli-device-management.md" - }, - { - "path": "docs/tools/CLI/cli-collaborate.md" - }, - { - "path": "docs/tools/CLI/cli-test-debug.md" - }, - { - "path": "docs/tools/CLI/build_profiles.md" - }, - { - "path": "docs/tools/CLI/debug_builds_cli.md" - } - ] - } - ] + "path": "docs/api/security/psa_crypto.md" }, { - "title": "Exporting", - "sub_chapters": [ - { - "title": "Exporting", - "intro": { - "path": "docs/tools/toolchains/export_to_third_party.md" - }, - "sources": [ - { - "path": "docs/tools/toolchains/exporters.md" - } - ] - } - ] + "path": "docs/api/security/psa_lifecycle.md" }, { - "title": "Debugging", - "sources": [ - { - "path": "docs/tools/debug/debug_intro.md" - }, - { - "path": "docs/tools/debug/debugging_mbed_os_apps.md" - }, - { - "path": "docs/tools/debug/local_debugging_toolchain.md" - }, - { - "path": "docs/tools/debug/memap.md" - }, - { - "path": "docs/tools/debug/DAP.md" - } - ] + "path": "docs/api/security/platform_service.md" + }, + { + "path": "docs/api/security/spm.md" }, { - "title": "Testing", - "sources": [ - { - "path": "docs/tools/testing/testing_intro.md" - }, - { - "path": "docs/tools/testing/unit_testing.md" - }, - { - "path": "docs/tools/testing/testing_greentea.md" - }, - { - "path": "docs/tools/testing/testing_icetea.md" - }, - { - "path": "docs/tools/testing/icetea.md" - }, - { - "path": "docs/tools/testing/utest.md" - }, - { - "path": "docs/tools/fastmodels/fastmodels.md" - } - ] + "path": "docs/api/security/TLS.md" + }, + { + "path": "docs/api/security/Devicekey.md" } - ], - "tags": [ - "tools" - ] - }, - { - "title": "Tutorials", - "description": "Learn about working with Mbed OS: getting started, developing applications, useful design patterns, debugging and optimisation techniques", - "slug": "tutorials", - "type": "markdown", - "chapters": [ + ] + }, + { + "title": "Storage", + "intro": { + "path": "docs/api/storage/storage.md" + }, + "sources": [ { - "title": "Overview", - "intro": { - "path": "docs/tutorials/tutorials_intro.md" - }, - "sources": [ - - ] + "path": "docs/api/storage/KVStoreAPI.md" }, { - "title": "Serial communication", - "sources": [ - { - "path": "docs/tutorials/serial/serial-overview.md" - }, - { - "path": "docs/tutorials/serial/serial_driver.md" - }, - { - "path": "docs/tutorials/serial/serial_communication.md" - } - ] + "path": "docs/api/storage/KVStoreGlobalAPI.md" }, { - "title": "Using APIs", - "sources": [ - { - "path": "docs/tutorials/using_apis/how_to_api.md" - }, - { - "path": "docs/tutorials/using_apis/events_tutorial.md" - }, - { - "path": "docs/tutorials/using_apis/flow_control.md" - }, - { - "path": "docs/tutorials/using_apis/connectivity/light-control.md" - }, - { - "path": "docs/tutorials/using_apis/ble_tutorial.md" - }, - { - "path": "docs/tutorials/using_apis/intro-to-lora.md" - } - ] + "path": "docs/api/storage/FileSystem.md" }, { - "title": "Debugging", - "sources": [ - { - "path": "docs/tutorials/debug/common_issues.md" - }, - { - "path": "docs/tutorials/debug/debug_fault_exception.md" - }, - { - "path": "docs/tutorials/run_and_compile_time_errors.md" - }, - { - "path": "docs/tutorials/debug/debug_with_printf.md" - }, - { - "path": "docs/tutorials/debug/eclipse_pyocd.md" - }, - { - "path": "docs/tutorials/debug/keil_uvision.md" - }, - { - "path": "docs/tutorials/debug/vs_code.md" - }, - { - "path": "docs/tutorials/debug/debug_microbit.md" - } - ] + "path": "docs/api/storage/Dir.md" }, { - "title": "Bootloader", - "sources": [ - { - "path": "docs/tutorials/bootloader.md" - } - ] + "path": "docs/api/storage/File.md" }, { - "title": "Optimizing", - "sources": [ - { - "path": "docs/tutorials/optimize/memory/memory_intro.md" - }, - { - "path": "docs/tutorials/optimize/memory/runtime_mem_trace.md" - }, - { - "path": "docs/tutorials/optimize/memory/runtime_stats.md" - } - ] + "path": "docs/api/storage/LittleFileSystem.md" }, { - "title": "Migrating to Mbed OS 5", - "intro": { - "path": "docs/tutorials/migrate-from-mbed-os-2-to-5.md" - }, - "sources": [ - - ] - } - ], - "tags": [ - "tutorials" - ] - }, - { - "title": "Contributing", - "description": "", - "slug": "contributing", - "type": "markdown", - "sources": [ + "path": "docs/api/storage/FATFileSystem.md" + }, { - "path": "docs/reference/contributing/guidelines/guidelines.md" + "path": "docs/api/storage/BlockDevice.md" }, { - "path": "docs/reference/contributing/guidelines/license.md" + "path": "docs/api/storage/HeapBlockDevice.md" }, { - "path": "docs/reference/contributing/guidelines/style.md" + "path": "docs/api/storage/MBRBlockDevice.md" }, { - "path": "docs/reference/contributing/guidelines/design_guidelines.md" + "path": "docs/api/storage/ChainingBlockDevice.md" }, { - "path": "docs/reference/contributing/guidelines/workflow.md" + "path": "docs/api/storage/SlicingBlockDevice.md" }, { - "path": "docs/reference/contributing/guidelines/ci.md" - } - ] - }, - { - "title": "Porting", - "description": "", - "slug": "porting", - "type": "markdown", - "chapters": [ + "path": "docs/api/storage/ProfilingBlockDevice.md" + }, { - "title": "Porting process", - "intro": { - "path": "docs/porting/porting_full_process/porting_start.md" - }, - "sub_chapters": [ - { - "title": "Setting up", - "sources": [ - { - "path": "docs/porting/porting_full_process/porting_reqs.md" - } - ] - }, - { - "title": "Porting", - "sources": [ - { - "path": "docs/porting/porting_full_process/porting.md" - } - ] - }, - { - "title": "Testing", - "sources": [ - { - "path": "docs/porting/porting_full_process/built_in_tests.md" - }, - { - "path": "docs/porting/porting_full_process/demo_testing.md" - } - ] - } - ] + "path": "docs/api/storage/BufferedBlockDevice.md" }, { - "title": "Porting targets", - "intro": { - "path": "docs/porting/target/target.md" - }, - "sources": [ - { - "path": "docs/porting/target/serial.md" - }, - { - "path": "docs/porting/target/lp_ticker.md" - }, - { - "path": "docs/porting/target/us_ticker.md" - }, - { - "path": "docs/porting/target/gpio.md" - }, - { - "path": "docs/porting/target/rtc.md" - }, - { - "path": "docs/porting/target/spi.md" - }, - { - "path": "docs/porting/target/QuadSPI.md" - }, - { - "path": "docs/porting/target/entropy.md" - }, - { - "path": "docs/porting/target/flash.md" - }, - { - "path": "docs/porting/target/bootloader.md" - }, - { - "path": "docs/porting/target/thread_porting.md" - }, - { - "path": "docs/porting/target/hw-accelerated-crypto.md" - }, - { - "path": "docs/porting/target/tickless.md" - }, - { - "path": "docs/porting/target/sleep.md" - }, - { - "path": "docs/porting/target/ResetReason.md" - }, - { - "path": "docs/porting/target/Watchdog.md" - }, - { - "path": "docs/porting/target/itm.md" - }, - { - "path": "docs/porting/target/mpu.md" - }, - { - "path": "docs/porting/target/usb.md" - }, - { - "path": "docs/porting/target/crc.md" - } - ] + "path": "docs/api/storage/FlashSimBlockDevice.md" }, { - "title": "Porting security", - "intro": { - "path": "docs/porting/psa/spm.md" - }, - "sources": [{ - "path": "docs/porting/psa/crypto.md" - }, - { - "path": "docs/porting/target/entropy.md" - }, - { - "path": "docs/porting/target/hw-accelerated-crypto.md" - } - ] + "path": "docs/api/storage/DataFlashBlockDevice.md" }, { - "title": "Porting storage", - "intro": { - "path": "docs/porting/storage/storage.md" - }, - "sources": [ - { - "path": "docs/porting/storage/BlockDevice.md" - } - ] + "path": "docs/api/storage/FlashIAPBlockDevice.md" }, { - "title": "Porting connectivity", - "intro": { - "path": "docs/porting/connectivity/connectivity.md" - }, - "sources": [ - { - "path": "docs/porting/connectivity/Layer3IP.md" - }, - { - "path": "docs/porting/connectivity/ethernet.md" - }, - { - "path": "docs/porting/connectivity/WifiInterface.md" - }, - { - "path": "docs/porting/connectivity/NetworkStack.md" - }, - { - "path": "docs/porting/connectivity/CellularInterface.md" - }, - { - "path": "docs/porting/connectivity/MeshInterface.md" - }, - { - "path": "docs/porting/connectivity/MeshMAC.md" - }, - { - "path": "docs/porting/connectivity/LoRaPortingGuide.md" - }, - { - "path": "docs/porting/connectivity/NFCEEPROMDriver.md" - } - ] + "path": "docs/api/storage/SDBlockDevice.md" }, { - "title": "Porting bootstrap", - "intro": { - "path": "docs/porting/target/bootstrap.md" - }, - "sources": [ - - ] + "path": "docs/api/storage/SPIFBlockDevice.md" }, { - "title": "Porting exporter targets", - "intro": { - "path": "docs/porting/target/exporter.md" - }, - "sources": [ - - ] + "path": "docs/api/storage/QSPIFBlockDevice.md" }, { - "title": "Porting tools", - "intro": { - "path": "docs/porting/tools/tools.md" - }, - "sources": [ - { - "path": "docs/porting/tools/build.md" - }, - { - "path": "docs/porting/tools/mbedls.md" - }, - { - "path": "docs/porting/tools/exporter.md" - }, - { - "path": "docs/porting/tools/hdk.md" - } - ] + "path": "docs/api/storage/NVStore.md" + }, + { + "path": "docs/api/storage/psa_internal_storage.md" + }, + { + "path": "docs/api/storage/psa_protected_storage.md" } ] - }, - { - "title": "Mbed OS and the Pelion IoT Platform", - "slug": "mbed-os-pelion", - "type": "markdown", - "description": "", - "chapters": [ - { - "title": "Introduction", - "intro": { - "path": "docs/pelion_ready/introduction_chip2cloud.md" - }, - "sources": [ + } +], +"tags": [ + "apis" + ] + }, + { + "title": "Reference", + "description": "The reference manual for Mbed OS: architecture, configuration and contribution details", + "slug": "reference", + "type": "markdown", + "chapters": [{ + "title": "Overview", + "intro": { + "path": "docs/reference/reference.md" + }, + "sources": [] + }, + { + "title": "Architecture", + "intro": { + "path": "docs/reference/technology/technology.md" + }, + "sub_chapters": [{ + "title": "Networking", + "sources": [{ + "path": "docs/reference/technology/connectivity/connectivity.md" + }, + { + "path": "docs/reference/technology/connectivity/networking.md" + }, + { + "path": "docs/reference/technology/connectivity/ethernet.md" + }, + { + "path": "docs/reference/technology/connectivity/wifi.md" + }, + { + "path": "docs/reference/technology/connectivity/cellular.md" + }, + { + "path": "docs/reference/technology/mesh/thread_intro.md" + }, + { + "path": "docs/reference/technology/mesh/thread_commissioning.md" + }, + { + "path": "docs/reference/technology/mesh/thread_faq.md" + }, + { + "path": "docs/reference/technology/mesh/wisun_intro.md" + }, + { + "path": "docs/reference/technology/mesh/quick_start_intro.md" + }, + { + "path": "docs/reference/technology/mesh/quick_start_hw.md" + }, + { + "path": "docs/reference/technology/mesh/02_N_arch.md" + }, + { + "path": "docs/reference/technology/mesh/04_N_networking.md" + }, + { + "path": "docs/reference/technology/connectivity/lora-tech.md" + }, + { + "path": "docs/reference/technology/connectivity/NFC.md" + }, + { + "path": "docs/reference/technology/connectivity/securesocket.md" + } + ] + }, + { + "title": "Technologies", + "sources": [{ + "path": "docs/reference/technology/non-stack.md" + }, + { + "path": "docs/reference/technology/firmware_update.md" + }, + { + "path": "docs/reference/technology/storage.md" + }, + { + "path": "docs/reference/technology/USB.md" + }, + { + "path": "docs/reference/runtime/Memory.md" + }, + { + "path": "docs/reference/runtime/static_memory_optimization.md" + } + ] + } + ] + }, + { + "title": "Mbed OS fundamentals", + "sources": [{ + "path": "docs/reference/runtime/Execution.md" + }, + { + "path": "docs/reference/runtime/Bootstrap.md" + }, + { + "path": "docs/reference/thread_safety.md" + } + ] + }, + { + "title": "Project structures and configuration", + "sub_chapters": [{ + "title": "Project structure", + "sources": [{ + "path": "docs/reference/project-structure.md" + }, + { + "path": "docs/reference/build_rules.md" + } + ] + }, + { + "title": "Configuration", + "intro": { + "path": "docs/reference/configuration/configuration.md" + }, + "sources": [{ + "path": "docs/reference/configuration/mbed_targets.md" + }, + { + "path": "docs/reference/configuration/Platform.md" + }, + { + "path": "docs/reference/configuration/Drivers.md" + }, + { + "path": "docs/reference/configuration/RTOS.md" + }, + { + "path": "docs/reference/configuration/Connectivity.md" + }, + { + "path": "docs/reference/configuration/mesh.md" + }, + { + "path": "docs/reference/configuration/BLE.md" + }, + { + "path": "docs/reference/configuration/lorawanconfig.md" + }, + { + "path": "docs/reference/configuration/Storage.md" + }, + { + "path": "docs/reference/configuration/bootloader.md" + } + ] + } + ] + } + ] + }, + { + "title": "Tools", + "description": "Details of the tools available for working with Mbed OS", + "slug": "tools", + "type": "markdown", + "chapters": [{ + "title": "Overview", + "intro": { + "path": "docs/tools/tools_intro.md" + }, + "sources": [] + }, + { + "title": "Developing: Mbed Online Compiler", + "sub_chapters": [{ + "title": "Getting started", + "intro": { + "path": "docs/tools/IDE/online_comp.md" + }, + "sources": [{ + "path": "docs/tools/IDE/oc_tut.md" + }, + { + "path": "docs/tools/IDE/compiler_publishing_code.md" + }, + { + "path": "docs/tools/IDE/updating_firmware.md" + } + ] + }, + { + "title": "Source control", + "sources": [{ + "path": "docs/tools/IDE/compiler_version_control.md" + }, + { + "path": "docs/tools/IDE/compiler_pull_requests.md" + }, + { + "path": "docs/tools/IDE/oc_pr_tut.md" + } + ] + }, + { + "title": "Collaborative work", + "sources": [ + + { + "path": "docs/tools/IDE/compiler_multiple_authors.md" + }, + + { + "path": "docs/tools/IDE/compiler_collab.md" + } + ] + }, + { + "title": "The Online Compiler reference", + "sources": [ + + { + "path": "docs/tools/IDE/ide_ref.md" + } + ] + } + ] + }, + { + "title": "Developing: Mbed Studio", + "sources": [{ + "path": "docs/tools/Studio/mbed-studio.md" + }] + }, + { + "title": "Developing: Mbed CLI", + "intro": { + "path": "docs/tools/CLI/cli.md" + }, + "sub_chapters": [{ + "title": "Installation and setup", + "sources": [{ + "path": "docs/tools/CLI/cli-setup/cli-setup.md" + }, + { + "path": "docs/tools/CLI/cli-setup/cli-reqs.md" + } + ] + }, + { + "title": "Working with Mbed CLI", + "sources": [{ + "path": "docs/tools/CLI/cli-create.md" + }, + { + "path": "docs/tools/CLI/cli-compile.md" + }, + { + "path": "docs/tools/CLI/cli-device-management.md" + }, + { + "path": "docs/tools/CLI/cli-collaborate.md" + }, + { + "path": "docs/tools/CLI/cli-test-debug.md" + }, + { + "path": "docs/tools/CLI/build_profiles.md" + }, + { + "path": "docs/tools/CLI/debug_builds_cli.md" + } + ] + } + ] + }, + { + "title": "Exporting", + "sub_chapters": [{ + "title": "Exporting", + "intro": { + "path": "docs/tools/toolchains/export_to_third_party.md" + }, + "sources": [{ + "path": "docs/tools/toolchains/exporters.md" + }] + }] + }, + { + "title": "Debugging", + "sources": [{ + "path": "docs/tools/debug/debug_intro.md" + }, + { + "path": "docs/tools/debug/debugging_mbed_os_apps.md" + }, + { + "path": "docs/tools/debug/local_debugging_toolchain.md" + }, + { + "path": "docs/tools/debug/memap.md" + }, + { + "path": "docs/tools/debug/DAP.md" + } + ] + }, + { + "title": "Testing", + "sources": [{ + "path": "docs/tools/testing/testing_intro.md" + }, + { + "path": "docs/tools/testing/unit_testing.md" + }, + { + "path": "docs/tools/testing/testing_greentea.md" + }, + { + "path": "docs/tools/testing/testing_icetea.md" + }, + { + "path": "docs/tools/testing/icetea.md" + }, + { + "path": "docs/tools/testing/utest.md" + }, + { + "path": "docs/tools/fastmodels/fastmodels.md" + } + ] + } + ], + "tags": [ + "tools" ] - }, - { - "title": "Device Management for Mbed OS", - "sources": [ - { - "path": "docs/pelion_ready/device-management.md" - }, - { - "path": "docs/pelion_ready/device-management-config.md" - }, - { - "path": "docs/pelion_ready/device-management-test.md" - } + }, + { + "title": "Tutorials", + "description": "Learn about working with Mbed OS: getting started, developing applications, useful design patterns, debugging and optimisation techniques", + "slug": "tutorials", + "type": "markdown", + "chapters": [{ + "title": "Overview", + "intro": { + "path": "docs/tutorials/tutorials_intro.md" + }, + "sources": [] + }, + { + "title": "Serial communication", + "sources": [{ + "path": "docs/tutorials/serial/serial-overview.md" + }, + { + "path": "docs/tutorials/serial/serial_driver.md" + }, + { + "path": "docs/tutorials/serial/serial_communication.md" + } + ] + }, + { + "title": "Using APIs", + "sources": [{ + "path": "docs/tutorials/using_apis/how_to_api.md" + }, + { + "path": "docs/tutorials/using_apis/events_tutorial.md" + }, + { + "path": "docs/tutorials/using_apis/flow_control.md" + }, + { + "path": "docs/tutorials/using_apis/Mbed_USB_WAV_Audio_Player/Mbed_USB_WAV_Audio_Player.md" + }, + { + "path": "docs/tutorials/using_apis/connectivity/light-control.md" + }, + { + "path": "docs/tutorials/using_apis/ble_tutorial.md" + }, + { + "path": "docs/tutorials/using_apis/intro-to-lora.md" + } + ] + }, + { + "title": "Debugging", + "sources": [{ + "path": "docs/tutorials/debug/common_issues.md" + }, + { + "path": "docs/tutorials/debug/debug_fault_exception.md" + }, + { + "path": "docs/tutorials/run_and_compile_time_errors.md" + }, + { + "path": "docs/tutorials/debug/debug_with_printf.md" + }, + { + "path": "docs/tutorials/debug/eclipse_pyocd.md" + }, + { + "path": "docs/tutorials/debug/keil_uvision.md" + }, + { + "path": "docs/tutorials/debug/vs_code.md" + }, + { + "path": "docs/tutorials/debug/debug_microbit.md" + } + ] + }, + { + "title": "Bootloader", + "sources": [{ + "path": "docs/tutorials/bootloader.md" + }] + }, + { + "title": "Optimizing", + "sources": [{ + "path": "docs/tutorials/optimize/memory/memory_intro.md" + }, + { + "path": "docs/tutorials/optimize/memory/runtime_mem_trace.md" + }, + { + "path": "docs/tutorials/optimize/memory/runtime_stats.md" + } + ] + }, + { + "title": "Migrating to Mbed OS 5", + "intro": { + "path": "docs/tutorials/migrate-from-mbed-os-2-to-5.md" + }, + "sources": [] + } + ], + "tags": [ + "tutorials" ] - }, - { - "title": "Integrating with Arm Treasure Data", - "intro": { - "path": "docs/tutorials/treasure_data.md" - }, - "sources": [ + }, + { + "title": "Contributing", + "description": "", + "slug": "contributing", + "type": "markdown", + "sources": [{ + "path": "docs/reference/contributing/guidelines/guidelines.md" + }, + { + "path": "docs/reference/contributing/guidelines/license.md" + }, + { + "path": "docs/reference/contributing/guidelines/style.md" + }, + { + "path": "docs/reference/contributing/guidelines/design_guidelines.md" + }, + { + "path": "docs/reference/contributing/guidelines/workflow.md" + }, + { + "path": "docs/reference/contributing/guidelines/ci.md" + } + ] + }, + { + "title": "Porting", + "description": "", + "slug": "porting", + "type": "markdown", + "chapters": [{ + "title": "Porting process", + "intro": { + "path": "docs/porting/porting_full_process/porting_start.md" + }, + "sub_chapters": [{ + "title": "Setting up", + "sources": [{ + "path": "docs/porting/porting_full_process/porting_reqs.md" + }] + }, + { + "title": "Porting", + "sources": [{ + "path": "docs/porting/porting_full_process/porting.md" + }] + }, + { + "title": "Testing", + "sources": [{ + "path": "docs/porting/porting_full_process/built_in_tests.md" + }, + { + "path": "docs/porting/porting_full_process/demo_testing.md" + } + ] + } + ] + }, + { + "title": "Porting targets", + "intro": { + "path": "docs/porting/target/target.md" + }, + "sources": [{ + "path": "docs/porting/target/serial.md" + }, + { + "path": "docs/porting/target/lp_ticker.md" + }, + { + "path": "docs/porting/target/us_ticker.md" + }, + { + "path": "docs/porting/target/gpio.md" + }, + { + "path": "docs/porting/target/rtc.md" + }, + { + "path": "docs/porting/target/spi.md" + }, + { + "path": "docs/porting/target/QuadSPI.md" + }, + { + "path": "docs/porting/target/flash.md" + }, + { + "path": "docs/porting/target/bootloader.md" + }, + { + "path": "docs/porting/target/thread_porting.md" + }, + { + "path": "docs/porting/target/tickless.md" + }, + { + "path": "docs/porting/target/sleep.md" + }, + { + "path": "docs/porting/target/ResetReason.md" + }, + { + "path": "docs/porting/target/Watchdog.md" + }, + { + "path": "docs/porting/target/itm.md" + }, + { + "path": "docs/porting/target/mpu.md" + }, + { + "path": "docs/porting/target/usb.md" + }, + { + "path": "docs/porting/target/crc.md" + } + ] + }, + { + "title": "Porting security", + "intro": { + "path": "docs/porting/psa/spm.md" + }, + "sources": [{ + "path": "docs/porting/psa/crypto.md" + }, + { + "path": "docs/porting/target/entropy.md" + }, + { + "path": "docs/porting/target/hw-accelerated-crypto.md" + } + ] + }, + { + "title": "Porting storage", + "intro": { + "path": "docs/porting/storage/storage.md" + }, + "sources": [{ + "path": "docs/porting/storage/BlockDevice.md" + }] + }, + { + "title": "Porting connectivity", + "intro": { + "path": "docs/porting/connectivity/connectivity.md" + }, + "sources": [{ + "path": "docs/porting/connectivity/Layer3IP.md" + }, + { + "path": "docs/porting/connectivity/ethernet.md" + }, + { + "path": "docs/porting/connectivity/WifiInterface.md" + }, + { + "path": "docs/porting/connectivity/NetworkStack.md" + }, + { + "path": "docs/porting/connectivity/CellularInterface.md" + }, + { + "path": "docs/porting/connectivity/MeshInterface.md" + }, + { + "path": "docs/porting/connectivity/MeshMAC.md" + }, + { + "path": "docs/porting/connectivity/LoRaPortingGuide.md" + }, + { + "path": "docs/porting/connectivity/NFCEEPROMDriver.md" + } + ] + }, + { + "title": "Porting bootstrap", + "intro": { + "path": "docs/porting/target/bootstrap.md" + }, + "sources": [] + }, + { + "title": "Porting exporter targets", + "intro": { + "path": "docs/porting/target/exporter.md" + }, + "sources": [] + }, + { + "title": "Porting tools", + "intro": { + "path": "docs/porting/tools/tools.md" + }, + "sources": [{ + "path": "docs/porting/tools/build.md" + }, + { + "path": "docs/porting/tools/mbedls.md" + }, + { + "path": "docs/porting/tools/exporter.md" + }, + { + "path": "docs/porting/tools/hdk.md" + } + ] + } ] - }, - { - "title": "Going to production", - "sub_chapters": [ + }, + { + "title": "Mbed OS and the Pelion IoT Platform", + "slug": "mbed-os-pelion", + "type": "markdown", + "description": "", + "chapters": [ { "title": "Introduction", "intro": { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/intro.md" + "path": "docs/pelion_ready/introduction_chip2cloud.md" }, - "sources": [ - - ] - }, - { - "title": "Stage 1: Evaluation", - "sources": [ - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage1.md" - } - ] - }, - { - "title": "Stage 2: Proof of concept", - "intro": { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/intro_s_2.md" + "sources": [] + }, + { + "title": "Device Management for Mbed OS", + "sources": [{ + "path": "docs/pelion_ready/device-management.md" + }, + { + "path": "docs/pelion_ready/device-management-config.md" + }, + { + "path": "docs/pelion_ready/device-management-test.md" + } + ] }, - "sources": [ - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/1_hardware.md" - }, - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/3_connectivity.md" - }, - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/2_software.md" - }, - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/4_security.md" - }, - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage_2/6_example.md" - } - ] - }, - { - "title": "Stage 3: Prototype", - "sources": [ - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage3.md" - } - ] - }, - { - "title": "Stage 4: Pilot", - "sources": [ - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage4.md" - } - ] - }, - { - "title": "Stage 5: Production", - "sources": [ - { - "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.11/FE2P/stage5.md" - } - ] - } + { + "title": "Integrating with Arm Treasure Data", + "intro": { + "path": "docs/tutorials/treasure_data.md" + }, + "sources": [] + }, + { + "title": "Going to production", + "sub_chapters": [{ + "title": "Introduction", + "intro": { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/intro.md" + }, + "sources": [] + }, + { + "title": "Stage 1: Evaluation", + "sources": [{ + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage1.md" + }] + }, + { + "title": "Stage 2: Proof of concept", + "intro": { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/intro_s_2.md" + }, + "sources": [{ + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/1_hardware.md" + }, + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/3_connectivity.md" + }, + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/2_software.md" + }, + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/4_security.md" + }, + { + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage_2/6_example.md" + } + + ] + }, + { + "title": "Stage 3: Prototype", + "sources": [{ + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage3.md" + }] + }, + { + "title": "Stage 4: Pilot", + "sources": [{ + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage4.md" + }] + }, + { + "title": "Stage 5: Production", + "sources": [{ + "url": "https://github.com/ARMmbed/evaluation-to-production/blob/5.12/FE2P/stage5.md" + }] + } + ] + } + ] - } - ] - }, - { - "title": "feature-hal-spec-usb-device doxygen", - "description": "The full mbed OS API documentation in doxygen format", - "slug": "feature-hal-spec-usb-device-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "feature-hal-spec-usb-device" - }, - { - "title": "feature-hal-spec-sai doxygen", - "description": "The full mbed OS API documentation in doxygen format", - "slug": "feature-hal-spec-sai-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "feature-hal-spec-sai" - }, - { - "title": "feature-hal-spec-spi doxygen", - "description": "The full mbed OS API documentation in doxygen format", - "slug": "feature-hal-spec-spi-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "feature-hal-spec-spi" - }, - { - "title": "feature-hal-spec-watchdog doxygen", - "description": "The full mbed OS API documentation in doxygen format", - "slug": "feature-hal-spec-watchdog-doxy", - "hidden": true, - "type": "doxygen", - "source": "https://github.com/ARMmbed/mbed-os", - "branch": "feature-watchdog" - } + }, + { + "title": "feature-hal-spec-usb-device doxygen", + "description": "The full mbed OS API documentation in doxygen format", + "slug": "feature-hal-spec-usb-device-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "feature-hal-spec-usb-device" + }, + { + "title": "feature-hal-spec-sai doxygen", + "description": "The full mbed OS API documentation in doxygen format", + "slug": "feature-hal-spec-sai-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "feature-hal-spec-sai" + }, + { + "title": "feature-hal-spec-spi doxygen", + "description": "The full mbed OS API documentation in doxygen format", + "slug": "feature-hal-spec-spi-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "feature-hal-spec-spi" + }, + { + "title": "feature-hal-spec-watchdog doxygen", + "description": "The full mbed OS API documentation in doxygen format", + "slug": "feature-hal-spec-watchdog-doxy", + "hidden": true, + "type": "doxygen", + "source": "https://github.com/ARMmbed/mbed-os", + "branch": "feature-watchdog" + } ] From 682381ecafbc207e66e255f6fb9698da32816563 Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 18:16:49 +0200 Subject: [PATCH 41/42] Update docs.json --- docs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs.json b/docs.json index 6e3ec5c624..0ac169c83e 100644 --- a/docs.json +++ b/docs.json @@ -522,7 +522,7 @@ "path": "docs/api/security/psa_attestation.md" }, { - "path": "docs/api/security/psa_crypto.md" + "path": "docs/api/security/crypto.md" }, { "path": "docs/api/security/psa_lifecycle.md" From ced16a67c72178d54e0ddf457b2cccf3e3c54f8e Mon Sep 17 00:00:00 2001 From: Guy Wild Date: Thu, 7 Mar 2019 18:27:55 +0200 Subject: [PATCH 42/42] Update platform_service.md --- docs/api/security/platform_service.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/security/platform_service.md b/docs/api/security/platform_service.md index 9a9e4dcceb..a88a889cb0 100644 --- a/docs/api/security/platform_service.md +++ b/docs/api/security/platform_service.md @@ -6,4 +6,4 @@ The System Reset API enables a Non-Secure Processing Environment (NSPE) to reque ### Platform service class reference -[![View code](https://www.mbed.com/embed/?type=library)](../mbed-os-api-doxy/lifecycle_8h.html) +[![View code](https://www.mbed.com/embed/?type=library)](https://os.mbed.com/docs/development/mbed-os-api-doxy/lifecycle_8h.html)