aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>2017-10-02 16:22:02 +0900
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>2017-10-11 13:33:02 +0900
commitce253994af37137d4c29221e7914f437c3dcb510 (patch)
tree3beed005e974e45d008089ffe67c9793c8bb1ee4 /doc
parente483fae4992307f34b6a9926bfba8b2e0568ebe3 (diff)
Add agl-service-soundmanager-2017
Add a new binding agl-service-soundmanager-2017. A image about this see JIRA SPEC-916 Packaging via cmake [PatchSet3] Pass to afb-binding version 2 Fix typo Fix libsoundmanager bug [PatchSet4] Modified commit message [PatchSet5] Re-add root CMakeLists.txt Prevent memory leak of json object Bug-AGL: SPEC-926 Change-Id: I24c0280210777778c379ac7027f3d71fa28d6d85 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
Diffstat (limited to 'doc')
-rw-r--r--doc/ApplicationGuide.md330
-rw-r--r--doc/Display_Audio_Transition1.md123
-rw-r--r--doc/Display_Audio_Transition2.md333
-rw-r--r--doc/api-ref/html/annotated.html103
-rw-r--r--doc/api-ref/html/annotated_dup.js5
-rw-r--r--doc/api-ref/html/bc_s.pngbin0 -> 676 bytes
-rw-r--r--doc/api-ref/html/bdwn.pngbin0 -> 147 bytes
-rw-r--r--doc/api-ref/html/class_lib_soundmanager.html532
-rw-r--r--doc/api-ref/html/class_lib_soundmanager.js15
-rw-r--r--doc/api-ref/html/classes.html107
-rw-r--r--doc/api-ref/html/closed.pngbin0 -> 132 bytes
-rw-r--r--doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html104
-rw-r--r--doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js4
-rw-r--r--doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.html106
-rw-r--r--doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.js5
-rw-r--r--doc/api-ref/html/dir_85932083476b47061c69d172796990a3.html104
-rw-r--r--doc/api-ref/html/dir_85932083476b47061c69d172796990a3.js4
-rw-r--r--doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.html108
-rw-r--r--doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.js6
-rw-r--r--doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.html104
-rw-r--r--doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.js4
-rw-r--r--doc/api-ref/html/doc.pngbin0 -> 746 bytes
-rw-r--r--doc/api-ref/html/doxygen.css1596
-rw-r--r--doc/api-ref/html/doxygen.pngbin0 -> 3779 bytes
-rw-r--r--doc/api-ref/html/dynsections.js104
-rw-r--r--doc/api-ref/html/files.html110
-rw-r--r--doc/api-ref/html/files.js4
-rw-r--r--doc/api-ref/html/folderclosed.pngbin0 -> 616 bytes
-rw-r--r--doc/api-ref/html/folderopen.pngbin0 -> 597 bytes
-rw-r--r--doc/api-ref/html/functions.html137
-rw-r--r--doc/api-ref/html/functions_func.html131
-rw-r--r--doc/api-ref/html/functions_vars.html101
-rw-r--r--doc/api-ref/html/globals.html146
-rw-r--r--doc/api-ref/html/globals_defs.html128
-rw-r--r--doc/api-ref/html/globals_func.html104
-rw-r--r--doc/api-ref/html/globals_vars.html104
-rw-r--r--doc/api-ref/html/index.html97
-rw-r--r--doc/api-ref/html/jquery.js87
-rw-r--r--doc/api-ref/html/libsoundmanager_8cpp.html178
-rw-r--r--doc/api-ref/html/libsoundmanager_8cpp.js5
-rw-r--r--doc/api-ref/html/libsoundmanager_8cpp_source.html116
-rw-r--r--doc/api-ref/html/libsoundmanager_8hpp.html158
-rw-r--r--doc/api-ref/html/libsoundmanager_8hpp.js6
-rw-r--r--doc/api-ref/html/libsoundmanager_8hpp_source.html103
-rw-r--r--doc/api-ref/html/menu.js26
-rw-r--r--doc/api-ref/html/menudata.js16
-rw-r--r--doc/api-ref/html/nav_f.pngbin0 -> 153 bytes
-rw-r--r--doc/api-ref/html/nav_g.pngbin0 -> 95 bytes
-rw-r--r--doc/api-ref/html/nav_h.pngbin0 -> 98 bytes
-rw-r--r--doc/api-ref/html/navtree.css146
-rw-r--r--doc/api-ref/html/navtree.js517
-rw-r--r--doc/api-ref/html/navtreedata.js31
-rw-r--r--doc/api-ref/html/navtreeindex0.js61
-rw-r--r--doc/api-ref/html/open.pngbin0 -> 123 bytes
-rw-r--r--doc/api-ref/html/resize.js114
-rw-r--r--doc/api-ref/html/search/all_0.html26
-rw-r--r--doc/api-ref/html/search/all_0.js4
-rw-r--r--doc/api-ref/html/search/all_1.html26
-rw-r--r--doc/api-ref/html/search/all_1.js9
-rw-r--r--doc/api-ref/html/search/all_2.html26
-rw-r--r--doc/api-ref/html/search/all_2.js6
-rw-r--r--doc/api-ref/html/search/all_3.html26
-rw-r--r--doc/api-ref/html/search/all_3.js4
-rw-r--r--doc/api-ref/html/search/all_4.html26
-rw-r--r--doc/api-ref/html/search/all_4.js6
-rw-r--r--doc/api-ref/html/search/all_5.html26
-rw-r--r--doc/api-ref/html/search/all_5.js6
-rw-r--r--doc/api-ref/html/search/all_6.html26
-rw-r--r--doc/api-ref/html/search/all_6.js5
-rw-r--r--doc/api-ref/html/search/all_7.html26
-rw-r--r--doc/api-ref/html/search/all_7.js4
-rw-r--r--doc/api-ref/html/search/all_8.html26
-rw-r--r--doc/api-ref/html/search/all_8.js7
-rw-r--r--doc/api-ref/html/search/all_9.html26
-rw-r--r--doc/api-ref/html/search/all_9.js6
-rw-r--r--doc/api-ref/html/search/all_a.html26
-rw-r--r--doc/api-ref/html/search/all_a.js8
-rw-r--r--doc/api-ref/html/search/all_b.html26
-rw-r--r--doc/api-ref/html/search/all_b.js4
-rw-r--r--doc/api-ref/html/search/all_c.html26
-rw-r--r--doc/api-ref/html/search/all_c.js4
-rw-r--r--doc/api-ref/html/search/all_d.html26
-rw-r--r--doc/api-ref/html/search/all_d.js4
-rw-r--r--doc/api-ref/html/search/classes_0.html26
-rw-r--r--doc/api-ref/html/search/classes_0.js4
-rw-r--r--doc/api-ref/html/search/classes_1.html26
-rw-r--r--doc/api-ref/html/search/classes_1.js4
-rw-r--r--doc/api-ref/html/search/close.pngbin0 -> 273 bytes
-rw-r--r--doc/api-ref/html/search/defines_0.html26
-rw-r--r--doc/api-ref/html/search/defines_0.js4
-rw-r--r--doc/api-ref/html/search/defines_1.html26
-rw-r--r--doc/api-ref/html/search/defines_1.js6
-rw-r--r--doc/api-ref/html/search/defines_2.html26
-rw-r--r--doc/api-ref/html/search/defines_2.js4
-rw-r--r--doc/api-ref/html/search/defines_3.html26
-rw-r--r--doc/api-ref/html/search/defines_3.js4
-rw-r--r--doc/api-ref/html/search/defines_4.html26
-rw-r--r--doc/api-ref/html/search/defines_4.js4
-rw-r--r--doc/api-ref/html/search/defines_5.html26
-rw-r--r--doc/api-ref/html/search/defines_5.js4
-rw-r--r--doc/api-ref/html/search/defines_6.html26
-rw-r--r--doc/api-ref/html/search/defines_6.js4
-rw-r--r--doc/api-ref/html/search/defines_7.html26
-rw-r--r--doc/api-ref/html/search/defines_7.js5
-rw-r--r--doc/api-ref/html/search/files_0.html26
-rw-r--r--doc/api-ref/html/search/files_0.js5
-rw-r--r--doc/api-ref/html/search/files_1.html26
-rw-r--r--doc/api-ref/html/search/files_1.js4
-rw-r--r--doc/api-ref/html/search/files_2.html26
-rw-r--r--doc/api-ref/html/search/files_2.js4
-rw-r--r--doc/api-ref/html/search/functions_0.html26
-rw-r--r--doc/api-ref/html/search/functions_0.js5
-rw-r--r--doc/api-ref/html/search/functions_1.html26
-rw-r--r--doc/api-ref/html/search/functions_1.js5
-rw-r--r--doc/api-ref/html/search/functions_2.html26
-rw-r--r--doc/api-ref/html/search/functions_2.js4
-rw-r--r--doc/api-ref/html/search/functions_3.html26
-rw-r--r--doc/api-ref/html/search/functions_3.js4
-rw-r--r--doc/api-ref/html/search/functions_4.html26
-rw-r--r--doc/api-ref/html/search/functions_4.js7
-rw-r--r--doc/api-ref/html/search/functions_5.html26
-rw-r--r--doc/api-ref/html/search/functions_5.js5
-rw-r--r--doc/api-ref/html/search/functions_6.html26
-rw-r--r--doc/api-ref/html/search/functions_6.js4
-rw-r--r--doc/api-ref/html/search/functions_7.html26
-rw-r--r--doc/api-ref/html/search/functions_7.js4
-rw-r--r--doc/api-ref/html/search/functions_8.html26
-rw-r--r--doc/api-ref/html/search/functions_8.js4
-rw-r--r--doc/api-ref/html/search/mag_sel.pngbin0 -> 563 bytes
-rw-r--r--doc/api-ref/html/search/nomatches.html12
-rw-r--r--doc/api-ref/html/search/search.css271
-rw-r--r--doc/api-ref/html/search/search.js791
-rw-r--r--doc/api-ref/html/search/search_l.pngbin0 -> 604 bytes
-rw-r--r--doc/api-ref/html/search/search_m.pngbin0 -> 158 bytes
-rw-r--r--doc/api-ref/html/search/search_r.pngbin0 -> 612 bytes
-rw-r--r--doc/api-ref/html/search/searchdata.js30
-rw-r--r--doc/api-ref/html/search/variables_0.html26
-rw-r--r--doc/api-ref/html/search/variables_0.js4
-rw-r--r--doc/api-ref/html/search/variables_1.html26
-rw-r--r--doc/api-ref/html/search/variables_1.js5
-rw-r--r--doc/api-ref/html/search/variables_2.html26
-rw-r--r--doc/api-ref/html/search/variables_2.js4
-rw-r--r--doc/api-ref/html/search/variables_3.html26
-rw-r--r--doc/api-ref/html/search/variables_3.js4
-rw-r--r--doc/api-ref/html/soundmanager_8c.html334
-rw-r--r--doc/api-ref/html/soundmanager_8c.js15
-rw-r--r--doc/api-ref/html/soundmanager_8c_source.html110
-rw-r--r--doc/api-ref/html/splitbar.pngbin0 -> 314 bytes
-rw-r--r--doc/api-ref/html/structevent.html147
-rw-r--r--doc/api-ref/html/structevent.js5
-rw-r--r--doc/api-ref/html/sync_off.pngbin0 -> 853 bytes
-rw-r--r--doc/api-ref/html/sync_on.pngbin0 -> 845 bytes
-rw-r--r--doc/api-ref/html/tab_a.pngbin0 -> 142 bytes
-rw-r--r--doc/api-ref/html/tab_b.pngbin0 -> 169 bytes
-rw-r--r--doc/api-ref/html/tab_h.pngbin0 -> 177 bytes
-rw-r--r--doc/api-ref/html/tab_s.pngbin0 -> 184 bytes
-rw-r--r--doc/api-ref/html/tabs.css1
-rw-r--r--doc/api-ref/html/test_8cpp.html173
-rw-r--r--doc/api-ref/html/test_8cpp.js5
-rw-r--r--doc/api-ref/html/test_8cpp_source.html106
-rw-r--r--doc/parts/am-component.pngbin0 -> 90431 bytes
-rw-r--r--doc/parts/seq_changevolume.svg117
-rw-r--r--doc/parts/seq_connectsoundroute.svg145
-rw-r--r--doc/parts/seq_disconnectsoundroute.svg110
-rw-r--r--doc/parts/seq_initialization.svg129
-rw-r--r--doc/parts/seq_registration.svg235
-rw-r--r--doc/parts/seq_releasesoundmode.svg119
-rw-r--r--doc/parts/seq_requestsoundmode.svg165
-rw-r--r--doc/parts/seq_setmutestate.svg115
-rw-r--r--doc/parts/seq_startsoundstreaming.svg129
-rw-r--r--doc/parts/seq_startup.svg68
-rw-r--r--doc/parts/seq_stopsoundstreaming.svg129
-rw-r--r--doc/parts/software-stack.pngbin0 -> 41677 bytes
-rw-r--r--doc/parts/software-stack2.pngbin0 -> 26849 bytes
-rw-r--r--doc/parts/typical-usecase.pngbin0 -> 256665 bytes
-rw-r--r--doc/parts/typical-usecase2.pngbin0 -> 230655 bytes
176 files changed, 11116 insertions, 0 deletions
diff --git a/doc/ApplicationGuide.md b/doc/ApplicationGuide.md
new file mode 100644
index 0000000..a56a7b1
--- /dev/null
+++ b/doc/ApplicationGuide.md
@@ -0,0 +1,330 @@
+**Sound Manager Application Guide**
+====
+<div align="right">Revision: 0.2Beta</div>
+<div align="right">TOYOTA MOTOR CORPORATION</div>
+<div align="right">Advanced Driver Information Technology</div>
+<div align="right">2nd/Oct/2017</div>
+
+* * *
+
+## **<div id="Table\ of\ content">Table of content</div>**
+- [Target reader of this document](#Target\ reader\ of\ this\ document)
+- [Overview](#Overview)
+- [Getting Start](#Getting\ Start)
+ - [Supported environment](#Supported\ environment)
+ - [Build](#Build)
+ - [Configuring](#Configuring)
+ - [Additional work](#Additional\ work)
+ - [How to call Sound Manager's APIs from your Application?](#How\ to\ call\ Sound\ Manager\ APIs\ from\ your\ Application?)
+- [Supported usecase](#Supported\ usecase)
+- [Software Architecture](#Software\ Architecture)
+- [API reference](#API\ reference)
+ - [APIs](#APIs)
+ - [Events](#Events)
+- [Sequence](#Sequence)
+ - [StartUp](#StartUp)
+ - [Registration](#Registration)
+ - [Request Sound Right](#Request\ Sound\ Right)
+ - [Connect Sound Route](#Connect\ Sound\ Route)
+ - [Start Sound Streaming](#Start\ Sound\ Streaming)
+ - [Stop Sound Streaming](#Stop\ Sound\ Streaming)
+ - [Disconnect Sound Route](#Disconnect\ Sound\ Route)
+ - [Change Volume](#Change\ Volume)
+ - [Set Mute State](#Set\ Mute\ State)
+ - [Release Sound Right](#Release\ Sound\ Right)
+ - [Audio Domain](#Audio\ Domain)
+- [Sample code](#Sample\ code)
+- [Limitation](#Limitation)
+
+* * *
+
+## **<div id="Target\ reader\ of\ this\ document">Target reader of this document</div>**
+Application developer whose software uses sound output.
+
+* * *
+
+## **<div id="Overview">Overview</div>**
+The sound manager is the service which provides **sound-right management** for multiple sound sources.
+This service based on GENIVI Audio Manager, and this package contains service binder and library for API calling.
+The reason why this service based on GENIVI Audio Manager is because the sound manager supports highly strong and flexible sound-right management function.
+
+In order to understand, the below figure shows the one of typical usecases.
+In this example, there are four sound mode.
+1. Audio Off
+2. Media Player
+3. Tel (Ring and talking)
+4. TTS (Text To Speech; typically it's used by Navigation sound)
+![Figure: Typical usecase](parts/typical-usecase.png)
+
+The important points are:
+- **There is a priority for each sound source.**
+ In this example, "Tel" and "TTS" is stronger than "MediaPlayer". Therefore when the system got incoming call, all four outputs of MediaPlayer are muted automatically by Sound Manager. And in this timing, Sound Manager will issue the event to Media Player, then Media Player can stop the music. (Because depends on OEM's requirement, "Stop" is required, not "Mute".)
+ "Tel" and "TTS" have the same priority. So if TTS event happened on talking, each sound will output from independent speaker.
+ If on-hook button is touched, Sound Manager will resume previous sound mode. In this example, basically it's MediaPlayer sound. But if TTS still playing, three speaker will output MediaPlayer sound but one speaker will continue to output TTS sound.
+- **Sound mode transition should be done by Sound Manager not Applications.**
+ Actually application cannot recognize all sound source and its priority, so some centerized manager is required. Sound Manager provides this function. Sound Manager has a database for usecase and priority and in line with this policy Sound Manager controls proper sound mode.
+
+
+The below links show the example of Sound/Window mode transition.
+* [Single window application](Display_Audio_Transition1.md)
+ This transition assumes target IVI system support only one window on screen. It's a similar transition to CES2017 demo.
+* [Dual window application](Display_Audio_Transition2.md)
+ This transition assumes target IVI system support two window (split screen) on screen.
+
+ Of course user can customize shortcut menu, but since it's too many states so this example limits shortcut menu as "Home", "MediaPlayer", "HVAC" and "Navigation".
+
+* * *
+
+## **<div id="Getting\ Start">Getting Start</div>**
+
+### **<div id="Supported\ environment">Supported environment</div>**
+| Item | Description |
+|:------------|:----------------------------------|
+| AGL version | Daring Dab |
+| Hardware | Renesas R-Car Starter Kit Pro(M3) |
+
+
+### **<div id="Build">Build</div>**
+
+You can make Sound Manager object files by the following two stage operations.
+
+**Download recipe**
+If repo is already done, please start with git clone
+```
+$ mkdir WORK
+$ cd WORK
+$ repo init -b dab -m dab_4.0.0_xml -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
+$ repo sync
+$ git clone https://gerrit.automotivelinux.org/gerrit/staging/meta-hmi-framework
+
+```
+
+Then you can get the following recipe.
+* `meta-hmi-framework/agl-service-soundmanager-2017`
+
+
+**Bitbake**
+```
+$ source meta-agl/scripts/aglsetup.sh -m m3ulcb agl-demo agl-devel agl-appfw-smack hmi-framework
+$ bitbake agl-service-soundmanager-2017
+```
+
+
+* * *
+
+### **<div id="Configuring">Configuring</div>**
+To use Sound Manager API, an application shall paste the following configuration definition into "config.xml" of application.
+```
+<feature name="urn:AGL:widget:required-api">
+ <param name="soundmanager" value="ws" />
+</feature>
+```
+
+* * *
+
+### **<div id="Additional\ work">Additional work</div>**
+
+**Add Policy file**
+
+To add Sound Manager Domain into policy, put the following file to /etc/audiomanager/control.
+
+` soundmanager/conf/audiomanager-config-sample/configuration.xml`
+
+
+**Remove Module router of Pulse Audio**
+
+Because the module rounter access to Audio manager for getting sound right instead of application in CES2017, after you changed your application code for Sound manager, you should remove the module router.
+To do this, you have to comment out line.143 of /etc/pulse/default.pa as below.
+
+```
+.ifexists module-router.so
+#load-module module-router
+.endif
+
+```
+
+
+* * *
+
+### **<div id="How\ to\ call\ Sound\ Manager\ APIs\ from\ your\ Application?">How to call Sound Manager APIs from your Application?</div>**
+Sound Manager provides a library which is called "libsoundmanager".
+This library provides function style API calling interface. So you should include libsoundmanager.hpp headerfile, and should link this library.
+Please also refer sample application and template.
+
+
+See also our [Sample code](#Sample\ code).
+
+
+<br />
+
+* * *
+
+## **<div id="Supported\ usecase">Supported usecase</div>**
+1. Active source change
+ - When user choose different audio source with current one, IVI system stop or pause current source and activate new one.
+ - When user connect external device e.g. iPhone, USB memory IVI system change active source automatically to connected one.
+2. Active source locking
+ - When user is in phone call, IVI restrict to change active source.
+3. Interrupt source mixing
+ - When car close to cross road IVI system reduce the volume of current source and mix with interrupt source e.g. Navigation Guidance.
+4. Volume change
+ - User can change the volume of active source or sink.
+ - When user change volume during interruption e.g. Navigation Guidance, IVI system change its volume temporary or permanently.
+5. Mute/unmute
+ - User can mute/unmute current active source.
+6. Volume management
+ - When user change active source, IVI system mute/unmute to avoid distortion of sound.
+7. Volume acceleration
+ - When road noise is increased by speed, IVI system automatically change the volume of active source.
+8. Routing sound
+ - System needs to route sound stream to proper zones. (driver zone, passenger zone, rear seat zone)
+
+[See also this page](https://wiki.automotivelinux.org/eg-ui-graphics-req-audiorouting)
+
+* * *
+
+## **<div id="Software\ Architecture">Software Architecture</div>**
+The architecture of Sound Manager is shown below.
+Sound Manager is the service designed to be used by multiple applications.
+Therefore Sound Manager framework consists on two binder layers. Please refer the following figure.
+The upper binder is for application side security context for applications. The lower binder is for servide side security context.
+Usually application side binder has some business logic for each application, so the number of binders depend on the number of applications which use Sound Manager.
+On the other hand, regarding lower binder there is only one module in the system. This binder receives all messages from multiple applications (in detail, it comes from upper layer binder).
+
+The communication protocols between libsoundmanager and upper binder, upper binder and lower binder, lower binder (soundmanager-binding) and AudioManager are WebSocket.
+
+![software-stack.png](parts/software-stack.png)
+
+* * *
+
+## **<div id="API\ reference">API reference</div>**
+"libsoundmanager" and "soundmanager_binding" provides several kinds of APIs, and these APIs basically correspond to GENIVI Audio Manager API. (Some APIs are Sound Manager original functions.)
+
+For understanding, GENIVI Audio Manager stands for one core module and three plug-ins.
+1. AudioManagerDaemon
+ This is a core module of Audio Manager.
+2. AudioManagerCommandPlugin
+ This is a command interface for Audio Manager.
+3. AudioManagerController
+ This plug-in can be used for sound-right management.
+4. AudioManagerRountingPlugin
+ This plug-in abstracts the hardware and software. And sometimes there may be multiple plug-ins.
+
+*) [See also GENIVI AudioManager Components](http://docs.projects.genivi.org/AudioManager/audiomanagercomponentspage.html)
+
+![See also GENIVI AudioManager Components](parts/am-component.png)
+(This figure was copied from GENIVI Web page.)
+
+
+### **<div id="APIs">APIs</div>**
+
+- [init(int port, const std::string& token)]()
+- [registerSource(const std::string& sourceName)](http://docs.projects.genivi.org/AudioManager/a00053.html#acadce23459d94cec496d17700cbde230)
+- [connect(int sourceID, int sinkID)](http://docs.projects.genivi.org/AudioManager/a00033.html#a62d8f5aee1e601d59f993c5a5561e234)
+- [connect(int sourceID, const std::string& sinkName = "default")](http://docs.projects.genivi.org/AudioManager/a00033.html#a62d8f5aee1e601d59f993c5a5561e234)
+- [disconnect(int connectionID)](http://docs.projects.genivi.org/AudioManager/a00033.html#aa24d0146f4e3c75e02d6c0152e246da1)
+- [ackSetSourceState(int sourceID, int handle, int errno)](http://docs.projects.genivi.org/AudioManager/a00053.html#a11f6b0378a50296a72107d6a1fa7ec21)
+- [LibSoundmanager ()](api-ref/html/class_lib_soundmanager.html#a8b51e9891813cb62dd12109c017ad106)
+- [set_event_handler(enum EventType_AsyncSetSourceState et, handler_asyncSetSourceState f)]()
+- [register_callback( void (*event_cb)(const std::string& event, struct json_object* event_contents), void (*reply_cb)(struct json_object* reply_contents), void (*hangup_cb)(void) = nullptr)]()
+- [register_callback( void (*reply_cb)(struct json_object* reply_contents), void (*hangup_cb)(void) = nullptr)]()
+
+
+The below APIs will be available at RC2.
+
+- [setVolume (const am_sinkID_t sinkID, const am_mainVolume_t volume)](http://docs.projects.genivi.org/AudioManager/a00033.html#a6d47bc67473d75495260abe8c666fc7e)
+- [volumeStep (const am_sinkID_t sinkID, const int16_t volumeStep)](http://docs.projects.genivi.org/AudioManager/a00033.html#ad7a4c1fe5a2ecfaae5484a14d8820e58)
+- [setSinkMuteState (const am_sinkID_t sinkID, const am_MuteState_e muteState)](http://docs.projects.genivi.org/AudioManager/a00033.html#afae22041843c5349be16a6593d3ebb9c)
+- [getListMainConnections (std::vector< am_MainConnectionType_s > &listConnections)](http://docs.projects.genivi.org/AudioManager/a00033.html#a59d10a7178e3227d0b8f415308c71179)
+- [confirmRoutingReady (const uint16_t handle, const am_Error_e error)](http://docs.projects.genivi.org/AudioManager/a00053.html#a1dd1b89cccffeaafb1a3c11cebd7e48c)
+
+
+### **<div id="Events">Events</div>**
+
+- [EventType_AsyncSetSourceState]()
+
+The below Events will be available at RC2.
+
+- [EventType_NewMainConnection](http://docs.projects.genivi.org/AudioManager/a00034.html#a69ada9e19c65c1d078d8a5f473d08586)
+- [EventType_RemovedMainConnection](http://docs.projects.genivi.org/AudioManager/a00034.html#aa3b5906bcf682cff155fb24d402efd89)
+- [EventType_MainConnectionStateChanged](http://docs.projects.genivi.org/AudioManager/a00034.html#a32aa8ab84632805a876e023a7aead810)
+- [EventType_VolumeChanged](http://docs.projects.genivi.org/AudioManager/a00034.html#a4494fdd835137e572f2cf4a3aceb6ae5)
+- [EventType_SinkMuteStateChanged](http://docs.projects.genivi.org/AudioManager/a00034.html#a6068ce59089fbdc63aec81e778aba238)
+- [EventType_setRoutingReady](http://docs.projects.genivi.org/AudioManager/a00054.html#a7a4d410e30df0e8240d25a57e3c72c6b)
+- [EventType_asyncConnect](http://docs.projects.genivi.org/AudioManager/a00054.html#a8a81297be9c64511e27d85444c59b0d6)
+- [EventType_asyncSetSourceState](http://docs.projects.genivi.org/AudioManager/a00054.html#ab02d93d54ee9cd98776a3f2d274ee24d)
+- [EventType_asyncDisconnect](http://docs.projects.genivi.org/AudioManager/a00054.html#a93ae95515730eb615ab5dfc1316d7862)
+
+* * *
+
+## **<div id="Sequence">Sequence</div>**
+### **<div id="StartUp">StartUp</div>**
+![seq_startup.png](parts/seq_startup.svg)
+
+### **<div id="Registration">Registration</div>**
+![seq_registration.png](parts/seq_registration.svg)
+
+### **<div id="Request\ Sound\ Right">Request Sound Right</div>**
+![seq_requestsoundmode.png](parts/seq_requestsoundmode.svg)
+
+### **<div id="Connect\ Sound\ Route">Connect Sound Route</div>**
+![seq_connectsoundroute.png](parts/seq_connectsoundroute.svg)
+
+### **<div id="Start\ Sound\ Streaming">Start Sound Streaming</div>**
+![seq_startsoundstreaming.png](parts/seq_startsoundstreaming.svg)
+
+### **<div id="Stop\ Sound\ Streaming">Stop Sound Streaming</div>**
+![seq_stopsoundstreaming.png](parts/seq_stopsoundstreaming.svg)
+
+### **<div id="Disconnect\ Sound\ Route">Disconnect Sound Route</div>**
+![seq_disconnectsoundroute.png](parts/seq_disconnectsoundroute.svg)
+
+### **<div id="Change\ Volume">Change Volume</div>**
+![seq_changevolume.png](parts/seq_changevolume.svg)
+
+### **<div id="Set\ Mute\ State">Set Mute State</div>**
+![seq_setmutestate.png](parts/seq_setmutestate.svg)
+
+### **<div id="Release\ Sound\ Right">Release Sound Right</div>**
+![seq_releasesoundmode.png](parts/seq_releasesoundmode.svg)
+
+* * *
+
+### **<div id="Audio\ Domain">Audio Domain</div>**
+
+One of the most important concept of Audio Manager is Audio Domain.
+To use GENIVI Audio Manager based system, it may be better to understand this concept.
+The below document should bring good understanding.
+
+[GENIVI Audio Manager: Generic Controller Plug-in](http://events.linuxfoundation.org/sites/events/files/slides/AGL_AMM_presentation_A01.pdf)
+
+Although strongly recommended to read whole pages, but you can get quick understanding by page.10 to 14.
+
+
+# **<div id="Sample\ code">Sample code</div>**
+You can find sample implementation of Sound Manager as below.
+* `apps/agl-service-homescreen-2017/sample/template`
+* `apps/agl-service-homescreen-2017/sample/radio`
+* `apps/agl-service-homescreen-2017/sample/mediaplayer`
+
+
+
+# **<div id="Limitation">Limitation</div>**
+* Minimum APIs and Events are prepared for RC1, the following APIs will be available for RC2.
+
+ * setVolume
+ * volumeStep
+ * setSinkMuteState
+ * getListMainConnections
+ * confirmRoutingReady
+ * EventType_NewMainConnection
+ * EventType_RemovedMainConnection
+ * EventType_MainConnectionStateChanged
+ * EventType_VolumeChanged
+ * EventType_SinkMuteStateChanged
+ * EventType_setRoutingReady
+ * EventType_asyncConnect
+ * EventType_asyncSetSourceState
+ * EventType_asyncDisconnect
+
+
diff --git a/doc/Display_Audio_Transition1.md b/doc/Display_Audio_Transition1.md
new file mode 100644
index 0000000..a9c1604
--- /dev/null
+++ b/doc/Display_Audio_Transition1.md
@@ -0,0 +1,123 @@
+# Sound mode transition for single window application
+<table>
+<tr bgcolor="lightskyblue"><td colspan=7>State</td><td colspan=21>Event</td></tr>
+<tr bgcolor="lightskyblue"><td rowspan=2>State ID</td><td colspan=2>Display</td><td colspan=4>Audio</td><td colspan=2>Power</td><td colspan=6>Push HomeScreen button</td><td rowspan=2>Start BTA</td><td rowspan=2>Incoming call</td><td colspan=4>Push Shortcut button</td><td colspan=2>TTS</td><td colspan=3>Push Phone control button</td><td colspan=2>Safety hazard</td></tr>
+<tr bgcolor="lightskyblue"><td>Win#1</td><td>PopUp</td><td>FL</td><td>FR</td><td>RL</td><td>RR</td><td>On</td><td>Off</td><td>Media Player</td><td>Radio</td><td>Navi</td><td>HVAC</td><td>Phone</td><td>Other button</td><td>Home</td><td>Media Player</td><td>HVAC</td><td>Navi</td><td>Navi INT TTS</td><td>Ended</td><td>Reject</td><td>Off hook</td><td>On hook</td><td>Detected</td><td>Recovered</td></tr>
+<tr><td>S1</td><td>-</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>S2</td><td bgcolor="gray">-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">-</td><td bgcolor="gray">-</td></tr>
+<tr><td>S2</td><td>Home</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S37</td><td>S57</td><td>S77</td><td>S97</td><td>S17</td><td>S4</td><td>-</td><td>S22</td><td>S57</td><td>S37</td><td>S3</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S3</td><td>Home</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S38</td><td>S58</td><td>S78</td><td>S98</td><td>S18</td><td>S4</td><td>-</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>S2</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S4</td><td>Home</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S2</td><td>S5</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S5</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S60</td><td>S40</td><td>S6</td><td>-</td><td>-</td><td>-</td><td>S2</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S6</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>S5</td><td>-</td><td>-</td><td>S3</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S7</td><td>Home</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S42</td><td>S62</td><td>S82</td><td>S102</td><td>S17</td><td>S9</td><td>-</td><td>S22</td><td>S62</td><td>S42</td><td>S8</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S8</td><td>Home</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S43</td><td>S63</td><td>S83</td><td>S103</td><td>S18</td><td>S9</td><td>-</td><td>S23</td><td>S63</td><td>S43</td><td>-</td><td>S7</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S9</td><td>Home</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S7</td><td>S10</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S10</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S65</td><td>S45</td><td>S11</td><td>-</td><td>-</td><td>-</td><td>S7</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S11</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S66</td><td>S46</td><td>-</td><td>S10</td><td>-</td><td>-</td><td>S8</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S12</td><td>Home</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S47</td><td>S67</td><td>S87</td><td>S107</td><td>S17</td><td>S14</td><td>-</td><td>S22</td><td>S67</td><td>S47</td><td>S13</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S13</td><td>Home</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S48</td><td>S68</td><td>S88</td><td>S108</td><td>S18</td><td>S14</td><td>-</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>S12</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S14</td><td>Home</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S12</td><td>S15</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S15</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S70</td><td>S50</td><td>S16</td><td>-</td><td>-</td><td>-</td><td>S12</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S16</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>S15</td><td>-</td><td>-</td><td>S13</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S17</td><td>Home</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>S32</td><td>S27</td><td>S52</td><td>S72</td><td>S92</td><td>S112</td><td>S17</td><td>S19</td><td>-</td><td>S32</td><td>S72</td><td>S52</td><td>S18</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S18</td><td>Home</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>S33</td><td>S28</td><td>S53</td><td>S73</td><td>S93</td><td>S113</td><td>S18</td><td>S19</td><td>-</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>S17</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S19</td><td>Home</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S17</td><td>S20</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S20</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S35</td><td>S75</td><td>S55</td><td>S21</td><td>-</td><td>-</td><td>-</td><td>S17</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S21</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S18</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S22</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S24</td><td>S7</td><td>-</td><td>S62</td><td>S42</td><td>S23</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S23</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S33</td><td>S24</td><td>S8</td><td>-</td><td>S63</td><td>S43</td><td>-</td><td>S22</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S24</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S22</td><td>S25</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S25</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>S10</td><td>-</td><td>S65</td><td>S45</td><td>S26</td><td>-</td><td>-</td><td>-</td><td>S22</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S26</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>S11</td><td>-</td><td>S66</td><td>S46</td><td>-</td><td>S25</td><td>-</td><td>-</td><td>S23</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S27</td><td>Radio</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S29</td><td>S12</td><td>S22</td><td>S67</td><td>S47</td><td>S28</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S28</td><td>Radio</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S33</td><td>S29</td><td>S13</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>S27</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S29</td><td>Radio</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S27</td><td>S30</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S30</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>S15</td><td>S25</td><td>S70</td><td>S50</td><td>S31</td><td>-</td><td>-</td><td>-</td><td>S27</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S31</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>S16</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>S30</td><td>-</td><td>-</td><td>S28</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S32</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>S17</td><td>-</td><td>S72</td><td>S52</td><td>S33</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S33</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>S18</td><td>-</td><td>S73</td><td>S53</td><td>-</td><td>S32</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S34</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S35</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S35</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S75</td><td>S55</td><td>S36</td><td>-</td><td>-</td><td>-</td><td>S32</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S36</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S76</td><td>S56</td><td>-</td><td>S35</td><td>-</td><td>-</td><td>S33</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S37</td><td>Navi</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S39</td><td>S2</td><td>S22</td><td>S57</td><td>S37</td><td>S38</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S38</td><td>Navi</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S39</td><td>S3</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>S37</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S39</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S37</td><td>S40</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S40</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S5</td><td>S25</td><td>S60</td><td>S40</td><td>S41</td><td>-</td><td>-</td><td>-</td><td>S37</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S41</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S6</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>S40</td><td>-</td><td>-</td><td>S38</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S42</td><td>Navi</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S44</td><td>S7</td><td>S22</td><td>S62</td><td>-</td><td>S43</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S43</td><td>Navi</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S44</td><td>S8</td><td>S23</td><td>S63</td><td>-</td><td>-</td><td>S42</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S44</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S42</td><td>S45</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S45</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S10</td><td>S25</td><td>S65</td><td>-</td><td>S46</td><td>-</td><td>-</td><td>-</td><td>S42</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S46</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S11</td><td>S26</td><td>S66</td><td>-</td><td>-</td><td>S45</td><td>-</td><td>-</td><td>S43</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S47</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S49</td><td>S12</td><td>S22</td><td>S67</td><td>-</td><td>S48</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S48</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S49</td><td>S13</td><td>S23</td><td>S68</td><td>-</td><td>-</td><td>S47</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S49</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S47</td><td>S50</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S50</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S15</td><td>S25</td><td>S70</td><td>-</td><td>S51</td><td>-</td><td>-</td><td>-</td><td>S47</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S51</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S16</td><td>S26</td><td>S71</td><td>-</td><td>-</td><td>S50</td><td>-</td><td>-</td><td>S48</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S52</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>S17</td><td>S32</td><td>S72</td><td>S52</td><td>S53</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S53</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>S18</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>S52</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S54</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S55</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S55</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>S75</td><td>S55</td><td>S56</td><td>-</td><td>-</td><td>-</td><td>S52</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S56</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>S55</td><td>-</td><td>-</td><td>S53</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S57</td><td>HVAC</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S59</td><td>S2</td><td>S22</td><td>-</td><td>S37</td><td>S58</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S58</td><td>HVAC</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S59</td><td>S3</td><td>S23</td><td>-</td><td>S38</td><td>-</td><td>S57</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S59</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S57</td><td>S60</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S60</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S5</td><td>S25</td><td>-</td><td>S40</td><td>S61</td><td>-</td><td>-</td><td>-</td><td>S57</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S61</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S6</td><td>S26</td><td>-</td><td>S41</td><td>-</td><td>S60</td><td>-</td><td>-</td><td>S58</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S62</td><td>HVAC</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S64</td><td>S7</td><td>S22</td><td>-</td><td>S42</td><td>S63</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S63</td><td>HVAC</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S64</td><td>S8</td><td>S23</td><td>-</td><td>S43</td><td>-</td><td>S62</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S64</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S62</td><td>S65</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S65</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S10</td><td>S25</td><td>-</td><td>S45</td><td>S66</td><td>-</td><td>-</td><td>-</td><td>S62</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S66</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S11</td><td>S26</td><td>-</td><td>S46</td><td>-</td><td>S65</td><td>-</td><td>-</td><td>S63</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S67</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S69</td><td>S12</td><td>S22</td><td>-</td><td>S47</td><td>S68</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S68</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S69</td><td>S13</td><td>S23</td><td>-</td><td>S48</td><td>-</td><td>S67</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S69</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S67</td><td>S70</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S70</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S15</td><td>S25</td><td>-</td><td>S50</td><td>S71</td><td>-</td><td>-</td><td>-</td><td>S67</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S71</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S16</td><td>S26</td><td>-</td><td>S51</td><td>-</td><td>S70</td><td>-</td><td>-</td><td>S68</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S72</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>S17</td><td>S32</td><td>-</td><td>S52</td><td>S73</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S73</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>S18</td><td>S33</td><td>-</td><td>S53</td><td>-</td><td>S72</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S74</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S75</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S75</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>-</td><td>S55</td><td>S76</td><td>-</td><td>-</td><td>-</td><td>S72</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S76</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>-</td><td>S56</td><td>-</td><td>S75</td><td>-</td><td>-</td><td>S73</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S77</td><td>Phone</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S79</td><td>S2</td><td>S22</td><td>S57</td><td>S37</td><td>S78</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S78</td><td>Phone</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S79</td><td>S3</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>S77</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S79</td><td>Phone</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S77</td><td>S80</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S80</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S5</td><td>S25</td><td>S60</td><td>S40</td><td>S81</td><td>-</td><td>-</td><td>-</td><td>S77</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S81</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S6</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>S80</td><td>-</td><td>-</td><td>S78</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S82</td><td>Phone</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S84</td><td>S7</td><td>S22</td><td>S62</td><td>S42</td><td>S83</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S83</td><td>Phone</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S84</td><td>S8</td><td>S23</td><td>S63</td><td>S43</td><td>-</td><td>S82</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S84</td><td>Phone</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S82</td><td>S85</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S85</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S10</td><td>S25</td><td>S65</td><td>S45</td><td>S86</td><td>-</td><td>-</td><td>-</td><td>S82</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S86</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S11</td><td>S26</td><td>S66</td><td>S46</td><td>-</td><td>S85</td><td>-</td><td>-</td><td>S83</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S87</td><td>Phone</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S89</td><td>S12</td><td>S22</td><td>S67</td><td>S47</td><td>S88</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S88</td><td>Phone</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S89</td><td>S13</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>S87</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S89</td><td>Phone</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S87</td><td>S90</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S90</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S15</td><td>S25</td><td>S70</td><td>S50</td><td>S91</td><td>-</td><td>-</td><td>-</td><td>S87</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S91</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S16</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>S90</td><td>-</td><td>-</td><td>S88</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S92</td><td>Phone</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>S17</td><td>S32</td><td>S72</td><td>S52</td><td>S93</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S93</td><td>Phone</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>S18</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>S92</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S94</td><td>Phone</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S95</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S95</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>S75</td><td>S55</td><td>S96</td><td>-</td><td>-</td><td>-</td><td>S92</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S96</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>S95</td><td>-</td><td>-</td><td>S93</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S97</td><td>Other</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S99</td><td>S2</td><td>S22</td><td>S57</td><td>S37</td><td>S98</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S98</td><td>Other</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S99</td><td>S3</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>S97</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S99</td><td>Other</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S97</td><td>S100</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S100</td><td>Other</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S5</td><td>S25</td><td>S60</td><td>S40</td><td>S101</td><td>-</td><td>-</td><td>-</td><td>S97</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S101</td><td>Other</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S6</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>S100</td><td>-</td><td>-</td><td>S98</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S102</td><td>Other</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S104</td><td>S7</td><td>S22</td><td>S62</td><td>S42</td><td>S103</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S103</td><td>Other</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S104</td><td>S8</td><td>S23</td><td>S63</td><td>S43</td><td>-</td><td>S102</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S104</td><td>Other</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S102</td><td>S105</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S105</td><td>Other</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S10</td><td>S25</td><td>S65</td><td>S45</td><td>S106</td><td>-</td><td>-</td><td>-</td><td>S102</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S106</td><td>Other</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S11</td><td>S26</td><td>S66</td><td>S46</td><td>-</td><td>S105</td><td>-</td><td>-</td><td>S103</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S107</td><td>Other</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S109</td><td>S12</td><td>S22</td><td>S67</td><td>S47</td><td>S108</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S108</td><td>Other</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S109</td><td>S13</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>S107</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S109</td><td>Other</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S107</td><td>S110</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S110</td><td>Other</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S15</td><td>S25</td><td>S70</td><td>S50</td><td>S111</td><td>-</td><td>-</td><td>-</td><td>S107</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S111</td><td>Other</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S16</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>S110</td><td>-</td><td>-</td><td>S108</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S112</td><td>Other</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>S17</td><td>S32</td><td>S72</td><td>S52</td><td>S113</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S113</td><td>Other</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>S18</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>S112</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S114</td><td>Other</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S115</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S115</td><td>Other</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>S75</td><td>S55</td><td>S116</td><td>-</td><td>-</td><td>-</td><td>S112</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S116</td><td>Other</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>S115</td><td>-</td><td>-</td><td>S113</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr bgcolor="gray"><td>S117</td><td>any</td><td>any</td><td>any</td><td>Warn</td><td>any</td><td>any</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S(previous)</td></tr>
+</table>
diff --git a/doc/Display_Audio_Transition2.md b/doc/Display_Audio_Transition2.md
new file mode 100644
index 0000000..46d52b8
--- /dev/null
+++ b/doc/Display_Audio_Transition2.md
@@ -0,0 +1,333 @@
+# Sound mode transition for dual window application
+<table>
+<tr bgcolor="lightskyblue"><td colspan=8>State</td><td colspan=23>Event</td></tr>
+<tr bgcolor="lightskyblue"><td rowspan=2>State ID</td><td colspan=3>Display</td><td colspan=4>Audio</td><td colspan=2>Power</td><td colspan=6>Push HomeScreen button</td><td rowspan=2>Start BTA</td><td rowspan=2>Incoming call</td><td colspan=4>Push Shortcut button</td><td colspan=2>Touch</td><td colspan=2>TTS</td><td colspan=3>Push Phone control button</td><td colspan=2>Safety hazard</td></tr>
+<tr bgcolor="lightskyblue"><td>Win#1</td><td>Win#2</td><td>PopUp</td><td>FL</td><td>FR</td><td>RL</td><td>RR</td><td>On</td><td>Off</td><td>Media Player</td><td>Radio</td><td>Navi</td><td>HVAC</td><td>Phone</td><td>Other button</td><td>Home</td><td>Media Player</td><td>HVAC</td><td>Navi</td><td>Win#1</td><td>Win#2</td><td>Navi INT TTS</td><td>Ended</td><td>Reject</td><td>Off hook</td><td>On hook</td><td>Detected</td><td>Recovered</td></tr>
+<tr><td>S1</td><td>-</td><td>-</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>S2</td><td bgcolor="gray">-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">-</td><td bgcolor="gray">-</td></tr>
+<tr><td>S2</td><td>Home</td><td>-</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S37</td><td>S57</td><td>S77</td><td>S97</td><td>S17</td><td>S4</td><td>-</td><td>S22</td><td>S57</td><td>S37</td><td>-</td><td>-</td><td>S3</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S3</td><td>Home</td><td>-</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S38</td><td>S58</td><td>S78</td><td>S98</td><td>S18</td><td>S4</td><td>-</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>-</td><td>-</td><td>S2</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S4</td><td>Home</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S2</td><td>S5</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S5</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S60</td><td>S40</td><td>-</td><td>-</td><td>S6</td><td>-</td><td>-</td><td>-</td><td>S2</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S6</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>-</td><td>-</td><td>S5</td><td>-</td><td>-</td><td>S3</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S7</td><td>Home</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S42</td><td>S62</td><td>S82</td><td>S102</td><td>S17</td><td>S9</td><td>-</td><td>S22</td><td>S62</td><td>S42</td><td>-</td><td>-</td><td>S8</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S8</td><td>Home</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S43</td><td>S63</td><td>S83</td><td>S103</td><td>S18</td><td>S9</td><td>-</td><td>S23</td><td>S63</td><td>S43</td><td>-</td><td>-</td><td>-</td><td>S7</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S9</td><td>Home</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S7</td><td>S10</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S10</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S65</td><td>S45</td><td>-</td><td>-</td><td>S11</td><td>-</td><td>-</td><td>-</td><td>S7</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S11</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S66</td><td>S46</td><td>-</td><td>-</td><td>-</td><td>S10</td><td>-</td><td>-</td><td>S8</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S12</td><td>Home</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S47</td><td>S67</td><td>S87</td><td>S107</td><td>S17</td><td>S14</td><td>-</td><td>S22</td><td>S67</td><td>S47</td><td>-</td><td>-</td><td>S13</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S13</td><td>Home</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S48</td><td>S68</td><td>S88</td><td>S108</td><td>S18</td><td>S14</td><td>-</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>-</td><td>-</td><td>S12</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S14</td><td>Home</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S12</td><td>S15</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S15</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S70</td><td>S50</td><td>-</td><td>-</td><td>S16</td><td>-</td><td>-</td><td>-</td><td>S12</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S16</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>-</td><td>-</td><td>S15</td><td>-</td><td>-</td><td>S13</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S17</td><td>Home</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>S32</td><td>S27</td><td>S52</td><td>S72</td><td>S92</td><td>S112</td><td>S17</td><td>S19</td><td>-</td><td>S32</td><td>S72</td><td>S52</td><td>-</td><td>-</td><td>S18</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S18</td><td>Home</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>S33</td><td>S28</td><td>S53</td><td>S73</td><td>S93</td><td>S113</td><td>S18</td><td>S19</td><td>-</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>-</td><td>-</td><td>S17</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S19</td><td>Home</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S17</td><td>S20</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S20</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S35</td><td>S75</td><td>S55</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>-</td><td>S17</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S21</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S18</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S22</td><td>MP</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S24</td><td>S7</td><td>-</td><td>S117</td><td>S122</td><td>-</td><td>-</td><td>S23</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S23</td><td>MP</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S33</td><td>S24</td><td>S8</td><td>-</td><td>S118</td><td>S123</td><td>-</td><td>-</td><td>-</td><td>S22</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S24</td><td>MP</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S22</td><td>S25</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S25</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>S10</td><td>-</td><td>S120</td><td>S125</td><td>-</td><td>-</td><td>S26</td><td>-</td><td>-</td><td>-</td><td>S22</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S26</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>S11</td><td>-</td><td>S121</td><td>S126</td><td>-</td><td>-</td><td>-</td><td>S25</td><td>-</td><td>-</td><td>S23</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S27</td><td>Radio</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S29</td><td>S12</td><td>S132</td><td>S147</td><td>S152</td><td>-</td><td>-</td><td>S28</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S28</td><td>Radio</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S33</td><td>S29</td><td>S13</td><td>S133</td><td>S148</td><td>S153</td><td>-</td><td>-</td><td>-</td><td>S27</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S29</td><td>Radio</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S27</td><td>S30</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S30</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>S15</td><td>S135</td><td>S150</td><td>S155</td><td>-</td><td>-</td><td>S31</td><td>-</td><td>-</td><td>-</td><td>S27</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S31</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>S16</td><td>S136</td><td>S151</td><td>S156</td><td>-</td><td>-</td><td>-</td><td>S30</td><td>-</td><td>-</td><td>S28</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S32</td><td>MP(BTA)</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>S17</td><td>S32</td><td>S157</td><td>S162</td><td>-</td><td>-</td><td>S33</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S33</td><td>MP(BTA)</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>S18</td><td>S33</td><td>S158</td><td>S163</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S34</td><td>MP(BTA)</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S35</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S35</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>S160</td><td>S165</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>-</td><td>-</td><td>S32</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S36</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>S161</td><td>S166</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>-</td><td>S33</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S37</td><td>Navi</td><td>-</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S39</td><td>S2</td><td>S247</td><td>S257</td><td>S37</td><td>-</td><td>-</td><td>S38</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S38</td><td>Navi</td><td>-</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S39</td><td>S3</td><td>S248</td><td>S258</td><td>S38</td><td>-</td><td>-</td><td>-</td><td>S37</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S39</td><td>Navi</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S37</td><td>S40</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S40</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S5</td><td>S250</td><td>S260</td><td>S40</td><td>-</td><td>-</td><td>S41</td><td>-</td><td>-</td><td>-</td><td>S37</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S41</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S6</td><td>S251</td><td>S261</td><td>S41</td><td>-</td><td>-</td><td>-</td><td>S40</td><td>-</td><td>-</td><td>S38</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S42</td><td>Navi</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S44</td><td>S7</td><td>S247</td><td>S262</td><td>S42</td><td>-</td><td>-</td><td>S43</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S43</td><td>Navi</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S44</td><td>S8</td><td>S248</td><td>S263</td><td>S43</td><td>-</td><td>-</td><td>-</td><td>S42</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S44</td><td>Navi</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S42</td><td>S45</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S45</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S10</td><td>S250</td><td>S265</td><td>S45</td><td>-</td><td>-</td><td>S46</td><td>-</td><td>-</td><td>-</td><td>S42</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S46</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S11</td><td>S251</td><td>S266</td><td>S46</td><td>-</td><td>-</td><td>-</td><td>S45</td><td>-</td><td>-</td><td>S43</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S47</td><td>Navi</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S49</td><td>S12</td><td>S247</td><td>S267</td><td>S47</td><td>-</td><td>-</td><td>S48</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S48</td><td>Navi</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S49</td><td>S13</td><td>S248</td><td>S268</td><td>S48</td><td>-</td><td>-</td><td>-</td><td>S47</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S49</td><td>Navi</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S47</td><td>S50</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S50</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S15</td><td>S250</td><td>S270</td><td>S50</td><td>-</td><td>-</td><td>S51</td><td>-</td><td>-</td><td>-</td><td>S47</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S51</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S16</td><td>S251</td><td>S271</td><td>S51</td><td>-</td><td>-</td><td>-</td><td>S50</td><td>-</td><td>-</td><td>S48</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S52</td><td>Navi</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>S17</td><td>S252</td><td>S272</td><td>S52</td><td>-</td><td>-</td><td>S53</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S53</td><td>Navi</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>S18</td><td>S253</td><td>S273</td><td>S53</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S54</td><td>Navi</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S55</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S55</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S255</td><td>S275</td><td>S55</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>-</td><td>-</td><td>S52</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S56</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S256</td><td>S276</td><td>S56</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>-</td><td>S53</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S57</td><td>HVAC</td><td>-</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S59</td><td>S2</td><td>S167</td><td>S57</td><td>S177</td><td>-</td><td>-</td><td>S58</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S58</td><td>HVAC</td><td>-</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S59</td><td>S3</td><td>S168</td><td>S58</td><td>S178</td><td>-</td><td>-</td><td>-</td><td>S57</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S59</td><td>HVAC</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S57</td><td>S60</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S60</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S5</td><td>S170</td><td>S60</td><td>S177</td><td>-</td><td>-</td><td>S61</td><td>-</td><td>-</td><td>-</td><td>S57</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S61</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S6</td><td>S171</td><td>S61</td><td>S178</td><td>-</td><td>-</td><td>-</td><td>S60</td><td>-</td><td>-</td><td>S58</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S62</td><td>HVAC</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S64</td><td>S7</td><td>S167</td><td>S62</td><td>S182</td><td>-</td><td>-</td><td>S63</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S63</td><td>HVAC</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S64</td><td>S8</td><td>S168</td><td>S63</td><td>S183</td><td>-</td><td>-</td><td>-</td><td>S62</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S64</td><td>HVAC</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S62</td><td>S65</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S65</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S10</td><td>S170</td><td>S65</td><td>S185</td><td>-</td><td>-</td><td>S66</td><td>-</td><td>-</td><td>-</td><td>S62</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S66</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S11</td><td>S171</td><td>S66</td><td>S186</td><td>-</td><td>-</td><td>-</td><td>S65</td><td>-</td><td>-</td><td>S63</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S67</td><td>HVAC</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S69</td><td>S12</td><td>S167</td><td>S67</td><td>S187</td><td>-</td><td>-</td><td>S68</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S68</td><td>HVAC</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S69</td><td>S13</td><td>S168</td><td>S68</td><td>S188</td><td>-</td><td>-</td><td>-</td><td>S67</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S69</td><td>HVAC</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S67</td><td>S70</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S70</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S15</td><td>S170</td><td>S70</td><td>S190</td><td>-</td><td>-</td><td>S71</td><td>-</td><td>-</td><td>-</td><td>S67</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S71</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S16</td><td>S171</td><td>S71</td><td>S191</td><td>-</td><td>-</td><td>-</td><td>S70</td><td>-</td><td>-</td><td>S68</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S72</td><td>HVAC</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>S17</td><td>S172</td><td>S72</td><td>S192</td><td>-</td><td>-</td><td>S73</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S73</td><td>HVAC</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>S18</td><td>S173</td><td>S73</td><td>S193</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S74</td><td>HVAC</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S75</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S75</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S175</td><td>S75</td><td>S195</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>-</td><td>-</td><td>S72</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S76</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S176</td><td>S76</td><td>S196</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>-</td><td>S73</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S77</td><td>Phone</td><td>-</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S79</td><td>S2</td><td>S197</td><td>S207</td><td>S227</td><td>-</td><td>-</td><td>S78</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S78</td><td>Phone</td><td>-</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S79</td><td>S3</td><td>S198</td><td>S208</td><td>S228</td><td>-</td><td>-</td><td>-</td><td>S77</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S79</td><td>Phone</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S77</td><td>S80</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S80</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S5</td><td>S200</td><td>S210</td><td>S230</td><td>-</td><td>-</td><td>S81</td><td>-</td><td>-</td><td>-</td><td>S77</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S81</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S6</td><td>S201</td><td>S211</td><td>S231</td><td>-</td><td>-</td><td>-</td><td>S80</td><td>-</td><td>-</td><td>S78</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S82</td><td>Phone</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S84</td><td>S7</td><td>S197</td><td>S212</td><td>S232</td><td>-</td><td>-</td><td>S83</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S83</td><td>Phone</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S84</td><td>S8</td><td>S198</td><td>S213</td><td>S233</td><td>-</td><td>-</td><td>-</td><td>S82</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S84</td><td>Phone</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S82</td><td>S85</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S85</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S10</td><td>S200</td><td>S215</td><td>S235</td><td>-</td><td>-</td><td>S86</td><td>-</td><td>-</td><td>-</td><td>S82</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S86</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S11</td><td>S201</td><td>S216</td><td>S236</td><td>-</td><td>-</td><td>-</td><td>S85</td><td>-</td><td>-</td><td>S83</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S87</td><td>Phone</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S89</td><td>S12</td><td>S197</td><td>S217</td><td>S237</td><td>-</td><td>-</td><td>S88</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S88</td><td>Phone</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S89</td><td>S13</td><td>S198</td><td>S218</td><td>S238</td><td>-</td><td>-</td><td>-</td><td>S87</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S89</td><td>Phone</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S87</td><td>S90</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S90</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S15</td><td>S200</td><td>S220</td><td>S240</td><td>-</td><td>-</td><td>S91</td><td>-</td><td>-</td><td>-</td><td>S87</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S91</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S16</td><td>S201</td><td>S221</td><td>S241</td><td>-</td><td>-</td><td>-</td><td>S90</td><td>-</td><td>-</td><td>S88</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S92</td><td>Phone</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>S17</td><td>S202</td><td>S222</td><td>S242</td><td>-</td><td>-</td><td>S93</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S93</td><td>Phone</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>S18</td><td>S203</td><td>S223</td><td>S243</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S94</td><td>Phone</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S95</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S95</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S205</td><td>S225</td><td>S245</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>-</td><td>-</td><td>S92</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S96</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S206</td><td>S226</td><td>S246</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>-</td><td>S93</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S97</td><td>Other</td><td>-</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S99</td><td>S2</td><td>S277</td><td>S287</td><td>S307</td><td>-</td><td>-</td><td>S98</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S98</td><td>Other</td><td>-</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S99</td><td>S3</td><td>S278</td><td>S288</td><td>S308</td><td>-</td><td>-</td><td>-</td><td>S97</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S99</td><td>Other</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S97</td><td>S100</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S100</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S5</td><td>S278</td><td>S290</td><td>S310</td><td>-</td><td>-</td><td>S101</td><td>-</td><td>-</td><td>-</td><td>S97</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S101</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S6</td><td>S278</td><td>S291</td><td>S311</td><td>-</td><td>-</td><td>-</td><td>S100</td><td>-</td><td>-</td><td>S98</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S102</td><td>Other</td><td>-</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S104</td><td>S7</td><td>S277</td><td>S292</td><td>S312</td><td>-</td><td>-</td><td>S103</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S103</td><td>Other</td><td>-</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S104</td><td>S8</td><td>S278</td><td>S293</td><td>S313</td><td>-</td><td>-</td><td>-</td><td>S102</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S104</td><td>Other</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S102</td><td>S105</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S105</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S10</td><td>S278</td><td>S295</td><td>S315</td><td>-</td><td>-</td><td>S106</td><td>-</td><td>-</td><td>-</td><td>S102</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S106</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S11</td><td>S278</td><td>S296</td><td>S316</td><td>-</td><td>-</td><td>-</td><td>S105</td><td>-</td><td>-</td><td>S103</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S107</td><td>Other</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S109</td><td>S12</td><td>S277</td><td>S297</td><td>S317</td><td>-</td><td>-</td><td>S108</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S108</td><td>Other</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S109</td><td>S13</td><td>S278</td><td>S298</td><td>S318</td><td>-</td><td>-</td><td>-</td><td>S107</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S109</td><td>Other</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S107</td><td>S110</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S110</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S15</td><td>S278</td><td>S300</td><td>S320</td><td>-</td><td>-</td><td>S111</td><td>-</td><td>-</td><td>-</td><td>S107</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S111</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S16</td><td>S278</td><td>S301</td><td>S321</td><td>-</td><td>-</td><td>-</td><td>S110</td><td>-</td><td>-</td><td>S108</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S112</td><td>Other</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>S17</td><td>S282</td><td>S302</td><td>S322</td><td>-</td><td>-</td><td>S113</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S113</td><td>Other</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>S18</td><td>S283</td><td>S303</td><td>S323</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S114</td><td>Other</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S115</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S115</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S285</td><td>S305</td><td>S325</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>-</td><td>-</td><td>S112</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S116</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S286</td><td>S306</td><td>S326</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>-</td><td>S113</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S117</td><td>MP</td><td>HVAC</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S157</td><td>S119</td><td>S7</td><td>-</td><td>-</td><td>S122</td><td>-</td><td>-</td><td>S118</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S118</td><td>MP</td><td>HVAC</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S158</td><td>S119</td><td>S8</td><td>-</td><td>-</td><td>S123</td><td>-</td><td>-</td><td>-</td><td>S117</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S119</td><td>MP</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S159</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S117</td><td>S120</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S120</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S160</td><td>-</td><td>S10</td><td>-</td><td>-</td><td>S125</td><td>-</td><td>-</td><td>S121</td><td>-</td><td>-</td><td>-</td><td>S117</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S121</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S161</td><td>-</td><td>S11</td><td>-</td><td>-</td><td>S126</td><td>-</td><td>-</td><td>-</td><td>S120</td><td>-</td><td>-</td><td>S118</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S122</td><td>MP</td><td>Navi</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S162</td><td>S124</td><td>S7</td><td>-</td><td>S117</td><td>-</td><td>-</td><td>-</td><td>S123</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S123</td><td>MP</td><td>Navi</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S163</td><td>S124</td><td>S8</td><td>-</td><td>S118</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S122</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S124</td><td>MP</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S164</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S122</td><td>S125</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S125</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S165</td><td>-</td><td>S10</td><td>-</td><td>S120</td><td>-</td><td>-</td><td>-</td><td>S126</td><td>-</td><td>-</td><td>-</td><td>S122</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S126</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S166</td><td>-</td><td>S11</td><td>-</td><td>S121</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S125</td><td>-</td><td>-</td><td>S123</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S127</td><td>Radio</td><td>MP</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S137</td><td>S129</td><td>S12</td><td>S127</td><td>S147</td><td>S152</td><td>-</td><td>S132</td><td>S128</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S128</td><td>Radio</td><td>MP</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S138</td><td>S129</td><td>S13</td><td>S128</td><td>S148</td><td>S153</td><td>-</td><td>S133</td><td>-</td><td>S127</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S129</td><td>Radio</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S139</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S127</td><td>S130</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S130</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S140</td><td>-</td><td>S15</td><td>S130</td><td>S150</td><td>S155</td><td>-</td><td>S135</td><td>S131</td><td>-</td><td>-</td><td>-</td><td>S127</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S131</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S141</td><td>-</td><td>S16</td><td>S131</td><td>S151</td><td>S156</td><td>-</td><td>S136</td><td>-</td><td>S130</td><td>-</td><td>-</td><td>S128</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S132</td><td>Radio</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S137</td><td>S134</td><td>S7</td><td>S132</td><td>S147</td><td>S152</td><td>S127</td><td>-</td><td>S133</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S133</td><td>Radio</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S138</td><td>S134</td><td>S8</td><td>S133</td><td>S148</td><td>S153</td><td>S128</td><td>-</td><td>-</td><td>S132</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S134</td><td>Radio</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S139</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S132</td><td>S135</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S135</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S140</td><td>-</td><td>S10</td><td>S135</td><td>S150</td><td>S155</td><td>S130</td><td>-</td><td>S136</td><td>-</td><td>-</td><td>-</td><td>S132</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S136</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S141</td><td>-</td><td>S11</td><td>S136</td><td>S151</td><td>S156</td><td>S131</td><td>-</td><td>-</td><td>S135</td><td>-</td><td>-</td><td>S133</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S137</td><td>Radio</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S139</td><td>S17</td><td>S137</td><td>S147</td><td>S152</td><td>S142</td><td>-</td><td>S138</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S138</td><td>Radio</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S139</td><td>S18</td><td>S138</td><td>S148</td><td>S153</td><td>S143</td><td>-</td><td>-</td><td>S137</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S139</td><td>Radio</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S137</td><td>S140</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S140</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S140</td><td>S150</td><td>S155</td><td>S145</td><td>-</td><td>S141</td><td>-</td><td>-</td><td>-</td><td>S137</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S141</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S141</td><td>S151</td><td>S156</td><td>S146</td><td>-</td><td>-</td><td>S140</td><td>-</td><td>-</td><td>S138</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S142</td><td>Radio</td><td>MP(BTA)</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S144</td><td>S17</td><td>S142</td><td>S152</td><td>S157</td><td>-</td><td>S137</td><td>S143</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S143</td><td>Radio</td><td>MP(BTA)</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S144</td><td>S18</td><td>S143</td><td>S153</td><td>S158</td><td>-</td><td>S138</td><td>-</td><td>S142</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S144</td><td>Radio</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S142</td><td>S145</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S145</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S145</td><td>S155</td><td>S160</td><td>-</td><td>S140</td><td>S146</td><td>-</td><td>-</td><td>-</td><td>S142</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S146</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S146</td><td>S156</td><td>S161</td><td>-</td><td>S141</td><td>-</td><td>S145</td><td>-</td><td>-</td><td>S143</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S147</td><td>Radio</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S157</td><td>S149</td><td>S12</td><td>S132</td><td>-</td><td>S152</td><td>-</td><td>-</td><td>S148</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S148</td><td>Radio</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S158</td><td>S149</td><td>S13</td><td>S133</td><td>-</td><td>S153</td><td>-</td><td>-</td><td>-</td><td>S147</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S149</td><td>Radio</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S159</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S147</td><td>S150</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S150</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S160</td><td>-</td><td>S15</td><td>S135</td><td>-</td><td>S155</td><td>-</td><td>-</td><td>S151</td><td>-</td><td>-</td><td>-</td><td>S147</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S151</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S161</td><td>-</td><td>S16</td><td>S136</td><td>-</td><td>S156</td><td>-</td><td>-</td><td>-</td><td>S150</td><td>-</td><td>-</td><td>S148</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S152</td><td>Radio</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S162</td><td>S154</td><td>S12</td><td>S132</td><td>S147</td><td>-</td><td>-</td><td>-</td><td>S153</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S153</td><td>Radio</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S163</td><td>S154</td><td>S13</td><td>S133</td><td>S148</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S152</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S154</td><td>Radio</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S164</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S152</td><td>S155</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S155</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S165</td><td>-</td><td>S15</td><td>S135</td><td>S150</td><td>-</td><td>-</td><td>-</td><td>S156</td><td>-</td><td>-</td><td>-</td><td>S152</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S156</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S166</td><td>-</td><td>S16</td><td>S136</td><td>S151</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S155</td><td>-</td><td>-</td><td>S153</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S157</td><td>MP(BTA)</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S159</td><td>S17</td><td>-</td><td>-</td><td>S162</td><td>-</td><td>-</td><td>S158</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S158</td><td>MP(BTA)</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S159</td><td>S18</td><td>-</td><td>-</td><td>S163</td><td>-</td><td>-</td><td>-</td><td>S157</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S159</td><td>MP(BTA)</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S157</td><td>S160</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S160</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S165</td><td>-</td><td>-</td><td>S161</td><td>-</td><td>-</td><td>-</td><td>S157</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S161</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S166</td><td>-</td><td>-</td><td>-</td><td>S160</td><td>-</td><td>-</td><td>S158</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S162</td><td>MP(BTA)</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S164</td><td>S17</td><td>-</td><td>S157</td><td>-</td><td>-</td><td>-</td><td>S163</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S163</td><td>MP(BTA)</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S164</td><td>S18</td><td>-</td><td>S158</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S162</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S164</td><td>MP(BTA)</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S162</td><td>S165</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S165</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S160</td><td>-</td><td>-</td><td>-</td><td>S166</td><td>-</td><td>-</td><td>-</td><td>S162</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S166</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S161</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S165</td><td>-</td><td>-</td><td>S163</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S167</td><td>HVAC</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S172</td><td>S169</td><td>S7</td><td>-</td><td>-</td><td>S182</td><td>-</td><td>-</td><td>S168</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S168</td><td>HVAC</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S173</td><td>S169</td><td>S8</td><td>-</td><td>-</td><td>S183</td><td>-</td><td>-</td><td>-</td><td>S167</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S169</td><td>HVAC</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S174</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S167</td><td>S170</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S170</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S175</td><td>-</td><td>S10</td><td>-</td><td>-</td><td>S183</td><td>-</td><td>-</td><td>S171</td><td>-</td><td>-</td><td>-</td><td>S167</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S171</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S176</td><td>-</td><td>S11</td><td>-</td><td>-</td><td>S183</td><td>-</td><td>-</td><td>-</td><td>S170</td><td>-</td><td>-</td><td>S168</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S172</td><td>HVAC</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S174</td><td>S17</td><td>-</td><td>-</td><td>S192</td><td>-</td><td>-</td><td>S173</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S173</td><td>HVAC</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S174</td><td>S18</td><td>-</td><td>-</td><td>S193</td><td>-</td><td>-</td><td>-</td><td>S172</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S174</td><td>HVAC</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S172</td><td>S175</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S175</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>-</td><td>S176</td><td>-</td><td>-</td><td>-</td><td>S172</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S176</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>-</td><td>-</td><td>S175</td><td>-</td><td>-</td><td>S173</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S177</td><td>HVAC</td><td>Navi</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>S179</td><td>S2</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S178</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S178</td><td>HVAC</td><td>Navi</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S193</td><td>S179</td><td>S3</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S177</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S179</td><td>HVAC</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S177</td><td>S180</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S180</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>S20</td><td>S170</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S181</td><td>-</td><td>-</td><td>-</td><td>S177</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S181</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>S21</td><td>S171</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S180</td><td>-</td><td>-</td><td>S178</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S182</td><td>HVAC</td><td>Navi</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>S184</td><td>S7</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S183</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S183</td><td>HVAC</td><td>Navi</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S193</td><td>S184</td><td>S8</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S182</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S184</td><td>HVAC</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S182</td><td>S185</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S185</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>S10</td><td>S170</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S186</td><td>-</td><td>-</td><td>-</td><td>S182</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S186</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>S11</td><td>S171</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S185</td><td>-</td><td>-</td><td>S183</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S187</td><td>HVAC</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>S189</td><td>S12</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S188</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S188</td><td>HVAC</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S193</td><td>S189</td><td>S13</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S187</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S189</td><td>HVAC</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S187</td><td>S190</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S190</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>S15</td><td>S170</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S191</td><td>-</td><td>-</td><td>-</td><td>S187</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S191</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>S16</td><td>S171</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S190</td><td>-</td><td>-</td><td>S188</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S192</td><td>HVAC</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>S17</td><td>S172</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S193</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S193</td><td>HVAC</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>S18</td><td>S173</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S194</td><td>HVAC</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>S195</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S195</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S175</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>-</td><td>-</td><td>S192</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S196</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S176</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>-</td><td>S193</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S197</td><td>Phone</td><td>MP</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S202</td><td>S199</td><td>S7</td><td>-</td><td>S212</td><td>S232</td><td>-</td><td>-</td><td>S198</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S198</td><td>Phone</td><td>MP</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S203</td><td>S199</td><td>S8</td><td>-</td><td>S213</td><td>S233</td><td>-</td><td>-</td><td>-</td><td>S197</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S199</td><td>Phone</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S204</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S197</td><td>S200</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S200</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S205</td><td>-</td><td>S10</td><td>-</td><td>S215</td><td>S235</td><td>-</td><td>-</td><td>S201</td><td>-</td><td>-</td><td>-</td><td>S197</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S201</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S206</td><td>-</td><td>S11</td><td>-</td><td>S216</td><td>S236</td><td>-</td><td>-</td><td>-</td><td>S200</td><td>-</td><td>-</td><td>S198</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S202</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S204</td><td>S17</td><td>-</td><td>S222</td><td>S242</td><td>-</td><td>-</td><td>S203</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S203</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S204</td><td>S18</td><td>-</td><td>S223</td><td>S243</td><td>-</td><td>-</td><td>-</td><td>S202</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S204</td><td>Phone</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S202</td><td>S205</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S205</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S225</td><td>S245</td><td>-</td><td>-</td><td>S206</td><td>-</td><td>-</td><td>-</td><td>S202</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S206</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S226</td><td>S246</td><td>-</td><td>-</td><td>-</td><td>S205</td><td>-</td><td>-</td><td>S203</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S207</td><td>Phone</td><td>HVAC</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>S209</td><td>S2</td><td>S197</td><td>-</td><td>S227</td><td>-</td><td>-</td><td>S208</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S208</td><td>Phone</td><td>HVAC</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S223</td><td>S209</td><td>S3</td><td>S198</td><td>-</td><td>S228</td><td>-</td><td>-</td><td>-</td><td>S207</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S209</td><td>Phone</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S207</td><td>S210</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S210</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S225</td><td>-</td><td>S20</td><td>S200</td><td>-</td><td>S230</td><td>-</td><td>-</td><td>S211</td><td>-</td><td>-</td><td>-</td><td>S207</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S211</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S226</td><td>-</td><td>S21</td><td>S201</td><td>-</td><td>S231</td><td>-</td><td>-</td><td>-</td><td>S210</td><td>-</td><td>-</td><td>S208</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S212</td><td>Phone</td><td>HVAC</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>S214</td><td>S7</td><td>S197</td><td>-</td><td>S232</td><td>-</td><td>-</td><td>S213</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S213</td><td>Phone</td><td>HVAC</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S223</td><td>S214</td><td>S8</td><td>S198</td><td>-</td><td>S233</td><td>-</td><td>-</td><td>-</td><td>S212</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S214</td><td>Phone</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S212</td><td>S215</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S215</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S225</td><td>-</td><td>S10</td><td>S200</td><td>-</td><td>S235</td><td>-</td><td>-</td><td>S216</td><td>-</td><td>-</td><td>-</td><td>S212</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S216</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S226</td><td>-</td><td>S11</td><td>S201</td><td>-</td><td>S236</td><td>-</td><td>-</td><td>-</td><td>S215</td><td>-</td><td>-</td><td>S213</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S217</td><td>Phone</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>S219</td><td>S12</td><td>S197</td><td>-</td><td>S237</td><td>-</td><td>-</td><td>S218</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S218</td><td>Phone</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S223</td><td>S219</td><td>S13</td><td>S198</td><td>-</td><td>S238</td><td>-</td><td>-</td><td>-</td><td>S217</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S219</td><td>Phone</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S217</td><td>S220</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S220</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S225</td><td>-</td><td>S15</td><td>S200</td><td>-</td><td>S240</td><td>-</td><td>-</td><td>S221</td><td>-</td><td>-</td><td>-</td><td>S217</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S221</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S226</td><td>-</td><td>S16</td><td>S201</td><td>-</td><td>S241</td><td>-</td><td>-</td><td>-</td><td>S220</td><td>-</td><td>-</td><td>S218</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S222</td><td>Phone</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>S17</td><td>S202</td><td>-</td><td>S242</td><td>-</td><td>-</td><td>S223</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S223</td><td>Phone</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>S18</td><td>S203</td><td>-</td><td>S243</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S224</td><td>Phone</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>S225</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S225</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S205</td><td>-</td><td>S245</td><td>-</td><td>-</td><td>S226</td><td>-</td><td>-</td><td>-</td><td>S222</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S226</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S206</td><td>-</td><td>S246</td><td>-</td><td>-</td><td>-</td><td>S225</td><td>-</td><td>-</td><td>S223</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S227</td><td>Phone</td><td>Navi</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>S229</td><td>S2</td><td>S197</td><td>S207</td><td>-</td><td>-</td><td>-</td><td>S228</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S228</td><td>Phone</td><td>Navi</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S243</td><td>S229</td><td>S3</td><td>S198</td><td>S208</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S227</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S229</td><td>Phone</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S227</td><td>S230</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S230</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S245</td><td>-</td><td>S20</td><td>S200</td><td>S210</td><td>-</td><td>-</td><td>-</td><td>S231</td><td>-</td><td>-</td><td>-</td><td>S227</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S231</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S246</td><td>-</td><td>S21</td><td>S201</td><td>S211</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S230</td><td>-</td><td>-</td><td>S228</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S232</td><td>Phone</td><td>Navi</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>S234</td><td>S7</td><td>S197</td><td>S212</td><td>-</td><td>-</td><td>-</td><td>S233</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S233</td><td>Phone</td><td>Navi</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S243</td><td>S234</td><td>S8</td><td>S198</td><td>S213</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S232</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S234</td><td>Phone</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S232</td><td>S235</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S235</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S245</td><td>-</td><td>S10</td><td>S200</td><td>S215</td><td>-</td><td>-</td><td>-</td><td>S236</td><td>-</td><td>-</td><td>-</td><td>S232</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S236</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S246</td><td>-</td><td>S11</td><td>S201</td><td>S216</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S235</td><td>-</td><td>-</td><td>S233</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S237</td><td>Phone</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>S239</td><td>S12</td><td>S197</td><td>S217</td><td>-</td><td>-</td><td>-</td><td>S238</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S238</td><td>Phone</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S243</td><td>S239</td><td>S13</td><td>S198</td><td>S218</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S237</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S239</td><td>Phone</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S237</td><td>S240</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S240</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S245</td><td>-</td><td>S15</td><td>S200</td><td>S220</td><td>-</td><td>-</td><td>-</td><td>S241</td><td>-</td><td>-</td><td>-</td><td>S237</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S241</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S246</td><td>-</td><td>S16</td><td>S201</td><td>S221</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S240</td><td>-</td><td>-</td><td>S238</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S242</td><td>Phone</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>S17</td><td>S202</td><td>S222</td><td>-</td><td>-</td><td>-</td><td>S243</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S243</td><td>Phone</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>S18</td><td>S203</td><td>S223</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S244</td><td>Phone</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>S245</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S245</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S205</td><td>S225</td><td>-</td><td>-</td><td>-</td><td>S246</td><td>-</td><td>-</td><td>-</td><td>S242</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S246</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S206</td><td>S226</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S245</td><td>-</td><td>-</td><td>S243</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S247</td><td>Navi</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S252</td><td>S249</td><td>S7</td><td>-</td><td>S262</td><td>-</td><td>-</td><td>-</td><td>S248</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S248</td><td>Navi</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S253</td><td>S249</td><td>S8</td><td>-</td><td>S263</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S247</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S249</td><td>Navi</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S254</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S247</td><td>S248</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S250</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S255</td><td>-</td><td>S10</td><td>-</td><td>S265</td><td>-</td><td>-</td><td>-</td><td>S251</td><td>-</td><td>-</td><td>-</td><td>S247</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S251</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S256</td><td>-</td><td>S11</td><td>-</td><td>S266</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S250</td><td>-</td><td>-</td><td>S248</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S252</td><td>Navi</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S254</td><td>S17</td><td>-</td><td>S272</td><td>-</td><td>-</td><td>-</td><td>S253</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S253</td><td>Navi</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S254</td><td>S18</td><td>-</td><td>S273</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S252</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S254</td><td>Navi</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S252</td><td>S253</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S255</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S275</td><td>-</td><td>-</td><td>-</td><td>S256</td><td>-</td><td>-</td><td>-</td><td>S252</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S256</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S276</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S255</td><td>-</td><td>-</td><td>S253</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S257</td><td>Navi</td><td>HVAC</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>S259</td><td>S2</td><td>S247</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S258</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S258</td><td>Navi</td><td>HVAC</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S273</td><td>S259</td><td>S3</td><td>S248</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S257</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S259</td><td>Navi</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S257</td><td>S260</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S260</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S275</td><td>-</td><td>S20</td><td>S250</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S261</td><td>-</td><td>-</td><td>-</td><td>S257</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S261</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S276</td><td>-</td><td>S21</td><td>S251</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S260</td><td>-</td><td>-</td><td>S258</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S262</td><td>Navi</td><td>HVAC</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>S264</td><td>S7</td><td>S247</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S263</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S263</td><td>Navi</td><td>HVAC</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S273</td><td>S264</td><td>S8</td><td>S248</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S262</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S264</td><td>Navi</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S262</td><td>S265</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S265</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S275</td><td>-</td><td>S10</td><td>S250</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S266</td><td>-</td><td>-</td><td>-</td><td>S262</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S266</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S276</td><td>-</td><td>S11</td><td>S251</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S265</td><td>-</td><td>-</td><td>S263</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S267</td><td>Navi</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>S269</td><td>S12</td><td>S247</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S268</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S268</td><td>Navi</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S273</td><td>S269</td><td>S13</td><td>S248</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S267</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S269</td><td>Navi</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S267</td><td>S270</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S270</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S275</td><td>-</td><td>S15</td><td>S250</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S271</td><td>-</td><td>-</td><td>-</td><td>S267</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S271</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S276</td><td>-</td><td>S16</td><td>S251</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S270</td><td>-</td><td>-</td><td>S268</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S272</td><td>Navi</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>S17</td><td>S252</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S273</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S273</td><td>Navi</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>S18</td><td>S253</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S274</td><td>Navi</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>S275</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S275</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S255</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S276</td><td>-</td><td>-</td><td>-</td><td>S272</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S276</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S256</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S275</td><td>-</td><td>-</td><td>S273</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S277</td><td>Other</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S282</td><td>S279</td><td>S7</td><td>-</td><td>S292</td><td>S312</td><td>-</td><td>-</td><td>S278</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S278</td><td>Other</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S283</td><td>S279</td><td>S8</td><td>-</td><td>S293</td><td>S313</td><td>-</td><td>-</td><td>-</td><td>S277</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S279</td><td>Other</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S284</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S277</td><td>S280</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S280</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S285</td><td>-</td><td>S10</td><td>-</td><td>S295</td><td>S317</td><td>-</td><td>-</td><td>S281</td><td>-</td><td>-</td><td>-</td><td>S277</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S281</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S286</td><td>-</td><td>S11</td><td>-</td><td>S296</td><td>S318</td><td>-</td><td>-</td><td>-</td><td>S280</td><td>-</td><td>-</td><td>S278</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S282</td><td>Other</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S284</td><td>S12</td><td>-</td><td>S302</td><td>S322</td><td>-</td><td>-</td><td>S283</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S283</td><td>Other</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S284</td><td>S13</td><td>-</td><td>S303</td><td>S323</td><td>-</td><td>-</td><td>-</td><td>S282</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S284</td><td>Other</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S282</td><td>S285</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S285</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S305</td><td>S325</td><td>-</td><td>-</td><td>S286</td><td>-</td><td>-</td><td>-</td><td>S282</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S286</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S306</td><td>S326</td><td>-</td><td>-</td><td>-</td><td>S285</td><td>-</td><td>-</td><td>S283</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S287</td><td>Other</td><td>HVAC</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>S289</td><td>S2</td><td>S277</td><td>-</td><td>S307</td><td>-</td><td>-</td><td>S288</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S288</td><td>Other</td><td>HVAC</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S303</td><td>S289</td><td>S3</td><td>S278</td><td>-</td><td>S308</td><td>-</td><td>-</td><td>-</td><td>S287</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S289</td><td>Other</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S287</td><td>S290</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S290</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S305</td><td>-</td><td>S20</td><td>S280</td><td>-</td><td>S310</td><td>-</td><td>-</td><td>S291</td><td>-</td><td>-</td><td>-</td><td>S287</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S291</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S306</td><td>-</td><td>S21</td><td>S281</td><td>-</td><td>S311</td><td>-</td><td>-</td><td>-</td><td>S290</td><td>-</td><td>-</td><td>S288</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S292</td><td>Other</td><td>HVAC</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>S294</td><td>S7</td><td>S277</td><td>-</td><td>S312</td><td>-</td><td>-</td><td>S293</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S293</td><td>Other</td><td>HVAC</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S303</td><td>S294</td><td>S8</td><td>S278</td><td>-</td><td>S313</td><td>-</td><td>-</td><td>-</td><td>S292</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S294</td><td>Other</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S292</td><td>S295</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S295</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S305</td><td>-</td><td>S10</td><td>S278</td><td>-</td><td>S315</td><td>-</td><td>-</td><td>S296</td><td>-</td><td>-</td><td>-</td><td>S292</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S296</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S306</td><td>-</td><td>S11</td><td>S278</td><td>-</td><td>S316</td><td>-</td><td>-</td><td>-</td><td>S295</td><td>-</td><td>-</td><td>S293</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S297</td><td>Other</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>S299</td><td>S12</td><td>S277</td><td>-</td><td>S317</td><td>-</td><td>-</td><td>S298</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S298</td><td>Other</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S303</td><td>S299</td><td>S13</td><td>S278</td><td>-</td><td>S318</td><td>-</td><td>-</td><td>-</td><td>S297</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S299</td><td>Other</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S297</td><td>S300</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S300</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S305</td><td>-</td><td>S15</td><td>S280</td><td>-</td><td>S320</td><td>-</td><td>-</td><td>S301</td><td>-</td><td>-</td><td>-</td><td>S297</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S301</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S306</td><td>-</td><td>S16</td><td>S281</td><td>-</td><td>S321</td><td>-</td><td>-</td><td>-</td><td>S300</td><td>-</td><td>-</td><td>S298</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S302</td><td>Other</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>S17</td><td>S282</td><td>-</td><td>S322</td><td>-</td><td>-</td><td>S303</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S303</td><td>Other</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>S18</td><td>S283</td><td>-</td><td>S323</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S304</td><td>Other</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>S305</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S305</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S285</td><td>-</td><td>S325</td><td>-</td><td>-</td><td>S306</td><td>-</td><td>-</td><td>-</td><td>S302</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S306</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S286</td><td>-</td><td>S326</td><td>-</td><td>-</td><td>-</td><td>S305</td><td>-</td><td>-</td><td>S303</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S307</td><td>Other</td><td>Navi</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>S309</td><td>S2</td><td>S287</td><td>S287</td><td>-</td><td>-</td><td>-</td><td>S308</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S308</td><td>Other</td><td>Navi</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S323</td><td>S309</td><td>S3</td><td>S288</td><td>S288</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S307</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S309</td><td>Other</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S307</td><td>S310</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S310</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S325</td><td>-</td><td>S20</td><td>S290</td><td>S290</td><td>-</td><td>-</td><td>-</td><td>S311</td><td>-</td><td>-</td><td>-</td><td>S307</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S311</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S326</td><td>-</td><td>S21</td><td>S291</td><td>S291</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S310</td><td>-</td><td>-</td><td>S308</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S312</td><td>Other</td><td>Navi</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>S314</td><td>S7</td><td>S292</td><td>S292</td><td>-</td><td>-</td><td>-</td><td>S313</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S313</td><td>Other</td><td>Navi</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S323</td><td>S314</td><td>S8</td><td>S293</td><td>S293</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S312</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S314</td><td>Other</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S312</td><td>S315</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S315</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S325</td><td>-</td><td>S10</td><td>S295</td><td>S295</td><td>-</td><td>-</td><td>-</td><td>S316</td><td>-</td><td>-</td><td>-</td><td>S312</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S316</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S326</td><td>-</td><td>S11</td><td>S296</td><td>S296</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S315</td><td>-</td><td>-</td><td>S313</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S317</td><td>Other</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>S319</td><td>S12</td><td>S297</td><td>S297</td><td>-</td><td>-</td><td>-</td><td>S318</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S318</td><td>Other</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S323</td><td>S319</td><td>S13</td><td>S298</td><td>S298</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S317</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S319</td><td>Other</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S317</td><td>S320</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S320</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S325</td><td>-</td><td>S15</td><td>S300</td><td>S300</td><td>-</td><td>-</td><td>-</td><td>S321</td><td>-</td><td>-</td><td>-</td><td>S317</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S321</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S326</td><td>-</td><td>S16</td><td>S301</td><td>S301</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S320</td><td>-</td><td>-</td><td>S318</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S322</td><td>Other</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>S17</td><td>S282</td><td>S302</td><td>-</td><td>-</td><td>-</td><td>S323</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S323</td><td>Other</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>S18</td><td>S283</td><td>S303</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S324</td><td>Other</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>S325</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S325</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S285</td><td>S305</td><td>-</td><td>-</td><td>-</td><td>S326</td><td>-</td><td>-</td><td>-</td><td>S322</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S326</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S286</td><td>S306</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S325</td><td>-</td><td>-</td><td>S323</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr bgcolor="gray"><td>S327</td><td>any</td><td>any</td><td>any</td><td>any</td><td>Warn</td><td>any</td><td>any</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S(previous)</td></tr>
+</table>
diff --git a/doc/api-ref/html/annotated.html b/doc/api-ref/html/annotated.html
new file mode 100644
index 0000000..c8aeca2
--- /dev/null
+++ b/doc/api-ref/html/annotated.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('annotated.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Data Structures</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structevent.html" target="_self">event</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_lib_soundmanager.html" target="_self">LibSoundmanager</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/annotated_dup.js b/doc/api-ref/html/annotated_dup.js
new file mode 100644
index 0000000..9ab7e04
--- /dev/null
+++ b/doc/api-ref/html/annotated_dup.js
@@ -0,0 +1,5 @@
+var annotated_dup =
+[
+ [ "event", "structevent.html", "structevent" ],
+ [ "LibSoundmanager", "class_lib_soundmanager.html", "class_lib_soundmanager" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/bc_s.png b/doc/api-ref/html/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/doc/api-ref/html/bc_s.png
Binary files differ
diff --git a/doc/api-ref/html/bdwn.png b/doc/api-ref/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/doc/api-ref/html/bdwn.png
Binary files differ
diff --git a/doc/api-ref/html/class_lib_soundmanager.html b/doc/api-ref/html/class_lib_soundmanager.html
new file mode 100644
index 0000000..013af0d
--- /dev/null
+++ b/doc/api-ref/html/class_lib_soundmanager.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: LibSoundmanager Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('class_lib_soundmanager.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> </div>
+ <div class="headertitle">
+<div class="title">LibSoundmanager Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a289a9d6ff8be95ae78660f239d962d79"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79">LibSoundmanager</a> (const int port, const std::string &amp;token)</td></tr>
+<tr class="separator:a289a9d6ff8be95ae78660f239d962d79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf861908e3d6d85d2b3c08683b08f934"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">~LibSoundmanager</a> ()</td></tr>
+<tr class="separator:abf861908e3d6d85d2b3c08683b08f934"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a560edf9ae3b1e367ad4cbb31c7021d74"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">register_callback</a> (void(*event_cb)(const std::string &amp;<a class="el" href="structevent.html">event</a>, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents))</td></tr>
+<tr class="separator:a560edf9ae3b1e367ad4cbb31c7021d74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe71d3531e7888f47185a601b284e729"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">run_eventloop</a> ()</td></tr>
+<tr class="separator:abe71d3531e7888f47185a601b284e729"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fe952a4dabbab6126cc23e36c79c773"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">call</a> (const std::string &amp;verb, struct json_object *arg)</td></tr>
+<tr class="separator:a1fe952a4dabbab6126cc23e36c79c773"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5b83ce661b1d785de2518ca10113956"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">call_sync</a> (const std::string &amp;verb, struct json_object *arg, struct json_object *ret)</td></tr>
+<tr class="separator:ae5b83ce661b1d785de2518ca10113956"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cd7c5470cb135f9b1aa56d790c7e91e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">subscribe</a> (const std::string &amp;event_name)</td></tr>
+<tr class="separator:a9cd7c5470cb135f9b1aa56d790c7e91e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21060844aa7efad6473b6104546afb06"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">unsubscribe</a> (const std::string &amp;event_name)</td></tr>
+<tr class="separator:a21060844aa7efad6473b6104546afb06"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71a8165cb15c7815aa95a8955f5cd7f6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">on_hangup</a> (void *closure, struct afb_wsj1 *wsj)</td></tr>
+<tr class="separator:a71a8165cb15c7815aa95a8955f5cd7f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ba2255cb1d29c77c4c6a2267949eda0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">on_call</a> (void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg)</td></tr>
+<tr class="separator:a3ba2255cb1d29c77c4c6a2267949eda0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86ef62e7847cd20e9cafbc1f6c017b3e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">on_event</a> (void *closure, const char *<a class="el" href="structevent.html">event</a>, struct afb_wsj1_msg *msg)</td></tr>
+<tr class="separator:a86ef62e7847cd20e9cafbc1f6c017b3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69b4f10e509605a570cc52c795bc9d51"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">on_reply</a> (void *closure, struct afb_wsj1_msg *msg)</td></tr>
+<tr class="separator:a69b4f10e509605a570cc52c795bc9d51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8hpp_source.html#l00062">62</a> of file <a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a289a9d6ff8be95ae78660f239d962d79"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a289a9d6ff8be95ae78660f239d962d79">&#9670;&nbsp;</a></span>LibSoundmanager()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LibSoundmanager::LibSoundmanager </td>
+ <td>(</td>
+ <td class="paramtype">const int&#160;</td>
+ <td class="paramname"><em>port</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>token</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abf861908e3d6d85d2b3c08683b08f934"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf861908e3d6d85d2b3c08683b08f934">&#9670;&nbsp;</a></span>~LibSoundmanager()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LibSoundmanager::~LibSoundmanager </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00093">93</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a1fe952a4dabbab6126cc23e36c79c773"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fe952a4dabbab6126cc23e36c79c773">&#9670;&nbsp;</a></span>call()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::call </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>verb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct json_object *&#160;</td>
+ <td class="paramname"><em>arg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>This function calls the API of Audio Manager via WebSocket</p>
+<h4>Parameters</h4>
+<ul>
+<li>verb [in] : This argument should be specified to the API name (e.g. "connect")</li>
+<li>arg [in] : This argument should be specified to the argument of API. And this argument expects JSON object</li>
+</ul>
+<h4>Rreturn</h4>
+<ul>
+<li>Returns 0 on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+<p>To call Audio Manager's APIs, the application should set its function name, arguments to JSON format. </p>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00217">217</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ae5b83ce661b1d785de2518ca10113956"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae5b83ce661b1d785de2518ca10113956">&#9670;&nbsp;</a></span>call_sync()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::call_sync </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>verb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct json_object *&#160;</td>
+ <td class="paramname"><em>arg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct json_object *&#160;</td>
+ <td class="paramname"><em>ret</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00236">236</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a3ba2255cb1d29c77c4c6a2267949eda0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ba2255cb1d29c77c4c6a2267949eda0">&#9670;&nbsp;</a></span>on_call()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::on_call </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>api</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>verb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct afb_wsj1_msg *&#160;</td>
+ <td class="paramname"><em>msg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00347">347</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a86ef62e7847cd20e9cafbc1f6c017b3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86ef62e7847cd20e9cafbc1f6c017b3e">&#9670;&nbsp;</a></span>on_event()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::on_event </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>event</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct afb_wsj1_msg *&#160;</td>
+ <td class="paramname"><em>msg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00358">358</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a71a8165cb15c7815aa95a8955f5cd7f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71a8165cb15c7815aa95a8955f5cd7f6">&#9670;&nbsp;</a></span>on_hangup()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::on_hangup </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct afb_wsj1 *&#160;</td>
+ <td class="paramname"><em>wsj</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00342">342</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a69b4f10e509605a570cc52c795bc9d51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69b4f10e509605a570cc52c795bc9d51">&#9670;&nbsp;</a></span>on_reply()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::on_reply </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct afb_wsj1_msg *&#160;</td>
+ <td class="paramname"><em>msg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00369">369</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a560edf9ae3b1e367ad4cbb31c7021d74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a560edf9ae3b1e367ad4cbb31c7021d74">&#9670;&nbsp;</a></span>register_callback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::register_callback </td>
+ <td>(</td>
+ <td class="paramtype">void(*)(const std::string &amp;<a class="el" href="structevent.html">event</a>, struct json_object *event_contents)&#160;</td>
+ <td class="paramname"><em>event_cb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void(*)(struct json_object *reply_contents)&#160;</td>
+ <td class="paramname"><em>reply_cb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>This function register callback function for reply/event message from sound manager</p>
+<h4>Parameters</h4>
+<ul>
+<li>event_cb [in] : This argument should be specified to the callback for subscribed event</li>
+<li>reply_cb [in] : This argument should be specified to the reply callback for call function</li>
+</ul>
+<h4>Rreturn</h4>
+<ul>
+<li>Returns 0 on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+<p>Event callback is invoked by sound manager for event you subscribed. If you would like to get event, please call subscribe function before/after this function </p>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00119">119</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="abe71d3531e7888f47185a601b284e729"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe71d3531e7888f47185a601b284e729">&#9670;&nbsp;</a></span>run_eventloop()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::run_eventloop </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>This function start receiving the reply/event message from sound manager</p>
+<h4>Parameters</h4>
+<p>Nothing </p><h4>Rreturn</h4>
+<ul>
+<li>Returns thread_id on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00182">182</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a9cd7c5470cb135f9b1aa56d790c7e91e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cd7c5470cb135f9b1aa56d790c7e91e">&#9670;&nbsp;</a></span>subscribe()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::subscribe </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>event_name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Register callback function for each event</p>
+<h4>Parameters</h4>
+<ul>
+<li>event_name [in] : This argument should be specified to the event name</li>
+</ul>
+<h4>Rreturn</h4>
+<ul>
+<li>Returns 0 on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+<p>This function enables to get an event to your callback function. Regarding the list of event name, please refer to CommandSender API and RountingSender API. </p>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00255">255</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a21060844aa7efad6473b6104546afb06"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21060844aa7efad6473b6104546afb06">&#9670;&nbsp;</a></span>unsubscribe()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::unsubscribe </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>event_name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Unregister callback function for each event</p>
+<h4>Parameters</h4>
+<ul>
+<li>event_name [in] : This argument should be specified to the event name</li>
+</ul>
+<h4>Rreturn</h4>
+<ul>
+<li>Returns 0 on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+<p>This function disables to get an event to your callback function. </p>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00284">284</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>SoundManagerBinding/include/libsoundmanager/<a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a></li>
+<li>SoundManagerBinding/libsoundmanager/<a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/class_lib_soundmanager.js b/doc/api-ref/html/class_lib_soundmanager.js
new file mode 100644
index 0000000..ed52e34
--- /dev/null
+++ b/doc/api-ref/html/class_lib_soundmanager.js
@@ -0,0 +1,15 @@
+var class_lib_soundmanager =
+[
+ [ "LibSoundmanager", "class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79", null ],
+ [ "~LibSoundmanager", "class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934", null ],
+ [ "call", "class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773", null ],
+ [ "call_sync", "class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956", null ],
+ [ "on_call", "class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0", null ],
+ [ "on_event", "class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e", null ],
+ [ "on_hangup", "class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6", null ],
+ [ "on_reply", "class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51", null ],
+ [ "register_callback", "class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74", null ],
+ [ "run_eventloop", "class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729", null ],
+ [ "subscribe", "class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e", null ],
+ [ "unsubscribe", "class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/classes.html b/doc/api-ref/html/classes.html
new file mode 100644
index 0000000..ccaae38
--- /dev/null
+++ b/doc/api-ref/html/classes.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Structure Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('classes.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Data Structure Index</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_l">l</a></div>
+<table class="classindex">
+<tr><td rowspan="2" valign="bottom"><a name="letter_e"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;e&#160;&#160;</div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_l"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;l&#160;&#160;</div></td></tr></table>
+</td><td></td></tr>
+<tr><td></td></tr>
+<tr><td valign="top"><a class="el" href="structevent.html">event</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_l">l</a></div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/closed.png b/doc/api-ref/html/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/doc/api-ref/html/closed.png
Binary files differ
diff --git a/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html b/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html
new file mode 100644
index 0000000..b3d3d7f
--- /dev/null
+++ b/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/include/libsoundmanager Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">libsoundmanager Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:libsoundmanager_8hpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a> <a href="libsoundmanager_8hpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></li><li class="navelem"><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html">libsoundmanager</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js b/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js
new file mode 100644
index 0000000..47bb19a
--- /dev/null
+++ b/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js
@@ -0,0 +1,4 @@
+var dir_4ed4f07a8451d34bdd1d92ed62b81ed4 =
+[
+ [ "libsoundmanager.hpp", "libsoundmanager_8hpp.html", "libsoundmanager_8hpp" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.html b/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.html
new file mode 100644
index 0000000..9af5eb6
--- /dev/null
+++ b/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_574c53d22ed4def281d320d129dd43c9.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">libsoundmanager Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:libsoundmanager_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8cpp.html">libsoundmanager.cpp</a> <a href="libsoundmanager_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:test_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="test_8cpp.html">test.cpp</a> <a href="test_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.js b/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.js
new file mode 100644
index 0000000..2b5132f
--- /dev/null
+++ b/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.js
@@ -0,0 +1,5 @@
+var dir_574c53d22ed4def281d320d129dd43c9 =
+[
+ [ "libsoundmanager.cpp", "libsoundmanager_8cpp.html", "libsoundmanager_8cpp" ],
+ [ "test.cpp", "test_8cpp.html", "test_8cpp" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.html b/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.html
new file mode 100644
index 0000000..72d6a35
--- /dev/null
+++ b/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/soundmanager_binging Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_85932083476b47061c69d172796990a3.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">soundmanager_binging Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:soundmanager_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html">soundmanager.c</a> <a href="soundmanager_8c_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_85932083476b47061c69d172796990a3.html">soundmanager_binging</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.js b/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.js
new file mode 100644
index 0000000..1e22727
--- /dev/null
+++ b/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.js
@@ -0,0 +1,4 @@
+var dir_85932083476b47061c69d172796990a3 =
+[
+ [ "soundmanager.c", "soundmanager_8c.html", "soundmanager_8c" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.html b/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.html
new file mode 100644
index 0000000..cd5167f
--- /dev/null
+++ b/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_b967abc00200c877344b4504e6cbcf3f.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">SoundManagerBinding Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_c2dc0533631c44dc5d574e7be055c656"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_574c53d22ed4def281d320d129dd43c9"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_85932083476b47061c69d172796990a3"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_85932083476b47061c69d172796990a3.html">soundmanager_binging</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.js b/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.js
new file mode 100644
index 0000000..f0a5be1
--- /dev/null
+++ b/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.js
@@ -0,0 +1,6 @@
+var dir_b967abc00200c877344b4504e6cbcf3f =
+[
+ [ "include", "dir_c2dc0533631c44dc5d574e7be055c656.html", "dir_c2dc0533631c44dc5d574e7be055c656" ],
+ [ "libsoundmanager", "dir_574c53d22ed4def281d320d129dd43c9.html", "dir_574c53d22ed4def281d320d129dd43c9" ],
+ [ "soundmanager_binging", "dir_85932083476b47061c69d172796990a3.html", "dir_85932083476b47061c69d172796990a3" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.html b/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.html
new file mode 100644
index 0000000..6131795
--- /dev/null
+++ b/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/include Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_c2dc0533631c44dc5d574e7be055c656.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">include Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_4ed4f07a8451d34bdd1d92ed62b81ed4"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html">libsoundmanager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.js b/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.js
new file mode 100644
index 0000000..07c80e4
--- /dev/null
+++ b/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.js
@@ -0,0 +1,4 @@
+var dir_c2dc0533631c44dc5d574e7be055c656 =
+[
+ [ "libsoundmanager", "dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html", "dir_4ed4f07a8451d34bdd1d92ed62b81ed4" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/doc.png b/doc/api-ref/html/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/doc/api-ref/html/doc.png
Binary files differ
diff --git a/doc/api-ref/html/doxygen.css b/doc/api-ref/html/doxygen.css
new file mode 100644
index 0000000..4f1ab91
--- /dev/null
+++ b/doc/api-ref/html/doxygen.css
@@ -0,0 +1,1596 @@
+/* The standard CSS for doxygen 1.8.13 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+div.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 0px;
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line:after {
+ content:"\000A";
+ white-space: pre;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+.lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+div.ah, span.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+ list-style: none;
+ padding-left: 0;
+}
+
+div.classindex span.ai {
+ display: inline-block;
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+ padding: 8px;
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ margin-bottom: -1px;
+ background-image: url('nav_f.png');
+ background-repeat: repeat-x;
+ background-color: #E2E8F2;
+ line-height: 1.25;
+ font-weight: 300;
+ float:left;
+}
+
+.permalink
+{
+ font-size: 65%;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: 400;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-color: #DFE5F1;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+ font-family: "courier new",courier,monospace;
+ font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #9CAFD4;
+ border-bottom: 1px solid #9CAFD4;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+.arrow {
+ color: #9CAFD4;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ font-size: 80%;
+ display: inline-block;
+ width: 16px;
+ height: 22px;
+}
+
+.icon {
+ font-family: Arial, Helvetica;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ width: 16px;
+ display: inline-block;
+ background-color: #728DC1;
+ color: white;
+ text-align: center;
+ border-radius: 4px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.icona {
+ width: 24px;
+ height: 22px;
+ display: inline-block;
+}
+
+.iconfopen {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderopen.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.iconfclosed {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderclosed.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.icondoc {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('doc.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+table.directory {
+ font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable caption {
+ caption-side: top;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ font-weight: 400;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+table.classindex
+{
+ margin: 10px;
+ white-space: nowrap;
+ margin-left: 3%;
+ margin-right: 3%;
+ width: 94%;
+ border: 0;
+ border-spacing: 0;
+ padding: 0;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+ padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.note
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #505050;
+}
+
+dl.todo
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectalign
+{
+ vertical-align: middle;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.plantumlgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 8px 10px 10px;
+ width: 200px;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ white-space: nowrap;
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
+/* @group Markdown */
+
+/*
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTableHead tr {
+}
+
+table.markdownTableBodyLeft td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter {
+ text-align: center
+}
+*/
+
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+ text-align: center
+}
+
+
+/* @end */
diff --git a/doc/api-ref/html/doxygen.png b/doc/api-ref/html/doxygen.png
new file mode 100644
index 0000000..3ff17d8
--- /dev/null
+++ b/doc/api-ref/html/doxygen.png
Binary files differ
diff --git a/doc/api-ref/html/dynsections.js b/doc/api-ref/html/dynsections.js
new file mode 100644
index 0000000..1e6bf07
--- /dev/null
+++ b/doc/api-ref/html/dynsections.js
@@ -0,0 +1,104 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+ a.html('&#9660;');
+ $(this).show();
+ } else if (l==level+1) {
+ i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+ a.html('&#9658;');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+
+function toggleFolder(id)
+{
+ // the clicked row
+ var currentRow = $('#row_'+id);
+
+ // all rows after the clicked row
+ var rows = currentRow.nextAll("tr");
+
+ var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+ // only match elements AFTER this one (can't hide elements before)
+ var childRows = rows.filter(function() { return this.id.match(re); });
+
+ // first row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ // replace down arrow by right arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ currentRowSpans.filter(".arrow").html('&#9658;');
+ rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+ } else { // we are SHOWING
+ // replace right arrow by down arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+ currentRowSpans.filter(".arrow").html('&#9660;');
+ // replace down arrows by right arrows for child rows
+ var childRowsSpans = childRows.find("span");
+ childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ childRowsSpans.filter(".arrow").html('&#9658;');
+ childRows.show(); //show all children
+ }
+ updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+
+
+$(document).ready(function() {
+ $('.code,.codeRef').each(function() {
+ $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
+ $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
+ });
+});
diff --git a/doc/api-ref/html/files.html b/doc/api-ref/html/files.html
new file mode 100644
index 0000000..cefc25d
--- /dev/null
+++ b/doc/api-ref/html/files.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('files.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">File List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html" target="_self">SoundManagerBinding</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span id="img_0_0_" class="iconfopen" onclick="toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html" target="_self">include</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span id="img_0_0_0_" class="iconfopen" onclick="toggleFolder('0_0_0_')">&#160;</span><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html" target="_self">libsoundmanager</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="libsoundmanager_8hpp_source.html"><span class="icondoc"></span></a><a class="el" href="libsoundmanager_8hpp.html" target="_self">libsoundmanager.hpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9660;</span><span id="img_0_1_" class="iconfopen" onclick="toggleFolder('0_1_')">&#160;</span><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html" target="_self">libsoundmanager</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="libsoundmanager_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="libsoundmanager_8cpp.html" target="_self">libsoundmanager.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="test_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="test_8cpp.html" target="_self">test.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9660;</span><span id="img_0_2_" class="iconfopen" onclick="toggleFolder('0_2_')">&#160;</span><a class="el" href="dir_85932083476b47061c69d172796990a3.html" target="_self">soundmanager_binging</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="soundmanager_8c_source.html"><span class="icondoc"></span></a><a class="el" href="soundmanager_8c.html" target="_self">soundmanager.c</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/files.js b/doc/api-ref/html/files.js
new file mode 100644
index 0000000..4d99c33
--- /dev/null
+++ b/doc/api-ref/html/files.js
@@ -0,0 +1,4 @@
+var files =
+[
+ [ "SoundManagerBinding", "dir_b967abc00200c877344b4504e6cbcf3f.html", "dir_b967abc00200c877344b4504e6cbcf3f" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/folderclosed.png b/doc/api-ref/html/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/doc/api-ref/html/folderclosed.png
Binary files differ
diff --git a/doc/api-ref/html/folderopen.png b/doc/api-ref/html/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/doc/api-ref/html/folderopen.png
Binary files differ
diff --git a/doc/api-ref/html/functions.html b/doc/api-ref/html/functions.html
new file mode 100644
index 0000000..5d6c445
--- /dev/null
+++ b/doc/api-ref/html/functions.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('functions.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div><ul>
+<li>call()
+: <a class="el" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager</a>
+</li>
+<li>call_sync()
+: <a class="el" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">LibSoundmanager</a>
+</li>
+<li>event
+: <a class="el" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a>
+</li>
+<li>LibSoundmanager()
+: <a class="el" href="class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79">LibSoundmanager</a>
+</li>
+<li>name
+: <a class="el" href="structevent.html#a723489bec273335d13513cd1040c0216">event</a>
+</li>
+<li>on_call()
+: <a class="el" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">LibSoundmanager</a>
+</li>
+<li>on_event()
+: <a class="el" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">LibSoundmanager</a>
+</li>
+<li>on_hangup()
+: <a class="el" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">LibSoundmanager</a>
+</li>
+<li>on_reply()
+: <a class="el" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">LibSoundmanager</a>
+</li>
+<li>register_callback()
+: <a class="el" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager</a>
+</li>
+<li>run_eventloop()
+: <a class="el" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">LibSoundmanager</a>
+</li>
+<li>subscribe()
+: <a class="el" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">LibSoundmanager</a>
+</li>
+<li>unsubscribe()
+: <a class="el" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">LibSoundmanager</a>
+</li>
+<li>~LibSoundmanager()
+: <a class="el" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">LibSoundmanager</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/functions_func.html b/doc/api-ref/html/functions_func.html
new file mode 100644
index 0000000..385add2
--- /dev/null
+++ b/doc/api-ref/html/functions_func.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Fields - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('functions_func.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>call()
+: <a class="el" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager</a>
+</li>
+<li>call_sync()
+: <a class="el" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">LibSoundmanager</a>
+</li>
+<li>LibSoundmanager()
+: <a class="el" href="class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79">LibSoundmanager</a>
+</li>
+<li>on_call()
+: <a class="el" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">LibSoundmanager</a>
+</li>
+<li>on_event()
+: <a class="el" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">LibSoundmanager</a>
+</li>
+<li>on_hangup()
+: <a class="el" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">LibSoundmanager</a>
+</li>
+<li>on_reply()
+: <a class="el" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">LibSoundmanager</a>
+</li>
+<li>register_callback()
+: <a class="el" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager</a>
+</li>
+<li>run_eventloop()
+: <a class="el" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">LibSoundmanager</a>
+</li>
+<li>subscribe()
+: <a class="el" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">LibSoundmanager</a>
+</li>
+<li>unsubscribe()
+: <a class="el" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">LibSoundmanager</a>
+</li>
+<li>~LibSoundmanager()
+: <a class="el" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">LibSoundmanager</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/functions_vars.html b/doc/api-ref/html/functions_vars.html
new file mode 100644
index 0000000..030f1ea
--- /dev/null
+++ b/doc/api-ref/html/functions_vars.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('functions_vars.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>event
+: <a class="el" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a>
+</li>
+<li>name
+: <a class="el" href="structevent.html#a723489bec273335d13513cd1040c0216">event</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/globals.html b/doc/api-ref/html/globals.html
new file mode 100644
index 0000000..ebb2eae
--- /dev/null
+++ b/doc/api-ref/html/globals.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('globals.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div><ul>
+<li>_GNU_SOURCE
+: <a class="el" href="soundmanager_8c.html#a369266c24eacffb87046522897a570d5">soundmanager.c</a>
+</li>
+<li>afbBindingV1Register()
+: <a class="el" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">soundmanager.c</a>
+</li>
+<li>afbBindingV1ServiceInit()
+: <a class="el" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">soundmanager.c</a>
+</li>
+<li>AM_CMD_PATH
+: <a class="el" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">soundmanager.c</a>
+</li>
+<li>AM_NAME
+: <a class="el" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">soundmanager.c</a>
+</li>
+<li>AM_ROUTE_PATH
+: <a class="el" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">soundmanager.c</a>
+</li>
+<li>api_list
+: <a class="el" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">libsoundmanager.hpp</a>
+</li>
+<li>COMMAND_EVENT_NUM
+: <a class="el" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">soundmanager.c</a>
+</li>
+<li>DLOG
+: <a class="el" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">libsoundmanager.cpp</a>
+</li>
+<li>ELOG
+: <a class="el" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">libsoundmanager.cpp</a>
+</li>
+<li>event_list
+: <a class="el" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">libsoundmanager.hpp</a>
+</li>
+<li>main()
+: <a class="el" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">test.cpp</a>
+</li>
+<li>MAX_LEN_STR
+: <a class="el" href="soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570">soundmanager.c</a>
+</li>
+<li>ROUTING_EVENT_NUM
+: <a class="el" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">soundmanager.c</a>
+</li>
+<li>sm
+: <a class="el" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">test.cpp</a>
+</li>
+<li>SOUND_MANAGER_NAME
+: <a class="el" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">soundmanager.c</a>
+</li>
+<li>SOUND_MANAGER_PATH
+: <a class="el" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">soundmanager.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/globals_defs.html b/doc/api-ref/html/globals_defs.html
new file mode 100644
index 0000000..e1d3a04
--- /dev/null
+++ b/doc/api-ref/html/globals_defs.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('globals_defs.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>_GNU_SOURCE
+: <a class="el" href="soundmanager_8c.html#a369266c24eacffb87046522897a570d5">soundmanager.c</a>
+</li>
+<li>AM_CMD_PATH
+: <a class="el" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">soundmanager.c</a>
+</li>
+<li>AM_NAME
+: <a class="el" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">soundmanager.c</a>
+</li>
+<li>AM_ROUTE_PATH
+: <a class="el" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">soundmanager.c</a>
+</li>
+<li>COMMAND_EVENT_NUM
+: <a class="el" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">soundmanager.c</a>
+</li>
+<li>DLOG
+: <a class="el" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">libsoundmanager.cpp</a>
+</li>
+<li>ELOG
+: <a class="el" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">libsoundmanager.cpp</a>
+</li>
+<li>MAX_LEN_STR
+: <a class="el" href="soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570">soundmanager.c</a>
+</li>
+<li>ROUTING_EVENT_NUM
+: <a class="el" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">soundmanager.c</a>
+</li>
+<li>SOUND_MANAGER_NAME
+: <a class="el" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">soundmanager.c</a>
+</li>
+<li>SOUND_MANAGER_PATH
+: <a class="el" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">soundmanager.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/globals_func.html b/doc/api-ref/html/globals_func.html
new file mode 100644
index 0000000..0c13d5f
--- /dev/null
+++ b/doc/api-ref/html/globals_func.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('globals_func.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>afbBindingV1Register()
+: <a class="el" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">soundmanager.c</a>
+</li>
+<li>afbBindingV1ServiceInit()
+: <a class="el" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">soundmanager.c</a>
+</li>
+<li>main()
+: <a class="el" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">test.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/globals_vars.html b/doc/api-ref/html/globals_vars.html
new file mode 100644
index 0000000..a74e481
--- /dev/null
+++ b/doc/api-ref/html/globals_vars.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('globals_vars.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>api_list
+: <a class="el" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">libsoundmanager.hpp</a>
+</li>
+<li>event_list
+: <a class="el" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">libsoundmanager.hpp</a>
+</li>
+<li>sm
+: <a class="el" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">test.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/index.html b/doc/api-ref/html/index.html
new file mode 100644
index 0000000..9319f4a
--- /dev/null
+++ b/doc/api-ref/html/index.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('index.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Sound Manager Documentation</div> </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/jquery.js b/doc/api-ref/html/jquery.js
new file mode 100644
index 0000000..f5343ed
--- /dev/null
+++ b/doc/api-ref/html/jquery.js
@@ -0,0 +1,87 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*!
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ */
+(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return}var d=b.ui.mouse.prototype,f=d._mouseInit,c=d._mouseDestroy,a;function e(h,i){if(h.originalEvent.touches.length>1){return}h.preventDefault();var j=h.originalEvent.changedTouches[0],g=document.createEvent("MouseEvents");g.initMouseEvent(i,true,true,window,1,j.screenX,j.screenY,j.clientX,j.clientY,false,false,false,false,0,null);h.target.dispatchEvent(g)}d._touchStart=function(h){var g=this;if(a||!g._mouseCapture(h.originalEvent.changedTouches[0])){return}a=true;g._touchMoved=false;e(h,"mouseover");e(h,"mousemove");e(h,"mousedown")};d._touchMove=function(g){if(!a){return}this._touchMoved=true;e(g,"mousemove")};d._touchEnd=function(g){if(!a){return}e(g,"mouseup");e(g,"mouseout");if(!this._touchMoved){e(g,"click")}a=false};d._mouseInit=function(){var g=this;g.element.bind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});f.call(g)};d._mouseDestroy=function(){var g=this;g.element.unbind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});c.call(g)}})(jQuery);/*!
+ * SmartMenus jQuery Plugin - v1.0.0 - January 27, 2016
+ * http://www.smartmenus.org/
+ *
+ * Copyright Vasil Dinkov, Vadikom Web Ltd.
+ * http://vadikom.com
+ *
+ * Licensed MIT
+ */
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a})); \ No newline at end of file
diff --git a/doc/api-ref/html/libsoundmanager_8cpp.html b/doc/api-ref/html/libsoundmanager_8cpp.html
new file mode 100644
index 0000000..06842ea
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8cpp.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager/libsoundmanager.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('libsoundmanager_8cpp.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> </div>
+ <div class="headertitle">
+<div class="title">libsoundmanager.cpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdarg.h&gt;</code><br />
+<code>#include &lt;sys/socket.h&gt;</code><br />
+<code>#include &lt;iostream&gt;</code><br />
+<code>#include &lt;algorithm&gt;</code><br />
+<code>#include &lt;thread&gt;</code><br />
+<code>#include &lt;errno.h&gt;</code><br />
+<code>#include &lt;<a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager/libsoundmanager.hpp</a>&gt;</code><br />
+</div>
+<p><a href="libsoundmanager_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a797aa3053bd6a29819d44f8fad8a5eca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(args, ...)&#160;&#160;&#160;_ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</td></tr>
+<tr class="separator:a797aa3053bd6a29819d44f8fad8a5eca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e42b2f5af2174dd24f958351becf63d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(args, ...)&#160;&#160;&#160;_DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</td></tr>
+<tr class="separator:a4e42b2f5af2174dd24f958351becf63d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a4e42b2f5af2174dd24f958351becf63d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e42b2f5af2174dd24f958351becf63d">&#9670;&nbsp;</a></span>DLOG</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DLOG</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">args, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;_DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00026">26</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a797aa3053bd6a29819d44f8fad8a5eca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a797aa3053bd6a29819d44f8fad8a5eca">&#9670;&nbsp;</a></span>ELOG</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ELOG</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">args, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;_ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00025">25</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="libsoundmanager_8cpp.html">libsoundmanager.cpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/libsoundmanager_8cpp.js b/doc/api-ref/html/libsoundmanager_8cpp.js
new file mode 100644
index 0000000..b599e84
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8cpp.js
@@ -0,0 +1,5 @@
+var libsoundmanager_8cpp =
+[
+ [ "DLOG", "libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d", null ],
+ [ "ELOG", "libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/libsoundmanager_8cpp_source.html b/doc/api-ref/html/libsoundmanager_8cpp_source.html
new file mode 100644
index 0000000..43e6d5d
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8cpp_source.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager/libsoundmanager.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('libsoundmanager_8cpp_source.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">libsoundmanager.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="libsoundmanager_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (c) 2017 TOYOTA MOTOR CORPORATION</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;stdarg.h&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;sys/socket.h&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="libsoundmanager_8hpp.html">libsoundmanager/libsoundmanager.hpp</a>&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca"> 25</a></span>&#160;<span class="preprocessor">#define ELOG(args,...) _ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d"> 26</a></span>&#160;<span class="preprocessor">#define DLOG(args,...) _DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _DLOG(<span class="keyword">const</span> <span class="keywordtype">char</span>* func, <span class="keyword">const</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* log, ...);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _ELOG(<span class="keyword">const</span> <span class="keywordtype">char</span>* func, <span class="keyword">const</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* log, ...);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> has_verb(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; verb);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> API[] = <span class="stringliteral">&quot;soundmanager&quot;</span>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _on_hangup_static(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1 *wsj)</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>*<span class="keyword">&gt;</span>(closure)-&gt;on_hangup(NULL,wsj);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;}</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _on_call_static(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *api, <span class="keyword">const</span> <span class="keywordtype">char</span> *verb, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">/* LibSoundmanager is not called from other process */</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _on_event_static(<span class="keywordtype">void</span>* closure, <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="structevent.html">event</a>, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>*<span class="keyword">&gt;</span>(closure)-&gt;on_event(NULL,event,msg);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _on_reply_static(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;{</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>*<span class="keyword">&gt;</span>(closure)-&gt;on_reply(NULL,msg); </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;LibSoundmanager::LibSoundmanager(<span class="keyword">const</span> <span class="keywordtype">int</span> port, <span class="keyword">const</span> <span class="keywordtype">string</span>&amp; token)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span>(port &gt; 0 &amp;&amp; token.size() &gt; 0)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; mport = port;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; mtoken = token;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;port and token should be &gt; 0, Initial port and token uses.&quot;</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; ret = initialize_websocket();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>(ret != 0 )</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to initialize websocket&quot;</span>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(<span class="stringliteral">&quot;Initialized&quot;</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934"> 93</a></span>&#160;<a class="code" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">LibSoundmanager::~LibSoundmanager</a>()</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span>(mploop)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; sd_event_unref(mploop);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span>(sp_websock != NULL)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; free(sp_websock);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74"> 119</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager::register_callback</a>(</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordtype">void</span> (*event_cb)(<span class="keyword">const</span> std::string&amp; event, <span class="keyword">struct</span> json_object* event_contents), </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">void</span> (*reply_cb)(<span class="keyword">struct</span> json_object* reply_contents))</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;{</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; onEvent = event_cb;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; onReply = reply_cb;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;}</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="keywordtype">int</span> LibSoundmanager::initialize_websocket()</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;{</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; mploop = NULL;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; onEvent = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; onReply = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">int</span> ret = sd_event_default(&amp;mploop);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span>(ret &lt; 0)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to create event loop&quot;</span>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">goto</span> END;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">/* Initialize interface from websocket */</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; minterface.on_hangup = _on_hangup_static;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; minterface.on_call = _on_call_static; <span class="comment">/* Is this necessary? */</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; minterface.on_event = _on_event_static;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; muri += <span class="stringliteral">&quot;ws://localhost:&quot;</span> + to_string(mport) + <span class="stringliteral">&quot;/api?token=&quot;</span> + mtoken; <span class="comment">/*To be modified*/</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; sp_websock = afb_ws_client_connect_wsj1(mploop, muri.c_str(), &amp;minterface, <span class="keyword">this</span>);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span>(sp_websock == NULL)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to create websocket connection&quot;</span>);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">goto</span> END;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">/* creates the evsrc */</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">//ret = sd_event_add_io(mploop,&amp;mevent_src, sp_websock-&gt;fd, EPOLLIN, event_callback, NULL);</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;END:</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span>(mploop)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; sd_event_unref(mploop);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;}</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> *event_loop_run(<span class="keywordtype">void</span> *args)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;{</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">struct </span>sd_event* loop = (<span class="keyword">struct </span>sd_event*)(args);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(<span class="stringliteral">&quot;start eventloop&quot;</span>);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; sd_event_run(loop, 30000000);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729"> 182</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">LibSoundmanager::run_eventloop</a>()</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span>(mploop &amp;&amp; sp_websock)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; pthread_t thread_id;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordtype">int</span> ret = pthread_create(&amp;thread_id, NULL, event_loop_run, mploop);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">if</span>(ret != 0)</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Cannot run eventloop due to error:%d&quot;</span>, errno);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> thread_id;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Connecting is not established yet&quot;</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;}</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773"> 217</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager::call</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; verb, <span class="keyword">struct</span> json_object* arg)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;{</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span>(!sp_websock)</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (!has_verb(verb))</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;verb doesn&#39;t exit&quot;</span>);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; ret = afb_wsj1_call_j(sp_websock, API, verb.c_str(), arg, _on_reply_static, <span class="keyword">this</span>);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span> (ret &lt; 0) {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to call verb:%s&quot;</span>,verb.c_str());</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;}</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956"> 236</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">LibSoundmanager::call_sync</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; verb, <span class="keyword">struct</span> json_object* arg, <span class="keyword">struct</span> json_object* ret)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;{</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">/* I haven&#39;t implemented yet */</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;}</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e"> 255</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">LibSoundmanager::subscribe</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; event_name)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">if</span>(!sp_websock)</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">struct </span>json_object* j_obj = json_object_new_object();</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; json_object_object_add(j_obj, <span class="stringliteral">&quot;event&quot;</span>, json_object_new_string(event_name.c_str()));</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordtype">int</span> ret = afb_wsj1_call_j(sp_websock, API, <span class="stringliteral">&quot;subscribe&quot;</span>, j_obj, _on_reply_static, <span class="keyword">this</span>);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> (ret &lt; 0) {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to call verb:%s&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;}</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06"> 284</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">LibSoundmanager::unsubscribe</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; event_name)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span>(!sp_websock)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">struct </span>json_object* j_obj = json_object_new_object();</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; json_object_object_add(j_obj, <span class="stringliteral">&quot;event&quot;</span>, json_object_new_string(event_name.c_str()));</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordtype">int</span> ret = afb_wsj1_call_j(sp_websock, API, <span class="stringliteral">&quot;unsubscribe&quot;</span>, j_obj, _on_reply_static, <span class="keyword">this</span>);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (ret &lt; 0) {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to call verb:%s&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;}</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;am_Error_e LibSoundmanager::connect(<span class="keyword">const</span> am_sourceID_t sourceID, <span class="keyword">const</span> am_sinkID_t sinkID, am_mainConnectionID_t&amp; mainConnectionID)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;{</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">/*int ret;</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="comment"> char *key;</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="comment"> rc = asprintf(&amp;key, &quot;%d:%s/%s&quot;, ++num, api, &quot;connect&quot;); </span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="comment"> ret = afb_wsj1_call_s(wsj1, api, verb, object, on_reply, key);</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment"> if(ret &lt; 0)</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment"> fprintf(stderr, &quot;calling %s/%s(%s) failed: %m\n&quot;, api, verb, object);</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment"> </span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment"> }*/</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">/* open the json scripts */</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// get mainconnedction ID */</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">//mainConnectionID = xx; </span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> E_OK; </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;}</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;am_Error_e LibSoundmanager::disconnect(<span class="keyword">const</span> am_mainConnectionID_t mainConnectionID)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;{</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> E_OK;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;}</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="comment">/*const struct afb_wsj1* LibSoundmanager::get_websocket_handler()</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment">{</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="comment"> if(sp_websock)</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="comment"> return sp_websock;</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment"> return nullptr;</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment">}</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment">const struct sd_event* LibSoundmanager::get_sd_event()</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment">{</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment"> if(mploop)</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment"> return mploop;</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment"> return nullptr;</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment">}*/</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment">/************* Callback Function *************/</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6"> 342</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">LibSoundmanager::on_hangup</a>(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1 *wsj)</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;{</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(<span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;}</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0"> 347</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">LibSoundmanager::on_call</a>(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *api, <span class="keyword">const</span> <span class="keywordtype">char</span> *verb, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;{</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;}</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="comment">* event is like &quot;soundmanager/newMainConnection&quot;</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="comment">* msg is like {&quot;event&quot;:&quot;soundmanager\/newMainConnection&quot;,&quot;data&quot;:{&quot;mainConnectionID&quot;:3,&quot;sourceID&quot;:101,&quot;sinkID&quot;:100,&quot;delay&quot;:0,&quot;connectionState&quot;:4},&quot;jtype&quot;:&quot;afb-event&quot;})}</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment">* ^key^ ^^^^^^^^^^^^ value ^^^^^^^^^^^^</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment">* so you can get </span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment"> event name : struct json_object obj = json_object_object_get(msg,&quot;event&quot;)</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment">*/</span> </div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e"> 358</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">LibSoundmanager::on_event</a>(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *event, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;ON-EVENT:&quot;</span> &lt;&lt; <span class="keyword">event</span> &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; afb_wsj1_msg_object_s(msg) &lt;&lt; <span class="stringliteral">&quot;)&quot;</span> &lt;&lt; endl; </div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span>(onEvent != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keyword">const</span> <span class="keywordtype">string</span> ev(event);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keyword">struct </span>json_object* ev_contents = afb_wsj1_msg_object_j(msg);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; onEvent(ev, ev_contents);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;}</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51"> 369</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">LibSoundmanager::on_reply</a>(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;ON-REPLY:&quot;</span> &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; afb_wsj1_msg_object_s(msg) &lt;&lt; <span class="stringliteral">&quot;)&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span>(onReply != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">struct </span>json_object* reply = afb_wsj1_msg_object_j(msg);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; onReply(reply);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;}</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment">/* Internal Function in libsoundmanager */</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _ELOG(<span class="keyword">const</span> <span class="keywordtype">char</span>* func, <span class="keyword">const</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* log, ...)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;{</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordtype">char</span> *message;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; va_list args;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; va_start(args, log);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (log == NULL || vasprintf(&amp;message, log, args) &lt; 0)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; message = NULL;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;[ERROR]&quot;</span> &lt;&lt; func &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; line &lt;&lt; <span class="stringliteral">&quot;):&quot;</span> &lt;&lt; message &lt;&lt; endl; </div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; va_end(args);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; free(message);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;}</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _DLOG(<span class="keyword">const</span> <span class="keywordtype">char</span>* func, <span class="keyword">const</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* log, ...)</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;{</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">char</span> *message;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; va_list args;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; va_start(args, log);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">if</span> (log == NULL || vasprintf(&amp;message, log, args) &lt; 0)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; message = NULL;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;[DEBUG]&quot;</span> &lt;&lt; func &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; line &lt;&lt; <span class="stringliteral">&quot;):&quot;</span> &lt;&lt; message &lt;&lt; endl; </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; va_end(args);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; free(message);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;}</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> has_verb(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; verb)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;{</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(<span class="stringliteral">&quot;verb is %s&quot;</span>, verb.c_str());</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span>(find(<a class="code" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a>.begin(), <a class="code" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a>.end(), verb) != <a class="code" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a>.end())</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;}</div><div class="ttc" id="libsoundmanager_8hpp_html_a1f6a1c6cdbe66b174179ef6395f2981f"><div class="ttname"><a href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; api_list</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00034">libsoundmanager.hpp:34</a></div></div>
+<div class="ttc" id="structevent_html"><div class="ttname"><a href="structevent.html">event</a></div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00049">soundmanager.c:49</a></div></div>
+<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_ae5b83ce661b1d785de2518ca10113956"><div class="ttname"><a href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">LibSoundmanager::call_sync</a></div><div class="ttdeci">int call_sync(const std::string &amp;verb, struct json_object *arg, struct json_object *ret)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00236">libsoundmanager.cpp:236</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a21060844aa7efad6473b6104546afb06"><div class="ttname"><a href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">LibSoundmanager::unsubscribe</a></div><div class="ttdeci">int unsubscribe(const std::string &amp;event_name)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00284">libsoundmanager.cpp:284</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a1fe952a4dabbab6126cc23e36c79c773"><div class="ttname"><a href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager::call</a></div><div class="ttdeci">int call(const std::string &amp;verb, struct json_object *arg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00217">libsoundmanager.cpp:217</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a560edf9ae3b1e367ad4cbb31c7021d74"><div class="ttname"><a href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager::register_callback</a></div><div class="ttdeci">void register_callback(void(*event_cb)(const std::string &amp;event, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents))</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00119">libsoundmanager.cpp:119</a></div></div>
+<div class="ttc" id="libsoundmanager_8hpp_html"><div class="ttname"><a href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_abf861908e3d6d85d2b3c08683b08f934"><div class="ttname"><a href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">LibSoundmanager::~LibSoundmanager</a></div><div class="ttdeci">~LibSoundmanager()</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00093">libsoundmanager.cpp:93</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_abe71d3531e7888f47185a601b284e729"><div class="ttname"><a href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">LibSoundmanager::run_eventloop</a></div><div class="ttdeci">int run_eventloop()</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00182">libsoundmanager.cpp:182</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a71a8165cb15c7815aa95a8955f5cd7f6"><div class="ttname"><a href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">LibSoundmanager::on_hangup</a></div><div class="ttdeci">void on_hangup(void *closure, struct afb_wsj1 *wsj)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00342">libsoundmanager.cpp:342</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a9cd7c5470cb135f9b1aa56d790c7e91e"><div class="ttname"><a href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">LibSoundmanager::subscribe</a></div><div class="ttdeci">int subscribe(const std::string &amp;event_name)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00255">libsoundmanager.cpp:255</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a69b4f10e509605a570cc52c795bc9d51"><div class="ttname"><a href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">LibSoundmanager::on_reply</a></div><div class="ttdeci">void on_reply(void *closure, struct afb_wsj1_msg *msg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00369">libsoundmanager.cpp:369</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html"><div class="ttname"><a href="class_lib_soundmanager.html">LibSoundmanager</a></div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00062">libsoundmanager.hpp:62</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a3ba2255cb1d29c77c4c6a2267949eda0"><div class="ttname"><a href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">LibSoundmanager::on_call</a></div><div class="ttdeci">void on_call(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00347">libsoundmanager.cpp:347</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a86ef62e7847cd20e9cafbc1f6c017b3e"><div class="ttname"><a href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">LibSoundmanager::on_event</a></div><div class="ttdeci">void on_event(void *closure, const char *event, struct afb_wsj1_msg *msg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00358">libsoundmanager.cpp:358</a></div></div>
+<div class="ttc" id="libsoundmanager_8cpp_html_a797aa3053bd6a29819d44f8fad8a5eca"><div class="ttname"><a href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a></div><div class="ttdeci">#define ELOG(args,...)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00025">libsoundmanager.cpp:25</a></div></div>
+<div class="ttc" id="libsoundmanager_8cpp_html_a4e42b2f5af2174dd24f958351becf63d"><div class="ttname"><a href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a></div><div class="ttdeci">#define DLOG(args,...)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00026">libsoundmanager.cpp:26</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="libsoundmanager_8cpp.html">libsoundmanager.cpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/libsoundmanager_8hpp.html b/doc/api-ref/html/libsoundmanager_8hpp.html
new file mode 100644
index 0000000..4291c66
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8hpp.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/include/libsoundmanager/libsoundmanager.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('libsoundmanager_8hpp.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">libsoundmanager.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;audiomanagertypes.h&gt;</code><br />
+<code>#include &lt;vector&gt;</code><br />
+<code>#include &lt;map&gt;</code><br />
+<code>#include &lt;string&gt;</code><br />
+<code>#include &lt;json-c/json.h&gt;</code><br />
+<code>#include &lt;systemd/sd-event.h&gt;</code><br />
+<code>#include &lt;afb/afb-binding.h&gt;</code><br />
+<code>#include &lt;afb/afb-wsj1.h&gt;</code><br />
+<code>#include &lt;afb/afb-ws-client.h&gt;</code><br />
+</div>
+<p><a href="libsoundmanager_8hpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a1f6a1c6cdbe66b174179ef6395f2981f"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a></td></tr>
+<tr class="separator:a1f6a1c6cdbe66b174179ef6395f2981f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63497e6f3147871c0c6b1b251565e7f0"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">event_list</a></td></tr>
+<tr class="separator:a63497e6f3147871c0c6b1b251565e7f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="a1f6a1c6cdbe66b174179ef6395f2981f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f6a1c6cdbe66b174179ef6395f2981f">&#9670;&nbsp;</a></span>api_list</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::vector&lt;std::string&gt; api_list</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">{</div><div class="line"> std::string(<span class="stringliteral">&quot;connect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;disconnect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;setVolume&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;volumeStep&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;setSinkMuteState&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;getListMainConnections&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;ackConnect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;ackDisconnect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;ackSetSourceState&quot;</span>), </div><div class="line"> std::string(<span class="stringliteral">&quot;registerSource&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;deregisterSource&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;subscribe&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;unsubscribe&quot;</span>)</div><div class="line">}</div></div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8hpp_source.html#l00034">34</a> of file <a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a63497e6f3147871c0c6b1b251565e7f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63497e6f3147871c0c6b1b251565e7f0">&#9670;&nbsp;</a></span>event_list</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::vector&lt;std::string&gt; event_list</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">{</div><div class="line"> std::string(<span class="stringliteral">&quot;newMainConnection&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;volumeChanged&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;removedMainConnection&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;sinkMuteStateChanged&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;mainConnectionStateChanged&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;setRoutingReady&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;setRoutingRundown&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;asyncConnect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;ackSetSourceState&quot;</span>)</div><div class="line">}</div></div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8hpp_source.html#l00050">50</a> of file <a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></li><li class="navelem"><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/libsoundmanager_8hpp.js b/doc/api-ref/html/libsoundmanager_8hpp.js
new file mode 100644
index 0000000..16a31f8
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8hpp.js
@@ -0,0 +1,6 @@
+var libsoundmanager_8hpp =
+[
+ [ "LibSoundmanager", "class_lib_soundmanager.html", "class_lib_soundmanager" ],
+ [ "api_list", "libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f", null ],
+ [ "event_list", "libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/libsoundmanager_8hpp_source.html b/doc/api-ref/html/libsoundmanager_8hpp_source.html
new file mode 100644
index 0000000..58073d6
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8hpp_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/include/libsoundmanager/libsoundmanager.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('libsoundmanager_8hpp_source.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">libsoundmanager.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="libsoundmanager_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (c) 2017 TOYOTA MOTOR CORPORATION</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#ifndef LIBSOUNDMANAGER_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#define LIBSOUNDMANAGER_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;audiomanagertypes.h&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;json-c/json.h&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;systemd/sd-event.h&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;afb/afb-binding.h&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;afb/afb-wsj1.h&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;afb/afb-ws-client.h&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceam.html">am</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f"> 34</a></span>&#160;<span class="keyword">const</span> std::vector&lt;std::string&gt; <a class="code" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a>{</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::string(<span class="stringliteral">&quot;connect&quot;</span>),</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; std::string(<span class="stringliteral">&quot;disconnect&quot;</span>),</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; std::string(<span class="stringliteral">&quot;setVolume&quot;</span>),</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::string(<span class="stringliteral">&quot;volumeStep&quot;</span>),</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::string(<span class="stringliteral">&quot;setSinkMuteState&quot;</span>),</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; std::string(<span class="stringliteral">&quot;getListMainConnections&quot;</span>),</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; std::string(<span class="stringliteral">&quot;ackConnect&quot;</span>),</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; std::string(<span class="stringliteral">&quot;ackDisconnect&quot;</span>),</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::string(<span class="stringliteral">&quot;ackSetSourceState&quot;</span>), </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; std::string(<span class="stringliteral">&quot;registerSource&quot;</span>),</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; std::string(<span class="stringliteral">&quot;deregisterSource&quot;</span>),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::string(<span class="stringliteral">&quot;subscribe&quot;</span>),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::string(<span class="stringliteral">&quot;unsubscribe&quot;</span>)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;};</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0"> 50</a></span>&#160;<span class="keyword">const</span> std::vector&lt;std::string&gt; <a class="code" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">event_list</a>{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; std::string(<span class="stringliteral">&quot;newMainConnection&quot;</span>),</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; std::string(<span class="stringliteral">&quot;volumeChanged&quot;</span>),</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; std::string(<span class="stringliteral">&quot;removedMainConnection&quot;</span>),</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::string(<span class="stringliteral">&quot;sinkMuteStateChanged&quot;</span>),</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; std::string(<span class="stringliteral">&quot;mainConnectionStateChanged&quot;</span>),</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; std::string(<span class="stringliteral">&quot;setRoutingReady&quot;</span>),</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; std::string(<span class="stringliteral">&quot;setRoutingRundown&quot;</span>),</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; std::string(<span class="stringliteral">&quot;asyncConnect&quot;</span>),</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; std::string(<span class="stringliteral">&quot;ackSetSourceState&quot;</span>)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;};</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html"> 62</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>() = <span class="keyword">delete</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> port, <span class="keyword">const</span> std::string&amp; token);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">//LibSoundmanager(const std::string&amp; uri); </span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; ~<a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">/* Method */</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">void</span> register_callback(</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">void</span> (*event_cb)(<span class="keyword">const</span> std::string&amp; <a class="code" href="structevent.html">event</a>, <span class="keyword">struct</span> json_object* event_contents), </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">void</span> (*reply_cb)(<span class="keyword">struct</span> json_object* reply_contents)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; );</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">int</span> run_eventloop();</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">int</span> call(<span class="keyword">const</span> std::string&amp; verb, <span class="keyword">struct</span> json_object* arg);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">int</span> call_sync(<span class="keyword">const</span> std::string&amp; verb, <span class="keyword">struct</span> json_object* arg, <span class="keyword">struct</span> json_object* ret);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">int</span> subscribe(<span class="keyword">const</span> std::string&amp; event_name);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">int</span> unsubscribe(<span class="keyword">const</span> std::string&amp; event_name);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">/*const struct afb_wsj1* get_websocket_handler();</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> const struct sd_event* get_sd_event();*/</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">int</span> initialize_websocket();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; void (*onEvent)(<span class="keyword">const</span> std::string&amp; event, <span class="keyword">struct </span>json_object* event_contents);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; void (*onReply)(<span class="keyword">struct </span>json_object* reply);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">struct </span>afb_wsj1* sp_websock;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">struct </span>afb_wsj1_itf minterface;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; sd_event* mploop;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; std::string muri;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">int</span> mport = 12345;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; std::string mtoken = <span class="stringliteral">&quot;123456&quot;</span>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; am_Error_e connect(<span class="keyword">const</span> am_sourceID_t sourceID, <span class="keyword">const</span> am_sinkID_t sinkID, am::am_mainConnectionID_t&amp; mainConnectionID);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; am_Error_e disconnect(<span class="keyword">const</span> am_mainConnectionID_t mainConnectionID);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">/* Don&#39;t use/ Internal only */</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">void</span> on_hangup(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1 *wsj);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">void</span> on_call(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *api, <span class="keyword">const</span> <span class="keywordtype">char</span> *verb, <span class="keyword">struct</span> afb_wsj1_msg *msg);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">void</span> on_event(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *event, <span class="keyword">struct</span> afb_wsj1_msg *msg);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">void</span> on_reply(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1_msg *msg);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;};</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LIBSOUNDMANAGER_H */</span><span class="preprocessor"></span></div><div class="ttc" id="namespaceam_html"><div class="ttname"><a href="namespaceam.html">am</a></div></div>
+<div class="ttc" id="libsoundmanager_8hpp_html_a1f6a1c6cdbe66b174179ef6395f2981f"><div class="ttname"><a href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; api_list</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00034">libsoundmanager.hpp:34</a></div></div>
+<div class="ttc" id="libsoundmanager_8hpp_html_a63497e6f3147871c0c6b1b251565e7f0"><div class="ttname"><a href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">event_list</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; event_list</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00050">libsoundmanager.hpp:50</a></div></div>
+<div class="ttc" id="structevent_html"><div class="ttname"><a href="structevent.html">event</a></div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00049">soundmanager.c:49</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html"><div class="ttname"><a href="class_lib_soundmanager.html">LibSoundmanager</a></div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00062">libsoundmanager.hpp:62</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></li><li class="navelem"><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/menu.js b/doc/api-ref/html/menu.js
new file mode 100644
index 0000000..97db4c2
--- /dev/null
+++ b/doc/api-ref/html/menu.js
@@ -0,0 +1,26 @@
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+ function makeTree(data,relPath) {
+ var result='';
+ if ('children' in data) {
+ result+='<ul>';
+ for (var i in data.children) {
+ result+='<li><a href="'+relPath+data.children[i].url+'">'+
+ data.children[i].text+'</a>'+
+ makeTree(data.children[i],relPath)+'</li>';
+ }
+ result+='</ul>';
+ }
+ return result;
+ }
+
+ $('#main-nav').append(makeTree(menudata,relPath));
+ $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+ if (searchEnabled) {
+ if (serverSide) {
+ $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
+ } else {
+ $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
+ }
+ }
+ $('#main-menu').smartmenus();
+}
diff --git a/doc/api-ref/html/menudata.js b/doc/api-ref/html/menudata.js
new file mode 100644
index 0000000..52fe2ba
--- /dev/null
+++ b/doc/api-ref/html/menudata.js
@@ -0,0 +1,16 @@
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Data Structures",url:"annotated.html",children:[
+{text:"Data Structures",url:"annotated.html"},
+{text:"Data Structure Index",url:"classes.html"},
+{text:"Data Fields",url:"functions.html",children:[
+{text:"All",url:"functions.html"},
+{text:"Functions",url:"functions_func.html"},
+{text:"Variables",url:"functions_vars.html"}]}]},
+{text:"Files",url:"files.html",children:[
+{text:"File List",url:"files.html"},
+{text:"Globals",url:"globals.html",children:[
+{text:"All",url:"globals.html"},
+{text:"Functions",url:"globals_func.html"},
+{text:"Variables",url:"globals_vars.html"},
+{text:"Macros",url:"globals_defs.html"}]}]}]}
diff --git a/doc/api-ref/html/nav_f.png b/doc/api-ref/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/doc/api-ref/html/nav_f.png
Binary files differ
diff --git a/doc/api-ref/html/nav_g.png b/doc/api-ref/html/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/doc/api-ref/html/nav_g.png
Binary files differ
diff --git a/doc/api-ref/html/nav_h.png b/doc/api-ref/html/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/doc/api-ref/html/nav_h.png
Binary files differ
diff --git a/doc/api-ref/html/navtree.css b/doc/api-ref/html/navtree.css
new file mode 100644
index 0000000..0cc7e77
--- /dev/null
+++ b/doc/api-ref/html/navtree.css
@@ -0,0 +1,146 @@
+#nav-tree .children_ul {
+ margin:0;
+ padding:4px;
+}
+
+#nav-tree ul {
+ list-style:none outside none;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree li {
+ white-space:nowrap;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .plus {
+ margin:0px;
+}
+
+#nav-tree .selected {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ vertical-align: middle;
+}
+
+#nav-tree a {
+ text-decoration:none;
+ padding:0px;
+ margin:0px;
+ outline:none;
+}
+
+#nav-tree .label {
+ margin:0px;
+ padding:0px;
+ font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+#nav-tree .label a {
+ padding:2px;
+}
+
+#nav-tree .selected a {
+ text-decoration:none;
+ color:#fff;
+}
+
+#nav-tree .children_ul {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .item {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree {
+ padding: 0px 0px;
+ background-color: #FAFAFF;
+ font-size:14px;
+ overflow:auto;
+}
+
+#doc-content {
+ overflow:auto;
+ display:block;
+ padding:0px;
+ margin:0px;
+ -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#side-nav {
+ padding:0 6px 0 0;
+ margin: 0px;
+ display:block;
+ position: absolute;
+ left: 0px;
+ width: 250px;
+}
+
+.ui-resizable .ui-resizable-handle {
+ display:block;
+}
+
+.ui-resizable-e {
+ background-image:url("splitbar.png");
+ background-size:100%;
+ background-repeat:no-repeat;
+ background-attachment: scroll;
+ cursor:ew-resize;
+ height:100%;
+ right:0;
+ top:0;
+ width:6px;
+}
+
+.ui-resizable-handle {
+ display:none;
+ font-size:0.1px;
+ position:absolute;
+ z-index:1;
+}
+
+#nav-tree-contents {
+ margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#nav-sync {
+ position:absolute;
+ top:5px;
+ right:24px;
+ z-index:0;
+}
+
+#nav-sync img {
+ opacity:0.3;
+}
+
+#nav-sync img:hover {
+ opacity:0.9;
+}
+
+@media print
+{
+ #nav-tree { display: none; }
+ div.ui-resizable-handle { display: none; position: relative; }
+}
+
diff --git a/doc/api-ref/html/navtree.js b/doc/api-ref/html/navtree.js
new file mode 100644
index 0000000..e6d31b0
--- /dev/null
+++ b/doc/api-ref/html/navtree.js
@@ -0,0 +1,517 @@
+var navTreeSubIndices = new Array();
+var arrowDown = '&#9660;';
+var arrowRight = '&#9658;';
+
+function getData(varName)
+{
+ var i = varName.lastIndexOf('/');
+ var n = i>=0 ? varName.substring(i+1) : varName;
+ return eval(n.replace(/\-/g,'_'));
+}
+
+function stripPath(uri)
+{
+ return uri.substring(uri.lastIndexOf('/')+1);
+}
+
+function stripPath2(uri)
+{
+ var i = uri.lastIndexOf('/');
+ var s = uri.substring(i+1);
+ var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
+ return m ? uri.substring(i-6) : s;
+}
+
+function hashValue()
+{
+ return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
+}
+
+function hashUrl()
+{
+ return '#'+hashValue();
+}
+
+function pathName()
+{
+ return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
+}
+
+function localStorageSupported()
+{
+ try {
+ return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
+ }
+ catch(e) {
+ return false;
+ }
+}
+
+
+function storeLink(link)
+{
+ if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
+ window.localStorage.setItem('navpath',link);
+ }
+}
+
+function deleteLink()
+{
+ if (localStorageSupported()) {
+ window.localStorage.setItem('navpath','');
+ }
+}
+
+function cachedLink()
+{
+ if (localStorageSupported()) {
+ return window.localStorage.getItem('navpath');
+ } else {
+ return '';
+ }
+}
+
+function getScript(scriptName,func,show)
+{
+ var head = document.getElementsByTagName("head")[0];
+ var script = document.createElement('script');
+ script.id = scriptName;
+ script.type = 'text/javascript';
+ script.onload = func;
+ script.src = scriptName+'.js';
+ if ($.browser.msie && $.browser.version<=8) {
+ // script.onload does not work with older versions of IE
+ script.onreadystatechange = function() {
+ if (script.readyState=='complete' || script.readyState=='loaded') {
+ func(); if (show) showRoot();
+ }
+ }
+ }
+ head.appendChild(script);
+}
+
+function createIndent(o,domNode,node,level)
+{
+ var level=-1;
+ var n = node;
+ while (n.parentNode) { level++; n=n.parentNode; }
+ if (node.childrenData) {
+ var imgNode = document.createElement("span");
+ imgNode.className = 'arrow';
+ imgNode.style.paddingLeft=(16*level).toString()+'px';
+ imgNode.innerHTML=arrowRight;
+ node.plus_img = imgNode;
+ node.expandToggle = document.createElement("a");
+ node.expandToggle.href = "javascript:void(0)";
+ node.expandToggle.onclick = function() {
+ if (node.expanded) {
+ $(node.getChildrenUL()).slideUp("fast");
+ node.plus_img.innerHTML=arrowRight;
+ node.expanded = false;
+ } else {
+ expandNode(o, node, false, false);
+ }
+ }
+ node.expandToggle.appendChild(imgNode);
+ domNode.appendChild(node.expandToggle);
+ } else {
+ var span = document.createElement("span");
+ span.className = 'arrow';
+ span.style.width = 16*(level+1)+'px';
+ span.innerHTML = '&#160;';
+ domNode.appendChild(span);
+ }
+}
+
+var animationInProgress = false;
+
+function gotoAnchor(anchor,aname,updateLocation)
+{
+ var pos, docContent = $('#doc-content');
+ var ancParent = $(anchor.parent());
+ if (ancParent.hasClass('memItemLeft') ||
+ ancParent.hasClass('fieldname') ||
+ ancParent.hasClass('fieldtype') ||
+ ancParent.is(':header'))
+ {
+ pos = ancParent.position().top;
+ } else if (anchor.position()) {
+ pos = anchor.position().top;
+ }
+ if (pos) {
+ var dist = Math.abs(Math.min(
+ pos-docContent.offset().top,
+ docContent[0].scrollHeight-
+ docContent.height()-docContent.scrollTop()));
+ animationInProgress=true;
+ docContent.animate({
+ scrollTop: pos + docContent.scrollTop() - docContent.offset().top
+ },Math.max(50,Math.min(500,dist)),function(){
+ if (updateLocation) window.location.href=aname;
+ animationInProgress=false;
+ });
+ }
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+ var node = new Object();
+ node.children = Array();
+ node.childrenData = childrenData;
+ node.depth = po.depth + 1;
+ node.relpath = po.relpath;
+ node.isLast = lastNode;
+
+ node.li = document.createElement("li");
+ po.getChildrenUL().appendChild(node.li);
+ node.parentNode = po;
+
+ node.itemDiv = document.createElement("div");
+ node.itemDiv.className = "item";
+
+ node.labelSpan = document.createElement("span");
+ node.labelSpan.className = "label";
+
+ createIndent(o,node.itemDiv,node,0);
+ node.itemDiv.appendChild(node.labelSpan);
+ node.li.appendChild(node.itemDiv);
+
+ var a = document.createElement("a");
+ node.labelSpan.appendChild(a);
+ node.label = document.createTextNode(text);
+ node.expanded = false;
+ a.appendChild(node.label);
+ if (link) {
+ var url;
+ if (link.substring(0,1)=='^') {
+ url = link.substring(1);
+ link = url;
+ } else {
+ url = node.relpath+link;
+ }
+ a.className = stripPath(link.replace('#',':'));
+ if (link.indexOf('#')!=-1) {
+ var aname = '#'+link.split('#')[1];
+ var srcPage = stripPath(pathName());
+ var targetPage = stripPath(link.split('#')[0]);
+ a.href = srcPage!=targetPage ? url : "javascript:void(0)";
+ a.onclick = function(){
+ storeLink(link);
+ if (!$(a).parent().parent().hasClass('selected'))
+ {
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ $(a).parent().parent().addClass('selected');
+ $(a).parent().parent().attr('id','selected');
+ }
+ var anchor = $(aname);
+ gotoAnchor(anchor,aname,true);
+ };
+ } else {
+ a.href = url;
+ a.onclick = function() { storeLink(link); }
+ }
+ } else {
+ if (childrenData != null)
+ {
+ a.className = "nolink";
+ a.href = "javascript:void(0)";
+ a.onclick = node.expandToggle.onclick;
+ }
+ }
+
+ node.childrenUL = null;
+ node.getChildrenUL = function() {
+ if (!node.childrenUL) {
+ node.childrenUL = document.createElement("ul");
+ node.childrenUL.className = "children_ul";
+ node.childrenUL.style.display = "none";
+ node.li.appendChild(node.childrenUL);
+ }
+ return node.childrenUL;
+ };
+
+ return node;
+}
+
+function showRoot()
+{
+ var headerHeight = $("#top").height();
+ var footerHeight = $("#nav-path").height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ (function (){ // retry until we can scroll to the selected item
+ try {
+ var navtree=$('#nav-tree');
+ navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+ } catch (err) {
+ setTimeout(arguments.callee, 0);
+ }
+ })();
+}
+
+function expandNode(o, node, imm, showRoot)
+{
+ if (node.childrenData && !node.expanded) {
+ if (typeof(node.childrenData)==='string') {
+ var varName = node.childrenData;
+ getScript(node.relpath+varName,function(){
+ node.childrenData = getData(varName);
+ expandNode(o, node, imm, showRoot);
+ }, showRoot);
+ } else {
+ if (!node.childrenVisited) {
+ getNode(o, node);
+ } if (imm || ($.browser.msie && $.browser.version>8)) {
+ // somehow slideDown jumps to the start of tree for IE9 :-(
+ $(node.getChildrenUL()).show();
+ } else {
+ $(node.getChildrenUL()).slideDown("fast");
+ }
+ node.plus_img.innerHTML = arrowDown;
+ node.expanded = true;
+ }
+ }
+}
+
+function glowEffect(n,duration)
+{
+ n.addClass('glow').delay(duration).queue(function(next){
+ $(this).removeClass('glow');next();
+ });
+}
+
+function highlightAnchor()
+{
+ var aname = hashUrl();
+ var anchor = $(aname);
+ if (anchor.parent().attr('class')=='memItemLeft'){
+ var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
+ glowEffect(rows.children(),300); // member without details
+ } else if (anchor.parent().attr('class')=='fieldname'){
+ glowEffect(anchor.parent().parent(),1000); // enum value
+ } else if (anchor.parent().attr('class')=='fieldtype'){
+ glowEffect(anchor.parent().parent(),1000); // struct field
+ } else if (anchor.parent().is(":header")) {
+ glowEffect(anchor.parent(),1000); // section header
+ } else {
+ glowEffect(anchor.next(),1000); // normal member
+ }
+ gotoAnchor(anchor,aname,false);
+}
+
+function selectAndHighlight(hash,n)
+{
+ var a;
+ if (hash) {
+ var link=stripPath(pathName())+':'+hash.substring(1);
+ a=$('.item a[class$="'+link+'"]');
+ }
+ if (a && a.length) {
+ a.parent().parent().addClass('selected');
+ a.parent().parent().attr('id','selected');
+ highlightAnchor();
+ } else if (n) {
+ $(n.itemDiv).addClass('selected');
+ $(n.itemDiv).attr('id','selected');
+ }
+ if ($('#nav-tree-contents .item:first').hasClass('selected')) {
+ $('#nav-sync').css('top','30px');
+ } else {
+ $('#nav-sync').css('top','5px');
+ }
+ showRoot();
+}
+
+function showNode(o, node, index, hash)
+{
+ if (node && node.childrenData) {
+ if (typeof(node.childrenData)==='string') {
+ var varName = node.childrenData;
+ getScript(node.relpath+varName,function(){
+ node.childrenData = getData(varName);
+ showNode(o,node,index,hash);
+ },true);
+ } else {
+ if (!node.childrenVisited) {
+ getNode(o, node);
+ }
+ $(node.getChildrenUL()).css({'display':'block'});
+ node.plus_img.innerHTML = arrowDown;
+ node.expanded = true;
+ var n = node.children[o.breadcrumbs[index]];
+ if (index+1<o.breadcrumbs.length) {
+ showNode(o,n,index+1,hash);
+ } else {
+ if (typeof(n.childrenData)==='string') {
+ var varName = n.childrenData;
+ getScript(n.relpath+varName,function(){
+ n.childrenData = getData(varName);
+ node.expanded=false;
+ showNode(o,node,index,hash); // retry with child node expanded
+ },true);
+ } else {
+ var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
+ if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
+ expandNode(o, n, true, true);
+ }
+ selectAndHighlight(hash,n);
+ }
+ }
+ }
+ } else {
+ selectAndHighlight(hash);
+ }
+}
+
+function removeToInsertLater(element) {
+ var parentNode = element.parentNode;
+ var nextSibling = element.nextSibling;
+ parentNode.removeChild(element);
+ return function() {
+ if (nextSibling) {
+ parentNode.insertBefore(element, nextSibling);
+ } else {
+ parentNode.appendChild(element);
+ }
+ };
+}
+
+function getNode(o, po)
+{
+ var insertFunction = removeToInsertLater(po.li);
+ po.childrenVisited = true;
+ var l = po.childrenData.length-1;
+ for (var i in po.childrenData) {
+ var nodeData = po.childrenData[i];
+ po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
+ i==l);
+ }
+ insertFunction();
+}
+
+function gotoNode(o,subIndex,root,hash,relpath)
+{
+ var nti = navTreeSubIndices[subIndex][root+hash];
+ o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
+ if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
+ navTo(o,NAVTREE[0][1],"",relpath);
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ }
+ if (o.breadcrumbs) {
+ o.breadcrumbs.unshift(0); // add 0 for root node
+ showNode(o, o.node, 0, hash);
+ }
+}
+
+function navTo(o,root,hash,relpath)
+{
+ var link = cachedLink();
+ if (link) {
+ var parts = link.split('#');
+ root = parts[0];
+ if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
+ else hash='';
+ }
+ if (hash.match(/^#l\d+$/)) {
+ var anchor=$('a[name='+hash.substring(1)+']');
+ glowEffect(anchor.parent(),1000); // line number
+ hash=''; // strip line number anchors
+ }
+ var url=root+hash;
+ var i=-1;
+ while (NAVTREEINDEX[i+1]<=url) i++;
+ if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
+ if (navTreeSubIndices[i]) {
+ gotoNode(o,i,root,hash,relpath)
+ } else {
+ getScript(relpath+'navtreeindex'+i,function(){
+ navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
+ if (navTreeSubIndices[i]) {
+ gotoNode(o,i,root,hash,relpath);
+ }
+ },true);
+ }
+}
+
+function showSyncOff(n,relpath)
+{
+ n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
+}
+
+function showSyncOn(n,relpath)
+{
+ n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
+}
+
+function toggleSyncButton(relpath)
+{
+ var navSync = $('#nav-sync');
+ if (navSync.hasClass('sync')) {
+ navSync.removeClass('sync');
+ showSyncOff(navSync,relpath);
+ storeLink(stripPath2(pathName())+hashUrl());
+ } else {
+ navSync.addClass('sync');
+ showSyncOn(navSync,relpath);
+ deleteLink();
+ }
+}
+
+function initNavTree(toroot,relpath)
+{
+ var o = new Object();
+ o.toroot = toroot;
+ o.node = new Object();
+ o.node.li = document.getElementById("nav-tree-contents");
+ o.node.childrenData = NAVTREE;
+ o.node.children = new Array();
+ o.node.childrenUL = document.createElement("ul");
+ o.node.getChildrenUL = function() { return o.node.childrenUL; };
+ o.node.li.appendChild(o.node.childrenUL);
+ o.node.depth = 0;
+ o.node.relpath = relpath;
+ o.node.expanded = false;
+ o.node.isLast = true;
+ o.node.plus_img = document.createElement("span");
+ o.node.plus_img.className = 'arrow';
+ o.node.plus_img.innerHTML = arrowRight;
+
+ if (localStorageSupported()) {
+ var navSync = $('#nav-sync');
+ if (cachedLink()) {
+ showSyncOff(navSync,relpath);
+ navSync.removeClass('sync');
+ } else {
+ showSyncOn(navSync,relpath);
+ }
+ navSync.click(function(){ toggleSyncButton(relpath); });
+ }
+
+ $(window).load(function(){
+ navTo(o,toroot,hashUrl(),relpath);
+ showRoot();
+ });
+
+ $(window).bind('hashchange', function(){
+ if (window.location.hash && window.location.hash.length>1){
+ var a;
+ if ($(location).attr('hash')){
+ var clslink=stripPath(pathName())+':'+hashValue();
+ a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
+ }
+ if (a==null || !$(a).parent().parent().hasClass('selected')){
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ }
+ var link=stripPath2(pathName());
+ navTo(o,link,hashUrl(),relpath);
+ } else if (!animationInProgress) {
+ $('#doc-content').scrollTop(0);
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ navTo(o,toroot,hashUrl(),relpath);
+ }
+ })
+}
+
diff --git a/doc/api-ref/html/navtreedata.js b/doc/api-ref/html/navtreedata.js
new file mode 100644
index 0000000..c0ffb45
--- /dev/null
+++ b/doc/api-ref/html/navtreedata.js
@@ -0,0 +1,31 @@
+var NAVTREE =
+[
+ [ "Sound Manager", "index.html", [
+ [ "Data Structures", "annotated.html", [
+ [ "Data Structures", "annotated.html", "annotated_dup" ],
+ [ "Data Structure Index", "classes.html", null ],
+ [ "Data Fields", "functions.html", [
+ [ "All", "functions.html", null ],
+ [ "Functions", "functions_func.html", null ],
+ [ "Variables", "functions_vars.html", null ]
+ ] ]
+ ] ],
+ [ "Files", null, [
+ [ "File List", "files.html", "files" ],
+ [ "Globals", "globals.html", [
+ [ "All", "globals.html", null ],
+ [ "Functions", "globals_func.html", null ],
+ [ "Variables", "globals_vars.html", null ],
+ [ "Macros", "globals_defs.html", null ]
+ ] ]
+ ] ]
+ ] ]
+];
+
+var NAVTREEINDEX =
+[
+"annotated.html"
+];
+
+var SYNCONMSG = 'click to disable panel synchronisation';
+var SYNCOFFMSG = 'click to enable panel synchronisation'; \ No newline at end of file
diff --git a/doc/api-ref/html/navtreeindex0.js b/doc/api-ref/html/navtreeindex0.js
new file mode 100644
index 0000000..fdd7edc
--- /dev/null
+++ b/doc/api-ref/html/navtreeindex0.js
@@ -0,0 +1,61 @@
+var NAVTREEINDEX0 =
+{
+"annotated.html":[0,0],
+"class_lib_soundmanager.html":[0,0,1],
+"class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773":[0,0,1,2],
+"class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06":[0,0,1,11],
+"class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79":[0,0,1,0],
+"class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0":[0,0,1,4],
+"class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74":[0,0,1,8],
+"class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51":[0,0,1,7],
+"class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6":[0,0,1,6],
+"class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e":[0,0,1,5],
+"class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e":[0,0,1,10],
+"class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729":[0,0,1,9],
+"class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934":[0,0,1,1],
+"class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956":[0,0,1,3],
+"classes.html":[0,1],
+"dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html":[1,0,0,0,0],
+"dir_574c53d22ed4def281d320d129dd43c9.html":[1,0,0,1],
+"dir_85932083476b47061c69d172796990a3.html":[1,0,0,2],
+"dir_b967abc00200c877344b4504e6cbcf3f.html":[1,0,0],
+"dir_c2dc0533631c44dc5d574e7be055c656.html":[1,0,0,0],
+"files.html":[1,0],
+"functions.html":[0,2,0],
+"functions_func.html":[0,2,1],
+"functions_vars.html":[0,2,2],
+"globals.html":[1,1,0],
+"globals_defs.html":[1,1,3],
+"globals_func.html":[1,1,1],
+"globals_vars.html":[1,1,2],
+"index.html":[],
+"libsoundmanager_8cpp.html":[1,0,0,1,0],
+"libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d":[1,0,0,1,0,0],
+"libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca":[1,0,0,1,0,1],
+"libsoundmanager_8cpp_source.html":[1,0,0,1,0],
+"libsoundmanager_8hpp.html":[1,0,0,0,0,0],
+"libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f":[1,0,0,0,0,0,1],
+"libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0":[1,0,0,0,0,0,2],
+"libsoundmanager_8hpp_source.html":[1,0,0,0,0,0],
+"pages.html":[],
+"soundmanager_8c.html":[1,0,0,2,0],
+"soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e":[1,0,0,2,0,5],
+"soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da":[1,0,0,2,0,9],
+"soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f":[1,0,0,2,0,7],
+"soundmanager_8c.html#a369266c24eacffb87046522897a570d5":[1,0,0,2,0,1],
+"soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567":[1,0,0,2,0,10],
+"soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff":[1,0,0,2,0,4],
+"soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0":[1,0,0,2,0,8],
+"soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d":[1,0,0,2,0,11],
+"soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570":[1,0,0,2,0,6],
+"soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461":[1,0,0,2,0,3],
+"soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291":[1,0,0,2,0,2],
+"soundmanager_8c_source.html":[1,0,0,2,0],
+"structevent.html":[0,0,0],
+"structevent.html#a58726ebc551d36562ac3f9e1fe293214":[0,0,0,0],
+"structevent.html#a723489bec273335d13513cd1040c0216":[0,0,0,1],
+"test_8cpp.html":[1,0,0,1,1],
+"test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022":[1,0,0,1,1,1],
+"test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627":[1,0,0,1,1,0],
+"test_8cpp_source.html":[1,0,0,1,1]
+};
diff --git a/doc/api-ref/html/open.png b/doc/api-ref/html/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/doc/api-ref/html/open.png
Binary files differ
diff --git a/doc/api-ref/html/resize.js b/doc/api-ref/html/resize.js
new file mode 100644
index 0000000..56e4a02
--- /dev/null
+++ b/doc/api-ref/html/resize.js
@@ -0,0 +1,114 @@
+function initResizable()
+{
+ var cookie_namespace = 'doxygen';
+ var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight;
+
+ function readCookie(cookie)
+ {
+ var myCookie = cookie_namespace+"_"+cookie+"=";
+ if (document.cookie) {
+ var index = document.cookie.indexOf(myCookie);
+ if (index != -1) {
+ var valStart = index + myCookie.length;
+ var valEnd = document.cookie.indexOf(";", valStart);
+ if (valEnd == -1) {
+ valEnd = document.cookie.length;
+ }
+ var val = document.cookie.substring(valStart, valEnd);
+ return val;
+ }
+ }
+ return 0;
+ }
+
+ function writeCookie(cookie, val, expiration)
+ {
+ if (val==undefined) return;
+ if (expiration == null) {
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+ expiration = date.toGMTString();
+ }
+ document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
+ }
+
+ function resizeWidth()
+ {
+ var windowWidth = $(window).width() + "px";
+ var sidenavWidth = $(sidenav).outerWidth();
+ content.css({marginLeft:parseInt(sidenavWidth)+"px"});
+ writeCookie('width',sidenavWidth-barWidth, null);
+ }
+
+ function restoreWidth(navWidth)
+ {
+ var windowWidth = $(window).width() + "px";
+ content.css({marginLeft:parseInt(navWidth)+barWidth+"px"});
+ sidenav.css({width:navWidth + "px"});
+ }
+
+ function resizeHeight()
+ {
+ var headerHeight = header.outerHeight();
+ var footerHeight = footer.outerHeight();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ content.css({height:windowHeight + "px"});
+ navtree.css({height:windowHeight + "px"});
+ sidenav.css({height:windowHeight + "px"});
+ var width=$(window).width();
+ if (width!=collapsedWidth) {
+ if (width<desktop_vp && collapsedWidth>=desktop_vp) {
+ if (!collapsed) {
+ collapseExpand();
+ }
+ } else if (width>desktop_vp && collapsedWidth<desktop_vp) {
+ if (collapsed) {
+ collapseExpand();
+ }
+ }
+ collapsedWidth=width;
+ }
+ }
+
+ function collapseExpand()
+ {
+ if (sidenav.width()>0) {
+ restoreWidth(0);
+ collapsed=true;
+ }
+ else {
+ var width = readCookie('width');
+ if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); }
+ collapsed=false;
+ }
+ }
+
+ header = $("#top");
+ sidenav = $("#side-nav");
+ content = $("#doc-content");
+ navtree = $("#nav-tree");
+ footer = $("#nav-path");
+ $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+ $(sidenav).resizable({ minWidth: 0 });
+ $(window).resize(function() { resizeHeight(); });
+ var device = navigator.userAgent.toLowerCase();
+ var touch_device = device.match(/(iphone|ipod|ipad|android)/);
+ if (touch_device) { /* wider split bar for touch only devices */
+ $(sidenav).css({ paddingRight:'20px' });
+ $('.ui-resizable-e').css({ width:'20px' });
+ $('#nav-sync').css({ right:'34px' });
+ barWidth=20;
+ }
+ var width = readCookie('width');
+ if (width) { restoreWidth(width); } else { resizeWidth(); }
+ resizeHeight();
+ var url = location.href;
+ var i=url.indexOf("#");
+ if (i>=0) window.location.hash=url.substr(i);
+ var _preventDefault = function(evt) { evt.preventDefault(); };
+ $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
+ $(".ui-resizable-handle").dblclick(collapseExpand);
+ $(window).load(resizeHeight);
+}
+
+
diff --git a/doc/api-ref/html/search/all_0.html b/doc/api-ref/html/search/all_0.html
new file mode 100644
index 0000000..f25360b
--- /dev/null
+++ b/doc/api-ref/html/search/all_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_0.js b/doc/api-ref/html/search/all_0.js
new file mode 100644
index 0000000..b97cbfb
--- /dev/null
+++ b/doc/api-ref/html/search/all_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_5fgnu_5fsource',['_GNU_SOURCE',['../soundmanager_8c.html#a369266c24eacffb87046522897a570d5',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/all_1.html b/doc/api-ref/html/search/all_1.html
new file mode 100644
index 0000000..b13f0f7
--- /dev/null
+++ b/doc/api-ref/html/search/all_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_1.js b/doc/api-ref/html/search/all_1.js
new file mode 100644
index 0000000..c6903b6
--- /dev/null
+++ b/doc/api-ref/html/search/all_1.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['afbbindingv1register',['afbBindingV1Register',['../soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567',1,'soundmanager.c']]],
+ ['afbbindingv1serviceinit',['afbBindingV1ServiceInit',['../soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d',1,'soundmanager.c']]],
+ ['am_5fcmd_5fpath',['AM_CMD_PATH',['../soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291',1,'soundmanager.c']]],
+ ['am_5fname',['AM_NAME',['../soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461',1,'soundmanager.c']]],
+ ['am_5froute_5fpath',['AM_ROUTE_PATH',['../soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff',1,'soundmanager.c']]],
+ ['api_5flist',['api_list',['../libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f',1,'libsoundmanager.hpp']]]
+];
diff --git a/doc/api-ref/html/search/all_2.html b/doc/api-ref/html/search/all_2.html
new file mode 100644
index 0000000..9543c57
--- /dev/null
+++ b/doc/api-ref/html/search/all_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_2.js b/doc/api-ref/html/search/all_2.js
new file mode 100644
index 0000000..6110f63
--- /dev/null
+++ b/doc/api-ref/html/search/all_2.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['call',['call',['../class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773',1,'LibSoundmanager']]],
+ ['call_5fsync',['call_sync',['../class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956',1,'LibSoundmanager']]],
+ ['command_5fevent_5fnum',['COMMAND_EVENT_NUM',['../soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/all_3.html b/doc/api-ref/html/search/all_3.html
new file mode 100644
index 0000000..03405c0
--- /dev/null
+++ b/doc/api-ref/html/search/all_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_3.js b/doc/api-ref/html/search/all_3.js
new file mode 100644
index 0000000..dacb0bc
--- /dev/null
+++ b/doc/api-ref/html/search/all_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['dlog',['DLOG',['../libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d',1,'libsoundmanager.cpp']]]
+];
diff --git a/doc/api-ref/html/search/all_4.html b/doc/api-ref/html/search/all_4.html
new file mode 100644
index 0000000..8e1f4b9
--- /dev/null
+++ b/doc/api-ref/html/search/all_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_4.js b/doc/api-ref/html/search/all_4.js
new file mode 100644
index 0000000..f241b7f
--- /dev/null
+++ b/doc/api-ref/html/search/all_4.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['elog',['ELOG',['../libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca',1,'libsoundmanager.cpp']]],
+ ['event',['event',['../structevent.html',1,'event'],['../structevent.html#a58726ebc551d36562ac3f9e1fe293214',1,'event::event()']]],
+ ['event_5flist',['event_list',['../libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0',1,'libsoundmanager.hpp']]]
+];
diff --git a/doc/api-ref/html/search/all_5.html b/doc/api-ref/html/search/all_5.html
new file mode 100644
index 0000000..89a879e
--- /dev/null
+++ b/doc/api-ref/html/search/all_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_5.js b/doc/api-ref/html/search/all_5.js
new file mode 100644
index 0000000..626f0c6
--- /dev/null
+++ b/doc/api-ref/html/search/all_5.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['libsoundmanager',['LibSoundmanager',['../class_lib_soundmanager.html',1,'LibSoundmanager'],['../class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79',1,'LibSoundmanager::LibSoundmanager()']]],
+ ['libsoundmanager_2ecpp',['libsoundmanager.cpp',['../libsoundmanager_8cpp.html',1,'']]],
+ ['libsoundmanager_2ehpp',['libsoundmanager.hpp',['../libsoundmanager_8hpp.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/all_6.html b/doc/api-ref/html/search/all_6.html
new file mode 100644
index 0000000..6afac06
--- /dev/null
+++ b/doc/api-ref/html/search/all_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_6.js b/doc/api-ref/html/search/all_6.js
new file mode 100644
index 0000000..4b803da
--- /dev/null
+++ b/doc/api-ref/html/search/all_6.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['main',['main',['../test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'test.cpp']]],
+ ['max_5flen_5fstr',['MAX_LEN_STR',['../soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/all_7.html b/doc/api-ref/html/search/all_7.html
new file mode 100644
index 0000000..de19107
--- /dev/null
+++ b/doc/api-ref/html/search/all_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_7.js b/doc/api-ref/html/search/all_7.js
new file mode 100644
index 0000000..d6f2e90
--- /dev/null
+++ b/doc/api-ref/html/search/all_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['name',['name',['../structevent.html#a723489bec273335d13513cd1040c0216',1,'event']]]
+];
diff --git a/doc/api-ref/html/search/all_8.html b/doc/api-ref/html/search/all_8.html
new file mode 100644
index 0000000..11e27cd
--- /dev/null
+++ b/doc/api-ref/html/search/all_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_8.js b/doc/api-ref/html/search/all_8.js
new file mode 100644
index 0000000..07d9659
--- /dev/null
+++ b/doc/api-ref/html/search/all_8.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['on_5fcall',['on_call',['../class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0',1,'LibSoundmanager']]],
+ ['on_5fevent',['on_event',['../class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e',1,'LibSoundmanager']]],
+ ['on_5fhangup',['on_hangup',['../class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6',1,'LibSoundmanager']]],
+ ['on_5freply',['on_reply',['../class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/all_9.html b/doc/api-ref/html/search/all_9.html
new file mode 100644
index 0000000..f8abbbe
--- /dev/null
+++ b/doc/api-ref/html/search/all_9.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_9.js b/doc/api-ref/html/search/all_9.js
new file mode 100644
index 0000000..f64b6c8
--- /dev/null
+++ b/doc/api-ref/html/search/all_9.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['register_5fcallback',['register_callback',['../class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74',1,'LibSoundmanager']]],
+ ['routing_5fevent_5fnum',['ROUTING_EVENT_NUM',['../soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f',1,'soundmanager.c']]],
+ ['run_5feventloop',['run_eventloop',['../class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/all_a.html b/doc/api-ref/html/search/all_a.html
new file mode 100644
index 0000000..9601fce
--- /dev/null
+++ b/doc/api-ref/html/search/all_a.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_a.js b/doc/api-ref/html/search/all_a.js
new file mode 100644
index 0000000..6797659
--- /dev/null
+++ b/doc/api-ref/html/search/all_a.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['sm',['sm',['../test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022',1,'test.cpp']]],
+ ['sound_5fmanager_5fname',['SOUND_MANAGER_NAME',['../soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0',1,'soundmanager.c']]],
+ ['sound_5fmanager_5fpath',['SOUND_MANAGER_PATH',['../soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da',1,'soundmanager.c']]],
+ ['soundmanager_2ec',['soundmanager.c',['../soundmanager_8c.html',1,'']]],
+ ['subscribe',['subscribe',['../class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/all_b.html b/doc/api-ref/html/search/all_b.html
new file mode 100644
index 0000000..0814e4e
--- /dev/null
+++ b/doc/api-ref/html/search/all_b.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_b.js b/doc/api-ref/html/search/all_b.js
new file mode 100644
index 0000000..2abceaa
--- /dev/null
+++ b/doc/api-ref/html/search/all_b.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['test_2ecpp',['test.cpp',['../test_8cpp.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/all_c.html b/doc/api-ref/html/search/all_c.html
new file mode 100644
index 0000000..da08c38
--- /dev/null
+++ b/doc/api-ref/html/search/all_c.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_c.js b/doc/api-ref/html/search/all_c.js
new file mode 100644
index 0000000..3c4ce14
--- /dev/null
+++ b/doc/api-ref/html/search/all_c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['unsubscribe',['unsubscribe',['../class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/all_d.html b/doc/api-ref/html/search/all_d.html
new file mode 100644
index 0000000..9986c9c
--- /dev/null
+++ b/doc/api-ref/html/search/all_d.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_d.js b/doc/api-ref/html/search/all_d.js
new file mode 100644
index 0000000..8beb9df
--- /dev/null
+++ b/doc/api-ref/html/search/all_d.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_7elibsoundmanager',['~LibSoundmanager',['../class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/classes_0.html b/doc/api-ref/html/search/classes_0.html
new file mode 100644
index 0000000..1c3e406
--- /dev/null
+++ b/doc/api-ref/html/search/classes_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/classes_0.js b/doc/api-ref/html/search/classes_0.js
new file mode 100644
index 0000000..2ddd7f1
--- /dev/null
+++ b/doc/api-ref/html/search/classes_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['event',['event',['../structevent.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/classes_1.html b/doc/api-ref/html/search/classes_1.html
new file mode 100644
index 0000000..a8e7069
--- /dev/null
+++ b/doc/api-ref/html/search/classes_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/classes_1.js b/doc/api-ref/html/search/classes_1.js
new file mode 100644
index 0000000..8579e77
--- /dev/null
+++ b/doc/api-ref/html/search/classes_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['libsoundmanager',['LibSoundmanager',['../class_lib_soundmanager.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/close.png b/doc/api-ref/html/search/close.png
new file mode 100644
index 0000000..9342d3d
--- /dev/null
+++ b/doc/api-ref/html/search/close.png
Binary files differ
diff --git a/doc/api-ref/html/search/defines_0.html b/doc/api-ref/html/search/defines_0.html
new file mode 100644
index 0000000..5b25204
--- /dev/null
+++ b/doc/api-ref/html/search/defines_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_0.js b/doc/api-ref/html/search/defines_0.js
new file mode 100644
index 0000000..b97cbfb
--- /dev/null
+++ b/doc/api-ref/html/search/defines_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_5fgnu_5fsource',['_GNU_SOURCE',['../soundmanager_8c.html#a369266c24eacffb87046522897a570d5',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_1.html b/doc/api-ref/html/search/defines_1.html
new file mode 100644
index 0000000..91488cb
--- /dev/null
+++ b/doc/api-ref/html/search/defines_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_1.js b/doc/api-ref/html/search/defines_1.js
new file mode 100644
index 0000000..ca7fddf
--- /dev/null
+++ b/doc/api-ref/html/search/defines_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['am_5fcmd_5fpath',['AM_CMD_PATH',['../soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291',1,'soundmanager.c']]],
+ ['am_5fname',['AM_NAME',['../soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461',1,'soundmanager.c']]],
+ ['am_5froute_5fpath',['AM_ROUTE_PATH',['../soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_2.html b/doc/api-ref/html/search/defines_2.html
new file mode 100644
index 0000000..8655993
--- /dev/null
+++ b/doc/api-ref/html/search/defines_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_2.js b/doc/api-ref/html/search/defines_2.js
new file mode 100644
index 0000000..1d68a26
--- /dev/null
+++ b/doc/api-ref/html/search/defines_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['command_5fevent_5fnum',['COMMAND_EVENT_NUM',['../soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_3.html b/doc/api-ref/html/search/defines_3.html
new file mode 100644
index 0000000..a55d3ff
--- /dev/null
+++ b/doc/api-ref/html/search/defines_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_3.js b/doc/api-ref/html/search/defines_3.js
new file mode 100644
index 0000000..dacb0bc
--- /dev/null
+++ b/doc/api-ref/html/search/defines_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['dlog',['DLOG',['../libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d',1,'libsoundmanager.cpp']]]
+];
diff --git a/doc/api-ref/html/search/defines_4.html b/doc/api-ref/html/search/defines_4.html
new file mode 100644
index 0000000..54da39a
--- /dev/null
+++ b/doc/api-ref/html/search/defines_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_4.js b/doc/api-ref/html/search/defines_4.js
new file mode 100644
index 0000000..0be396a
--- /dev/null
+++ b/doc/api-ref/html/search/defines_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['elog',['ELOG',['../libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca',1,'libsoundmanager.cpp']]]
+];
diff --git a/doc/api-ref/html/search/defines_5.html b/doc/api-ref/html/search/defines_5.html
new file mode 100644
index 0000000..dd7bfdc
--- /dev/null
+++ b/doc/api-ref/html/search/defines_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_5.js b/doc/api-ref/html/search/defines_5.js
new file mode 100644
index 0000000..da39044
--- /dev/null
+++ b/doc/api-ref/html/search/defines_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['max_5flen_5fstr',['MAX_LEN_STR',['../soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_6.html b/doc/api-ref/html/search/defines_6.html
new file mode 100644
index 0000000..58d00e9
--- /dev/null
+++ b/doc/api-ref/html/search/defines_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_6.js b/doc/api-ref/html/search/defines_6.js
new file mode 100644
index 0000000..3faadd4
--- /dev/null
+++ b/doc/api-ref/html/search/defines_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['routing_5fevent_5fnum',['ROUTING_EVENT_NUM',['../soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_7.html b/doc/api-ref/html/search/defines_7.html
new file mode 100644
index 0000000..275e1b3
--- /dev/null
+++ b/doc/api-ref/html/search/defines_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_7.js b/doc/api-ref/html/search/defines_7.js
new file mode 100644
index 0000000..84e27d8
--- /dev/null
+++ b/doc/api-ref/html/search/defines_7.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['sound_5fmanager_5fname',['SOUND_MANAGER_NAME',['../soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0',1,'soundmanager.c']]],
+ ['sound_5fmanager_5fpath',['SOUND_MANAGER_PATH',['../soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/files_0.html b/doc/api-ref/html/search/files_0.html
new file mode 100644
index 0000000..4f272b8
--- /dev/null
+++ b/doc/api-ref/html/search/files_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/files_0.js b/doc/api-ref/html/search/files_0.js
new file mode 100644
index 0000000..5bbdd4a
--- /dev/null
+++ b/doc/api-ref/html/search/files_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['libsoundmanager_2ecpp',['libsoundmanager.cpp',['../libsoundmanager_8cpp.html',1,'']]],
+ ['libsoundmanager_2ehpp',['libsoundmanager.hpp',['../libsoundmanager_8hpp.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/files_1.html b/doc/api-ref/html/search/files_1.html
new file mode 100644
index 0000000..dcce422
--- /dev/null
+++ b/doc/api-ref/html/search/files_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/files_1.js b/doc/api-ref/html/search/files_1.js
new file mode 100644
index 0000000..b6ebd2c
--- /dev/null
+++ b/doc/api-ref/html/search/files_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['soundmanager_2ec',['soundmanager.c',['../soundmanager_8c.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/files_2.html b/doc/api-ref/html/search/files_2.html
new file mode 100644
index 0000000..d5c6c3b
--- /dev/null
+++ b/doc/api-ref/html/search/files_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/files_2.js b/doc/api-ref/html/search/files_2.js
new file mode 100644
index 0000000..2abceaa
--- /dev/null
+++ b/doc/api-ref/html/search/files_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['test_2ecpp',['test.cpp',['../test_8cpp.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/functions_0.html b/doc/api-ref/html/search/functions_0.html
new file mode 100644
index 0000000..4e6d87d
--- /dev/null
+++ b/doc/api-ref/html/search/functions_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_0.js b/doc/api-ref/html/search/functions_0.js
new file mode 100644
index 0000000..6ce8cfa
--- /dev/null
+++ b/doc/api-ref/html/search/functions_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['afbbindingv1register',['afbBindingV1Register',['../soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567',1,'soundmanager.c']]],
+ ['afbbindingv1serviceinit',['afbBindingV1ServiceInit',['../soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/functions_1.html b/doc/api-ref/html/search/functions_1.html
new file mode 100644
index 0000000..b343e2d
--- /dev/null
+++ b/doc/api-ref/html/search/functions_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_1.js b/doc/api-ref/html/search/functions_1.js
new file mode 100644
index 0000000..caf07a6
--- /dev/null
+++ b/doc/api-ref/html/search/functions_1.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['call',['call',['../class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773',1,'LibSoundmanager']]],
+ ['call_5fsync',['call_sync',['../class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_2.html b/doc/api-ref/html/search/functions_2.html
new file mode 100644
index 0000000..ecce2f3
--- /dev/null
+++ b/doc/api-ref/html/search/functions_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_2.js b/doc/api-ref/html/search/functions_2.js
new file mode 100644
index 0000000..6bc3e4c
--- /dev/null
+++ b/doc/api-ref/html/search/functions_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['libsoundmanager',['LibSoundmanager',['../class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_3.html b/doc/api-ref/html/search/functions_3.html
new file mode 100644
index 0000000..15f06ab
--- /dev/null
+++ b/doc/api-ref/html/search/functions_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_3.js b/doc/api-ref/html/search/functions_3.js
new file mode 100644
index 0000000..a52fe02
--- /dev/null
+++ b/doc/api-ref/html/search/functions_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['main',['main',['../test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'test.cpp']]]
+];
diff --git a/doc/api-ref/html/search/functions_4.html b/doc/api-ref/html/search/functions_4.html
new file mode 100644
index 0000000..8985ff2
--- /dev/null
+++ b/doc/api-ref/html/search/functions_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_4.js b/doc/api-ref/html/search/functions_4.js
new file mode 100644
index 0000000..07d9659
--- /dev/null
+++ b/doc/api-ref/html/search/functions_4.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['on_5fcall',['on_call',['../class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0',1,'LibSoundmanager']]],
+ ['on_5fevent',['on_event',['../class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e',1,'LibSoundmanager']]],
+ ['on_5fhangup',['on_hangup',['../class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6',1,'LibSoundmanager']]],
+ ['on_5freply',['on_reply',['../class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_5.html b/doc/api-ref/html/search/functions_5.html
new file mode 100644
index 0000000..0314918
--- /dev/null
+++ b/doc/api-ref/html/search/functions_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_5.js b/doc/api-ref/html/search/functions_5.js
new file mode 100644
index 0000000..7e4a2c1
--- /dev/null
+++ b/doc/api-ref/html/search/functions_5.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['register_5fcallback',['register_callback',['../class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74',1,'LibSoundmanager']]],
+ ['run_5feventloop',['run_eventloop',['../class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_6.html b/doc/api-ref/html/search/functions_6.html
new file mode 100644
index 0000000..c506123
--- /dev/null
+++ b/doc/api-ref/html/search/functions_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_6.js b/doc/api-ref/html/search/functions_6.js
new file mode 100644
index 0000000..4c6ed89
--- /dev/null
+++ b/doc/api-ref/html/search/functions_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['subscribe',['subscribe',['../class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_7.html b/doc/api-ref/html/search/functions_7.html
new file mode 100644
index 0000000..83a7b84
--- /dev/null
+++ b/doc/api-ref/html/search/functions_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_7.js b/doc/api-ref/html/search/functions_7.js
new file mode 100644
index 0000000..3c4ce14
--- /dev/null
+++ b/doc/api-ref/html/search/functions_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['unsubscribe',['unsubscribe',['../class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_8.html b/doc/api-ref/html/search/functions_8.html
new file mode 100644
index 0000000..b55f0e6
--- /dev/null
+++ b/doc/api-ref/html/search/functions_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_8.js b/doc/api-ref/html/search/functions_8.js
new file mode 100644
index 0000000..8beb9df
--- /dev/null
+++ b/doc/api-ref/html/search/functions_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_7elibsoundmanager',['~LibSoundmanager',['../class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/mag_sel.png b/doc/api-ref/html/search/mag_sel.png
new file mode 100644
index 0000000..81f6040
--- /dev/null
+++ b/doc/api-ref/html/search/mag_sel.png
Binary files differ
diff --git a/doc/api-ref/html/search/nomatches.html b/doc/api-ref/html/search/nomatches.html
new file mode 100644
index 0000000..b1ded27
--- /dev/null
+++ b/doc/api-ref/html/search/nomatches.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/search.css b/doc/api-ref/html/search/search.css
new file mode 100644
index 0000000..3cf9df9
--- /dev/null
+++ b/doc/api-ref/html/search/search.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+ float: left;
+}
+
+#MSearchBox {
+ white-space : nowrap;
+ float: none;
+ margin-top: 8px;
+ right: 0px;
+ width: 170px;
+ height: 24px;
+ z-index: 102;
+}
+
+#MSearchBox .left
+{
+ display:block;
+ position:absolute;
+ left:10px;
+ width:20px;
+ height:19px;
+ background:url('search_l.png') no-repeat;
+ background-position:right;
+}
+
+#MSearchSelect {
+ display:block;
+ position:absolute;
+ width:20px;
+ height:19px;
+}
+
+.left #MSearchSelect {
+ left:4px;
+}
+
+.right #MSearchSelect {
+ right:5px;
+}
+
+#MSearchField {
+ display:block;
+ position:absolute;
+ height:19px;
+ background:url('search_m.png') repeat-x;
+ border:none;
+ width:115px;
+ margin-left:20px;
+ padding-left:4px;
+ color: #909090;
+ outline: none;
+ font: 9pt Arial, Verdana, sans-serif;
+ -webkit-border-radius: 0px;
+}
+
+#FSearchBox #MSearchField {
+ margin-left:15px;
+}
+
+#MSearchBox .right {
+ display:block;
+ position:absolute;
+ right:10px;
+ top:8px;
+ width:20px;
+ height:19px;
+ background:url('search_r.png') no-repeat;
+ background-position:left;
+}
+
+#MSearchClose {
+ display: none;
+ position: absolute;
+ top: 4px;
+ background : none;
+ border: none;
+ margin: 0px 4px 0px 0px;
+ padding: 0px 0px;
+ outline: none;
+}
+
+.left #MSearchClose {
+ left: 6px;
+}
+
+.right #MSearchClose {
+ right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #90A5CE;
+ background-color: #F9FAFC;
+ z-index: 10001;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: #3D578C;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ width: 60ex;
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: #EEF1F7;
+ z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+}
+
+.SRResult {
+ display: none;
+}
+
+DIV.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+ background-color: #F0F3F8;
+}
+
+.pages b {
+ color: white;
+ padding: 5px 5px 3px 5px;
+ background-image: url("../tab_a.png");
+ background-repeat: repeat-x;
+ text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+ line-height: 17px;
+ margin-left: 4px;
+ text-decoration: none;
+}
+
+.hl {
+ font-weight: bold;
+}
+
+#searchresults {
+ margin-bottom: 20px;
+}
+
+.searchpages {
+ margin-top: 10px;
+}
+
diff --git a/doc/api-ref/html/search/search.js b/doc/api-ref/html/search/search.js
new file mode 100644
index 0000000..dedce3b
--- /dev/null
+++ b/doc/api-ref/html/search/search.js
@@ -0,0 +1,791 @@
+function convertToId(search)
+{
+ var result = '';
+ for (i=0;i<search.length;i++)
+ {
+ var c = search.charAt(i);
+ var cn = c.charCodeAt(0);
+ if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+ {
+ result+=c;
+ }
+ else if (cn<16)
+ {
+ result+="_0"+cn.toString(16);
+ }
+ else
+ {
+ result+="_"+cn.toString(16);
+ }
+ }
+ return result;
+}
+
+function getXPos(item)
+{
+ var x = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ x += item.offsetLeft;
+ item = item.offsetParent;
+ }
+ }
+ return x;
+}
+
+function getYPos(item)
+{
+ var y = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ y += item.offsetTop;
+ item = item.offsetParent;
+ }
+ }
+ return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+ Parameters:
+ name - The name of the global variable that will be
+ storing this instance. Is needed to be able to set timeouts.
+ resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+ if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
+
+ // ---------- Instance variables
+ this.name = name;
+ this.resultsPath = resultsPath;
+ this.keyTimeout = 0;
+ this.keyTimeoutLength = 500;
+ this.closeSelectionTimeout = 300;
+ this.lastSearchValue = "";
+ this.lastResultsPage = "";
+ this.hideTimeout = 0;
+ this.searchIndex = 0;
+ this.searchActive = false;
+ this.insideFrame = inFrame;
+ this.searchLabel = label;
+
+ // ----------- DOM Elements
+
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); }
+
+ this.DOMSearchSelect = function()
+ { return document.getElementById("MSearchSelect"); }
+
+ this.DOMSearchSelectWindow = function()
+ { return document.getElementById("MSearchSelectWindow"); }
+
+ this.DOMPopupSearchResults = function()
+ { return document.getElementById("MSearchResults"); }
+
+ this.DOMPopupSearchResultsWindow = function()
+ { return document.getElementById("MSearchResultsWindow"); }
+
+ this.DOMSearchClose = function()
+ { return document.getElementById("MSearchClose"); }
+
+ this.DOMSearchBox = function()
+ { return document.getElementById("MSearchBox"); }
+
+ // ------------ Event Handlers
+
+ // Called when focus is added or removed from the search field.
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ }
+
+ this.OnSearchSelectShow = function()
+ {
+ var searchSelectWindow = this.DOMSearchSelectWindow();
+ var searchField = this.DOMSearchSelect();
+
+ if (this.insideFrame)
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ left += searchField.offsetWidth + 6;
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ left -= searchSelectWindow.offsetWidth;
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+ else
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+
+ // stop selection hide timer
+ if (this.hideTimeout)
+ {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout=0;
+ }
+ return false; // to avoid "image drag" default event
+ }
+
+ this.OnSearchSelectHide = function()
+ {
+ this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+ this.closeSelectionTimeout);
+ }
+
+ // Called when the content of the search field is changed.
+ this.OnSearchFieldChange = function(evt)
+ {
+ if (this.keyTimeout) // kill running timer
+ {
+ clearTimeout(this.keyTimeout);
+ this.keyTimeout = 0;
+ }
+
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 || e.keyCode==13)
+ {
+ if (e.shiftKey==1)
+ {
+ this.OnSearchSelectShow();
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ child.focus();
+ return;
+ }
+ }
+ return;
+ }
+ else if (window.frames.MSearchResults.searchResults)
+ {
+ var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+ }
+ else if (e.keyCode==27) // Escape out of the search field
+ {
+ this.DOMSearchField().blur();
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ this.Activate(false);
+ return;
+ }
+
+ // strip whitespaces
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != this.lastSearchValue) // search value has changed
+ {
+ if (searchValue != "") // non-empty search
+ {
+ // set timer for search update
+ this.keyTimeout = setTimeout(this.name + '.Search()',
+ this.keyTimeoutLength);
+ }
+ else // empty search field
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ }
+ }
+ }
+
+ this.SelectItemCount = function(id)
+ {
+ var count=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ this.SelectItemSet = function(id)
+ {
+ var i,j=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ var node = child.firstChild;
+ if (j==id)
+ {
+ node.innerHTML='&#8226;';
+ }
+ else
+ {
+ node.innerHTML='&#160;';
+ }
+ j++;
+ }
+ }
+ }
+
+ // Called when an search filter selection is made.
+ // set item with index id as the active item
+ this.OnSelectItem = function(id)
+ {
+ this.searchIndex = id;
+ this.SelectItemSet(id);
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+ if (searchValue!="" && this.searchActive) // something was found -> do a search
+ {
+ this.Search();
+ }
+ }
+
+ this.OnSearchSelectKey = function(evt)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+ {
+ this.searchIndex++;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==38 && this.searchIndex>0) // Up
+ {
+ this.searchIndex--;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==13 || e.keyCode==27)
+ {
+ this.OnSelectItem(this.searchIndex);
+ this.CloseSelectionWindow();
+ this.DOMSearchField().focus();
+ }
+ return false;
+ }
+
+ // --------- Actions
+
+ // Closes the results window.
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.Activate(false);
+ }
+
+ this.CloseSelectionWindow = function()
+ {
+ this.DOMSearchSelectWindow().style.display = 'none';
+ }
+
+ // Performs a search.
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ // strip leading whitespace
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+ var code = searchValue.toLowerCase().charCodeAt(0);
+ var idxChar = searchValue.substr(0, 1).toLowerCase();
+ if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+ {
+ idxChar = searchValue.substr(0, 2);
+ }
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+ if (idx!=-1)
+ {
+ var hexCode=idx.toString(16);
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else // nothing available for this search term
+ {
+ resultsPage = this.resultsPath + '/nomatches.html';
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ }
+
+ window.frames.MSearchResults.location = resultsPageWithSearch;
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (domPopupSearchResultsWindow.style.display!='block')
+ {
+ var domSearchBox = this.DOMSearchBox();
+ this.DOMSearchClose().style.display = 'inline';
+ if (this.insideFrame)
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ domPopupSearchResultsWindow.style.position = 'relative';
+ domPopupSearchResultsWindow.style.display = 'block';
+ var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+ domPopupSearchResultsWindow.style.width = width + 'px';
+ domPopupSearchResults.style.width = width + 'px';
+ }
+ else
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+ var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
+ domPopupSearchResultsWindow.style.display = 'block';
+ left -= domPopupSearchResults.offsetWidth;
+ domPopupSearchResultsWindow.style.top = top + 'px';
+ domPopupSearchResultsWindow.style.left = left + 'px';
+ }
+ }
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ }
+
+ // -------- Activation Functions
+
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
+ this.Activate = function(isActive)
+ {
+ if (isActive || // open it
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
+ )
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+ {
+ searchField.value = '';
+ this.searchActive = true;
+ }
+ }
+ else if (!isActive) // directly remove the panel
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ this.searchActive = false;
+ this.lastSearchValue = ''
+ this.lastResultsPage = '';
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+ // The number of matches from the last run of <Search()>.
+ this.lastMatchCount = 0;
+ this.lastKey = 0;
+ this.repeatOn = false;
+
+ // Toggles the visibility of the passed element ID.
+ this.FindChildElement = function(id)
+ {
+ var parentElement = document.getElementById(id);
+ var element = parentElement.firstChild;
+
+ while (element && element!=parentElement)
+ {
+ if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+ {
+ return element;
+ }
+
+ if (element.nodeName == 'DIV' && element.hasChildNodes())
+ {
+ element = element.firstChild;
+ }
+ else if (element.nextSibling)
+ {
+ element = element.nextSibling;
+ }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element!=parentElement && !element.nextSibling);
+
+ if (element && element!=parentElement)
+ {
+ element = element.nextSibling;
+ }
+ }
+ }
+ }
+
+ this.Toggle = function(id)
+ {
+ var element = this.FindChildElement(id);
+ if (element)
+ {
+ if (element.style.display == 'block')
+ {
+ element.style.display = 'none';
+ }
+ else
+ {
+ element.style.display = 'block';
+ }
+ }
+ }
+
+ // Searches for the passed string. If there is no parameter,
+ // it takes it from the URL query.
+ //
+ // Always returns true, since other documents may try to call it
+ // and that may or may not be possible.
+ this.Search = function(search)
+ {
+ if (!search) // get search word from URL
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading '?'
+ search = unescape(search);
+ }
+
+ search = search.replace(/^ +/, ""); // strip leading spaces
+ search = search.replace(/ +$/, ""); // strip trailing spaces
+ search = search.toLowerCase();
+ search = convertToId(search);
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+ if (search.length<=rowMatchName.length &&
+ rowMatchName.substr(0, search.length)==search)
+ {
+ row.style.display = 'block';
+ matches++;
+ }
+ else
+ {
+ row.style.display = 'none';
+ }
+ }
+ i++;
+ }
+ document.getElementById("Searching").style.display='none';
+ if (matches == 0) // no results
+ {
+ document.getElementById("NoMatches").style.display='block';
+ }
+ else // at least one result
+ {
+ document.getElementById("NoMatches").style.display='none';
+ }
+ this.lastMatchCount = matches;
+ return true;
+ }
+
+ // return the first item with index index or higher that is visible
+ this.NavNext = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index++;
+ }
+ return focusItem;
+ }
+
+ this.NavPrev = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index--;
+ }
+ return focusItem;
+ }
+
+ this.ProcessKeys = function(e)
+ {
+ if (e.type == "keydown")
+ {
+ this.repeatOn = false;
+ this.lastKey = e.keyCode;
+ }
+ else if (e.type == "keypress")
+ {
+ if (!this.repeatOn)
+ {
+ if (this.lastKey) this.repeatOn = true;
+ return false; // ignore first keypress after keydown
+ }
+ }
+ else if (e.type == "keyup")
+ {
+ this.lastKey = 0;
+ this.repeatOn = false;
+ }
+ return this.lastKey!=0;
+ }
+
+ this.Nav = function(evt,itemIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ var newIndex = itemIndex-1;
+ var focusItem = this.NavPrev(newIndex);
+ if (focusItem)
+ {
+ var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+ if (child && child.style.display == 'block') // children visible
+ {
+ var n=0;
+ var tmpElem;
+ while (1) // search for last child
+ {
+ tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+ if (tmpElem)
+ {
+ focusItem = tmpElem;
+ }
+ else // found it!
+ {
+ break;
+ }
+ n++;
+ }
+ }
+ }
+ if (focusItem)
+ {
+ focusItem.focus();
+ }
+ else // return focus to search field
+ {
+ parent.document.getElementById("MSearchField").focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = itemIndex+1;
+ var focusItem;
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem && elem.style.display == 'block') // children visible
+ {
+ focusItem = document.getElementById('Item'+itemIndex+'_c0');
+ }
+ if (!focusItem) focusItem = this.NavNext(newIndex);
+ if (focusItem) focusItem.focus();
+ }
+ else if (this.lastKey==39) // Right
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'block';
+ }
+ else if (this.lastKey==37) // Left
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'none';
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+
+ this.NavChild = function(evt,itemIndex,childIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ if (childIndex>0)
+ {
+ var newIndex = childIndex-1;
+ document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+ }
+ else // already at first child, jump to parent
+ {
+ document.getElementById('Item'+itemIndex).focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = childIndex+1;
+ var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+ if (!elem) // last child, jump to parent next parent
+ {
+ elem = this.NavNext(itemIndex+1);
+ }
+ if (elem)
+ {
+ elem.focus();
+ }
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+function setKeyActions(elem,action)
+{
+ elem.setAttribute('onkeydown',action);
+ elem.setAttribute('onkeypress',action);
+ elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+ elem.setAttribute('class',attr);
+ elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+ var results = document.getElementById("SRResults");
+ for (var e=0; e<searchData.length; e++)
+ {
+ var id = searchData[e][0];
+ var srResult = document.createElement('div');
+ srResult.setAttribute('id','SR_'+id);
+ setClassAttr(srResult,'SRResult');
+ var srEntry = document.createElement('div');
+ setClassAttr(srEntry,'SREntry');
+ var srLink = document.createElement('a');
+ srLink.setAttribute('id','Item'+e);
+ setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+ setClassAttr(srLink,'SRSymbol');
+ srLink.innerHTML = searchData[e][1][0];
+ srEntry.appendChild(srLink);
+ if (searchData[e][1].length==2) // single result
+ {
+ srLink.setAttribute('href',searchData[e][1][1][0]);
+ if (searchData[e][1][1][1])
+ {
+ srLink.setAttribute('target','_parent');
+ }
+ var srScope = document.createElement('span');
+ setClassAttr(srScope,'SRScope');
+ srScope.innerHTML = searchData[e][1][1][2];
+ srEntry.appendChild(srScope);
+ }
+ else // multiple results
+ {
+ srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+ var srChildren = document.createElement('div');
+ setClassAttr(srChildren,'SRChildren');
+ for (var c=0; c<searchData[e][1].length-1; c++)
+ {
+ var srChild = document.createElement('a');
+ srChild.setAttribute('id','Item'+e+'_c'+c);
+ setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+ setClassAttr(srChild,'SRScope');
+ srChild.setAttribute('href',searchData[e][1][c+1][0]);
+ if (searchData[e][1][c+1][1])
+ {
+ srChild.setAttribute('target','_parent');
+ }
+ srChild.innerHTML = searchData[e][1][c+1][2];
+ srChildren.appendChild(srChild);
+ }
+ srEntry.appendChild(srChildren);
+ }
+ srResult.appendChild(srEntry);
+ results.appendChild(srResult);
+ }
+}
+
+function init_search()
+{
+ var results = document.getElementById("MSearchSelectWindow");
+ for (var key in indexSectionLabels)
+ {
+ var link = document.createElement('a');
+ link.setAttribute('class','SelectItem');
+ link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+ link.href='javascript:void(0)';
+ link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+ results.appendChild(link);
+ }
+ searchBox.OnSelectItem(0);
+}
+
diff --git a/doc/api-ref/html/search/search_l.png b/doc/api-ref/html/search/search_l.png
new file mode 100644
index 0000000..c872f4d
--- /dev/null
+++ b/doc/api-ref/html/search/search_l.png
Binary files differ
diff --git a/doc/api-ref/html/search/search_m.png b/doc/api-ref/html/search/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/doc/api-ref/html/search/search_m.png
Binary files differ
diff --git a/doc/api-ref/html/search/search_r.png b/doc/api-ref/html/search/search_r.png
new file mode 100644
index 0000000..97ee8b4
--- /dev/null
+++ b/doc/api-ref/html/search/search_r.png
Binary files differ
diff --git a/doc/api-ref/html/search/searchdata.js b/doc/api-ref/html/search/searchdata.js
new file mode 100644
index 0000000..71ea2d3
--- /dev/null
+++ b/doc/api-ref/html/search/searchdata.js
@@ -0,0 +1,30 @@
+var indexSectionsWithContent =
+{
+ 0: "_acdelmnorstu~",
+ 1: "el",
+ 2: "lst",
+ 3: "aclmorsu~",
+ 4: "aens",
+ 5: "_acdemrs"
+};
+
+var indexSectionNames =
+{
+ 0: "all",
+ 1: "classes",
+ 2: "files",
+ 3: "functions",
+ 4: "variables",
+ 5: "defines"
+};
+
+var indexSectionLabels =
+{
+ 0: "All",
+ 1: "Data Structures",
+ 2: "Files",
+ 3: "Functions",
+ 4: "Variables",
+ 5: "Macros"
+};
+
diff --git a/doc/api-ref/html/search/variables_0.html b/doc/api-ref/html/search/variables_0.html
new file mode 100644
index 0000000..74ce807
--- /dev/null
+++ b/doc/api-ref/html/search/variables_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/variables_0.js b/doc/api-ref/html/search/variables_0.js
new file mode 100644
index 0000000..2e775a1
--- /dev/null
+++ b/doc/api-ref/html/search/variables_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['api_5flist',['api_list',['../libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f',1,'libsoundmanager.hpp']]]
+];
diff --git a/doc/api-ref/html/search/variables_1.html b/doc/api-ref/html/search/variables_1.html
new file mode 100644
index 0000000..84237b6
--- /dev/null
+++ b/doc/api-ref/html/search/variables_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/variables_1.js b/doc/api-ref/html/search/variables_1.js
new file mode 100644
index 0000000..303e342
--- /dev/null
+++ b/doc/api-ref/html/search/variables_1.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['event',['event',['../structevent.html#a58726ebc551d36562ac3f9e1fe293214',1,'event']]],
+ ['event_5flist',['event_list',['../libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0',1,'libsoundmanager.hpp']]]
+];
diff --git a/doc/api-ref/html/search/variables_2.html b/doc/api-ref/html/search/variables_2.html
new file mode 100644
index 0000000..5c9de1a
--- /dev/null
+++ b/doc/api-ref/html/search/variables_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/variables_2.js b/doc/api-ref/html/search/variables_2.js
new file mode 100644
index 0000000..d6f2e90
--- /dev/null
+++ b/doc/api-ref/html/search/variables_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['name',['name',['../structevent.html#a723489bec273335d13513cd1040c0216',1,'event']]]
+];
diff --git a/doc/api-ref/html/search/variables_3.html b/doc/api-ref/html/search/variables_3.html
new file mode 100644
index 0000000..f95e34c
--- /dev/null
+++ b/doc/api-ref/html/search/variables_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/variables_3.js b/doc/api-ref/html/search/variables_3.js
new file mode 100644
index 0000000..4f3ec89
--- /dev/null
+++ b/doc/api-ref/html/search/variables_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['sm',['sm',['../test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022',1,'test.cpp']]]
+];
diff --git a/doc/api-ref/html/soundmanager_8c.html b/doc/api-ref/html/soundmanager_8c.html
new file mode 100644
index 0000000..01ac3bb
--- /dev/null
+++ b/doc/api-ref/html/soundmanager_8c.html
@@ -0,0 +1,334 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/soundmanager_binging/soundmanager.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('soundmanager_8c.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">soundmanager.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br />
+<code>#include &lt;string.h&gt;</code><br />
+<code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &lt;unistd.h&gt;</code><br />
+<code>#include &lt;json-c/json.h&gt;</code><br />
+<code>#include &lt;pthread.h&gt;</code><br />
+<code>#include &lt;afb/afb-binding.h&gt;</code><br />
+<code>#include &quot;sm-helper.h&quot;</code><br />
+<code>#include &quot;dbus/audio_manager_interface.h&quot;</code><br />
+</div>
+<p><a href="soundmanager_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structevent.html">event</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a369266c24eacffb87046522897a570d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a369266c24eacffb87046522897a570d5">_GNU_SOURCE</a></td></tr>
+<tr class="separator:a369266c24eacffb87046522897a570d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad25089fbfd55bf795bed283a5b283461"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">AM_NAME</a>&#160;&#160;&#160;&quot;org.genivi.audiomanager&quot;</td></tr>
+<tr class="separator:ad25089fbfd55bf795bed283a5b283461"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa98a8b4c63efeb6e209144e7b247291"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">AM_CMD_PATH</a>&#160;&#160;&#160;&quot;/org/genivi/audiomanager/commandinterface&quot;</td></tr>
+<tr class="separator:afa98a8b4c63efeb6e209144e7b247291"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a50fb496af125690fb276944b3b4cff"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">AM_ROUTE_PATH</a>&#160;&#160;&#160;&quot;/org/genivi/audiomanager/routinginterface&quot;</td></tr>
+<tr class="separator:a9a50fb496af125690fb276944b3b4cff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b2ae077f774994129a3c231be6703a0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">SOUND_MANAGER_NAME</a>&#160;&#160;&#160;&quot;org.soundmanager.genivi.routingsend&quot;</td></tr>
+<tr class="separator:a9b2ae077f774994129a3c231be6703a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2690d3e2461f5a2f9bb0720d657280da"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">SOUND_MANAGER_PATH</a>&#160;&#160;&#160;&quot;org/soundmanager/genivi/routingsend&quot;</td></tr>
+<tr class="separator:a2690d3e2461f5a2f9bb0720d657280da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09f43d9e7e1c5d2198c0d66024b4500e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">COMMAND_EVENT_NUM</a>&#160;&#160;&#160;10</td></tr>
+<tr class="separator:a09f43d9e7e1c5d2198c0d66024b4500e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33d1c40de8a5e7a3d6f0e2f45de9f37f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">ROUTING_EVENT_NUM</a>&#160;&#160;&#160;10</td></tr>
+<tr class="separator:a33d1c40de8a5e7a3d6f0e2f45de9f37f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab29566f6eaf3523d21c1465a3ff71570"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570">MAX_LEN_STR</a>&#160;&#160;&#160;100</td></tr>
+<tr class="separator:ab29566f6eaf3523d21c1465a3ff71570"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a88642b2e51aa08fd18fdfc8017c8d567"><td class="memItemLeft" align="right" valign="top">const struct afb_binding *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">afbBindingV1Register</a> (const struct afb_binding_interface *itf)</td></tr>
+<tr class="separator:a88642b2e51aa08fd18fdfc8017c8d567"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aace0247d919659df209ceb7dbeff6a2d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">afbBindingV1ServiceInit</a> (struct afb_service service)</td></tr>
+<tr class="separator:aace0247d919659df209ceb7dbeff6a2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a369266c24eacffb87046522897a570d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a369266c24eacffb87046522897a570d5">&#9670;&nbsp;</a></span>_GNU_SOURCE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _GNU_SOURCE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00017">17</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="afa98a8b4c63efeb6e209144e7b247291"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa98a8b4c63efeb6e209144e7b247291">&#9670;&nbsp;</a></span>AM_CMD_PATH</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define AM_CMD_PATH&#160;&#160;&#160;&quot;/org/genivi/audiomanager/commandinterface&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00032">32</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="ad25089fbfd55bf795bed283a5b283461"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad25089fbfd55bf795bed283a5b283461">&#9670;&nbsp;</a></span>AM_NAME</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define AM_NAME&#160;&#160;&#160;&quot;org.genivi.audiomanager&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00031">31</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a9a50fb496af125690fb276944b3b4cff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a50fb496af125690fb276944b3b4cff">&#9670;&nbsp;</a></span>AM_ROUTE_PATH</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define AM_ROUTE_PATH&#160;&#160;&#160;&quot;/org/genivi/audiomanager/routinginterface&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00033">33</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a09f43d9e7e1c5d2198c0d66024b4500e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a09f43d9e7e1c5d2198c0d66024b4500e">&#9670;&nbsp;</a></span>COMMAND_EVENT_NUM</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COMMAND_EVENT_NUM&#160;&#160;&#160;10</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00037">37</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="ab29566f6eaf3523d21c1465a3ff71570"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab29566f6eaf3523d21c1465a3ff71570">&#9670;&nbsp;</a></span>MAX_LEN_STR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MAX_LEN_STR&#160;&#160;&#160;100</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00039">39</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a33d1c40de8a5e7a3d6f0e2f45de9f37f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a33d1c40de8a5e7a3d6f0e2f45de9f37f">&#9670;&nbsp;</a></span>ROUTING_EVENT_NUM</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ROUTING_EVENT_NUM&#160;&#160;&#160;10</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00038">38</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a9b2ae077f774994129a3c231be6703a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b2ae077f774994129a3c231be6703a0">&#9670;&nbsp;</a></span>SOUND_MANAGER_NAME</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SOUND_MANAGER_NAME&#160;&#160;&#160;&quot;org.soundmanager.genivi.routingsend&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00034">34</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a2690d3e2461f5a2f9bb0720d657280da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2690d3e2461f5a2f9bb0720d657280da">&#9670;&nbsp;</a></span>SOUND_MANAGER_PATH</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SOUND_MANAGER_PATH&#160;&#160;&#160;&quot;org/soundmanager/genivi/routingsend&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00035">35</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a88642b2e51aa08fd18fdfc8017c8d567"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a88642b2e51aa08fd18fdfc8017c8d567">&#9670;&nbsp;</a></span>afbBindingV1Register()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const struct afb_binding* afbBindingV1Register </td>
+ <td>(</td>
+ <td class="paramtype">const struct afb_binding_interface *&#160;</td>
+ <td class="paramname"><em>itf</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l01137">1137</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="aace0247d919659df209ceb7dbeff6a2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aace0247d919659df209ceb7dbeff6a2d">&#9670;&nbsp;</a></span>afbBindingV1ServiceInit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int afbBindingV1ServiceInit </td>
+ <td>(</td>
+ <td class="paramtype">struct afb_service&#160;</td>
+ <td class="paramname"><em>service</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l01145">1145</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_85932083476b47061c69d172796990a3.html">soundmanager_binging</a></li><li class="navelem"><a class="el" href="soundmanager_8c.html">soundmanager.c</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/soundmanager_8c.js b/doc/api-ref/html/soundmanager_8c.js
new file mode 100644
index 0000000..ed837d7
--- /dev/null
+++ b/doc/api-ref/html/soundmanager_8c.js
@@ -0,0 +1,15 @@
+var soundmanager_8c =
+[
+ [ "event", "structevent.html", "structevent" ],
+ [ "_GNU_SOURCE", "soundmanager_8c.html#a369266c24eacffb87046522897a570d5", null ],
+ [ "AM_CMD_PATH", "soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291", null ],
+ [ "AM_NAME", "soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461", null ],
+ [ "AM_ROUTE_PATH", "soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff", null ],
+ [ "COMMAND_EVENT_NUM", "soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e", null ],
+ [ "MAX_LEN_STR", "soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570", null ],
+ [ "ROUTING_EVENT_NUM", "soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f", null ],
+ [ "SOUND_MANAGER_NAME", "soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0", null ],
+ [ "SOUND_MANAGER_PATH", "soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da", null ],
+ [ "afbBindingV1Register", "soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567", null ],
+ [ "afbBindingV1ServiceInit", "soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/soundmanager_8c_source.html b/doc/api-ref/html/soundmanager_8c_source.html
new file mode 100644
index 0000000..30d2f9b
--- /dev/null
+++ b/doc/api-ref/html/soundmanager_8c_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/soundmanager_binging/soundmanager.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('soundmanager_8c_source.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">soundmanager.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="soundmanager_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (c) 2017 TOYOTA MOTOR CORPORATION</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a369266c24eacffb87046522897a570d5"> 17</a></span>&#160;<span class="preprocessor">#define _GNU_SOURCE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;json-c/json.h&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">//#include &lt;search.h&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;pthread.h&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;afb/afb-binding.h&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;sm-helper.h&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;glib.h&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;dbus/audio_manager_interface.h&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461"> 31</a></span>&#160;<span class="preprocessor">#define AM_NAME &quot;org.genivi.audiomanager&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291"> 32</a></span>&#160;<span class="preprocessor">#define AM_CMD_PATH &quot;/org/genivi/audiomanager/commandinterface&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff"> 33</a></span>&#160;<span class="preprocessor">#define AM_ROUTE_PATH &quot;/org/genivi/audiomanager/routinginterface&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0"> 34</a></span>&#160;<span class="preprocessor">#define SOUND_MANAGER_NAME &quot;org.soundmanager.genivi.routingsend&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da"> 35</a></span>&#160;<span class="preprocessor">#define SOUND_MANAGER_PATH &quot;org/soundmanager/genivi/routingsend&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e"> 37</a></span>&#160;<span class="preprocessor">#define COMMAND_EVENT_NUM 10</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f"> 38</a></span>&#160;<span class="preprocessor">#define ROUTING_EVENT_NUM 10</span></div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570"> 39</a></span>&#160;<span class="preprocessor">#define MAX_LEN_STR 100</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">const</span> <span class="keyword">static</span> <span class="keyword">struct </span>afb_binding_interface *afbitf;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">static</span> AudiomanagerCommandinterface *am_cmd_bus;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">static</span> AudiomanagerRoutinginterface *am_route_bus;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">static</span> OrgSoundmanagerGeniviRoutingsend *sm_adapter;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">static</span> OrgSoundmanagerGeniviRoutingsendIface* sm_itf;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">static</span> GMainLoop *loop = NULL;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">/* To Do hash table is better */</span></div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="structevent.html"> 49</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structevent.html">event</a>{</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="structevent.html#a723489bec273335d13513cd1040c0216"> 50</a></span>&#160; <span class="keywordtype">char</span>* <a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214"> 51</a></span>&#160; <span class="keyword">struct </span>afb_event* <a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; };</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structevent.html">event</a> command_event_list[<a class="code" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">COMMAND_EVENT_NUM</a>];</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structevent.html">event</a> routing_event_list[<a class="code" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">ROUTING_EVENT_NUM</a>];</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_new_connection;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_removed_main_connection;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_volume_changed;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_sink_mute_state_changed;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_main_connection_state_changed;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">/* Routing interface event */</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_set_routing_ready;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_set_routing_rundown;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_async_connect;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_async_set_source_state;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sourceid[] = <span class="stringliteral">&quot;sourceID&quot;</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sinkid[] = <span class="stringliteral">&quot;sinkID&quot;</span> ;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _main_connection_id[] = <span class="stringliteral">&quot;mainConnectionID&quot;</span>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _delay[] = <span class="stringliteral">&quot;delay&quot;</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _connectionState[] = <span class="stringliteral">&quot;connectionState&quot;</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _connectionID[] = <span class="stringliteral">&quot;connectionID&quot;</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _volume[] = <span class="stringliteral">&quot;volume&quot;</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _volumeStep[] = <span class="stringliteral">&quot;volumeStep&quot;</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _muteState[] = <span class="stringliteral">&quot;muteState&quot;</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _handle[] = <span class="stringliteral">&quot;handle&quot;</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _appname[] = <span class="stringliteral">&quot;appname&quot;</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _ramp[] = <span class="stringliteral">&quot;ramp&quot;</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _time[] = <span class="stringliteral">&quot;time&quot;</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sourceState[] = <span class="stringliteral">&quot;sourceState&quot;</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sourceClassID[] = <span class="stringliteral">&quot;sourceClassID&quot;</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _error[] = <span class="stringliteral">&quot;error&quot;</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sinkData[] = <span class="stringliteral">&quot;sinkData&quot;</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sourceData[] = <span class="stringliteral">&quot;sourceData&quot;</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _interruptState[] = <span class="stringliteral">&quot;interruptState&quot;</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _availability[] = <span class="stringliteral">&quot;availability&quot;</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _domainID[] = <span class="stringliteral">&quot;domainID&quot;</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _listvolumes[] = <span class="stringliteral">&quot;listvolumes&quot;</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _payload[] = <span class="stringliteral">&quot;payload&quot;</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _connectionFormat[] = <span class="stringliteral">&quot;connectionFormat&quot;</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">********** Method of Sound Manager (API) **********</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">/* call &quot;connect&quot; function of Audio Manager*/</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> connect (<span class="keyword">struct</span> afb_req request) </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;{</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call connect&quot;</span>);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; guint16 source_id, sink_id;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; guint16 main_connectionID = 0;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; gint16 ret;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">/* ToDo select appname or sourceID(sinkID) */</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; req_err1 = getid_uint16(request, _sourceid, &amp;source_id);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; req_err2 = getid_uint16(request, _sinkid, &amp;sink_id);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;getid_uint16 source ret = %d,sink ret = %d&quot;</span>, source_id, sink_id);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; NOTICE(afbitf,<span class="stringliteral">&quot;wrong request&quot;</span>);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>,NULL);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; audiomanager_commandinterface_call_connect_sync(</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; source_id,</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; sink_id,</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; &amp;ret,</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; &amp;main_connectionID,</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call connect&quot;</span>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">/* ToDo Remember appname(key) and tie to sourceID(value) */</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="comment">/*create response json object*/</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">struct </span>json_object *res = json_object_new_object();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; sm_add_object_to_json_object_func(res, __FUNCTION__, 4,</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret,</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; _main_connection_id, main_connectionID);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; afb_req_success(request, res, info);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment">/* call &quot;disconnect&quot; function of Audio Manager*/</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> disconnect (<span class="keyword">struct</span> afb_req request) </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;{</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call disconnect&quot;</span>);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; guint16 id;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; gint16 ret;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; REQ_ERROR req_err;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; req_err = getid_uint16(request, _main_connection_id, &amp;<span class="keywordtype">id</span>);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;requested %s = %d&quot;</span>, _main_connection_id, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span>(req_err != REQ_OK)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>,afb_req_value (request, _main_connection_id));</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; audiomanager_commandinterface_call_disconnect_sync(</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordtype">id</span>,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; &amp;ret,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;ret = %d&quot;</span>, ret);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call getListMainConnections&quot;</span>);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; afb_req_success(request, res_obj, info); <span class="comment">/* return error num as status */</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;}</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> setVolume (<span class="keyword">struct</span> afb_req request) </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;{</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call setVolume&quot;</span>);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; guint16 sink_id, vol;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; gint16 ret;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; req_err1 = getid_uint16(request, _sinkid, &amp;sink_id);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; req_err2 = getid_int16(request, _volume, &amp;vol);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;requested %s = %d, %s = %d&quot;</span>,_sinkid, sink_id, _volume, vol);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; audiomanager_commandinterface_call_set_volume_sync(</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; sink_id,</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; vol,</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; &amp;ret,</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;ret = %d&quot;</span>, ret);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call setVolume&quot;</span>);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; afb_req_success(request, res_obj, info); <span class="comment">/* return error num as status */</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;}</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> volumeStep (<span class="keyword">struct</span> afb_req request) </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;{</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call volumeStep&quot;</span>);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; guint16 sink_id, vol;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; gint16 ret;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; req_err1 = getid_uint16(request, _sinkid, &amp;sink_id);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; req_err2 = getid_int16(request, _volumeStep, &amp;vol);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;requested %s = %d, %s = %d&quot;</span>,_sinkid, sink_id, _volumeStep, vol);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; audiomanager_commandinterface_call_volume_step_sync(</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; sink_id,</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; vol,</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; &amp;ret,</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;ret = %d&quot;</span>, ret);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call volumeStep&quot;</span>);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; afb_req_success(request, res_obj, info); <span class="comment">/* return error num as status */</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;}</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment">/* 1 means mute, 2 means unmute */</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> setSinkMuteState(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;{</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call setSinkMuteStete&quot;</span>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; guint16 sink_id, mute;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; gint16 ret;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; req_err1 = getid_uint16(request, _sinkid, &amp;sink_id);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; req_err2 = getid_int16(request, _muteState, &amp;mute);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;requested %s = %d, %s = %d&quot;</span>,_sinkid, sink_id, _muteState, mute);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; audiomanager_commandinterface_call_set_sink_mute_state_sync(</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; sink_id,</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; mute,</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; &amp;ret,</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;ret = %d&quot;</span>, ret);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call setSinkMuteStete&quot;</span>);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; afb_req_success(request, res_obj, info); <span class="comment">/* return error num as status */</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment">/* call &quot;getListMainConnections&quot; function of Audio Manager */</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> getListMainConnections(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;{</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call getListMainConnections&quot;</span>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; guint16 ret;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; GVariant* mainConnectionList;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; audiomanager_commandinterface_call_get_list_main_connections_sync(</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; &amp;ret,</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; &amp;mainConnectionList,</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; NULL,</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; &amp;err</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; );</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;ret = %d, mainConnectionList pointer = %p&quot;</span>, ret, &amp;mainConnectionList);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call getListMainConnections&quot;</span>);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">/* create response */</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">struct </span>json_object *array_res = json_object_new_array();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; gsize size = g_variant_n_children(mainConnectionList);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;mainConnectionList size is %u&quot;</span>,(uint16_t)size);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">struct </span>json_object *verb_obj = json_object_new_object();</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; sm_add_object_to_json_object_func(verb_obj, __FUNCTION__, 0);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; json_object_array_add(array_res, verb_obj);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">if</span>(size &lt;= 0)</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; NOTICE(afbitf, <span class="stringliteral">&quot;mainConnectionList size is 0&quot;</span>);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; size; ++i)</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; guint16 mcid, srcid, sinkid;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; gint16 delay, constate;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; g_variant_get_child(</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; mainConnectionList,i,<span class="stringliteral">&quot;(qqqnn)&quot;</span>, </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; &amp;mcid, &amp;srcid, &amp;sinkid, &amp;delay, &amp;constate</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; );</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; sm_add_object_to_json_object_func(res_obj,__FUNCTION__,10,</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; _main_connection_id, mcid,</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; _sourceid, srcid,</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; _sinkid, sinkid,</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; _delay, delay,</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; _connectionState, constate</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; );</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; json_object_array_add(array_res,res_obj);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;json object :%s:&quot;</span>,json_object_to_json_string(array_res));</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; afb_req_success(request, array_res, <span class="stringliteral">&quot;Success to get main connection list&quot;</span>);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;}</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment">****** Routing Interface method(API) ***********</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackConnect(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;{</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call %s&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; guint16 handle, connection_id, error;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; REQ_ERROR req_err1, req_err2 , req_err3;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; req_err1 = getid_uint16(request, _handle, &amp;handle);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; req_err2 = getid_uint16(request, _connectionID, &amp;connection_id);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; req_err3 = getid_uint16(request, _error, &amp;error);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; </div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK) || (req_err3 != REQ_OK))</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">if</span>(connection_id == 0)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;connectionID is more than 0&quot;</span>);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; audiomanager_routinginterface_call_ack_connect_sync(</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; am_route_bus,</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; handle,</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; connection_id,</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; error,</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call ackConnect&quot;</span>);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;}</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackDisconnect(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;{</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call %s&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; guint16 handle, connection_id, error;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; REQ_ERROR req_err1, req_err2 , req_err3;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; </div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; req_err1 = getid_uint16(request, _handle, &amp;handle);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; req_err2 = getid_uint16(request, _connectionID, &amp;connection_id);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; req_err3 = getid_uint16(request, _error, &amp;error);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; </div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK) || (req_err3 != REQ_OK))</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;connectionID is more than 0&quot;</span>); </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span>(connection_id == 0)</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;connectionID is more than 0&quot;</span>);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; audiomanager_routinginterface_call_ack_disconnect_sync(</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; am_route_bus,</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; handle,</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; connection_id,</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; error,</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call ackDisconnect&quot;</span>);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;}</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackSetSourceState(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;{</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call %s&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; guint16 handle, error;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; </div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; req_err1 = getid_uint16(request, _handle, &amp;handle);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; req_err2 = getid_uint16(request, _error, &amp;error);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; </div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; NOTICE(afbitf,<span class="stringliteral">&quot;wrong request&quot;</span>);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL); </div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; audiomanager_routinginterface_call_ack_set_source_state_sync(</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; am_route_bus,</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; handle,</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; error,</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call ackDisconnect&quot;</span>);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;}</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> registerSink(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">/* This function will be deprecated because application will not register function*/</span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;}</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> deregisterSink(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;{</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">/* This function will be deprecated because application will not register function*/</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;}</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment">/* This function will be modified to abstract argument */</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> registerSource(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;{</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call %s&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; guint16 source_id; <span class="comment">/* q 0 is for dynamic id*/</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; guint16 domain_id; <span class="comment">/* q */</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; guint16 source_class_id; <span class="comment">/* q */</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; gint32 source_state = 1; <span class="comment">/* i SS_ON */</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; gint16 volume; <span class="comment">/* n */</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_uint16(request, _sourceid, &amp;source_id)){</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; source_id = 0; <span class="comment">/* if 0, dynamic source id will be attached */</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">if</span>( REQ_OK != getid_uint16(request, _domainID, &amp;domain_id)){</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;domainID should be more than 0&quot;</span>);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">if</span>(domain_id == 0)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;domainID should be more than 0&quot;</span>);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keyword">const</span> gchar* <a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = afb_req_value(request, _appname); <span class="comment">/* s */</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">if</span>(!name)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordtype">char</span>* info = <span class="stringliteral">&quot;Must specify the name. Please input json arg such as {\&quot;appname\&quot;:\&quot;radio\&quot;}&quot;</span>;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; afb_req_fail(request, NULL, info);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_uint16(request, _sourceClassID, &amp;source_class_id)){</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; source_class_id = 0; <span class="comment">/* BASE */</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_uint16(request, _sourceState, &amp;source_state)){</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; source_state = 0;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_int16(request, _volume, &amp;volume)){</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; volume = 3000;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; gboolean visible = TRUE; <span class="comment">/* b */</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keyword">struct </span>availability_s available; <span class="comment">/* (ii) */</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; available.availability = 1; <span class="comment">/* A_UNKNOWN */</span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; available.avalilable_reason = 0; <span class="comment">/* AR_UNKNOWN */</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; guint16 interrupt = 1; <span class="comment">/* q IS_OFF */</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keyword">struct </span>sound_property_s sound_property_list; <span class="comment">/* a(in) */</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; sound_property_list.type = 0;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; sound_property_list.value = 0; <span class="comment">/* in reality, this is array of struct */</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; </div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; gint32 connection_format_list = 0; <span class="comment">/* ai */</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keyword">struct </span>main_sound_property_s main_property_list; <span class="comment">/* a(in) */</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; main_property_list.type = 0;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; main_property_list.value = 0;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keyword">struct </span>notification_config_s nconf_routing;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keyword">struct </span>notification_config_s nconf_command; <span class="comment">/* a(iin)a(iin) */</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; nconf_routing.type = 0;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; nconf_routing.status = 0;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; nconf_routing.parameter = 0;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; nconf_command.type = 0;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; nconf_command.status = 0;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; nconf_command.parameter = 0;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="comment">/* acuire data */</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; guint16 acquire_source_id;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; guint16 error;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; GVariant* sourceData = create_source_data (source_id, domain_id, name, source_class_id, </div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; source_state, volume, visible, available, interrupt,</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; sound_property_list, connection_format_list, main_property_list,</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; nconf_routing, nconf_command, afbitf);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; GVariant* input = g_variant_ref_sink(sourceData);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; audiomanager_routinginterface_call_register_source_sync(</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; am_route_bus,</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; input,</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; &amp;acquire_source_id,</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; &amp;error,</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; g_variant_unref(input);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call registerSource&quot;</span>);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="comment">/*create response json object*/</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keyword">struct </span>json_object *res = json_object_new_object();</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; sm_add_object_to_json_object_func(res, __FUNCTION__, 4,</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; _error, error,</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; _sourceid, acquire_source_id);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; get_response_audiomanager_massage_error(error,&amp;info);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; afb_req_success(request, res, info);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;}</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> deregisterSource(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;{</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; guint16 source_id;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; guint16 error;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_uint16(request, _sourceid, &amp;source_id)){</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; audiomanager_routinginterface_call_deregister_source_sync(</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; am_route_bus,</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; source_id,</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; &amp;error,</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; NULL, &amp;err</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; );</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call deregisterSource&quot;</span>);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">/*create response json object*/</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keyword">struct </span>json_object *res = json_object_new_object();</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; sm_add_object_to_json_object_func(res, __FUNCTION__, 2,</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; _error, error);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; get_response_audiomanager_massage_error(error,&amp;info);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; afb_req_success(request, res, info);</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;}</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> confirmRoutingReady(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;{</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="comment">/* This function will be deprecated because application will not register function*/</span> </div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;}</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> confirmRoutingRundown(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;{</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="comment">/* This function will be deprecated because application will not register function*/</span> </div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;}</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackSetVolumes(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;{</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;}</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackSinkNotificationConfiguration(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;{</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;}</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackSourceNotificationConfiguration(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;{</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;}</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> subscribe(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;{</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *value = afb_req_value(request, <span class="stringliteral">&quot;event&quot;</span>);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;value is %s&quot;</span>, value);</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">if</span>(value) { </div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordtype">int</span> index = sm_search_event_name_index(value);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span>(index &lt; 0)</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; index = sm_search_routing_event_name_index(value);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span>(index &lt; 0)</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;dedicated event doesn&#39;t exist&quot;</span>); </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; afb_req_subscribe(request, *routing_event_list[index].<a class="code" href="structevent.html">event</a>);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; } </div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; afb_req_subscribe(request, *command_event_list[index].<a class="code" href="structevent.html">event</a>); </div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Please input event name&quot;</span>);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; }</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;}</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> unsubscribe(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;{</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *value = afb_req_value(request, <span class="stringliteral">&quot;event&quot;</span>);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;value is %s&quot;</span>, value);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">if</span>(value) { </div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordtype">int</span> index = sm_search_event_name_index(value);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">if</span>(index &lt; 0)</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; {</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; index = sm_search_routing_event_name_index(value);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">if</span>(index &lt; 0)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;dedicated event doesn&#39;t exist&quot;</span>); </div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; afb_req_unsubscribe(request, *routing_event_list[index].<a class="code" href="structevent.html">event</a>);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; } </div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; {</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; afb_req_unsubscribe(request, *command_event_list[index].<a class="code" href="structevent.html">event</a>); </div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; }</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; }</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Please input event name&quot;</span>);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;}</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;<span class="comment">********** Callback Function invoked by Audio Manager **********</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_new_main_connection(AudiomanagerCommandinterface* interface,</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; GVariant* mainConnection)</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;{</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; guint16 mcid, srcid, sinkid;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; gint16 delay, constate;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; g_variant_get(</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; mainConnection,<span class="stringliteral">&quot;(qqqnn)&quot;</span>, &amp;mcid, &amp;srcid, &amp;sinkid, &amp;delay, &amp;constate);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; </div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; sm_add_object_to_json_object(res_obj,10,</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; _main_connection_id, mcid,</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; _sourceid, srcid,</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; _sinkid, sinkid,</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; _delay, delay,</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; _connectionState, constate</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; );</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;json object :%s:&quot;</span>,json_object_to_json_string(res_obj));</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; afb_event_push(ev_new_connection, res_obj);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;}</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_removed_main_connection(</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; AudiomanagerCommandinterface* interface, guint16 mainConnectionID)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;{</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; </div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; sm_add_object_to_json_object(res_obj, 2, </div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; _main_connection_id, mainConnectionID);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; afb_event_push(ev_removed_main_connection, res_obj);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;}</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_main_connection_state_changed(</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; AudiomanagerCommandinterface* interface, guint16 connectionID, gint16 connectionState)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;{</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; sm_add_object_to_json_object(res_obj, 4, </div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; _connectionID, connectionID,</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; _connectionState, connectionState);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; afb_event_push(ev_main_connection_state_changed, res_obj);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;}</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_volume_changed(</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 volume)</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;{</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; sm_add_object_to_json_object(res_obj, 4, </div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; _sinkid, sinkID,</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; _volume, volume);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; afb_event_push(ev_volume_changed, res_obj);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;}</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_sink_mute_state_changed(</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 mute)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;{</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; sm_add_object_to_json_object(res_obj, 4, </div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; _sinkid, sinkID,</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; _muteState, mute);</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; afb_event_push(ev_sink_mute_state_changed, res_obj);</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;}</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;<span class="comment">********** Callback Function invoked by Audio Manager Routing Interface**********</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_set_routing_ready(</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; AudiomanagerRoutinginterface* interface)</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;{</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; afb_event_push(ev_set_routing_ready, NULL);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;}</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_set_routing_rundown(</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; AudiomanagerRoutinginterface* interface)</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;{</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; afb_event_push(ev_set_routing_ready, NULL);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;}</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;<span class="comment">********** Callback Function invoked by Sound Manager Adapter Interface**********</span></div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="comment">* For now, there may be no need to send events to applications from these invocation.</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<span class="comment">* Sound Manager just sends ack to Audio Manager in charge of applications.</span></div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="comment">* If event is needed, make events in initialize function in this source, and </span></div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;<span class="comment">* write afb_event_push in the invocations.</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;<span class="comment">* Events should be pushed in this source.(I teseted to push events in other code, but can&#39;t)</span></div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;<span class="keyword">static</span> gboolean on_async_abort(</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; guint16 arg_handle)</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;{</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="comment">/* Nothing To Do. If it is better to implement something, I will implement */</span></div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;}</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;<span class="keyword">static</span> gboolean on_async_connect(</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; guint16 arg_handle,</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; guint16 arg_connectionID,</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; guint16 arg_sourceID,</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; guint16 arg_sinkID,</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; gint arg_connectionFormat)</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;{</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; GError* err;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; sm_add_object_to_json_object(res_obj, 10, </div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; _handle, arg_handle,</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; _connectionID, arg_connectionID,</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; _sourceid, arg_sourceID,</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; _sinkid, arg_sinkID,</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; _connectionFormat, arg_connectionFormat);</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; afb_event_push(ev_async_connect, res_obj);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; audiomanager_routinginterface_call_ack_connect_sync(</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; am_route_bus,</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; arg_handle,</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; arg_connectionID,</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; NULL,</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; {</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Can&#39;t create sound manager adapter&quot;</span>);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">return</span> TRUE; </div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160;}</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;<span class="keyword">static</span> gboolean on_async_disconnect(</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; guint16 arg_handle,</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; guint16 arg_connectionID)</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;{</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; GError* err;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; audiomanager_routinginterface_call_ack_disconnect_sync(</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; am_route_bus,</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; arg_handle,</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; arg_connectionID,</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; NULL,</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; {</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Can&#39;t create sound manager adapter&quot;</span>);</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;}</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="keyword">static</span> gboolean on_async_set_sink_volume(</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; guint16 arg_handle,</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; guint16 arg_sinkID,</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; gint16 arg_volume,</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; gint16 arg_ramp,</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; guint16 arg_time)</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160;{</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="comment">/* Nothing To Do. If it is better to implement something, I will implement */</span></div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keywordflow">return</span> TRUE; </div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;}</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;<span class="keyword">static</span> gboolean on_async_set_source_state(</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; guint16 arg_handle,</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; guint16 arg_sourceID,</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; gint arg_sourceState)</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;{</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; GError* err;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object(); </div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; sm_add_object_to_json_object(res_obj, 6, </div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; _handle, arg_handle,</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; _sourceid, arg_sourceID,</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; _sourceState, arg_sourceState);</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; afb_event_push(ev_async_set_source_state, res_obj);</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="comment">/* Applications should return ackSetSourceState, then Sound Manager doen&#39;t return ackSetSourceState */</span></div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <span class="comment">/*audiomanager_routinginterface_call_ack_set_source_state_sync(</span></div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;<span class="comment"> am_route_bus,</span></div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;<span class="comment"> arg_handle,</span></div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;<span class="comment"> NULL,</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;<span class="comment"> NULL, &amp;err);*/</span></div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; {</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Can&#39;t create sound manager adapter&quot;</span>);</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; }</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;}</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160;<span class="keyword">static</span> gboolean init_sound_manager_adapter(GDBusServer *server, GDBusConnection *conn, gpointer data)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160;{</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; sm_adapter = org_soundmanager_genivi_routingsend_skeleton_new();</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; sm_itf = ORG_SOUNDMANAGER_GENIVI_ROUTINGSEND_GET_IFACE(sm_adapter);</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="comment">/* initialize sound manager adapter */</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; sm_itf-&gt;handle_async_abort = on_async_abort;</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; sm_itf-&gt;handle_async_connect = on_async_connect;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; sm_itf-&gt;handle_async_disconnect = on_async_disconnect;</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; sm_itf-&gt;handle_async_set_sink_volume = on_async_set_sink_volume;</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; sm_itf-&gt;handle_async_set_source_state = on_async_set_source_state;</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; gboolean ret = g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(sm_adapter), conn, <a class="code" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">SOUND_MANAGER_PATH</a>, NULL);</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keywordflow">if</span>(!ret)</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; {</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Can&#39;t create sound manager adapter&quot;</span>);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; }</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;}</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160;</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160;<span class="comment"> * array of the verbs exported to afb-daemon</span></div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span>afb_verb_desc_v1 binding_verbs[]= {</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;<span class="comment">/* VERB&#39;S NAME SESSION MANAGEMENT FUNCTION TO CALL SHORT DESCRIPTION */</span></div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;{ .name = <span class="stringliteral">&quot;connect&quot;</span>, .session = AFB_SESSION_NONE, .callback = connect, .info = <span class="stringliteral">&quot;Connect source id and sink id&quot;</span> },</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;{ .name = <span class="stringliteral">&quot;disconnect&quot;</span>, .session = AFB_SESSION_NONE, .callback = disconnect, .info = <span class="stringliteral">&quot;Disconnect source id and sink id&quot;</span> },</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;{ .name = <span class="stringliteral">&quot;setVolume&quot;</span>, .session = AFB_SESSION_NONE, .callback = setVolume, .info = <span class="stringliteral">&quot;Set volume value&quot;</span> }, <span class="comment">/* it is better to show the range*/</span></div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;{ .name = <span class="stringliteral">&quot;volumeStep&quot;</span>, .session = AFB_SESSION_NONE, .callback = volumeStep, .info = <span class="stringliteral">&quot;Set volume step range&quot;</span> },</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160;{ .name = <span class="stringliteral">&quot;setSinkMuteState&quot;</span>, .session = AFB_SESSION_NONE, .callback = setSinkMuteState, .info = <span class="stringliteral">&quot;Set Mute state: 1 means mute, 2 means umute. Others are invalid&quot;</span> },</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160;{ .name = <span class="stringliteral">&quot;getListMainConnections&quot;</span>, .session = AFB_SESSION_NONE, .callback = getListMainConnections, .info = <span class="stringliteral">&quot;Get MainConnection List&quot;</span> },</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;<span class="comment">/* Routing Interface */</span></div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160;{ .name = <span class="stringliteral">&quot;registerSource&quot;</span>, .session = AFB_SESSION_NONE, .callback = registerSource, .info = <span class="stringliteral">&quot;Register Application&quot;</span> },</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;{ .name = <span class="stringliteral">&quot;deregisterSource&quot;</span>, .session = AFB_SESSION_NONE, .callback = deregisterSource, .info = <span class="stringliteral">&quot;Deregister Application&quot;</span> },</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;{ .name = <span class="stringliteral">&quot;ackConnect&quot;</span>, .session = AFB_SESSION_NONE, .callback = ackConnect, .info = <span class="stringliteral">&quot;Acknowledge of asyncConnect&quot;</span> },</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160;{ .name = <span class="stringliteral">&quot;ackDisconnect&quot;</span>, .session = AFB_SESSION_NONE, .callback = ackDisconnect, .info = <span class="stringliteral">&quot;Acknowledge of asyncConnect&quot;</span> },</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160;{ .name = <span class="stringliteral">&quot;ackSetSourceState&quot;</span>, .session = AFB_SESSION_NONE, .callback = ackSetSourceState, .info = <span class="stringliteral">&quot;Acknowledge of asyncSetSourceState&quot;</span> },</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160;{ .name = <span class="stringliteral">&quot;subscribe&quot;</span>, .session = AFB_SESSION_NONE, .callback = subscribe, .info = <span class="stringliteral">&quot;Subscribe event&quot;</span> },</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160;{ .name = <span class="stringliteral">&quot;unsubscribe&quot;</span>, .session = AFB_SESSION_NONE, .callback = unsubscribe, .info = <span class="stringliteral">&quot;Unsubscribe event&quot;</span> },</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;{ .name = NULL } <span class="comment">/* marker for end of the array */</span></div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;};</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span>afb_binding binding_description = </div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;{</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; .type = AFB_BINDING_VERSION_1,</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; .v1 = {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; .info = <span class="stringliteral">&quot;Sound Manager&quot;</span> ,</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; .prefix = <span class="stringliteral">&quot;soundmanager&quot;</span> ,</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; .verbs = binding_verbs</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; }</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;};</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> *dbus_event_loop_run(<span class="keywordtype">void</span> *args)</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;{</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; loop = g_main_loop_new(NULL, FALSE);</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; g_main_loop_run(loop);</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160;}</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> free_dbus()</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;{</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;free dbus&quot;</span>);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">if</span>(am_cmd_bus)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; free(am_cmd_bus);</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; }</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordflow">if</span>(am_route_bus)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; free(am_route_bus);</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160;}</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> init()</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;{</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; INFO(afbitf,<span class="stringliteral">&quot;Initialize Dbus object&quot;</span>);</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="comment">/* Initialize Dbus interface */</span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordflow">if</span>(am_cmd_bus || am_route_bus)</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; {</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Dbus object to Audio Manager is already created&quot;</span>);</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="keywordflow">goto</span> out;</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; am_cmd_bus = audiomanager_commandinterface_proxy_new_for_bus_sync(</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; G_BUS_TYPE_SYSTEM,</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; G_DBUS_PROXY_FLAGS_NONE,</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <a class="code" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">AM_NAME</a>,</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <a class="code" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">AM_CMD_PATH</a>,</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; NULL,</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; NULL</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; );</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; am_route_bus = audiomanager_routinginterface_proxy_new_for_bus_sync(</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; G_BUS_TYPE_SYSTEM,</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; G_DBUS_PROXY_FLAGS_NONE,</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <a class="code" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">AM_NAME</a>,</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <a class="code" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">AM_ROUTE_PATH</a>,</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; NULL,</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; NULL</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; );</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">if</span>(!am_cmd_bus || !am_route_bus)</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordflow">goto</span> out;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; INFO(afbitf, <span class="stringliteral">&quot;Finish Initialize&quot;</span>);</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;out:</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; ERROR(afbitf,<span class="stringliteral">&quot;Failed to initialize&quot;</span>);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; free_dbus();</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;}</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> sm_event_init()</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;{</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; INFO(afbitf,<span class="stringliteral">&quot;Initialize event receive setting&quot;</span>);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="comment">/* Initialize make event */</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordtype">size_t</span> size = <span class="keyword">sizeof</span> cmd_evlist / <span class="keyword">sizeof</span> *cmd_evlist;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="comment">/*create event*/</span></div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="comment">/*ToDo Hash table is better. And event should be created in the loop</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="comment"> I would like to change */</span></div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; ev_volume_changed = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[0]);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; ev_new_connection = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[1]);</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; ev_removed_main_connection = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[2]);</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; ev_sink_mute_state_changed = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[3]);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; ev_main_connection_state_changed = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[4]);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; command_event_list[0].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[0]; </div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; command_event_list[0].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_volume_changed;</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; command_event_list[1].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[1]; </div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; command_event_list[1].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_new_connection;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; command_event_list[2].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[2]; </div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; command_event_list[2].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_removed_main_connection;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; command_event_list[3].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[3]; </div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; command_event_list[3].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_sink_mute_state_changed;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; command_event_list[4].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[4]; </div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; command_event_list[4].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_main_connection_state_changed;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="comment">/* create routing event */</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; ev_set_routing_ready = afb_daemon_make_event(afbitf-&gt;daemon, route_evlist[0]);</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; ev_set_routing_rundown = afb_daemon_make_event(afbitf-&gt;daemon, route_evlist[1]); </div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; ev_async_connect = afb_daemon_make_event(afbitf-&gt;daemon, route_evlist[2]);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; ev_async_set_source_state = afb_daemon_make_event(afbitf-&gt;daemon, route_evlist[3]);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; routing_event_list[0].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = route_evlist[0]; </div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; routing_event_list[0].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_set_routing_ready;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; routing_event_list[1].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = route_evlist[1]; </div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; routing_event_list[1].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_set_routing_rundown;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; routing_event_list[2].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = route_evlist[1]; </div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; routing_event_list[2].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_async_connect;</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; routing_event_list[3].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = route_evlist[1]; </div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; routing_event_list[3].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_async_set_source_state;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="comment">/*for(size_t i = 0; i &lt; size; ++i)</span></div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<span class="comment"> struct afb_event afbev = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[i]));</span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;<span class="comment"> size_t afbev_size = sizeof afbev;</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;<span class="comment"> size_t key_size = sizeof cmd_evlist[i];</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;<span class="comment"> struct event ev = {cmd_evlist[i],afbev};</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="comment"> command_event_list[i] = malloc(key_size + afbev_size);</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="comment"> command_event_list[i] = ev;</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="comment"> search_result = hsearch(entry, FIND);</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="comment"> if(search_result)</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="comment"> DEBUG(afbitf, &quot;event name is %s&quot;, search_result-&gt;key); </span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="comment"> }*/</span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="comment">/* Initialize dbus event thread */</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordflow">if</span>(!am_cmd_bus || !am_route_bus)</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; {</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">goto</span> ev_init_out;</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; }</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; pthread_t thread_id;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; ret = pthread_create(&amp;thread_id, NULL, dbus_event_loop_run, NULL);</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">if</span>(ret != 0)</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="keywordflow">goto</span> ev_init_out;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; }</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">/* initialize signal from audio manager command interface */</span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="stringliteral">&quot;volume_changed&quot;</span>, </div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; G_CALLBACK(on_volume_changed), </div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; NULL);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="stringliteral">&quot;new_main_connection&quot;</span>, </div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; G_CALLBACK(on_new_main_connection), </div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; NULL);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <span class="stringliteral">&quot;removed_main_connection&quot;</span>, </div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; G_CALLBACK(on_removed_main_connection), </div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; NULL);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="stringliteral">&quot;sink_mute_state_changed&quot;</span>, </div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; G_CALLBACK(on_sink_mute_state_changed), </div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; NULL);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="stringliteral">&quot;main_connection_state_changed&quot;</span>, </div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; G_CALLBACK(on_main_connection_state_changed), </div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; NULL);</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; g_signal_connect(am_route_bus, </div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="stringliteral">&quot;set_routing_ready&quot;</span>, </div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; G_CALLBACK(on_set_routing_ready), </div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; NULL);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; g_signal_connect(am_route_bus, </div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="stringliteral">&quot;set_routing_rundown&quot;</span>, </div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; G_CALLBACK(on_set_routing_rundown), </div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; NULL);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="comment">/* Get soundmanager adapter bus */</span></div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; g_bus_own_name(G_BUS_TYPE_SYSTEM, <a class="code" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">SOUND_MANAGER_NAME</a>, G_BUS_NAME_OWNER_FLAGS_NONE,</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; NULL, init_sound_manager_adapter, NULL, NULL, NULL);</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; INFO(afbitf,<span class="stringliteral">&quot;Finish Initialize event receive setting&quot;</span>);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;ev_init_out:</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keywordflow">if</span>(loop != NULL)</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; {</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; g_main_loop_unref(loop);</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; }</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; free_dbus();</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;DBus connection is not created&quot;</span>);</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;}</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="comment"> * activation function for registering the binding called by afb-daemon</span></div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01137"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567"> 1137</a></span>&#160;<span class="keyword">const</span> <span class="keyword">struct </span>afb_binding *<a class="code" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">afbBindingV1Register</a> (<span class="keyword">const</span> <span class="keyword">struct</span> afb_binding_interface *itf)</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;{</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; afbitf = itf; <span class="comment">// records the interface for accessing afb-daemon</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordtype">int</span> ret = init(); <span class="comment">// Set Dbus communication with audio mangaer</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">return</span> (ret == 0) ? &amp;binding_description : NULL;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;}</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;</div><div class="line"><a name="l01145"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d"> 1145</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">afbBindingV1ServiceInit</a>(<span class="keyword">struct</span> afb_service service)</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;{</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;Initializing Audio Manager Notification \n&quot;</span>);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordtype">int</span> ret = sm_event_init();</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;}</div><div class="ttc" id="structevent_html_a58726ebc551d36562ac3f9e1fe293214"><div class="ttname"><a href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event::event</a></div><div class="ttdeci">struct afb_event * event</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00051">soundmanager.c:51</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_afa98a8b4c63efeb6e209144e7b247291"><div class="ttname"><a href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">AM_CMD_PATH</a></div><div class="ttdeci">#define AM_CMD_PATH</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00032">soundmanager.c:32</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_ad25089fbfd55bf795bed283a5b283461"><div class="ttname"><a href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">AM_NAME</a></div><div class="ttdeci">#define AM_NAME</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00031">soundmanager.c:31</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a9a50fb496af125690fb276944b3b4cff"><div class="ttname"><a href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">AM_ROUTE_PATH</a></div><div class="ttdeci">#define AM_ROUTE_PATH</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00033">soundmanager.c:33</a></div></div>
+<div class="ttc" id="structevent_html"><div class="ttname"><a href="structevent.html">event</a></div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00049">soundmanager.c:49</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a88642b2e51aa08fd18fdfc8017c8d567"><div class="ttname"><a href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">afbBindingV1Register</a></div><div class="ttdeci">const struct afb_binding * afbBindingV1Register(const struct afb_binding_interface *itf)</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l01137">soundmanager.c:1137</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_aace0247d919659df209ceb7dbeff6a2d"><div class="ttname"><a href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">afbBindingV1ServiceInit</a></div><div class="ttdeci">int afbBindingV1ServiceInit(struct afb_service service)</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l01145">soundmanager.c:1145</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a33d1c40de8a5e7a3d6f0e2f45de9f37f"><div class="ttname"><a href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">ROUTING_EVENT_NUM</a></div><div class="ttdeci">#define ROUTING_EVENT_NUM</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00038">soundmanager.c:38</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a2690d3e2461f5a2f9bb0720d657280da"><div class="ttname"><a href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">SOUND_MANAGER_PATH</a></div><div class="ttdeci">#define SOUND_MANAGER_PATH</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00035">soundmanager.c:35</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a9b2ae077f774994129a3c231be6703a0"><div class="ttname"><a href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">SOUND_MANAGER_NAME</a></div><div class="ttdeci">#define SOUND_MANAGER_NAME</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00034">soundmanager.c:34</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a09f43d9e7e1c5d2198c0d66024b4500e"><div class="ttname"><a href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">COMMAND_EVENT_NUM</a></div><div class="ttdeci">#define COMMAND_EVENT_NUM</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00037">soundmanager.c:37</a></div></div>
+<div class="ttc" id="structevent_html_a723489bec273335d13513cd1040c0216"><div class="ttname"><a href="structevent.html#a723489bec273335d13513cd1040c0216">event::name</a></div><div class="ttdeci">char * name</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00050">soundmanager.c:50</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_85932083476b47061c69d172796990a3.html">soundmanager_binging</a></li><li class="navelem"><a class="el" href="soundmanager_8c.html">soundmanager.c</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/splitbar.png b/doc/api-ref/html/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ b/doc/api-ref/html/splitbar.png
Binary files differ
diff --git a/doc/api-ref/html/structevent.html b/doc/api-ref/html/structevent.html
new file mode 100644
index 0000000..efe2a4d
--- /dev/null
+++ b/doc/api-ref/html/structevent.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: event Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('structevent.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">event Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a723489bec273335d13513cd1040c0216"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a></td></tr>
+<tr class="separator:a723489bec273335d13513cd1040c0216"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58726ebc551d36562ac3f9e1fe293214"><td class="memItemLeft" align="right" valign="top">struct afb_event *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a></td></tr>
+<tr class="separator:a58726ebc551d36562ac3f9e1fe293214"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00049">49</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a58726ebc551d36562ac3f9e1fe293214"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58726ebc551d36562ac3f9e1fe293214">&#9670;&nbsp;</a></span>event</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct afb_event* event::event</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00051">51</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a723489bec273335d13513cd1040c0216"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a723489bec273335d13513cd1040c0216">&#9670;&nbsp;</a></span>name</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* event::name</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00050">50</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>SoundManagerBinding/soundmanager_binging/<a class="el" href="soundmanager_8c_source.html">soundmanager.c</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="structevent.html">event</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/structevent.js b/doc/api-ref/html/structevent.js
new file mode 100644
index 0000000..4e71468
--- /dev/null
+++ b/doc/api-ref/html/structevent.js
@@ -0,0 +1,5 @@
+var structevent =
+[
+ [ "event", "structevent.html#a58726ebc551d36562ac3f9e1fe293214", null ],
+ [ "name", "structevent.html#a723489bec273335d13513cd1040c0216", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/sync_off.png b/doc/api-ref/html/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/doc/api-ref/html/sync_off.png
Binary files differ
diff --git a/doc/api-ref/html/sync_on.png b/doc/api-ref/html/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/doc/api-ref/html/sync_on.png
Binary files differ
diff --git a/doc/api-ref/html/tab_a.png b/doc/api-ref/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/doc/api-ref/html/tab_a.png
Binary files differ
diff --git a/doc/api-ref/html/tab_b.png b/doc/api-ref/html/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/doc/api-ref/html/tab_b.png
Binary files differ
diff --git a/doc/api-ref/html/tab_h.png b/doc/api-ref/html/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/doc/api-ref/html/tab_h.png
Binary files differ
diff --git a/doc/api-ref/html/tab_s.png b/doc/api-ref/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/doc/api-ref/html/tab_s.png
Binary files differ
diff --git a/doc/api-ref/html/tabs.css b/doc/api-ref/html/tabs.css
new file mode 100644
index 0000000..a28614b
--- /dev/null
+++ b/doc/api-ref/html/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file
diff --git a/doc/api-ref/html/test_8cpp.html b/doc/api-ref/html/test_8cpp.html
new file mode 100644
index 0000000..7d62d1f
--- /dev/null
+++ b/doc/api-ref/html/test_8cpp.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager/test.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('test_8cpp.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">test.cpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager/libsoundmanager.hpp</a>&gt;</code><br />
+<code>#include &lt;iostream&gt;</code><br />
+<code>#include &lt;glib-2.0/glib.h&gt;</code><br />
+<code>#include &lt;fcntl.h&gt;</code><br />
+<code>#include &lt;string&gt;</code><br />
+<code>#include &lt;sys/types.h&gt;</code><br />
+<code>#include &lt;sys/stat.h&gt;</code><br />
+<code>#include &lt;thread&gt;</code><br />
+<code>#include &lt;exception&gt;</code><br />
+<code>#include &lt;vector&gt;</code><br />
+<code>#include &lt;sstream&gt;</code><br />
+</div>
+<p><a href="test_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="separator:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a0cbfe893edb63b7b0c419db013fa9022"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">sm</a></td></tr>
+<tr class="separator:a0cbfe893edb63b7b0c419db013fa9022"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c04138a5bfe5d72780bb7e82a18e627">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>argv</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="test_8cpp_source.html#l00123">123</a> of file <a class="el" href="test_8cpp_source.html">test.cpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="a0cbfe893edb63b7b0c419db013fa9022"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0cbfe893edb63b7b0c419db013fa9022">&#9670;&nbsp;</a></span>sm</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a>* sm</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="test_8cpp_source.html#l00033">33</a> of file <a class="el" href="test_8cpp_source.html">test.cpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="test_8cpp.html">test.cpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/test_8cpp.js b/doc/api-ref/html/test_8cpp.js
new file mode 100644
index 0000000..2de2e8c
--- /dev/null
+++ b/doc/api-ref/html/test_8cpp.js
@@ -0,0 +1,5 @@
+var test_8cpp =
+[
+ [ "main", "test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627", null ],
+ [ "sm", "test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/test_8cpp_source.html b/doc/api-ref/html/test_8cpp_source.html
new file mode 100644
index 0000000..bde178d
--- /dev/null
+++ b/doc/api-ref/html/test_8cpp_source.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager/test.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('test_8cpp_source.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">test.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="test_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (c) 2017 TOYOTA MOTOR CORPORATION</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="libsoundmanager_8hpp.html">libsoundmanager/libsoundmanager.hpp</a>&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;glib-2.0/glib.h&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;sys/stat.h&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;exception&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> io_event_callback(sd_event_source *src, <span class="keywordtype">int</span> fd, uint32_t revents, <span class="keywordtype">void</span> *closure);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">static</span> vector&lt;string&gt; split(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; str, <span class="keywordtype">char</span> sep);</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022"> 33</a></span>&#160;<a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>* <a class="code" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">sm</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">static</span> sd_event_source *evsrc;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">static</span> GMainLoop *loop = NULL;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> call_test();</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> usage()</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;verb &quot;</span>&lt;&lt; <span class="stringliteral">&quot;key:arg&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;example: connect sourceID 100 sinkID 100&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;verb list:&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// Todo output api list</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; exit(0);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> *event_loop_run(<span class="keywordtype">void</span> *args)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; call_test();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> io_event_callback(sd_event_source *src, <span class="keywordtype">int</span> fd, uint32_t revents, <span class="keywordtype">void</span> *closure)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">/* This is for Receiving Thread */</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> call_test()</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">string</span> command;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;input verb and argments&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">/* read the buffer */</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span>(;;){</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">char</span> line[1023];</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; cin.getline(line, <span class="keyword">sizeof</span>(line));</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; command = line;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span>(command.empty()){</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; vector&lt;string&gt; v_command = split(command, <span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">/*for(auto itr = v_command.begin(); itr != v_command.end(); ++itr)</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> cout &lt;&lt; *itr &lt;&lt;endl;</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"> }*/</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">size_t</span> num = v_command.size();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span>(num % 2 == 0){</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;If command contains args, please input &lt;key,value&gt; in argument part&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">/* create json object */</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">struct </span>json_object* j_obj = json_object_new_object();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 1;i &lt; (v_command.size()) ;++i){</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">struct </span>json_object* val = json_object_new_string(v_command[i+1].c_str());</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; json_object_object_add(j_obj, v_command[i].c_str(), val);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; ++i;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">/* call verb via libsoundmanager */</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; sm-&gt;<a class="code" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">call</a>(v_command[0], j_obj);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">/* free vector */</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; vector&lt;string&gt;().swap(v_command);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; string().swap(command);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> onRep(<span class="keyword">struct</span> json_object* reply_contents)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* str = json_object_to_json_string(reply_contents);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;[CB onRep]: &quot;</span> &lt;&lt; str &lt;&lt; endl;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; json_object_put(reply_contents);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> onEv(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; <a class="code" href="structevent.html">event</a>, <span class="keyword">struct</span> json_object* event_contents)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;{</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* str = json_object_to_json_string(event_contents);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;[CB onEvent]: event&quot;</span> &lt;&lt; <span class="keyword">event</span>.c_str() &lt;&lt; <span class="stringliteral">&quot; contents:&quot;</span> &lt;&lt; str &lt;&lt; endl;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; json_object_put(event_contents);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">static</span> vector&lt;string&gt; split(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; str, <span class="keywordtype">char</span> sep)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;{</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; vector&lt;string&gt; v;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; stringstream ss(str);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordtype">string</span> buffer;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">while</span>( getline(ss, buffer, sep) ) {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span>(!buffer.empty())</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; v.push_back(buffer);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">return</span> v;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;}</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 123</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">if</span>(argc == 1)</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; printf(<span class="stringliteral">&quot;Please input port num in first argument, and token in second argument&quot;</span>);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; usage();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span>(argc == 2)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">string</span> av(argv[1]);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span>( (av == <span class="stringliteral">&quot;-h&quot;</span>) || (av == <span class="stringliteral">&quot;--help&quot;</span>))</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; usage();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; } </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordtype">string</span> port_string(argv[1]);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">string</span> token(argv[2]);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordtype">char</span>* endptr;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordtype">long</span> port = strtol(port_string.c_str(),&amp;endptr,10);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">/* error check of range */</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span>( (port &gt; 20000) || (port &lt; 0) )</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; printf(<span class="stringliteral">&quot;input under 20000(temporary number)&quot;</span>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span>(*endptr != <span class="charliteral">&#39;\0&#39;</span>)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; printf(<span class="stringliteral">&quot;not number&quot;</span>);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;Call test for libsoundmanager&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; sm = <span class="keyword">new</span> <a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>(port, token); </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; sm-&gt;<a class="code" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">register_callback</a>(&amp;onEv, &amp;onRep);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; pthread_t thread_id;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; ret = pthread_create(&amp;thread_id, NULL, event_loop_run, NULL);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; sd_event *sloop;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; ret = sd_event_default(&amp;sloop);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (ret &lt; 0) {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; printf(<span class="stringliteral">&quot;failed to create event loop&quot;</span>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; sd_event_add_io(sloop, &amp;evsrc, 0, EPOLLIN, io_event_callback, NULL);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; sd_event_run(sloop, 30000000);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;}</div><div class="ttc" id="structevent_html"><div class="ttname"><a href="structevent.html">event</a></div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00049">soundmanager.c:49</a></div></div>
+<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a1fe952a4dabbab6126cc23e36c79c773"><div class="ttname"><a href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager::call</a></div><div class="ttdeci">int call(const std::string &amp;verb, struct json_object *arg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00217">libsoundmanager.cpp:217</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a560edf9ae3b1e367ad4cbb31c7021d74"><div class="ttname"><a href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager::register_callback</a></div><div class="ttdeci">void register_callback(void(*event_cb)(const std::string &amp;event, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents))</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00119">libsoundmanager.cpp:119</a></div></div>
+<div class="ttc" id="test_8cpp_html_a0cbfe893edb63b7b0c419db013fa9022"><div class="ttname"><a href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">sm</a></div><div class="ttdeci">LibSoundmanager * sm</div><div class="ttdef"><b>Definition:</b> <a href="test_8cpp_source.html#l00033">test.cpp:33</a></div></div>
+<div class="ttc" id="libsoundmanager_8hpp_html"><div class="ttname"><a href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a></div></div>
+<div class="ttc" id="test_8cpp_html_a3c04138a5bfe5d72780bb7e82a18e627"><div class="ttname"><a href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a></div><div class="ttdeci">int main(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="test_8cpp_source.html#l00123">test.cpp:123</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html"><div class="ttname"><a href="class_lib_soundmanager.html">LibSoundmanager</a></div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00062">libsoundmanager.hpp:62</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="test_8cpp.html">test.cpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/parts/am-component.png b/doc/parts/am-component.png
new file mode 100644
index 0000000..bf068bb
--- /dev/null
+++ b/doc/parts/am-component.png
Binary files differ
diff --git a/doc/parts/seq_changevolume.svg b/doc/parts/seq_changevolume.svg
new file mode 100644
index 0000000..9f60795
--- /dev/null
+++ b/doc/parts/seq_changevolume.svg
@@ -0,0 +1,117 @@
+<?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="788px" preserveAspectRatio="none" style="width:1211px;height:788px;background:#EEEBDC;" version="1.1" viewBox="0 0 1211 788" width="1211px" zoomAndPan="magnify"><defs><filter height="300%" id="fh0kb20fxhbpa" 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><rect fill="#EEEBDC" height="766.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="347.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="362" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="766.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="491.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="620.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="766.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="963.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="978" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="185.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="93.9688"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="728.1641"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="223.5" y="114.9688"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="101.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="223.5" y="657.0313"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="413.5" y="144.1016"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="413.5" y="627.8984"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="568" y="198.2344"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="189.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="709.5" y="237.3672"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="111.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="709.5" y="573.8984"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="841.5" y="534.7656"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1022.5" y="358.3672"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="193.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1022.5" y="505.6328"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="93.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1154.5" y="412.5"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="45" x2="45" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="228" x2="228" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="418.5" x2="418.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="572.5" x2="572.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="714.5" x2="714.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="846.5" x2="846.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1027.5" x2="1027.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1159.5" x2="1159.5" y1="83.9688" y2="776.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="8" y="81.1387">Application</text><ellipse cx="45.5" cy="13" fill="#FFFACD" filter="url(#fh0kb20fxhbpa)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M45.5,21 L45.5,48 M32.5,29 L58.5,29 M45.5,48 L32.5,63 M45.5,48 L58.5,63 " fill="#FFFACD" filter="url(#fh0kb20fxhbpa)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="172" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="179" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="351.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="358.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="495.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="502.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="660.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="667.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="778.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="785.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="967.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="974.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1113.5" y="81.1387">Audio Domain</text><ellipse cx="1159.5" cy="13" fill="#FFFACD" filter="url(#fh0kb20fxhbpa)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1159.5,21 L1159.5,48 M1146.5,29 L1172.5,29 M1159.5,48 L1146.5,63 M1159.5,48 L1172.5,63 " fill="#FFFACD" filter="url(#fh0kb20fxhbpa)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="185.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="93.9688"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="728.1641"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="223.5" y="114.9688"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="101.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="223.5" y="657.0313"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="413.5" y="144.1016"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="413.5" y="627.8984"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="568" y="198.2344"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="189.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="709.5" y="237.3672"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="111.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="709.5" y="573.8984"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="841.5" y="534.7656"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1022.5" y="358.3672"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="193.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1022.5" y="505.6328"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="93.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1154.5" y="412.5"/><polygon fill="#000000" points="211.5,110.9688,221.5,114.9688,211.5,118.9688,215.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="50.5" x2="217.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="81" x="57.5" y="110.0356">SetVolume()</text><polygon fill="#000000" points="401.5,140.1016,411.5,144.1016,401.5,148.1016,405.5,144.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="233.5" x2="407.5" y1="144.1016" y2="144.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="81" x="240.5" y="139.1685">SetVolume()</text><polygon fill="#000000" points="556,194.2344,566,198.2344,556,202.2344,560,198.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="423.5" x2="562" y1="198.2344" y2="198.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="81" x="430.5" y="193.3013">SetVolume()</text><polygon fill="#000000" points="697.5,233.3672,707.5,237.3672,697.5,241.3672,701.5,237.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="578" x2="703.5" y1="237.3672" y2="237.3672"/><polygon fill="#000000" points="434.5,247.3672,424.5,251.3672,434.5,255.3672,430.5,251.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="428.5" x2="572" y1="251.3672" y2="251.3672"/><polygon fill="#000000" points="244.5,261.3672,234.5,265.3672,244.5,269.3672,240.5,265.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="238.5" x2="417.5" y1="265.3672" y2="265.3672"/><polygon fill="#000000" points="56.5,275.3672,46.5,279.3672,56.5,283.3672,52.5,279.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="50.5" x2="227.5" y1="279.3672" y2="279.3672"/><polygon fill="#000000" points="1010.5,354.3672,1020.5,358.3672,1010.5,362.3672,1014.5,358.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="719.5" x2="1016.5" y1="358.3672" y2="358.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="726.5" y="353.4341">asyncSetSinkVolume()</text><polygon fill="#000000" points="1142.5,408.5,1152.5,412.5,1142.5,416.5,1146.5,412.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1032.5" x2="1148.5" y1="412.5" y2="412.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="81" x="1039.5" y="407.5669">SetVolume()</text><polygon fill="#000000" points="725.5,422.6328,715.5,426.6328,725.5,430.6328,721.5,426.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="719.5" x2="1026.5" y1="426.6328" y2="426.6328"/><polygon fill="#000000" points="1043.5,501.6328,1033.5,505.6328,1043.5,509.6328,1039.5,505.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1037.5" x2="1158.5" y1="505.6328" y2="505.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="103" x="1049.5" y="500.6997">ackSetVolume()</text><polygon fill="#000000" points="862.5,530.7656,852.5,534.7656,862.5,538.7656,858.5,534.7656" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="856.5" x2="1021.5" y1="534.7656" y2="534.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="152" x="868.5" y="529.8325">ackSetVolumeChange()</text><polygon fill="#000000" points="730.5,569.8984,720.5,573.8984,730.5,577.8984,726.5,573.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="724.5" x2="840.5" y1="573.8984" y2="573.8984"/><polygon fill="#000000" points="434.5,623.8984,424.5,627.8984,434.5,631.8984,430.5,627.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="428.5" x2="708.5" y1="627.8984" y2="627.8984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="121" x="440.5" y="622.9653">cbVolumeChanged</text><polygon fill="#000000" points="244.5,653.0313,234.5,657.0313,244.5,661.0313,240.5,657.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="238.5" x2="412.5" y1="657.0313" y2="657.0313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="161" x="250.5" y="652.0981">signal("volumeChanged")</text><polygon fill="#000000" points="697.5,667.1641,707.5,671.1641,697.5,675.1641,701.5,671.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="418.5" x2="703.5" y1="671.1641" y2="671.1641"/><polygon fill="#000000" points="829.5,681.1641,839.5,685.1641,829.5,689.1641,833.5,685.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="714.5" x2="835.5" y1="685.1641" y2="685.1641"/><polygon fill="#000000" points="1015.5,695.1641,1025.5,699.1641,1015.5,703.1641,1019.5,699.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="846.5" x2="1021.5" y1="699.1641" y2="699.1641"/><polygon fill="#000000" points="61.5,724.1641,51.5,728.1641,61.5,732.1641,57.5,728.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="222.5" y1="728.1641" y2="728.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="154" x="67.5" y="723.231">event [volumeChanged]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+activate AP #00ff00
+AP -> SM : SetVolume()
+activate SM #00ff00
+SM -> CS : SetVolume()
+activate CS #00ff00
+|||
+CS -> CR : SetVolume()
+activate CR #00ff00
+|||
+CR -> AM
+activate AM #00ff00
+
+CR - -> CS
+deactivate CR
+CS- ->SM
+deactivate CS
+SM- ->AP
+deactivate SM
+deactivate AP
+
+|||
+|||
+AM -> RS : asyncSetSinkVolume()
+activate RS #00ff00
+|||
+RS -> AD : SetVolume()
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+|||
+|||
+AD -> RS : ackSetVolume()
+deactivate AD
+activate RS #00ff00
+
+RS -> RR : ackSetVolumeChange()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+|||
+AM -> CS : cbVolumeChanged
+activate CS #00ff00
+CS -> SM : signal("volumeChanged")
+activate SM #00ff00
+CS- ->AM
+deactivate CS
+AM- ->RR
+deactivate AM
+RR- ->RS
+deactivate RR
+deactivate RS
+SM -> AP : event [volumeChanged]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_connectsoundroute.svg b/doc/parts/seq_connectsoundroute.svg
new file mode 100644
index 0000000..a3c392a
--- /dev/null
+++ b/doc/parts/seq_connectsoundroute.svg
@@ -0,0 +1,145 @@
+<?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="1126px" preserveAspectRatio="none" style="width:1371px;height:1126px;background:#EEEBDC;" version="1.1" viewBox="0 0 1371 1126" width="1371px" zoomAndPan="magnify"><defs><filter height="300%" id="f1jw437lb3978k" 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><rect fill="#EEEBDC" height="1104.0859" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="475.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="490" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1104.0859" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="619.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="748.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1104.0859" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1048.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1063" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="232.5"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="925.5547"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="284.5" y="174.2344"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="199.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="284.5" y="896.4219"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="541.5" y="129.9688"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="39.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="541.5" y="1042.8203"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="349.8594" style="stroke: #404040; stroke-width: 1.0;" width="10" x="837.5" y="129.9688"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="402.8594" style="stroke: #404040; stroke-width: 1.0;" width="10" x="837.5" y="679.2266"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="969.5" y="640.0938"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="73.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="406.5625"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="112.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="580.9609"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="247.4609" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="722.2266"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="97.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="998.6875"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1236.5" y="435.6953"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="131.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1236.5" y="479.8281"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1241.5" y="516.8281"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="45" x2="45" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="289" x2="289" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="546.5" x2="546.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="700.5" x2="700.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="842.5" x2="842.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="974.5" x2="974.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1112.5" x2="1112.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1241.5" x2="1241.5" y1="83.9688" y2="1114.0859"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="8" y="81.1387">Application</text><ellipse cx="45.5" cy="13" fill="#FFFACD" filter="url(#f1jw437lb3978k)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M45.5,21 L45.5,48 M32.5,29 L58.5,29 M45.5,48 L32.5,63 M45.5,48 L58.5,63 " fill="#FFFACD" filter="url(#f1jw437lb3978k)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="233" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="240" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="479.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="486.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="623.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="630.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="788.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="795.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="906.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="913.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1052.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1059.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1195.5" y="81.1387">Audio Domain</text><ellipse cx="1241.5" cy="13" fill="#FFFACD" filter="url(#f1jw437lb3978k)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1241.5,21 L1241.5,48 M1228.5,29 L1254.5,29 M1241.5,48 L1228.5,63 M1241.5,48 L1254.5,63 " fill="#FFFACD" filter="url(#f1jw437lb3978k)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="232.5"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="925.5547"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="284.5" y="174.2344"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="199.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="284.5" y="896.4219"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="541.5" y="129.9688"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="39.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="541.5" y="1042.8203"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="349.8594" style="stroke: #404040; stroke-width: 1.0;" width="10" x="837.5" y="129.9688"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="402.8594" style="stroke: #404040; stroke-width: 1.0;" width="10" x="837.5" y="679.2266"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="969.5" y="640.0938"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="73.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="406.5625"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="112.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="580.9609"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="247.4609" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="722.2266"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="97.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="998.6875"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1236.5" y="435.6953"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="131.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1236.5" y="479.8281"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1241.5" y="516.8281"/><polygon fill="#000000" points="562.5,125.9688,552.5,129.9688,562.5,133.9688,558.5,129.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="556.5" x2="836.5" y1="129.9688" y2="129.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="568.5" y="110.0356">cbMainConnectionStateChanged(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="116" x="592.5" y="125.1685">CS_CONNECTING)</text><polygon fill="#000000" points="305.5,170.2344,295.5,174.2344,305.5,178.2344,301.5,174.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="299.5" x2="540.5" y1="174.2344" y2="174.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="228" x="311.5" y="154.3013">signal("MmainConnectionChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="116" x="331.5" y="169.4341">CS_CONECTING)")</text><polygon fill="#000000" points="825.5,184.5,835.5,188.5,825.5,192.5,829.5,188.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="546.5" x2="831.5" y1="188.5" y2="188.5"/><polygon fill="#000000" points="61.5,228.5,51.5,232.5,61.5,236.5,57.5,232.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="283.5" y1="232.5" y2="232.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="215" x="67.5" y="212.5669">event [mainConnectionChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="111" x="87.5" y="227.6997">CS_CONECTING)]</text><polygon fill="#FBFB77" filter="url(#f1jw437lb3978k)" points="979,275.7656,979,375.7656,1303,375.7656,1303,285.7656,1293,275.7656,979,275.7656" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1293" x2="1293" y1="275.7656" y2="285.7656"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1303" x2="1293" y1="285.7656" y2="285.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="252" x="985" y="292.8325">Audio Manager Policy decides this main</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="223" x="985" y="307.9653">connection have to be established.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="287" x="985" y="323.0981">At the beginning of sequence Audio Manager</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="300" x="985" y="338.231">should inform cbMainConnectionStateChanged</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="303" x="985" y="353.3638">(CS_CONNECTING) to indicated pre-information</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="111" x="985" y="368.4966">of establishment.</text><polygon fill="#000000" points="1095.5,402.5625,1105.5,406.5625,1095.5,410.5625,1099.5,406.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="847.5" x2="1101.5" y1="406.5625" y2="406.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="854.5" y="401.6294">asyncConnect()</text><polygon fill="#000000" points="1224.5,431.6953,1234.5,435.6953,1224.5,439.6953,1228.5,435.6953" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1117.5" x2="1230.5" y1="435.6953" y2="435.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="1124.5" y="430.7622">asyncConnect()</text><polygon fill="#000000" points="853.5,475.8281,843.5,479.8281,853.5,483.8281,849.5,479.8281" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="847.5" x2="1111.5" y1="479.8281" y2="479.8281"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1251.5" x2="1293.5" y1="508.9609" y2="508.9609"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1293.5" x2="1293.5" y1="508.9609" y2="521.9609"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1252.5" x2="1293.5" y1="521.9609" y2="521.9609"/><polygon fill="#000000" points="1262.5,517.9609,1252.5,521.9609,1262.5,525.9609,1258.5,521.9609" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="101" x="1258.5" y="503.895">setAudioMode()</text><polygon fill="#000000" points="1128.5,576.9609,1118.5,580.9609,1128.5,584.9609,1124.5,580.9609" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1122.5" x2="1235.5" y1="580.9609" y2="580.9609"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="85" x="1134.5" y="576.0278">ackConnect()</text><polygon fill="#000000" points="990.5,636.0938,980.5,640.0938,990.5,644.0938,986.5,640.0938" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="984.5" x2="1106.5" y1="640.0938" y2="640.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="85" x="996.5" y="635.1606">ackConnect()</text><polygon fill="#000000" points="858.5,675.2266,848.5,679.2266,858.5,683.2266,854.5,679.2266" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="852.5" x2="968.5" y1="679.2266" y2="679.2266"/><polygon fill="#000000" points="1100.5,689.2266,1110.5,693.2266,1100.5,697.2266,1104.5,693.2266" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="974.5" x2="1106.5" y1="693.2266" y2="693.2266"/><polygon fill="#000000" points="1095.5,718.2266,1105.5,722.2266,1095.5,726.2266,1099.5,722.2266" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="847.5" x2="1101.5" y1="722.2266" y2="722.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="854.5" y="717.2935">asyncConnect()</text><polygon fill="#FBFB77" filter="url(#f1jw437lb3978k)" points="335,735.3594,335,866.3594,692,866.3594,692,745.3594,682,735.3594,335,735.3594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="682" x2="682" y1="735.3594" y2="745.3594"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="692" x2="682" y1="745.3594" y2="745.3594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="288" x="341" y="752.4263">Audio Manager have to know that Application</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="295" x="341" y="767.5591">certainly start preparing sound route, and wait</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="285" x="341" y="782.6919">proceeding until Application return feedback.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="333" x="341" y="797.8247">Main reason is to make sure that entire sound route</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="313" x="341" y="812.9575">is established before connection state transite to</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="336" x="341" y="828.0903">next phase. Otherwise it is possible for Application to</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="333" x="341" y="843.2231">face the problem that ALSA virtual device cannot be</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="270" x="341" y="858.356">opened after connection state is changed.</text><polygon fill="#000000" points="305.5,892.4219,295.5,896.4219,305.5,900.4219,301.5,896.4219" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="299.5" x2="1106.5" y1="896.4219" y2="896.4219"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="311.5" y="891.4888">asyncConnect()</text><polygon fill="#000000" points="61.5,921.5547,51.5,925.5547,61.5,929.5547,57.5,925.5547" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="283.5" y1="925.5547" y2="925.5547"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="140" x="67.5" y="920.6216">event [asyncConnect]</text><polygon fill="#000000" points="858.5,965.6875,848.5,969.6875,858.5,973.6875,854.5,969.6875" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="852.5" x2="1111.5" y1="969.6875" y2="969.6875"/><polygon fill="#000000" points="1095.5,994.6875,1105.5,998.6875,1095.5,1002.6875,1099.5,998.6875" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="294.5" x2="1101.5" y1="998.6875" y2="998.6875"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="85" x="301.5" y="993.7544">ackConnect()</text><polygon fill="#000000" points="562.5,1038.8203,552.5,1042.8203,562.5,1046.8203,558.5,1042.8203" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="556.5" x2="836.5" y1="1042.8203" y2="1042.8203"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="568.5" y="1022.8872">cbMainConnectionStateChanged(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="112" x="584.5" y="1038.02">CS_SUSPENDED)</text><polygon fill="#000000" points="830.5,1078.0859,840.5,1082.0859,830.5,1086.0859,834.5,1082.0859" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="546.5" x2="836.5" y1="1082.0859" y2="1082.0859"/><polygon fill="#000000" points="300.5,1092.0859,290.5,1096.0859,300.5,1100.0859,296.5,1096.0859" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="294.5" x2="1111.5" y1="1096.0859" y2="1096.0859"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+AM -> CS : cbMainConnectionStateChanged(\n CS_CONNECTING)
+activate AM #00FF00
+activate CS #00FF00
+
+CS -> SM : signal("MmainConnectionChanged (\n CS_CONECTING)")
+activate SM #00FF00
+CS - -> AM
+deactivate CS
+SM -> AP : event [mainConnectionChanged (\n CS_CONECTING)]
+activate AP #00FF00
+deactivate SM
+
+deactivate AP
+
+
+note right of RR
+ Audio Manager Policy decides this main
+ connection have to be established.
+ At the beginning of sequence Audio Manager
+ should inform cbMainConnectionStateChanged
+ (CS_CONNECTING) to indicated pre-information
+ of establishment.
+end note
+
+AM -> RS : asyncConnect()
+activate RS #00FF00
+
+RS-> AD : asyncConnect()
+
+activate AD #00FF00
+deactivate AD
+RS - -> AM
+deactivate RS
+deactivate AM
+
+activate AD #00FF00
+AD -> AD : setAudioMode()
+activate AD #00FF00
+deactivate AD
+AD -> RS : ackConnect()
+activate RS #00FF00
+deactivate AD
+
+RS -> RR : ackConnect()
+activate RR #00FF00
+|||
+RR -> AM
+activate AM #00FF00
+
+RR - -> RS
+deactivate RR
+deactivate RS
+
+AM -> RS : asyncConnect()
+activate RS #00FF00
+
+note left of CR
+ Audio Manager have to know that Application
+ certainly start preparing sound route, and wait
+ proceeding until Application return feedback.
+ Main reason is to make sure that entire sound route
+ is established before connection state transite to
+ next phase. Otherwise it is possible for Application to
+ face the problem that ALSA virtual device cannot be
+ opened after connection state is changed.
+end note
+
+RS -> SM : asyncConnect()
+activate SM #00FF00
+SM -> AP : event [asyncConnect]
+activate AP #00FF00
+deactivate AP
+RS - -> AM
+deactivate RS
+SM -> RS : ackConnect()
+activate RS #00FF00
+
+AM -> CS : cbMainConnectionStateChanged(\n CS_SUSPENDED)
+activate CS #00FF00
+|||
+CS - -> AM
+deactivate CS
+deactivate AM
+RS- ->SM
+deactivate RS
+deactivate SM
+@enduml
+
+PlantUML version 1.2017.16beta5(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_disconnectsoundroute.svg b/doc/parts/seq_disconnectsoundroute.svg
new file mode 100644
index 0000000..9036aca
--- /dev/null
+++ b/doc/parts/seq_disconnectsoundroute.svg
@@ -0,0 +1,110 @@
+<?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="843px" preserveAspectRatio="none" style="width:1187px;height:843px;background:#EEEBDC;" version="1.1" viewBox="0 0 1187 843" width="1187px" zoomAndPan="magnify"><defs><filter height="300%" id="f190eucmp65hi5" 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><rect fill="#EEEBDC" height="821.4297" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="295" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="309.5" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="821.4297" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="439" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="568" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="821.4297" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="868" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="882.5" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="198.2344"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="227.5" y="169.1016"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="39.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="361" y="774.1641"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="396.9297" style="stroke: #404040; stroke-width: 1.0;" width="10" x="657" y="114.9688"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="122.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="657" y="691.1641"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="789" y="311.5"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="789" y="652.0313"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="396.9297" style="stroke: #404040; stroke-width: 1.0;" width="10" x="927" y="114.9688"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="107.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="927" y="598.0313"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="100.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1074" y="497.7656"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1079" y="548.8984"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="45" x2="45" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="232" x2="232" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="366" x2="366" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="520" x2="520" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="662" x2="662" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="794" x2="794" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="932" x2="932" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1079" x2="1079" y1="83.9688" y2="831.4297"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="8" y="81.1387">Application</text><ellipse cx="45.5" cy="13" fill="#FFFACD" filter="url(#f190eucmp65hi5)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M45.5,21 L45.5,48 M32.5,29 L58.5,29 M45.5,48 L32.5,63 M45.5,48 L58.5,63 " fill="#FFFACD" filter="url(#f190eucmp65hi5)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="176" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="183" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="299" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="306" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="443" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="450" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="608" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="615" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="726" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="733" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="872" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="879" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1033" y="81.1387">Audio Domain</text><ellipse cx="1079" cy="13" fill="#FFFACD" filter="url(#f190eucmp65hi5)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1079,21 L1079,48 M1066,29 L1092,29 M1079,48 L1066,63 M1079,48 L1092,63 " fill="#FFFACD" filter="url(#f190eucmp65hi5)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="198.2344"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="227.5" y="169.1016"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="39.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="361" y="774.1641"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="396.9297" style="stroke: #404040; stroke-width: 1.0;" width="10" x="657" y="114.9688"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="122.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="657" y="691.1641"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="789" y="311.5"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="789" y="652.0313"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="396.9297" style="stroke: #404040; stroke-width: 1.0;" width="10" x="927" y="114.9688"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="107.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="927" y="598.0313"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="100.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1074" y="497.7656"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1079" y="548.8984"/><polygon fill="#000000" points="915,110.9688,925,114.9688,915,118.9688,919,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="667" x2="921" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="118" x="674" y="110.0356">asyncDisconnect()</text><polygon fill="#000000" points="248.5,165.1016,238.5,169.1016,248.5,173.1016,244.5,169.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="242.5" x2="926" y1="169.1016" y2="169.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="118" x="254.5" y="164.1685">asyncDisconnect()</text><polygon fill="#000000" points="61.5,194.2344,51.5,198.2344,61.5,202.2344,57.5,198.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="226.5" y1="198.2344" y2="198.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="158" x="67.5" y="193.3013">event [asyncDisconnect]</text><polygon fill="#000000" points="915,253.3672,925,257.3672,915,261.3672,919,257.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="232.5" x2="921" y1="257.3672" y2="257.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="103" x="239.5" y="252.4341">ackDisconnect()</text><polygon fill="#000000" points="810,307.5,800,311.5,810,315.5,806,311.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="804" x2="926" y1="311.5" y2="311.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="103" x="816" y="306.5669">ackDisconnect()</text><polygon fill="#000000" points="678,346.6328,668,350.6328,678,354.6328,674,350.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="672" x2="788" y1="350.6328" y2="350.6328"/><polygon fill="#000000" points="915,360.6328,925,364.6328,915,368.6328,919,364.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="794" x2="921" y1="364.6328" y2="364.6328"/><polygon fill="#000000" points="915,439.6328,925,443.6328,915,447.6328,919,443.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="667" x2="921" y1="443.6328" y2="443.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="118" x="674" y="438.6997">asyncDisconnect()</text><polygon fill="#000000" points="1062,493.7656,1072,497.7656,1062,501.7656,1066,497.7656" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="937" x2="1068" y1="497.7656" y2="497.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="118" x="944" y="492.8325">asyncDisconnect()</text><polygon fill="#000000" points="673,507.8984,663,511.8984,673,515.8984,669,511.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="667" x2="931" y1="511.8984" y2="511.8984"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1089" x2="1131" y1="541.0313" y2="541.0313"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1131" x2="1131" y1="541.0313" y2="554.0313"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1090" x2="1131" y1="554.0313" y2="554.0313"/><polygon fill="#000000" points="1100,550.0313,1090,554.0313,1100,558.0313,1096,554.0313" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="1096" y="535.9653">disconnect()</text><polygon fill="#000000" points="948,594.0313,938,598.0313,948,602.0313,944,598.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="942" x2="1078" y1="598.0313" y2="598.0313"/><polygon fill="#000000" points="810,648.0313,800,652.0313,810,656.0313,806,652.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="804" x2="926" y1="652.0313" y2="652.0313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="103" x="816" y="647.0981">ackDisconnect()</text><polygon fill="#000000" points="678,687.1641,668,691.1641,678,695.1641,674,691.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="672" x2="788" y1="691.1641" y2="691.1641"/><polygon fill="#000000" points="920,701.1641,930,705.1641,920,709.1641,924,705.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="794" x2="926" y1="705.1641" y2="705.1641"/><polygon fill="#000000" points="382,770.1641,372,774.1641,382,778.1641,378,774.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="376" x2="656" y1="774.1641" y2="774.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="388" y="754.231">cbMainConnectionStateChanged(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="133" x="480" y="769.3638">CS_DISCONNECTED)</text><polygon fill="#000000" points="650,809.4297,660,813.4297,650,817.4297,654,813.4297" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="366" x2="656" y1="813.4297" y2="813.4297"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+AM -> RS : asyncDisconnect()
+activate AM #00ff00
+activate RS #00ff00
+|||
+RS -> SM : asyncDisconnect()
+activate SM #00ff00
+SM -> AP : event [asyncDisconnect]
+activate AP #00ff00
+deactivate AP
+SM -> RS : ackDisconnect()
+deactivate SM
+|||
+RS -> RR : ackDisconnect()
+activate RR #00ff00
+|||
+RR -> AM
+RR- ->RS
+deactivate RR
+|||
+|||
+AM -> RS : asyncDisconnect()
+|||
+RS -> AD : asyncDisconnect()
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+
+AD -> AD : disconnect()
+activate AD #00ff00
+deactivate AD
+AD -> RS
+deactivate AD
+activate RS #00ff00
+|||
+RS -> RR : ackDisconnect()
+activate RR #00ff00
+|||
+RR->AM
+activate AM #00ff00
+RR - -> RS
+deactivate RR
+deactivate RS
+|||
+AM->CS : cbMainConnectionStateChanged(\n CS_DISCONNECTED)
+activate CS #00ff00
+|||
+CS - -> AM
+deactivate CS
+deactivate AM
+@enduml
+
+PlantUML version 1.2017.16beta5(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_initialization.svg b/doc/parts/seq_initialization.svg
new file mode 100644
index 0000000..18cc0bb
--- /dev/null
+++ b/doc/parts/seq_initialization.svg
@@ -0,0 +1,129 @@
+<?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="992px" preserveAspectRatio="none" style="width:1276px;height:992px;background:#EEEBDC;" version="1.1" viewBox="0 0 1276 992" width="1276px" zoomAndPan="magnify"><defs><filter height="300%" id="f1dii61ex93pkt" 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><rect fill="#EEEBDC" height="970.2031" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="328" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="342.5" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="970.2031" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="505.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="634.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="970.2031" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="970.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="985" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="264.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="442.4063"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="29.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="260.5" y="413.2734"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="196.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="260.5" y="510.5391"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="64.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="394" y="735.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="394" y="854.0703"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="582" y="854.0703"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="343.6016" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="135.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="664.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="893.2031"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="855.5" y="625.8047"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="93.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="260.2031"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="122.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="359.1406"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="153.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="539.6719"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="98.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1203.5" y="192.0703"/><rect fill="#EEEBDC" filter="url(#f1dii61ex93pkt)" height="471.8359" style="stroke: #000000; stroke-width: 2.0;" width="1251.5" x="13" y="100.9688"/><rect fill="#EEEBDC" height="249.4688" style="stroke: none; stroke-width: 1.0;" width="1251.5" x="13" y="323.3359"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="60" x2="60" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="265" x2="265" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="399" x2="399" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="586.5" x2="586.5" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="728.5" x2="728.5" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="860.5" x2="860.5" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1034.5" x2="1034.5" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1208.5" x2="1208.5" y1="83.9688" y2="980.2031"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="23" y="81.1387">Application</text><ellipse cx="60.5" cy="13" fill="#FFFACD" filter="url(#f1dii61ex93pkt)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M60.5,21 L60.5,48 M47.5,29 L73.5,29 M60.5,48 L47.5,63 M60.5,48 L73.5,63 " fill="#FFFACD" filter="url(#f1dii61ex93pkt)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="209" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="216" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="332" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="339" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="509.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="516.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="674.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="681.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="792.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="799.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="974.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="981.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1162.5" y="81.1387">Audio Domain</text><ellipse cx="1208.5" cy="13" fill="#FFFACD" filter="url(#f1dii61ex93pkt)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1208.5,21 L1208.5,48 M1195.5,29 L1221.5,29 M1208.5,48 L1195.5,63 M1208.5,48 L1221.5,63 " fill="#FFFACD" filter="url(#f1dii61ex93pkt)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="264.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="442.4063"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="29.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="260.5" y="413.2734"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="196.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="260.5" y="510.5391"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="64.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="394" y="735.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="394" y="854.0703"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="582" y="854.0703"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="343.6016" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="135.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="664.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="893.2031"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="855.5" y="625.8047"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="93.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="260.2031"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="122.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="359.1406"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="153.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="539.6719"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="98.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1203.5" y="192.0703"/><rect fill="none" height="471.8359" style="stroke: #000000; stroke-width: 2.0;" width="1251.5" x="13" y="100.9688"/><polygon fill="#EEEEEE" points="13,100.9688,77,100.9688,77,105.9688,67,115.9688,13,115.9688,13,100.9688" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="28" y="113.1074">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="196" x="92" y="113.1792">[Domain Type = DSP/Amplifier]</text><polygon fill="#000000" points="1017.5,133.9375,1027.5,137.9375,1017.5,141.9375,1021.5,137.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="733.5" x2="1023.5" y1="137.9375" y2="137.9375"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="740.5" y="133.0044">setRoutingReady()</text><polygon fill="#000000" points="1191.5,188.0703,1201.5,192.0703,1191.5,196.0703,1195.5,192.0703" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1039.5" x2="1197.5" y1="192.0703" y2="192.0703"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="1046.5" y="187.1372">setRoutingReady()</text><polygon fill="#000000" points="744.5,227.2031,734.5,231.2031,744.5,235.2031,740.5,231.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="738.5" x2="1033.5" y1="231.2031" y2="231.2031"/><polygon fill="#000000" points="1050.5,256.2031,1040.5,260.2031,1050.5,264.2031,1046.5,260.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1044.5" x2="1202.5" y1="260.2031" y2="260.2031"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="1056.5" y="255.27">confirmRoutingReady()</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="13" x2="1264.5" y1="324.3359" y2="324.3359"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="182" x="18" y="334.5464">[Domain Type = Application]</text><polygon fill="#000000" points="1017.5,355.1406,1027.5,359.1406,1017.5,363.1406,1021.5,359.1406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="733.5" x2="1023.5" y1="359.1406" y2="359.1406"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="740.5" y="354.2075">setRoutingReady()</text><polygon fill="#000000" points="281.5,409.2734,271.5,413.2734,281.5,417.2734,277.5,413.2734" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="275.5" x2="1028.5" y1="413.2734" y2="413.2734"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="164" x="287.5" y="408.3403">signal("setRoutingReady")</text><polygon fill="#000000" points="76.5,438.4063,66.5,442.4063,76.5,446.4063,72.5,442.4063" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="264.5" y1="442.4063" y2="442.4063"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="82.5" y="437.4731">event [setRoutingReady]</text><polygon fill="#000000" points="739.5,477.5391,729.5,481.5391,739.5,485.5391,735.5,481.5391" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="733.5" x2="1033.5" y1="481.5391" y2="481.5391"/><polygon fill="#000000" points="248.5,506.5391,258.5,510.5391,248.5,514.5391,252.5,510.5391" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="65.5" x2="254.5" y1="510.5391" y2="510.5391"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="176" x="72.5" y="505.606">call("confirmRoutingReady")</text><polygon fill="#000000" points="1017.5,535.6719,1027.5,539.6719,1017.5,543.6719,1021.5,539.6719" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="270.5" x2="1023.5" y1="539.6719" y2="539.6719"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="277.5" y="534.7388">confirmRoutingReady()</text><polygon fill="#000000" points="876.5,621.8047,866.5,625.8047,876.5,629.8047,872.5,625.8047" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="870.5" x2="1028.5" y1="625.8047" y2="625.8047"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="882.5" y="620.8716">confirmRoutingReady()</text><polygon fill="#000000" points="744.5,660.9375,734.5,664.9375,744.5,668.9375,740.5,664.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="738.5" x2="854.5" y1="664.9375" y2="664.9375"/><polygon fill="#000000" points="1017.5,674.9375,1027.5,678.9375,1017.5,682.9375,1021.5,678.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="860.5" x2="1023.5" y1="678.9375" y2="678.9375"/><polygon fill="#000000" points="281.5,688.9375,271.5,692.9375,281.5,696.9375,277.5,692.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="275.5" x2="1033.5" y1="692.9375" y2="692.9375"/><polygon fill="#000000" points="71.5,702.9375,61.5,706.9375,71.5,710.9375,67.5,706.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="65.5" x2="264.5" y1="706.9375" y2="706.9375"/><polygon fill="#000000" points="415,731.9375,405,735.9375,415,739.9375,411,735.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="409" x2="722.5" y1="735.9375" y2="735.9375"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="136" x="421" y="731.0044">setCommandReady()</text><polygon fill="#000000" points="716.5,796.0703,726.5,800.0703,716.5,804.0703,720.5,800.0703" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="399" x2="722.5" y1="800.0703" y2="800.0703"/><polygon fill="#000000" points="570,850.0703,580,854.0703,570,858.0703,574,854.0703" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="404" x2="576" y1="854.0703" y2="854.0703"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="164" x="411" y="849.1372">confirmCommandReady()</text><polygon fill="#000000" points="711.5,889.2031,721.5,893.2031,711.5,897.2031,715.5,893.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="592" x2="717.5" y1="893.2031" y2="893.2031"/><polygon fill="#000000" points="410,958.2031,400,962.2031,410,966.2031,406,962.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="404" x2="586" y1="962.2031" y2="962.2031"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application
+participant SoundManager
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver
+ participant AudioManager
+ participant IAmRoutingReceive
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend
+end box
+actor "Audio Domain"
+
+alt Domain Type = DSP/Amplifier
+ AudioManager -> IAmRoutingSend : setRoutingReady()
+ activate AudioManager #00FF00
+ activate IAmRoutingSend #00FF00
+ |||
+ IAmRoutingSend -> "Audio Domain" : setRoutingReady()
+ activate "Audio Domain" #00FF00
+ |||
+ AudioManager <- - IAmRoutingSend
+ deactivate IAmRoutingSend
+ IAmRoutingSend <- "Audio Domain" : confirmRoutingReady()
+ activate IAmRoutingSend #00ff00
+ deactivate IAmRoutingSend
+ deactivate "Audio Domain"
+ |||
+else Domain Type = Application
+ AudioManager -> IAmRoutingSend : setRoutingReady()
+ activate IAmRoutingSend #00FF00
+ |||
+ SoundManager <- IAmRoutingSend : signal("setRoutingReady")
+ activate SoundManager #00FF00
+ Application <- SoundManager : event [setRoutingReady]
+ deactivate SoundManager
+ activate Application #00FF00
+ |||
+ AudioManager <- - IAmRoutingSend
+ deactivate IAmRoutingSend
+ deactivate AudioManager
+ Application -> SoundManager : call("confirmRoutingReady")
+ activate SoundManager #00FF00
+ SoundManager -> IAmRoutingSend : confirmRoutingReady()
+ activate IAmRoutingSend #00FF00
+ |||
+end
+
+|||
+IAmRoutingReceive <- IAmRoutingSend : confirmRoutingReady()
+activate IAmRoutingReceive #00FF00
+|||
+AudioManager <- IAmRoutingReceive
+activate AudioManager #00FF00
+IAmRoutingReceive - -> IAmRoutingSend
+deactivate IAmRoutingReceive
+
+IAmRoutingSend- ->SoundManager
+deactivate IAmRoutingSend
+SoundManager- ->Application
+deactivate SoundManager
+deactivate Application
+
+IAmCommandSend <- AudioManager : setCommandReady()
+activate IAmCommandSend #00FF00
+|||
+|||
+IAmCommandSend - -> AudioManager
+deactivate IAmCommandSend
+deactivate AudioManager
+|||
+IAmCommandSend -> IAmCommandReceiver : confirmCommandReady()
+activate IAmCommandSend #00FF00
+activate IAmCommandReceiver #00FF00
+|||
+IAmCommandReceiver -> AudioManager
+activate AudioManager #00ff00
+deactivate AudioManager
+|||
+IAmCommandSend <- - IAmCommandReceiver
+deactivate IAmCommandReceiver
+deactivate IAmCommandSend
+@enduml
+
+PlantUML version 1.2017.16beta5(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_registration.svg b/doc/parts/seq_registration.svg
new file mode 100644
index 0000000..9bff665
--- /dev/null
+++ b/doc/parts/seq_registration.svg
@@ -0,0 +1,235 @@
+<?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="1957px" preserveAspectRatio="none" style="width:1380px;height:1957px;background:#EEEBDC;" version="1.1" viewBox="0 0 1380 1957" width="1380px" zoomAndPan="magnify"><defs><filter height="300%" id="f65nhzdhunqvj" 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><rect fill="#EEEBDC" height="1935.9844" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="296.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="311" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1935.9844" style="stroke: #DEB887; stroke-width: 1.0;" width="428" x="440.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="570" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1935.9844" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="990.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1005" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="593.2422"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="973.8438"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="1418.4141"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="333.0078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="593.2422"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="930.7109"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="1375.2813"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="362.5" y="901.5781"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="362.5" y="1346.1484"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="206.2031"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="401.2734"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="279.2031" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="665.6406"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="226.2031" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1163.2109"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="121.9375" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1607.7813"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1883.9844"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="167.0703"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="362.1406"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="28.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="651.5078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="776.4453"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="42.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1135.0781"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1221.0156"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="42.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1579.6484"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1690.5859"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="58.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1869.8516"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="333.0078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="85.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="622.375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1105.9453"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1550.5156"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="87.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1840.7188"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1307.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="763.9063" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1307.5" y="1105.9453"/><rect fill="#EEEBDC" filter="url(#f65nhzdhunqvj)" height="391.3047" style="stroke: #000000; stroke-width: 2.0;" width="1225.5" x="143" y="100.9688"/><rect fill="#EEEBDC" height="195.0703" style="stroke: none; stroke-width: 1.0;" width="1225.5" x="143" y="297.2031"/><rect fill="#EEEBDC" filter="url(#f65nhzdhunqvj)" height="292.3047" style="stroke: #000000; stroke-width: 2.0;" width="1111.5" x="13" y="556.2734"/><rect fill="#EEEBDC" height="107.9375" style="stroke: none; stroke-width: 1.0;" width="1111.5" x="13" y="740.6406"/><rect fill="#EEEBDC" filter="url(#f65nhzdhunqvj)" height="224.1719" style="stroke: #000000; stroke-width: 2.0;" width="769" x="599.5" y="1068.9766"/><rect fill="#EEEBDC" height="107.9375" style="stroke: none; stroke-width: 1.0;" width="769" x="599.5" y="1185.2109"/><rect fill="#EEEBDC" filter="url(#f65nhzdhunqvj)" height="249.1719" style="stroke: #000000; stroke-width: 2.0;" width="769" x="599.5" y="1513.5469"/><rect fill="#EEEBDC" height="107.9375" style="stroke: none; stroke-width: 1.0;" width="769" x="599.5" y="1654.7813"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="60" x2="60" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="209" x2="209" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="367.5" x2="367.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="521.5" x2="521.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="663.5" x2="663.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="796.5" x2="796.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1054.5" x2="1054.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1312.5" x2="1312.5" y1="83.9688" y2="1945.9844"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="23" y="81.1387">Application</text><ellipse cx="60.5" cy="13" fill="#FFFACD" filter="url(#f65nhzdhunqvj)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M60.5,21 L60.5,48 M47.5,29 L73.5,29 M60.5,48 L47.5,63 M60.5,48 L73.5,63 " fill="#FFFACD" filter="url(#f65nhzdhunqvj)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="153" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="160" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="300.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="307.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="444.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="451.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="609.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="616.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="728.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="735.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="994.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1001.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1266.5" y="81.1387">Audio Domain</text><ellipse cx="1312.5" cy="13" fill="#FFFACD" filter="url(#f65nhzdhunqvj)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1312.5,21 L1312.5,48 M1299.5,29 L1325.5,29 M1312.5,48 L1299.5,63 M1312.5,48 L1325.5,63 " fill="#FFFACD" filter="url(#f65nhzdhunqvj)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="593.2422"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="973.8438"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="1418.4141"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="333.0078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="593.2422"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="930.7109"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="1375.2813"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="362.5" y="901.5781"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="362.5" y="1346.1484"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="206.2031"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="401.2734"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="279.2031" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="665.6406"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="226.2031" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1163.2109"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="121.9375" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1607.7813"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1883.9844"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="167.0703"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="362.1406"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="28.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="651.5078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="776.4453"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="42.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1135.0781"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1221.0156"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="42.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1579.6484"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1690.5859"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="58.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1869.8516"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="333.0078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="85.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="622.375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1105.9453"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1550.5156"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="87.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1840.7188"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1307.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="763.9063" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1307.5" y="1105.9453"/><rect fill="none" height="391.3047" style="stroke: #000000; stroke-width: 2.0;" width="1225.5" x="143" y="100.9688"/><polygon fill="#EEEEEE" points="143,100.9688,207,100.9688,207,105.9688,197,115.9688,143,115.9688,143,100.9688" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="158" y="113.1074">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="196" x="222" y="113.1792">[Domain Type = DSP/Amplifier]</text><polygon fill="#000000" points="1070.5,133.9375,1060.5,137.9375,1070.5,141.9375,1066.5,137.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1064.5" x2="1306.5" y1="137.9375" y2="137.9375"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="109" x="1076.5" y="133.0044">registerDomain()</text><polygon fill="#000000" points="812.5,163.0703,802.5,167.0703,812.5,171.0703,808.5,167.0703" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="167.0703" y2="167.0703"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="109" x="818.5" y="162.1372">registerDomain()</text><polygon fill="#000000" points="679.5,202.2031,669.5,206.2031,679.5,210.2031,675.5,206.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="206.2031" y2="206.2031"/><polygon fill="#000000" points="1037.5,271.2031,1047.5,275.2031,1037.5,279.2031,1041.5,275.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1043.5" y1="275.2031" y2="275.2031"/><polygon fill="#000000" points="1300.5,285.2031,1310.5,289.2031,1300.5,293.2031,1304.5,289.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1054.5" x2="1306.5" y1="289.2031" y2="289.2031"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="143" x2="1368.5" y1="298.2031" y2="298.2031"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="206" x="148" y="308.4136">[Domain Type = SoundManager]</text><polygon fill="#000000" points="1037.5,329.0078,1047.5,333.0078,1037.5,337.0078,1041.5,333.0078" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="214.5" x2="1043.5" y1="333.0078" y2="333.0078"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="109" x="221.5" y="328.0747">registerDomain()</text><polygon fill="#000000" points="812.5,358.1406,802.5,362.1406,812.5,366.1406,808.5,362.1406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="362.1406" y2="362.1406"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="109" x="818.5" y="357.2075">registerDomain()</text><polygon fill="#000000" points="679.5,397.2734,669.5,401.2734,679.5,405.2734,675.5,401.2734" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="401.2734" y2="401.2734"/><polygon fill="#000000" points="1037.5,466.2734,1047.5,470.2734,1037.5,474.2734,1041.5,470.2734" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1043.5" y1="470.2734" y2="470.2734"/><polygon fill="#000000" points="220.5,480.2734,210.5,484.2734,220.5,488.2734,216.5,484.2734" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="214.5" x2="1053.5" y1="484.2734" y2="484.2734"/><rect fill="none" height="292.3047" style="stroke: #000000; stroke-width: 2.0;" width="1111.5" x="13" y="556.2734"/><polygon fill="#EEEEEE" points="13,556.2734,77,556.2734,77,561.2734,67,571.2734,13,571.2734,13,556.2734" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="28" y="568.4121">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="92" y="568.4839">[Register Type = Dynamic]</text><polygon fill="#000000" points="192.5,589.2422,202.5,593.2422,192.5,597.2422,196.5,593.2422" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="65.5" x2="198.5" y1="593.2422" y2="593.2422"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="104" x="72.5" y="588.3091">registerSource()</text><polygon fill="#000000" points="1037.5,618.375,1047.5,622.375,1037.5,626.375,1041.5,622.375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="214.5" x2="1043.5" y1="622.375" y2="622.375"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="104" x="221.5" y="617.4419">registerSource()</text><polygon fill="#000000" points="812.5,647.5078,802.5,651.5078,812.5,655.5078,808.5,651.5078" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="651.5078" y2="651.5078"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="104" x="818.5" y="646.5747">registerSource()</text><polygon fill="#000000" points="679.5,661.6406,669.5,665.6406,679.5,669.6406,675.5,665.6406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="665.6406" y2="665.6406"/><polygon fill="#000000" points="1037.5,675.6406,1047.5,679.6406,1037.5,683.6406,1041.5,679.6406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1043.5" y1="679.6406" y2="679.6406"/><polygon fill="#000000" points="225.5,689.6406,215.5,693.6406,225.5,697.6406,221.5,693.6406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="219.5" x2="1048.5" y1="693.6406" y2="693.6406"/><polygon fill="#000000" points="71.5,703.6406,61.5,707.6406,71.5,711.6406,67.5,707.6406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="65.5" x2="208.5" y1="707.6406" y2="707.6406"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="13" x2="1124.5" y1="741.6406" y2="741.6406"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="152" x="18" y="751.8511">[Register Type = Static]</text><polygon fill="#000000" points="779.5,772.4453,789.5,776.4453,779.5,780.4453,783.5,776.4453" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="668.5" x2="785.5" y1="776.4453" y2="776.4453"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="675.5" y="771.5122">registerSource</text><polygon fill="#000000" points="679.5,811.5781,669.5,815.5781,679.5,819.5781,675.5,815.5781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="673.5" x2="795.5" y1="815.5781" y2="815.5781"/><polygon fill="#000000" points="383.5,897.5781,373.5,901.5781,383.5,905.5781,379.5,901.5781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="377.5" x2="657.5" y1="901.5781" y2="901.5781"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="97" x="389.5" y="896.645">cbNewSource()</text><polygon fill="#000000" points="225.5,926.7109,215.5,930.7109,225.5,934.7109,221.5,930.7109" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="219.5" x2="361.5" y1="930.7109" y2="930.7109"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="129" x="231.5" y="925.7778">signal("NewSource")</text><polygon fill="#000000" points="651.5,940.8438,661.5,944.8438,651.5,948.8438,655.5,944.8438" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="367.5" x2="657.5" y1="944.8438" y2="944.8438"/><polygon fill="#000000" points="76.5,969.8438,66.5,973.8438,76.5,977.8438,72.5,973.8438" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="203.5" y1="973.8438" y2="973.8438"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="120" x="82.5" y="968.9106">event [newSource]</text><rect fill="none" height="224.1719" style="stroke: #000000; stroke-width: 2.0;" width="769" x="599.5" y="1068.9766"/><polygon fill="#EEEEEE" points="599.5,1068.9766,663.5,1068.9766,663.5,1073.9766,653.5,1083.9766,599.5,1083.9766,599.5,1068.9766" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="614.5" y="1081.1152">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="678.5" y="1081.187">[Register Type = Dynamic]</text><polygon fill="#000000" points="1070.5,1101.9453,1060.5,1105.9453,1070.5,1109.9453,1066.5,1105.9453" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1064.5" x2="1306.5" y1="1105.9453" y2="1105.9453"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="1076.5" y="1101.0122">registerSink()</text><polygon fill="#000000" points="812.5,1131.0781,802.5,1135.0781,812.5,1139.0781,808.5,1135.0781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="1135.0781" y2="1135.0781"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="818.5" y="1130.145">registerSink()</text><polygon fill="#000000" points="1295.5,1145.2109,1305.5,1149.2109,1295.5,1153.2109,1299.5,1149.2109" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1059.5" x2="1301.5" y1="1149.2109" y2="1149.2109"/><polygon fill="#000000" points="679.5,1159.2109,669.5,1163.2109,679.5,1167.2109,675.5,1163.2109" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="1163.2109" y2="1163.2109"/><polygon fill="#000000" points="1042.5,1173.2109,1052.5,1177.2109,1042.5,1181.2109,1046.5,1177.2109" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1048.5" y1="1177.2109" y2="1177.2109"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="599.5" x2="1368.5" y1="1186.2109" y2="1186.2109"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="152" x="604.5" y="1196.4214">[Register Type = Static]</text><polygon fill="#000000" points="779.5,1217.0156,789.5,1221.0156,779.5,1225.0156,783.5,1221.0156" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="668.5" x2="785.5" y1="1221.0156" y2="1221.0156"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="76" x="675.5" y="1216.0825">registerSink</text><polygon fill="#000000" points="679.5,1256.1484,669.5,1260.1484,679.5,1264.1484,675.5,1260.1484" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="673.5" x2="795.5" y1="1260.1484" y2="1260.1484"/><polygon fill="#000000" points="383.5,1342.1484,373.5,1346.1484,383.5,1350.1484,379.5,1346.1484" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="377.5" x2="657.5" y1="1346.1484" y2="1346.1484"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="389.5" y="1341.2153">cbNewSink()</text><polygon fill="#000000" points="225.5,1371.2813,215.5,1375.2813,225.5,1379.2813,221.5,1375.2813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="219.5" x2="361.5" y1="1375.2813" y2="1375.2813"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="111" x="231.5" y="1370.3481">signal("NewSink")</text><polygon fill="#000000" points="651.5,1385.4141,661.5,1389.4141,651.5,1393.4141,655.5,1389.4141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="367.5" x2="657.5" y1="1389.4141" y2="1389.4141"/><polygon fill="#000000" points="76.5,1414.4141,66.5,1418.4141,76.5,1422.4141,72.5,1418.4141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="203.5" y1="1418.4141" y2="1418.4141"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="102" x="82.5" y="1413.481">event [newSink]</text><rect fill="none" height="249.1719" style="stroke: #000000; stroke-width: 2.0;" width="769" x="599.5" y="1513.5469"/><polygon fill="#EEEEEE" points="599.5,1513.5469,663.5,1513.5469,663.5,1518.5469,653.5,1528.5469,599.5,1528.5469,599.5,1513.5469" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="614.5" y="1525.6855">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="678.5" y="1525.7573">[Register Type = Dynamic]</text><polygon fill="#000000" points="1070.5,1546.5156,1060.5,1550.5156,1070.5,1554.5156,1066.5,1550.5156" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1064.5" x2="1306.5" y1="1550.5156" y2="1550.5156"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="114" x="1076.5" y="1545.5825">registerGateway()</text><polygon fill="#000000" points="812.5,1575.6484,802.5,1579.6484,812.5,1583.6484,808.5,1579.6484" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="1579.6484" y2="1579.6484"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="114" x="818.5" y="1574.7153">registerGateway()</text><polygon fill="#000000" points="1295.5,1589.7813,1305.5,1593.7813,1295.5,1597.7813,1299.5,1593.7813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1059.5" x2="1301.5" y1="1593.7813" y2="1593.7813"/><polygon fill="#000000" points="679.5,1603.7813,669.5,1607.7813,679.5,1611.7813,675.5,1607.7813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="1607.7813" y2="1607.7813"/><polygon fill="#000000" points="1042.5,1617.7813,1052.5,1621.7813,1042.5,1625.7813,1046.5,1621.7813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1048.5" y1="1621.7813" y2="1621.7813"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="599.5" x2="1368.5" y1="1655.7813" y2="1655.7813"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="152" x="604.5" y="1665.9917">[Register Type = Static]</text><polygon fill="#000000" points="779.5,1686.5859,789.5,1690.5859,779.5,1694.5859,783.5,1690.5859" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="668.5" x2="785.5" y1="1690.5859" y2="1690.5859"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="104" x="675.5" y="1685.6528">registerGateway</text><polygon fill="#000000" points="674.5,1725.7188,664.5,1729.7188,674.5,1733.7188,670.5,1729.7188" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="668.5" x2="795.5" y1="1729.7188" y2="1729.7188"/><polygon fill="#000000" points="1070.5,1836.7188,1060.5,1840.7188,1070.5,1844.7188,1066.5,1840.7188" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1064.5" x2="1306.5" y1="1840.7188" y2="1840.7188"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="229" x="1076.5" y="1835.7856">hookDomainRegistrationCompelte()</text><polygon fill="#000000" points="812.5,1865.8516,802.5,1869.8516,812.5,1873.8516,808.5,1869.8516" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="1869.8516" y2="1869.8516"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="229" x="818.5" y="1864.9185">hookDomainRegistrationCompelte()</text><polygon fill="#000000" points="679.5,1879.9844,669.5,1883.9844,679.5,1887.9844,675.5,1883.9844" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="1883.9844" y2="1883.9844"/><polygon fill="#000000" points="1042.5,1923.9844,1052.5,1927.9844,1042.5,1931.9844,1046.5,1927.9844" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1048.5" y1="1927.9844" y2="1927.9844"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+alt Domain Type = DSP/Amplifier
+ RS <- AD : registerDomain()
+ activate AD #00FF00
+
+ activate RS #00FF00
+ RR <- RS : registerDomain()
+
+ activate RR #00FF00
+ |||
+ AM <- RR
+ activate AM #00ff00
+ deactivate AM
+ |||
+ RR - -> RS
+ deactivate RR
+
+ RS - -> AD
+ deactivate RS
+
+ deactivate AD
+else Domain Type = SoundManager
+ RS <- SM : registerDomain()
+ activate SM #00FF00
+ activate RS #00FF00
+
+ RR <- RS : registerDomain()
+
+ activate RR #00FF00
+ |||
+ AM <- RR
+ activate AM #00ff00
+ deactivate AM
+ |||
+ RR - -> RS
+ deactivate RR
+
+ RS - -> SM
+ deactivate RS
+ deactivate SM
+end
+|||
+|||
+alt Register Type = Dynamic
+ SM <- AP : registerSource()
+ activate AP #00FF00
+
+ activate SM #00FF00
+ RS <- SM : registerSource()
+
+ activate RS #00FF00
+ RS -> RR : registerSource()
+ activate RR #00FF00
+
+ RR -> AM
+ activate AM #00FF00
+ RR - -> RS
+ deactivate RR
+
+ RS - -> SM
+ SM - -> AP
+ deactivate RS
+ deactivate SM
+ deactivate AP
+ |||
+
+else Register Type = Static
+ AM -> RR : registerSource
+ activate RR #00FF00
+ |||
+ RR - -> AM
+ deactivate RR
+ |||
+end
+|||
+AM -> CS : cbNewSource()
+activate CS #00FF00
+CS -> SM : signal("NewSource")
+activate SM #00FF00
+
+CS - -> AM
+deactivate CS
+deactivate AM
+
+SM -> AP : event [newSource]
+activate AP #00FF00
+deactivate SM
+
+deactivate AP
+|||
+|||
+alt Register Type = Dynamic
+ RS <- AD : registerSink()
+ activate AD #00FF00
+
+ activate RS #00FF00
+ RR <- RS : registerSink()
+ activate RR #00FF00
+
+ RS - -> AD
+' deactivate AD
+
+ RR -> AM
+ activate AM #00FF00
+ RR - -> RS
+ deactivate RS
+ deactivate RR
+
+
+else Register Type = Static
+ AM -> RR : registerSink
+ activate RR #00FF00
+ |||
+ RR - -> AM
+ deactivate RR
+ |||
+end
+|||
+AM -> CS : cbNewSink()
+
+activate CS #00FF00
+CS -> SM : signal("NewSink")
+activate SM #00FF00
+
+CS - -> AM
+deactivate CS
+deactivate AM
+
+SM -> AP : event [newSink]
+activate AP #00FF00
+deactivate SM
+deactivate AP
+|||
+|||
+alt Register Type = Dynamic
+ RS <- AD : registerGateway()
+' activate AD #00FF00
+
+ activate RS #00FF00
+ RR <- RS : registerGateway()
+ activate RR #00FF00
+
+ RS - -> AD
+' deactivate AD
+
+ RR -> AM
+ activate AM #00FF00
+ RR - -> RS
+ deactivate RS
+ deactivate RR
+ |||
+else Register Type = Static
+ AM -> RR : registerGateway
+ activate RR #00FF00
+ |||
+ RR - -> AM
+ deactivate RR
+ deactivate AM
+ |||
+end
+
+|||
+|||
+AD -> RS : hookDomainRegistrationCompelte()
+'activate AD #00FF00
+activate RS #00FF00
+RS -> RR : hookDomainRegistrationCompelte()
+deactivate AD
+activate RR #00FF00
+RR -> AM
+activate AM #00FF00
+deactivate AM
+
+RR - -> RS
+deactivate RR
+deactivate RS
+deactivate AD
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_releasesoundmode.svg b/doc/parts/seq_releasesoundmode.svg
new file mode 100644
index 0000000..cbe1fa0
--- /dev/null
+++ b/doc/parts/seq_releasesoundmode.svg
@@ -0,0 +1,119 @@
+<?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="1079px" preserveAspectRatio="none" style="width:1374px;height:1079px;background:#EEEBDC;" version="1.1" viewBox="0 0 1374 1079" width="1374px" zoomAndPan="magnify"><defs><filter height="300%" id="fcbo85lr89mzm" 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><rect fill="#EEEBDC" height="1057.2109" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="544.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="559" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1057.2109" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="688.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="817.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1057.2109" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1117.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1132" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="185.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="93.9688"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="830.6797"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="1012.0781"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="114.9688"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="787.5469"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="968.9453"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="144.1016"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="733.4141"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="914.8125"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="765" y="198.2344"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="820.8438" style="stroke: #404040; stroke-width: 1.0;" width="10" x="906.5" y="237.3672"/><rect fill="#EEEBDC" filter="url(#fcbo85lr89mzm)" height="705.8438" style="stroke: #000000; stroke-width: 2.0;" width="1350.5" x="13" y="344.3672"/><rect fill="#EEEBDC" filter="url(#fcbo85lr89mzm)" height="288.0781" style="stroke: #000000; stroke-width: 2.0;" width="815" x="538.5" y="392.3359"/><rect fill="#EEEBDC" height="178.0078" style="stroke: none; stroke-width: 1.0;" width="815" x="538.5" y="502.4063"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="60" x2="60" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="335" x2="335" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="615.5" x2="615.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="769.5" x2="769.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="911.5" x2="911.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1043.5" x2="1043.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1181.5" x2="1181.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1297.5" x2="1297.5" y1="83.9688" y2="1067.2109"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="23" y="81.1387">Application</text><ellipse cx="60.5" cy="13" fill="#FFFACD" filter="url(#fcbo85lr89mzm)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M60.5,21 L60.5,48 M47.5,29 L73.5,29 M60.5,48 L47.5,63 M60.5,48 L73.5,63 " fill="#FFFACD" filter="url(#fcbo85lr89mzm)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="279" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="286" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="548.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="555.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="692.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="699.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="857.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="864.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="975.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="982.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1121.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1128.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1251.5" y="81.1387">Audio Domain</text><ellipse cx="1297.5" cy="13" fill="#FFFACD" filter="url(#fcbo85lr89mzm)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1297.5,21 L1297.5,48 M1284.5,29 L1310.5,29 M1297.5,48 L1284.5,63 M1297.5,48 L1310.5,63 " fill="#FFFACD" filter="url(#fcbo85lr89mzm)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="185.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="93.9688"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="830.6797"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="1012.0781"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="114.9688"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="787.5469"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="968.9453"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="144.1016"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="733.4141"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="914.8125"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="765" y="198.2344"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="820.8438" style="stroke: #404040; stroke-width: 1.0;" width="10" x="906.5" y="237.3672"/><polygon fill="#000000" points="318.5,110.9688,328.5,114.9688,318.5,118.9688,322.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="65.5" x2="324.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="72.5" y="110.0356">disconnect()</text><polygon fill="#000000" points="598.5,140.1016,608.5,144.1016,598.5,148.1016,602.5,144.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="340.5" x2="604.5" y1="144.1016" y2="144.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="347.5" y="139.1685">disconnect()</text><polygon fill="#000000" points="753,194.2344,763,198.2344,753,202.2344,757,198.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="620.5" x2="759" y1="198.2344" y2="198.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="627.5" y="193.3013">disconnect()</text><polygon fill="#000000" points="894.5,233.3672,904.5,237.3672,894.5,241.3672,898.5,237.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="775" x2="900.5" y1="237.3672" y2="237.3672"/><polygon fill="#000000" points="631.5,247.3672,621.5,251.3672,631.5,255.3672,627.5,251.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="625.5" x2="769" y1="251.3672" y2="251.3672"/><polygon fill="#000000" points="351.5,261.3672,341.5,265.3672,351.5,269.3672,347.5,265.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="345.5" x2="614.5" y1="265.3672" y2="265.3672"/><polygon fill="#000000" points="71.5,275.3672,61.5,279.3672,71.5,283.3672,67.5,279.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="65.5" x2="334.5" y1="279.3672" y2="279.3672"/><rect fill="none" height="705.8438" style="stroke: #000000; stroke-width: 2.0;" width="1350.5" x="13" y="344.3672"/><polygon fill="#EEEEEE" points="13,344.3672,82,344.3672,82,349.3672,72,359.3672,13,359.3672,13,344.3672" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="24" x="28" y="356.5059">opt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="186" x="97" y="356.5776">[Main connection is existing]</text><rect fill="none" height="288.0781" style="stroke: #000000; stroke-width: 2.0;" width="815" x="538.5" y="392.3359"/><polygon fill="#EEEEEE" points="538.5,392.3359,602.5,392.3359,602.5,397.3359,592.5,407.3359,538.5,407.3359,538.5,392.3359" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="553.5" y="404.4746">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="256" x="617.5" y="404.5464">[MainConnectioState = CS_SUSPENDED]</text><rect fill="#FFFFFF" filter="url(#fcbo85lr89mzm)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="797" x="545.5" y="433.3047"/><polygon fill="#EEEEEE" points="545.5,433.3047,610.5,433.3047,610.5,438.3047,600.5,448.3047,545.5,448.3047,545.5,433.3047" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="558.5" y="446.4434">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="867.5" y="464.3716">Disconnect Sound Route</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="538.5" x2="1353.5" y1="503.4063" y2="503.4063"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="543.5" y="513.6167">[CS_CONNECTED]</text><rect fill="#FFFFFF" filter="url(#fcbo85lr89mzm)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="797" x="545.5" y="542.2109"/><polygon fill="#EEEEEE" points="545.5,542.2109,610.5,542.2109,610.5,547.2109,600.5,557.2109,545.5,557.2109,545.5,542.2109" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="558.5" y="555.3496">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="146" x="873" y="573.2778">Stop Sound Streaming</text><rect fill="#FFFFFF" filter="url(#fcbo85lr89mzm)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="797" x="545.5" y="611.3125"/><polygon fill="#EEEEEE" points="545.5,611.3125,610.5,611.3125,610.5,616.3125,600.5,626.3125,545.5,626.3125,545.5,611.3125" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="558.5" y="624.4512">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="867.5" y="642.3794">Disconnect Sound Route</text><polygon fill="#000000" points="631.5,729.4141,621.5,733.4141,631.5,737.4141,627.5,733.4141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="625.5" x2="905.5" y1="733.4141" y2="733.4141"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="219" x="637.5" y="728.481">cbMainConnectionStateChanged()</text><polygon fill="#000000" points="351.5,783.5469,341.5,787.5469,351.5,791.5469,347.5,787.5469" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="345.5" x2="609.5" y1="787.5469" y2="787.5469"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="251" x="357.5" y="782.6138">signal("MainConnectionStateChanged")</text><polygon fill="#000000" points="894.5,797.6797,904.5,801.6797,894.5,805.6797,898.5,801.6797" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="615.5" x2="900.5" y1="801.6797" y2="801.6797"/><polygon fill="#000000" points="76.5,826.6797,66.5,830.6797,76.5,834.6797,72.5,830.6797" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="329.5" y1="830.6797" y2="830.6797"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="246" x="82.5" y="825.7466">event [mainConnectionStateChanged]</text><polygon fill="#000000" points="631.5,910.8125,621.5,914.8125,631.5,918.8125,627.5,914.8125" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="625.5" x2="905.5" y1="914.8125" y2="914.8125"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="179" x="637.5" y="909.8794">cbRemoveMainConnection()</text><polygon fill="#000000" points="351.5,964.9453,341.5,968.9453,351.5,972.9453,347.5,968.9453" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="345.5" x2="609.5" y1="968.9453" y2="968.9453"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="211" x="357.5" y="964.0122">signal("RemoveMainConnection")</text><polygon fill="#000000" points="894.5,979.0781,904.5,983.0781,894.5,987.0781,898.5,983.0781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="615.5" x2="900.5" y1="983.0781" y2="983.0781"/><polygon fill="#000000" points="76.5,1008.0781,66.5,1012.0781,76.5,1016.0781,72.5,1012.0781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="329.5" y1="1012.0781" y2="1012.0781"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="201" x="82.5" y="1007.145">event [removeMainConnection]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+activate AP #00ff00
+AP -> SM : disconnect()
+activate SM #00ff00
+SM -> CS : disconnect()
+activate CS #00ff00
+|||
+CS -> CR : disconnect()
+activate CR #00ff00
+|||
+CR -> AM
+activate AM #00ff00
+CR - -> CS
+deactivate CR
+CS- ->SM
+deactivate CS
+SM- ->AP
+deactivate SM
+deactivate AP
+|||
+|||
+opt Main connection is existing
+ |||
+ alt MainConnectioState = CS_SUSPENDED
+ |||
+ ref over CS,AD : Disconnect Sound Route
+ |||
+ else CS_CONNECTED
+ |||
+ ref over CS,AD : Stop Sound Streaming
+ |||
+ ref over CS,AD : Disconnect Sound Route
+ |||
+ end
+ |||
+ AM -> CS : cbMainConnectionStateChanged()
+ activate CS #00ff00
+ |||
+ CS -> SM : signal("MainConnectionStateChanged")
+ activate SM #00ff00
+ CS - -> AM
+ deactivate CS
+ SM -> AP : event [mainConnectionStateChanged]
+ activate AP #00ff00
+ deactivate SM
+ deactivate AP
+ |||
+ AM -> CS : cbRemoveMainConnection()
+ activate CS #00ff00
+ |||
+ CS -> SM : signal("RemoveMainConnection")
+ activate SM #00ff00
+ CS - -> AM
+ deactivate CS
+ SM -> AP : event [removeMainConnection]
+ activate AP #00ff00
+ deactivate SM
+ deactivate AP
+
+end
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_requestsoundmode.svg b/doc/parts/seq_requestsoundmode.svg
new file mode 100644
index 0000000..5ea9616
--- /dev/null
+++ b/doc/parts/seq_requestsoundmode.svg
@@ -0,0 +1,165 @@
+<?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="1701px" preserveAspectRatio="none" style="width:1368px;height:1701px;background:#EEEBDC;" version="1.1" viewBox="0 0 1368 1701" width="1368px" zoomAndPan="magnify"><defs><filter height="300%" id="f1lx8mwkk69qwd" 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><rect fill="#EEEBDC" height="1679.4453" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="538.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="553" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1679.4453" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="682.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="811.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1679.4453" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1111.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1126" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="135.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="93.9688"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="503.1328"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="699.6641"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="1459.9141"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="1641.3125"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="88.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="445"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="88.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="641.5313"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="1416.7813"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="1598.1797"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="144.1016"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="415.8672"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="612.3984"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="1387.6484"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="1569.0469"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="28.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="759" y="173.2344"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="1493.0781" style="stroke: #404040; stroke-width: 1.0;" width="10" x="900.5" y="187.3672"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="905.5" y="954.3984"/><rect fill="#EEEBDC" filter="url(#f1lx8mwkk69qwd)" height="359.0313" style="stroke: #000000; stroke-width: 2.0;" width="946.5" x="23" y="378.8984"/><rect fill="#EEEBDC" filter="url(#f1lx8mwkk69qwd)" height="498.1875" style="stroke: #000000; stroke-width: 2.0;" width="1344.5" x="13" y="861.4609"/><rect fill="#EEEBDC" filter="url(#f1lx8mwkk69qwd)" height="418.2188" style="stroke: #000000; stroke-width: 2.0;" width="1324.5" x="23" y="909.4297"/><rect fill="#EEEBDC" height="133.0078" style="stroke: none; stroke-width: 1.0;" width="1324.5" x="23" y="1115.7344"/><rect fill="#EEEBDC" height="78.9063" style="stroke: none; stroke-width: 1.0;" width="1324.5" x="23" y="1248.7422"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="70" x2="70" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="337" x2="337" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="609.5" x2="609.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="763.5" x2="763.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="905.5" x2="905.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1037.5" x2="1037.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1175.5" x2="1175.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1291.5" x2="1291.5" y1="83.9688" y2="1689.4453"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="33" y="81.1387">Application</text><ellipse cx="70.5" cy="13" fill="#FFFACD" filter="url(#f1lx8mwkk69qwd)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M70.5,21 L70.5,48 M57.5,29 L83.5,29 M70.5,48 L57.5,63 M70.5,48 L83.5,63 " fill="#FFFACD" filter="url(#f1lx8mwkk69qwd)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="281" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="288" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="542.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="549.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="686.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="693.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="851.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="858.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="969.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="976.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1115.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1122.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1245.5" y="81.1387">Audio Domain</text><ellipse cx="1291.5" cy="13" fill="#FFFACD" filter="url(#f1lx8mwkk69qwd)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1291.5,21 L1291.5,48 M1278.5,29 L1304.5,29 M1291.5,48 L1278.5,63 M1291.5,48 L1304.5,63 " fill="#FFFACD" filter="url(#f1lx8mwkk69qwd)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="135.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="93.9688"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="503.1328"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="699.6641"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="1459.9141"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="1641.3125"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="88.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="445"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="88.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="641.5313"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="1416.7813"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="1598.1797"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="144.1016"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="415.8672"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="612.3984"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="1387.6484"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="1569.0469"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="28.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="759" y="173.2344"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="1493.0781" style="stroke: #404040; stroke-width: 1.0;" width="10" x="900.5" y="187.3672"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="905.5" y="954.3984"/><polygon fill="#000000" points="320.5,110.9688,330.5,114.9688,320.5,118.9688,324.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="75.5" x2="326.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="82.5" y="110.0356">connect()</text><polygon fill="#000000" points="592.5,140.1016,602.5,144.1016,592.5,148.1016,596.5,144.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="342.5" x2="598.5" y1="144.1016" y2="144.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="349.5" y="139.1685">connect()</text><polygon fill="#000000" points="747,169.2344,757,173.2344,747,177.2344,751,173.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="614.5" x2="753" y1="173.2344" y2="173.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="621.5" y="168.3013">connect()</text><polygon fill="#000000" points="888.5,183.3672,898.5,187.3672,888.5,191.3672,892.5,187.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="769" x2="894.5" y1="187.3672" y2="187.3672"/><polygon fill="#000000" points="625.5,197.3672,615.5,201.3672,625.5,205.3672,621.5,201.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="619.5" x2="763" y1="201.3672" y2="201.3672"/><polygon fill="#000000" points="353.5,211.3672,343.5,215.3672,353.5,219.3672,349.5,215.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="347.5" x2="608.5" y1="215.3672" y2="215.3672"/><polygon fill="#000000" points="81.5,225.3672,71.5,229.3672,81.5,233.3672,77.5,229.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="75.5" x2="336.5" y1="229.3672" y2="229.3672"/><polygon fill="#FBFB77" filter="url(#f1lx8mwkk69qwd)" points="915,292.3672,915,362.3672,1195,362.3672,1195,302.3672,1185,292.3672,915,292.3672" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1185" x2="1185" y1="292.3672" y2="302.3672"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1195" x2="1185" y1="302.3672" y2="302.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="230" x="921" y="309.4341">Please note that if same connection</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="249" x="921" y="324.5669">(source and sink are completely same)</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="259" x="921" y="339.6997">has bee created already, Audio Manager</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="253" x="921" y="354.8325">does not notify cbNewMainConnection()</text><rect fill="none" height="359.0313" style="stroke: #000000; stroke-width: 2.0;" width="946.5" x="23" y="378.8984"/><polygon fill="#EEEEEE" points="23,378.8984,92,378.8984,92,383.8984,82,393.8984,23,393.8984,23,378.8984" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="24" x="38" y="391.0371">opt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="211" x="107" y="391.1089">[main connection is not existing]</text><polygon fill="#000000" points="625.5,411.8672,615.5,415.8672,625.5,419.8672,621.5,415.8672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="619.5" x2="899.5" y1="415.8672" y2="415.8672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="144" x="631.5" y="410.9341">cbNewMainConnection</text><polygon fill="#000000" points="353.5,441,343.5,445,353.5,449,349.5,445" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="347.5" x2="603.5" y1="445" y2="445"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="186" x="359.5" y="440.0669">signal("NewMainConnection")</text><polygon fill="#000000" points="888.5,455.1328,898.5,459.1328,888.5,463.1328,892.5,459.1328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="609.5" x2="894.5" y1="459.1328" y2="459.1328"/><polygon fill="#000000" points="86.5,499.1328,76.5,503.1328,86.5,507.1328,82.5,503.1328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="80.5" x2="331.5" y1="503.1328" y2="503.1328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="172" x="92.5" y="483.1997">event [newMainConnection</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="132" x="148.5" y="498.3325">(mainConnectionID)]</text><polygon fill="#000000" points="625.5,608.3984,615.5,612.3984,625.5,616.3984,621.5,612.3984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="619.5" x2="899.5" y1="612.3984" y2="612.3984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="201" x="631.5" y="607.4653">cbMainConnectionStateChange</text><polygon fill="#000000" points="353.5,637.5313,343.5,641.5313,353.5,645.5313,349.5,641.5313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="347.5" x2="603.5" y1="641.5313" y2="641.5313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="243" x="359.5" y="636.5981">signal("MainConnectionStateChange")</text><polygon fill="#000000" points="888.5,651.6641,898.5,655.6641,888.5,659.6641,892.5,655.6641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="609.5" x2="894.5" y1="655.6641" y2="655.6641"/><polygon fill="#000000" points="86.5,695.6641,76.5,699.6641,86.5,703.6641,82.5,699.6641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="80.5" x2="331.5" y1="699.6641" y2="699.6641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="233" x="92.5" y="679.731">event [mainConnectionStateChange</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="143" x="148.5" y="694.8638">(CS_DISCONNECTED)]</text><polygon fill="#FBFB77" filter="url(#f1lx8mwkk69qwd)" points="915,774.9297,915,844.9297,1161,844.9297,1161,784.9297,1151,774.9297,915,774.9297" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1151" x2="1151" y1="774.9297" y2="784.9297"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1161" x2="1151" y1="784.9297" y2="784.9297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="218" x="921" y="791.9966">Once connection is requested and</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="200" x="921" y="807.1294">created in AudioManager, main</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="209" x="921" y="822.2622">connection continuously perform</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="225" x="921" y="837.395">transition caused by policy decision</text><rect fill="none" height="498.1875" style="stroke: #000000; stroke-width: 2.0;" width="1344.5" x="13" y="861.4609"/><polygon fill="#EEEEEE" points="13,861.4609,89,861.4609,89,866.4609,79,876.4609,13,876.4609,13,861.4609" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="31" x="28" y="873.5996">loop</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="206" x="104" y="873.6714">[Lifecycle of a main connection]</text><rect fill="none" height="418.2188" style="stroke: #000000; stroke-width: 2.0;" width="1324.5" x="23" y="909.4297"/><polygon fill="#EEEEEE" points="23,909.4297,87,909.4297,87,914.4297,77,924.4297,23,924.4297,23,909.4297" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="38" y="921.5684">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="244" x="102" y="921.6401">[Transition of sound mode = Connect]</text><line style="stroke: #000000; stroke-width: 1.0;" x1="915.5" x2="957.5" y1="946.5313" y2="946.5313"/><line style="stroke: #000000; stroke-width: 1.0;" x1="957.5" x2="957.5" y1="946.5313" y2="959.5313"/><line style="stroke: #000000; stroke-width: 1.0;" x1="916.5" x2="957.5" y1="959.5313" y2="959.5313"/><polygon fill="#000000" points="926.5,955.5313,916.5,959.5313,926.5,963.5313,922.5,959.5313" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="107" x="922.5" y="941.4653">Policy_Decision()</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1007.5313"/><polygon fill="#EEEEEE" points="30,1007.5313,95,1007.5313,95,1012.5313,85,1022.5313,30,1022.5313,30,1007.5313" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1020.6699">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="139" x="615.75" y="1038.5981">Connect Sound Route</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1061.6328"/><polygon fill="#EEEEEE" points="30,1061.6328,95,1061.6328,95,1066.6328,85,1076.6328,30,1076.6328,30,1061.6328" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1074.7715">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="148" x="611.25" y="1092.6997">Start Sound Streaming</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="23" x2="1347.5" y1="1116.7344" y2="1116.7344"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="81" x="28" y="1126.9448">[Disconnect]</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1140.5391"/><polygon fill="#EEEEEE" points="30,1140.5391,95,1140.5391,95,1145.5391,85,1155.5391,30,1155.5391,30,1140.5391" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1153.6777">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="146" x="612.25" y="1171.606">Stop Sound Streaming</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1194.6406"/><polygon fill="#EEEEEE" points="30,1194.6406,95,1194.6406,95,1199.6406,85,1209.6406,30,1209.6406,30,1194.6406" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1207.7793">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="606.75" y="1225.7075">Disconnect Sound Route</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="23" x2="1347.5" y1="1249.7422" y2="1249.7422"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="65" x="28" y="1259.9526">[Suspend]</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1273.5469"/><polygon fill="#EEEEEE" points="30,1273.5469,95,1273.5469,95,1278.5469,85,1288.5469,30,1288.5469,30,1273.5469" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1286.6855">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="146" x="612.25" y="1304.6138">Stop Sound Streaming</text><polygon fill="#000000" points="625.5,1383.6484,615.5,1387.6484,625.5,1391.6484,621.5,1387.6484" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="619.5" x2="899.5" y1="1387.6484" y2="1387.6484"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="152" x="631.5" y="1382.7153">cbMainConnectionState</text><polygon fill="#000000" points="353.5,1412.7813,343.5,1416.7813,353.5,1420.7813,349.5,1416.7813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="347.5" x2="603.5" y1="1416.7813" y2="1416.7813"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="194" x="359.5" y="1411.8481">signal("MainConnectionState")</text><polygon fill="#000000" points="888.5,1426.9141,898.5,1430.9141,888.5,1434.9141,892.5,1430.9141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="609.5" x2="894.5" y1="1430.9141" y2="1430.9141"/><polygon fill="#000000" points="86.5,1455.9141,76.5,1459.9141,86.5,1463.9141,82.5,1459.9141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="80.5" x2="331.5" y1="1459.9141" y2="1459.9141"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="238" x="92.5" y="1454.981">event [mainConnectionStateChange]</text><polygon fill="#000000" points="625.5,1565.0469,615.5,1569.0469,625.5,1573.0469,621.5,1569.0469" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="619.5" x2="899.5" y1="1569.0469" y2="1569.0469"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="169" x="631.5" y="1564.1138">cbRemoveMainConnection</text><polygon fill="#000000" points="353.5,1594.1797,343.5,1598.1797,353.5,1602.1797,349.5,1598.1797" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="347.5" x2="603.5" y1="1598.1797" y2="1598.1797"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="211" x="359.5" y="1593.2466">signal("RemoveMainConnection")</text><polygon fill="#000000" points="888.5,1608.3125,898.5,1612.3125,888.5,1616.3125,892.5,1612.3125" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="609.5" x2="894.5" y1="1612.3125" y2="1612.3125"/><polygon fill="#000000" points="86.5,1637.3125,76.5,1641.3125,86.5,1645.3125,82.5,1641.3125" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="80.5" x2="331.5" y1="1641.3125" y2="1641.3125"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="203" x="92.5" y="1636.3794">event [removemainConnection]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+activate AP #00FF00
+AP -> SM : connect()
+activate SM #00FF00
+SM -> CS : connect()
+activate CS #00FF00
+
+CS ->CR : connect()
+activate CR #00FF00
+
+CR->AM
+activate AM #00FF00
+CR - -> CS
+deactivate CR
+
+CS - -> SM
+deactivate CS
+SM - -> AP
+deactivate SM
+deactivate AP
+|||
+|||
+note right of AM
+ Please note that if same connection
+ (source and sink are completely same)
+ has bee created already, Audio Manager
+ does not notify cbNewMainConnection()
+end note
+opt main connection is not existing
+ AM -> CS : cbNewMainConnection
+ activate CS #00FF00
+ CS -> SM : signal("NewMainConnection")
+ activate SM #00FF00
+ CS - -> AM
+ deactivate CS
+ SM -> AP : event [newMainConnection\n (mainConnectionID)]
+ activate AP #00ff00
+ deactivate SM
+ deactivate AP
+ |||
+ |||
+ AM -> CS : cbMainConnectionStateChange
+ activate CS #00FF00
+ CS -> SM : signal("MainConnectionStateChange")
+ activate SM #00FF00
+ CS - -> AM
+ deactivate CS
+ SM -> AP : event [mainConnectionStateChange\n (CS_DISCONNECTED)]
+ activate AP #00ff00
+ deactivate SM
+ deactivate AP
+end
+|||
+note right of AM
+ Once connection is requested and
+ created in AudioManager, main
+ connection continuously perform
+ transition caused by policy decision
+end note
+
+loop Lifecycle of a main connection
+ |||
+ alt Transition of sound mode = Connect
+ AM -> AM : Policy_Decision()
+ activate AM #00ff00
+ deactivate AM
+ ||10||
+ ref over AP,AD : Connect Sound Route
+ ||10||
+ ref over AP,AD : Start Sound Streaming
+ ||10||
+ else Disconnect
+ ||10||
+ ref over AP,AD : Stop Sound Streaming
+ ||10||
+ ref over AP,AD : Disconnect Sound Route
+ ||10||
+ else Suspend
+ ||10||
+ ref over AP,AD : Stop Sound Streaming
+ ||10||
+ end
+ |||
+end
+
+AM -> CS : cbMainConnectionState
+activate CS #00FF00
+CS -> SM : signal("MainConnectionState")
+activate SM #00FF00
+CS - -> AM
+deactivate CS
+SM -> AP : event [mainConnectionStateChange]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+|||
+|||
+AM -> CS : cbRemoveMainConnection
+activate CS #00FF00
+CS -> SM : signal("RemoveMainConnection")
+activate SM #00FF00
+CS - -> AM
+deactivate CS
+SM -> AP : event [removemainConnection]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_setmutestate.svg b/doc/parts/seq_setmutestate.svg
new file mode 100644
index 0000000..8d39775
--- /dev/null
+++ b/doc/parts/seq_setmutestate.svg
@@ -0,0 +1,115 @@
+<?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="738px" preserveAspectRatio="none" style="width:1313px;height:738px;background:#EEEBDC;" version="1.1" viewBox="0 0 1313 738" width="1313px" zoomAndPan="magnify"><defs><filter height="300%" id="f13x6ysrvu2fjr" 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><rect fill="#EEEBDC" height="716.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="437.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="452" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="716.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="582" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="711" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="716.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1081" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1095.5" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="160.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="93.9688"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="678.1641"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="139.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="268.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="101.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="268.5" y="607.0313"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="96.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="503.5" y="144.1016"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="503.5" y="552.8984"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="173.2344"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="139.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="800" y="212.3672"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="136.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="800" y="498.8984"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="189.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="932" y="459.7656"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1140" y="283.3672"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="218.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1140" y="430.6328"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="93.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1256" y="337.5"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="45" x2="45" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="273" x2="273" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="508.5" x2="508.5" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="663" x2="663" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="805" x2="805" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="937" x2="937" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1145" x2="1145" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1261" x2="1261" y1="83.9688" y2="726.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="8" y="81.1387">Application</text><ellipse cx="45.5" cy="13" fill="#FFFACD" filter="url(#f13x6ysrvu2fjr)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M45.5,21 L45.5,48 M32.5,29 L58.5,29 M45.5,48 L32.5,63 M45.5,48 L58.5,63 " fill="#FFFACD" filter="url(#f13x6ysrvu2fjr)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="217" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="224" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="441.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="448.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="586" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="593" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="751" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="758" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="869" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="876" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1085" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1092" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1215" y="81.1387">Audio Domain</text><ellipse cx="1261" cy="13" fill="#FFFACD" filter="url(#f13x6ysrvu2fjr)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1261,21 L1261,48 M1248,29 L1274,29 M1261,48 L1248,63 M1261,48 L1274,63 " fill="#FFFACD" filter="url(#f13x6ysrvu2fjr)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="160.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="93.9688"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="678.1641"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="139.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="268.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="101.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="268.5" y="607.0313"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="96.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="503.5" y="144.1016"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="503.5" y="552.8984"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="173.2344"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="139.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="800" y="212.3672"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="136.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="800" y="498.8984"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="189.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="932" y="459.7656"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1140" y="283.3672"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="218.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1140" y="430.6328"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="93.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1256" y="337.5"/><polygon fill="#000000" points="256.5,110.9688,266.5,114.9688,256.5,118.9688,260.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="50.5" x2="262.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="126" x="57.5" y="110.0356">SetSinkMuteState()</text><polygon fill="#000000" points="491.5,140.1016,501.5,144.1016,491.5,148.1016,495.5,144.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="278.5" x2="497.5" y1="144.1016" y2="144.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="126" x="285.5" y="139.1685">SetSinkMuteState()</text><polygon fill="#000000" points="646.5,169.2344,656.5,173.2344,646.5,177.2344,650.5,173.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="513.5" x2="652.5" y1="173.2344" y2="173.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="126" x="520.5" y="168.3013">SetSinkMuteState()</text><polygon fill="#000000" points="788,208.3672,798,212.3672,788,216.3672,792,212.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="668.5" x2="794" y1="212.3672" y2="212.3672"/><polygon fill="#000000" points="524.5,222.3672,514.5,226.3672,524.5,230.3672,520.5,226.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="518.5" x2="662.5" y1="226.3672" y2="226.3672"/><polygon fill="#000000" points="289.5,236.3672,279.5,240.3672,289.5,244.3672,285.5,240.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="283.5" x2="507.5" y1="240.3672" y2="240.3672"/><polygon fill="#000000" points="56.5,250.3672,46.5,254.3672,56.5,258.3672,52.5,254.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="50.5" x2="272.5" y1="254.3672" y2="254.3672"/><polygon fill="#000000" points="1128,279.3672,1138,283.3672,1128,287.3672,1132,283.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="810" x2="1134" y1="283.3672" y2="283.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="817" y="278.4341">asyncSetSinkVolume()</text><polygon fill="#000000" points="1244,333.5,1254,337.5,1244,341.5,1248,337.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1150" x2="1250" y1="337.5" y2="337.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="64" x="1157" y="332.5669">SetMute()</text><polygon fill="#000000" points="816,347.6328,806,351.6328,816,355.6328,812,351.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="810" x2="1144" y1="351.6328" y2="351.6328"/><polygon fill="#000000" points="1161,426.6328,1151,430.6328,1161,434.6328,1157,430.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1155" x2="1260" y1="430.6328" y2="430.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="1167" y="425.6997">ackSetMute()</text><polygon fill="#000000" points="953,455.7656,943,459.7656,953,463.7656,949,459.7656" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="947" x2="1139" y1="459.7656" y2="459.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="179" x="959" y="454.8325">ackSetSinkVolumeChange()</text><polygon fill="#000000" points="821,494.8984,811,498.8984,821,502.8984,817,498.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="815" x2="931" y1="498.8984" y2="498.8984"/><polygon fill="#000000" points="524.5,548.8984,514.5,552.8984,524.5,556.8984,520.5,552.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="518.5" x2="799" y1="552.8984" y2="552.8984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="166" x="530.5" y="547.9653">cbSinkMuteStateChanged</text><polygon fill="#000000" points="289.5,603.0313,279.5,607.0313,289.5,611.0313,285.5,607.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="283.5" x2="502.5" y1="607.0313" y2="607.0313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="206" x="295.5" y="602.0981">signal("sinkMuteStateChanged")</text><polygon fill="#000000" points="788,617.1641,798,621.1641,788,625.1641,792,621.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="508.5" x2="794" y1="621.1641" y2="621.1641"/><polygon fill="#000000" points="920,631.1641,930,635.1641,920,639.1641,924,635.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="805" x2="926" y1="635.1641" y2="635.1641"/><polygon fill="#000000" points="1133,645.1641,1143,649.1641,1133,653.1641,1137,649.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="937" x2="1139" y1="649.1641" y2="649.1641"/><polygon fill="#000000" points="61.5,674.1641,51.5,678.1641,61.5,682.1641,57.5,678.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="267.5" y1="678.1641" y2="678.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="199" x="67.5" y="673.231">event [sinkMuteStateChanged]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+activate AP #00ff00
+AP -> SM : SetSinkMuteState()
+activate SM #00ff00
+SM -> CS : SetSinkMuteState()
+activate CS #00ff00
+CS -> CR : SetSinkMuteState()
+activate CR #00ff00
+|||
+CR -> AM
+activate AM #00ff00
+CR - -> CS
+deactivate CR
+CS- ->SM
+deactivate CS
+SM- ->AP
+deactivate SM
+deactivate AP
+
+AM -> RS : asyncSetSinkVolume()
+activate RS #00ff00
+|||
+RS -> AD : SetMute()
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+|||
+|||
+AD -> RS : ackSetMute()
+deactivate AD
+activate RS #00ff00
+
+RS -> RR : ackSetSinkVolumeChange()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+|||
+AM -> CS : cbSinkMuteStateChanged
+activate CS #00ff00
+|||
+CS -> SM : signal("sinkMuteStateChanged")
+activate SM #00ff00
+CS- ->AM
+deactivate CS
+AM- ->RR
+deactivate AM
+RR- ->RS
+deactivate RR
+deactivate RS
+
+SM -> AP : event [sinkMuteStateChanged]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_startsoundstreaming.svg b/doc/parts/seq_startsoundstreaming.svg
new file mode 100644
index 0000000..108cfa0
--- /dev/null
+++ b/doc/parts/seq_startsoundstreaming.svg
@@ -0,0 +1,129 @@
+<?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="1017px" preserveAspectRatio="none" style="width:1501px;height:1017px;background:#EEEBDC;" version="1.1" viewBox="0 0 1501 1017" width="1501px" zoomAndPan="magnify"><defs><filter height="300%" id="f1f8zzovgj1d8a" 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><rect fill="#EEEBDC" height="995.3594" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="582.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="597" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="995.3594" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="726.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="855.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="995.3594" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1180.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1195" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="316.7969" style="stroke: #404040; stroke-width: 1.0;" width="10" x="88.5" y="493.7656"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="88.5" y="957.0938"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="59.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="464.6328"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="646.1641"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="898.8281"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="648.5" y="854.5625"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="224.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="367.5"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="144.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="768.5625"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1076.5" y="328.3672"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1076.5" y="729.4297"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="112.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="269.3672"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="156.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="435.5"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="675.2969"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="130.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1375.5" y="169.1016"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1380.5" y="220.2344"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="93" x2="93" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="372" x2="372" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="653.5" x2="653.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="807.5" x2="807.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="949.5" x2="949.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1081.5" x2="1081.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1244.5" x2="1244.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1380.5" x2="1380.5" y1="83.9688" y2="1005.3594"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="56" y="81.1387">Application</text><ellipse cx="93.5" cy="13" fill="#FFFACD" filter="url(#f1f8zzovgj1d8a)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M93.5,21 L93.5,48 M80.5,29 L106.5,29 M93.5,48 L80.5,63 M93.5,48 L106.5,63 " fill="#FFFACD" filter="url(#f1f8zzovgj1d8a)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="316" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="323" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="586.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="593.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="730.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="737.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="895.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="902.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="1013.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="1020.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1184.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1191.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1334.5" y="81.1387">Audio Domain</text><ellipse cx="1380.5" cy="13" fill="#FFFACD" filter="url(#f1f8zzovgj1d8a)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1380.5,21 L1380.5,48 M1367.5,29 L1393.5,29 M1380.5,48 L1367.5,63 M1380.5,48 L1393.5,63 " fill="#FFFACD" filter="url(#f1f8zzovgj1d8a)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="316.7969" style="stroke: #404040; stroke-width: 1.0;" width="10" x="88.5" y="493.7656"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="88.5" y="957.0938"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="59.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="464.6328"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="646.1641"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="898.8281"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="648.5" y="854.5625"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="224.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="367.5"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="144.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="768.5625"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1076.5" y="328.3672"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1076.5" y="729.4297"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="112.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="269.3672"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="156.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="435.5"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="675.2969"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="130.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1375.5" y="169.1016"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1380.5" y="220.2344"/><polygon fill="#000000" points="1227.5,110.9688,1237.5,114.9688,1227.5,118.9688,1231.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="954.5" x2="1233.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="198" x="961.5" y="110.0356">asyncSetSourceState (SS_ON)</text><polygon fill="#000000" points="1363.5,165.1016,1373.5,169.1016,1363.5,173.1016,1367.5,169.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1249.5" x2="1369.5" y1="169.1016" y2="169.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="107" x="1256.5" y="164.1685">setMute(SS_ON)</text><polygon fill="#000000" points="960.5,179.2344,950.5,183.2344,960.5,187.2344,956.5,183.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="954.5" x2="1243.5" y1="183.2344" y2="183.2344"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1390.5" x2="1432.5" y1="212.3672" y2="212.3672"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1432.5" x2="1432.5" y1="212.3672" y2="225.3672"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1391.5" x2="1432.5" y1="225.3672" y2="225.3672"/><polygon fill="#000000" points="1401.5,221.3672,1391.5,225.3672,1401.5,229.3672,1397.5,225.3672" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="92" x="1397.5" y="207.3013">Mute(UnMute)</text><polygon fill="#000000" points="1260.5,265.3672,1250.5,269.3672,1260.5,273.3672,1256.5,269.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1254.5" x2="1374.5" y1="269.3672" y2="269.3672"/><polygon fill="#000000" points="1097.5,324.3672,1087.5,328.3672,1097.5,332.3672,1093.5,328.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1091.5" x2="1238.5" y1="328.3672" y2="328.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="1103.5" y="323.4341">ackSetSourceState()</text><polygon fill="#000000" points="965.5,363.5,955.5,367.5,965.5,371.5,961.5,367.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="959.5" x2="1075.5" y1="367.5" y2="367.5"/><polygon fill="#000000" points="1232.5,377.5,1242.5,381.5,1232.5,385.5,1236.5,381.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1081.5" x2="1238.5" y1="381.5" y2="381.5"/><polygon fill="#000000" points="1227.5,431.5,1237.5,435.5,1227.5,439.5,1231.5,435.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="954.5" x2="1233.5" y1="435.5" y2="435.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="149" x="961.5" y="430.5669">asyncSetSourceState()</text><polygon fill="#000000" points="388.5,460.6328,378.5,464.6328,388.5,468.6328,384.5,464.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="382.5" x2="1238.5" y1="464.6328" y2="464.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="251" x="394.5" y="459.6997">signal("asyncSetSourceState(SS_ON)")</text><polygon fill="#000000" points="109.5,489.7656,99.5,493.7656,109.5,497.7656,105.5,493.7656" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="103.5" x2="366.5" y1="493.7656" y2="493.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="225" x="115.5" y="488.8325">event [asyncSetSourceState("on")]</text><polygon fill="#FBFB77" filter="url(#f1f8zzovgj1d8a)" points="8,536.8984,8,576.8984,176,576.8984,176,546.8984,166,536.8984,8,536.8984" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="166" x2="166" y1="536.8984" y2="546.8984"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="176" x2="166" y1="546.8984" y2="546.8984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="138" x="14" y="553.9653">Prepare audio device.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="147" x="14" y="569.0981">And start audio playing</text><polygon fill="#000000" points="960.5,588.1641,950.5,592.1641,960.5,596.1641,956.5,592.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="954.5" x2="1243.5" y1="592.1641" y2="592.1641"/><polygon fill="#000000" points="355.5,642.1641,365.5,646.1641,355.5,650.1641,359.5,646.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="98.5" x2="361.5" y1="646.1641" y2="646.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="105.5" y="641.231">ackSetSourceState()</text><polygon fill="#000000" points="1227.5,671.2969,1237.5,675.2969,1227.5,679.2969,1231.5,675.2969" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="377.5" x2="1233.5" y1="675.2969" y2="675.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="384.5" y="670.3638">ackSetSourceState()</text><polygon fill="#000000" points="1097.5,725.4297,1087.5,729.4297,1097.5,733.4297,1093.5,729.4297" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1091.5" x2="1238.5" y1="729.4297" y2="729.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="99" x="1103.5" y="724.4966">ackSetSource()</text><polygon fill="#000000" points="965.5,764.5625,955.5,768.5625,965.5,772.5625,961.5,768.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="959.5" x2="1075.5" y1="768.5625" y2="768.5625"/><polygon fill="#000000" points="1227.5,778.5625,1237.5,782.5625,1227.5,786.5625,1231.5,782.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1081.5" x2="1233.5" y1="782.5625" y2="782.5625"/><polygon fill="#000000" points="388.5,792.5625,378.5,796.5625,388.5,800.5625,384.5,796.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="382.5" x2="1243.5" y1="796.5625" y2="796.5625"/><polygon fill="#000000" points="104.5,806.5625,94.5,810.5625,104.5,814.5625,100.5,810.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="98.5" x2="371.5" y1="810.5625" y2="810.5625"/><polygon fill="#000000" points="669.5,850.5625,659.5,854.5625,669.5,858.5625,665.5,854.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="663.5" x2="943.5" y1="854.5625" y2="854.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="675.5" y="834.6294">cbMainConnectionStateChanged(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="111" x="715.5" y="849.7622">CS_CONNECTED)</text><polygon fill="#000000" points="388.5,894.8281,378.5,898.8281,388.5,902.8281,384.5,898.8281" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="382.5" x2="647.5" y1="898.8281" y2="898.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="252" x="394.5" y="878.895">signal("mainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="121" x="434.5" y="894.0278">CS_CONNECTED)")</text><polygon fill="#000000" points="937.5,909.0938,947.5,913.0938,937.5,917.0938,941.5,913.0938" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="653.5" x2="943.5" y1="913.0938" y2="913.0938"/><polygon fill="#000000" points="109.5,953.0938,99.5,957.0938,109.5,961.0938,105.5,957.0938" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="103.5" x2="366.5" y1="957.0938" y2="957.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="250" x="115.5" y="937.1606">event [mainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="116" x="155.5" y="952.2935">CS_CONNECTED)]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+AM -> RS : asyncSetSourceState (SS_ON)
+activate AM #00FF00
+activate RS #00ff00
+|||
+RS -> AD : setMute(SS_ON)
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+
+AD -> AD : Mute(UnMute)
+activate AD #00ff00
+deactivate AD
+
+AD -> RS
+activate RS #00ff00
+deactivate AD
+
+RS -> RR : ackSetSourceState()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+RR - -> RS
+deactivate RR
+deactivate RS
+|||
+AM -> RS : asyncSetSourceState()
+activate RS #00ff00
+
+RS -> SM : signal("asyncSetSourceState(SS_ON)")
+activate SM #00ff00
+SM -> AP : event [asyncSetSourceState("on")]
+activate AP #00ff00
+deactivate SM
+note over AP: Prepare audio device.\nAnd start audio playing
+RS - -> AM
+|||
+deactivate RS
+deactivate AM
+AP -> SM : ackSetSourceState()
+activate SM #00ff00
+SM -> RS : ackSetSourceState()
+activate RS #00ff00
+|||
+RS -> RR : ackSetSource()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+RR - -> RS
+deactivate RR
+RS- ->SM
+deactivate RS
+SM- ->AP
+deactivate SM
+deactivate AP
+
+AM -> CS : cbMainConnectionStateChanged(\n CS_CONNECTED)
+activate CS #00ff00
+CS -> SM : signal("mainConnectionStateChanged (\n CS_CONNECTED)")
+activate SM #00ff00
+CS - -> AM
+deactivate CS
+deactivate AM
+SM -> AP : event [mainConnectionStateChanged (\n CS_CONNECTED)]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_startup.svg b/doc/parts/seq_startup.svg
new file mode 100644
index 0000000..27f0ab0
--- /dev/null
+++ b/doc/parts/seq_startup.svg
@@ -0,0 +1,68 @@
+<?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="356px" preserveAspectRatio="none" style="width:1047px;height:356px;background:#EEEBDC;" version="1.1" viewBox="0 0 1047 356" width="1047px" zoomAndPan="magnify"><defs><filter height="300%" id="f5gmqbksvd81r" 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><rect fill="#EEEBDC" height="334.6328" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="227" y="4"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="121" x="237.5" y="16.0669">CommandPlugIn</text><rect fill="#EEEBDC" height="334.6328" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="371" y="4"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="178" x="495.5" y="16.0669">Audio Manager Daemon</text><rect fill="#EEEBDC" height="334.6328" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="800" y="4"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="103" x="812.5" y="16.0669">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="241.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="589" y="93.9688"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="594" y="122.9688"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="594" y="291.5"/><rect fill="#EEEBDC" filter="url(#f5gmqbksvd81r)" height="82.3984" style="stroke: #000000; stroke-width: 2.0;" width="1023" x="13" y="173.1016"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="60" x2="60" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="164" x2="164" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="298" x2="298" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="452" x2="452" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="594" x2="594" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="726" x2="726" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="864" x2="864" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="980" x2="980" y1="83.9688" y2="344.6328"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="23" y="81.1387">Application</text><ellipse cx="60.5" cy="13" fill="#FFFACD" filter="url(#f5gmqbksvd81r)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M60.5,21 L60.5,48 M47.5,29 L73.5,29 M60.5,48 L47.5,63 M60.5,48 L73.5,63 " fill="#FFFACD" filter="url(#f5gmqbksvd81r)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="108" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="115" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="231" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="238" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="375" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="382" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="540" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="547" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="658" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="665" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="804" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="811" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="934" y="81.1387">Audio Domain</text><ellipse cx="980" cy="13" fill="#FFFACD" filter="url(#f5gmqbksvd81r)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M980,21 L980,48 M967,29 L993,29 M980,48 L967,63 M980,48 L993,63 " fill="#FFFACD" filter="url(#f5gmqbksvd81r)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="241.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="589" y="93.9688"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="594" y="122.9688"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="594" y="291.5"/><line style="stroke: #000000; stroke-width: 1.0;" x1="604" x2="646" y1="115.1016" y2="115.1016"/><line style="stroke: #000000; stroke-width: 1.0;" x1="646" x2="646" y1="115.1016" y2="128.1016"/><line style="stroke: #000000; stroke-width: 1.0;" x1="605" x2="646" y1="128.1016" y2="128.1016"/><polygon fill="#000000" points="615,124.1016,605,128.1016,615,132.1016,611,128.1016" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="58" x="611" y="110.0356">Startup()</text><rect fill="none" height="82.3984" style="stroke: #000000; stroke-width: 2.0;" width="1023" x="13" y="173.1016"/><polygon fill="#EEEEEE" points="13,173.1016,90,173.1016,90,180.1016,80,190.1016,13,190.1016,13,173.1016" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="32" x="28" y="186.1685">loop</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="135" x="105" y="185.312">[Number of Domains]</text><rect fill="#FFFFFF" filter="url(#f5gmqbksvd81r)" height="40.2656" style="stroke: #000000; stroke-width: 2.0;" width="1005" x="20" y="200.2344"/><polygon fill="#EEEEEE" points="20,200.2344,86,200.2344,86,207.2344,76,217.2344,20,217.2344,20,200.2344" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="21" x="33" y="214.3013">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="76" x="486.5" y="233.3013">Registration</text><line style="stroke: #000000; stroke-width: 1.0;" x1="604" x2="646" y1="283.6328" y2="283.6328"/><line style="stroke: #000000; stroke-width: 1.0;" x1="646" x2="646" y1="283.6328" y2="296.6328"/><line style="stroke: #000000; stroke-width: 1.0;" x1="605" x2="646" y1="296.6328" y2="296.6328"/><polygon fill="#000000" points="615,292.6328,605,296.6328,615,300.6328,611,296.6328" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="78" x="611" y="278.5669">wait_event()</text><!--
+@startuml
+hide footbox
+
+skinparam backgroundColor #EEEBDC
+skinparam sequence {
+ ArrowColor black
+ ActorBorderColor black
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontName Yu Gothic UI
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+ ActorFontName Yu Gothic UI
+
+ BoxBorderColor #deb887
+}
+
+actor Application
+participant SoundManager
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver
+ participant AudioManager
+ participant IAmRoutingReceive
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend
+end box
+actor "Audio Domain"
+
+activate AudioManager #00FF00
+AudioManager -> AudioManager: Startup()
+activate AudioManager #00FF00
+deactivate AudioManager
+
+loop Number of Domains
+||10||
+ref over Application, "Audio Domain" : Registration
+||10||
+end
+
+AudioManager -> AudioManager: wait_event()
+activate AudioManager #00FF00
+
+deactivate AudioManager
+@enduml
+
+PlantUML version 1.2017.16beta5(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_stopsoundstreaming.svg b/doc/parts/seq_stopsoundstreaming.svg
new file mode 100644
index 0000000..41a2e41
--- /dev/null
+++ b/doc/parts/seq_stopsoundstreaming.svg
@@ -0,0 +1,129 @@
+<?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="1108px" preserveAspectRatio="none" style="width:1478px;height:1108px;background:#EEEBDC;" version="1.1" viewBox="0 0 1478 1108" width="1478px" zoomAndPan="magnify"><defs><filter height="300%" id="f148ll50d7lbg7" 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><rect fill="#EEEBDC" height="1086.625" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="589.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="604" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1086.625" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="733.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="862.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1086.625" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1187.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1202" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="97.5" y="228.3672"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="97.5" y="727.8281"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="184.1016"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="59.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="364.8984"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="669.5625"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="655.5" y="625.2969"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="338.0625" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="517.2969"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="1034.625"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1083.5" y="478.1641"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="83.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1083.5" y="995.4922"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="107.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="424.0313"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="812.0938"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="137.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="941.4922"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="100.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1362.5" y="841.2266"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1367.5" y="892.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="102" x2="102" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="381" x2="381" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="660.5" x2="660.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="814.5" x2="814.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="956.5" x2="956.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1088.5" x2="1088.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1251.5" x2="1251.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1367.5" x2="1367.5" y1="83.9688" y2="1096.625"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="65" y="81.1387">Application</text><ellipse cx="102.5" cy="13" fill="#FFFACD" filter="url(#f148ll50d7lbg7)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M102.5,21 L102.5,48 M89.5,29 L115.5,29 M102.5,48 L89.5,63 M102.5,48 L115.5,63 " fill="#FFFACD" filter="url(#f148ll50d7lbg7)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="325" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="332" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="593.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="600.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="737.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="744.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="902.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="909.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="1020.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="1027.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1191.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1198.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1321.5" y="81.1387">Audio Domain</text><ellipse cx="1367.5" cy="13" fill="#FFFACD" filter="url(#f148ll50d7lbg7)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1367.5,21 L1367.5,48 M1354.5,29 L1380.5,29 M1367.5,48 L1354.5,63 M1367.5,48 L1380.5,63 " fill="#FFFACD" filter="url(#f148ll50d7lbg7)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="97.5" y="228.3672"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="97.5" y="727.8281"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="184.1016"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="59.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="364.8984"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="669.5625"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="655.5" y="625.2969"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="338.0625" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="517.2969"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="1034.625"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1083.5" y="478.1641"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="83.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1083.5" y="995.4922"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="107.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="424.0313"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="812.0938"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="137.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="941.4922"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="100.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1362.5" y="841.2266"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1367.5" y="892.3594"/><polygon fill="#000000" points="1234.5,110.9688,1244.5,114.9688,1234.5,118.9688,1238.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="961.5" x2="1240.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="153" x="968.5" y="110.0356">asyncSetSourceState ()</text><polygon fill="#000000" points="397.5,180.1016,387.5,184.1016,397.5,188.1016,393.5,184.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="391.5" x2="1245.5" y1="184.1016" y2="184.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="144" x="403.5" y="164.1685">asyncSetSourceState(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="84" x="419.5" y="179.3013">SS_PAUSED)</text><polygon fill="#000000" points="118.5,224.3672,108.5,228.3672,118.5,232.3672,114.5,228.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="112.5" x2="375.5" y1="228.3672" y2="228.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="189" x="124.5" y="208.4341">event [asyncSetSourceState(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="140.5" y="223.5669">"paused")]</text><polygon fill="#000000" points="1234.5,238.6328,1244.5,242.6328,1234.5,246.6328,1238.5,242.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="381.5" x2="1240.5" y1="242.6328" y2="242.6328"/><polygon fill="#000000" points="967.5,277.6328,957.5,281.6328,967.5,285.6328,963.5,281.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="961.5" x2="1250.5" y1="281.6328" y2="281.6328"/><polygon fill="#FBFB77" filter="url(#f148ll50d7lbg7)" points="8,294.6328,8,334.6328,193,334.6328,193,304.6328,183,294.6328,8,294.6328" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="183" x2="183" y1="294.6328" y2="304.6328"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="193" x2="183" y1="304.6328" y2="304.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="122" x="14" y="311.6997">Stop audio playing.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="164" x="14" y="326.8325">And release audio device.</text><polygon fill="#000000" points="364.5,360.8984,374.5,364.8984,364.5,368.8984,368.5,364.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="107.5" x2="370.5" y1="364.8984" y2="364.8984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="114.5" y="359.9653">ackSetSourceState()</text><polygon fill="#000000" points="1234.5,420.0313,1244.5,424.0313,1234.5,428.0313,1238.5,424.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="381.5" x2="1240.5" y1="424.0313" y2="424.0313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="388.5" y="419.0981">ackSetSourceState()</text><polygon fill="#000000" points="1104.5,474.1641,1094.5,478.1641,1104.5,482.1641,1100.5,478.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1098.5" x2="1245.5" y1="478.1641" y2="478.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="1110.5" y="473.231">ackSetSourceState()</text><polygon fill="#000000" points="972.5,513.2969,962.5,517.2969,972.5,521.2969,968.5,517.2969" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="966.5" x2="1082.5" y1="517.2969" y2="517.2969"/><polygon fill="#000000" points="1239.5,527.2969,1249.5,531.2969,1239.5,535.2969,1243.5,531.2969" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1088.5" x2="1245.5" y1="531.2969" y2="531.2969"/><polygon fill="#000000" points="676.5,621.2969,666.5,625.2969,676.5,629.2969,672.5,625.2969" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="670.5" x2="950.5" y1="625.2969" y2="625.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="218" x="682.5" y="605.3638">cbMainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="706.5" y="620.4966">CS_SUSPENDED)]</text><polygon fill="#000000" points="397.5,665.5625,387.5,669.5625,397.5,673.5625,393.5,669.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="391.5" x2="654.5" y1="669.5625" y2="669.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="250" x="403.5" y="649.6294">signal("MainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="122" x="419.5" y="664.7622">CS_SUSPENDED)")</text><polygon fill="#000000" points="939.5,679.8281,949.5,683.8281,939.5,687.8281,943.5,683.8281" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="660.5" x2="945.5" y1="683.8281" y2="683.8281"/><polygon fill="#000000" points="118.5,723.8281,108.5,727.8281,118.5,731.8281,114.5,727.8281" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="112.5" x2="375.5" y1="727.8281" y2="727.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="250" x="124.5" y="707.895">event [mainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="140.5" y="723.0278">CS_SUSPENDED)]</text><polygon fill="#000000" points="1234.5,808.0938,1244.5,812.0938,1234.5,816.0938,1238.5,812.0938" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="961.5" x2="1240.5" y1="812.0938" y2="812.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="149" x="968.5" y="807.1606">asyncSetSourceState()</text><polygon fill="#000000" points="1350.5,837.2266,1360.5,841.2266,1350.5,845.2266,1354.5,841.2266" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1256.5" x2="1356.5" y1="841.2266" y2="841.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="64" x="1263.5" y="836.2935">SetMute()</text><polygon fill="#000000" points="967.5,851.3594,957.5,855.3594,967.5,859.3594,963.5,855.3594" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="961.5" x2="1250.5" y1="855.3594" y2="855.3594"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1377.5" x2="1419.5" y1="884.4922" y2="884.4922"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1419.5" x2="1419.5" y1="884.4922" y2="897.4922"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1378.5" x2="1419.5" y1="897.4922" y2="897.4922"/><polygon fill="#000000" points="1388.5,893.4922,1378.5,897.4922,1388.5,901.4922,1384.5,897.4922" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="82" x="1384.5" y="879.4263">Mute (MUTE)</text><polygon fill="#000000" points="1267.5,937.4922,1257.5,941.4922,1267.5,945.4922,1263.5,941.4922" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1261.5" x2="1366.5" y1="941.4922" y2="941.4922"/><polygon fill="#000000" points="1104.5,991.4922,1094.5,995.4922,1104.5,999.4922,1100.5,995.4922" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1098.5" x2="1245.5" y1="995.4922" y2="995.4922"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="1110.5" y="990.5591">ackSetSourceState()</text><polygon fill="#000000" points="972.5,1030.625,962.5,1034.625,972.5,1038.625,968.5,1034.625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="966.5" x2="1082.5" y1="1034.625" y2="1034.625"/><polygon fill="#000000" points="1239.5,1074.625,1249.5,1078.625,1239.5,1082.625,1243.5,1078.625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1088.5" x2="1245.5" y1="1078.625" y2="1078.625"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+AM -> RS : asyncSetSourceState ()
+activate AM #00FF00
+activate RS #00ff00
+|||
+RS -> SM : asyncSetSourceState(\n SS_PAUSED)
+activate SM #00ff00
+SM -> AP : event [asyncSetSourceState(\n "paused")]
+activate AP #00ff00
+SM- ->RS
+deactivate SM
+|||
+RS - -> AM
+deactivate RS
+deactivate AM
+note over AP: Stop audio playing.\nAnd release audio device.
+AP -> SM : ackSetSourceState()
+activate SM #00ff00
+deactivate AP
+SM -> RS : ackSetSourceState()
+deactivate SM
+activate RS #00ff00
+|||
+RS -> RR : ackSetSourceState()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+RR - -> RS
+deactivate RR
+deactivate RS
+
+|||
+|||
+AM -> CS : cbMainConnectionStateChanged (\n CS_SUSPENDED)]
+activate CS #00ff00
+
+CS -> SM : signal("MainConnectionStateChanged (\n CS_SUSPENDED)")
+activate SM #00ff00
+CS - -> AM
+deactivate CS
+SM -> AP : event [mainConnectionStateChanged (\n CS_SUSPENDED)]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+|||
+AM -> RS : asyncSetSourceState()
+activate RS #00ff00
+RS -> AD : SetMute()
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+
+AD -> AD : Mute (MUTE)
+activate AD #00ff00
+deactivate AD
+AD -> RS
+deactivate AD
+activate RS #00ff00
+|||
+RS -> RR : ackSetSourceState()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+deactivate AM
+RR - -> RS
+deactivate RR
+deactivate RS
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/software-stack.png b/doc/parts/software-stack.png
new file mode 100644
index 0000000..cdca6ce
--- /dev/null
+++ b/doc/parts/software-stack.png
Binary files differ
diff --git a/doc/parts/software-stack2.png b/doc/parts/software-stack2.png
new file mode 100644
index 0000000..870c22f
--- /dev/null
+++ b/doc/parts/software-stack2.png
Binary files differ
diff --git a/doc/parts/typical-usecase.png b/doc/parts/typical-usecase.png
new file mode 100644
index 0000000..47a2d33
--- /dev/null
+++ b/doc/parts/typical-usecase.png
Binary files differ
diff --git a/doc/parts/typical-usecase2.png b/doc/parts/typical-usecase2.png
new file mode 100644
index 0000000..4d05304
--- /dev/null
+++ b/doc/parts/typical-usecase2.png
Binary files differ