.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0

Architecture
============

.. note::
   * This section is used to describe a software component from a high level
     view of capability, common usage scenarios, and interactions with other
     components required in the usage scenarios.  
   
   * The architecture section is typically: provided in a platform-component
     and sdk collections; and referenced from developer and user guides.
   
   * This note must be removed after content has been added.


Capabilities
------------


Usage Scenarios
---------------


Interactions
------------
