### v0.7.6
* Upgraded to RMR 4.7.4 and some improvements 

### v0.7.5
* Open RMR connection in a a new thread

### v0.7.4
* Overwrite duplicate E2T address instead of sending error to E2Manager

### v0.7.3
* Upgraded to RMR v4.5.2

### v0.7.1
* Upgraded to RMR v4.4.4

### v0.6.10
* Code violations fixed in pkg/nbi/httprestful.go

### v0.6.9
* Code violations fixed in pkg/nbi/httprestful.go and pkg/nbi/control.go

### v0.6.8
* Appending Receiver endpoint in routes if RX message type is same

### v0.6.7
* Publish Route only once to the endpoint that requests it. Periodic/Event based distribution will be done only for the process with RMR Control Port 4561.

### v0.6.5
* Removed Book Keeping of RMR CTL ports. Route Distribution on demand.

### v0.6.4
* Creating dymanic endpoints(Eps) and distributing routes to those endpoints on  upgrade route table request from xApp (this is fixed part MCxapp distribution issue for multiple route ports)

### v0.6.3
* [RIC-369] Routing manager needs to support for xApps that terminate other protocols than E2 

### v0.6.2
* Distribution of routes is synchronous. 

### v0.6.1
* Updating xapp_fwk to v0.4.15, that contains RIC_HEALTH_CHECK message types

### v0.6.0
* Updating RMR version to 4.0.5 

### v0.5.9
* Updating to xapp frw v0.4.10, for dcap to adxapp new message type

### v0.5.8
* Updating to RMR version 4.0.2

### v0.5.7-3
* Updating to RMR version 3.8.2

### v0.5.7-2
* Supporting of reading subscriptions from subscription manager while restarting rtmgr

### v0.5.7-1
* Increased http client timeout to 15sec 

### v0.5.7
* Commented subscription list retrieval during rtmgr startUp 

### v0.5.6-2
* RT records are sent in a group rather than individually. Group is configurabl 

### v0.5.6-1
* Moving to ubuntu 18 and fixing UT's

### v0.5.6
* Fix to convert service name to IP during Route update Request

### v0.5.5
* Supporting xApp to xApp Routes handling 

### v0.5.3
* RMR updated to v3.6.0 with support for E2 Setup message types

### v0.5.2
* Switch to RMR Si95 mode 

### v0.5.1
* Removal of go mangoes and using RMR nng

### v0.4.16
* getAllSubscriptions API (RM -> SM) during restart of routing manager handled

### v0.4.15
* Retained (E2M->E2T issue) - retrying when is_Ready flag in socket handle is false 

### v0.4.14
* Restart/Start of RM, fetch E2T data from E2manager - implementation in RM for v1/e2t/list API handling 

### v0.4.13
* Corrected route table syntax in case of broadcast message 

### v0.4.12
* Added debug API to request route and configuration details in routing manager 

### v0.4.11
* Added code for subscription merge and added RMR from xapp-framework 

### v0.4.10
* Temporary Fix for R3 (E2M->E2T issue) - retrying when is_Ready flag in socket handle is false 

### v0.4.8
* Entry in meid map will only contain the delta change 

### v0.4.7
* Check DNS lookup for E2T address, RED Button and KEEP alive message routes added for new E2T Address 

### v0.4.6
* Static platform routes can be configured via configuration file

### v0.4.5
* Multiple E2T instance Feature: Introduced APIs Delete E2T Instance, associate RANs to E2T and disassociate RANs from E2T Instance.

### v0.4.4
* Create E2T Instance API introduced for Multiple E2T Feature

### v0.4.3
* Included RMR changes that has MEID implementation

### v0.4.2
* Added Routes when AC-xApp is deployed 
* included xapp-framework. Using only config and Logger module for now.

### v0.4.1
* Fixed integration and subscription routes related issues for R3

### v0.3.9
* Added RSM platform component routes for message types RAN_CONNECTED, RAN_RESTARTED, RAN_RECONFIGURED, RIC_RES_STATUS_REQ,RIC_RES_STATUS_RESP and RIC_RES_STATUS_FAILURE
* xApp manager interface changes for Subscription Request API

### v0.3.8
* Adding docs and updating release notes for routing manager

### v0.3.7
* Fix routes for RIC_ENDC_X2_SETUP_REQ, RIC_ENDC_X2_SETUP_RESP and RIC_ENDC_X2_SETUP_FAILURE

### v0.3.6
* Routing Manager is more resilient to missing components
* Put in order the message types

### v0.3.5
* Added platform route to send RIC_SCTP_CLEAR_ALL message to implement big red button.
* Added E2_TERM_INIT and RIC_SCTP_CONNECTION_FAILURE message type routes.

### v0.3.4
* The following tools made available in the final docker image: iputils-ping, net-tools, curl and tcpdump

### v0.3.3
* Introduced delete API over REST interface for subscriptions.

### v0.3.2
* Minor code changes due to appmgr/rtmgr api differences
* Doc update
* UT fixes 

### v0.3.1
* Removed "rte" route types and made all routes to construct of "mse" literal. 

### v0.3.0
* Introduced platform-specific routes: basic components (e2term, ueman, subman, e2man) are stored in a json file (example in manifests/rtmgr/rtmgr-cfg.yaml)
* Introduced subscription add functionality: /ric/v1/xapp-subscriptions endpoint is active, on a POST method it generates endpoint specific mse routing table entries

### v0.2.0
* Introduced http rest functionality
* A way to get intial xapp data from xapp manager while booting the routing manager
* A way to create a sinple webhook registration in the xapp-manager to listen on updates abpout changes in xapps

### v0.1.1
* Changes in swagger API definition
* UTs for SBI, SDL and RPE modules
* New message types according to RMR

### v0.1.0
* Introduces NNGPush SBI module
* Bugfixes in argument handling
* different RMR policy generator for Push and Pub communication

### v0.0.3
* RMR Policy Engine has been refactored to handle receiving groups properly
* Debugging feature has been added
* Multi level logging
* A complex JSON file has been added to xApp Manager to test new behavior

### v0.0.2
* RTMGR (Routing Manager) implementation in Golang 
* Updated project folder structure
* Integration manifests

### v0.0.1
* Initial version of Routing Manager for CI/CD pipeline 
* Dummy solution: still has no real routing capability
* Container is based on the _**tx**_ version of [admin xApp] which already implements [RMR library]
