commit 6ebd23888e0356630f188ec10d3f6c06ae8fbf0b
Author: Thomas Schöpping <tschoepp@cit-ec.uni-bielefeld.de>
Date:   Fri Oct 5 16:29:15 2018 +0200

    Initial documentation of the µRtWare project.

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..faffb5f
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,42 @@
+################################################################################
+# µRtWare is a lightweight publish/subscribe middleware for real-time          #
+# applications. It was developed as part of the software habitat for the       #
+# Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as      #
+# well.                                                                        #
+# Copyright (C) 2018..2018  Thomas Schöpping et al.                            #
+#                                                                              #
+# This program is free software: you can redistribute it and/or modify         #
+# it under the terms of the GNU General Public License as published by         #
+# the Free Software Foundation, either version 3 of the License, or            #
+# (at your option) any later version.                                          #
+#                                                                              #
+# This program is distributed in the hope that it will be useful,              #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of               #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
+# GNU General Public License for more details.                                 #
+#                                                                              #
+# You should have received a copy of the GNU General Public License            #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.        #
+#                                                                              #
+# This research/work was supported by the Cluster of Excellence Cognitive      #
+# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is   #
+# funded by the German Research Foundation (DFG).                              #
+################################################################################
+
+
+
+# absolute path to this directory
+URTWARE_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
+
+# include paths
+URTWARE_INC = $(URTWARE_DIR:/=) \
+              $(URTWARE_DIR)inc
+
+URTWARE_SRCDIR = $(URTWARE_DIR)src
+
+# C sources
+URTWARE_CSRC =
+
+# C++ sources
+URTWARE_CPPSRC =
+
diff --git a/doc/classdiagrams/overview.svg b/doc/classdiagrams/overview.svg
new file mode 100644
index 0000000..39acc3b
--- /dev/null
+++ b/doc/classdiagrams/overview.svg
@@ -0,0 +1,403 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1800px" preserveAspectRatio="none" style="width:8149px;height:1800px;" version="1.1" viewBox="0 0 8149 1800" width="8149px" zoomAndPan="magnify"><defs><filter height="300%" id="fx5q9amszycal" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="4002.5" y="16.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="87" x="4003.5" y="37.6611">Overview</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="4050" y="58.6143"/><!--cluster primitives--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="318.921,1463.8594,401.921,1463.8594,408.921,1486.1563,796.921,1486.1563,796.921,1656.8594,318.921,1656.8594,318.921,1463.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="318.921" x2="408.921" y1="1486.1563" y2="1486.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="77" x="322.921" y="1478.8545">primitives</text><!--cluster interfaces--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="3543.92,899.8594,3629.92,899.8594,3636.92,922.1563,7980.92,922.1563,7980.92,1788.8594,3543.92,1788.8594,3543.92,899.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="3543.92" x2="3636.92" y1="922.1563" y2="922.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="80" x="3547.92" y="914.8545">interfaces</text><!--cluster condition variable--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="4353.92,1123.8594,4499.92,1123.8594,4506.92,1146.1563,5057.92,1146.1563,5057.92,1628.8594,4353.92,1628.8594,4353.92,1123.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="4353.92" x2="4506.92" y1="1146.1563" y2="1146.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="140" x="4357.92" y="1138.8545">condition variable</text><!--cluster timer--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="3567.92,1123.8594,3614.92,1123.8594,3621.92,1146.1563,4329.92,1146.1563,4329.92,1616.3594,3567.92,1616.3594,3567.92,1123.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="3567.92" x2="3621.92" y1="1146.1563" y2="1146.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="41" x="3571.92" y="1138.8545">timer</text><!--cluster thread--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="5081.92,942.8594,5139.92,942.8594,5146.92,965.1563,5827.92,965.1563,5827.92,1622.8594,5081.92,1622.8594,5081.92,942.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="5081.92" x2="5146.92" y1="965.1563" y2="965.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="52" x="5085.92" y="957.8545">thread</text><!--cluster events--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="5851.92,1130.3594,5911.92,1130.3594,5918.92,1152.6563,7352.92,1152.6563,7352.92,1764.8594,5851.92,1764.8594,5851.92,1130.3594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="5851.92" x2="5918.92" y1="1152.6563" y2="1152.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="54" x="5855.92" y="1145.3545">events</text><!--cluster middleware--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="717.921,86.8594,815.921,86.8594,822.921,109.1563,3519.92,109.1563,3519.92,1304.3594,717.921,1304.3594,717.921,86.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="717.921" x2="822.921" y1="109.1563" y2="109.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="92" x="721.921" y="101.8545">middleware</text><!--cluster real-time class--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="741.921,469.3594,862.921,469.3594,869.921,491.6563,1726.92,491.6563,1726.92,1280.3594,741.921,1280.3594,741.921,469.3594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="741.921" x2="869.921" y1="491.6563" y2="491.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="115" x="745.921" y="484.3545">real-time class</text><!--cluster node--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="2366.92,734.8594,2412.92,734.8594,2419.92,757.1563,3427.92,757.1563,3427.92,846.8594,2366.92,846.8594,2366.92,734.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="2366.92" x2="2419.92" y1="757.1563" y2="757.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="40" x="2370.92" y="749.8545">node</text><!--class urt_delay_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_delay_t" style="stroke: #A80036; stroke-width: 1.5;" width="100" x="680.921" y="1520.3594"/><ellipse cx="695.921" cy="1536.3594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M696.7648,1543.1094 L694.3116,1543.1094 L694.3116,1532.8594 L691.171,1532.8594 L691.171,1530.7188 L699.9054,1530.7188 L699.9054,1532.8594 L696.7648,1532.8594 L696.7648,1543.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="68" x="709.921" y="1540.5137">urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="681.921" x2="779.921" y1="1552.3594" y2="1552.3594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="686.921" y="1583.3745">uint32_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="681.921" x2="714.421" y1="1566.7617" y2="1566.7617"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="714.421" y="1570.0698">either</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="747.421" x2="779.921" y1="1566.7617" y2="1566.7617"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="686.921" y="1612.9839">uint64_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="681.921" x2="724.921" y1="1596.3711" y2="1596.3711"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="12" x="724.921" y="1599.6792">or</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="736.921" x2="779.921" y1="1596.3711" y2="1596.3711"/><!--class urt_status_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_status_t" style="stroke: #A80036; stroke-width: 1.5;" width="166" x="479.921" y="1526.8594"/><ellipse cx="521.471" cy="1542.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M525.5804,1548.8594 L517.8616,1548.8594 L517.8616,1536.4688 L525.5804,1536.4688 L525.5804,1538.625 L520.3148,1538.625 L520.3148,1541.2969 L525.0804,1541.2969 L525.0804,1543.4531 L520.3148,1543.4531 L520.3148,1546.7031 L525.5804,1546.7031 L525.5804,1548.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="75" x="541.371" y="1547.0137">urt_status_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="480.921" x2="644.921" y1="1558.8594" y2="1558.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="119" x="485.921" y="1573.0698">URT_STATUS_OK = 0</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="154" x="485.921" y="1585.8745">URT_STATUS_WARNING = 1</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="144" x="485.921" y="1598.6792">URT_STATUS_ERROR = -1</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="480.921" x2="644.921" y1="1605.2734" y2="1605.2734"/><!--class urt_topicid_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="141.6328" id="urt_topicid_t" style="stroke: #A80036; stroke-width: 1.5;" width="109" x="335.421" y="1498.8594"/><ellipse cx="350.421" cy="1514.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M351.2648,1521.6094 L348.8116,1521.6094 L348.8116,1511.3594 L345.671,1511.3594 L345.671,1509.2188 L354.4054,1509.2188 L354.4054,1511.3594 L351.2648,1511.3594 L351.2648,1521.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="77" x="364.421" y="1519.0137">urt_topicid_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="336.421" x2="443.421" y1="1530.8594" y2="1530.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="341.421" y="1545.0698">uin8_t</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="341.421" y="1574.6792">uint16_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="336.421" x2="383.921" y1="1558.0664" y2="1558.0664"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="12" x="383.921" y="1561.3745">or</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="395.921" x2="443.421" y1="1558.0664" y2="1558.0664"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="341.421" y="1604.2886">uint32_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="336.421" x2="383.921" y1="1587.6758" y2="1587.6758"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="12" x="383.921" y="1590.9839">or</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="395.921" x2="443.421" y1="1587.6758" y2="1587.6758"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="341.421" y="1633.8979">uint64_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="336.421" x2="383.921" y1="1617.2852" y2="1617.2852"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="12" x="383.921" y="1620.5933">or</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="395.921" x2="443.421" y1="1617.2852" y2="1617.2852"/><!--class urt_osTime_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_osTime_t" style="stroke: #A80036; stroke-width: 1.5;" width="257" x="7707.42" y="1532.8594"/><ellipse cx="7792.17" cy="1548.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M7793.0138,1555.6094 L7790.5606,1555.6094 L7790.5606,1545.3594 L7787.42,1545.3594 L7787.42,1543.2188 L7796.1544,1543.2188 L7796.1544,1545.3594 L7793.0138,1545.3594 L7793.0138,1555.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="79" x="7812.67" y="1553.0137">urt_osTime_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7708.42" x2="7963.42" y1="1564.8594" y2="1564.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7708.42" x2="7963.42" y1="1572.8594" y2="1572.8594"/><ellipse cx="7718.42" cy="1584.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="231" x="7727.42" y="1587.0698">urtTime2Us (t : urt_osTime_t*) : uint64_t</text><ellipse cx="7718.42" cy="1597.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="189" x="7727.42" y="1599.8745">urtTimeNow (void) : urt_osTime_t</text><!--class urt_osMutex_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_osMutex_t" style="stroke: #A80036; stroke-width: 1.5;" width="300" x="7371.92" y="1520.3594"/><ellipse cx="7474.17" cy="1536.3594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M7475.0138,1543.1094 L7472.5606,1543.1094 L7472.5606,1532.8594 L7469.42,1532.8594 L7469.42,1530.7188 L7478.1544,1530.7188 L7478.1544,1532.8594 L7475.0138,1532.8594 L7475.0138,1543.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="7494.67" y="1540.5137">urt_osMutex_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7372.92" x2="7670.92" y1="1552.3594" y2="1552.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7372.92" x2="7670.92" y1="1560.3594" y2="1560.3594"/><ellipse cx="7382.92" cy="1572.2617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="247" x="7391.92" y="1574.5698">urtMutexInit (mutex : urt_osmutex_t*) : void</text><ellipse cx="7382.92" cy="1585.0664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="255" x="7391.92" y="1587.3745">urtMutexLock (mutex : urt_osmutex_t*) : void</text><ellipse cx="7382.92" cy="1597.8711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="274" x="7391.92" y="1600.1792">urtMutexTryLock (mutex : urt_osmutex_t*) : bool</text><ellipse cx="7382.92" cy="1610.6758" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="267" x="7391.92" y="1612.9839">urtMutexUnlock (mutex : urt_osmutex_t*) : void</text><!--class urt_condvarStatus_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_condvarStatus_t" style="stroke: #A80036; stroke-width: 1.5;" width="258" x="4576.92" y="1526.8594"/><ellipse cx="4638.67" cy="1542.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M4642.7794,1548.8594 L4635.0606,1548.8594 L4635.0606,1536.4688 L4642.7794,1536.4688 L4642.7794,1538.625 L4637.5138,1538.625 L4637.5138,1541.2969 L4642.2794,1541.2969 L4642.2794,1543.4531 L4637.5138,1543.4531 L4637.5138,1546.7031 L4642.7794,1546.7031 L4642.7794,1548.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="126" x="4659.17" y="1547.0137">urt_condvarStatus_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="4577.92" x2="4833.92" y1="1558.8594" y2="1558.8594"/><ellipse cx="4587.92" cy="1570.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="204" x="4596.92" y="1573.0698">URT_CONDVAR_STATUS_SIGNAL = 0</text><ellipse cx="4587.92" cy="1583.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="232" x="4596.92" y="1585.8745">URT_CONDVAR_STATUS_BROADCAST = 1</text><ellipse cx="4587.92" cy="1596.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="213" x="4596.92" y="1598.6792">URT_CONDVAR_STATUS_TIMEOUT = 2</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="4577.92" x2="4833.92" y1="1605.2734" y2="1605.2734"/><!--class urt_osCondvar_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_osCondvar_t" style="stroke: #A80036; stroke-width: 1.5;" width="671" x="4370.42" y="1158.8594"/><ellipse cx="4651.17" cy="1174.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M4652.0138,1181.6094 L4649.5606,1181.6094 L4649.5606,1171.3594 L4646.42,1171.3594 L4646.42,1169.2188 L4655.1544,1169.2188 L4655.1544,1171.3594 L4652.0138,1171.3594 L4652.0138,1181.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="101" x="4671.67" y="1179.0137">urt_osCondvar_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="4371.42" x2="5040.42" y1="1190.8594" y2="1190.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="4371.42" x2="5040.42" y1="1198.8594" y2="1198.8594"/><ellipse cx="4381.42" cy="1210.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="283" x="4390.42" y="1213.0698">urtCondvarInit (condvar : urt_osCondvar_t*) : void</text><ellipse cx="4381.42" cy="1223.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="294" x="4390.42" y="1225.8745">urtConvarSignal (condvar : urt_osCondvar_t*) : void</text><ellipse cx="4381.42" cy="1236.3711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="324" x="4390.42" y="1238.6792">urtCondvarBroadcast (condvar : urt_osCondvar_t*) : void</text><ellipse cx="4381.42" cy="1249.1758" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="645" x="4390.42" y="1251.4839">urtCondvarWait (condvar : urt_osCondvar_t*, mutex : urt_osMutex_t*, timeout : urt_delay_t) : urt_condvarStatus_t</text><!--class urt_osTimerCallback_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="60.8047" id="urt_osTimerCallback_t" style="stroke: #A80036; stroke-width: 1.5;" width="286" x="3694.92" y="1539.3594"/><ellipse cx="3765.67" cy="1555.3594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3766.5138,1562.1094 L3764.0606,1562.1094 L3764.0606,1551.8594 L3760.92,1551.8594 L3760.92,1549.7188 L3769.6544,1549.7188 L3769.6544,1551.8594 L3766.5138,1551.8594 L3766.5138,1562.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="136" x="3786.17" y="1559.5137">urt_osTimerCallback_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3695.92" x2="3979.92" y1="1571.3594" y2="1571.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3695.92" x2="3979.92" y1="1579.3594" y2="1579.3594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="274" x="3700.92" y="1593.5698">urt_osTimerCallback_t (parameter : void*) : void</text><!--class urt_osTimer_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_osTimer_t" style="stroke: #A80036; stroke-width: 1.5;" width="731" x="3583.42" y="1158.8594"/><ellipse cx="3902.67" cy="1174.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3903.5138,1181.6094 L3901.0606,1181.6094 L3901.0606,1171.3594 L3897.92,1171.3594 L3897.92,1169.2188 L3906.6544,1169.2188 L3906.6544,1171.3594 L3903.5138,1171.3594 L3903.5138,1181.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="84" x="3923.17" y="1179.0137">urt_osTimer_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3584.42" x2="4313.42" y1="1190.8594" y2="1190.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3584.42" x2="4313.42" y1="1198.8594" y2="1198.8594"/><ellipse cx="3594.42" cy="1210.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="240" x="3603.42" y="1213.0698">urtTimerInit (timer : urt_osTimer_t*) : void</text><ellipse cx="3594.42" cy="1223.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="705" x="3603.42" y="1225.8745">urtTimerSet (timer : urt_osTimer_t*, delay : urt_delay_t, callback : urt_osTimerCallback_t*, parameter : void*) : urt_status_t</text><ellipse cx="3594.42" cy="1236.3711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="300" x="3603.42" y="1238.6792">urtTimerReset (timer : urt_osTimer_t*) : urt_status_t</text><ellipse cx="3594.42" cy="1249.1758" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="254" x="3603.42" y="1251.4839">urtTimerIsArmed (timer : urt_timer_t*) : bool</text><!--class urt_osThreadPrio_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="48" id="urt_osThreadPrio_t" style="stroke: #A80036; stroke-width: 1.5;" width="150" x="5097.92" y="1545.8594"/><ellipse cx="5112.92" cy="1561.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M5113.7638,1568.6094 L5111.3106,1568.6094 L5111.3106,1558.3594 L5108.17,1558.3594 L5108.17,1556.2188 L5116.9044,1556.2188 L5116.9044,1558.3594 L5113.7638,1558.3594 L5113.7638,1568.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="5126.92" y="1566.0137">urt_osThreadPrio_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5098.92" x2="5246.92" y1="1577.8594" y2="1577.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="5098.92" x2="5246.92" y1="1585.8594" y2="1585.8594"/><!--class urt_osThreadFunction_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="60.8047" id="urt_osThreadFunction_t" style="stroke: #A80036; stroke-width: 1.5;" width="252" x="5282.92" y="1539.3594"/><ellipse cx="5330.67" cy="1555.3594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M5331.5138,1562.1094 L5329.0606,1562.1094 L5329.0606,1551.8594 L5325.92,1551.8594 L5325.92,1549.7188 L5334.6544,1549.7188 L5334.6544,1551.8594 L5331.5138,1551.8594 L5331.5138,1562.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="148" x="5351.17" y="1559.5137">urt_osThreadFunction_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5283.92" x2="5533.92" y1="1571.3594" y2="1571.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="5283.92" x2="5533.92" y1="1579.3594" y2="1579.3594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="240" x="5288.92" y="1593.5698">urt_osThreadFunction_t (arg : void*) : void</text><!--class urt_osThreadTerminateSignal_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_osThreadTerminateSignal_t" style="stroke: #A80036; stroke-width: 1.5;" width="242" x="5569.92" y="1532.8594"/><ellipse cx="5591.67" cy="1548.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M5595.7794,1554.8594 L5588.0606,1554.8594 L5588.0606,1542.4688 L5595.7794,1542.4688 L5595.7794,1544.625 L5590.5138,1544.625 L5590.5138,1547.2969 L5595.2794,1547.2969 L5595.2794,1549.4531 L5590.5138,1549.4531 L5590.5138,1552.7031 L5595.7794,1552.7031 L5595.7794,1554.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="195" x="5607.17" y="1553.0137">urt_osThreadTerminateSignal_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5570.92" x2="5810.92" y1="1564.8594" y2="1564.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="230" x="5575.92" y="1579.0698">URT_THREAD_TERMINATE_REQUEST = 15</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="192" x="5575.92" y="1591.8745">URT_THREAD_TERMINATE_KILL = 9</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5570.92" x2="5810.92" y1="1598.4688" y2="1598.4688"/><!--class urt_osThread_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="460.9453" id="urt_osThread_t" style="stroke: #A80036; stroke-width: 1.5;" width="613" x="5102.42" y="977.8594"/><ellipse cx="5357.67" cy="993.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M5358.5138,1000.6094 L5356.0606,1000.6094 L5356.0606,990.3594 L5352.92,990.3594 L5352.92,988.2188 L5361.6544,988.2188 L5361.6544,990.3594 L5358.5138,990.3594 L5358.5138,1000.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="94" x="5378.17" y="998.0137">urt_osThread_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5103.42" x2="5714.42" y1="1009.8594" y2="1009.8594"/><ellipse cx="5113.42" cy="1021.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="280" x="5122.42" y="1024.0698">URT_THREAD_PRIO_LOW_MIN : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1034.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="283" x="5122.42" y="1036.8745">URT_THREAD_PRIO_LOW_MAX : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1047.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="302" x="5122.42" y="1049.6792">URT_THREAD_PRIO_NORMAL_MIN : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1060.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="305" x="5122.42" y="1062.4839">URT_THREAD_PRIO_NORMAL_MAX : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1072.9805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="284" x="5122.42" y="1075.2886">URT_THREAD_PRIO_HIGH_MIN : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1085.7852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="287" x="5122.42" y="1088.0933">URT_THREAD_PRIO_HIGH_MAX : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1098.5898" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="270" x="5122.42" y="1100.8979">URT_THREAD_PRIO_RT_MIN : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1111.3945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="273" x="5122.42" y="1113.7026">URT_THREAD_PRIO_RT_MAX : urt_osThreadPrio_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="5103.42" x2="5714.42" y1="1120.2969" y2="1120.2969"/><ellipse cx="5113.42" cy="1132.1992" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="179" x="5122.42" y="1134.5073">URT_THREAD_MAX_SLEEP : float</text><ellipse cx="5113.42" cy="1145.0039" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="225" x="5122.42" y="1147.312">URT_THREAD_MAX_SSLEP : unsigned int</text><ellipse cx="5113.42" cy="1157.8086" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="233" x="5122.42" y="1160.1167">URT_THREAD_MAX_MSLEEP : unsigned int</text><ellipse cx="5113.42" cy="1170.6133" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="232" x="5122.42" y="1172.9214">URT_THREAD_MAX_USLEEP : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5103.42" x2="5714.42" y1="1179.5156" y2="1179.5156"/><ellipse cx="5113.42" cy="1191.418" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="360" x="5122.42" y="1193.7261">URT_THREAD_WORKING_AREA (var : varname, stacksize : size_t)</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="5103.42" x2="5714.42" y1="1200.3203" y2="1200.3203"/><ellipse cx="5113.42" cy="1212.2227" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="587" x="5122.42" y="1214.5308">urtThreadInit (wa : void*, wasize : size_t, func : urt_osThreadFunction_t*, arg : void*) : urt_osThread_t*</text><ellipse cx="5113.42" cy="1225.0273" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="490" x="5122.42" y="1227.3354">urtThreadStart (thread : urt_osThread_t*, prio : urt_osThreadPrio_t, arg : void*) : void</text><ellipse cx="5113.42" cy="1237.832" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="153" x="5122.42" y="1240.1401">urtThreadYield (void) : void</text><ellipse cx="5113.42" cy="1250.6367" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="389" x="5122.42" y="1252.9448">urtThreadGetPriority (thread : urt_osThread_t*) : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1263.4414" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="453" x="5122.42" y="1265.7495">urtThreadSetPriority (thread : urt_osThread_t*, prio : urt_osThreadPrio_t) : void</text><ellipse cx="5113.42" cy="1276.2461" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="380" x="5122.42" y="1278.5542">urtThreadGetChildren (thread : urt_osThread_t*) : urt_osThread_t*</text><ellipse cx="5113.42" cy="1289.0508" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="370" x="5122.42" y="1291.3589">urtThreadGetParent (thread : urt_osThread_t*) : urt_osThread_t*</text><ellipse cx="5113.42" cy="1301.8555" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="176" x="5122.42" y="1304.1636">urtThreadSuspend (void) : void</text><ellipse cx="5113.42" cy="1314.6602" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="319" x="5122.42" y="1316.9683">urtThreadIsSuspended (thread : urt_osThread_t*) : bool</text><ellipse cx="5113.42" cy="1327.4648" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="335" x="5122.42" y="1329.7729">urtThreadResume (thread : urt_osThread_t*) : urt_status_t</text><ellipse cx="5113.42" cy="1340.2695" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="220" x="5122.42" y="1342.5776">urtThreadSleep (seconds : float) : void</text><ellipse cx="5113.42" cy="1353.0742" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="273" x="5122.42" y="1355.3823">urtThreadSSleep (seconds : usnigned int) : void</text><ellipse cx="5113.42" cy="1365.8789" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="297" x="5122.42" y="1368.187">urtThreadMSleep (milliseconds : unsigned int) : void</text><ellipse cx="5113.42" cy="1378.6836" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="305" x="5122.42" y="1380.9917">urtThreadUSleep (microseconds : unsigned int) : void</text><ellipse cx="5113.42" cy="1391.4883" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="271" x="5122.42" y="1393.7964">urtThreadSleepUntil (time : urt_osTime_t) : void</text><ellipse cx="5113.42" cy="1404.293" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="146" x="5122.42" y="1406.6011">urtThreadExit (void) : void</text><ellipse cx="5113.42" cy="1417.0977" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="518" x="5122.42" y="1419.4058">urtThreadTerminate (thread : urt_osThread_t*, sig : urt_osThreadTerminateSignal_t) : void</text><ellipse cx="5113.42" cy="1429.9023" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="264" x="5122.42" y="1432.2104">urtThreadJoin (thread : urt_osThread_t*) : void</text><!--class urt_osEventMask_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="48" id="urt_osEventMask_t" style="stroke: #A80036; stroke-width: 1.5;" width="149" x="6450.42" y="1545.8594"/><ellipse cx="6465.42" cy="1561.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6466.2638,1568.6094 L6463.8106,1568.6094 L6463.8106,1558.3594 L6460.67,1558.3594 L6460.67,1556.2188 L6469.4044,1556.2188 L6469.4044,1558.3594 L6466.2638,1558.3594 L6466.2638,1568.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="6479.42" y="1566.0137">urt_osEventMask_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6451.42" x2="6598.42" y1="1577.8594" y2="1577.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="6451.42" x2="6598.42" y1="1585.8594" y2="1585.8594"/><!--class urt_osEventFlags_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="48" id="urt_osEventFlags_t" style="stroke: #A80036; stroke-width: 1.5;" width="150" x="6540.92" y="1700.8594"/><ellipse cx="6555.92" cy="1716.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6556.7638,1723.6094 L6554.3106,1723.6094 L6554.3106,1713.3594 L6551.17,1713.3594 L6551.17,1711.2188 L6559.9044,1711.2188 L6559.9044,1713.3594 L6556.7638,1713.3594 L6556.7638,1723.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="6569.92" y="1721.0137">urt_osEventFlags_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6541.92" x2="6689.92" y1="1732.8594" y2="1732.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="6541.92" x2="6689.92" y1="1740.8594" y2="1740.8594"/><!--class urt_osEventWaitType_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_osEventWaitType_t" style="stroke: #A80036; stroke-width: 1.5;" width="173" x="6634.42" y="1526.8594"/><ellipse cx="6649.42" cy="1542.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6653.5294,1548.8594 L6645.8106,1548.8594 L6645.8106,1536.4688 L6653.5294,1536.4688 L6653.5294,1538.625 L6648.2638,1538.625 L6648.2638,1541.2969 L6653.0294,1541.2969 L6653.0294,1543.4531 L6648.2638,1543.4531 L6648.2638,1546.7031 L6653.5294,1546.7031 L6653.5294,1548.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="141" x="6663.42" y="1547.0137">urt_osEventWaitType_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6635.42" x2="6806.42" y1="1558.8594" y2="1558.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="6640.42" y="1573.0698">URT_EVENT_WAIT_ONE = 0</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="148" x="6640.42" y="1585.8745">URT_EVENT_WAIT_ANY = 1</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="6640.42" y="1598.6792">URT_EVENT_WAIT_ALL = 2</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6635.42" x2="6806.42" y1="1605.2734" y2="1605.2734"/><!--class urt_osEventListener_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_osEventListener_t" style="stroke: #A80036; stroke-width: 1.5;" width="494" x="6842.92" y="1526.8594"/><ellipse cx="7018.17" cy="1542.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M7019.0138,1549.6094 L7016.5606,1549.6094 L7016.5606,1539.3594 L7013.42,1539.3594 L7013.42,1537.2188 L7022.1544,1537.2188 L7022.1544,1539.3594 L7019.0138,1539.3594 L7019.0138,1549.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="135" x="7038.67" y="1547.0137">urt_osEventListener_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6843.92" x2="7335.92" y1="1558.8594" y2="1558.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="6843.92" x2="7335.92" y1="1566.8594" y2="1566.8594"/><ellipse cx="6853.92" cy="1578.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="341" x="6862.92" y="1581.0698">urtEventListenerInit (listener : urt_osEventListener_t*) : void</text><ellipse cx="6853.92" cy="1591.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="458" x="6862.92" y="1593.8745">urtEventListenerGetFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t</text><ellipse cx="6853.92" cy="1604.3711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="468" x="6862.92" y="1606.6792">urtEventListenerClearFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t</text><!--class urt_osEventSource_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_osEventSource_t" style="stroke: #A80036; stroke-width: 1.5;" width="547" x="5868.42" y="1532.8594"/><ellipse cx="6073.17" cy="1548.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6074.0138,1555.6094 L6071.5606,1555.6094 L6071.5606,1545.3594 L6068.42,1545.3594 L6068.42,1543.2188 L6077.1544,1543.2188 L6077.1544,1545.3594 L6074.0138,1545.3594 L6074.0138,1555.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="129" x="6093.67" y="1553.0137">urt_osEventSource_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5869.42" x2="6414.42" y1="1564.8594" y2="1564.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="5869.42" x2="6414.42" y1="1572.8594" y2="1572.8594"/><ellipse cx="5879.42" cy="1584.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="325" x="5888.42" y="1587.0698">urtEventSourceInit (source : urt_osEventSource_t*) : void</text><ellipse cx="5879.42" cy="1597.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="521" x="5888.42" y="1599.8745">urtEventSourceBroadcast (source : urt_osEventSource_t*, flags : urt_osEventFlags_t) : void</text><!--class urt_events--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_events" style="stroke: #A80036; stroke-width: 1.5;" width="735" x="5867.42" y="1165.3594"/><ellipse cx="6197.67" cy="1181.3594" fill="#FFFFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6201.9044,1177.125 L6196.6231,1177.125 L6196.6231,1179.7969 L6201.42,1179.7969 L6201.42,1181.9531 L6196.6231,1181.9531 L6196.6231,1187.3594 L6194.1856,1187.3594 L6194.1856,1174.9688 L6201.9044,1174.9688 L6201.9044,1177.125 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="66" x="6218.17" y="1185.5137">urt_events</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5868.42" x2="6601.42" y1="1197.3594" y2="1197.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="5868.42" x2="6601.42" y1="1205.3594" y2="1205.3594"/><ellipse cx="5878.42" cy="1217.2617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="709" x="5887.42" y="1219.5698">urtEventRegister (source : urt_osEventSource_t*, listener : urt_osEventListener_t*, mask : urt_osEventMask_t) : urt_status_t</text><ellipse cx="5878.42" cy="1230.0664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="567" x="5887.42" y="1232.3745">urtEventUnregister (source _ urt_osEventSource_t*, listener : urt_osEventListener_t*) : urt_status_t</text><ellipse cx="5878.42" cy="1242.8711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="488" x="5887.42" y="1245.1792">urtEventWait (type : urt_osEventWaitType_t, timeout : urt_delay_t) : urt_osEventMask_t</text><!--class urt_message_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="167.2422" id="urt_message_t" style="stroke: #A80036; stroke-width: 1.5;" width="451" x="1878.42" y="716.8594"/><ellipse cx="2053.67" cy="732.8594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2053.1544,733.4219 Q2051.295,732.7188 2050.6466,731.9453 Q2049.9981,731.1719 2049.9981,729.8594 Q2049.9981,728.1719 2051.0763,727.2031 Q2052.1544,726.2344 2054.0294,726.2344 Q2054.8888,726.2344 2055.7403,726.4297 Q2056.5919,726.625 2057.4356,727.0156 L2057.4356,729.4063 Q2056.6544,728.8438 2055.8341,728.5547 Q2055.0138,728.2656 2054.2169,728.2656 Q2053.3419,728.2656 2052.8653,728.625 Q2052.3888,728.9844 2052.3888,729.6406 Q2052.3888,730.1563 2052.7325,730.4922 Q2053.0763,730.8281 2054.17,731.2344 L2055.2325,731.6406 Q2056.7169,732.1875 2057.4278,733.0938 Q2058.1388,734 2058.1388,735.375 Q2058.1388,737.25 2057.0294,738.1719 Q2055.92,739.0938 2053.67,739.0938 Q2052.7481,739.0938 2051.8263,738.875 Q2050.9044,738.6563 2050.045,738.2344 L2050.045,735.7031 Q2051.0138,736.3906 2051.9356,736.7344 Q2052.8575,737.0781 2053.7481,737.0781 Q2054.6544,737.0781 2055.1544,736.6641 Q2055.6544,736.25 2055.6544,735.5156 Q2055.6544,734.9531 2055.3184,734.5391 Q2054.9825,734.125 2054.3575,733.875 L2053.1544,733.4219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="92" x="2074.17" y="737.0137">urt_message_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1879.42" x2="2328.42" y1="748.8594" y2="748.8594"/><ellipse cx="1889.42" cy="760.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="1898.42" y="763.0698">next : urt_message_t*</text><ellipse cx="1889.42" cy="773.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="85" x="1898.42" y="775.8745">payload : void*</text><ellipse cx="1889.42" cy="786.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="146" x="1898.42" y="788.6792">originTime : urt_osTime_t</text><ellipse cx="1889.42" cy="799.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="113" x="1898.42" y="801.4839">lock : urt_osMutex_t</text><ellipse cx="1889.42" cy="811.9805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="211" x="1898.42" y="814.2886">numHrtConsumersLeft : unsigned int</text><ellipse cx="1889.42" cy="824.7852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="208" x="1898.42" y="827.0933">hrtConsumersLeft : urt_osCondvar_t</text><ellipse cx="1889.42" cy="854.3945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="194" x="1898.42" y="856.7026">numConsumersLeft : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1879.42" x2="2060.42" y1="840.0898" y2="840.0898"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="2060.42" y="843.3979">evaluation data</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2147.42" x2="2328.42" y1="840.0898" y2="840.0898"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1879.42" x2="2328.42" y1="863.2969" y2="863.2969"/><ellipse cx="1889.42" cy="875.1992" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="425" x="1898.42" y="877.5073">urtMessageInit (message : urt_message_t*, payload : void*) : urt_status_t</text><!--class urt_subscriber_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="244.0703" id="urt_subscriber_t" style="stroke: #A80036; stroke-width: 1.5;" width="851" x="1093.42" y="121.8594"/><ellipse cx="1464.17" cy="137.8594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1463.6544,138.4219 Q1461.795,137.7188 1461.1466,136.9453 Q1460.4981,136.1719 1460.4981,134.8594 Q1460.4981,133.1719 1461.5763,132.2031 Q1462.6544,131.2344 1464.5294,131.2344 Q1465.3888,131.2344 1466.2403,131.4297 Q1467.0919,131.625 1467.9356,132.0156 L1467.9356,134.4063 Q1467.1544,133.8438 1466.3341,133.5547 Q1465.5138,133.2656 1464.7169,133.2656 Q1463.8419,133.2656 1463.3653,133.625 Q1462.8888,133.9844 1462.8888,134.6406 Q1462.8888,135.1563 1463.2325,135.4922 Q1463.5763,135.8281 1464.67,136.2344 L1465.7325,136.6406 Q1467.2169,137.1875 1467.9278,138.0938 Q1468.6388,139 1468.6388,140.375 Q1468.6388,142.25 1467.5294,143.1719 Q1466.42,144.0938 1464.17,144.0938 Q1463.2481,144.0938 1462.3263,143.875 Q1461.4044,143.6563 1460.545,143.2344 L1460.545,140.7031 Q1461.5138,141.3906 1462.4356,141.7344 Q1463.3575,142.0781 1464.2481,142.0781 Q1465.1544,142.0781 1465.6544,141.6641 Q1466.1544,141.25 1466.1544,140.5156 Q1466.1544,139.9531 1465.8184,139.5391 Q1465.4825,139.125 1464.8575,138.875 L1463.6544,138.4219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="101" x="1484.67" y="142.0137">urt_subscriber_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1094.42" x2="1943.42" y1="153.8594" y2="153.8594"/><ellipse cx="1104.42" cy="165.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="135" x="1113.42" y="168.0698">next : urt_subscriber_t*</text><ellipse cx="1104.42" cy="178.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="104" x="1113.42" y="180.8745">topic : urt_topic_t*</text><ellipse cx="1104.42" cy="191.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="198" x="1113.42" y="193.6792">evtListener : urt_osEventListener_t</text><ellipse cx="1104.42" cy="204.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="122" x="1113.42" y="206.4839">rtclass : urt_rtclass_t</text><ellipse cx="1104.42" cy="216.9805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="175" x="1113.42" y="219.2886">lastMessage : urt_message_t*</text><ellipse cx="1104.42" cy="229.7852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="186" x="1113.42" y="232.0933">lastMessageTime : urt_osTime_t</text><ellipse cx="1104.42" cy="259.3945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="138" x="1113.42" y="261.7026">minLatency : urt_delay_t</text><ellipse cx="1104.42" cy="272.1992" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="141" x="1113.42" y="274.5073">maxLatency : urt_delay_t</text><ellipse cx="1104.42" cy="285.0039" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="136" x="1113.42" y="287.312">sumLatencies : uint64_t</text><ellipse cx="1104.42" cy="297.8086" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="215" x="1113.42" y="300.1167">numMessagesReceived : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1094.42" x2="1475.42" y1="245.0898" y2="245.0898"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="1475.42" y="248.3979">evaluation data</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1562.42" x2="1943.42" y1="245.0898" y2="245.0898"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1094.42" x2="1943.42" y1="306.7109" y2="306.7109"/><ellipse cx="1104.42" cy="318.6133" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="359" x="1113.42" y="320.9214">urtSubscriberInit (subscriber : urt_subscriber_t*) : urt_status_t</text><ellipse cx="1104.42" cy="331.418" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="825" x="1113.42" y="333.7261">urtSubscriberSubscribe (subscriber : urt_subscriber_t*, topic : urt_topic_t*, rtclass : urt_rtclass_t*, messages : urt_messages_t*) : urt_status_t</text><ellipse cx="1104.42" cy="344.2227" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="413" x="1113.42" y="346.5308">urtSubscriberUnsubscribe (subscriber : urt_subscriber_t*) : urt_status_t</text><ellipse cx="1104.42" cy="357.0273" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="499" x="1113.42" y="359.3354">urtSubscriberFetchMessage (subscriber : urt_subscriber_t*, latest : bool) : urt_status_t</text><!--class urt_topic_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="231.2656" id="urt_topic_t" style="stroke: #A80036; stroke-width: 1.5;" width="511" x="1780.42" y="425.8594"/><ellipse cx="1998.67" cy="441.8594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1998.1544,442.4219 Q1996.295,441.7188 1995.6466,440.9453 Q1994.9981,440.1719 1994.9981,438.8594 Q1994.9981,437.1719 1996.0763,436.2031 Q1997.1544,435.2344 1999.0294,435.2344 Q1999.8888,435.2344 2000.7403,435.4297 Q2001.5919,435.625 2002.4356,436.0156 L2002.4356,438.4063 Q2001.6544,437.8438 2000.8341,437.5547 Q2000.0138,437.2656 1999.2169,437.2656 Q1998.3419,437.2656 1997.8653,437.625 Q1997.3888,437.9844 1997.3888,438.6406 Q1997.3888,439.1563 1997.7325,439.4922 Q1998.0763,439.8281 1999.17,440.2344 L2000.2325,440.6406 Q2001.7169,441.1875 2002.4278,442.0938 Q2003.1388,443 2003.1388,444.375 Q2003.1388,446.25 2002.0294,447.1719 Q2000.92,448.0938 1998.67,448.0938 Q1997.7481,448.0938 1996.8263,447.875 Q1995.9044,447.6563 1995.045,447.2344 L1995.045,444.7031 Q1996.0138,445.3906 1996.9356,445.7344 Q1997.8575,446.0781 1998.7481,446.0781 Q1999.6544,446.0781 2000.1544,445.6641 Q2000.6544,445.25 2000.6544,444.5156 Q2000.6544,443.9531 2000.3184,443.5391 Q1999.9825,443.125 1999.3575,442.875 L1998.1544,442.4219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="66" x="2019.17" y="446.0137">urt_topic_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1781.42" x2="2290.42" y1="457.8594" y2="457.8594"/><ellipse cx="1791.42" cy="469.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="101" x="1800.42" y="472.0698">next : urt_topic_t*</text><ellipse cx="1791.42" cy="482.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="126" x="1800.42" y="484.8745">mutex : urt_osMutex_t</text><ellipse cx="1791.42" cy="495.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="186" x="1800.42" y="497.6792">evtSource : urt_osEventSource_t</text><ellipse cx="1791.42" cy="508.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="193" x="1800.42" y="510.4839">numHrtSubscribers : unsigned int</text><ellipse cx="1791.42" cy="520.9805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="196" x="1800.42" y="523.2886">hrtSubscribers : urt_subscriber_t*</text><ellipse cx="1791.42" cy="533.7852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="1800.42" y="536.0933">qosTimer : urt_osTimer_t</text><ellipse cx="1791.42" cy="546.5898" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="209" x="1800.42" y="548.8979">mandatoryMessage : urt_message_t</text><ellipse cx="1791.42" cy="559.3945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="186" x="1800.42" y="561.7026">latestMessage : urt_message_t*</text><ellipse cx="1791.42" cy="572.1992" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="91" x="1800.42" y="574.5073">id : urt_topicid_t</text><ellipse cx="1791.42" cy="601.8086" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="222" x="1800.42" y="604.1167">numDiscardedMessages : unsigned int</text><ellipse cx="1791.42" cy="614.6133" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="176" x="1800.42" y="616.9214">numSubscribers : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1781.42" x2="1992.42" y1="587.5039" y2="587.5039"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="1992.42" y="590.812">evaluation data</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2079.42" x2="2290.42" y1="587.5039" y2="587.5039"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1781.42" x2="2290.42" y1="623.5156" y2="623.5156"/><ellipse cx="1791.42" cy="635.418" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="358" x="1800.42" y="637.7261">urtTopicInit (topic : urt_topic_t*, id : urt_topicid_t) : urt_status_t</text><ellipse cx="1791.42" cy="648.2227" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="485" x="1800.42" y="650.5308">urtTopicContributeMessages (topic : urt_topic_t*, messages : urt_message_t*) : void</text><!--class urt_publisher_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="128.8281" id="urt_publisher_t" style="stroke: #A80036; stroke-width: 1.5;" width="759" x="1997.42" y="179.3594"/><ellipse cx="2326.17" cy="195.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2325.6544,195.9219 Q2323.795,195.2188 2323.1466,194.4453 Q2322.4981,193.6719 2322.4981,192.3594 Q2322.4981,190.6719 2323.5763,189.7031 Q2324.6544,188.7344 2326.5294,188.7344 Q2327.3888,188.7344 2328.2403,188.9297 Q2329.0919,189.125 2329.9356,189.5156 L2329.9356,191.9063 Q2329.1544,191.3438 2328.3341,191.0547 Q2327.5138,190.7656 2326.7169,190.7656 Q2325.8419,190.7656 2325.3653,191.125 Q2324.8888,191.4844 2324.8888,192.1406 Q2324.8888,192.6563 2325.2325,192.9922 Q2325.5763,193.3281 2326.67,193.7344 L2327.7325,194.1406 Q2329.2169,194.6875 2329.9278,195.5938 Q2330.6388,196.5 2330.6388,197.875 Q2330.6388,199.75 2329.5294,200.6719 Q2328.42,201.5938 2326.17,201.5938 Q2325.2481,201.5938 2324.3263,201.375 Q2323.4044,201.1563 2322.545,200.7344 L2322.545,198.2031 Q2323.5138,198.8906 2324.4356,199.2344 Q2325.3575,199.5781 2326.2481,199.5781 Q2327.1544,199.5781 2327.6544,199.1641 Q2328.1544,198.75 2328.1544,198.0156 Q2328.1544,197.4531 2327.8184,197.0391 Q2327.4825,196.625 2326.8575,196.375 L2325.6544,195.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="93" x="2346.67" y="199.5137">urt_publisher_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1998.42" x2="2755.42" y1="211.3594" y2="211.3594"/><ellipse cx="2008.42" cy="223.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="104" x="2017.42" y="225.5698">topic : urt_topic_t*</text><ellipse cx="2008.42" cy="252.8711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="174" x="2017.42" y="255.1792">publishAttempts : unsigned int</text><ellipse cx="2008.42" cy="265.6758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="149" x="2017.42" y="267.9839">publishFails : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1998.42" x2="2333.42" y1="238.5664" y2="238.5664"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="2333.42" y="241.8745">evaluation data</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2420.42" x2="2755.42" y1="238.5664" y2="238.5664"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1998.42" x2="2755.42" y1="274.5781" y2="274.5781"/><ellipse cx="2008.42" cy="286.4805" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="617" x="2017.42" y="288.7886">urtPublisherInit (publisher : urt_publisher_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t</text><ellipse cx="2008.42" cy="299.2852" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="733" x="2017.42" y="301.5933">urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, n : size_t, t : urt_osTime_t, timeout : urt_delay_t) : urt_status_t</text><!--class urt_core_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="124.8281" id="urt_core_t" style="stroke: #A80036; stroke-width: 1.5;" width="325" x="733.421" y="181.3594"/><ellipse cx="860.171" cy="197.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M859.6554,197.9219 Q857.796,197.2188 857.1476,196.4453 Q856.4991,195.6719 856.4991,194.3594 Q856.4991,192.6719 857.5773,191.7031 Q858.6554,190.7344 860.5304,190.7344 Q861.3898,190.7344 862.2413,190.9297 Q863.0929,191.125 863.9366,191.5156 L863.9366,193.9063 Q863.1554,193.3438 862.3351,193.0547 Q861.5148,192.7656 860.7179,192.7656 Q859.8429,192.7656 859.3663,193.125 Q858.8898,193.4844 858.8898,194.1406 Q858.8898,194.6563 859.2335,194.9922 Q859.5773,195.3281 860.671,195.7344 L861.7335,196.1406 Q863.2179,196.6875 863.9288,197.5938 Q864.6398,198.5 864.6398,199.875 Q864.6398,201.75 863.5304,202.6719 Q862.421,203.5938 860.171,203.5938 Q859.2491,203.5938 858.3273,203.375 Q857.4054,203.1563 856.546,202.7344 L856.546,200.2031 Q857.5148,200.8906 858.4366,201.2344 Q859.3585,201.5781 860.2491,201.5781 Q861.1554,201.5781 861.6554,201.1641 Q862.1554,200.75 862.1554,200.0156 Q862.1554,199.4531 861.8194,199.0391 Q861.4835,198.625 860.8585,198.375 L859.6554,197.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="63" x="880.671" y="201.5137">urt_core_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="734.421" x2="1057.421" y1="213.3594" y2="213.3594"/><rect fill="none" height="6" style="stroke: #C82930; stroke-width: 1.0;" width="6" x="741.421" y="222.2617"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" text-decoration="underline" textLength="119" x="753.421" y="227.5698">_nodes : urt_node_t*</text><line style="stroke: #000000; stroke-width: 1.0;" x1="753.421" x2="872.421" y1="229.5698" y2="229.5698"/><rect fill="none" height="6" style="stroke: #C82930; stroke-width: 1.0;" width="6" x="741.421" y="235.0664"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" text-decoration="underline" textLength="117" x="753.421" y="240.3745">_topics : urt_topic_t*</text><line style="stroke: #000000; stroke-width: 1.0;" x1="753.421" x2="870.421" y1="242.3745" y2="242.3745"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="734.421" x2="1057.421" y1="246.9688" y2="246.9688"/><ellipse cx="744.421" cy="258.8711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="175" x="753.421" y="261.1792">urtCoreInit (void) : urt_status_t</text><ellipse cx="744.421" cy="271.6758" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="199" x="753.421" y="273.9839">urtCoreStartAll (void) : urt_status_t</text><ellipse cx="744.421" cy="284.4805" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="197" x="753.421" y="286.7886">urtCoreStopAll (void) : urt_status_t</text><ellipse cx="744.421" cy="297.2852" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="299" x="753.421" y="299.5933">urtCoreRetrieveTopic (id : urt_topicid_t) : urt_topic_t*</text><!--class urt_node_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="201.6563" id="urt_node_t" style="stroke: #A80036; stroke-width: 1.5;" width="1104" x="2381.92" y="440.3594"/><ellipse cx="2896.17" cy="456.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2895.6544,456.9219 Q2893.795,456.2188 2893.1466,455.4453 Q2892.4981,454.6719 2892.4981,453.3594 Q2892.4981,451.6719 2893.5763,450.7031 Q2894.6544,449.7344 2896.5294,449.7344 Q2897.3888,449.7344 2898.2403,449.9297 Q2899.0919,450.125 2899.9356,450.5156 L2899.9356,452.9063 Q2899.1544,452.3438 2898.3341,452.0547 Q2897.5138,451.7656 2896.7169,451.7656 Q2895.8419,451.7656 2895.3653,452.125 Q2894.8888,452.4844 2894.8888,453.1406 Q2894.8888,453.6563 2895.2325,453.9922 Q2895.5763,454.3281 2896.67,454.7344 L2897.7325,455.1406 Q2899.2169,455.6875 2899.9278,456.5938 Q2900.6388,457.5 2900.6388,458.875 Q2900.6388,460.75 2899.5294,461.6719 Q2898.42,462.5938 2896.17,462.5938 Q2895.2481,462.5938 2894.3263,462.375 Q2893.4044,462.1563 2892.545,461.7344 L2892.545,459.2031 Q2893.5138,459.8906 2894.4356,460.2344 Q2895.3575,460.5781 2896.2481,460.5781 Q2897.1544,460.5781 2897.6544,460.1641 Q2898.1544,459.75 2898.1544,459.0156 Q2898.1544,458.4531 2897.8184,458.0391 Q2897.4825,457.625 2896.8575,457.375 L2895.6544,456.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="67" x="2916.67" y="460.5137">urt_node_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2382.92" x2="3484.92" y1="472.3594" y2="472.3594"/><ellipse cx="2392.92" cy="484.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="102" x="2401.92" y="486.5698">next : urt_node_t*</text><ellipse cx="2392.92" cy="497.0664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="141" x="2401.92" y="499.3745">thread : urt_osThread_t*</text><ellipse cx="2392.92" cy="509.8711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="235" x="2401.92" y="512.1792">setupcallback : urt_nodeSetupCallback_t*</text><ellipse cx="2392.92" cy="522.6758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="117" x="2401.92" y="524.9839">setupparams : void*</text><ellipse cx="2392.92" cy="535.4805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="221" x="2401.92" y="537.7886">loopcallback : urt_nodeLoopCallback_t*</text><ellipse cx="2392.92" cy="548.2852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="109" x="2401.92" y="550.5933">loopparams : void*</text><ellipse cx="2392.92" cy="561.0898" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="2401.92" y="563.3979">waitmask : urt_osEventMask_t</text><ellipse cx="2392.92" cy="573.8945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="186" x="2401.92" y="576.2026">waittype : urt_osEventWaitType_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2382.92" x2="3484.92" y1="582.7969" y2="582.7969"/><rect fill="none" height="6" style="stroke: #C82930; stroke-width: 1.0;" width="6" x="2389.92" y="591.6992"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" text-decoration="underline" textLength="179" x="2401.92" y="597.0073">_main : urt_osThreadFunction_t</text><line style="stroke: #000000; stroke-width: 1.0;" x1="2401.92" x2="2580.92" y1="599.0073" y2="599.0073"/><ellipse cx="2392.92" cy="607.5039" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="1078" x="2401.92" y="609.812">urtNodeInit (node : urt_node_t*, stacksize : size_t, setupcallback : urt_nodeSetupCallback_t*, setupparams : void*, loopcallback : urt_nodeLoopCallback_t*, loopparams : void*) : urt_status_t</text><ellipse cx="2392.92" cy="620.3086" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="531" x="2401.92" y="622.6167">urtNodeTerminateRecusively (node : urt_node_t*, sig : urt_osThreadTerminateSignal_t) : void</text><ellipse cx="2392.92" cy="633.1133" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="282" x="2401.92" y="635.4214">urtNodeJoinRecursively (node : urt_node_t*) : void</text><!--class urt_rtclass_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_rtclass_t" style="stroke: #A80036; stroke-width: 1.5;" width="197" x="1408.42" y="504.3594"/><ellipse cx="1464.17" cy="520.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1463.6544,520.9219 Q1461.795,520.2188 1461.1466,519.4453 Q1460.4981,518.6719 1460.4981,517.3594 Q1460.4981,515.6719 1461.5763,514.7031 Q1462.6544,513.7344 1464.5294,513.7344 Q1465.3888,513.7344 1466.2403,513.9297 Q1467.0919,514.125 1467.9356,514.5156 L1467.9356,516.9063 Q1467.1544,516.3438 1466.3341,516.0547 Q1465.5138,515.7656 1464.7169,515.7656 Q1463.8419,515.7656 1463.3653,516.125 Q1462.8888,516.4844 1462.8888,517.1406 Q1462.8888,517.6563 1463.2325,517.9922 Q1463.5763,518.3281 1464.67,518.7344 L1465.7325,519.1406 Q1467.2169,519.6875 1467.9278,520.5938 Q1468.6388,521.5 1468.6388,522.875 Q1468.6388,524.75 1467.5294,525.6719 Q1466.42,526.5938 1464.17,526.5938 Q1463.2481,526.5938 1462.3263,526.375 Q1461.4044,526.1563 1460.545,525.7344 L1460.545,523.2031 Q1461.5138,523.8906 1462.4356,524.2344 Q1463.3575,524.5781 1464.2481,524.5781 Q1465.1544,524.5781 1465.6544,524.1641 Q1466.1544,523.75 1466.1544,523.0156 Q1466.1544,522.4531 1465.8184,522.0391 Q1465.4825,521.625 1464.8575,521.375 L1463.6544,520.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="77" x="1484.67" y="524.5137">urt_rtclass_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1409.42" x2="1604.42" y1="536.3594" y2="536.3594"/><ellipse cx="1419.42" cy="548.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="137" x="1428.42" y="550.5698">class : urt_rtclasstype_t</text><ellipse cx="1419.42" cy="561.0664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="171" x="1428.42" y="563.3745">params : urt_rtclassparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1409.42" x2="1604.42" y1="569.9688" y2="569.9688"/><!--class urt_rtclasstype_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_rtclasstype_t" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="1430.42" y="750.8594"/><ellipse cx="1453.07" cy="766.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1457.1794,772.8594 L1449.4606,772.8594 L1449.4606,760.4688 L1457.1794,760.4688 L1457.1794,762.625 L1451.9138,762.625 L1451.9138,765.2969 L1456.6794,765.2969 L1456.6794,767.4531 L1451.9138,767.4531 L1451.9138,770.7031 L1457.1794,770.7031 L1457.1794,772.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="104" x="1468.77" y="771.0137">urt_rtclasstype_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1431.42" x2="1582.42" y1="782.8594" y2="782.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="139" x="1436.42" y="797.0698">URT_RTCLASS_HARD = 0</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="134" x="1436.42" y="809.8745">URT_RTCLASS_FIRM = 1</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="139" x="1436.42" y="822.6792">URT_RTCLASS_SOFT = 2</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="141" x="1436.42" y="835.4839">URT_RTCLASS_NONE = 3</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1431.42" x2="1582.42" y1="842.0781" y2="842.0781"/><!--class urt_rtclassparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_rtclassparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="1226.92" y="750.8594"/><ellipse cx="1241.92" cy="766.8594" fill="#90EE90" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1237.795,768.7813 L1237.795,760.9688 L1240.2481,760.9688 L1240.2481,769.4063 Q1240.2481,770.3281 1240.7247,770.8594 Q1241.2013,771.3906 1242.0294,771.3906 Q1242.8731,771.3906 1243.3419,770.8594 Q1243.8106,770.3281 1243.8106,769.4063 L1243.8106,760.9688 L1246.2638,760.9688 L1246.2638,768.7813 Q1246.2638,771.3125 1245.2638,772.4531 Q1244.2638,773.5938 1242.0294,773.5938 Q1239.8106,773.5938 1238.8028,772.4531 Q1237.795,771.3125 1237.795,768.7813 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="124" x="1255.92" y="771.0137">urt_rtclassparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1227.92" x2="1381.92" y1="782.8594" y2="782.8594"/><ellipse cx="1237.92" cy="794.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="120" x="1246.92" y="797.0698">hrt : urt_hrtparams_t</text><ellipse cx="1237.92" cy="807.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="1246.92" y="809.8745">frt : urt_frtparams_t</text><ellipse cx="1237.92" cy="820.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="116" x="1246.92" y="822.6792">srt : urt_srtparans_t</text><ellipse cx="1237.92" cy="833.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="120" x="1246.92" y="835.4839">nrt : urt_nrtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1227.92" x2="1381.92" y1="842.0781" y2="842.0781"/><!--class urt_hrtparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_hrtparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="183" x="925.421" y="1165.3594"/><ellipse cx="963.371" cy="1181.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M962.8554,1181.9219 Q960.996,1181.2188 960.3476,1180.4453 Q959.6991,1179.6719 959.6991,1178.3594 Q959.6991,1176.6719 960.7773,1175.7031 Q961.8554,1174.7344 963.7304,1174.7344 Q964.5898,1174.7344 965.4413,1174.9297 Q966.2929,1175.125 967.1366,1175.5156 L967.1366,1177.9063 Q966.3554,1177.3438 965.5351,1177.0547 Q964.7148,1176.7656 963.9179,1176.7656 Q963.0429,1176.7656 962.5663,1177.125 Q962.0898,1177.4844 962.0898,1178.1406 Q962.0898,1178.6563 962.4335,1178.9922 Q962.7773,1179.3281 963.871,1179.7344 L964.9335,1180.1406 Q966.4179,1180.6875 967.1288,1181.5938 Q967.8398,1182.5 967.8398,1183.875 Q967.8398,1185.75 966.7304,1186.6719 Q965.621,1187.5938 963.371,1187.5938 Q962.4491,1187.5938 961.5273,1187.375 Q960.6054,1187.1563 959.746,1186.7344 L959.746,1184.2031 Q960.7148,1184.8906 961.6366,1185.2344 Q962.5585,1185.5781 963.4491,1185.5781 Q964.3554,1185.5781 964.8554,1185.1641 Q965.3554,1184.75 965.3554,1184.0156 Q965.3554,1183.4531 965.0194,1183.0391 Q964.6835,1182.625 964.0585,1182.375 L962.8554,1181.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="100" x="982.471" y="1185.5137">urt_hrtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="926.421" x2="1107.421" y1="1197.3594" y2="1197.3594"/><ellipse cx="936.421" cy="1209.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="157" x="945.421" y="1211.5698">deadlineOffset : urt_delay_t</text><ellipse cx="936.421" cy="1222.0664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="945.421" y="1224.3745">expectedRate : urt_delay_t</text><ellipse cx="936.421" cy="1234.8711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="945.421" y="1237.1792">qosTimer : urt_osTimer_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="926.421" x2="1107.421" y1="1243.7734" y2="1243.7734"/><!--class urt_frtparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="112.0234" id="urt_frtparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="209" x="1501.42" y="1152.3594"/><ellipse cx="1553.67" cy="1168.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1553.1544,1168.9219 Q1551.295,1168.2188 1550.6466,1167.4453 Q1549.9981,1166.6719 1549.9981,1165.3594 Q1549.9981,1163.6719 1551.0763,1162.7031 Q1552.1544,1161.7344 1554.0294,1161.7344 Q1554.8888,1161.7344 1555.7403,1161.9297 Q1556.5919,1162.125 1557.4356,1162.5156 L1557.4356,1164.9063 Q1556.6544,1164.3438 1555.8341,1164.0547 Q1555.0138,1163.7656 1554.2169,1163.7656 Q1553.3419,1163.7656 1552.8653,1164.125 Q1552.3888,1164.4844 1552.3888,1165.1406 Q1552.3888,1165.6563 1552.7325,1165.9922 Q1553.0763,1166.3281 1554.17,1166.7344 L1555.2325,1167.1406 Q1556.7169,1167.6875 1557.4278,1168.5938 Q1558.1388,1169.5 1558.1388,1170.875 Q1558.1388,1172.75 1557.0294,1173.6719 Q1555.92,1174.5938 1553.67,1174.5938 Q1552.7481,1174.5938 1551.8263,1174.375 Q1550.9044,1174.1563 1550.045,1173.7344 L1550.045,1171.2031 Q1551.0138,1171.8906 1551.9356,1172.2344 Q1552.8575,1172.5781 1553.7481,1172.5781 Q1554.6544,1172.5781 1555.1544,1172.1641 Q1555.6544,1171.75 1555.6544,1171.0156 Q1555.6544,1170.4531 1555.3184,1170.0391 Q1554.9825,1169.625 1554.3575,1169.375 L1553.1544,1168.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="96" x="1574.17" y="1172.5137">urt_frtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1502.42" x2="1709.42" y1="1184.3594" y2="1184.3594"/><ellipse cx="1512.42" cy="1196.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="157" x="1521.42" y="1198.5698">deadlineOffset : urt_delay_t</text><ellipse cx="1512.42" cy="1209.0664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="1521.42" y="1211.3745">expectedRate : urt_delay_t</text><ellipse cx="1512.42" cy="1221.8711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="1521.42" y="1224.1792">qosTimer : urt_osTimer_t</text><ellipse cx="1512.42" cy="1234.6758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="183" x="1521.42" y="1236.9839">callback : urt_osTimerCallback_t</text><ellipse cx="1512.42" cy="1247.4805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="98" x="1521.42" y="1249.7886">cbparams : void*</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1502.42" x2="1709.42" y1="1256.3828" y2="1256.3828"/><!--class urt_srtparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_srtparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="322" x="1143.92" y="1171.3594"/><ellipse cx="1251.17" cy="1187.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1250.6544,1187.9219 Q1248.795,1187.2188 1248.1466,1186.4453 Q1247.4981,1185.6719 1247.4981,1184.3594 Q1247.4981,1182.6719 1248.5763,1181.7031 Q1249.6544,1180.7344 1251.5294,1180.7344 Q1252.3888,1180.7344 1253.2403,1180.9297 Q1254.0919,1181.125 1254.9356,1181.5156 L1254.9356,1183.9063 Q1254.1544,1183.3438 1253.3341,1183.0547 Q1252.5138,1182.7656 1251.7169,1182.7656 Q1250.8419,1182.7656 1250.3653,1183.125 Q1249.8888,1183.4844 1249.8888,1184.1406 Q1249.8888,1184.6563 1250.2325,1184.9922 Q1250.5763,1185.3281 1251.67,1185.7344 L1252.7325,1186.1406 Q1254.2169,1186.6875 1254.9278,1187.5938 Q1255.6388,1188.5 1255.6388,1189.875 Q1255.6388,1191.75 1254.5294,1192.6719 Q1253.42,1193.5938 1251.17,1193.5938 Q1250.2481,1193.5938 1249.3263,1193.375 Q1248.4044,1193.1563 1247.545,1192.7344 L1247.545,1190.2031 Q1248.5138,1190.8906 1249.4356,1191.2344 Q1250.3575,1191.5781 1251.2481,1191.5781 Q1252.1544,1191.5781 1252.6544,1191.1641 Q1253.1544,1190.75 1253.1544,1190.0156 Q1253.1544,1189.4531 1252.8184,1189.0391 Q1252.4825,1188.625 1251.8575,1188.375 L1250.6544,1187.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="99" x="1271.67" y="1191.5137">urt_srtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1144.92" x2="1464.92" y1="1203.3594" y2="1203.3594"/><ellipse cx="1154.92" cy="1215.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="85" x="1163.92" y="1217.5698">params : void*</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1144.92" x2="1464.92" y1="1224.1641" y2="1224.1641"/><ellipse cx="1154.92" cy="1236.0664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="296" x="1163.92" y="1238.3745">*usefulness (dt : urt_delay_t, params : void*) : float</text><!--class urt_nrtparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="48" id="urt_nrtparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="132" x="757.921" y="1184.3594"/><ellipse cx="772.921" cy="1200.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M772.4054,1200.9219 Q770.546,1200.2188 769.8976,1199.4453 Q769.2491,1198.6719 769.2491,1197.3594 Q769.2491,1195.6719 770.3273,1194.7031 Q771.4054,1193.7344 773.2804,1193.7344 Q774.1398,1193.7344 774.9913,1193.9297 Q775.8429,1194.125 776.6866,1194.5156 L776.6866,1196.9063 Q775.9054,1196.3438 775.0851,1196.0547 Q774.2648,1195.7656 773.4679,1195.7656 Q772.5929,1195.7656 772.1163,1196.125 Q771.6398,1196.4844 771.6398,1197.1406 Q771.6398,1197.6563 771.9835,1197.9922 Q772.3273,1198.3281 773.421,1198.7344 L774.4835,1199.1406 Q775.9679,1199.6875 776.6788,1200.5938 Q777.3898,1201.5 777.3898,1202.875 Q777.3898,1204.75 776.2804,1205.6719 Q775.171,1206.5938 772.921,1206.5938 Q771.9991,1206.5938 771.0773,1206.375 Q770.1554,1206.1563 769.296,1205.7344 L769.296,1203.2031 Q770.2648,1203.8906 771.1866,1204.2344 Q772.1085,1204.5781 772.9991,1204.5781 Q773.9054,1204.5781 774.4054,1204.1641 Q774.9054,1203.75 774.9054,1203.0156 Q774.9054,1202.4531 774.5694,1202.0391 Q774.2335,1201.625 773.6085,1201.375 L772.4054,1200.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="100" x="786.921" y="1204.5137">urt_nrtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="758.921" x2="888.921" y1="1216.3594" y2="1216.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="758.921" x2="888.921" y1="1224.3594" y2="1224.3594"/><!--class urt_nodeSetupCallback_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="60.8047" id="urt_nodeSetupCallback_t" style="stroke: #A80036; stroke-width: 1.5;" width="418" x="2382.92" y="769.8594"/><ellipse cx="2509.67" cy="785.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2510.5138,792.6094 L2508.0606,792.6094 L2508.0606,782.3594 L2504.92,782.3594 L2504.92,780.2188 L2513.6544,780.2188 L2513.6544,782.3594 L2510.5138,782.3594 L2510.5138,792.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="156" x="2530.17" y="790.0137">urt_nodeSetupCallback_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2383.92" x2="2799.92" y1="801.8594" y2="801.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2383.92" x2="2799.92" y1="809.8594" y2="809.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="406" x="2388.92" y="824.0698">urt_nodeSetupCallback_t (node : urt_node_t*, arg : void*) : urt_status_t</text><!--class urt_nodeLoopCallback_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="60.8047" id="urt_nodeLoopCallback_t" style="stroke: #A80036; stroke-width: 1.5;" width="576" x="2835.92" y="769.8594"/><ellipse cx="3045.17" cy="785.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3046.0138,792.6094 L3043.5606,792.6094 L3043.5606,782.3594 L3040.42,782.3594 L3040.42,780.2188 L3049.1544,780.2188 L3049.1544,782.3594 L3046.0138,782.3594 L3046.0138,792.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="149" x="3065.67" y="790.0137">urt_nodeLoopCallback_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2836.92" x2="3410.92" y1="801.8594" y2="801.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2836.92" x2="3410.92" y1="809.8594" y2="809.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="564" x="2841.92" y="824.0698">urt_nodeLoopCallback_t (node : urt_node_t*, events : urt_osEventMask_t, arg : void*) : urt_status_t</text><!--link urt_osCondvar_t to urt_osMutex_t--><path d="M4763,1258.0844 C4832.84,1314.2304 4957.26,1403.3164 5081.92,1438.8594 C5203.26,1473.4544 7232.33,1418.7634 7352.92,1455.8594 C7393.12,1468.2244 7432.5,1493.5574 7463.13,1517.1094 " fill="none" id="urt_osCondvar_t-urt_osMutex_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7467.2,1520.2694,7462.5505,1511.5871,7463.2529,1517.2002,7457.6398,1517.9025,7467.2,1520.2694" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osCondvar_t to urt_delay_t--><path d="M4648.44,1258.0164 C4578.45,1313.8684 4454.13,1402.4474 4329.92,1438.8594 C4248.65,1462.6824 3652.57,1453.2294 3567.92,1455.8594 C2446.28,1490.7064 1075.96,1552.9394 786.296,1566.2924 " fill="none" id="urt_osCondvar_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.287,1566.5234,790.4614,1570.1052,786.2817,1566.2934,790.0935,1562.1137,781.287,1566.5234" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osCondvar_t to urt_condvarStatus_t--><path d="M4705.92,1258.2174 C4705.92,1327.4464 4705.92,1453.2524 4705.92,1521.5984 " fill="none" id="urt_osCondvar_t-urt_condvarStatus_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="4705.92,1526.8214,4709.92,1517.8214,4705.92,1521.8214,4701.92,1517.8214,4705.92,1526.8214" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osTimer_t to urt_delay_t--><path d="M3583.3,1250.2054 C2823.04,1335.1374 1114.94,1525.9584 786.23,1562.6804 " fill="none" id="urt_osTimer_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.026,1563.2624,790.414,1566.2399,785.9952,1562.708,789.527,1558.2892,781.026,1563.2624" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osTimer_t to urt_status_t--><path d="M3583.08,1257.0034 C3143.34,1311.9864 2382.62,1399.8334 1726.92,1438.8594 C1667.91,1442.3714 716.629,1431.1524 662.921,1455.8594 C632.661,1469.7794 607.792,1497.7464 590.423,1522.3734 " fill="none" id="urt_osTimer_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="587.484,1526.6104,595.9004,1521.4952,590.3338,1522.502,589.327,1516.9355,587.484,1526.6104" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osTimer_t to urt_osTimerCallback_t--><path d="M3933.84,1258.2174 C3911.07,1331.9374 3868.5,1469.8114 3848.64,1534.1424 " fill="none" id="urt_osTimer_t-urt_osTimerCallback_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="3847.13,1539.0184,3853.6086,1531.6003,3848.6061,1534.2412,3845.9652,1529.2386,3847.13,1539.0184" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osThread_t to urt_osThreadPrio_t--><path d="M5258.12,1439.0714 C5231.25,1480.0084 5206.84,1517.1894 5191.1,1541.1594 " fill="none" id="urt_osThread_t-urt_osThreadPrio_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="5188.27,1545.4794,5196.5498,1540.146,5191.0115,1541.2979,5189.8595,1535.7596,5188.27,1545.4794" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osThread_t to urt_osThreadFunction_t--><path d="M5408.92,1439.0714 C5408.92,1476.1724 5408.92,1510.1884 5408.92,1534.0814 " fill="none" id="urt_osThread_t-urt_osThreadFunction_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="5408.92,1539.3254,5412.92,1530.3254,5408.92,1534.3254,5404.92,1530.3254,5408.92,1539.3254" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osThread_t to urt_osTime_t--><path d="M5715.7,1391.1894 C5760.15,1410.6874 5806.32,1427.5244 5851.92,1438.8594 C5950.97,1463.4784 7592.44,1422.5644 7688.92,1455.8594 C7731.44,1470.5324 7771.33,1502.8514 7798.81,1529.1824 " fill="none" id="urt_osThread_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7802.43,1532.6914,7798.7388,1523.5604,7798.8349,1529.2164,7793.1789,1529.3125,7802.43,1532.6914" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osThread_t to urt_osThreadTerminateSignal_t--><path d="M5589.11,1439.0714 C5616.15,1473.5444 5641.11,1505.3534 5659.54,1528.8534 " fill="none" id="urt_osThread_t-urt_osThreadTerminateSignal_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="5662.67,1532.8474,5660.2543,1523.2994,5659.5806,1528.916,5653.964,1528.2424,5662.67,1532.8474" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osEventListener_t to urt_osEventFlags_t--><path d="M6976.67,1612.8774 C6929.92,1629.7384 6875.04,1648.9134 6824.92,1664.8594 C6782.8,1678.2594 6735.43,1691.7594 6696.44,1702.4584 " fill="none" id="urt_osEventListener_t-urt_osEventFlags_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6691.25,1703.8824,6700.985,1705.3753,6696.0741,1702.5678,6698.8817,1697.6568,6691.25,1703.8824" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osEventSource_t to urt_osEventFlags_t--><path d="M6253.5,1606.9184 C6307.66,1624.4174 6373.68,1645.7414 6432.92,1664.8594 C6467.89,1676.1454 6506.63,1688.6354 6539.42,1699.2064 " fill="none" id="urt_osEventSource_t-urt_osEventFlags_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6544.22,1700.7514,6536.8746,1694.1905,6539.4596,1699.2222,6534.4279,1701.8072,6544.22,1700.7514" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_osEventSource_t--><path d="M6223.98,1251.6554 C6206.01,1321.1194 6170.47,1458.5144 6152.64,1527.4164 " fill="none" id="urt_events-urt_osEventSource_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6151.29,1532.6604,6157.4145,1524.9474,6152.5409,1527.8194,6149.6689,1522.9458,6151.29,1532.6604" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_osEventListener_t--><path d="M6285,1251.3874 C6352.83,1305.5704 6479.93,1397.7044 6605.92,1438.8594 C6698.72,1469.1734 6730.1,1432.6274 6824.92,1455.8594 C6887.76,1471.2544 6954.75,1499.9394 7005.65,1524.5554 " fill="none" id="urt_events-urt_osEventListener_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7010.22,1526.7724,7003.8739,1519.2406,7005.723,1524.5867,7000.3769,1526.4358,7010.22,1526.7724" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_osEventMask_t--><path d="M6269.04,1251.6554 C6329.26,1326.3014 6452.75,1479.3924 6502.96,1541.6374 " fill="none" id="urt_events-urt_osEventMask_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6506.16,1545.6044,6503.6145,1536.0902,6503.0174,1541.7154,6497.3921,1541.1184,6506.16,1545.6044" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_status_t--><path d="M6181.6,1251.4274 C6107.36,1307.0474 5966.34,1402.2784 5827.92,1438.8594 C5758.57,1457.1884 728.281,1426.2924 662.921,1455.8594 C632.461,1469.6384 607.519,1497.7614 590.163,1522.5024 " fill="none" id="urt_events-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="587.228,1526.7584,595.6306,1521.6206,590.0668,1522.6424,589.045,1517.0786,587.228,1526.7584" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_osEventWaitType_t--><path d="M6312.42,1251.5514 C6392.52,1296.8964 6519.27,1373.6194 6616.92,1455.8594 C6640.73,1475.9084 6664.45,1501.1694 6683.21,1522.7204 " fill="none" id="urt_events-urt_osEventWaitType_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6686.65,1526.6984,6683.7723,1517.2793,6683.3729,1522.9221,6677.7302,1522.5227,6686.65,1526.6984" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_delay_t--><path d="M6181.26,1251.5794 C6106.91,1307.1344 5966.07,1402.0374 5827.92,1438.8594 C5767.26,1455.0284 3630.68,1454.3734 3567.92,1455.8594 C2446.05,1482.4144 1075.91,1551.1034 786.287,1565.9874 " fill="none" id="urt_events-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.279,1566.2454,790.4718,1569.7798,786.2725,1565.9896,790.0626,1561.7903,781.279,1566.2454" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_rtclass_t to urt_rtclasstype_t--><path d="M1506.92,591.4894 C1506.92,637.1594 1506.92,704.8194 1506.92,750.4194 " fill="none" id="urt_rtclass_t-urt_rtclasstype_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1506.92,578.3694,1502.92,584.3694,1506.92,590.3694,1510.92,584.3694,1506.92,578.3694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1498.2325" y="598.1314">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1498.3825" y="739.762">1</text><!--link urt_rtclass_t to urt_rtclassparams_t--><path d="M1470.37,588.8694 C1434.47,634.5394 1379.93,703.9294 1343.39,750.4194 " fill="none" id="urt_rtclass_t-urt_rtclassparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1478.62,578.3694,1471.7654,580.6088,1471.1962,587.7974,1478.0508,585.558,1478.62,578.3694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1465.0684" y="598.1314">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1340.0219" y="739.762">1</text><!--link urt_rtclassparams_t to urt_hrtparams_t--><path d="M1214.68,830.8014 C1183,844.9664 1149.48,864.8764 1125.92,891.8594 C1055.89,972.0794 1030.24,1099.6844 1021.33,1165.3224 " fill="none" id="urt_rtclassparams_t-urt_hrtparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1226.71,825.6514,1219.6188,824.3419,1215.6826,830.384,1222.7739,831.6935,1226.71,825.6514" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1210.8744" y="824.41">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1023.9452" y="1154.3125">0..1</text><!--link urt_rtclassparams_t to urt_frtparams_t--><path d="M1367.38,857.8954 C1381.51,868.0724 1397.05,877.4644 1412.92,883.8594 C1441.97,895.5634 1458.11,872.7494 1482.92,891.8594 C1564.65,954.8264 1592.13,1079.7364 1601.33,1152.0674 " fill="none" id="urt_rtclassparams_t-urt_frtparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1356.86,849.9954,1359.2513,856.7984,1366.4508,857.2076,1364.0595,850.4046,1356.86,849.9954" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1355.6016" y="870.091">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1575.3081" y="1141.3663">0..1</text><!--link urt_rtclassparams_t to urt_srtparams_t--><path d="M1304.92,863.1194 C1304.92,949.0264 1304.92,1101.8374 1304.92,1171.2574 " fill="none" id="urt_rtclassparams_t-urt_srtparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1304.92,849.9294,1300.92,855.9294,1304.92,861.9294,1308.92,855.9294,1304.92,849.9294" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1296.3575" y="870.0157">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1278.7825" y="1160.4262">0..1</text><!--link urt_rtclassparams_t to urt_nrtparams_t--><path d="M1213.91,811.1834 C1110.65,824.1514 950.981,850.3254 907.921,891.8594 C824.491,972.3324 820.751,1125.5664 822.622,1183.9624 " fill="none" id="urt_rtclassparams_t-urt_nrtparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1226.83,809.5914,1220.3834,806.3601,1214.9212,811.0681,1221.3678,814.2993,1226.83,809.5914" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1211.0058" y="806.8171">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="795.3804" y="1173.2706">0..1</text><!--link urt_hrtparams_t to urt_delay_t--><path d="M1003.628,1251.7904 C986.809,1300.6884 954.215,1381.6474 906.921,1438.8594 C873.081,1479.7954 823.706,1514.7944 785.86,1538.1294 " fill="none" id="urt_hrtparams_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.303,1540.9174,791.0675,1539.6307,785.5676,1538.3072,786.8911,1532.8073,781.303,1540.9174" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_hrtparams_t to urt_osTimer_t--><path d="M1020.21,1152.0084 C1027.49,1080.7564 1050.89,959.2684 1125.92,891.8594 C1131.86,886.5274 1135.49,888.7544 1143.42,887.8594 C1174.67,884.3334 1678.06,885.6264 1709.42,887.8594 C2430.53,939.1974 3272.41,1082.3954 3688.61,1158.8204 " fill="none" id="urt_hrtparams_t-urt_osTimer_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1018.99,1165.1304,1023.5268,1159.5253,1020.0978,1153.1816,1015.561,1158.7867,1018.99,1165.1304" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1010.6943" y="1154.4079">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3643.4414" y="1147.8601">1</text><!--link urt_frtparams_t to urt_delay_t--><path d="M1591.67,1264.3714 C1574.86,1317.7184 1541.49,1396.6064 1482.92,1438.8594 C1370.69,1519.8284 940.89,1555.2174 786.528,1565.4994 " fill="none" id="urt_frtparams_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.154,1565.8544,790.3984,1569.2516,786.1431,1565.5243,789.8703,1561.269,781.154,1565.8544" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_frtparams_t to urt_osTimer_t--><path d="M1723.86,1208.3594 C2343.69,1208.3594 2963.51,1208.3594 3583.34,1208.3594 " fill="none" id="urt_frtparams_t-urt_osTimer_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1710.6,1208.3594,1716.6,1212.3594,1722.6,1208.3594,1716.6,1204.3594,1710.6,1208.3594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1718.5812" y="1204.8795">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3567.8329" y="1205.2731">1</text><!--link urt_frtparams_t to urt_osTimerCallback_t--><path d="M1723.68,1228.3264 C2101.55,1289.1884 3282.78,1479.4454 3694.59,1545.7734 " fill="none" id="urt_frtparams_t-urt_osTimerCallback_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1710.58,1226.2164,1715.8661,1231.1212,1722.4267,1228.1282,1717.1406,1223.2234,1710.58,1226.2164" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1718.5597" y="1224.0479">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3678.9933" y="1541.2201">1</text><!--link urt_srtparams_t to urt_delay_t--><path d="M1285.92,1245.4534 C1257.61,1295.8544 1199.69,1386.9544 1125.92,1438.8594 C1019.47,1513.7624 867.044,1547.6414 786.197,1561.1284 " fill="none" id="urt_srtparams_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="780.977,1561.9874,790.5075,1564.4713,785.9105,1561.1746,789.2071,1556.5777,780.977,1561.9874" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_message_t to urt_message_t--><path d="M2341.49,766.8794 C2355.82,774.8394 2364.42,785.9994 2364.42,800.3594 C2364.42,818.3744 2350.87,831.3574 2329.45,839.3094 " fill="none" id="urt_message_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2329.45,761.4094,2333.2592,767.5323,2340.3762,766.371,2336.567,760.2481,2329.45,761.4094" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2337.6987" y="756.805">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="2337.244" y="837.4064">0..1</text><!--link urt_message_t to urt_osTime_t--><path d="M2342.48,879.5614 C2350.69,881.1734 2358.85,882.6164 2366.92,883.8594 C2384.37,886.5464 7437.52,881.6494 7451.92,891.8594 C7662.25,1040.9334 7465.34,1253.8984 7644.92,1438.8594 C7659.52,1453.9004 7670.65,1445.5884 7688.92,1455.8594 C7727.65,1477.6234 7767.34,1508.7604 7795.7,1532.8394 " fill="none" id="urt_message_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2329.56,876.8944,2334.6273,882.0249,2341.3121,879.3208,2336.2449,874.1902,2329.56,876.8944" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2337.0951" y="891.7169">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7779.5469" y="1521.7461">1</text><!--link urt_message_t to urt_osMutex_t--><path d="M2342.48,879.5614 C2350.69,881.1734 2358.85,882.6164 2366.92,883.8594 C2384.03,886.4944 7339.29,881.1914 7352.92,891.8594 C7403.61,931.5144 7486.59,1371.8094 7513.33,1520.2954 " fill="none" id="urt_message_t-urt_osMutex_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2329.56,876.8944,2334.6273,882.0249,2341.3121,879.3208,2336.2449,874.1902,2329.56,876.8944" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2337.0951" y="876.2247">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7503.5595" y="1509.3316">1</text><!--link urt_message_t to urt_osCondvar_t--><path d="M2342.49,879.5354 C2350.69,881.1544 2358.85,882.6064 2366.92,883.8594 C2393.86,888.0424 4304.32,882.4824 4329.92,891.8594 C4476.75,945.6394 4606.27,1084.4244 4667.86,1158.7194 " fill="none" id="urt_message_t-urt_osCondvar_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2329.56,876.8574,2334.6272,881.9881,2341.3121,879.284,2336.2449,874.1533,2329.56,876.8574" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2337.1441" y="894.8265">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="4653.9453" y="1147.7449">1</text><!--link urt_subscriber_t to urt_subscriber_t--><path d="M1956.41,213.2694 C1971.06,221.4494 1979.42,231.6494 1979.42,243.8594 C1979.42,259.0394 1966.51,271.0994 1944.66,280.0494 " fill="none" id="urt_subscriber_t-urt_subscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1944.66,207.6694,1948.3571,213.8606,1955.4941,212.8291,1951.7969,206.6379,1944.66,207.6694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1952.0462" y="203.9859">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1952.1837" y="277.6099">0..1</text><!--link urt_subscriber_t to urt_topic_t--><path d="M1729.44,372.4094 C1760.24,390.1294 1791.99,408.2394 1822.85,425.6994 " fill="none" id="urt_subscriber_t-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1718.13,365.8994,1721.332,372.3606,1728.5277,371.89,1725.3257,365.4287,1718.13,365.8994" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1722.0256" y="385.862">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1784.4315" y="414.8721">0..1</text><!--link urt_topic_t to urt_subscriber_t--><path d="M1836.91,418.9994 C1806.49,401.4694 1774.92,383.4294 1744,365.8994 " fill="none" id="urt_topic_t-urt_subscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1848.5,425.6994,1845.3041,419.2351,1838.108,419.6989,1841.3038,426.1631,1848.5,425.6994" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1828.2372" y="414.8721">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="1734.015" y="385.862">0..*</text><!--link urt_subscriber_t to urt_osEventListener_t--><path d="M1957.64,362.3494 C1965.11,363.5894 1972.54,364.7594 1979.92,365.8594 C2657.86,466.7894 2836.61,387.1494 3520.92,425.8594 C4393.03,475.1894 6650.59,344.8394 7440.92,716.8594 C7739.01,857.1754 7834.39,1198.6344 7608.92,1438.8594 C7588.5,1460.6154 7369.88,1448.6744 7340.92,1455.8594 C7278.77,1471.2794 7212.91,1501.5164 7164.26,1526.8354 " fill="none" id="urt_subscriber_t-urt_osEventListener_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1944.59,360.1294,1949.8374,365.0756,1956.4213,362.1342,1951.174,357.188,1944.59,360.1294" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1951.975" y="359.0663">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7167.4704" y="1515.8276">1</text><!--link urt_subscriber_t to urt_rtclass_t--><path d="M1513.47,379.0994 C1511.61,424.9594 1509.67,472.5694 1508.39,504.0594 " fill="none" id="urt_subscriber_t-urt_rtclass_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1514.01,365.8994,1509.7693,371.7317,1513.522,377.8894,1517.7627,372.0571,1514.01,365.8994" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1505.467" y="385.862">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1499.9393" y="493.1929">1</text><!--link urt_subscriber_t to urt_message_t--><path d="M1691.74,376.1294 C1705.17,391.6994 1717.24,408.3294 1726.92,425.8594 C1777.16,516.8094 1698.82,575.0794 1762.92,656.8594 C1792.61,694.7294 1834.17,722.6494 1878.1,743.1894 " fill="none" id="urt_subscriber_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1682.74,366.0594,1683.7561,373.1985,1690.7369,375.0064,1689.7208,367.8673,1682.74,366.0594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1684.479" y="386.0318">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1846.2965" y="738.1325">0..1</text><!--link urt_subscriber_t to urt_osTime_t--><path d="M1957.6,362.5694 C1965.09,363.7394 1972.53,364.8394 1979.92,365.8594 C2737.09,470.2994 4656.79,367.8594 5418.92,425.8594 C6380.85,499.0694 6740.94,223.4494 7569.92,716.8594 C7862.2,890.8224 7848.82,1392.8324 7839.07,1532.4474 " fill="none" id="urt_subscriber_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1944.55,360.4694,1949.8357,365.3747,1956.3966,362.3822,1951.1109,357.477,1944.55,360.4694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1951.9343" y="374.6699">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7830.9239" y="1521.84">1</text><!--link urt_subscriber_t to urt_delay_t--><path d="M1080.51,364.8794 C1078.98,365.2094 1077.45,365.5394 1075.92,365.8594 C988.626,384.3094 737.107,358.2194 678.921,425.8594 C397.814,752.6394 630.634,1346.6954 708.096,1520.1124 " fill="none" id="urt_subscriber_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1093.28,362.1194,1086.5686,359.4818,1081.5526,364.6625,1088.264,367.3001,1093.28,362.1194" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1077.8956" y="361.0905">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="696.3237" y="1509.1229">2</text><!--link urt_subscriber_t to urt_status_t--><path d="M1093.34,362.4094 C1087.5,363.5894 1081.69,364.7394 1075.92,365.8594 C962.147,387.8594 652.877,359.4394 557.921,425.8594 C179.279,690.7094 17.8076,1092.7224 323.921,1438.8594 C344.39,1462.0054 434.543,1441.5364 461.921,1455.8594 C491.123,1471.1364 515.928,1498.5154 533.648,1522.4964 " fill="none" id="urt_subscriber_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="536.651,1526.6214,534.5884,1516.9909,533.7084,1522.5789,528.1204,1521.699,536.651,1526.6214" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_subscriber_t to urt_topicid_t--><path d="M1093.39,362.7094 C1087.54,363.7994 1081.71,364.8494 1075.92,365.8594 C907.049,395.2394 445.989,325.6594 306.921,425.8594 C-31.5844,669.7694 240.178,1281.0434 349.545,1494.1634 " fill="none" id="urt_subscriber_t-urt_topicid_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="351.939,1498.8154,351.3762,1488.9826,349.6505,1494.3698,344.2633,1492.6442,351.939,1498.8154" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_publisher_t to urt_topic_t--><path d="M2293.44,317.1994 C2255.75,349.8594 2210.31,389.2394 2168.16,425.7594 " fill="none" id="urt_publisher_t-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2303.35,308.6194,2296.1959,309.5246,2294.28,316.4765,2301.434,315.5713,2303.35,308.6194" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2287.3506" y="328.1538">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2168.3754" y="414.9359">1</text><!--link urt_publisher_t to urt_message_t--><path d="M2372.2,308.3994 C2363.71,416.6494 2345.07,627.9994 2326.92,656.8594 C2313.39,678.3694 2295.3,697.2394 2275.24,713.5994 " fill="none" id="urt_publisher_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="2271.21,716.8394,2280.7332,714.3278,2275.1102,713.7107,2275.7273,708.0876,2271.21,716.8394" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_publisher_t to urt_osTime_t--><path d="M2756.46,250.0894 C4001.89,268.1394 7889.97,331.9194 7980.92,425.8594 C8137.51,587.5894 8072.7,1233.3074 7980.92,1438.8594 C7964.23,1476.2344 7930.9,1507.3334 7900.4,1529.7324 " fill="none" id="urt_publisher_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7896.31,1532.6974,7905.9466,1530.6635,7900.3612,1529.7669,7901.2578,1524.1815,7896.31,1532.6974" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_publisher_t to urt_delay_t--><path d="M2201.82,308.4394 C2133.49,330.5394 2053.93,352.9894 1979.92,365.8594 C1844.24,389.4494 837.394,326.6094 741.921,425.8594 C590.993,582.7594 690.7,1310.3464 722.283,1515.1094 " fill="none" id="urt_publisher_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="723.061,1520.1404,725.6383,1510.6347,722.2967,1515.1991,717.7323,1511.8575,723.061,1520.1404" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_publisher_t to urt_status_t--><path d="M2202.33,308.3994 C2133.9,330.5594 2054.12,353.0694 1979.92,365.8594 C1835.45,390.7594 782.952,343.1394 661.921,425.8594 C284.195,683.9994 349.484,1000.0414 478.921,1438.8594 C487.868,1469.1924 506.342,1499.1114 523.693,1522.5854 " fill="none" id="urt_publisher_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="526.691,1526.5934,524.5009,1516.9911,523.6951,1522.5903,518.0959,1521.7845,526.691,1526.5934" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_topic_t to urt_topic_t--><path d="M2303.78,509.4194 C2318,517.2594 2326.42,527.9094 2326.42,541.3594 C2326.42,558.2394 2313.16,570.6994 2291.83,578.7494 " fill="none" id="urt_topic_t-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2291.83,503.9694,2295.627,510.0999,2302.7463,508.9529,2298.9493,502.8224,2291.83,503.9694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2299.5461" y="499.7016">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="2299.7836" y="576.7017">0..1</text><!--link urt_topic_t to urt_osMutex_t--><path d="M2304.45,643.5994 C2324.39,648.7994 2344.35,653.3194 2363.92,656.8594 C2920.83,757.5194 7046.14,497.3594 7451.92,891.8594 C7626.02,1061.1224 7565.72,1394.8864 7535.15,1519.9794 " fill="none" id="urt_topic_t-urt_osMutex_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2291.7,640.1794,2296.4576,645.5984,2303.2896,643.291,2298.532,637.872,2291.7,640.1794" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2299.4122" y="655.4007">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7528.3903" y="1509.3301">1</text><!--link urt_topic_t to urt_osEventSource_t--><path d="M2304.56,642.9794 C2324.47,648.3294 2344.4,653.0494 2363.92,656.8594 C2892.83,760.0494 3036.81,688.0694 3574.92,716.8594 C3913.33,734.9694 6387.26,645.4494 6619.92,891.8594 C6786.82,1068.6274 6783.86,1259.3404 6619.92,1438.8594 C6591.78,1469.6714 6473.54,1446.3254 6432.92,1455.8594 C6357.34,1473.5984 6275.23,1506.8674 6217.56,1532.7314 " fill="none" id="urt_topic_t-urt_osEventSource_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2291.83,639.4794,2296.5556,644.9263,2303.4011,642.6591,2298.6754,637.2122,2291.83,639.4794" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2299.5461" y="654.6799">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="6222.3209" y="1521.8955">1</text><!--link urt_topic_t to urt_osTimer_t--><path d="M2304.59,642.8294 C2324.5,648.2094 2344.42,652.9894 2363.92,656.8594 C2596.2,702.9994 3210.33,623.3794 3427.92,716.8594 C3654.21,814.0804 3842.47,1054.8834 3915.89,1158.5804 " fill="none" id="urt_topic_t-urt_osTimer_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2291.86,639.3094,2296.5798,644.7613,2303.4277,642.5014,2298.7078,637.0495,2291.86,639.3094" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2299.577" y="639.0595">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3902.9141" y="1147.9446">1</text><!--link urt_topic_t to urt_message_t--><path d="M2056.87,669.6994 C2061.07,685.6294 2065.53,701.5794 2070.01,716.5694 " fill="none" id="urt_topic_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2053.56,656.9594,2051.1908,663.7702,2056.5665,668.5766,2058.9357,661.7658,2053.56,656.9594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2046.4764" y="677.2926">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="2043.1076" y="705.7863">1..*</text><!--link urt_topic_t to urt_message_t--><path d="M2083.11,669.6994 C2087.34,685.6294 2091.3,701.5794 2094.73,716.5694 " fill="none" id="urt_topic_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2079.67,656.9594,2077.3718,663.7945,2082.7973,668.5447,2085.0954,661.7096,2079.67,656.9594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2074.3407" y="677.2926">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2085.5965" y="705.7863">1</text><!--link urt_topic_t to urt_topicid_t--><path d="M1767.15,647.3694 C1753.65,650.9294 1740.19,654.1294 1726.92,656.8594 C1596.8,683.5794 637.789,635.3294 532.921,716.8594 C292.402,903.8554 343.537,1330.5024 374.921,1498.7664 " fill="none" id="urt_topic_t-urt_topicid_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1780.1,643.8394,1773.26,641.5557,1768.5213,646.9912,1775.3613,649.2749,1780.1,643.8394" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1764.3866" y="643.724">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="364.9616" y="1487.7541">1</text><!--link urt_topic_t to urt_osTime_t--><path d="M2291.65,640.4094 C2315.82,647.0094 2340.16,652.6794 2363.92,656.8594 C2884.19,748.4394 6599.08,617.5294 7117.92,716.8594 C7331.53,757.7594 7420.96,738.2394 7574.92,891.8594 C7761.42,1077.9344 7817.39,1411.8214 7831.63,1527.8184 " fill="none" id="urt_topic_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7832.24,1532.8454,7835.1301,1523.4301,7831.6395,1527.8816,7827.188,1524.3909,7832.24,1532.8454" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_topic_t to urt_status_t--><path d="M1780.06,643.6294 C1762.24,648.6794 1744.41,653.1694 1726.92,656.8594 C1512.35,702.1094 945.366,635.0094 741.921,716.8594 C630.471,761.6994 586.36,782.8294 535.921,891.8594 C435.673,1108.5594 511.373,1407.2404 547.027,1521.6594 " fill="none" id="urt_topic_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="548.59,1526.6394,549.7121,1516.8546,547.0931,1521.8687,542.079,1519.2497,548.59,1526.6394" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_core_t to urt_topic_t--><path d="M980.075,314.0894 C1008.83,334.1594 1042.26,353.8794 1075.92,365.8594 C1349.67,463.2694 1443.58,361.4894 1726.92,425.8594 C1744.49,429.8494 1762.42,434.5994 1780.35,439.8394 " fill="none" id="urt_core_t-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="969.294,306.3894,971.8507,313.132,979.058,313.3654,976.5013,306.6227,969.294,306.3894" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="977.7567" y="326.1325">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="1749.4214" y="433.6678">0..*</text><!--link urt_core_t to urt_node_t--><path d="M978.968,314.3994 C1007.88,334.7294 1041.69,354.5194 1075.92,365.8594 C1340.12,453.3794 2050.51,393.3194 2326.92,425.8594 C2361.67,429.9494 2397.42,434.8594 2433.35,440.3094 " fill="none" id="urt_core_t-urt_node_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="968.136,306.5994,970.6647,313.3526,977.871,313.6157,975.3423,306.8625,968.136,306.5994" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="967.597" y="326.3654">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="2372.7449" y="429.4221">0..*</text><!--link urt_core_t to urt_status_t--><path d="M733.214,258.9494 C526.453,280.6094 187.171,330.0294 110.921,425.8594 C22.2604,537.2894 51.7099,1256.5464 252.921,1438.8594 C287.452,1470.1474 420.193,1435.1184 461.921,1455.8594 C491.656,1470.6394 516.619,1498.3084 534.289,1522.5664 " fill="none" id="urt_core_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="537.282,1526.7394,535.2866,1517.0948,534.3677,1522.6765,528.786,1521.7576,537.282,1526.7394" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_core_t to urt_topicid_t--><path d="M733.21,256.3994 C513.973,275.7094 141.471,323.0594 57.9209,425.8594 C-24.1507,526.8394 1.6902,1345.6994 65.9209,1438.8594 C125.808,1525.7184 254.056,1554.5614 330.01,1564.1264 " fill="none" id="urt_core_t-urt_topicid_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="335.386,1564.7824,326.9369,1559.7215,330.4228,1564.1766,325.9677,1567.6626,335.386,1564.7824" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_nodeSetupCallback_t to urt_node_t--><path d="M2622.99,769.6094 C2659.94,739.2394 2723.68,690.3394 2783.92,645.6694 " fill="none" id="urt_nodeSetupCallback_t-urt_node_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="2788.25,642.4594,2778.6363,644.5989,2784.2312,645.4341,2783.396,651.029,2788.25,642.4594" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_node_t to urt_nodeSetupCallback_t--><path d="M2803.35,650.5094 C2746.34,693.8394 2683.02,740.3294 2640.53,769.6094 " fill="none" id="urt_node_t-urt_nodeSetupCallback_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2813.92,642.4594,2806.723,642.91,2804.3709,649.7267,2811.5679,649.2761,2813.92,642.4594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2797.2013" y="662.179">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2641.7308" y="758.821">1</text><!--link urt_nodeSetupCallback_t to urt_status_t--><path d="M2533.05,830.8824 C2491.22,850.1684 2433.08,873.6104 2378.92,883.8594 C2366.84,886.1464 616.882,883.4364 607.921,891.8594 C517.356,976.9884 545.527,1381.8334 558.216,1521.4194 " fill="none" id="urt_nodeSetupCallback_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="558.698,1526.6714,561.8583,1517.3433,558.2408,1521.6923,553.8918,1518.0748,558.698,1526.6714" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_nodeLoopCallback_t to urt_node_t--><path d="M3093.41,769.6094 C3067.7,739.4794 3030.6,691.1194 2998.54,646.7394 " fill="none" id="urt_nodeLoopCallback_t-urt_node_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="2995.45,642.4594,2997.4742,652.098,2998.3764,646.5135,3003.9609,647.4157,2995.45,642.4594" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_node_t to urt_nodeLoopCallback_t--><path d="M3029.05,652.9394 C3061.13,695.5694 3093.18,740.8794 3110.95,769.6094 " fill="none" id="urt_node_t-urt_nodeLoopCallback_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="3021.13,642.4594,3021.5585,649.6577,3028.3679,652.0308,3027.9394,644.8325,3021.13,642.4594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3018.9807" y="662.179">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3099.4499" y="758.821">1</text><!--link urt_nodeLoopCallback_t to urt_osEventMask_t--><path d="M3412.16,803.5094 C4239.15,810.3634 6564.21,834.6854 6619.92,891.8594 C6704.75,978.9174 6657.64,1323.3054 6619.92,1438.8594 C6606.75,1479.2174 6575.77,1517.4444 6552.75,1541.8644 " fill="none" id="urt_nodeLoopCallback_t-urt_osEventMask_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6549.12,1545.6634,6558.2277,1541.9151,6552.5724,1542.0466,6552.4409,1536.3913,6549.12,1545.6634" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_nodeLoopCallback_t to urt_status_t--><path d="M3038.09,830.9214 C2977.42,850.2254 2893.72,873.6724 2817.92,883.8594 C2803.63,885.7794 753.292,882.9974 741.921,891.8594 C543.989,1046.1244 669.101,1197.0714 601.921,1438.8594 C594.233,1466.5284 585.026,1497.3174 577.489,1521.9834 " fill="none" id="urt_nodeLoopCallback_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="576.004,1526.8324,582.4647,1519.3987,577.4685,1522.0517,574.8155,1517.0555,576.004,1526.8324" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_node_t to urt_node_t--><path d="M3498.34,517.5094 C3512.81,524.1294 3520.92,532.0694 3520.92,541.3594 C3520.92,553.0094 3508.15,562.5594 3486.06,569.9994 " fill="none" id="urt_node_t-urt_node_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="3486.06,512.7194,3490.1949,518.6273,3497.2386,517.0827,3493.1038,511.1748,3486.06,512.7194" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3493.8807" y="509.2814">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="3493.9932" y="582.5778">0..1</text><!--link urt_node_t to urt_osThread_t--><path d="M3498.98,599.1094 C4032.47,659.1594 4789.54,762.9994 5057.92,891.8594 C5104.27,914.1134 5148.99,944.4144 5190.09,977.4794 " fill="none" id="urt_node_t-urt_osThread_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="3486.02,597.6494,3491.5337,602.2969,3497.9443,598.9948,3492.4306,594.3473,3486.02,597.6494" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3493.8402" y="595.4057">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="5174.7784" y="966.7275">1</text><!--link urt_node_t to urt_osEventMask_t--><path d="M3499.29,552.1994 C4559.46,572.6794 6770.13,625.7094 7108.92,716.8594 C7270.37,760.2994 7355.46,748.7594 7441.92,891.8594 C7567.64,1099.9434 7612.05,1265.1924 7441.92,1438.8594 C7409.84,1471.6074 6658.12,1435.7524 6616.92,1455.8594 C6578.27,1474.7224 6550.38,1518.3634 6536.01,1545.5564 " fill="none" id="urt_node_t-urt_osEventMask_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="3486.09,551.9394,3492.0096,556.0574,3498.0876,552.177,3492.168,548.0589,3486.09,551.9394" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3493.9111" y="549.0529">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="6529.7382" y="1534.8875">1</text><!--link urt_node_t to urt_osEventWaitType_t--><path d="M3499.35,545.7994 C4599.4,555.2894 6950.55,590.2794 7297.92,716.8594 C7613.84,831.9764 7758.77,1198.2274 7523.92,1438.8594 C7496.79,1466.6584 6860.3,1439.8224 6824.92,1455.8594 C6792.26,1470.6644 6765.21,1501.1044 6746.89,1526.6644 " fill="none" id="urt_node_t-urt_osEventWaitType_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="3486.07,545.6894,3492.0346,549.742,3498.0695,545.7949,3492.1049,541.7423,3486.07,545.6894" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3493.8909" y="557.926">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="6742.2542" y="1515.9471">1</text><!--link urt_node_t to urt_osThreadTerminateSignal_t--><path d="M3485.95,545.1094 C4613.19,556.4794 7095.47,613.2394 7352.92,891.8594 C7517.91,1070.4134 7523.85,1265.9834 7352.92,1438.8594 C7323.6,1468.5104 5891.61,1443.0734 5851.92,1455.8594 C5806.5,1470.4904 5762.7,1502.8134 5732.28,1529.1564 " fill="none" id="urt_node_t-urt_osThreadTerminateSignal_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="5728.27,1532.6664,5737.6807,1529.7615,5732.0369,1529.3784,5732.42,1523.7345,5728.27,1532.6664" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+title **µRtWare**\nOverview\n
+
+
+
+package "primitives" {
+
+  class urt_delay_t <<(T,lightblue)>> {
+    .. either ..
+    uint32_t
+    .. or ..
+    uint64_t
+  }
+
+  enum urt_status_t {
+    URT_STATUS_OK = 0
+    URT_STATUS_WARNING = 1
+    URT_STATUS_ERROR = -1
+  }
+  
+  class urt_topicid_t <<(T,lightblue)>> {
+    uin8_t
+    .. or ..
+    uint16_t
+    .. or ..
+    uint32_t
+    .. or ..
+    uint64_t
+  }
+
+} 
+
+
+
+package "interfaces" {
+
+  class urt_osTime_t <<(T,lightblue)>> {
+    + urtTime2Us (t : urt_osTime_t*) : uint64_t
+    + urtTimeNow (void) : urt_osTime_t
+  }
+
+  class urt_osMutex_t <<(T,lightblue)>> {
+    + urtMutexInit (mutex : urt_osmutex_t*) : void
+    + urtMutexLock (mutex : urt_osmutex_t*) : void
+    + urtMutexTryLock (mutex : urt_osmutex_t*) : bool
+    + urtMutexUnlock (mutex : urt_osmutex_t*) : void
+  }
+
+  package "condition variable" {
+
+    enum urt_condvarStatus_t {
+      + URT_CONDVAR_STATUS_SIGNAL = 0
+      + URT_CONDVAR_STATUS_BROADCAST = 1
+      + URT_CONDVAR_STATUS_TIMEOUT = 2
+    }
+
+    class urt_osCondvar_t <<(T,lightblue)>> {
+      + urtCondvarInit (condvar : urt_osCondvar_t*) : void
+      + urtConvarSignal (condvar : urt_osCondvar_t*) : void
+      + urtCondvarBroadcast (condvar : urt_osCondvar_t*) : void
+      + urtCondvarWait (condvar : urt_osCondvar_t*, mutex : urt_osMutex_t*, timeout : urt_delay_t) : urt_condvarStatus_t
+    }
+    urt_osCondvar_t ..> urt_osMutex_t
+    urt_osCondvar_t ..> urt_delay_t
+    urt_osCondvar_t ..> urt_condvarStatus_t
+
+  } 
+
+  package "timer" {
+
+    class urt_osTimerCallback_t <<(T,lightblue)>> {
+      urt_osTimerCallback_t (parameter : void*) : void
+    }
+  
+    class urt_osTimer_t <<(T,lightblue)>> {
+      + urtTimerInit (timer : urt_osTimer_t*) : void
+      + urtTimerSet (timer : urt_osTimer_t*, delay : urt_delay_t, callback : urt_osTimerCallback_t*, parameter : void*) : urt_status_t
+      + urtTimerReset (timer : urt_osTimer_t*) : urt_status_t
+      + urtTimerIsArmed (timer : urt_timer_t*) : bool
+    }
+    urt_osTimer_t ..> urt_delay_t
+    urt_osTimer_t ..> urt_status_t
+    urt_osTimer_t ..> urt_osTimerCallback_t
+
+  } 
+
+  package "thread" {
+
+    class urt_osThreadPrio_t <<(T,lightblue)>>
+
+    class urt_osThreadFunction_t <<(T,lightblue)>> {
+      urt_osThreadFunction_t (arg : void*) : void
+    }
+
+    enum urt_osThreadTerminateSignal_t {
+      URT_THREAD_TERMINATE_REQUEST = 15
+      URT_THREAD_TERMINATE_KILL = 9
+    }
+
+    class urt_osThread_t <<(T,lightblue)>> {
+      + URT_THREAD_PRIO_LOW_MIN : urt_osThreadPrio_t
+      + URT_THREAD_PRIO_LOW_MAX : urt_osThreadPrio_t
+      + URT_THREAD_PRIO_NORMAL_MIN : urt_osThreadPrio_t
+      + URT_THREAD_PRIO_NORMAL_MAX : urt_osThreadPrio_t
+      + URT_THREAD_PRIO_HIGH_MIN : urt_osThreadPrio_t
+      + URT_THREAD_PRIO_HIGH_MAX : urt_osThreadPrio_t
+      + URT_THREAD_PRIO_RT_MIN : urt_osThreadPrio_t
+      + URT_THREAD_PRIO_RT_MAX : urt_osThreadPrio_t
+      ..
+      + URT_THREAD_MAX_SLEEP : float
+      + URT_THREAD_MAX_SSLEP : unsigned int
+      + URT_THREAD_MAX_MSLEEP : unsigned int
+      + URT_THREAD_MAX_USLEEP : unsigned int
+      __
+      + URT_THREAD_WORKING_AREA (var : varname, stacksize : size_t)
+      ..
+      + urtThreadInit (wa : void*, wasize : size_t, func : urt_osThreadFunction_t*, arg : void*) : urt_osThread_t*
+      + urtThreadStart (thread : urt_osThread_t*, prio : urt_osThreadPrio_t, arg : void*) : void
+      + urtThreadYield (void) : void
+      + urtThreadGetPriority (thread : urt_osThread_t*) : urt_osThreadPrio_t
+      + urtThreadSetPriority (thread : urt_osThread_t*, prio : urt_osThreadPrio_t) : void
+      + urtThreadGetChildren (thread : urt_osThread_t*) : urt_osThread_t*
+      + urtThreadGetParent (thread : urt_osThread_t*) : urt_osThread_t*
+      + urtThreadSuspend (void) : void
+      + urtThreadIsSuspended (thread : urt_osThread_t*) : bool
+      + urtThreadResume (thread : urt_osThread_t*) : urt_status_t
+      + urtThreadSleep (seconds : float) : void
+      + urtThreadSSleep (seconds : usnigned int) : void
+      + urtThreadMSleep (milliseconds : unsigned int) : void
+      + urtThreadUSleep (microseconds : unsigned int) : void
+      + urtThreadSleepUntil (time : urt_osTime_t) : void
+      + urtThreadExit (void) : void
+      + urtThreadTerminate (thread : urt_osThread_t*, sig : urt_osThreadTerminateSignal_t) : void
+      + urtThreadJoin (thread : urt_osThread_t*) : void
+    }
+    urt_osThread_t ..> urt_osThreadPrio_t
+    urt_osThread_t ..> urt_osThreadFunction_t
+    urt_osThread_t ..> urt_osTime_t
+    urt_osThread_t ..> urt_osThreadTerminateSignal_t
+
+  } 
+
+  package "events" {
+
+    class urt_osEventMask_t <<(T,lightblue)>>
+
+    class urt_osEventFlags_t <<(T,lightblue)>>
+
+    enum urt_osEventWaitType_t {
+      URT_EVENT_WAIT_ONE = 0
+      URT_EVENT_WAIT_ANY = 1
+      URT_EVENT_WAIT_ALL = 2
+    }
+
+    class urt_osEventListener_t <<(T,lightblue)>> {
+      + urtEventListenerInit (listener : urt_osEventListener_t*) : void
+      + urtEventListenerGetFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t
+      + urtEventListenerClearFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t
+    }
+    urt_osEventListener_t ..> urt_osEventFlags_t
+
+    class urt_osEventSource_t <<(T,lightblue)>> {
+      + urtEventSourceInit (source : urt_osEventSource_t*) : void
+      + urtEventSourceBroadcast (source : urt_osEventSource_t*, flags : urt_osEventFlags_t) : void
+    }
+    urt_osEventSource_t ..> urt_osEventFlags_t
+
+    class urt_events <<(F,white)>> {
+      + urtEventRegister (source : urt_osEventSource_t*, listener : urt_osEventListener_t*, mask : urt_osEventMask_t) : urt_status_t
+      + urtEventUnregister (source _ urt_osEventSource_t*, listener : urt_osEventListener_t*) : urt_status_t
+      + urtEventWait (type : urt_osEventWaitType_t, timeout : urt_delay_t) : urt_osEventMask_t
+    }
+    urt_events ..> urt_osEventSource_t
+    urt_events ..> urt_osEventListener_t
+    urt_events ..> urt_osEventMask_t
+    urt_events ..> urt_status_t
+    urt_events ..> urt_osEventWaitType_t
+    urt_events ..> urt_delay_t
+
+  } 
+
+} 
+
+package "middleware" {
+
+  package "real-time class" {
+
+    class urt_rtclass_t <<(S,lightgrey)>> {
+      + class : urt_rtclasstype_t
+      + params : urt_rtclassparams_t
+    }
+    urt_rtclass_t "1" *- - "1" urt_rtclasstype_t
+    urt_rtclass_t "1" *- - "1" urt_rtclassparams_t
+
+    enum urt_rtclasstype_t {
+      URT_RTCLASS_HARD = 0
+      URT_RTCLASS_FIRM = 1
+      URT_RTCLASS_SOFT = 2
+      URT_RTCLASS_NONE = 3
+    }
+
+    class urt_rtclassparams_t <<(U,lightgreen)>> {
+      + hrt : urt_hrtparams_t
+      + frt : urt_frtparams_t
+      + srt : urt_srtparans_t
+      + nrt : urt_nrtparams_t
+    }
+    urt_rtclassparams_t "1" *- - "0..1" urt_hrtparams_t
+    urt_rtclassparams_t "1" *- - "0..1" urt_frtparams_t
+    urt_rtclassparams_t "1" *- - "0..1" urt_srtparams_t
+    urt_rtclassparams_t "1" *- - "0..1" urt_nrtparams_t
+
+    class urt_hrtparams_t <<(S,lightgrey)>> {
+      + deadlineOffset : urt_delay_t
+      + expectedRate : urt_delay_t
+      + qosTimer : urt_osTimer_t
+    }
+    urt_hrtparams_t ..> urt_delay_t
+    urt_hrtparams_t "1" *- - "1" urt_osTimer_t
+
+    class urt_frtparams_t <<(S,lightgrey)>> {
+      + deadlineOffset : urt_delay_t
+      + expectedRate : urt_delay_t
+      + qosTimer : urt_osTimer_t
+      + callback : urt_osTimerCallback_t
+      + cbparams : void*
+    }
+    urt_frtparams_t ..> urt_delay_t
+    urt_frtparams_t "1" *- - "1" urt_osTimer_t
+    urt_frtparams_t "1" *- - "1" urt_osTimerCallback_t
+
+    class urt_srtparams_t <<(S,lightgrey)>> {
+      + *usefulness (dt : urt_delay_t, params : void*) : float
+      + params : void*
+    }
+    urt_srtparams_t ..> urt_delay_t
+
+    class urt_nrtparams_t <<(S,lightgrey)>> {
+    }
+
+  } 
+
+
+
+  class urt_message_t <<(S,lightgrey)>> {
+    + next : urt_message_t*
+    + payload : void*
+    + originTime : urt_osTime_t
+    + lock : urt_osMutex_t
+    + numHrtConsumersLeft : unsigned int
+    + hrtConsumersLeft : urt_osCondvar_t
+    - - evaluation data - -
+    + numConsumersLeft : unsigned int
+    __
+    + urtMessageInit (message : urt_message_t*, payload : void*) : urt_status_t
+  }
+  urt_message_t "1" o- - "0..1" urt_message_t
+  urt_message_t "1" *- - "1" urt_osTime_t
+  urt_message_t "1" *- - "1" urt_osMutex_t
+  urt_message_t "1" *- - "1" urt_osCondvar_t
+
+  class urt_subscriber_t <<(S,lightgrey)>> {
+    + next : urt_subscriber_t*
+    + topic : urt_topic_t*
+    + evtListener : urt_osEventListener_t
+    + rtclass : urt_rtclass_t
+    + lastMessage : urt_message_t*
+    + lastMessageTime : urt_osTime_t
+    - - evaluation data - -
+    + minLatency : urt_delay_t
+    + maxLatency : urt_delay_t
+    + sumLatencies : uint64_t
+    + numMessagesReceived : unsigned int
+    __
+    + urtSubscriberInit (subscriber : urt_subscriber_t*) : urt_status_t
+    + urtSubscriberSubscribe (subscriber : urt_subscriber_t*, topic : urt_topic_t*, rtclass : urt_rtclass_t*, messages : urt_messages_t*) : urt_status_t
+    + urtSubscriberUnsubscribe (subscriber : urt_subscriber_t*) : urt_status_t
+    + urtSubscriberFetchMessage (subscriber : urt_subscriber_t*, latest : bool) : urt_status_t
+  }
+  urt_subscriber_t "1" o- - "0..1" urt_subscriber_t
+  urt_subscriber_t "1" o- - "0..1" urt_topic_t
+  urt_subscriber_t "1" *- - "1" urt_osEventListener_t
+  urt_subscriber_t "1" *- - "1" urt_rtclass_t
+  urt_subscriber_t "1" o- - "0..1" urt_message_t
+  urt_subscriber_t "1" *- - "1" urt_osTime_t
+  urt_subscriber_t "1" *- - "2" urt_delay_t
+  urt_subscriber_t ..> urt_status_t
+  urt_subscriber_t ..> urt_topicid_t
+
+  class urt_publisher_t <<(S,lightgrey)>> {
+    + topic : urt_topic_t*
+    - - evaluation data - -
+    + publishAttempts : unsigned int
+    + publishFails : unsigned int
+    __
+    + urtPublisherInit (publisher : urt_publisher_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t
+    + urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, n : size_t, t : urt_osTime_t, timeout : urt_delay_t) : urt_status_t
+  }
+  urt_publisher_t "1" o- - "1" urt_topic_t
+  urt_publisher_t ..> urt_message_t
+  urt_publisher_t ..> urt_osTime_t
+  urt_publisher_t ..> urt_delay_t
+  urt_publisher_t ..> urt_status_t
+
+  class urt_topic_t <<(S,lightgrey)>> {
+    + next : urt_topic_t*
+    + mutex : urt_osMutex_t
+    + evtSource : urt_osEventSource_t
+    + numHrtSubscribers : unsigned int
+    + hrtSubscribers : urt_subscriber_t*
+    + qosTimer : urt_osTimer_t
+    + mandatoryMessage : urt_message_t
+    + latestMessage : urt_message_t*
+    + id : urt_topicid_t
+    - - evaluation data - -
+    + numDiscardedMessages : unsigned int
+    + numSubscribers : unsigned int
+    __
+    + urtTopicInit (topic : urt_topic_t*, id : urt_topicid_t) : urt_status_t
+    + urtTopicContributeMessages (topic : urt_topic_t*, messages : urt_message_t*) : void
+  }
+  urt_topic_t "1" o- - "0..1" urt_topic_t
+  urt_topic_t "1" *- - "1" urt_osMutex_t
+  urt_topic_t "1" *- - "1" urt_osEventSource_t
+  urt_topic_t "1" o- - "0..*" urt_subscriber_t
+  urt_topic_t "1" *- - "1" urt_osTimer_t
+  urt_topic_t "1" o- - "1..*" urt_message_t
+  urt_topic_t "1" *- - "1" urt_message_t
+  urt_topic_t "1" *- - "1" urt_topicid_t
+  urt_topic_t ..> urt_osTime_t
+  urt_topic_t ..> urt_status_t
+
+  class urt_core_t <<(S,lightgrey)>> {
+    - {static} _nodes : urt_node_t*
+    - {static} _topics : urt_topic_t*
+    __
+    + urtCoreInit (void) : urt_status_t
+    + urtCoreStartAll (void) : urt_status_t
+    + urtCoreStopAll (void) : urt_status_t
+    + urtCoreRetrieveTopic (id : urt_topicid_t) : urt_topic_t*
+  }
+  urt_core_t "1" o- - "0..*" urt_topic_t
+  urt_core_t "1" o- - "0..*" urt_node_t
+  urt_core_t ..> urt_status_t
+  urt_core_t ..> urt_topicid_t
+
+  package "node" {
+
+    class urt_nodeSetupCallback_t <<(T,lightblue)>> {
+      urt_nodeSetupCallback_t (node : urt_node_t*, arg : void*) : urt_status_t
+    }
+    urt_nodeSetupCallback_t ..> urt_node_t
+    urt_nodeSetupCallback_t ..> urt_status_t
+
+    class urt_nodeLoopCallback_t <<(T,lightblue)>> {
+      urt_nodeLoopCallback_t (node : urt_node_t*, events : urt_osEventMask_t, arg : void*) : urt_status_t
+    }
+    urt_nodeLoopCallback_t ..> urt_node_t
+    urt_nodeLoopCallback_t ..> urt_osEventMask_t
+    urt_nodeLoopCallback_t ..> urt_status_t
+
+    class urt_node_t <<(S,lightgrey)>> {
+      + next : urt_node_t*
+      + thread : urt_osThread_t*
+      + setupcallback : urt_nodeSetupCallback_t*
+      + setupparams : void*
+      + loopcallback : urt_nodeLoopCallback_t*
+      + loopparams : void*
+      + waitmask : urt_osEventMask_t
+      + waittype : urt_osEventWaitType_t
+      __
+      - {static} _main : urt_osThreadFunction_t
+      + urtNodeInit (node : urt_node_t*, stacksize : size_t, setupcallback : urt_nodeSetupCallback_t*, setupparams : void*, loopcallback : urt_nodeLoopCallback_t*, loopparams : void*) : urt_status_t
+      + urtNodeTerminateRecusively (node : urt_node_t*, sig : urt_osThreadTerminateSignal_t) : void
+      + urtNodeJoinRecursively (node : urt_node_t*) : void
+    }
+    urt_node_t "1" o- - "0..1" urt_node_t
+    urt_node_t "1" o- - "1" urt_osThread_t
+    urt_node_t "1" o- - "1" urt_nodeSetupCallback_t
+    urt_node_t "1" o- - "1" urt_nodeLoopCallback_t
+    urt_node_t "1" *- - "1" urt_osEventMask_t
+    urt_node_t "1" *- - "1" urt_osEventWaitType_t
+    urt_node_t ..> urt_osThreadTerminateSignal_t
+
+  } 
+
+} 
+
+@enduml
+
+PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
+Operating System: Linux
+OS Version: 4.15.0-36-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg>
\ No newline at end of file
diff --git a/doc/classdiagrams/overview.uml b/doc/classdiagrams/overview.uml
new file mode 100644
index 0000000..460fa41
--- /dev/null
+++ b/doc/classdiagrams/overview.uml
@@ -0,0 +1,585 @@
+/'
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2018  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+'/
+
+@startuml
+
+title **µRtWare**\nOverview\n
+
+
+
+package "primitives" {
+
+  /' Temporal delay in microseconds. '/
+  class urt_delay_t <<(T,lightblue)>> {
+    .. either ..
+    uint32_t
+    .. or ..
+    uint64_t
+  }
+
+  /' Well defined error codes. '/
+  enum urt_status_t {
+    URT_STATUS_OK = 0
+    URT_STATUS_WARNING = 1
+    URT_STATUS_ERROR = -1
+  }
+  
+  /' Topic ID type. '/
+  class urt_topicid_t <<(T,lightblue)>> {
+    'configurable
+    uin8_t
+    .. or ..
+    uint16_t
+    .. or ..
+    uint32_t
+    .. or ..
+    uint64_t
+  }
+
+} /' package "primitives" '/
+
+
+
+package "interfaces" {
+
+  /' OS time type with arbitrary resolution. '/
+  class urt_osTime_t <<(T,lightblue)>> {
+      'Converts an OS time to 64 bit microsecond precise value.
+    + urtTime2Us (t : urt_osTime_t*) : uint64_t
+      'Retrieves the current time.
+    + urtTimeNow (void) : urt_osTime_t
+  }
+
+  /' OS mutex lock interface. '/
+  class urt_osMutex_t <<(T,lightblue)>> {
+      'Initializes a urt_osMutex_t object.
+    + urtMutexInit (mutex : urt_osmutex_t*) : void
+      'Block the thread until the mutex could be locked.
+    + urtMutexLock (mutex : urt_osmutex_t*) : void
+      'Tries to lock the mutex, but does not block but immediately returns an indicator.
+    + urtMutexTryLock (mutex : urt_osmutex_t*) : bool
+      'Unlocks a previously locked mutex.
+    + urtMutexUnlock (mutex : urt_osmutex_t*) : void
+  }
+
+  package "condition variable" {
+
+    /' Return type for the wait function on condition variables. '/
+    enum urt_condvarStatus_t {
+        'The condition variable has been signaled.
+      + URT_CONDVAR_STATUS_SIGNAL = 0
+        'The condition variable has been broadcasted.
+      + URT_CONDVAR_STATUS_BROADCAST = 1
+        'The wait function timed out.
+      + URT_CONDVAR_STATUS_TIMEOUT = 2
+    }
+
+    /' Condition variable interface. '/
+    class urt_osCondvar_t <<(T,lightblue)>> {
+        'Initializes a urt_osCondvar_t object.
+      + urtCondvarInit (condvar : urt_osCondvar_t*) : void
+        'Signals one thread that is waiting for the condition variable.
+      + urtConvarSignal (condvar : urt_osCondvar_t*) : void
+        'Signals all threads that are waiting for the condition variable.
+      + urtCondvarBroadcast (condvar : urt_osCondvar_t*) : void
+        'Waits for the condition variable.
+      + urtCondvarWait (condvar : urt_osCondvar_t*, mutex : urt_osMutex_t*, timeout : urt_delay_t) : urt_condvarStatus_t
+    }
+    urt_osCondvar_t ..> urt_osMutex_t
+    urt_osCondvar_t ..> urt_delay_t
+    urt_osCondvar_t ..> urt_condvarStatus_t
+
+  } /' package "condition variable" '/
+
+  package "timer" {
+
+    /' Timer callback definition. '/
+    class urt_osTimerCallback_t <<(T,lightblue)>> {
+      urt_osTimerCallback_t (parameter : void*) : void
+    }
+  
+    /' OS timer interface. '/
+    class urt_osTimer_t <<(T,lightblue)>> {
+        'Initializes an urt_osTimer_t object.
+      + urtTimerInit (timer : urt_osTimer_t*) : void
+        'Sets the timer to a specified delay with specified callback and arguments.
+      + urtTimerSet (timer : urt_osTimer_t*, delay : urt_delay_t, callback : urt_osTimerCallback_t*, parameter : void*) : urt_status_t
+        'Resets the timer.
+      + urtTimerReset (timer : urt_osTimer_t*) : urt_status_t
+        'Check whether the timer is already armed.
+      + urtTimerIsArmed (timer : urt_timer_t*) : bool
+    }
+    urt_osTimer_t ..> urt_delay_t
+    urt_osTimer_t ..> urt_status_t
+    urt_osTimer_t ..> urt_osTimerCallback_t
+
+  } /' package "timer" '/
+
+  package "thread" {
+
+    /' Thread priority type. '/
+    class urt_osThreadPrio_t <<(T,lightblue)>>
+
+    /' Thread main function type. '/
+    class urt_osThreadFunction_t <<(T,lightblue)>> {
+      urt_osThreadFunction_t (arg : void*) : void
+    }
+
+    /' Thread terminate signals. '/
+    enum urt_osThreadTerminateSignal_t {
+      'Signal to request termination asap.
+      URT_THREAD_TERMINATE_REQUEST = 15
+      'Signal to kill a thread immediately.
+      URT_THREAD_TERMINATE_KILL = 9
+    }
+
+    /' OS thread interface. '/
+    class urt_osThread_t <<(T,lightblue)>> {
+        'Minimum priority for low priority threads.
+      + URT_THREAD_PRIO_LOW_MIN : urt_osThreadPrio_t
+        'Maximum priority for low priority threads.
+      + URT_THREAD_PRIO_LOW_MAX : urt_osThreadPrio_t
+        'Minimum priority for normal priority threads.
+      + URT_THREAD_PRIO_NORMAL_MIN : urt_osThreadPrio_t
+        'Maximum priority for normal priority threads.
+      + URT_THREAD_PRIO_NORMAL_MAX : urt_osThreadPrio_t
+        'Minimum priority for high priority threads.
+      + URT_THREAD_PRIO_HIGH_MIN : urt_osThreadPrio_t
+        'Maximum priority for high priority threads.
+      + URT_THREAD_PRIO_HIGH_MAX : urt_osThreadPrio_t
+        'Minimum priority for real-time threads.
+      + URT_THREAD_PRIO_RT_MIN : urt_osThreadPrio_t
+        'Maximum priority for real-time threads.
+      + URT_THREAD_PRIO_RT_MAX : urt_osThreadPrio_t
+      ..
+        'Maximum sleep interval in seconds (as float).
+      + URT_THREAD_MAX_SLEEP : float
+        'Maximum sleep interval in seconds.
+      + URT_THREAD_MAX_SSLEP : unsigned int
+        'Maximum sleep interval in milliseconds.
+      + URT_THREAD_MAX_MSLEEP : unsigned int
+        'Maximum sleep interval in microseconds.
+      + URT_THREAD_MAX_USLEEP : unsigned int
+      __
+        'Macro to setup working area as static variable (handles alignment if required).
+      + URT_THREAD_WORKING_AREA (var : varname, stacksize : size_t)
+      ..
+        'Initializes an urt_osThread_t object.
+      + urtThreadInit (wa : void*, wasize : size_t, func : urt_osThreadFunction_t*, arg : void*) : urt_osThread_t*
+        'Starts a thread.
+      + urtThreadStart (thread : urt_osThread_t*, prio : urt_osThreadPrio_t, arg : void*) : void
+        'The calling threads yields.
+      + urtThreadYield (void) : void
+        'Retrieves the priority of a thread.
+      + urtThreadGetPriority (thread : urt_osThread_t*) : urt_osThreadPrio_t
+        'Sets the priority of a thread.
+      + urtThreadSetPriority (thread : urt_osThread_t*, prio : urt_osThreadPrio_t) : void
+        'Retrieves the first thread in the list of children.
+      + urtThreadGetChildren (thread : urt_osThread_t*) : urt_osThread_t*
+        'Retrieves the parent thread.
+      + urtThreadGetParent (thread : urt_osThread_t*) : urt_osThread_t*
+        'The calling threads suspends execution until it is woken up by calling urtTheadResume().
+      + urtThreadSuspend (void) : void
+        'Retrieves whether a  thread is currently suspended.
+      + urtThreadIsSuspended (thread : urt_osThread_t*) : bool
+        'Wakes a suspended thread.
+      + urtThreadResume (thread : urt_osThread_t*) : urt_status_t
+        'Suspends the calling thread for the specified time.
+      + urtThreadSleep (seconds : float) : void
+        'Suspends the calling thread for the specified time.
+      + urtThreadSSleep (seconds : usnigned int) : void
+        'Suspends the calling thread for the specified time.
+      + urtThreadMSleep (milliseconds : unsigned int) : void
+        'Suspends the calling thread for the specified time.
+      + urtThreadUSleep (microseconds : unsigned int) : void
+        'Suspends the calling thread until the specified time.
+      + urtThreadSleepUntil (time : urt_osTime_t) : void
+        'The calling thread exits execution (terminates).
+      + urtThreadExit (void) : void
+        'Terminates a specified thread.
+      + urtThreadTerminate (thread : urt_osThread_t*, sig : urt_osThreadTerminateSignal_t) : void
+        'Waits until the specified thread terminates.
+      + urtThreadJoin (thread : urt_osThread_t*) : void
+    }
+    urt_osThread_t ..> urt_osThreadPrio_t
+    urt_osThread_t ..> urt_osThreadFunction_t
+    urt_osThread_t ..> urt_osTime_t
+    urt_osThread_t ..> urt_osThreadTerminateSignal_t
+
+  } /' package "thread" '/
+
+  package "events" {
+
+    /' OS event mask type. '/
+    class urt_osEventMask_t <<(T,lightblue)>>
+
+    /' OS event flag type. '/
+    class urt_osEventFlags_t <<(T,lightblue)>>
+
+    enum urt_osEventWaitType_t {
+      URT_EVENT_WAIT_ONE = 0
+      URT_EVENT_WAIT_ANY = 1
+      URT_EVENT_WAIT_ALL = 2
+    }
+
+    /' OS event listener interface. '/
+    class urt_osEventListener_t <<(T,lightblue)>> {
+        'Initializes an urt_osEventListener_t object.
+      + urtEventListenerInit (listener : urt_osEventListener_t*) : void
+        'Retrieves the flags of the event listener.
+      + urtEventListenerGetFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t
+        'Retrieves and clears the flags of the event listener.
+      + urtEventListenerClearFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t
+    }
+    urt_osEventListener_t ..> urt_osEventFlags_t
+
+    /' OS event source interface. '/
+    class urt_osEventSource_t <<(T,lightblue)>> {
+        'Initializes an urt_osEventSource_t object.
+      + urtEventSourceInit (source : urt_osEventSource_t*) : void
+        'Emits an event.
+      + urtEventSourceBroadcast (source : urt_osEventSource_t*, flags : urt_osEventFlags_t) : void
+    }
+    urt_osEventSource_t ..> urt_osEventFlags_t
+
+    /' Not a class/type but a set of static event-related functions. '/
+    class urt_events <<(F,white)>> {
+        'Registers a lister to a source.
+      + urtEventRegister (source : urt_osEventSource_t*, listener : urt_osEventListener_t*, mask : urt_osEventMask_t) : urt_status_t
+        'Unregisters a listener from a source.
+      + urtEventUnregister (source _ urt_osEventSource_t*, listener : urt_osEventListener_t*) : urt_status_t
+        'Blocks the thread until any event occurs or the timeout expires.
+      + urtEventWait (type : urt_osEventWaitType_t, timeout : urt_delay_t) : urt_osEventMask_t
+    }
+    urt_events ..> urt_osEventSource_t
+    urt_events ..> urt_osEventListener_t
+    urt_events ..> urt_osEventMask_t
+    urt_events ..> urt_status_t
+    urt_events ..> urt_osEventWaitType_t
+    urt_events ..> urt_delay_t
+
+  } /' package "events" '/
+
+} /' package "interfaces" '/
+
+package "middleware" {
+
+  package "real-time class" {
+
+    /' The top level RT class structure. '/
+    class urt_rtclass_t <<(S,lightgrey)>> {
+        'The actual RT class.
+      + class : urt_rtclasstype_t
+        'Parameters of the RT class.
+      + params : urt_rtclassparams_t
+    }
+    urt_rtclass_t "1" *-- "1" urt_rtclasstype_t
+    urt_rtclass_t "1" *-- "1" urt_rtclassparams_t
+
+    /' Descriptor to distinguish the four RT classes. '/
+    enum urt_rtclasstype_t {
+      'Hard real-time.
+      URT_RTCLASS_HARD = 0
+      'Firm real-time.
+      URT_RTCLASS_FIRM = 1
+      'Soft real-time.
+      URT_RTCLASS_SOFT = 2
+      'No real-time at all.
+      URT_RTCLASS_NONE = 3
+    }
+
+    /' Union structure, holding RT class parameters. '/
+    class urt_rtclassparams_t <<(U,lightgreen)>> {
+        'Parameters for hard real-time.
+      + hrt : urt_hrtparams_t
+        'Parameters for firm real-time.
+      + frt : urt_frtparams_t
+        'Parameters for soft real-time.
+      + srt : urt_srtparans_t
+        'Parameters for non-real-time.
+      + nrt : urt_nrtparams_t
+    }
+    urt_rtclassparams_t "1" *-- "0..1" urt_hrtparams_t
+    urt_rtclassparams_t "1" *-- "0..1" urt_frtparams_t
+    urt_rtclassparams_t "1" *-- "0..1" urt_srtparams_t
+    urt_rtclassparams_t "1" *-- "0..1" urt_nrtparams_t
+
+    /' Parameters for hard real-time. '/
+    class urt_hrtparams_t <<(S,lightgrey)>> {
+        'Maximum temporal offset between creation and consumption of messages.
+      + deadlineOffset : urt_delay_t
+        'Expected rate at which data is published.
+      + expectedRate : urt_delay_t
+        'QoS timer to detected missed deadlines.
+      + qosTimer : urt_osTimer_t
+    }
+    urt_hrtparams_t ..> urt_delay_t
+    urt_hrtparams_t "1" *-- "1" urt_osTimer_t
+
+    /' Parameters for firm real-time. '/
+    class urt_frtparams_t <<(S,lightgrey)>> {
+        'Maximum temporal offset between creation and consumption of messages.
+      + deadlineOffset : urt_delay_t
+        'Expected rate at which data is published.
+      + expectedRate : urt_delay_t
+        'QoS Timer to detect missed deadlines.
+      + qosTimer : urt_osTimer_t
+        'Callback function for the QoS timer.
+      + callback : urt_osTimerCallback_t
+        'Parameters for the callback function.
+      + cbparams : void*
+    }
+    urt_frtparams_t ..> urt_delay_t
+    urt_frtparams_t "1" *-- "1" urt_osTimer_t
+    urt_frtparams_t "1" *-- "1" urt_osTimerCallback_t
+
+    /' Parameters for soft real-time. '/
+    class urt_srtparams_t <<(S,lightgrey)>> {
+        'Callback function to calculate usefulness given a dleay.
+      + *usefulness (dt : urt_delay_t, params : void*) : float
+        'Optional parameters for the callback function.
+      + params : void*
+    }
+    urt_srtparams_t ..> urt_delay_t
+
+    /' Parameters for non-real-time. '/
+    class urt_nrtparams_t <<(S,lightgrey)>> {
+      'There are nor parameters in this case.
+    }
+
+  } /' package "real-time class" '/
+
+
+
+  /' Message type. '/
+  class urt_message_t <<(S,lightgrey)>> {
+      'Pointer to the next message in a list.
+    + next : urt_message_t*
+      'Pointer to some arbitrary (reusable) payload object.
+    + payload : void*
+      'Origin time of the message.
+    + originTime : urt_osTime_t
+      'Mutex lock for exclusive access.
+    + lock : urt_osMutex_t
+      'Counter of HRT subscribers that did not consume the message yet.
+    + numHrtConsumersLeft : unsigned int
+      'Condition variable to inform waiting publishers when the message is available again.
+    + hrtConsumersLeft : urt_osCondvar_t
+    -- evaluation data --
+      'Counter of overall subscribers that did not consume the message yet.
+    + numConsumersLeft : unsigned int
+    __
+      'Initializes a urt_message_t object.
+    + urtMessageInit (message : urt_message_t*, payload : void*) : urt_status_t
+  }
+  urt_message_t "1" o-- "0..1" urt_message_t
+  urt_message_t "1" *-- "1" urt_osTime_t
+  urt_message_t "1" *-- "1" urt_osMutex_t
+  urt_message_t "1" *-- "1" urt_osCondvar_t
+
+  /' Subscriber type. '/
+  class urt_subscriber_t <<(S,lightgrey)>> {
+      'Pointer to the next subscriber in a list.
+    + next : urt_subscriber_t*
+      'Pointer to the topic, this subscriber subscribed to.
+    + topic : urt_topic_t*
+      'Event listener to notify the node about new messages.
+    + evtListener : urt_osEventListener_t
+      'Real-time class descriptor.
+    + rtclass : urt_rtclass_t
+      'Pointer to the message consumed most recently.
+    + lastMessage : urt_message_t*
+      'Copy of the origin time of the message consumed most recently.
+    + lastMessageTime : urt_osTime_t
+    -- evaluation data --
+      'Minimum latency ever detected.
+    + minLatency : urt_delay_t
+      'Maximum latency ever detected.
+    + maxLatency : urt_delay_t
+      'Sum of all latencies.
+    + sumLatencies : uint64_t
+      'Number of messages received.
+    + numMessagesReceived : unsigned int
+    __
+      'Initializes a urt_subscriber_t object.
+    + urtSubscriberInit (subscriber : urt_subscriber_t*) : urt_status_t
+      'Tries to subscribe to a topic and contributes an optional list of messages.
+    + urtSubscriberSubscribe (subscriber : urt_subscriber_t*, topic : urt_topic_t*, rtclass : urt_rtclass_t*, messages : urt_messages_t*) : urt_status_t
+      'Unsubscribes from a topic.
+    + urtSubscriberUnsubscribe (subscriber : urt_subscriber_t*) : urt_status_t
+      'Fetches either the next or the latest message.
+    + urtSubscriberFetchMessage (subscriber : urt_subscriber_t*, latest : bool) : urt_status_t
+  }
+  urt_subscriber_t "1" o-- "0..1" urt_subscriber_t
+  urt_subscriber_t "1" o-- "0..1" urt_topic_t
+  urt_subscriber_t "1" *-- "1" urt_osEventListener_t
+  urt_subscriber_t "1" *-- "1" urt_rtclass_t
+  urt_subscriber_t "1" o-- "0..1" urt_message_t
+  urt_subscriber_t "1" *-- "1" urt_osTime_t
+  urt_subscriber_t "1" *-- "2" urt_delay_t
+  urt_subscriber_t ..> urt_status_t
+  urt_subscriber_t ..> urt_topicid_t
+
+  /' Publisher type. '/
+  class urt_publisher_t <<(S,lightgrey)>> {
+      'Pointer to the topic for publishing.
+    + topic : urt_topic_t*
+    -- evaluation data --
+      'Counter of attempts to publish a message.
+    + publishAttempts : unsigned int
+      'Counter of failed attempts to publish a message.
+    + publishFails : unsigned int
+    __
+      'Initializes a urt_publisher_t object and contributes an optional list of messages.
+    + urtPublisherInit (publisher : urt_publisher_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t
+      'Publishes a message via the associated topic.
+    + urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, n : size_t, t : urt_osTime_t, timeout : urt_delay_t) : urt_status_t
+  }
+  urt_publisher_t "1" o-- "1" urt_topic_t
+  urt_publisher_t ..> urt_message_t
+  urt_publisher_t ..> urt_osTime_t
+  urt_publisher_t ..> urt_delay_t
+  urt_publisher_t ..> urt_status_t
+
+  /' Topic type. '/
+  class urt_topic_t <<(S,lightgrey)>> {
+      'Pointer to the next topic in a list.
+    + next : urt_topic_t*
+      'Mutex lock for exclusive access.
+    + mutex : urt_osMutex_t
+      'Event source to inform all subscribers when a new message is published.
+    + evtSource : urt_osEventSource_t
+      'Number of HRT subscribers.
+    + numHrtSubscribers : unsigned int
+      'List of HRT subscribers, orderd by their expected rate (most critical first).
+    + hrtSubscribers : urt_subscriber_t*
+      'Timer to check for missed rates.
+    + qosTimer : urt_osTimer_t
+      'Mandatory message, each Topic holds.
+    + mandatoryMessage : urt_message_t
+      'Pointer to the latest message.
+    + latestMessage : urt_message_t*
+      'Identifier of the topic.
+    + id : urt_topicid_t
+    -- evaluation data --
+      'Variable to count how many (non-hrt) subscribers did not fetch a message before it was reused.
+    + numDiscardedMessages : unsigned int
+      'Number of overall subscribers.
+    + numSubscribers : unsigned int
+    __
+      'Initializes an urt_topic_t object.
+    + urtTopicInit (topic : urt_topic_t*, id : urt_topicid_t) : urt_status_t
+      'Appends the given list of messages to the topic's buffer.
+    + urtTopicContributeMessages (topic : urt_topic_t*, messages : urt_message_t*) : void
+  }
+  urt_topic_t "1" o-- "0..1" urt_topic_t
+  urt_topic_t "1" *-- "1" urt_osMutex_t
+  urt_topic_t "1" *-- "1" urt_osEventSource_t
+  urt_topic_t "1" o-- "0..*" urt_subscriber_t
+  urt_topic_t "1" *-- "1" urt_osTimer_t
+  urt_topic_t "1" o-- "1..*" urt_message_t
+  urt_topic_t "1" *-- "1" urt_message_t
+  urt_topic_t "1" *-- "1" urt_topicid_t
+  urt_topic_t ..> urt_osTime_t
+  urt_topic_t ..> urt_status_t
+
+  /' uRtWare core type. '/
+  class urt_core_t <<(S,lightgrey)>> {
+      'List of nodes ordered by their (initial) priority.
+    - {static} _nodes : urt_node_t*
+      'List of topics ordered by their identifiers.
+    - {static} _topics : urt_topic_t*
+    __
+      'Initializes the urt_core_t object.
+    + urtCoreInit (void) : urt_status_t
+      'Starts all nodes.
+    + urtCoreStartAll (void) : urt_status_t
+      'Stops all nodes.
+    + urtCoreStopAll (void) : urt_status_t
+      'Retrieves a topic given an identifier.
+    + urtCoreRetrieveTopic (id : urt_topicid_t) : urt_topic_t*
+  }
+  urt_core_t "1" o-- "0..*" urt_topic_t
+  urt_core_t "1" o-- "0..*" urt_node_t
+  urt_core_t ..> urt_status_t
+  urt_core_t ..> urt_topicid_t
+
+  package "node" {
+
+    /' Function type to be called during setup phase of node threads. '/
+    class urt_nodeSetupCallback_t <<(T,lightblue)>> {
+      'Takes the node and optional parameters as arguments.
+      urt_nodeSetupCallback_t (node : urt_node_t*, arg : void*) : urt_status_t
+    }
+    urt_nodeSetupCallback_t ..> urt_node_t
+    urt_nodeSetupCallback_t ..> urt_status_t
+
+    /' Function type to be called during loop phase of node threads. '/
+    class urt_nodeLoopCallback_t <<(T,lightblue)>> {
+      'Takes the node, a mask of occurred events and optional parameters as arguments.
+      urt_nodeLoopCallback_t (node : urt_node_t*, events : urt_osEventMask_t, arg : void*) : urt_status_t
+    }
+    urt_nodeLoopCallback_t ..> urt_node_t
+    urt_nodeLoopCallback_t ..> urt_osEventMask_t
+    urt_nodeLoopCallback_t ..> urt_status_t
+
+    /' Node type. '/
+    class urt_node_t <<(S,lightgrey)>> {
+        'Pointer to the next node in a list.
+      + next : urt_node_t*
+        'Pointer to the nore thread.
+      + thread : urt_osThread_t*
+        'Callback function to be called during the setup phase.
+      + setupcallback : urt_nodeSetupCallback_t*
+        'Optional parameters for the setup callback function.
+      + setupparams : void*
+        'Callback function to be called in each loop iteration.
+      + loopcallback : urt_nodeLoopCallback_t*
+        'Optional parameters for the loop callback function.
+      + loopparams : void*
+        'A mask for which events to wait.
+      + waitmask : urt_osEventMask_t
+        'How the node will wait for events.
+      + waittype : urt_osEventWaitType_t
+      __
+      'The main() function of the node thread.
+      - {static} _main : urt_osThreadFunction_t
+        'Initializes an urt_node_t object.
+      + urtNodeInit (node : urt_node_t*, stacksize : size_t, setupcallback : urt_nodeSetupCallback_t*, setupparams : void*, loopcallback : urt_nodeLoopCallback_t*, loopparams : void*) : urt_status_t
+        'Terminate a node thread and all its child threads (if any).
+      + urtNodeTerminateRecusively (node : urt_node_t*, sig : urt_osThreadTerminateSignal_t) : void
+        'Wait for a node thread an all its child threads (if any) to terminate.
+      + urtNodeJoinRecursively (node : urt_node_t*) : void
+    }
+    urt_node_t "1" o-- "0..1" urt_node_t
+    urt_node_t "1" o-- "1" urt_osThread_t
+    urt_node_t "1" o-- "1" urt_nodeSetupCallback_t
+    urt_node_t "1" o-- "1" urt_nodeLoopCallback_t
+    urt_node_t "1" *-- "1" urt_osEventMask_t
+    urt_node_t "1" *-- "1" urt_osEventWaitType_t
+    urt_node_t ..> urt_osThreadTerminateSignal_t
+
+  } /' package "node" '/
+
+} /' package "middleware" '/
+
+@enduml
+
diff --git a/doc/statediagrams/general/deinitialization.svg b/doc/statediagrams/general/deinitialization.svg
new file mode 100644
index 0000000..8cd05b8
--- /dev/null
+++ b/doc/statediagrams/general/deinitialization.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="528px" preserveAspectRatio="none" style="width:574px;height:528px;" version="1.1" viewBox="0 0 574 528" width="574px" zoomAndPan="magnify"><defs><filter height="300%" id="fxpz2tqgpdftz" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="241.5" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="131" x="220.5" y="47.6611">Deinitialization</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="289" y="68.6143"/><ellipse cx="339.5" cy="82.8594" fill="#000000" filter="url(#fxpz2tqgpdftz)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><path d="M38,172.9878 L38,198.1206 A0,0 0 0 0 38,198.1206 L127,198.1206 A0,0 0 0 0 127,198.1206 L127,190.9878 L147,185.5542 L127,182.9878 L127,182.9878 L117,172.9878 L38,172.9878 A0,0 0 0 0 38,172.9878 " fill="#FBFB77" filter="url(#fxpz2tqgpdftz)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M117,172.9878 L117,182.9878 L127,182.9878 L117,172.9878 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="68" x="44" y="190.0547">recursively</text><rect fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="385" x="147" y="168.5698"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="365" x="157" y="189.7085">request current node and al its child threads to terminate</text><rect fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="146" x="266.5" y="231.6362"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="126" x="276.5" y="252.7749">iterate to next node</text><polygon fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" points="266,112.8594,413,112.8594,425,124.8594,413,136.8594,266,136.8594,254,124.8594,266,112.8594" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="343.5" y="147.0698">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="147" x="266" y="128.6675">Nodes left to be stopped?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="240" y="122.2651">no</text><path d="M56,421.23 L56,446.3628 A0,0 0 0 0 56,446.3628 L145,446.3628 A0,0 0 0 0 145,446.3628 L145,439.23 L165,433.7964 L145,431.23 L145,431.23 L135,421.23 L56,421.23 A0,0 0 0 0 56,421.23 " fill="#FBFB77" filter="url(#fxpz2tqgpdftz)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M135,421.23 L135,431.23 L145,431.23 L135,421.23 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="68" x="62" y="438.2969">recursively</text><rect fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="349" x="165" y="416.812"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="329" x="175" y="437.9507">wait for current node and al its child threads to stop</text><polygon fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" points="263.5,368.4097,415.5,368.4097,427.5,380.4097,415.5,392.4097,263.5,392.4097,251.5,380.4097,263.5,368.4097" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="343.5" y="402.6201">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="152" x="263.5" y="384.2178">Current node still running?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="427.5" y="377.8154">no</text><polygon fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" points="339.5,470.7808,351.5,482.7808,339.5,494.7808,327.5,482.7808,339.5,470.7808" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" points="285.5,307.605,393.5,307.605,405.5,319.605,393.5,331.605,285.5,331.605,273.5,319.605,285.5,307.605" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="343.5" y="341.8154">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="108" x="285.5" y="323.4131">Nodes left to stop?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="259.5" y="317.0107">no</text><ellipse cx="24" cy="365.605" fill="none" filter="url(#fxpz2tqgpdftz)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="24.5" cy="366.105" fill="#000000" filter="url(#fxpz2tqgpdftz)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="202.5386" y2="231.6362"/><polygon fill="#A80036" points="335.5,221.6362,339.5,231.6362,343.5,221.6362,339.5,225.6362" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="136.8594" y2="168.5698"/><polygon fill="#A80036" points="335.5,158.5698,339.5,168.5698,343.5,158.5698,339.5,162.5698" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="265.605" y2="275.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="544" y1="275.605" y2="275.605"/><polygon fill="#A80036" points="540,211.6362,544,201.6362,548,211.6362,544,207.6362" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544" x2="544" y1="124.8594" y2="275.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544" x2="425" y1="124.8594" y2="124.8594"/><polygon fill="#A80036" points="435,120.8594,425,124.8594,435,128.8594,431,124.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="254" x2="26" y1="124.8594" y2="124.8594"/><polygon fill="#A80036" points="22,197.6362,26,207.6362,30,197.6362,26,201.6362" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="26" x2="26" y1="124.8594" y2="287.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="26" x2="339.5" y1="287.605" y2="287.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="287.605" y2="307.605"/><polygon fill="#A80036" points="335.5,297.605,339.5,307.605,343.5,297.605,339.5,301.605" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="335.5,102.8594,339.5,112.8594,343.5,102.8594,339.5,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="392.4097" y2="416.812"/><polygon fill="#A80036" points="335.5,406.812,339.5,416.812,343.5,406.812,339.5,410.812" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="427.5" x2="524" y1="380.4097" y2="380.4097"/><polygon fill="#A80036" points="520,423.7964,524,433.7964,528,423.7964,524,427.7964" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="524" x2="524" y1="380.4097" y2="482.7808"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="524" x2="351.5" y1="482.7808" y2="482.7808"/><polygon fill="#A80036" points="361.5,478.7808,351.5,482.7808,361.5,486.7808,357.5,482.7808" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="450.7808" y2="470.7808"/><polygon fill="#A80036" points="335.5,460.7808,339.5,470.7808,343.5,460.7808,339.5,464.7808" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="331.605" y2="368.4097"/><polygon fill="#A80036" points="335.5,358.4097,339.5,368.4097,343.5,358.4097,339.5,362.4097" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="494.7808" y2="504.7808"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="548" y1="504.7808" y2="504.7808"/><polygon fill="#A80036" points="544,425.394,548,415.394,552,425.394,548,421.394" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="548" x2="548" y1="319.605" y2="504.7808"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="548" x2="405.5" y1="319.605" y2="319.605"/><polygon fill="#A80036" points="415.5,315.605,405.5,319.605,415.5,323.605,411.5,319.605" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="273.5" x2="24" y1="319.605" y2="319.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="24" y1="319.605" y2="355.605"/><polygon fill="#A80036" points="20,345.605,24,355.605,28,345.605,24,349.605" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+title **µRtWare**\nDeinitialization\n
+
+
+
+start
+while (Nodes left to be stopped?) is (yes)
+  :request current node and al its child threads to terminate;
+  note
+    recursively
+  endnote
+  :iterate to next node;
+endwhile (no)
+while (Nodes left to stop?) is (yes)
+  if (Current node still running?) then (yes)
+    :wait for current node and al its child threads to stop;
+    note
+      recursively
+    endnote
+  else (no)
+  endif
+endwhile (no)
+stop
+
+@enduml
+
+PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
+Operating System: Linux
+OS Version: 4.15.0-36-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg>
\ No newline at end of file
diff --git a/doc/statediagrams/general/deinitialization.uml b/doc/statediagrams/general/deinitialization.uml
new file mode 100644
index 0000000..2cc956e
--- /dev/null
+++ b/doc/statediagrams/general/deinitialization.uml
@@ -0,0 +1,47 @@
+/'
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2018  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+'/
+
+@startuml
+
+title **µRtWare**\nDeinitialization\n
+
+
+
+start
+while (Nodes left to be stopped?) is (yes)
+  :request current node and al its child threads to terminate;
+  note
+    recursively
+  endnote
+  :iterate to next node;
+endwhile (no)
+while (Nodes left to stop?) is (yes)
+  if (Current node still running?) then (yes)
+    :wait for current node and al its child threads to stop;
+    note
+      recursively
+    endnote
+  else (no)
+  endif
+endwhile (no)
+stop
+
+@enduml
diff --git a/doc/statediagrams/general/emergency.svg b/doc/statediagrams/general/emergency.svg
new file mode 100644
index 0000000..f6422a9
--- /dev/null
+++ b/doc/statediagrams/general/emergency.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="440px" preserveAspectRatio="none" style="width:446px;height:440px;" version="1.1" viewBox="0 0 446 440" width="446px" zoomAndPan="magnify"><defs><filter height="300%" id="f15t7xuxx0vrgq" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="177.5" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="179" x="132.5" y="47.6611">Emergency Callback</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="225" y="68.6143"/><ellipse cx="274" cy="82.8594" fill="#000000" filter="url(#f15t7xuxx0vrgq)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><path d="M36,221.3901 L36,246.5229 A0,0 0 0 0 36,246.5229 L120,246.5229 A0,0 0 0 0 120,246.5229 L120,239.3901 L140,233.9565 L120,231.3901 L120,231.3901 L110,221.3901 L36,221.3901 A0,0 0 0 0 36,221.3901 " fill="#FBFB77" filter="url(#f15t7xuxx0vrgq)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M110,221.3901 L110,231.3901 L120,231.3901 L110,221.3901 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="63" x="42" y="238.457">recusively</text><rect fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="268" x="140" y="216.9722"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="248" x="150" y="238.1108">terminate node and all its child threads</text><rect fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="146" x="201" y="280.0386"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="126" x="211" y="301.1772">iterate to next node</text><polygon fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" points="205,161.2617,343,161.2617,355,173.2617,343,185.2617,205,185.2617,193,173.2617,205,161.2617" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="278" y="195.4722">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="138" x="205" y="177.0698">Nodes left to terminate?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="179" y="170.6675">no</text><rect fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="176" x="186" y="356.0073"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="156" x="196" y="377.146">initiate system shutdown</text><ellipse cx="274" cy="419.9761" fill="none" filter="url(#f15t7xuxx0vrgq)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="274.5" cy="420.4761" fill="#000000" filter="url(#f15t7xuxx0vrgq)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" points="205,112.8594,343,112.8594,355,124.8594,343,136.8594,205,136.8594,193,124.8594,205,112.8594" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="278" y="147.0698">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="138" x="205" y="128.6675">Has been called before?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="355" y="122.2651">yes</text><ellipse cx="395" cy="124.8594" fill="none" filter="url(#f15t7xuxx0vrgq)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="395.5" cy="125.3594" fill="#000000" filter="url(#f15t7xuxx0vrgq)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="250.9409" y2="280.0386"/><polygon fill="#A80036" points="270,270.0386,274,280.0386,278,270.0386,274,274.0386" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="185.2617" y2="216.9722"/><polygon fill="#A80036" points="270,206.9722,274,216.9722,278,206.9722,274,210.9722" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="314.0073" y2="324.0073"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="420" y1="324.0073" y2="324.0073"/><polygon fill="#A80036" points="416,260.0386,420,250.0386,424,260.0386,420,256.0386" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="420" x2="420" y1="173.2617" y2="324.0073"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="420" x2="355" y1="173.2617" y2="173.2617"/><polygon fill="#A80036" points="365,169.2617,355,173.2617,365,177.2617,361,173.2617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="193" x2="24" y1="173.2617" y2="173.2617"/><polygon fill="#A80036" points="20,246.0386,24,256.0386,28,246.0386,24,250.0386" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="24" y1="173.2617" y2="336.0073"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="274" y1="336.0073" y2="336.0073"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="336.0073" y2="356.0073"/><polygon fill="#A80036" points="270,346.0073,274,356.0073,278,346.0073,274,350.0073" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="389.9761" y2="409.9761"/><polygon fill="#A80036" points="270,399.9761,274,409.9761,278,399.9761,274,403.9761" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="136.8594" y2="161.2617"/><polygon fill="#A80036" points="270,151.2617,274,161.2617,278,151.2617,274,155.2617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="355" x2="385" y1="124.8594" y2="124.8594"/><polygon fill="#A80036" points="375,120.8594,385,124.8594,375,128.8594,379,124.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="270,102.8594,274,112.8594,278,102.8594,274,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+title **µRtWare**\nEmergency Callback\n
+
+
+
+start
+if (Has been called before?) then (yes)
+  stop
+else (no)
+  while (Nodes left to terminate?) is (yes)
+    :terminate node and all its child threads;
+    note
+      recusively
+    endnote
+    :iterate to next node;
+  endwhile (no)
+  :initiate system shutdown;
+  stop
+endif
+
+
+@enduml
+
+PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
+Operating System: Linux
+OS Version: 4.15.0-36-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg>
\ No newline at end of file
diff --git a/doc/statediagrams/general/emergency.uml b/doc/statediagrams/general/emergency.uml
new file mode 100644
index 0000000..bcbf314
--- /dev/null
+++ b/doc/statediagrams/general/emergency.uml
@@ -0,0 +1,44 @@
+/'
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2018  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+'/
+
+@startuml
+
+title **µRtWare**\nEmergency Callback\n
+
+
+
+start
+if (Has been called before?) then (yes)
+  stop
+else (no)
+  while (Nodes left to terminate?) is (yes)
+    :terminate node and all its child threads;
+    note
+      recusively
+    endnote
+    :iterate to next node;
+  endwhile (no)
+  :initiate system shutdown;
+  stop
+endif
+
+
+@enduml
diff --git a/doc/statediagrams/general/initialization.svg b/doc/statediagrams/general/initialization.svg
new file mode 100644
index 0000000..744c4f4
--- /dev/null
+++ b/doc/statediagrams/general/initialization.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1070px" preserveAspectRatio="none" style="width:1283px;height:1070px;" version="1.1" viewBox="0 0 1283 1070" width="1283px" zoomAndPan="magnify"><defs><filter height="300%" id="f9p8gcqa4s02k" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="596" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="107" x="587" y="47.6611">Initialization</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="643.5" y="68.6143"/><ellipse cx="641" cy="82.8594" fill="#000000" filter="url(#f9p8gcqa4s02k)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1262" x="10" y="112.8594"/><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="876" x="24" y="138.8594"/><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="116.5625" style="stroke: #000000; stroke-width: 2.0;" width="368" x="38" y="180.1455"/><path d="M117,181.1455 L117,189.4424 L107,199.4424 L38,199.4424 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="69" x="41" y="194.1406">urt_core_t</text><path d="M58,226.4424 L58,266.708 L255,266.708 L255,236.4424 L245,226.4424 L58,226.4424 " fill="#FBFB77" filter="url(#f9p8gcqa4s02k)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M245,226.4424 L245,236.4424 L255,236.4424 L245,226.4424 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="176" x="64" y="243.5093">must be initialized statically</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="64" y="258.6421">(in startup thread)</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="265" y="229.5908"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="275" y="250.7295">initialize members</text><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="157.5313" style="stroke: #000000; stroke-width: 2.0;" width="452" x="434" y="155.6611"/><path d="M548,156.6611 L548,164.958 L538,174.958 L434,174.958 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="437" y="169.6563">urt_osThread_t</text><path d="M444,191.958 L444,232.2236 A0,0 0 0 0 444,232.2236 L721,232.2236 A0,0 0 0 0 721,232.2236 L721,216.0908 L741,212.0908 L721,208.0908 L721,201.958 L711,191.958 L444,191.958 A0,0 0 0 0 444,191.958 " fill="#FBFB77" filter="url(#f9p8gcqa4s02k)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M711,191.958 L711,201.958 L721,201.958 L711,191.958 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="176" x="450" y="209.0249">must be initialized statically</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="256" x="450" y="224.1577">(in preamble / static memory allocation)</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="135" x="741" y="195.1064"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="115" x="751" y="216.2451">initialize work area</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="743" y="267.2236"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="753" y="288.3623">initialize members</text><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="876" x="24" y="333.1924"/><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="464" x="230" y="359.1924"/><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="137.0791" style="stroke: #000000; stroke-width: 2.0;" width="176" x="261" y="375.9941"/><path d="M343,376.9941 L343,385.291 L333,395.291 L261,395.291 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="72" x="264" y="389.9893">urt_topic_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="283.5" y="412.291"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="293.5" y="433.4297">initialize members</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="271" y="466.2598"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="136" x="281" y="487.3984">insert self to topic list</text><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="419.7734" style="stroke: #000000; stroke-width: 2.0;" width="231" x="244" y="548.0732"/><path d="M356,549.0732 L356,557.3701 L346,567.3701 L244,567.3701 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="102" x="247" y="562.0684">urt_publisher_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="283.5" y="584.3701"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="293.5" y="605.5088">initialize members</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="150" x="274" y="653.3389"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="130" x="284" y="674.4775">find topic in topic list</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="80" x="309" y="769.9404"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="319" y="791.0791">lock topic</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="272.5" y="823.9092"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="133" x="282.5" y="845.0479">contribute messages</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="96" x="301" y="877.8779"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="311" y="899.0166">unlock topic</text><polygon fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" points="266,721.5381,432,721.5381,444,733.5381,432,745.5381,266,745.5381,254,733.5381,266,721.5381" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="353" y="755.7485">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="166" x="266" y="737.3462">Any messages to contribute?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="444" y="730.9438">no</text><polygon fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" points="349,931.8467,361,943.8467,349,955.8467,337,943.8467,349,931.8467" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="158.4648" style="stroke: #000000; stroke-width: 2.0;" width="177" x="503" y="602.8115"/><path d="M587,603.8115 L587,612.1084 L577,622.1084 L503,622.1084 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="74" x="506" y="616.8066">urt_node_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="526" y="639.1084"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="536" y="660.2471">initialize members</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="157" x="513" y="707.3076"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="523" y="728.4463">insert self to node list</text><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="464" x="230" y="987.8467"/><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="90.2656" style="stroke: #000000; stroke-width: 2.0;" width="151" x="928" y="511.0303"/><path d="M1049,512.0303 L1049,520.3271 L1039,530.3271 L928,530.3271 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="111" x="931" y="525.0254">urt_subscriber_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="938" y="547.3271"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="948" y="568.4658">initialize members</text><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="90.2656" style="stroke: #000000; stroke-width: 2.0;" width="151" x="1107" y="511.0303"/><path d="M1219,512.0303 L1219,520.3271 L1209,530.3271 L1107,530.3271 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="102" x="1110" y="525.0254">urt_message_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="1117" y="547.3271"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="1127" y="568.4658">initialize members</text><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1262" x="10" y="1013.8467"/><ellipse cx="641" cy="1049.8467" fill="none" filter="url(#f9p8gcqa4s02k)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="641.5" cy="1050.3467" fill="#000000" filter="url(#f9p8gcqa4s02k)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="808.5" x2="808.5" y1="229.0752" y2="267.2236"/><polygon fill="#A80036" points="804.5,257.2236,808.5,267.2236,812.5,257.2236,808.5,261.2236" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="330.5" x2="330.5" y1="144.8594" y2="229.5908"/><polygon fill="#A80036" points="326.5,219.5908,330.5,229.5908,334.5,219.5908,330.5,223.5908" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="808.5" x2="808.5" y1="144.8594" y2="195.1064"/><polygon fill="#A80036" points="804.5,185.1064,808.5,195.1064,812.5,185.1064,808.5,189.1064" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="330.5" x2="330.5" y1="263.5596" y2="333.1924"/><polygon fill="#A80036" points="326.5,323.1924,330.5,333.1924,334.5,323.1924,330.5,327.1924" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="808.5" x2="808.5" y1="301.1924" y2="333.1924"/><polygon fill="#A80036" points="804.5,323.1924,808.5,333.1924,812.5,323.1924,808.5,327.1924" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="446.2598" y2="466.2598"/><polygon fill="#A80036" points="345,456.2598,349,466.2598,353,456.2598,349,460.2598" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="618.3389" y2="653.3389"/><polygon fill="#A80036" points="345,643.3389,349,653.3389,353,643.3389,349,647.3389" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="803.9092" y2="823.9092"/><polygon fill="#A80036" points="345,813.9092,349,823.9092,353,813.9092,349,817.9092" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="857.8779" y2="877.8779"/><polygon fill="#A80036" points="345,867.8779,349,877.8779,353,867.8779,349,871.8779" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="745.5381" y2="769.9404"/><polygon fill="#A80036" points="345,759.9404,349,769.9404,353,759.9404,349,763.9404" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="444" x2="456" y1="733.5381" y2="733.5381"/><polygon fill="#A80036" points="452,830.8936,456,840.8936,460,830.8936,456,834.8936" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="456" x2="456" y1="733.5381" y2="943.8467"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="456" x2="361" y1="943.8467" y2="943.8467"/><polygon fill="#A80036" points="371,939.8467,361,943.8467,371,947.8467,367,943.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="911.8467" y2="931.8467"/><polygon fill="#A80036" points="345,921.8467,349,931.8467,353,921.8467,349,925.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="687.3076" y2="721.5381"/><polygon fill="#A80036" points="345,711.5381,349,721.5381,353,711.5381,349,715.5381" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="500.2285" y2="584.3701"/><polygon fill="#A80036" points="345,574.3701,349,584.3701,353,574.3701,349,578.3701" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="591.5" x2="591.5" y1="673.0771" y2="707.3076"/><polygon fill="#A80036" points="587.5,697.3076,591.5,707.3076,595.5,697.3076,591.5,701.3076" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="365.1924" y2="412.291"/><polygon fill="#A80036" points="345,402.291,349,412.291,353,402.291,349,406.291" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="591.5" x2="591.5" y1="365.1924" y2="639.1084"/><polygon fill="#A80036" points="587.5,629.1084,591.5,639.1084,595.5,629.1084,591.5,633.1084" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="955.8467" y2="987.8467"/><polygon fill="#A80036" points="345,977.8467,349,987.8467,353,977.8467,349,981.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="591.5" x2="591.5" y1="741.2764" y2="987.8467"/><polygon fill="#A80036" points="587.5,977.8467,591.5,987.8467,595.5,977.8467,591.5,981.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="462" x2="462" y1="339.1924" y2="359.1924"/><polygon fill="#A80036" points="458,349.1924,462,359.1924,466,349.1924,462,353.1924" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="462" x2="462" y1="118.8594" y2="138.8594"/><polygon fill="#A80036" points="458,128.8594,462,138.8594,466,128.8594,462,132.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1003.5" x2="1003.5" y1="118.8594" y2="547.3271"/><polygon fill="#A80036" points="999.5,537.3271,1003.5,547.3271,1007.5,537.3271,1003.5,541.3271" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1182.5" x2="1182.5" y1="118.8594" y2="547.3271"/><polygon fill="#A80036" points="1178.5,537.3271,1182.5,547.3271,1186.5,537.3271,1182.5,541.3271" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="462" x2="462" y1="993.8467" y2="1013.8467"/><polygon fill="#A80036" points="458,1003.8467,462,1013.8467,466,1003.8467,462,1007.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1003.5" x2="1003.5" y1="581.2959" y2="1013.8467"/><polygon fill="#A80036" points="999.5,1003.8467,1003.5,1013.8467,1007.5,1003.8467,1003.5,1007.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1182.5" x2="1182.5" y1="581.2959" y2="1013.8467"/><polygon fill="#A80036" points="1178.5,1003.8467,1182.5,1013.8467,1186.5,1003.8467,1182.5,1007.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="641" x2="641" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="637,102.8594,641,112.8594,645,102.8594,641,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="641" x2="641" y1="1019.8467" y2="1039.8467"/><polygon fill="#A80036" points="637,1029.8467,641,1039.8467,645,1029.8467,641,1033.8467" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+title **µRtWare**\nInitialization\n
+
+
+
+start
+fork
+  fork
+    partition "urt_core_t" {
+      note
+        must be initialized statically
+        (in startup thread)
+      endnote
+      :initialize members;
+    }
+  fork again
+    partition "urt_osThread_t" {
+      :initialize work area;
+      note
+        must be initialized statically
+        (in preamble / static memory allocation)
+      endnote
+      :initialize members;
+    }
+  endfork
+  fork
+    partition "urt_topic_t" {
+      :initialize members;
+      :insert self to topic list;
+    }
+    partition "urt_publisher_t" {
+      :initialize members;
+      :find topic in topic list;
+      if (Any messages to contribute?) then (yes)
+        :lock topic;
+        :contribute messages;
+        :unlock topic;
+      else (no)
+      endif
+    }
+  fork again
+    partition "urt_node_t" {
+      :initialize members;
+      :insert self to node list;
+    }
+  endfork
+fork again
+  partition "urt_subscriber_t" {
+    :initialize members;
+  }
+fork again
+  partition "urt_message_t" {
+    :initialize members;
+  }
+endfork
+stop
+
+@enduml
+
+PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
+Operating System: Linux
+OS Version: 4.15.0-36-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg>
\ No newline at end of file
diff --git a/doc/statediagrams/general/initialization.uml b/doc/statediagrams/general/initialization.uml
new file mode 100644
index 0000000..81f9b20
--- /dev/null
+++ b/doc/statediagrams/general/initialization.uml
@@ -0,0 +1,80 @@
+/'
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2018  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+'/
+
+@startuml
+
+title **µRtWare**\nInitialization\n
+
+
+
+start
+fork
+  fork
+    partition "urt_core_t" {
+      note
+        must be initialized statically
+        (in startup thread)
+      endnote
+      :initialize members;
+    }
+  fork again
+    partition "urt_osThread_t" {
+      :initialize work area;
+      note
+        must be initialized statically
+        (in preamble / static memory allocation)
+      endnote
+      :initialize members;
+    }
+  endfork
+  fork
+    partition "urt_topic_t" {
+      :initialize members;
+      :insert self to topic list;
+    }
+    partition "urt_publisher_t" {
+      :initialize members;
+      :find topic in topic list;
+      if (Any messages to contribute?) then (yes)
+        :lock topic;
+        :contribute messages;
+        :unlock topic;
+      else (no)
+      endif
+    }
+  fork again
+    partition "urt_node_t" {
+      :initialize members;
+      :insert self to node list;
+    }
+  endfork
+fork again
+  partition "urt_subscriber_t" {
+    :initialize members;
+  }
+fork again
+  partition "urt_message_t" {
+    :initialize members;
+  }
+endfork
+stop
+
+@enduml
diff --git a/doc/statediagrams/node/nodethread.svg b/doc/statediagrams/node/nodethread.svg
new file mode 100644
index 0000000..dd60271
--- /dev/null
+++ b/doc/statediagrams/node/nodethread.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="500px" preserveAspectRatio="none" style="width:598px;height:500px;" version="1.1" viewBox="0 0 598 500" width="598px" zoomAndPan="magnify"><defs><filter height="300%" id="f2m2ok2ab1v62" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="253.5" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="116" x="240" y="47.6611">Node Thread</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="301" y="68.6143"/><ellipse cx="453.5" cy="82.8594" fill="#000000" filter="url(#f2m2ok2ab1v62)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><path d="M236,117.2773 L236,142.4102 A0,0 0 0 0 236,142.4102 L351,142.4102 A0,0 0 0 0 351,142.4102 L351,135.2773 L371,129.8438 L351,127.2773 L351,127.2773 L341,117.2773 L236,117.2773 A0,0 0 0 0 236,117.2773 " fill="#FBFB77" filter="url(#f2m2ok2ab1v62)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M341,117.2773 L341,127.2773 L351,127.2773 L341,117.2773 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="242" y="134.3442">must not loop!</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="371" y="112.8594"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="145" x="381" y="133.998">execute setup callback</text><path d="M10,171.2461 L10,196.3789 A0,0 0 0 0 10,196.3789 L300,196.3789 A0,0 0 0 0 300,196.3789 L300,189.2461 L320,183.8125 L300,181.2461 L300,181.2461 L290,171.2461 L10,171.2461 A0,0 0 0 0 10,171.2461 " fill="#FBFB77" filter="url(#f2m2ok2ab1v62)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M290,171.2461 L290,181.2461 L300,181.2461 L290,171.2461 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="269" x="16" y="188.313">threads are woken simultaneously by core</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="267" x="320" y="166.8281"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="247" x="330" y="187.9668">suspend thread and all children (if any)</text><path d="M184,280.9253 L184,306.0581 A0,0 0 0 0 184,306.0581 L381,306.0581 A0,0 0 0 0 381,306.0581 L381,298.9253 L401,293.4917 L381,290.9253 L381,290.9253 L371,280.9253 L184,280.9253 A0,0 0 0 0 184,280.9253 " fill="#FBFB77" filter="url(#f2m2ok2ab1v62)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M371,280.9253 L371,290.9253 L381,290.9253 L371,280.9253 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="176" x="190" y="297.9922">maks specified by callbacks</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="105" x="401" y="276.5073"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="85" x="411" y="297.646">wait for event</text><path d="M240.5,343.9917 L240.5,369.1245 A0,0 0 0 0 240.5,369.1245 L355.5,369.1245 A0,0 0 0 0 355.5,369.1245 L355.5,361.9917 L375.5,356.5581 L355.5,353.9917 L355.5,353.9917 L345.5,343.9917 L240.5,343.9917 A0,0 0 0 0 240.5,343.9917 " fill="#FBFB77" filter="url(#f2m2ok2ab1v62)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M345.5,343.9917 L345.5,353.9917 L355.5,353.9917 L345.5,343.9917 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="246.5" y="361.0586">must not loop!</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="375.5" y="339.5737"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="136" x="385.5" y="360.7124">execute loop callback</text><polygon fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" points="385.5,220.7969,521.5,220.7969,533.5,232.7969,521.5,244.7969,385.5,244.7969,373.5,232.7969,385.5,220.7969" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="457.5" y="255.0073">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="136" x="385.5" y="236.605">Termination requested?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="353.5" y="230.2026">yes</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="390" y="415.5425"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="107" x="400" y="436.6812">terminate thread</text><ellipse cx="453.5" cy="479.5112" fill="none" filter="url(#f2m2ok2ab1v62)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="454" cy="480.0112" fill="#000000" filter="url(#f2m2ok2ab1v62)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="449.5,102.8594,453.5,112.8594,457.5,102.8594,453.5,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="146.8281" y2="166.8281"/><polygon fill="#A80036" points="449.5,156.8281,453.5,166.8281,457.5,156.8281,453.5,160.8281" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="310.4761" y2="339.5737"/><polygon fill="#A80036" points="449.5,329.5737,453.5,339.5737,457.5,329.5737,453.5,333.5737" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="244.7969" y2="276.5073"/><polygon fill="#A80036" points="449.5,266.5073,453.5,276.5073,457.5,266.5073,453.5,270.5073" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="373.5425" y2="383.5425"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="545.5" y1="383.5425" y2="383.5425"/><polygon fill="#A80036" points="541.5,319.5737,545.5,309.5737,549.5,319.5737,545.5,315.5737" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="545.5" x2="545.5" y1="232.7969" y2="383.5425"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="545.5" x2="533.5" y1="232.7969" y2="232.7969"/><polygon fill="#A80036" points="543.5,228.7969,533.5,232.7969,543.5,236.7969,539.5,232.7969" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="373.5" x2="172" y1="232.7969" y2="232.7969"/><polygon fill="#A80036" points="168,305.5737,172,315.5737,176,305.5737,172,309.5737" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="172" x2="172" y1="232.7969" y2="395.5425"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="172" x2="453.5" y1="395.5425" y2="395.5425"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="395.5425" y2="415.5425"/><polygon fill="#A80036" points="449.5,405.5425,453.5,415.5425,457.5,405.5425,453.5,409.5425" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="200.7969" y2="220.7969"/><polygon fill="#A80036" points="449.5,210.7969,453.5,220.7969,457.5,210.7969,453.5,214.7969" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="449.5112" y2="469.5112"/><polygon fill="#A80036" points="449.5,459.5112,453.5,469.5112,457.5,459.5112,453.5,463.5112" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+title **µRtWare**\nNode Thread\n
+
+
+
+start
+:execute setup callback;
+note
+  must not loop!
+endnote
+:suspend thread and all children (if any);
+note
+  threads are woken simultaneously by core
+endnote
+while (Termination requested?) is (no)
+  :wait for event;
+  note
+    maks specified by callbacks
+  endnote
+  :execute loop callback;
+  note
+    must not loop!
+  endnote
+endwhile (yes)
+:terminate thread;
+stop
+
+@enduml
+
+PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
+Operating System: Linux
+OS Version: 4.15.0-36-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg>
\ No newline at end of file
diff --git a/doc/statediagrams/node/nodethread.uml b/doc/statediagrams/node/nodethread.uml
new file mode 100644
index 0000000..10a5e39
--- /dev/null
+++ b/doc/statediagrams/node/nodethread.uml
@@ -0,0 +1,50 @@
+/'
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2018  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+'/
+
+@startuml
+
+title **µRtWare**\nNode Thread\n
+
+
+
+start
+:execute setup callback;
+note
+  must not loop!
+endnote
+:suspend thread and all children (if any);
+note
+  threads are woken simultaneously by core
+endnote
+while (Termination requested?) is (no)
+  :wait for event;
+  note
+    maks specified by callbacks
+  endnote
+  :execute loop callback;
+  note
+    must not loop!
+  endnote
+endwhile (yes)
+:terminate thread;
+stop
+
+@enduml
diff --git a/doc/statediagrams/publisher/publish.svg b/doc/statediagrams/publisher/publish.svg
new file mode 100644
index 0000000..14d12d0
--- /dev/null
+++ b/doc/statediagrams/publisher/publish.svg
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="866px" preserveAspectRatio="none" style="width:2377px;height:866px;" version="1.1" viewBox="0 0 2377 866" width="2377px" zoomAndPan="magnify"><defs><filter height="300%" id="fee41veaagnt2" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="1143" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="183" x="1096" y="47.6611">urtPublisherPublish()</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="1190.5" y="68.6143"/><ellipse cx="657.25" cy="82.8594" fill="#000000" filter="url(#fee41veaagnt2)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="80" x="617.25" y="112.8594"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="627.25" y="133.998">lock topic</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="588.75" y="166.8281"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="598.75" y="187.9668">lock next message</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="344" x="485.25" y="276.5073"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="324" x="495.25" y="297.646">wait for condition variable to be signaled or timeout</text><polygon fill="#FEFECE" filter="url(#fee41veaagnt2)" points="509.25,220.7969,805.25,220.7969,817.25,232.7969,805.25,244.7969,509.25,244.7969,497.25,232.7969,509.25,220.7969" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="661.25" y="255.0073">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="296" x="509.25" y="236.605">HRT consumers left for the message &amp; no timeout?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="483.25" y="230.2026">no</text><polygon fill="#FEFECE" filter="url(#fee41veaagnt2)" points="604.25,352.4761,710.25,352.4761,722.25,364.4761,710.25,376.4761,604.25,376.4761,592.25,364.4761,604.25,352.4761" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="106" x="604.25" y="368.2842">Timeout occurred?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="572.25" y="361.8818">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="722.25" y="361.8818">no</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="122" x="10" y="386.4761"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="20" y="407.6147">unlock message</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="96" x="23" y="455.4448"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="33" y="476.5835">unlock topic</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="94" x="24" y="524.4136"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="74" x="34" y="545.5522">return error</text><ellipse cx="71" cy="603.3823" fill="none" filter="url(#fee41veaagnt2)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="71.5" cy="603.8823" fill="#000000" filter="url(#fee41veaagnt2)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><rect fill="#000000" filter="url(#fee41veaagnt2)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="2223" x="142" y="386.4761"/><rect fill="#000000" filter="url(#fee41veaagnt2)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="861" x="156" y="442.7964"/><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="251" x="170" y="468.7964"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="231" x="180" y="489.9351">iterate topic pointer to this message</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="102" x="449" y="468.7964"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="82" x="459" y="489.9351">copy payload</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="110" x="579" y="468.7964"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="589" y="489.9351">set origin time</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="286" x="717" y="468.7964"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="266" x="727" y="489.9351">set number of HRT consumers (from topic)</text><rect fill="#000000" filter="url(#fee41veaagnt2)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="861" x="156" y="522.7651"/><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="122" x="525.5" y="563.7651"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="535.5" y="584.9038">unlock message</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="350" x="1045" y="503.2808"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="330" x="1055" y="524.4194">set QoS timer (rate) wrt. most critical HRT subscriber</text><path d="M1457,526.1011 L1457,551.2339 A0,0 0 0 0 1457,551.2339 L1946,551.2339 A0,0 0 0 0 1946,551.2339 L1946,544.1011 L1966,538.6675 L1946,536.1011 L1946,536.1011 L1936,526.1011 L1457,526.1011 A0,0 0 0 0 1457,526.1011 " fill="#FBFB77" filter="url(#fee41veaagnt2)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1936,526.1011 L1936,536.1011 L1946,536.1011 L1936,526.1011 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="468" x="1463" y="543.168">no lock required since this timer is only accessed when the topic is locked</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="351" x="1966" y="521.6831"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="331" x="1976" y="542.8218">set QoS timer (delay) wrt. origin time of the message</text><polygon fill="#FEFECE" filter="url(#fee41veaagnt2)" points="2050,473.2808,2233,473.2808,2245,485.2808,2233,497.2808,2050,497.2808,2038,485.2808,2050,473.2808" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="2145.5" y="507.4912">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="183" x="2050" y="489.0889">QoS timer (delay) is not armed?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="2245" y="482.6865">no</text><polygon fill="#FEFECE" filter="url(#fee41veaagnt2)" points="2141.5,580.0542,2153.5,592.0542,2141.5,604.0542,2129.5,592.0542,2141.5,580.0542" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#fee41veaagnt2)" points="2080.5,412.4761,2202.5,412.4761,2214.5,424.4761,2202.5,436.4761,2080.5,436.4761,2068.5,424.4761,2080.5,412.4761" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="2145.5" y="446.6865">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="122" x="2080.5" y="428.2842">HRT subscribers left?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="2054.5" y="421.8818">no</text><rect fill="#000000" filter="url(#fee41veaagnt2)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="2223" x="142" y="648.0542"/><path d="M895,678.4722 L895,703.605 A0,0 0 0 0 895,703.605 L1194,703.605 A0,0 0 0 0 1194,703.605 L1194,696.4722 L1214,691.0386 L1194,688.4722 L1194,688.4722 L1184,678.4722 L895,678.4722 A0,0 0 0 0 895,678.4722 " fill="#FBFB77" filter="url(#fee41veaagnt2)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1184,678.4722 L1184,688.4722 L1194,688.4722 L1184,678.4722 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="278" x="901" y="695.5391">must be within lock because of HRT counter</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="79" x="1214" y="674.0542"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="59" x="1224" y="695.1929">fire event</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="96" x="1205.5" y="728.0229"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="1215.5" y="749.1616">unlock topic</text><rect fill="#FEFECE" filter="url(#fee41veaagnt2)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="1196.5" y="781.9917"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="94" x="1206.5" y="803.1304">return success</text><ellipse cx="1253.5" cy="845.9604" fill="none" filter="url(#fee41veaagnt2)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="1254" cy="846.4604" fill="#000000" filter="url(#fee41veaagnt2)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="657.25" x2="657.25" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="653.25,102.8594,657.25,112.8594,661.25,102.8594,657.25,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="657.25" x2="657.25" y1="146.8281" y2="166.8281"/><polygon fill="#A80036" points="653.25,156.8281,657.25,166.8281,661.25,156.8281,657.25,160.8281" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="657.25" x2="657.25" y1="244.7969" y2="276.5073"/><polygon fill="#A80036" points="653.25,266.5073,657.25,276.5073,661.25,266.5073,657.25,270.5073" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="657.25" x2="657.25" y1="310.4761" y2="320.4761"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="657.25" x2="841.25" y1="320.4761" y2="320.4761"/><polygon fill="#A80036" points="837.25,285.0894,841.25,275.0894,845.25,285.0894,841.25,281.0894" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="841.25" x2="841.25" y1="232.7969" y2="320.4761"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="841.25" x2="817.25" y1="232.7969" y2="232.7969"/><polygon fill="#A80036" points="827.25,228.7969,817.25,232.7969,827.25,236.7969,823.25,232.7969" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="497.25" x2="473.25" y1="232.7969" y2="232.7969"/><polygon fill="#A80036" points="469.25,271.0894,473.25,281.0894,477.25,271.0894,473.25,275.0894" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="473.25" x2="473.25" y1="232.7969" y2="332.4761"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="473.25" x2="657.25" y1="332.4761" y2="332.4761"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="657.25" x2="657.25" y1="332.4761" y2="352.4761"/><polygon fill="#A80036" points="653.25,342.4761,657.25,352.4761,661.25,342.4761,657.25,346.4761" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="657.25" x2="657.25" y1="200.7969" y2="220.7969"/><polygon fill="#A80036" points="653.25,210.7969,657.25,220.7969,661.25,210.7969,657.25,214.7969" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="71" x2="71" y1="420.4448" y2="455.4448"/><polygon fill="#A80036" points="67,445.4448,71,455.4448,75,445.4448,71,449.4448" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="71" x2="71" y1="489.4136" y2="524.4136"/><polygon fill="#A80036" points="67,514.4136,71,524.4136,75,514.4136,71,518.4136" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="71" x2="71" y1="558.3823" y2="593.3823"/><polygon fill="#A80036" points="67,583.3823,71,593.3823,75,583.3823,71,587.3823" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="295.5" x2="295.5" y1="448.7964" y2="468.7964"/><polygon fill="#A80036" points="291.5,458.7964,295.5,468.7964,299.5,458.7964,295.5,462.7964" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="500" x2="500" y1="448.7964" y2="468.7964"/><polygon fill="#A80036" points="496,458.7964,500,468.7964,504,458.7964,500,462.7964" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="634" x2="634" y1="448.7964" y2="468.7964"/><polygon fill="#A80036" points="630,458.7964,634,468.7964,638,458.7964,634,462.7964" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="860" x2="860" y1="448.7964" y2="468.7964"/><polygon fill="#A80036" points="856,458.7964,860,468.7964,864,458.7964,860,462.7964" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="295.5" x2="295.5" y1="502.7651" y2="522.7651"/><polygon fill="#A80036" points="291.5,512.7651,295.5,522.7651,299.5,512.7651,295.5,516.7651" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="500" x2="500" y1="502.7651" y2="522.7651"/><polygon fill="#A80036" points="496,512.7651,500,522.7651,504,512.7651,500,516.7651" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="634" x2="634" y1="502.7651" y2="522.7651"/><polygon fill="#A80036" points="630,512.7651,634,522.7651,638,512.7651,634,516.7651" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="860" x2="860" y1="502.7651" y2="522.7651"/><polygon fill="#A80036" points="856,512.7651,860,522.7651,864,512.7651,860,516.7651" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="586.5" x2="586.5" y1="528.7651" y2="563.7651"/><polygon fill="#A80036" points="582.5,553.7651,586.5,563.7651,590.5,553.7651,586.5,557.7651" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2141.5" x2="2141.5" y1="497.2808" y2="521.6831"/><polygon fill="#A80036" points="2137.5,511.6831,2141.5,521.6831,2145.5,511.6831,2141.5,515.6831" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2245" x2="2327" y1="485.2808" y2="485.2808"/><polygon fill="#A80036" points="2323,528.6675,2327,538.6675,2331,528.6675,2327,532.6675" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2327" x2="2327" y1="485.2808" y2="592.0542"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2327" x2="2153.5" y1="592.0542" y2="592.0542"/><polygon fill="#A80036" points="2163.5,588.0542,2153.5,592.0542,2163.5,596.0542,2159.5,592.0542" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2141.5" x2="2141.5" y1="555.6519" y2="580.0542"/><polygon fill="#A80036" points="2137.5,570.0542,2141.5,580.0542,2145.5,570.0542,2141.5,574.0542" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2141.5" x2="2141.5" y1="436.4761" y2="473.2808"/><polygon fill="#A80036" points="2137.5,463.2808,2141.5,473.2808,2145.5,463.2808,2141.5,467.2808" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2141.5" x2="2141.5" y1="604.0542" y2="616.0542"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2141.5" x2="2351" y1="616.0542" y2="616.0542"/><polygon fill="#A80036" points="2347,530.2651,2351,520.2651,2355,530.2651,2351,526.2651" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2351" x2="2351" y1="424.4761" y2="616.0542"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2351" x2="2214.5" y1="424.4761" y2="424.4761"/><polygon fill="#A80036" points="2224.5,420.4761,2214.5,424.4761,2224.5,428.4761,2220.5,424.4761" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2068.5" x2="1435" y1="424.4761" y2="424.4761"/><polygon fill="#A80036" points="1431,516.2651,1435,526.2651,1439,516.2651,1435,520.2651" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1435" x2="1435" y1="424.4761" y2="628.0542"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1435" x2="2141.5" y1="628.0542" y2="628.0542"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2141.5" x2="2141.5" y1="628.0542" y2="648.0542"/><polygon fill="#A80036" points="2137.5,638.0542,2141.5,648.0542,2145.5,638.0542,2141.5,642.0542" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="586.5" x2="586.5" y1="392.4761" y2="442.7964"/><polygon fill="#A80036" points="582.5,432.7964,586.5,442.7964,590.5,432.7964,586.5,436.7964" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1220" x2="1220" y1="392.4761" y2="503.2808"/><polygon fill="#A80036" points="1216,493.2808,1220,503.2808,1224,493.2808,1220,497.2808" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2141.5" x2="2141.5" y1="392.4761" y2="412.4761"/><polygon fill="#A80036" points="2137.5,402.4761,2141.5,412.4761,2145.5,402.4761,2141.5,406.4761" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="586.5" x2="586.5" y1="597.7339" y2="648.0542"/><polygon fill="#A80036" points="582.5,638.0542,586.5,648.0542,590.5,638.0542,586.5,642.0542" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1220" x2="1220" y1="537.2495" y2="648.0542"/><polygon fill="#A80036" points="1216,638.0542,1220,648.0542,1224,638.0542,1220,642.0542" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1253.5" x2="1253.5" y1="654.0542" y2="674.0542"/><polygon fill="#A80036" points="1249.5,664.0542,1253.5,674.0542,1257.5,664.0542,1253.5,668.0542" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1253.5" x2="1253.5" y1="708.0229" y2="728.0229"/><polygon fill="#A80036" points="1249.5,718.0229,1253.5,728.0229,1257.5,718.0229,1253.5,722.0229" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1253.5" x2="1253.5" y1="761.9917" y2="781.9917"/><polygon fill="#A80036" points="1249.5,771.9917,1253.5,781.9917,1257.5,771.9917,1253.5,775.9917" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1253.5" x2="1253.5" y1="815.9604" y2="835.9604"/><polygon fill="#A80036" points="1249.5,825.9604,1253.5,835.9604,1257.5,825.9604,1253.5,829.9604" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="592.25" x2="71" y1="364.4761" y2="364.4761"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="71" x2="71" y1="364.4761" y2="386.4761"/><polygon fill="#A80036" points="67,376.4761,71,386.4761,75,376.4761,71,380.4761" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="722.25" x2="1253.5" y1="364.4761" y2="364.4761"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1253.5" x2="1253.5" y1="364.4761" y2="386.4761"/><polygon fill="#A80036" points="1249.5,376.4761,1253.5,386.4761,1257.5,376.4761,1253.5,380.4761" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+title **µRtWare**\nurtPublisherPublish()\n
+
+
+
+start
+:lock topic;
+:lock next message;
+while (HRT consumers left for the message & no timeout?) is (yes)
+  :wait for condition variable to be signaled or timeout;
+endwhile (no)
+if (Timeout occurred?) then (yes)
+  :unlock message;
+  :unlock topic;
+  :return error;
+  stop
+else (no)
+  fork
+    fork
+      :iterate topic pointer to this message;
+    fork again
+      :copy payload;
+    fork again
+      :set origin time;
+    fork again
+      :set number of HRT consumers (from topic);
+    endfork
+    :unlock message;
+  fork again
+    :set QoS timer (rate) wrt. most critical HRT subscriber;
+  fork again
+    while (HRT subscribers left?) is (yes)
+      if (QoS timer (delay) is not armed?) then (yes)
+        :set QoS timer (delay) wrt. origin time of the message;
+        note
+          no lock required since this timer is only accessed when the topic is locked
+        endnote
+      else (no)
+      endif
+    endwhile (no)
+  endfork
+  :fire event;
+  note
+    must be within lock because of HRT counter
+  endnote
+  :unlock topic;
+  :return success;
+  stop
+endif
+
+@enduml
+
+PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
+Operating System: Linux
+OS Version: 4.15.0-36-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg>
\ No newline at end of file
diff --git a/doc/statediagrams/publisher/publish.uml b/doc/statediagrams/publisher/publish.uml
new file mode 100644
index 0000000..0b60c50
--- /dev/null
+++ b/doc/statediagrams/publisher/publish.uml
@@ -0,0 +1,73 @@
+/'
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2018  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+'/
+
+@startuml
+
+title **µRtWare**\nurtPublisherPublish()\n
+
+
+
+start
+:lock topic;
+:lock next message;
+while (HRT consumers left for the message & no timeout?) is (yes)
+  :wait for condition variable to be signaled or timeout;
+endwhile (no)
+if (Timeout occurred?) then (yes)
+  :unlock message;
+  :unlock topic;
+  :return error;
+  stop
+else (no)
+  fork
+    fork
+      :iterate topic pointer to this message;
+    fork again
+      :copy payload;
+    fork again
+      :set origin time;
+    fork again
+      :set number of HRT consumers (from topic);
+    endfork
+    :unlock message;
+  fork again
+    :set QoS timer (rate) wrt. most critical HRT subscriber;
+  fork again
+    while (HRT subscribers left?) is (yes)
+      if (QoS timer (delay) is not armed?) then (yes)
+        :set QoS timer (delay) wrt. origin time of the message;
+        note
+          no lock required since this timer is only accessed when the topic is locked
+        endnote
+      else (no)
+      endif
+    endwhile (no)
+  endfork
+  :fire event;
+  note
+    must be within lock because of HRT counter
+  endnote
+  :unlock topic;
+  :return success;
+  stop
+endif
+
+@enduml
diff --git a/doc/statediagrams/subscriber/receive.svg b/doc/statediagrams/subscriber/receive.svg
new file mode 100644
index 0000000..c662bd6
--- /dev/null
+++ b/doc/statediagrams/subscriber/receive.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1377px" preserveAspectRatio="none" style="width:1968px;height:1377px;" version="1.1" viewBox="0 0 1968 1377" width="1968px" zoomAndPan="magnify"><defs><filter height="300%" id="f13ufdpbbhx79" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="938.5" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="256" x="855" y="47.6611">urtSubscriberFetchMessage()</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="986" y="68.6143"/><path d="M1046,72.8594 L1046,97.9922 A0,0 0 0 0 1046,97.9922 L1161,97.9922 A0,0 0 0 0 1161,97.9922 L1161,90.8594 L1181,85.4258 L1161,82.8594 L1161,82.8594 L1151,72.8594 L1046,72.8594 A0,0 0 0 0 1046,72.8594 " fill="#FBFB77" filter="url(#f13ufdpbbhx79)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1151,72.8594 L1151,82.8594 L1161,82.8594 L1151,72.8594 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="1052" y="89.9263">event received</text><ellipse cx="1191" cy="85.4258" fill="#000000" filter="url(#f13ufdpbbhx79)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><path d="M748,122.4102 L748,147.543 A0,0 0 0 0 748,147.543 L1131,147.543 A0,0 0 0 0 1131,147.543 L1131,140.4102 L1151,134.9766 L1131,132.4102 L1131,132.4102 L1121,122.4102 L748,122.4102 A0,0 0 0 0 748,122.4102 " fill="#FBFB77" filter="url(#f13ufdpbbhx79)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1121,122.4102 L1121,132.4102 L1131,132.4102 L1121,122.4102 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="362" x="754" y="139.4771">The message list is part of the topic and must be locked.</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="80" x="1151" y="117.9922"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="1161" y="139.1309">lock topic</text><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="1137.5,171.9609,1244.5,171.9609,1256.5,183.9609,1244.5,195.9609,1137.5,195.9609,1125.5,183.9609,1137.5,171.9609" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="1137.5" y="187.769">Is HRT subscriber?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="1105.5" y="181.3667">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1256.5" y="181.3667">no</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="595" y="205.9609"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="605" y="227.0996">lock next message</text><rect fill="#FFFFFF" filter="url(#f13ufdpbbhx79)" height="471.2388" style="stroke: #000000; stroke-width: 2.0;" width="1304" x="10" y="306.4419"/><path d="M124,307.4419 L124,315.7388 L114,325.7388 L10,325.7388 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="13" y="320.437">iterate to latest</text><path d="M372,347.1567 L372,372.2896 A0,0 0 0 0 372,372.2896 L575,372.2896 A0,0 0 0 0 575,372.2896 L575,365.1567 L595,359.7231 L575,357.1567 L575,357.1567 L565,347.1567 L372,347.1567 A0,0 0 0 0 372,347.1567 " fill="#FBFB77" filter="url(#f13ufdpbbhx79)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M565,347.1567 L565,357.1567 L575,357.1567 L565,347.1567 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="182" x="378" y="364.2236">locked two messaged ahead</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="595" y="342.7388"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="605" y="363.8774">lock next message</text><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1239" x="44" y="457.5122"/><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1046" x="58" y="483.5122"/><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="304" x="72" y="509.5122"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="284" x="82" y="530.6509">decremenet HRT counter of current message</text><path d="M404,513.9302 L404,539.063 A0,0 0 0 0 404,539.063 L893,539.063 A0,0 0 0 0 893,539.063 L893,531.9302 L913,526.4966 L893,523.9302 L893,523.9302 L883,513.9302 L404,513.9302 A0,0 0 0 0 404,513.9302 " fill="#FBFB77" filter="url(#f13ufdpbbhx79)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M883,513.9302 L883,523.9302 L893,523.9302 L883,513.9302 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="468" x="410" y="530.9971">no lock required since this timer is only accessed when the topic is locked</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="177" x="913" y="509.5122"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="157" x="923" y="530.6509">update QoS timer (delay)</text><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1046" x="58" y="563.481"/><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="172" x="495" y="600.3364"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="152" x="505" y="621.4751">unlock current message</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="1132" y="543.9966"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="1142" y="565.1353">lock next message</text><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1239" x="44" y="654.3052"/><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="509.5,396.7075,817.5,396.7075,829.5,408.7075,817.5,420.7075,509.5,420.7075,497.5,408.7075,509.5,396.7075" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="667.5" y="430.918">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="308" x="509.5" y="412.5156">Timestamp of next message is younger than current?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="483.5" y="406.1133">no</text><path d="M304,717.415 L304,757.6807 A0,0 0 0 0 304,757.6807 L567,757.6807 A0,0 0 0 0 567,757.6807 L567,741.5479 L587,737.5479 L567,733.5479 L567,727.415 L557,717.415 L304,717.415 A0,0 0 0 0 304,717.415 " fill="#FBFB77" filter="url(#f13ufdpbbhx79)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M557,717.415 L557,727.415 L567,727.415 L557,717.415 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="201" x="310" y="734.4819">one message ahead still locked</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="242" x="310" y="749.6147">but HRT counter not yet decremented</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="587" y="720.5635"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="133" x="597" y="741.7021">unlock next message</text><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="577,259.9297,750,259.9297,762,271.9297,750,283.9297,577,283.9297,565,271.9297,577,259.9297" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="667.5" y="294.1401">latest</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="173" x="577" y="275.7378">Fetch next or latest message?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="24" x="762" y="269.3354">next</text><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="663.5,797.6807,675.5,809.6807,663.5,821.6807,651.5,809.6807,663.5,797.6807" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1038" x="144.5" y="856.6807"/><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="296" x="158.5" y="882.6807"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="276" x="168.5" y="903.8193">decrement HRT counter of current message</text><path d="M482.5,887.0986 L482.5,912.2314 A0,0 0 0 0 482.5,912.2314 L971.5,912.2314 A0,0 0 0 0 971.5,912.2314 L971.5,905.0986 L991.5,899.665 L971.5,897.0986 L971.5,897.0986 L961.5,887.0986 L482.5,887.0986 A0,0 0 0 0 482.5,887.0986 " fill="#FBFB77" filter="url(#f13ufdpbbhx79)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M961.5,887.0986 L961.5,897.0986 L971.5,897.0986 L961.5,887.0986 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="468" x="488.5" y="904.1655">no lock required since this timer is only accessed when the topic is locked</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="177" x="991.5" y="882.6807"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="157" x="1001.5" y="903.8193">update QoS timer (delay)</text><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1038" x="144.5" y="936.6494"/><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="166" x="1635.5" y="205.9609"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="146" x="1645.5" y="227.0996">lock last read message</text><rect fill="#FFFFFF" filter="url(#f13ufdpbbhx79)" height="271.2656" style="stroke: #000000; stroke-width: 2.0;" width="406" x="1526" y="306.4419"/><path d="M1710,307.4419 L1710,315.7388 L1700,325.7388 L1526,325.7388 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="174" x="1529" y="320.437">find oldest valid message</text><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="365" x="1536" y="399.7388"/><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="172" x="1550" y="425.7388"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="152" x="1560" y="446.8774">unlock current message</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="1750" y="425.7388"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="1760" y="446.8774">lock next message</text><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="365" x="1536" y="479.7075"/><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="1718.5,342.7388,1730.5,354.7388,1718.5,366.7388,1706.5,354.7388,1718.5,342.7388" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="1573.5,533.7075,1863.5,533.7075,1875.5,545.7075,1863.5,557.7075,1573.5,557.7075,1561.5,545.7075,1573.5,533.7075" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="290" x="1573.5" y="549.5156">while timestamp of next is younger than of current</text><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="1632.5,259.9297,1804.5,259.9297,1816.5,271.9297,1804.5,283.9297,1632.5,283.9297,1620.5,271.9297,1632.5,259.9297" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1722.5" y="294.1401">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="1632.5" y="275.7378">Timestamp equals local copy?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="1816.5" y="269.3354">yes</text><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="1718.5,597.9653,1730.5,609.9653,1718.5,621.9653,1706.5,609.9653,1718.5,597.9653" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FFFFFF" filter="url(#f13ufdpbbhx79)" height="335.6055" style="stroke: #000000; stroke-width: 2.0;" width="563" x="1366" y="703.4775"/><path d="M1480,704.4775 L1480,712.7744 L1470,722.7744 L1366,722.7744 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="1369" y="717.4727">iterate to latest</text><path d="M1428,744.1924 L1428,769.3252 A0,0 0 0 0 1428,769.3252 L1630,769.3252 A0,0 0 0 0 1630,769.3252 L1630,762.1924 L1650,756.7588 L1630,754.1924 L1630,754.1924 L1620,744.1924 L1428,744.1924 A0,0 0 0 0 1428,744.1924 " fill="#FBFB77" filter="url(#f13ufdpbbhx79)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1620,744.1924 L1620,754.1924 L1630,754.1924 L1620,744.1924 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="181" x="1434" y="761.2593">locked two messages ahead</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="1650" y="739.7744"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="1660" y="760.9131">lock next message</text><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="365" x="1536" y="865.1455"/><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="172" x="1550" y="891.1455"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="152" x="1560" y="912.2842">unlock current message</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="1750" y="891.1455"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="1760" y="912.2842">lock next message</text><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="365" x="1536" y="945.1143"/><path d="M1400,975.5322 L1400,1000.665 A0,0 0 0 0 1400,1000.665 L1622,1000.665 A0,0 0 0 0 1622,1000.665 L1622,993.5322 L1642,988.0986 L1622,985.5322 L1622,985.5322 L1612,975.5322 L1400,975.5322 A0,0 0 0 0 1400,975.5322 " fill="#FBFB77" filter="url(#f13ufdpbbhx79)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1612,975.5322 L1612,985.5322 L1622,985.5322 L1612,975.5322 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="201" x="1406" y="992.5991">one message ahead still locked</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="1642" y="971.1143"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="133" x="1652" y="992.2529">unlock next message</text><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="1564.5,804.3408,1872.5,804.3408,1884.5,816.3408,1872.5,828.3408,1564.5,828.3408,1552.5,816.3408,1564.5,804.3408" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="1722.5" y="838.5513">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="308" x="1564.5" y="820.1489">Timestamp of next message is younger then current?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1538.5" y="813.7466">no</text><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="1632,656.9653,1805,656.9653,1817,668.9653,1805,680.9653,1632,680.9653,1620,668.9653,1632,656.9653" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="1722.5" y="691.1758">latest</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="173" x="1632" y="672.7734">Fetch next or latest message?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="24" x="1817" y="666.3711">next</text><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="1718.5,1059.083,1730.5,1071.083,1718.5,1083.083,1706.5,1071.083,1718.5,1059.083" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f13ufdpbbhx79)" points="1191,1089.083,1203,1101.083,1191,1113.083,1179,1101.083,1191,1089.083" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="602" x="890" y="1133.083"/><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="350" x="904" y="1159.083"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="330" x="914" y="1180.2217">set pointer to last message read to locked message</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="196" x="1282" y="1159.083"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="176" x="1292" y="1180.2217">copy timestamp of message</text><rect fill="#000000" filter="url(#f13ufdpbbhx79)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="602" x="890" y="1213.0518"/><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="122" x="1130" y="1239.0518"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1140" y="1260.1904">unlock message</text><rect fill="#FEFECE" filter="url(#f13ufdpbbhx79)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="96" x="1143" y="1293.0205"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="1153" y="1314.1592">unlock topic</text><ellipse cx="1191" cy="1356.9893" fill="none" filter="url(#f13ufdpbbhx79)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="1191.5" cy="1357.4893" fill="#000000" filter="url(#f13ufdpbbhx79)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1191" x2="1191" y1="95.4258" y2="117.9922"/><polygon fill="#A80036" points="1187,107.9922,1191,117.9922,1195,107.9922,1191,111.9922" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="224" x2="224" y1="489.5122" y2="509.5122"/><polygon fill="#A80036" points="220,499.5122,224,509.5122,228,499.5122,224,503.5122" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1001.5" x2="1001.5" y1="489.5122" y2="509.5122"/><polygon fill="#A80036" points="997.5,499.5122,1001.5,509.5122,1005.5,499.5122,1001.5,503.5122" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="224" x2="224" y1="543.481" y2="563.481"/><polygon fill="#A80036" points="220,553.481,224,563.481,228,553.481,224,557.481" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1001.5" x2="1001.5" y1="543.481" y2="563.481"/><polygon fill="#A80036" points="997.5,553.481,1001.5,563.481,1005.5,553.481,1001.5,557.481" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="581" x2="581" y1="569.481" y2="600.3364"/><polygon fill="#A80036" points="577,590.3364,581,600.3364,585,590.3364,581,594.3364" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="581" x2="581" y1="463.5122" y2="483.5122"/><polygon fill="#A80036" points="577,473.5122,581,483.5122,585,473.5122,581,477.5122" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1200.5" x2="1200.5" y1="463.5122" y2="543.9966"/><polygon fill="#A80036" points="1196.5,533.9966,1200.5,543.9966,1204.5,533.9966,1200.5,537.9966" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="581" x2="581" y1="634.3052" y2="654.3052"/><polygon fill="#A80036" points="577,644.3052,581,654.3052,585,644.3052,581,648.3052" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1200.5" x2="1200.5" y1="577.9653" y2="654.3052"/><polygon fill="#A80036" points="1196.5,644.3052,1200.5,654.3052,1204.5,644.3052,1200.5,648.3052" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="420.7075" y2="457.5122"/><polygon fill="#A80036" points="659.5,447.5122,663.5,457.5122,667.5,447.5122,663.5,451.5122" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="660.3052" y2="672.3052"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="1295" y1="672.3052" y2="672.3052"/><polygon fill="#A80036" points="1291,552.5786,1295,542.5786,1299,552.5786,1295,548.5786" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1295" x2="1295" y1="408.7075" y2="672.3052"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1295" x2="829.5" y1="408.7075" y2="408.7075"/><polygon fill="#A80036" points="839.5,404.7075,829.5,408.7075,839.5,412.7075,835.5,408.7075" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="497.5" x2="32" y1="408.7075" y2="408.7075"/><polygon fill="#A80036" points="28,538.5786,32,548.5786,36,538.5786,32,542.5786" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="32" x2="32" y1="408.7075" y2="684.3052"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="32" x2="663.5" y1="684.3052" y2="684.3052"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="684.3052" y2="720.5635"/><polygon fill="#A80036" points="659.5,710.5635,663.5,720.5635,667.5,710.5635,663.5,714.5635" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="376.7075" y2="396.7075"/><polygon fill="#A80036" points="659.5,386.7075,663.5,396.7075,667.5,386.7075,663.5,390.7075" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="283.9297" y2="342.7388"/><polygon fill="#A80036" points="659.5,332.7388,663.5,342.7388,667.5,332.7388,663.5,336.7388" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="762" x2="1324" y1="271.9297" y2="271.9297"/><polygon fill="#A80036" points="1320,527.5786,1324,537.5786,1328,527.5786,1324,531.5786" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1324" x2="1324" y1="271.9297" y2="809.6807"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1324" x2="675.5" y1="809.6807" y2="809.6807"/><polygon fill="#A80036" points="685.5,805.6807,675.5,809.6807,685.5,813.6807,681.5,809.6807" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="754.5322" y2="797.6807"/><polygon fill="#A80036" points="659.5,787.6807,663.5,797.6807,667.5,787.6807,663.5,791.6807" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="239.9297" y2="259.9297"/><polygon fill="#A80036" points="659.5,249.9297,663.5,259.9297,667.5,249.9297,663.5,253.9297" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="306.5" x2="306.5" y1="862.6807" y2="882.6807"/><polygon fill="#A80036" points="302.5,872.6807,306.5,882.6807,310.5,872.6807,306.5,876.6807" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1080" x2="1080" y1="862.6807" y2="882.6807"/><polygon fill="#A80036" points="1076,872.6807,1080,882.6807,1084,872.6807,1080,876.6807" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="306.5" x2="306.5" y1="916.6494" y2="936.6494"/><polygon fill="#A80036" points="302.5,926.6494,306.5,936.6494,310.5,926.6494,306.5,930.6494" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1080" x2="1080" y1="916.6494" y2="936.6494"/><polygon fill="#A80036" points="1076,926.6494,1080,936.6494,1084,926.6494,1080,930.6494" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="821.6807" y2="856.6807"/><polygon fill="#A80036" points="659.5,846.6807,663.5,856.6807,667.5,846.6807,663.5,850.6807" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1636" x2="1636" y1="405.7388" y2="425.7388"/><polygon fill="#A80036" points="1632,415.7388,1636,425.7388,1640,415.7388,1636,419.7388" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1818.5" x2="1818.5" y1="405.7388" y2="425.7388"/><polygon fill="#A80036" points="1814.5,415.7388,1818.5,425.7388,1822.5,415.7388,1818.5,419.7388" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1636" x2="1636" y1="459.7075" y2="479.7075"/><polygon fill="#A80036" points="1632,469.7075,1636,479.7075,1640,469.7075,1636,473.7075" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1818.5" x2="1818.5" y1="459.7075" y2="479.7075"/><polygon fill="#A80036" points="1814.5,469.7075,1818.5,479.7075,1822.5,469.7075,1818.5,473.7075" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="366.7388" y2="399.7388"/><polygon fill="#A80036" points="1714.5,389.7388,1718.5,399.7388,1722.5,389.7388,1718.5,393.7388" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1875.5" x2="1913" y1="545.7075" y2="545.7075"/><polygon fill="#A80036" points="1909,452.7231,1913,442.7231,1917,452.7231,1913,448.7231" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1913" x2="1913" y1="354.7388" y2="545.7075"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1913" x2="1730.5" y1="354.7388" y2="354.7388"/><polygon fill="#A80036" points="1740.5,350.7388,1730.5,354.7388,1740.5,358.7388,1736.5,354.7388" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="485.7075" y2="533.7075"/><polygon fill="#A80036" points="1714.5,523.7075,1718.5,533.7075,1722.5,523.7075,1718.5,527.7075" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="283.9297" y2="342.7388"/><polygon fill="#A80036" points="1714.5,332.7388,1718.5,342.7388,1722.5,332.7388,1718.5,336.7388" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1816.5" x2="1942" y1="271.9297" y2="271.9297"/><polygon fill="#A80036" points="1938,424.5747,1942,434.5747,1946,424.5747,1942,428.5747" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1942" x2="1942" y1="271.9297" y2="609.9653"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1942" x2="1730.5" y1="609.9653" y2="609.9653"/><polygon fill="#A80036" points="1740.5,605.9653,1730.5,609.9653,1740.5,613.9653,1736.5,609.9653" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="557.7075" y2="597.9653"/><polygon fill="#A80036" points="1714.5,587.9653,1718.5,597.9653,1722.5,587.9653,1718.5,591.9653" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="239.9297" y2="259.9297"/><polygon fill="#A80036" points="1714.5,249.9297,1718.5,259.9297,1722.5,249.9297,1718.5,253.9297" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1636" x2="1636" y1="871.1455" y2="891.1455"/><polygon fill="#A80036" points="1632,881.1455,1636,891.1455,1640,881.1455,1636,885.1455" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1818.5" x2="1818.5" y1="871.1455" y2="891.1455"/><polygon fill="#A80036" points="1814.5,881.1455,1818.5,891.1455,1822.5,881.1455,1818.5,885.1455" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1636" x2="1636" y1="925.1143" y2="945.1143"/><polygon fill="#A80036" points="1632,935.1143,1636,945.1143,1640,935.1143,1636,939.1143" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1818.5" x2="1818.5" y1="925.1143" y2="945.1143"/><polygon fill="#A80036" points="1814.5,935.1143,1818.5,945.1143,1822.5,935.1143,1818.5,939.1143" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="951.1143" y2="971.1143"/><polygon fill="#A80036" points="1714.5,961.1143,1718.5,971.1143,1722.5,961.1143,1718.5,965.1143" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="828.3408" y2="865.1455"/><polygon fill="#A80036" points="1714.5,855.1455,1718.5,865.1455,1722.5,855.1455,1718.5,859.1455" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="1005.083" y2="1015.083"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1913" y1="1015.083" y2="1015.083"/><polygon fill="#A80036" points="1909,934.2119,1913,924.2119,1917,934.2119,1913,930.2119" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1913" x2="1913" y1="816.3408" y2="1015.083"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1913" x2="1884.5" y1="816.3408" y2="816.3408"/><polygon fill="#A80036" points="1894.5,812.3408,1884.5,816.3408,1894.5,820.3408,1890.5,816.3408" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1552.5" x2="1388" y1="816.3408" y2="816.3408"/><polygon fill="#A80036" points="1384,920.2119,1388,930.2119,1392,920.2119,1388,924.2119" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1388" x2="1388" y1="816.3408" y2="1027.083"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1388" x2="1718.5" y1="1027.083" y2="1027.083"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="1027.083" y2="1059.083"/><polygon fill="#A80036" points="1714.5,1049.083,1718.5,1059.083,1722.5,1049.083,1718.5,1053.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="773.7432" y2="804.3408"/><polygon fill="#A80036" points="1714.5,794.3408,1718.5,804.3408,1722.5,794.3408,1718.5,798.3408" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="680.9653" y2="739.7744"/><polygon fill="#A80036" points="1714.5,729.7744,1718.5,739.7744,1722.5,729.7744,1718.5,733.7744" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1817" x2="1939" y1="668.9653" y2="668.9653"/><polygon fill="#A80036" points="1935,871.5791,1939,881.5791,1943,871.5791,1939,875.5791" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1939" x2="1939" y1="668.9653" y2="1071.083"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1939" x2="1730.5" y1="1071.083" y2="1071.083"/><polygon fill="#A80036" points="1740.5,1067.083,1730.5,1071.083,1740.5,1075.083,1736.5,1071.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="621.9653" y2="656.9653"/><polygon fill="#A80036" points="1714.5,646.9653,1718.5,656.9653,1722.5,646.9653,1718.5,650.9653" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1125.5" x2="663.5" y1="183.9609" y2="183.9609"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="183.9609" y2="205.9609"/><polygon fill="#A80036" points="659.5,195.9609,663.5,205.9609,667.5,195.9609,663.5,199.9609" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1256.5" x2="1718.5" y1="183.9609" y2="183.9609"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="183.9609" y2="205.9609"/><polygon fill="#A80036" points="1714.5,195.9609,1718.5,205.9609,1722.5,195.9609,1718.5,199.9609" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="663.5" y1="942.6494" y2="1101.083"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="663.5" x2="1179" y1="1101.083" y2="1101.083"/><polygon fill="#A80036" points="1169,1097.083,1179,1101.083,1169,1105.083,1173,1101.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1718.5" y1="1083.083" y2="1101.083"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1718.5" x2="1203" y1="1101.083" y2="1101.083"/><polygon fill="#A80036" points="1213,1097.083,1203,1101.083,1213,1105.083,1209,1101.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1191" x2="1191" y1="151.9609" y2="171.9609"/><polygon fill="#A80036" points="1187,161.9609,1191,171.9609,1195,161.9609,1191,165.9609" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1079" x2="1079" y1="1139.083" y2="1159.083"/><polygon fill="#A80036" points="1075,1149.083,1079,1159.083,1083,1149.083,1079,1153.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1380" x2="1380" y1="1139.083" y2="1159.083"/><polygon fill="#A80036" points="1376,1149.083,1380,1159.083,1384,1149.083,1380,1153.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1079" x2="1079" y1="1193.0518" y2="1213.0518"/><polygon fill="#A80036" points="1075,1203.0518,1079,1213.0518,1083,1203.0518,1079,1207.0518" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1380" x2="1380" y1="1193.0518" y2="1213.0518"/><polygon fill="#A80036" points="1376,1203.0518,1380,1213.0518,1384,1203.0518,1380,1207.0518" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1191" x2="1191" y1="1113.083" y2="1133.083"/><polygon fill="#A80036" points="1187,1123.083,1191,1133.083,1195,1123.083,1191,1127.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1191" x2="1191" y1="1219.0518" y2="1239.0518"/><polygon fill="#A80036" points="1187,1229.0518,1191,1239.0518,1195,1229.0518,1191,1233.0518" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1191" x2="1191" y1="1273.0205" y2="1293.0205"/><polygon fill="#A80036" points="1187,1283.0205,1191,1293.0205,1195,1283.0205,1191,1287.0205" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1191" x2="1191" y1="1326.9893" y2="1346.9893"/><polygon fill="#A80036" points="1187,1336.9893,1191,1346.9893,1195,1336.9893,1191,1340.9893" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+title **µRtWare**\nurtSubscriberFetchMessage()\n
+
+
+
+start
+note
+  event received
+endnote
+:lock topic;
+note
+  The message list is part of the topic and must be locked.
+endnote
+if (Is HRT subscriber?) then (yes)
+  :lock next message;
+  if (Fetch next or latest message?) then (next)
+  else (latest)
+    partition "iterate to latest" {
+      :lock next message;
+      note
+        locked two messaged ahead
+      endnote
+      while (Timestamp of next message is younger than current?) is (yes)
+        fork
+          fork
+            :decremenet HRT counter of current message;
+          fork again
+            :update QoS timer (delay);
+            note
+              no lock required since this timer is only accessed when the topic is locked
+            endnote
+          endfork
+          :unlock current message;
+        fork again
+          :lock next message;
+        endfork
+      endwhile (no)
+      :unlock next message;
+      note
+        one message ahead still locked
+        but HRT counter not yet decremented
+      endnote
+    }
+  endif
+  fork
+    :decrement HRT counter of current message;
+  fork again
+    :update QoS timer (delay);
+    note
+      no lock required since this timer is only accessed when the topic is locked
+    endnote
+  endfork
+else (no)
+  :lock last read message;
+  if (Timestamp equals local copy?) then (yes)
+  else (no)
+    partition "find oldest valid message" {
+      repeat
+        fork
+          :unlock current message;
+        fork again
+          :lock next message;
+        forkend
+      repeat while (while timestamp of next is younger than of current)
+    }
+  endif
+  if (Fetch next or latest message?) then (next)
+  else (latest)
+    partition "iterate to latest" {
+      :lock next message;
+      note
+        locked two messages ahead
+      endnote
+      while (Timestamp of next message is younger then current?) is (yes)
+        fork
+          :unlock current message;
+        fork again
+          :lock next message;
+        endfork
+        :unlock next message;
+        note
+          one message ahead still locked
+        endnote
+      endwhile (no)
+    }
+  endif
+endif
+fork
+  :set pointer to last message read to locked message;
+fork again
+  :copy timestamp of message;
+endfork
+:unlock message;
+:unlock topic;
+stop
+
+@enduml
+
+PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
+Operating System: Linux
+OS Version: 4.15.0-36-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg>
\ No newline at end of file
diff --git a/doc/statediagrams/subscriber/receive.uml b/doc/statediagrams/subscriber/receive.uml
new file mode 100644
index 0000000..200fde5
--- /dev/null
+++ b/doc/statediagrams/subscriber/receive.uml
@@ -0,0 +1,119 @@
+/'
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2018  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+'/
+
+@startuml
+
+title **µRtWare**\nurtSubscriberFetchMessage()\n
+
+
+
+start
+note
+  event received
+endnote
+:lock topic;
+note
+  The message list is part of the topic and must be locked.
+endnote
+if (Is HRT subscriber?) then (yes)
+  :lock next message;
+  if (Fetch next or latest message?) then (next)
+  else (latest)
+    partition "iterate to latest" {
+      :lock next message;
+      note
+        locked two messaged ahead
+      endnote
+      while (Timestamp of next message is younger than current?) is (yes)
+        fork
+          fork
+            :decremenet HRT counter of current message;
+          fork again
+            :update QoS timer (delay);
+            note
+              no lock required since this timer is only accessed when the topic is locked
+            endnote
+          endfork
+          :unlock current message;
+        fork again
+          :lock next message;
+        endfork
+      endwhile (no)
+      :unlock next message;
+      note
+        one message ahead still locked
+        but HRT counter not yet decremented
+      endnote
+    }
+  endif
+  fork
+    :decrement HRT counter of current message;
+  fork again
+    :update QoS timer (delay);
+    note
+      no lock required since this timer is only accessed when the topic is locked
+    endnote
+  endfork
+else (no)
+  :lock last read message;
+  if (Timestamp equals local copy?) then (yes)
+  else (no)
+    partition "find oldest valid message" {
+      repeat
+        fork
+          :unlock current message;
+        fork again
+          :lock next message;
+        forkend
+      repeat while (while timestamp of next is younger than of current)
+    }
+  endif
+  if (Fetch next or latest message?) then (next)
+  else (latest)
+    partition "iterate to latest" {
+      :lock next message;
+      note
+        locked two messages ahead
+      endnote
+      while (Timestamp of next message is younger then current?) is (yes)
+        fork
+          :unlock current message;
+        fork again
+          :lock next message;
+        endfork
+        :unlock next message;
+        note
+          one message ahead still locked
+        endnote
+      endwhile (no)
+    }
+  endif
+endif
+fork
+  :set pointer to last message read to locked message;
+fork again
+  :copy timestamp of message;
+endfork
+:unlock message;
+:unlock topic;
+stop
+
+@enduml
diff --git a/doc/statediagrams/subscriber/subscribe.svg b/doc/statediagrams/subscriber/subscribe.svg
new file mode 100644
index 0000000..756b3af
--- /dev/null
+++ b/doc/statediagrams/subscriber/subscribe.svg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1016px" preserveAspectRatio="none" style="width:1090px;height:1016px;" version="1.1" viewBox="0 0 1090 1016" width="1090px" zoomAndPan="magnify"><defs><filter height="300%" id="fl5cr8ju8kvuh" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="499.5" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="218" x="435" y="47.6611">urtSubscriberSubscribe()</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="547" y="68.6143"/><ellipse cx="544.5" cy="82.8594" fill="#000000" filter="url(#fl5cr8ju8kvuh)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><rect fill="#000000" filter="url(#fl5cr8ju8kvuh)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="304" x="392.5" y="112.8594"/><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="141" x="416.5" y="187.2617"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="121" x="426.5" y="208.4004">set rtclass member</text><polygon fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" points="423.5,138.8594,550.5,138.8594,562.5,150.8594,550.5,162.8594,423.5,162.8594,411.5,150.8594,423.5,138.8594" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="491" y="173.0698">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="423.5" y="154.6675">Was rtclass specified?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="562.5" y="148.2651">no</text><polygon fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" points="487,241.2305,499,253.2305,487,265.2305,475,253.2305,487,241.2305" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="75" x="607.5" y="187.2617"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="55" x="617.5" y="208.4004">set topic</text><rect fill="#000000" filter="url(#fl5cr8ju8kvuh)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="304" x="392.5" y="285.2305"/><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="80" x="504.5" y="311.2305"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="514.5" y="332.3691">lock topic</text><rect fill="#000000" filter="url(#fl5cr8ju8kvuh)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1069" x="10" y="365.1992"/><rect fill="#FFFFFF" filter="url(#fl5cr8ju8kvuh)" height="151.2344" style="stroke: #000000; stroke-width: 2.0;" width="668" x="34" y="437.7114"/><path d="M191,438.7114 L191,447.0083 L181,457.0083 L34,457.0083 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="147" x="37" y="451.7065">contribute messages</text><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="475" x="130.5" y="474.0083"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="20" x="140.5" y="495.147">set</text><text fill="#000000" font-family="monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="28" x="164.5" y="495.147">next</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="399" x="196.5" y="495.147">pointer of topic's latest message to first message to contribute</text><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="648" x="44" y="542.9771"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="20" x="54" y="564.1157">set</text><text fill="#000000" font-family="monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="28" x="78" y="564.1157">next</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="572" x="110" y="564.1157">pointer of last message to contribute to message formerly after the topic's latest message</text><polygon fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" points="308.5,391.1992,427.5,391.1992,439.5,403.1992,427.5,415.1992,308.5,415.1992,296.5,403.1992,308.5,391.1992" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="372" y="425.4097">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="119" x="308.5" y="407.0073">Messages specified?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="439.5" y="400.605">no</text><polygon fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" points="368,608.9458,380,620.9458,368,632.9458,356,620.9458,368,608.9458" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="313" x="752" y="500.3442"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="293" x="762" y="521.4829">set message pointer to topic's latest message</text><rect fill="#000000" filter="url(#fl5cr8ju8kvuh)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1069" x="10" y="652.9458"/><rect fill="#000000" filter="url(#fl5cr8ju8kvuh)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="567" x="261" y="727.3481"/><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="190" x="275" y="753.3481"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="170" x="285" y="774.4868">increase topic HRT counter</text><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="321" x="493" y="753.3481"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="301" x="503" y="774.4868">insert subscriber to topic list of HRT subscribers</text><rect fill="#000000" filter="url(#fl5cr8ju8kvuh)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="567" x="261" y="807.3169"/><polygon fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" points="491,678.9458,598,678.9458,610,690.9458,598,702.9458,491,702.9458,479,690.9458,491,678.9458" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="548.5" y="713.1563">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="491" y="694.7539">Is HRT subscriber?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="610" y="688.3516">no</text><polygon fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" points="544.5,833.3169,556.5,845.3169,544.5,857.3169,532.5,845.3169,544.5,833.3169" style="stroke: #A80036; stroke-width: 1.5;"/><path d="M120,881.7349 L120,906.8677 A0,0 0 0 0 120,906.8677 L421,906.8677 A0,0 0 0 0 421,906.8677 L421,899.7349 L441,894.3013 L421,891.7349 L421,891.7349 L411,881.7349 L120,881.7349 A0,0 0 0 0 120,881.7349 " fill="#FBFB77" filter="url(#fl5cr8ju8kvuh)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M411,881.7349 L411,891.7349 L421,891.7349 L411,881.7349 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="280" x="126" y="898.8018">Must be within lock because of HRT counter.</text><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="207" x="441" y="877.3169"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="187" x="451" y="898.4556">register to topic event source</text><rect fill="#FEFECE" filter="url(#fl5cr8ju8kvuh)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="96" x="496.5" y="931.2856"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="506.5" y="952.4243">unlock topic</text><ellipse cx="544.5" cy="995.2544" fill="none" filter="url(#fl5cr8ju8kvuh)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="545" cy="995.7544" fill="#000000" filter="url(#fl5cr8ju8kvuh)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="487" x2="487" y1="162.8594" y2="187.2617"/><polygon fill="#A80036" points="483,177.2617,487,187.2617,491,177.2617,487,181.2617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="562.5" x2="574.5" y1="150.8594" y2="150.8594"/><polygon fill="#A80036" points="570.5,194.2461,574.5,204.2461,578.5,194.2461,574.5,198.2461" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="574.5" x2="574.5" y1="150.8594" y2="253.2305"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="574.5" x2="499" y1="253.2305" y2="253.2305"/><polygon fill="#A80036" points="509,249.2305,499,253.2305,509,257.2305,505,253.2305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="487" x2="487" y1="221.2305" y2="241.2305"/><polygon fill="#A80036" points="483,231.2305,487,241.2305,491,231.2305,487,235.2305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="487" x2="487" y1="118.8594" y2="138.8594"/><polygon fill="#A80036" points="483,128.8594,487,138.8594,491,128.8594,487,132.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="645" x2="645" y1="118.8594" y2="187.2617"/><polygon fill="#A80036" points="641,177.2617,645,187.2617,649,177.2617,645,181.2617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="487" x2="487" y1="265.2305" y2="285.2305"/><polygon fill="#A80036" points="483,275.2305,487,285.2305,491,275.2305,487,279.2305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="645" x2="645" y1="221.2305" y2="285.2305"/><polygon fill="#A80036" points="641,275.2305,645,285.2305,649,275.2305,645,279.2305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544.5" x2="544.5" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="540.5,102.8594,544.5,112.8594,548.5,102.8594,544.5,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544.5" x2="544.5" y1="291.2305" y2="311.2305"/><polygon fill="#A80036" points="540.5,301.2305,544.5,311.2305,548.5,301.2305,544.5,305.2305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="368" x2="368" y1="507.9771" y2="542.9771"/><polygon fill="#A80036" points="364,532.9771,368,542.9771,372,532.9771,368,536.9771" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="368" x2="368" y1="415.1992" y2="474.0083"/><polygon fill="#A80036" points="364,464.0083,368,474.0083,372,464.0083,368,468.0083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="439.5" x2="712" y1="403.1992" y2="403.1992"/><polygon fill="#A80036" points="708,507.3286,712,517.3286,716,507.3286,712,511.3286" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="712" x2="712" y1="403.1992" y2="620.9458"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="712" x2="380" y1="620.9458" y2="620.9458"/><polygon fill="#A80036" points="390,616.9458,380,620.9458,390,624.9458,386,620.9458" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="368" x2="368" y1="576.9458" y2="608.9458"/><polygon fill="#A80036" points="364,598.9458,368,608.9458,372,598.9458,368,602.9458" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="368" x2="368" y1="371.1992" y2="391.1992"/><polygon fill="#A80036" points="364,381.1992,368,391.1992,372,381.1992,368,385.1992" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="908.5" x2="908.5" y1="371.1992" y2="500.3442"/><polygon fill="#A80036" points="904.5,490.3442,908.5,500.3442,912.5,490.3442,908.5,494.3442" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="368" x2="368" y1="632.9458" y2="652.9458"/><polygon fill="#A80036" points="364,642.9458,368,652.9458,372,642.9458,368,646.9458" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="908.5" x2="908.5" y1="534.313" y2="652.9458"/><polygon fill="#A80036" points="904.5,642.9458,908.5,652.9458,912.5,642.9458,908.5,646.9458" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544.5" x2="544.5" y1="345.1992" y2="365.1992"/><polygon fill="#A80036" points="540.5,355.1992,544.5,365.1992,548.5,355.1992,544.5,359.1992" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="370" x2="370" y1="733.3481" y2="753.3481"/><polygon fill="#A80036" points="366,743.3481,370,753.3481,374,743.3481,370,747.3481" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="653.5" x2="653.5" y1="733.3481" y2="753.3481"/><polygon fill="#A80036" points="649.5,743.3481,653.5,753.3481,657.5,743.3481,653.5,747.3481" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="370" x2="370" y1="787.3169" y2="807.3169"/><polygon fill="#A80036" points="366,797.3169,370,807.3169,374,797.3169,370,801.3169" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="653.5" x2="653.5" y1="787.3169" y2="807.3169"/><polygon fill="#A80036" points="649.5,797.3169,653.5,807.3169,657.5,797.3169,653.5,801.3169" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544.5" x2="544.5" y1="702.9458" y2="727.3481"/><polygon fill="#A80036" points="540.5,717.3481,544.5,727.3481,548.5,717.3481,544.5,721.3481" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="610" x2="838" y1="690.9458" y2="690.9458"/><polygon fill="#A80036" points="834,760.3325,838,770.3325,842,760.3325,838,764.3325" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="838" x2="838" y1="690.9458" y2="845.3169"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="838" x2="556.5" y1="845.3169" y2="845.3169"/><polygon fill="#A80036" points="566.5,841.3169,556.5,845.3169,566.5,849.3169,562.5,845.3169" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544.5" x2="544.5" y1="813.3169" y2="833.3169"/><polygon fill="#A80036" points="540.5,823.3169,544.5,833.3169,548.5,823.3169,544.5,827.3169" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544.5" x2="544.5" y1="658.9458" y2="678.9458"/><polygon fill="#A80036" points="540.5,668.9458,544.5,678.9458,548.5,668.9458,544.5,672.9458" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544.5" x2="544.5" y1="857.3169" y2="877.3169"/><polygon fill="#A80036" points="540.5,867.3169,544.5,877.3169,548.5,867.3169,544.5,871.3169" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544.5" x2="544.5" y1="911.2856" y2="931.2856"/><polygon fill="#A80036" points="540.5,921.2856,544.5,931.2856,548.5,921.2856,544.5,925.2856" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544.5" x2="544.5" y1="965.2544" y2="985.2544"/><polygon fill="#A80036" points="540.5,975.2544,544.5,985.2544,548.5,975.2544,544.5,979.2544" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+title **µRtWare**\nurtSubscriberSubscribe()\n
+
+
+
+start
+fork
+  if (Was rtclass specified?) then (yes)
+    :set rtclass member;
+  else (no)
+  endif
+fork again
+  :set topic;
+endfork
+:lock topic;
+fork
+  if (Messages specified?) then (yes)
+    partition "contribute messages" {
+      :set ""next"" pointer of topic's latest message to first message to contribute;
+      :set ""next"" pointer of last message to contribute to message formerly after the topic's latest message;
+    }
+  else (no)
+  endif
+fork again
+  :set message pointer to topic's latest message;
+endfork
+if (Is HRT subscriber?) then (yes)
+  fork
+    :increase topic HRT counter;
+  fork again
+    :insert subscriber to topic list of HRT subscribers;
+  endfork
+else (no)
+endif
+:register to topic event source;
+note
+  Must be within lock because of HRT counter.
+endnote
+:unlock topic;
+stop
+
+@enduml
+
+PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
+Operating System: Linux
+OS Version: 4.15.0-36-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg>
\ No newline at end of file
diff --git a/doc/statediagrams/subscriber/subscribe.uml b/doc/statediagrams/subscriber/subscribe.uml
new file mode 100644
index 0000000..7c37f89
--- /dev/null
+++ b/doc/statediagrams/subscriber/subscribe.uml
@@ -0,0 +1,64 @@
+/'
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2018  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+'/
+
+@startuml
+
+title **µRtWare**\nurtSubscriberSubscribe()\n
+
+
+
+start
+fork
+  if (Was rtclass specified?) then (yes)
+    :set rtclass member;
+  else (no)
+  endif
+fork again
+  :set topic;
+endfork
+:lock topic;
+fork
+  if (Messages specified?) then (yes)
+    partition "contribute messages" {
+      :set ""next"" pointer of topic's latest message to first message to contribute;
+      :set ""next"" pointer of last message to contribute to message formerly after the topic's latest message;
+    }
+  else (no)
+  endif
+fork again
+  :set message pointer to topic's latest message;
+endfork
+if (Is HRT subscriber?) then (yes)
+  fork
+    :increase topic HRT counter;
+  fork again
+    :insert subscriber to topic list of HRT subscribers;
+  endfork
+else (no)
+endif
+:register to topic event source;
+note
+  Must be within lock because of HRT counter.
+endnote
+:unlock topic;
+stop
+
+@enduml
diff --git a/doc/statediagrams/subscriber/unsubscribe.svg b/doc/statediagrams/subscriber/unsubscribe.svg
new file mode 100644
index 0000000..afef614
--- /dev/null
+++ b/doc/statediagrams/subscriber/unsubscribe.svg
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="750px" preserveAspectRatio="none" style="width:945px;height:750px;" version="1.1" viewBox="0 0 945 750" width="945px" zoomAndPan="magnify"><defs><filter height="300%" id="fykcvhyo0zvei" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="427" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="240" x="351.5" y="47.6611">urtSubscriberUnsubscribe()</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="474.5" y="68.6143"/><ellipse cx="643.5" cy="82.8594" fill="#000000" filter="url(#fykcvhyo0zvei)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#fykcvhyo0zvei)" points="590,112.8594,697,112.8594,709,124.8594,697,136.8594,590,136.8594,578,124.8594,590,112.8594" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="590" y="128.6675">Is HRT subscriber?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="558" y="122.2651">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="709" y="122.2651">no</text><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="80" x="365" y="146.8594"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="375" y="167.998">lock topic</text><path d="M24,205.2461 L24,230.3789 A0,0 0 0 0 24,230.3789 L323,230.3789 A0,0 0 0 0 323,230.3789 L323,223.2461 L343,217.8125 L323,215.2461 L323,215.2461 L313,205.2461 L24,205.2461 A0,0 0 0 0 24,205.2461 " fill="#FBFB77" filter="url(#fykcvhyo0zvei)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M313,205.2461 L313,215.2461 L323,215.2461 L313,205.2461 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="278" x="30" y="222.313">must be within lock because of HRT counter</text><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="124" x="343" y="200.8281"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="104" x="353" y="221.9668">unregister event</text><rect fill="#000000" filter="url(#fykcvhyo0zvei)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="790" x="10" y="254.7969"/><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="195" x="24" y="392.168"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="175" x="34" y="413.3066">decrease topic HRT counter</text><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="302" x="247" y="309.2813"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="282" x="257" y="330.4199">remove self from topic list of HRT subscribers</text><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="172" x="312" y="426.6523"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="152" x="322" y="447.791">update QoS Timer (rate)</text><polygon fill="#FEFECE" filter="url(#fykcvhyo0zvei)" points="314,378.25,482,378.25,494,390.25,482,402.25,314,402.25,302,390.25,314,378.25" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="402" y="412.4604">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="168" x="314" y="394.0581">Was most critical subscriber?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="494" y="387.6558">no</text><polygon fill="#FEFECE" filter="url(#fykcvhyo0zvei)" points="398,485.0234,410,497.0234,398,509.0234,386,497.0234,398,485.0234" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="106" x="634.5" y="341.6016"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="644.5" y="362.7402">lock message</text><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="160" x="607.5" y="410.5703"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="140" x="617.5" y="431.709">decrease HRT counter</text><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="122" x="626.5" y="479.5391"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="636.5" y="500.6777">unlock message</text><polygon fill="#FEFECE" filter="url(#fykcvhyo0zvei)" points="613,280.7969,762,280.7969,774,292.7969,762,304.7969,613,304.7969,601,292.7969,613,280.7969" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="691.5" y="315.0073">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="149" x="613" y="296.605">Unfetched messages left?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="587" y="290.2026">no</text><rect fill="#000000" filter="url(#fykcvhyo0zvei)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="790" x="10" y="555.5078"/><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="96" x="357" y="581.5078"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="367" y="602.6465">unlock topic</text><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="124" x="810" y="146.8594"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="104" x="820" y="167.998">unregister event</text><polygon fill="#FEFECE" filter="url(#fykcvhyo0zvei)" points="643.5,621.4766,655.5,633.4766,643.5,645.4766,631.5,633.4766,643.5,621.4766" style="stroke: #A80036; stroke-width: 1.5;"/><path d="M494,669.8945 L494,695.0273 A0,0 0 0 0 494,695.0273 L566,695.0273 A0,0 0 0 0 566,695.0273 L566,687.8945 L586,682.4609 L566,679.8945 L566,679.8945 L556,669.8945 L494,669.8945 A0,0 0 0 0 494,669.8945 " fill="#FBFB77" filter="url(#fykcvhyo0zvei)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M556,669.8945 L556,679.8945 L566,679.8945 L556,669.8945 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="51" x="500" y="686.9614">optional</text><rect fill="#FEFECE" filter="url(#fykcvhyo0zvei)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="115" x="586" y="665.4766"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="596" y="686.6152">reset members</text><ellipse cx="643.5" cy="729.4453" fill="none" filter="url(#fykcvhyo0zvei)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="644" cy="729.9453" fill="#000000" filter="url(#fykcvhyo0zvei)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405" x2="405" y1="180.8281" y2="200.8281"/><polygon fill="#A80036" points="401,190.8281,405,200.8281,409,190.8281,405,194.8281" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="398" x2="398" y1="402.25" y2="426.6523"/><polygon fill="#A80036" points="394,416.6523,398,426.6523,402,416.6523,398,420.6523" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="494" x2="506" y1="390.25" y2="390.25"/><polygon fill="#A80036" points="502,433.6367,506,443.6367,510,433.6367,506,437.6367" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="506" x2="506" y1="390.25" y2="497.0234"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="506" x2="410" y1="497.0234" y2="497.0234"/><polygon fill="#A80036" points="420,493.0234,410,497.0234,420,501.0234,416,497.0234" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="398" x2="398" y1="460.6211" y2="485.0234"/><polygon fill="#A80036" points="394,475.0234,398,485.0234,402,475.0234,398,479.0234" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="398" x2="398" y1="343.25" y2="378.25"/><polygon fill="#A80036" points="394,368.25,398,378.25,402,368.25,398,372.25" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="687.5" x2="687.5" y1="375.5703" y2="410.5703"/><polygon fill="#A80036" points="683.5,400.5703,687.5,410.5703,691.5,400.5703,687.5,404.5703" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="687.5" x2="687.5" y1="444.5391" y2="479.5391"/><polygon fill="#A80036" points="683.5,469.5391,687.5,479.5391,691.5,469.5391,687.5,473.5391" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="687.5" x2="687.5" y1="304.7969" y2="341.6016"/><polygon fill="#A80036" points="683.5,331.6016,687.5,341.6016,691.5,331.6016,687.5,335.6016" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="687.5" x2="687.5" y1="513.5078" y2="523.5078"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="687.5" x2="786" y1="523.5078" y2="523.5078"/><polygon fill="#A80036" points="782,419.1523,786,409.1523,790,419.1523,786,415.1523" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="786" x2="786" y1="292.7969" y2="523.5078"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="786" x2="774" y1="292.7969" y2="292.7969"/><polygon fill="#A80036" points="784,288.7969,774,292.7969,784,296.7969,780,292.7969" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="601" x2="589" y1="292.7969" y2="292.7969"/><polygon fill="#A80036" points="585,405.1523,589,415.1523,593,405.1523,589,409.1523" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="589" x2="589" y1="292.7969" y2="535.5078"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="589" x2="687.5" y1="535.5078" y2="535.5078"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="687.5" x2="687.5" y1="535.5078" y2="555.5078"/><polygon fill="#A80036" points="683.5,545.5078,687.5,555.5078,691.5,545.5078,687.5,549.5078" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="121.5" x2="121.5" y1="260.7969" y2="392.168"/><polygon fill="#A80036" points="117.5,382.168,121.5,392.168,125.5,382.168,121.5,386.168" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="398" x2="398" y1="260.7969" y2="309.2813"/><polygon fill="#A80036" points="394,299.2813,398,309.2813,402,299.2813,398,303.2813" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="687.5" x2="687.5" y1="260.7969" y2="280.7969"/><polygon fill="#A80036" points="683.5,270.7969,687.5,280.7969,691.5,270.7969,687.5,274.7969" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="121.5" x2="121.5" y1="426.1367" y2="555.5078"/><polygon fill="#A80036" points="117.5,545.5078,121.5,555.5078,125.5,545.5078,121.5,549.5078" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="398" x2="398" y1="509.0234" y2="555.5078"/><polygon fill="#A80036" points="394,545.5078,398,555.5078,402,545.5078,398,549.5078" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405" x2="405" y1="234.7969" y2="254.7969"/><polygon fill="#A80036" points="401,244.7969,405,254.7969,409,244.7969,405,248.7969" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405" x2="405" y1="561.5078" y2="581.5078"/><polygon fill="#A80036" points="401,571.5078,405,581.5078,409,571.5078,405,575.5078" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="578" x2="405" y1="124.8594" y2="124.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405" x2="405" y1="124.8594" y2="146.8594"/><polygon fill="#A80036" points="401,136.8594,405,146.8594,409,136.8594,405,140.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="709" x2="872" y1="124.8594" y2="124.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="872" x2="872" y1="124.8594" y2="146.8594"/><polygon fill="#A80036" points="868,136.8594,872,146.8594,876,136.8594,872,140.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405" x2="405" y1="615.4766" y2="633.4766"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405" x2="631.5" y1="633.4766" y2="633.4766"/><polygon fill="#A80036" points="621.5,629.4766,631.5,633.4766,621.5,637.4766,625.5,633.4766" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="872" x2="872" y1="180.8281" y2="633.4766"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="872" x2="655.5" y1="633.4766" y2="633.4766"/><polygon fill="#A80036" points="665.5,629.4766,655.5,633.4766,665.5,637.4766,661.5,633.4766" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="643.5" x2="643.5" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="639.5,102.8594,643.5,112.8594,647.5,102.8594,643.5,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="643.5" x2="643.5" y1="645.4766" y2="665.4766"/><polygon fill="#A80036" points="639.5,655.4766,643.5,665.4766,647.5,655.4766,643.5,659.4766" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="643.5" x2="643.5" y1="699.4453" y2="719.4453"/><polygon fill="#A80036" points="639.5,709.4453,643.5,719.4453,647.5,709.4453,643.5,713.4453" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+title **µRtWare**\nurtSubscriberUnsubscribe()\n
+
+
+
+start
+if (Is HRT subscriber?) then (yes)
+  :lock topic;
+  :unregister event;
+  note left
+    must be within lock because of HRT counter
+  endnote
+  fork
+    :decrease topic HRT counter;
+  fork again
+    :remove self from topic list of HRT subscribers;
+    if (Was most critical subscriber?) then (yes)
+      :update QoS Timer (rate);
+    else (no)
+    endif
+  fork again
+    while (Unfetched messages left?) is (yes)
+      :lock message;
+      :decrease HRT counter;
+      :unlock message;
+    endwhile (no)
+  endfork
+  :unlock topic;
+else (no)
+  :unregister event;
+endif
+:reset members;
+note left
+  optional
+end note
+stop
+
+@enduml
+
+PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
+Operating System: Linux
+OS Version: 4.15.0-36-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg>
\ No newline at end of file
diff --git a/doc/statediagrams/subscriber/unsubscribe.uml b/doc/statediagrams/subscriber/unsubscribe.uml
new file mode 100644
index 0000000..4765095
--- /dev/null
+++ b/doc/statediagrams/subscriber/unsubscribe.uml
@@ -0,0 +1,60 @@
+/'
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2018  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+'/
+
+@startuml
+
+title **µRtWare**\nurtSubscriberUnsubscribe()\n
+
+
+
+start
+if (Is HRT subscriber?) then (yes)
+  :lock topic;
+  :unregister event;
+  note left
+    must be within lock because of HRT counter
+  endnote
+  fork
+    :decrease topic HRT counter;
+  fork again
+    :remove self from topic list of HRT subscribers;
+    if (Was most critical subscriber?) then (yes)
+      :update QoS Timer (rate);
+    else (no)
+    endif
+  fork again
+    while (Unfetched messages left?) is (yes)
+      :lock message;
+      :decrease HRT counter;
+      :unlock message;
+    endwhile (no)
+  endfork
+  :unlock topic;
+else (no)
+  :unregister event;
+endif
+:reset members;
+note left
+  optional
+end note
+stop
+
+@enduml
diff --git a/inc/todo.txt b/inc/todo.txt
new file mode 100644
index 0000000..258cd57
--- /dev/null
+++ b/inc/todo.txt
@@ -0,0 +1 @@
+todo
diff --git a/license.html b/license.html
new file mode 100644
index 0000000..33edf21
--- /dev/null
+++ b/license.html
@@ -0,0 +1,695 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- saved from url=(0051)http://www.gnu.org/licenses/gpl-3.0-standalone.html -->
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ 
+ <title>GNU General Public License v3.0 - GNU Project - Free Software Foundation (FSF)</title>
+ <link rel="alternate" type="application/rdf+xml" href="http://www.gnu.org/licenses/gpl-3.0.rdf"> 
+</head>
+<body>
+
+<h3 style="text-align: center;">GNU GENERAL PUBLIC LICENSE</h3>
+<p style="text-align: center;">Version 3, 29 June 2007</p>
+
+<p>Copyright © 2007 Free Software Foundation, Inc.
+ &lt;<a href="http://fsf.org/">http://fsf.org/</a>&gt;</p><p>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.</p>
+
+<h3><a name="preamble"></a>Preamble</h3>
+
+<p>The GNU General Public License is a free, copyleft license for
+software and other kinds of works.</p>
+
+<p>The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.</p>
+
+<p>When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.</p>
+
+<p>To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.</p>
+
+<p>For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.</p>
+
+<p>Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.</p>
+
+<p>For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.</p>
+
+<p>Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.</p>
+
+<p>Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.</p>
+
+<p>The precise terms and conditions for copying, distribution and
+modification follow.</p>
+
+<h3><a name="terms"></a>TERMS AND CONDITIONS</h3>
+
+<h4><a name="section0"></a>0. Definitions.</h4>
+
+<p>“This License” refers to version 3 of the GNU General Public License.</p>
+
+<p>“Copyright” also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.</p>
+ 
+<p>“The Program” refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as “you”.  “Licensees” and
+“recipients” may be individuals or organizations.</p>
+
+<p>To “modify” a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a “modified version” of the
+earlier work or a work “based on” the earlier work.</p>
+
+<p>A “covered work” means either the unmodified Program or a work based
+on the Program.</p>
+
+<p>To “propagate” a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.</p>
+
+<p>To “convey” a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.</p>
+
+<p>An interactive user interface displays “Appropriate Legal Notices”
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.</p>
+
+<h4><a name="section1"></a>1. Source Code.</h4>
+
+<p>The “source code” for a work means the preferred form of the work
+for making modifications to it.  “Object code” means any non-source
+form of a work.</p>
+
+<p>A “Standard Interface” means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.</p>
+
+<p>The “System Libraries” of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+“Major Component”, in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.</p>
+
+<p>The “Corresponding Source” for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.</p>
+
+<p>The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.</p>
+
+<p>The Corresponding Source for a work in source code form is that
+same work.</p>
+
+<h4><a name="section2"></a>2. Basic Permissions.</h4>
+
+<p>All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.</p>
+
+<p>You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.</p>
+
+<p>Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.</p>
+
+<h4><a name="section3"></a>3. Protecting Users' Legal Rights From Anti-Circumvention Law.</h4>
+
+<p>No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.</p>
+
+<p>When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.</p>
+
+<h4><a name="section4"></a>4. Conveying Verbatim Copies.</h4>
+
+<p>You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.</p>
+
+<p>You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.</p>
+
+<h4><a name="section5"></a>5. Conveying Modified Source Versions.</h4>
+
+<p>You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:</p>
+
+<ul>
+<li>a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.</li>
+
+<li>b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    “keep intact all notices”.</li>
+
+<li>c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.</li>
+
+<li>d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.</li>
+</ul>
+
+<p>A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+“aggregate” if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.</p>
+
+<h4><a name="section6"></a>6. Conveying Non-Source Forms.</h4>
+
+<p>You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:</p>
+
+<ul>
+<li>a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.</li>
+
+<li>b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.</li>
+
+<li>c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.</li>
+
+<li>d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.</li>
+
+<li>e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.</li>
+</ul>
+
+<p>A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.</p>
+
+<p>A “User Product” is either (1) a “consumer product”, which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, “normally used” refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.</p>
+
+<p>“Installation Information” for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.</p>
+
+<p>If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).</p>
+
+<p>The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.</p>
+
+<p>Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.</p>
+
+<h4><a name="section7"></a>7. Additional Terms.</h4>
+
+<p>“Additional permissions” are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.</p>
+
+<p>When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.</p>
+
+<p>Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:</p>
+
+<ul>
+<li>a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or</li>
+
+<li>b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or</li>
+
+<li>c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or</li>
+
+<li>d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or</li>
+
+<li>e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or</li>
+
+<li>f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.</li>
+</ul>
+
+<p>All other non-permissive additional terms are considered “further
+restrictions” within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.</p>
+
+<p>If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.</p>
+
+<p>Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.</p>
+
+<h4><a name="section8"></a>8. Termination.</h4>
+
+<p>You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).</p>
+
+<p>However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.</p>
+
+<p>Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.</p>
+
+<p>Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.</p>
+
+<h4><a name="section9"></a>9. Acceptance Not Required for Having Copies.</h4>
+
+<p>You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.</p>
+
+<h4><a name="section10"></a>10. Automatic Licensing of Downstream Recipients.</h4>
+
+<p>Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.</p>
+
+<p>An “entity transaction” is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.</p>
+
+<p>You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.</p>
+
+<h4><a name="section11"></a>11. Patents.</h4>
+
+<p>A “contributor” is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's “contributor version”.</p>
+
+<p>A contributor's “essential patent claims” are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, “control” includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.</p>
+
+<p>Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.</p>
+
+<p>In the following three paragraphs, a “patent license” is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To “grant” such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.</p>
+
+<p>If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  “Knowingly relying” means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.</p>
+  
+<p>If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.</p>
+
+<p>A patent license is “discriminatory” if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.</p>
+
+<p>Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.</p>
+
+<h4><a name="section12"></a>12. No Surrender of Others' Freedom.</h4>
+
+<p>If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.</p>
+
+<h4><a name="section13"></a>13. Use with the GNU Affero General Public License.</h4>
+
+<p>Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.</p>
+
+<h4><a name="section14"></a>14. Revised Versions of this License.</h4>
+
+<p>The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.</p>
+
+<p>Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License “or any later version” applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.</p>
+
+<p>If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.</p>
+
+<p>Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.</p>
+
+<h4><a name="section15"></a>15. Disclaimer of Warranty.</h4>
+
+<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>
+
+<h4><a name="section16"></a>16. Limitation of Liability.</h4>
+
+<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.</p>
+
+<h4><a name="section17"></a>17. Interpretation of Sections 15 and 16.</h4>
+
+<p>If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.</p>
+
+<p>END OF TERMS AND CONDITIONS</p>
+
+<h3><a name="howto"></a>How to Apply These Terms to Your New Programs</h3>
+
+<p>If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.</p>
+
+<p>To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the “copyright” line and a pointer to where the full notice is found.</p>
+
+<pre>    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
+</pre>
+
+<p>Also add information on how to contact you by electronic and paper mail.</p>
+
+<p>If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:</p>
+
+<pre>    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+</pre>
+
+<p>The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an “about box”.</p>
+
+<p>You should also get your employer (if you work as a programmer) or school,
+if any, to sign a “copyright disclaimer” for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+&lt;<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.</p>
+
+<p>The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+&lt;<a href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>&gt;.</p>
+
+
+</body></html>
diff --git a/src/todo.txt b/src/todo.txt
new file mode 100644
index 0000000..258cd57
--- /dev/null
+++ b/src/todo.txt
@@ -0,0 +1 @@
+todo
diff --git a/templates/todo.txt b/templates/todo.txt
new file mode 100644
index 0000000..258cd57
--- /dev/null
+++ b/templates/todo.txt
@@ -0,0 +1 @@
+todo
