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


Release Notes
=============

.. note::
	* This Release Notes must be updated each time the team decides to Release new artifacts.
	* The scope of this Release Notes is for this particular component. In other words, each ONAP component has its Release Notes.
	* This Release Notes is cumulative, the most recently Released artifact is made visible in the top of this Release Notes.
	* Except the date and the version number, all the other sections are optional but there must be at least one section describing the purpose of this new release.
	* This note must be removed after content has been added.


Version: x.y.z
--------------


:Release Date: yyyy-mm-dd



**New Features**

One or two sentences explaining the purpose of this Release.

**Bug Fixes**
	- `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining what this defect is addressing.
**Known Issues**
	- `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two, three sentences.
	  One sentences explaining what is the issue.
	  
	  Another sentence explaining the impact of the issue.
	  
	  And an optional sentence providing a workaround.

**Security Issues**
	You may want to include a reference to CVE (Common Vulnerabilities and Exposures) `CVE <https://cve.mitre.org>`_


**Upgrade Notes**

**Deprecation Notes**

**Other**

===========

End of Release Notes
