@chat21/chat21-web-widget 5.0.46-rc.1 → 5.0.46-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/angular.json +2 -1
  3. package/coverage/widget/base.css +224 -0
  4. package/coverage/widget/block-navigation.js +87 -0
  5. package/coverage/widget/favicon.png +0 -0
  6. package/coverage/widget/index.html +881 -0
  7. package/coverage/widget/lcov.info +10516 -0
  8. package/coverage/widget/polyfills.ts.html +277 -0
  9. package/coverage/widget/prettify.css +1 -0
  10. package/coverage/widget/prettify.js +2 -0
  11. package/coverage/widget/sort-arrow-sprite.png +0 -0
  12. package/coverage/widget/sorter.js +196 -0
  13. package/coverage/widget/src/app/app.component.ts.html +6328 -0
  14. package/coverage/widget/src/app/component/conversation-detail/conversation/conversation.component.ts.html +3871 -0
  15. package/coverage/widget/src/app/component/conversation-detail/conversation/index.html +116 -0
  16. package/coverage/widget/src/app/component/conversation-detail/conversation-content/conversation-content.component.ts.html +925 -0
  17. package/coverage/widget/src/app/component/conversation-detail/conversation-content/index.html +116 -0
  18. package/coverage/widget/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.ts.html +1816 -0
  19. package/coverage/widget/src/app/component/conversation-detail/conversation-footer/index.html +116 -0
  20. package/coverage/widget/src/app/component/conversation-detail/conversation-header/conversation-header.component.ts.html +811 -0
  21. package/coverage/widget/src/app/component/conversation-detail/conversation-header/index.html +116 -0
  22. package/coverage/widget/src/app/component/conversation-detail/conversation-internal-frame/conversation-internal-frame.component.ts.html +397 -0
  23. package/coverage/widget/src/app/component/conversation-detail/conversation-internal-frame/index.html +116 -0
  24. package/coverage/widget/src/app/component/conversation-detail/conversation-preview/conversation-preview.component.ts.html +991 -0
  25. package/coverage/widget/src/app/component/conversation-detail/conversation-preview/index.html +116 -0
  26. package/coverage/widget/src/app/component/eyeeye-catcher-card/eyeeye-catcher-card.component.ts.html +586 -0
  27. package/coverage/widget/src/app/component/eyeeye-catcher-card/index.html +116 -0
  28. package/coverage/widget/src/app/component/form/form-builder/form-builder.component.ts.html +664 -0
  29. package/coverage/widget/src/app/component/form/form-builder/index.html +116 -0
  30. package/coverage/widget/src/app/component/form/inputs/form-checkbox/form-checkbox.component.ts.html +208 -0
  31. package/coverage/widget/src/app/component/form/inputs/form-checkbox/index.html +116 -0
  32. package/coverage/widget/src/app/component/form/inputs/form-label/form-label.component.ts.html +157 -0
  33. package/coverage/widget/src/app/component/form/inputs/form-label/index.html +116 -0
  34. package/coverage/widget/src/app/component/form/inputs/form-radio-button/form-radio-button.component.ts.html +130 -0
  35. package/coverage/widget/src/app/component/form/inputs/form-radio-button/index.html +116 -0
  36. package/coverage/widget/src/app/component/form/inputs/form-select/form-select.component.ts.html +130 -0
  37. package/coverage/widget/src/app/component/form/inputs/form-select/index.html +116 -0
  38. package/coverage/widget/src/app/component/form/inputs/form-text/form-text.component.ts.html +301 -0
  39. package/coverage/widget/src/app/component/form/inputs/form-text/index.html +116 -0
  40. package/coverage/widget/src/app/component/form/inputs/form-textarea/form-textarea.component.ts.html +358 -0
  41. package/coverage/widget/src/app/component/form/inputs/form-textarea/index.html +116 -0
  42. package/coverage/widget/src/app/component/form/prechat-form/index.html +116 -0
  43. package/coverage/widget/src/app/component/form/prechat-form/prechat-form.component.ts.html +565 -0
  44. package/coverage/widget/src/app/component/home/home.component.ts.html +559 -0
  45. package/coverage/widget/src/app/component/home/index.html +116 -0
  46. package/coverage/widget/src/app/component/home-conversations/home-conversations.component.ts.html +985 -0
  47. package/coverage/widget/src/app/component/home-conversations/index.html +116 -0
  48. package/coverage/widget/src/app/component/last-message/index.html +116 -0
  49. package/coverage/widget/src/app/component/last-message/last-message.component.ts.html +484 -0
  50. package/coverage/widget/src/app/component/launcher-button/index.html +116 -0
  51. package/coverage/widget/src/app/component/launcher-button/launcher-button.component.ts.html +307 -0
  52. package/coverage/widget/src/app/component/list-all-conversations/index.html +116 -0
  53. package/coverage/widget/src/app/component/list-all-conversations/list-all-conversations.component.ts.html +676 -0
  54. package/coverage/widget/src/app/component/list-conversations/index.html +116 -0
  55. package/coverage/widget/src/app/component/list-conversations/list-conversations.component.ts.html +475 -0
  56. package/coverage/widget/src/app/component/menu-options/index.html +116 -0
  57. package/coverage/widget/src/app/component/menu-options/menu-options.component.ts.html +226 -0
  58. package/coverage/widget/src/app/component/message/avatar/avatar.component.ts.html +271 -0
  59. package/coverage/widget/src/app/component/message/avatar/index.html +116 -0
  60. package/coverage/widget/src/app/component/message/bubble-message/bubble-message.component.ts.html +655 -0
  61. package/coverage/widget/src/app/component/message/bubble-message/index.html +116 -0
  62. package/coverage/widget/src/app/component/message/buttons/action-button/action-button.component.ts.html +274 -0
  63. package/coverage/widget/src/app/component/message/buttons/action-button/index.html +116 -0
  64. package/coverage/widget/src/app/component/message/buttons/link-button/index.html +116 -0
  65. package/coverage/widget/src/app/component/message/buttons/link-button/link-button.component.ts.html +232 -0
  66. package/coverage/widget/src/app/component/message/buttons/text-button/index.html +116 -0
  67. package/coverage/widget/src/app/component/message/buttons/text-button/text-button.component.ts.html +235 -0
  68. package/coverage/widget/src/app/component/message/frame/frame.component.ts.html +199 -0
  69. package/coverage/widget/src/app/component/message/frame/index.html +116 -0
  70. package/coverage/widget/src/app/component/message/html/html.component.ts.html +184 -0
  71. package/coverage/widget/src/app/component/message/html/index.html +116 -0
  72. package/coverage/widget/src/app/component/message/image/image.component.ts.html +394 -0
  73. package/coverage/widget/src/app/component/message/image/index.html +116 -0
  74. package/coverage/widget/src/app/component/message/info-message/index.html +116 -0
  75. package/coverage/widget/src/app/component/message/info-message/info-message.component.ts.html +211 -0
  76. package/coverage/widget/src/app/component/message/like-unlike/index.html +116 -0
  77. package/coverage/widget/src/app/component/message/like-unlike/like-unlike.component.ts.html +151 -0
  78. package/coverage/widget/src/app/component/message/return-receipt/index.html +116 -0
  79. package/coverage/widget/src/app/component/message/return-receipt/return-receipt.component.ts.html +157 -0
  80. package/coverage/widget/src/app/component/message/text/index.html +116 -0
  81. package/coverage/widget/src/app/component/message/text/text.component.ts.html +190 -0
  82. package/coverage/widget/src/app/component/message-attachment/index.html +116 -0
  83. package/coverage/widget/src/app/component/message-attachment/message-attachment.component.ts.html +343 -0
  84. package/coverage/widget/src/app/component/selection-department/index.html +116 -0
  85. package/coverage/widget/src/app/component/selection-department/selection-department.component.ts.html +676 -0
  86. package/coverage/widget/src/app/component/send-button/index.html +116 -0
  87. package/coverage/widget/src/app/component/send-button/send-button.component.ts.html +154 -0
  88. package/coverage/widget/src/app/component/star-rating-widget/index.html +116 -0
  89. package/coverage/widget/src/app/component/star-rating-widget/star-rating-widget.component.ts.html +451 -0
  90. package/coverage/widget/src/app/directives/html-entities-encode.pipe.ts.html +136 -0
  91. package/coverage/widget/src/app/directives/index.html +146 -0
  92. package/coverage/widget/src/app/directives/marked.pipe.ts.html +166 -0
  93. package/coverage/widget/src/app/directives/safe-html.pipe.ts.html +136 -0
  94. package/coverage/widget/src/app/index.html +116 -0
  95. package/coverage/widget/src/app/providers/app-config.service.ts.html +247 -0
  96. package/coverage/widget/src/app/providers/global-settings.service.ts.html +5698 -0
  97. package/coverage/widget/src/app/providers/index.html +206 -0
  98. package/coverage/widget/src/app/providers/settings-saver.service.ts.html +253 -0
  99. package/coverage/widget/src/app/providers/star-rating-widget.service.ts.html +385 -0
  100. package/coverage/widget/src/app/providers/storage.service.ts.html +745 -0
  101. package/coverage/widget/src/app/providers/translator.service.ts.html +1498 -0
  102. package/coverage/widget/src/app/providers/waiting.service.ts.html +178 -0
  103. package/coverage/widget/src/app/utils/constants.ts.html +304 -0
  104. package/coverage/widget/src/app/utils/globals.ts.html +1939 -0
  105. package/coverage/widget/src/app/utils/index.html +146 -0
  106. package/coverage/widget/src/app/utils/utils.ts.html +1240 -0
  107. package/coverage/widget/src/chat21-core/models/conversation.ts.html +160 -0
  108. package/coverage/widget/src/chat21-core/models/index.html +146 -0
  109. package/coverage/widget/src/chat21-core/models/upload.ts.html +118 -0
  110. package/coverage/widget/src/chat21-core/models/user.ts.html +133 -0
  111. package/coverage/widget/src/chat21-core/providers/abstract/app-storage.service.ts.html +142 -0
  112. package/coverage/widget/src/chat21-core/providers/abstract/archivedconversations-handler.service.ts.html +184 -0
  113. package/coverage/widget/src/chat21-core/providers/abstract/conversation-handler-builder.service.ts.html +121 -0
  114. package/coverage/widget/src/chat21-core/providers/abstract/conversation-handler.service.ts.html +235 -0
  115. package/coverage/widget/src/chat21-core/providers/abstract/conversations-handler.service.ts.html +208 -0
  116. package/coverage/widget/src/chat21-core/providers/abstract/groups-handler.service.ts.html +160 -0
  117. package/coverage/widget/src/chat21-core/providers/abstract/image-repo.service.ts.html +169 -0
  118. package/coverage/widget/src/chat21-core/providers/abstract/index.html +296 -0
  119. package/coverage/widget/src/chat21-core/providers/abstract/logger.service.ts.html +136 -0
  120. package/coverage/widget/src/chat21-core/providers/abstract/messagingAuth.service.ts.html +238 -0
  121. package/coverage/widget/src/chat21-core/providers/abstract/notifications.service.ts.html +172 -0
  122. package/coverage/widget/src/chat21-core/providers/abstract/presence.service.ts.html +190 -0
  123. package/coverage/widget/src/chat21-core/providers/abstract/typing.service.ts.html +187 -0
  124. package/coverage/widget/src/chat21-core/providers/abstract/upload.service.ts.html +178 -0
  125. package/coverage/widget/src/chat21-core/providers/chat-manager.ts.html +895 -0
  126. package/coverage/widget/src/chat21-core/providers/custom-translate.service.ts.html +223 -0
  127. package/coverage/widget/src/chat21-core/providers/index.html +131 -0
  128. package/coverage/widget/src/chat21-core/providers/logger/customLogger.ts.html +265 -0
  129. package/coverage/widget/src/chat21-core/providers/logger/index.html +131 -0
  130. package/coverage/widget/src/chat21-core/providers/logger/loggerInstance.ts.html +142 -0
  131. package/coverage/widget/src/chat21-core/providers/tiledesk/index.html +131 -0
  132. package/coverage/widget/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts.html +655 -0
  133. package/coverage/widget/src/chat21-core/providers/tiledesk/tiledesk-requests.service.ts.html +241 -0
  134. package/coverage/widget/src/chat21-core/utils/constants.ts.html +409 -0
  135. package/coverage/widget/src/chat21-core/utils/index.html +176 -0
  136. package/coverage/widget/src/chat21-core/utils/triggerHandler.ts.html +1069 -0
  137. package/coverage/widget/src/chat21-core/utils/user-typing/index.html +116 -0
  138. package/coverage/widget/src/chat21-core/utils/user-typing/user-typing.component.ts.html +184 -0
  139. package/coverage/widget/src/chat21-core/utils/utils-message.ts.html +637 -0
  140. package/coverage/widget/src/chat21-core/utils/utils-user.ts.html +229 -0
  141. package/coverage/widget/src/chat21-core/utils/utils.ts.html +2221 -0
  142. package/coverage/widget/src/environments/environment.ts.html +205 -0
  143. package/coverage/widget/src/environments/index.html +116 -0
  144. package/coverage/widget/src/index.html +131 -0
  145. package/coverage/widget/src/models/index.html +116 -0
  146. package/coverage/widget/src/models/project.ts.html +319 -0
  147. package/coverage/widget/src/polyfills.ts.html +277 -0
  148. package/coverage/widget/src/test.ts.html +142 -0
  149. package/dist/assets/i18n/en.json +1 -1
  150. package/dist/assets/i18n/es.json +22 -9
  151. package/dist/assets/i18n/fr.json +20 -7
  152. package/dist/assets/i18n/it.json +24 -11
  153. package/dist/assets/twp/index-dev.html +1 -1
  154. package/dist/environments/real_data/widget-config-docker.json +0 -1
  155. package/dist/environments/real_data/widget-config-firebase.json +2 -2
  156. package/dist/environments/real_data/widget-config-native-mqtt.json +0 -1
  157. package/dist/iframe-style.css +8 -1
  158. package/dist/launch.js +1 -1
  159. package/dist/main.js +1 -1
  160. package/dist/vendor.js +1 -1
  161. package/package.json +1 -1
  162. package/src/app/app.component.scss +4 -3
  163. package/src/app/app.component.spec.ts +59 -18
  164. package/src/app/component/conversation-detail/conversation/conversation.component.spec.ts +12 -1
  165. package/src/app/component/conversation-detail/conversation/conversation.component.ts +4 -2
  166. package/src/app/component/conversation-detail/conversation-content/conversation-content.component.spec.ts +7 -4
  167. package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.spec.ts +11 -3
  168. package/src/app/component/conversation-detail/conversation-header/conversation-header.component.spec.ts +11 -4
  169. package/src/app/component/conversation-detail/conversation-preview/conversation-preview.component.spec.ts +9 -59
  170. package/src/app/component/form/form-builder/form-builder.component.spec.ts +9 -1
  171. package/src/app/component/form/inputs/form-textarea/form-textarea.component.html +5 -5
  172. package/src/app/component/form/inputs/form-textarea/form-textarea.component.spec.ts +1 -1
  173. package/src/app/component/form/inputs/form-textarea/form-textarea.component.ts +1 -1
  174. package/src/app/component/home/home.component.spec.ts +12 -3
  175. package/src/app/component/home-conversations/home-conversations.component.spec.ts +9 -1
  176. package/src/app/component/list-all-conversations/list-all-conversations.component.spec.ts +9 -11
  177. package/src/app/component/list-conversations/list-conversations.component.spec.ts +9 -1
  178. package/src/app/component/message/buttons/action-button/action-button.component.scss +1 -0
  179. package/src/app/component/message/buttons/link-button/link-button.component.scss +1 -0
  180. package/src/app/component/message/buttons/text-button/text-button.component.scss +1 -0
  181. package/src/app/component/message/frame/frame.component.spec.ts +16 -3
  182. package/src/app/component/message/frame/frame.component.ts +2 -2
  183. package/src/app/component/message/image/image.component.ts +46 -0
  184. package/src/app/component/message/info-message/info-message.component.spec.ts +9 -1
  185. package/src/app/component/message/return-receipt/return-receipt.component.spec.ts +17 -2
  186. package/src/app/component/message/text/text.component.spec.ts +2 -2
  187. package/src/app/providers/global-settings.service.ts +14 -0
  188. package/src/app/utils/globals.ts +4 -1
  189. package/src/assets/i18n/en.json +1 -1
  190. package/src/assets/i18n/es.json +22 -9
  191. package/src/assets/i18n/fr.json +20 -7
  192. package/src/assets/i18n/it.json +24 -11
  193. package/src/assets/twp/index-dev.html +1 -1
  194. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +5 -3
  195. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +5 -3
  196. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.spec.ts +29 -19
  197. package/src/chat21-core/utils/utils-message.ts +1 -1
  198. package/src/chat21-core/utils/utils.ts +3 -3
  199. package/src/environments/real_data/widget-config-docker.json +0 -1
  200. package/src/environments/real_data/widget-config-firebase.json +2 -2
  201. package/src/environments/real_data/widget-config-native-mqtt.json +0 -1
  202. package/src/iframe-style.css +8 -1
  203. package/src/launch.js +1 -1
  204. package/e2e/protractor.conf.js +0 -32
@@ -0,0 +1,895 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/chat21-core/providers/chat-manager.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../index.html">All files</a> / <a href="index.html">src/chat21-core/providers</a> chat-manager.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">33.33% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>23/69</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/8</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">4.76% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/21</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">35.38% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>23/65</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-neutral">&nbsp;</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-yes">1x</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-yes">9x</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-yes">9x</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-yes">9x</span>
371
+ <span class="cline-any cline-yes">9x</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-yes">1x</span>
377
+ <span class="cline-any cline-no">&nbsp;</span>
378
+ <span class="cline-any cline-no">&nbsp;</span>
379
+ <span class="cline-any cline-no">&nbsp;</span>
380
+ <span class="cline-any cline-no">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-yes">1x</span>
387
+ <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-yes">1x</span>
394
+ <span class="cline-any cline-no">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-yes">1x</span>
401
+ <span class="cline-any cline-no">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-yes">1x</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-neutral">&nbsp;</span>
411
+ <span class="cline-any cline-yes">1x</span>
412
+ <span class="cline-any cline-no">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-yes">1x</span>
418
+ <span class="cline-any cline-no">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-neutral">&nbsp;</span>
426
+ <span class="cline-any cline-yes">1x</span>
427
+ <span class="cline-any cline-no">&nbsp;</span>
428
+ <span class="cline-any cline-no">&nbsp;</span>
429
+ <span class="cline-any cline-no">&nbsp;</span>
430
+ <span class="cline-any cline-no">&nbsp;</span>
431
+ <span class="cline-any cline-no">&nbsp;</span>
432
+ <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-no">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-no">&nbsp;</span>
436
+ <span class="cline-any cline-no">&nbsp;</span>
437
+ <span class="cline-any cline-no">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-neutral">&nbsp;</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-neutral">&nbsp;</span>
473
+ <span class="cline-any cline-neutral">&nbsp;</span>
474
+ <span class="cline-any cline-neutral">&nbsp;</span>
475
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
+ <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-neutral">&nbsp;</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-yes">1x</span>
485
+ <span class="cline-any cline-no">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-no">&nbsp;</span>
488
+ <span class="cline-any cline-no">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-yes">1x</span>
498
+ <span class="cline-any cline-no">&nbsp;</span>
499
+ <span class="cline-any cline-no">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-yes">1x</span>
508
+ <span class="cline-any cline-no">&nbsp;</span>
509
+ <span class="cline-any cline-no">&nbsp;</span>
510
+ <span class="cline-any cline-no">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-neutral">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-yes">1x</span>
520
+ <span class="cline-any cline-no">&nbsp;</span>
521
+ <span class="cline-any cline-no">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-no">&nbsp;</span>
524
+ <span class="cline-any cline-no">&nbsp;</span>
525
+ <span class="cline-any cline-no">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-neutral">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-yes">1x</span>
546
+ <span class="cline-any cline-no">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-no">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-yes">1x</span>
559
+ <span class="cline-any cline-no">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-yes">1x</span>
562
+ <span class="cline-any cline-no">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-yes">1x</span>
569
+ <span class="cline-any cline-no">&nbsp;</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
571
+ <span class="cline-any cline-neutral">&nbsp;</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-yes">1x</span>
577
+ <span class="cline-any cline-no">&nbsp;</span>
578
+ <span class="cline-any cline-no">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-neutral">&nbsp;</span>
593
+ <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-yes">1x</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">&nbsp;
607
+ import { Injectable } from '@angular/core';
608
+ import { BehaviorSubject } from 'rxjs';
609
+ // import 'rxjs/add/operator/map';
610
+ &nbsp;
611
+ // models
612
+ import { UserModel } from '../models/user';
613
+ &nbsp;
614
+ // handlers
615
+ import { ArchivedConversationsHandlerService } from './abstract/archivedconversations-handler.service';
616
+ import { ConversationHandlerService } from './abstract/conversation-handler.service';
617
+ import { ConversationsHandlerService } from './abstract/conversations-handler.service';
618
+ &nbsp;
619
+ import { LoggerService } from './abstract/logger.service';
620
+ import { LoggerInstance } from './logger/loggerInstance';
621
+ &nbsp;
622
+ &nbsp;
623
+ @Injectable({ providedIn: 'root' })
624
+ export class ChatManager {
625
+ &nbsp;
626
+ BSStart: BehaviorSubject&lt;any&gt; = new BehaviorSubject&lt;any&gt;(null);
627
+ &nbsp;
628
+ // supportMode = environment.supportMode;
629
+ // tenant = environment.firebaseConfig.tenant;
630
+ &nbsp;
631
+ private currentUser: UserModel;
632
+ private tiledeskToken: string;
633
+ &nbsp;
634
+ private handlers: ConversationHandlerService[];
635
+ public openInfoConversation: boolean;
636
+ private logger: LoggerService = LoggerInstance.getInstance();
637
+
638
+ constructor(
639
+ // public chatContactsSynchronizer: ChatContactsSynchronizer,
640
+ public conversationsHandlerService: ConversationsHandlerService,
641
+ public archivedConversationsService: ArchivedConversationsHandlerService
642
+ ) { }
643
+ /**
644
+ * inizializza chatmanager
645
+ */
646
+ <span class="fstat-no" title="function not covered" > initialize(</span>) {
647
+ <span class="cstat-no" title="statement not covered" > this.handlers = [];</span>
648
+ <span class="cstat-no" title="statement not covered" > this.openInfoConversation = true;</span>
649
+ <span class="cstat-no" title="statement not covered" > this.currentUser = null;</span>
650
+ <span class="cstat-no" title="statement not covered" > this.logger.info('[CHAT MANAGER]**** init ****', this.handlers);</span>
651
+ }
652
+ &nbsp;
653
+ /**
654
+ * setTiledeskToken
655
+ */
656
+ <span class="fstat-no" title="function not covered" > public s</span>etTiledeskToken(tiledeskToken: string) {
657
+ <span class="cstat-no" title="statement not covered" > this.tiledeskToken = tiledeskToken;</span>
658
+ }
659
+ &nbsp;
660
+ /**
661
+ * return tiledeskToken
662
+ */
663
+ <span class="fstat-no" title="function not covered" > public g</span>etTiledeskToken(): string {
664
+ <span class="cstat-no" title="statement not covered" > return this.tiledeskToken;</span>
665
+ }
666
+ &nbsp;
667
+ /**
668
+ * setCurrentUser
669
+ */
670
+ <span class="fstat-no" title="function not covered" > public s</span>etCurrentUser(currentUser: UserModel) {
671
+ <span class="cstat-no" title="statement not covered" > this.currentUser = currentUser;</span>
672
+ }
673
+ &nbsp;
674
+ /**
675
+ * return current user detail
676
+ */
677
+ <span class="fstat-no" title="function not covered" > public g</span>etCurrentUser(): UserModel {
678
+ <span class="cstat-no" title="statement not covered" > return this.currentUser;</span>
679
+ }
680
+ &nbsp;
681
+ <span class="fstat-no" title="function not covered" > public s</span>tartApp() {
682
+ <span class="cstat-no" title="statement not covered" > this.BSStart.next(this.currentUser);</span>
683
+ }
684
+ /**
685
+ *
686
+ */
687
+ <span class="fstat-no" title="function not covered" > getOpenInfoConversation(</span>): boolean {
688
+ <span class="cstat-no" title="statement not covered" > return this.openInfoConversation;</span>
689
+ }
690
+ /**
691
+ * dispose all references
692
+ * dispose refereces messaggi di ogni conversazione
693
+ * dispose reference conversazioni
694
+ * dispose reference sincronizzazione contatti
695
+ */
696
+ <span class="fstat-no" title="function not covered" > dispose(</span>) {
697
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] 1 - setOffAllReferences');</span>
698
+ <span class="cstat-no" title="statement not covered" > if (this.handlers) { <span class="cstat-no" title="statement not covered" >this.setOffAllReferences(); </span>}</span>
699
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] 2 - disposeConversationsHandler');</span>
700
+ <span class="cstat-no" title="statement not covered" > if (this.conversationsHandlerService) { <span class="cstat-no" title="statement not covered" >this.disposeConversationsHandler(); </span>}</span>
701
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] 3 - disposeArchivedConversationsHandler');</span>
702
+ <span class="cstat-no" title="statement not covered" > if (this.archivedConversationsService) { <span class="cstat-no" title="statement not covered" >this.disposeArchivedConversationsHandler(); </span>}</span>
703
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] 4 - disposeContactsSynchronizer');</span>
704
+ // if (this.contactsSynchronizer) { this.disposeContactsSynchronizer(); }
705
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] OKK ');</span>
706
+ <span class="cstat-no" title="statement not covered" > this.conversationsHandlerService = null;</span>
707
+ <span class="cstat-no" title="statement not covered" > this.archivedConversationsService = null;</span>
708
+ // this.contactsSynchronizer = null;
709
+ }
710
+ &nbsp;
711
+ /**
712
+ * invocato da user.ts al LOGIN:
713
+ * LOGIN:
714
+ * 1 - imposto lo stato di connessione utente
715
+ * 2 - aggiungo il token
716
+ * 3 - pubblico stato loggedUser come login
717
+ */
718
+ // goOnLine(user) {
719
+ // if (user) {
720
+ // const uid = user.uid;
721
+ // this.loggedUser = new UserModel(uid);
722
+ // this.logger.('[CHAT MANAGER]goOnLine::: ', this.loggedUser);
723
+ // this.loadCurrentUserDetail();
724
+ // if (this.supportMode === false) {
725
+ // //this.initContactsSynchronizer();
726
+ // }
727
+ // }
728
+ // }
729
+ &nbsp;
730
+ &nbsp;
731
+
732
+ &nbsp;
733
+ /** */
734
+ // loadCurrentUserDetail() {
735
+ // const that = this;
736
+ // this.userService.loadCurrentUserDetail()
737
+ // .then((snapshot: any) =&gt; {
738
+ // if (snapshot.val()) {
739
+ // this.logger.('[CHAT MANAGER]loadCurrentUserDetail::: ', snapshot.val());
740
+ // that.completeProfile(snapshot.val());
741
+ // that.events.publish('loaded-current-user', snapshot.val());
742
+ // }
743
+ // })
744
+ // .catch((err: Error) =&gt; {
745
+ // this.logger.('[CHAT MANAGER]Unable to get permission to notify.', err);
746
+ // });
747
+ // }
748
+ &nbsp;
749
+ /**
750
+ * invocato da user.ts al LOGOUT:
751
+ * 1 - cancello tutte le references
752
+ * 2 - pubblico stato loggedUser come logout
753
+ */
754
+ <span class="fstat-no" title="function not covered" > goOffLine(</span>) {
755
+ <span class="cstat-no" title="statement not covered" > this.currentUser = null;</span>
756
+ // cancello token e user dal localstorage!!!!!
757
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] 1 - CANCELLO TUTTE LE REFERENCES');</span>
758
+ <span class="cstat-no" title="statement not covered" > this.dispose();</span>
759
+ }
760
+ &nbsp;
761
+ /// START metodi gestione messaggi conversazione ////
762
+ /**
763
+ * aggiungo la conversazione all'array delle conversazioni
764
+ * chiamato dall'inizialize di dettaglio-conversazione.ts
765
+ * @param handler
766
+ */
767
+ <span class="fstat-no" title="function not covered" > addConversationHandler(</span>handler: ConversationHandlerService) {
768
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] -----&gt; addConversationHandler', this.handlers, handler);</span>
769
+ <span class="cstat-no" title="statement not covered" > this.handlers.push(handler);</span>
770
+ }
771
+ &nbsp;
772
+ /**
773
+ * rimuovo dall'array degli handlers delle conversazioni una conversazione
774
+ * al momento non è utilizzato!!!
775
+ * @param conversationId
776
+ */
777
+ <span class="fstat-no" title="function not covered" > removeConversationHandler(</span>conversationId) {
778
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] -----&gt; removeConversationHandler: ', conversationId);</span>
779
+ const index = <span class="cstat-no" title="statement not covered" >this.handlers.findIndex(<span class="fstat-no" title="function not covered" >i </span>=&gt; <span class="cstat-no" title="statement not covered" >i.conversationWith === conversationId);</span></span>
780
+ <span class="cstat-no" title="statement not covered" > this.handlers.splice(index, 1);</span>
781
+ }
782
+ &nbsp;
783
+ /**
784
+ * cerco e ritorno una conversazione dall'array delle conversazioni
785
+ * con conversationId coincidente con conversationId passato
786
+ * chiamato dall'inizialize di dettaglio-conversazione.ts
787
+ * @param conversationId
788
+ */
789
+ <span class="fstat-no" title="function not covered" > getConversationHandlerByConversationId(</span>conversationId): any {
790
+ let handler = <span class="cstat-no" title="statement not covered" >null;</span>
791
+ <span class="cstat-no" title="statement not covered" > this.handlers.forEach(<span class="fstat-no" title="function not covered" >conv </span>=&gt; {</span>
792
+ // this.logger.('[CHAT MANAGER]forEach ***', conversationId, this.handlers, conv);
793
+ <span class="cstat-no" title="statement not covered" > if (conv.conversationWith === conversationId) {</span>
794
+ <span class="cstat-no" title="statement not covered" > handler = conv;</span>
795
+ <span class="cstat-no" title="statement not covered" > return;</span>
796
+ }
797
+ });
798
+ <span class="cstat-no" title="statement not covered" > return handler;</span>
799
+ // const resultArray = this.handlers.filter((handler) =&gt; {
800
+ // this.logger.('[CHAT MANAGER]FILTRO::: ***', conversationId, handler.conversationWith);
801
+ // return handler.conversationWith === conversationId;
802
+ // });
803
+ &nbsp;
804
+
805
+ // if (resultArray.length === 0) {
806
+ // return null;
807
+ // }
808
+ // return resultArray[0];
809
+ }
810
+ &nbsp;
811
+ /**
812
+ * elimino tutti gli hendler presenti nell'array handlers
813
+ * dopo aver cancellato la reference per ogni handlers
814
+ */
815
+ <span class="fstat-no" title="function not covered" > setOffAllReferences(</span>) {
816
+ <span class="cstat-no" title="statement not covered" > this.handlers.forEach(<span class="fstat-no" title="function not covered" >(d</span>ata) =&gt; {</span>
817
+ // const item = data.ref;
818
+ // item.ref.off();
819
+ });
820
+ <span class="cstat-no" title="statement not covered" > this.handlers = [];</span>
821
+ }
822
+ /// END metodi gestione messaggi conversazione ////
823
+ &nbsp;
824
+ /// START metodi gestione conversazioni ////
825
+ /**
826
+ * Salvo il CONVERSATIONS handler dopo averlo creato nella lista conversazioni
827
+ */
828
+ <span class="fstat-no" title="function not covered" > setConversationsHandler(</span>handler) {
829
+ <span class="cstat-no" title="statement not covered" > this.conversationsHandlerService = handler;</span>
830
+ }
831
+ <span class="fstat-no" title="function not covered" > setArchivedConversationsHandler(</span>handler) {
832
+ <span class="cstat-no" title="statement not covered" > this.archivedConversationsService = handler;</span>
833
+ }
834
+ &nbsp;
835
+ /**
836
+ * elimino la reference dell'handler delle conversazioni
837
+ */
838
+ <span class="fstat-no" title="function not covered" > disposeConversationsHandler(</span>) {
839
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] 2 - this.conversationsHandler:: ', this.conversationsHandlerService);</span>
840
+ <span class="cstat-no" title="statement not covered" > this.conversationsHandlerService.dispose();</span>
841
+ }
842
+ &nbsp;
843
+ /**
844
+ * elimino la reference dell'handler delle conversazioni archiviate
845
+ */
846
+ <span class="fstat-no" title="function not covered" > disposeArchivedConversationsHandler(</span>) {
847
+ <span class="cstat-no" title="statement not covered" > this.logger.debug('[CHAT MANAGER] 3 - this.archivedConversationsService:: ', this.archivedConversationsService);</span>
848
+ <span class="cstat-no" title="statement not covered" > this.archivedConversationsService.dispose();</span>
849
+ }
850
+ /// END metodi gestione conversazioni ////
851
+ &nbsp;
852
+ /// START metodi sincronizzazione contatti ////
853
+ /**
854
+ * creo handler sincronizzazione contatti se ancora nn esiste
855
+ * inizio la sincronizzazione
856
+ */
857
+ // initContactsSynchronizer() {
858
+ // this.logger.('[CHAT MANAGER] initContactsSynchronizer:: ', this.contactsSynchronizer, this.tenant, this.currentUser);
859
+ // if (!this.contactsSynchronizer) {
860
+ // this.contactsSynchronizer = this.chatContactsSynchronizer.initWithTenant(this.tenant, this.currentUser);
861
+ // //this.contactsSynchronizer = this.createContactsSynchronizerForUser();
862
+ // this.contactsSynchronizer.startSynchro();
863
+ // } else {
864
+ // this.contactsSynchronizer.startSynchro();
865
+ // }
866
+ // }
867
+ /**
868
+ * elimino la reference dell'handler della sincronizzazione contatti
869
+ */
870
+ // disposeContactsSynchronizer() {
871
+ // this.contactsSynchronizer.dispose();
872
+ // }
873
+ /// END metodi sincronizzazione contatti ////
874
+ &nbsp;
875
+ }
876
+ &nbsp;</pre></td></tr></table></pre>
877
+
878
+ <div class='push'></div><!-- for sticky footer -->
879
+ </div><!-- /wrapper -->
880
+ <div class='footer quiet pad2 space-top1 center small'>
881
+ Code coverage generated by
882
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
883
+ at Tue Nov 29 2022 09:13:07 GMT+0100 (Ora standard dell’Europa centrale)
884
+ </div>
885
+ <script src="../../../prettify.js"></script>
886
+ <script>
887
+ window.onload = function () {
888
+ prettyPrint();
889
+ };
890
+ </script>
891
+ <script src="../../../sorter.js"></script>
892
+ <script src="../../../block-navigation.js"></script>
893
+ </body>
894
+ </html>
895
+