qpp-style 9.18.2 → 9.19.0

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 (173) hide show
  1. package/components/Header/HeaderAccountMenu.jsx +10 -85
  2. package/components/Header/HeaderUI.jsx +53 -61
  3. package/components/Header/hooks.js +16 -2
  4. package/coverage/clover.xml +240 -240
  5. package/coverage/coverage-final.json +73 -73
  6. package/coverage/lcov-report/components/Accordion/index.html +116 -0
  7. package/coverage/lcov-report/components/Accordion/index.jsx.html +364 -0
  8. package/coverage/lcov-report/components/Button/index.html +116 -0
  9. package/coverage/lcov-report/components/Button/index.js.html +355 -0
  10. package/coverage/lcov-report/components/Error/Collapsible.jsx.html +349 -0
  11. package/coverage/lcov-report/components/Error/ErrorUI.jsx.html +178 -0
  12. package/coverage/lcov-report/components/Error/index.html +131 -0
  13. package/coverage/lcov-report/components/Footer/FooterUI.jsx.html +706 -0
  14. package/coverage/lcov-report/components/Footer/SocialLinks.jsx.html +265 -0
  15. package/coverage/lcov-report/components/Footer/Subscribe.jsx.html +187 -0
  16. package/coverage/lcov-report/components/Footer/index.html +146 -0
  17. package/coverage/lcov-report/components/GovBanner/index.html +116 -0
  18. package/coverage/lcov-report/components/GovBanner/index.js.html +436 -0
  19. package/coverage/lcov-report/components/Header/HeaderAccountMenu.jsx.html +592 -0
  20. package/coverage/lcov-report/components/Header/HeaderCancel.jsx.html +133 -0
  21. package/coverage/lcov-report/components/Header/HeaderContainer.jsx.html +280 -0
  22. package/coverage/lcov-report/components/Header/HeaderLogo.jsx.html +211 -0
  23. package/coverage/lcov-report/components/Header/HeaderMenuButton.js.html +235 -0
  24. package/coverage/lcov-report/components/Header/HeaderMenuItem.jsx.html +802 -0
  25. package/coverage/lcov-report/components/Header/HeaderMenuLink.js.html +235 -0
  26. package/coverage/lcov-report/components/Header/HeaderMenuSignOutButton.js.html +271 -0
  27. package/coverage/lcov-report/components/Header/HeaderMobileButton.js.html +196 -0
  28. package/coverage/lcov-report/components/Header/HeaderUI.jsx.html +586 -0
  29. package/coverage/lcov-report/components/Header/HelpIcon.jsx.html +181 -0
  30. package/coverage/lcov-report/components/Header/ImpersonatorBanner.jsx.html +331 -0
  31. package/coverage/lcov-report/components/Header/NavigationButtonIcon.jsx.html +166 -0
  32. package/coverage/lcov-report/components/Header/hooks.js.html +241 -0
  33. package/coverage/lcov-report/components/Header/index.html +326 -0
  34. package/coverage/lcov-report/components/Header/utag-helpers.js.html +112 -0
  35. package/coverage/lcov-report/components/Infotip/Infotip.jsx.html +310 -0
  36. package/coverage/lcov-report/components/Infotip/InfotipIcon.jsx.html +208 -0
  37. package/coverage/lcov-report/components/Infotip/index.html +146 -0
  38. package/coverage/lcov-report/components/Infotip/index.js.html +94 -0
  39. package/coverage/lcov-report/components/Modal/LegacyModal.jsx.html +301 -0
  40. package/coverage/lcov-report/components/Modal/Modal.jsx.html +505 -0
  41. package/coverage/lcov-report/components/Modal/index.html +146 -0
  42. package/coverage/lcov-report/components/Modal/index.jsx.html +151 -0
  43. package/coverage/lcov-report/components/NotificationBanner/index.html +116 -0
  44. package/coverage/lcov-report/components/NotificationBanner/index.js.html +880 -0
  45. package/coverage/lcov-report/components/SanitizedContent/index.html +116 -0
  46. package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +685 -0
  47. package/coverage/lcov-report/components/SessionDialogUI.jsx.html +868 -0
  48. package/coverage/lcov-report/components/SideNav/helpers.js.html +877 -0
  49. package/coverage/lcov-report/components/SideNav/index.html +116 -0
  50. package/coverage/lcov-report/components/Tooltip/Tooltip.jsx.html +349 -0
  51. package/coverage/lcov-report/components/Tooltip/index.html +146 -0
  52. package/coverage/lcov-report/components/Tooltip/index.js.html +94 -0
  53. package/coverage/lcov-report/components/Tooltip/position.js.html +289 -0
  54. package/coverage/lcov-report/components/hooks/index.html +116 -0
  55. package/coverage/lcov-report/components/hooks/useGetConfig.js.html +310 -0
  56. package/coverage/lcov-report/components/index.html +116 -0
  57. package/coverage/lcov-report/index.html +34 -34
  58. package/coverage/lcov-report/lib/Chevron.jsx.html +181 -0
  59. package/coverage/lcov-report/lib/SvgComponents.jsx.html +1744 -0
  60. package/coverage/lcov-report/lib/index.html +131 -0
  61. package/coverage/lcov-report/react/components/Accordion/index.html +1 -1
  62. package/coverage/lcov-report/react/components/Accordion/index.jsx.html +1 -1
  63. package/coverage/lcov-report/react/components/Button/index.html +1 -1
  64. package/coverage/lcov-report/react/components/Button/index.js.html +1 -1
  65. package/coverage/lcov-report/react/components/Dropdown/index.html +1 -1
  66. package/coverage/lcov-report/react/components/Dropdown/index.js.html +1 -1
  67. package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +1 -1
  68. package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +1 -1
  69. package/coverage/lcov-report/react/components/Error/error.js.html +1 -1
  70. package/coverage/lcov-report/react/components/Error/index.html +1 -1
  71. package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +2 -2
  72. package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +1 -1
  73. package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +1 -1
  74. package/coverage/lcov-report/react/components/Footer/footer.js.html +1 -1
  75. package/coverage/lcov-report/react/components/Footer/index.html +1 -1
  76. package/coverage/lcov-report/react/components/GovBanner/index.html +1 -1
  77. package/coverage/lcov-report/react/components/GovBanner/index.js.html +3 -3
  78. package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +26 -251
  79. package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +1 -1
  80. package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +2 -2
  81. package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +4 -4
  82. package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +1 -1
  83. package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +19 -19
  84. package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +1 -1
  85. package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +1 -1
  86. package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +2 -2
  87. package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +89 -113
  88. package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +2 -2
  89. package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +5 -5
  90. package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +1 -1
  91. package/coverage/lcov-report/react/components/Header/header.js.html +1 -1
  92. package/coverage/lcov-report/react/components/Header/hooks.js.html +59 -17
  93. package/coverage/lcov-report/react/components/Header/index.html +28 -28
  94. package/coverage/lcov-report/react/components/Header/utag-helpers.js.html +1 -1
  95. package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +1 -1
  96. package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +1 -1
  97. package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
  98. package/coverage/lcov-report/react/components/Infotip/index.js.html +1 -1
  99. package/coverage/lcov-report/react/components/Modal/LegacyModal.jsx.html +1 -1
  100. package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +1 -1
  101. package/coverage/lcov-report/react/components/Modal/index.html +1 -1
  102. package/coverage/lcov-report/react/components/Modal/index.jsx.html +1 -1
  103. package/coverage/lcov-report/react/components/NotificationBanner/CollapsedView.js.html +10 -10
  104. package/coverage/lcov-report/react/components/NotificationBanner/ExpandedView.js.html +1 -1
  105. package/coverage/lcov-report/react/components/NotificationBanner/index.html +11 -11
  106. package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +32 -32
  107. package/coverage/lcov-report/react/components/SanitizedContent/index.html +1 -1
  108. package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +1 -1
  109. package/coverage/lcov-report/react/components/SessionDialog/index.html +1 -1
  110. package/coverage/lcov-report/react/components/SessionDialog/sessionDialog.js.html +1 -1
  111. package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +1 -1
  112. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +1 -1
  113. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +1 -1
  114. package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +1 -1
  115. package/coverage/lcov-report/react/components/SideNav/Chart/index.html +1 -1
  116. package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +1 -1
  117. package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +1 -1
  118. package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +1 -1
  119. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.html +1 -1
  120. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.js.html +1 -1
  121. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/utils.js.html +1 -1
  122. package/coverage/lcov-report/react/components/SideNav/Content/index.html +1 -1
  123. package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +1 -1
  124. package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +1 -1
  125. package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +1 -1
  126. package/coverage/lcov-report/react/components/SideNav/Details/index.html +1 -1
  127. package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +1 -1
  128. package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +1 -1
  129. package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +1 -1
  130. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +1 -1
  131. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +1 -1
  132. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +1 -1
  133. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +1 -1
  134. package/coverage/lcov-report/react/components/SideNav/Links/index.html +1 -1
  135. package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +1 -1
  136. package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +1 -1
  137. package/coverage/lcov-report/react/components/SideNav/UI/index.html +1 -1
  138. package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +1 -1
  139. package/coverage/lcov-report/react/components/SideNav/helpers.js.html +1 -1
  140. package/coverage/lcov-report/react/components/SideNav/index.html +1 -1
  141. package/coverage/lcov-report/react/components/SideNav/index.js.html +1 -1
  142. package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +1 -1
  143. package/coverage/lcov-report/react/components/Tooltip/index.html +1 -1
  144. package/coverage/lcov-report/react/components/Tooltip/index.js.html +1 -1
  145. package/coverage/lcov-report/react/components/Tooltip/position.js.html +1 -1
  146. package/coverage/lcov-report/react/components/hooks/index.html +19 -19
  147. package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +37 -37
  148. package/coverage/lcov-report/react/components/index.html +1 -1
  149. package/coverage/lcov-report/react/index.html +1 -1
  150. package/coverage/lcov-report/react/index.js.html +1 -1
  151. package/coverage/lcov-report/react/lib/Chevron.jsx.html +2 -2
  152. package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +1 -1
  153. package/coverage/lcov-report/react/lib/index.html +1 -1
  154. package/coverage/lcov-report/react/lib/svg-definitions.svg.html +1 -1
  155. package/coverage/lcov-report/react/session/index.html +1 -1
  156. package/coverage/lcov-report/react/session/index.js.html +1 -1
  157. package/coverage/lcov-report/react/session/logout.js.html +1 -1
  158. package/coverage/lcov-report/react/session/refresh.js.html +1 -1
  159. package/coverage/lcov-report/react/session/ttl.js.html +1 -1
  160. package/coverage/lcov-report/session/index.html +161 -0
  161. package/coverage/lcov-report/session/index.js.html +100 -0
  162. package/coverage/lcov-report/session/logout.js.html +307 -0
  163. package/coverage/lcov-report/session/refresh.js.html +232 -0
  164. package/coverage/lcov-report/session/ttl.js.html +196 -0
  165. package/coverage/lcov.info +309 -307
  166. package/dist/browser.js +1 -1
  167. package/dist/browser.js.map +1 -1
  168. package/dist/index.js +1 -1
  169. package/dist/index.js.map +1 -1
  170. package/dist/react/index.js +1 -1
  171. package/dist/react/index.js.map +1 -1
  172. package/images/icons/svg/registration.svg +8 -0
  173. package/package.json +1 -1
@@ -0,0 +1,877 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for components/SideNav/helpers.js</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">components/SideNav</a> helpers.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">37.28% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>22/59</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/20</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/13</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">37.93% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>22/58</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-neutral">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <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-yes">1x</span>
348
+ <span class="cline-any cline-yes">1x</span>
349
+ <span class="cline-any cline-yes">1x</span>
350
+ <span class="cline-any cline-yes">1x</span>
351
+ <span class="cline-any cline-yes">1x</span>
352
+ <span class="cline-any cline-yes">1x</span>
353
+ <span class="cline-any cline-yes">1x</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">1x</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-no">&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-yes">1x</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-no">&nbsp;</span>
372
+ <span class="cline-any cline-no">&nbsp;</span>
373
+ <span class="cline-any cline-no">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-no">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
391
+ <span class="cline-any cline-no">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</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-neutral">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-yes">1x</span>
421
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
441
+ <span class="cline-any cline-no">&nbsp;</span>
442
+ <span class="cline-any cline-no">&nbsp;</span>
443
+ <span class="cline-any cline-no">&nbsp;</span>
444
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
448
+ <span class="cline-any cline-no">&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-no">&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-yes">1x</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-no">&nbsp;</span>
470
+ <span class="cline-any cline-no">&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-yes">1x</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-yes">1x</span>
512
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-yes">1x</span>
525
+ <span class="cline-any cline-no">&nbsp;</span>
526
+ <span class="cline-any cline-no">&nbsp;</span>
527
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
531
+ <span class="cline-any cline-no">&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-no">&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-yes">1x</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&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-no">&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-yes">1x</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-neutral">&nbsp;</span>
578
+ <span class="cline-any cline-neutral">&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></td><td class="text"><pre class="prettyprint lang-js">import cookie from 'cookie';
595
+ import {
596
+ AccountHomeIcon,
597
+ DashboardIcon,
598
+ FacilityBasedPreviewIcon,
599
+ HardshipIcon,
600
+ HelpSupportIcon,
601
+ ManageUsersIcon,
602
+ MyApplicationsIcon,
603
+ MyTestDataIcon,
604
+ PaymentIcon,
605
+ PhysicianCompareIcon,
606
+ StarIcon,
607
+ TargetIcon,
608
+ IndividualReporting,
609
+ } from '../../lib/SvgComponents';
610
+ &nbsp;
611
+ const submissionsUrl = '/user/submissions';
612
+ const dashboardUrl = '/user/dashboard';
613
+ const manageUrl = '/user/manage-access';
614
+ const feedbackUrl = `${submissionsUrl}/feedback`;
615
+ const physicianCompareUrl = `${submissionsUrl}/doctors-clinicians-preview`;
616
+ const reportsPortalUrl = `${submissionsUrl}/reports`;
617
+ const facilityBasedPreviewBaseUrl = `${submissionsUrl}/facility-based-preview`;
618
+ const viewingToolUrl = '/user/helpdesk-viewing-tool';
619
+ &nbsp;
620
+ const performanceFeedbackUrl = <span class="fstat-no" title="function not covered" >(p</span>erformanceYear) =&gt; {
621
+ <span class="cstat-no" title="statement not covered" > if (performanceYear) {</span>
622
+ <span class="cstat-no" title="statement not covered" > return `${feedbackUrl}/${performanceYear}`;</span>
623
+ } else {
624
+ <span class="cstat-no" title="statement not covered" > return feedbackUrl;</span>
625
+ }
626
+ };
627
+ &nbsp;
628
+ const facilityBasedPreviewUrl = <span class="fstat-no" title="function not covered" >(p</span>erformanceYear) =&gt; {
629
+ <span class="cstat-no" title="statement not covered" > return `${facilityBasedPreviewBaseUrl}/${performanceYear}`;</span>
630
+ };
631
+ &nbsp;
632
+ const handleNavigation = <span class="fstat-no" title="function not covered" >(e</span>, linkCallbackFunction, label) =&gt; {
633
+ <span class="cstat-no" title="statement not covered" > if (linkCallbackFunction) {</span>
634
+ const { pathname, hash, search } = <span class="cstat-no" title="statement not covered" >e.currentTarget;</span>
635
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
636
+ <span class="cstat-no" title="statement not covered" > e.stopPropagation();</span>
637
+ <span class="cstat-no" title="statement not covered" > linkCallbackFunction(`${pathname}${hash}${search}`);</span>
638
+ }
639
+ <span class="cstat-no" title="statement not covered" > window?.utag?.link({</span>
640
+ ga_event_category: 'side navbar',
641
+ ga_event_action: 'click',
642
+ ga_event_label: label,
643
+ page_title: `${window.document.title}`,
644
+ page_url: `${window.location.pathname}`,
645
+ event: 'trackEvent',
646
+ });
647
+ };
648
+ &nbsp;
649
+ /**
650
+ * Load icon by url
651
+ * @param {string} url
652
+ * @returns svg icon
653
+ */
654
+ const getIcon = <span class="fstat-no" title="function not covered" >(u</span>rl) =&gt; {
655
+ const icons = <span class="cstat-no" title="statement not covered" >{</span>
656
+ [dashboardUrl]: DashboardIcon,
657
+ [feedbackUrl]: StarIcon,
658
+ [manageUrl]: ManageUsersIcon,
659
+ [physicianCompareUrl]: PhysicianCompareIcon,
660
+ [reportsPortalUrl]: HardshipIcon,
661
+ [submissionsUrl]: AccountHomeIcon,
662
+ [facilityBasedPreviewBaseUrl]: FacilityBasedPreviewIcon,
663
+ '/developers': HelpSupportIcon,
664
+ '/resources/help-and-support': HelpSupportIcon,
665
+ '/user/apm-incentive-payments': PaymentIcon,
666
+ '/user/applications': MyApplicationsIcon,
667
+ '/user/exception/#/landing': HardshipIcon,
668
+ '/user/targeted-review/#/landing': TargetIcon,
669
+ '/user/test-data': MyTestDataIcon,
670
+ '/user/self-nomination/#/landing': IndividualReporting,
671
+ '/user/reviewers': AccountHomeIcon,
672
+ '/reviewer/exception': HardshipIcon,
673
+ '/reviewer/targeted-review': TargetIcon,
674
+ '/self-nomination': IndividualReporting,
675
+ };
676
+ <span class="cstat-no" title="statement not covered" > return icons[url];</span>
677
+ };
678
+ &nbsp;
679
+ /**
680
+ * Check if Reviewer or Self-Nom role
681
+ * @param {string} name
682
+ * @returns {boolean}
683
+ */
684
+ const isReviewerOrSelfNomRole = <span class="fstat-no" title="function not covered" >(n</span>ame) =&gt;
685
+ <span class="cstat-no" title="statement not covered" > name === 'QPP Self-Nomination' || name === 'QPP Targeted Review &amp; Exceptions';</span>
686
+ &nbsp;
687
+ /**
688
+ * Check if user is currently impersonating
689
+ * @param {string} docCookie document cookie
690
+ * @returns {boolean}
691
+ */
692
+ const isImpersonating = <span class="fstat-no" title="function not covered" >(d</span>ocCookie) =&gt; {
693
+ const parsedCookies = <span class="cstat-no" title="statement not covered" >cookie.parse(docCookie);</span>
694
+ <span class="cstat-no" title="statement not covered" > return (</span>
695
+ parsedCookies.qpp_can_impersonate &amp;&amp; parsedCookies.qpp_impersonated_user
696
+ );
697
+ };
698
+ &nbsp;
699
+ /**
700
+ * Check if user has multiple roles, used to display Select Role dropdown
701
+ * @param {string} docCookie document cookie
702
+ * @returns {boolean}
703
+ */
704
+ const isMultiRoleUser = <span class="fstat-no" title="function not covered" >(d</span>ocCookie) =&gt; {
705
+ const { qpp_cms_internal_authorized } = <span class="cstat-no" title="statement not covered" >cookie.parse(docCookie);</span>
706
+ let internalAuthz = <span class="cstat-no" title="statement not covered" >[];</span>
707
+ <span class="cstat-no" title="statement not covered" > if (qpp_cms_internal_authorized) {</span>
708
+ <span class="cstat-no" title="statement not covered" > internalAuthz = JSON.parse(qpp_cms_internal_authorized);</span>
709
+ }
710
+ // Filter out test internalCms authz
711
+ const filteredInternalAuthz = <span class="cstat-no" title="statement not covered" >internalAuthz.filter(<span class="fstat-no" title="function not covered" >(i</span>nternalAuth) =&gt; {</span>
712
+ <span class="cstat-no" title="statement not covered" > return (</span>
713
+ internalAuth !== 'Test internalCms Resource' &amp;&amp;
714
+ internalAuth !== 'Test internalCms Resource 2'
715
+ );
716
+ });
717
+ <span class="cstat-no" title="statement not covered" > return filteredInternalAuthz.length &gt; 1;</span>
718
+ };
719
+ &nbsp;
720
+ /**
721
+ * Transform cookie values to permissions object
722
+ * @param {object} cookies parsed document.cookie values
723
+ * @returns {object}
724
+ */
725
+ const transformCookieValues = <span class="fstat-no" title="function not covered" >(c</span>ookies) =&gt; {
726
+ const {
727
+ qpp_can_impersonate,
728
+ qpp_has_authorizations,
729
+ user_has_apm_payments,
730
+ qpp_cms_internal_authorized,
731
+ qpp_ehr_authorized,
732
+ qpp_has_non_registry_authorizations,
733
+ } = <span class="cstat-no" title="statement not covered" >cookies;</span>
734
+ <span class="cstat-no" title="statement not covered" > return {</span>
735
+ canImpersonate: qpp_can_impersonate === 'true',
736
+ hasAuthorizations: qpp_has_authorizations === 'true',
737
+ hasApmPayments: user_has_apm_payments === 'true',
738
+ internalReviewerNames: qpp_cms_internal_authorized
739
+ ? JSON.parse(qpp_cms_internal_authorized)
740
+ : [],
741
+ ehrAuthorized: qpp_ehr_authorized === 'true',
742
+ hasNonRegistryAuthorizations:
743
+ qpp_has_non_registry_authorizations === 'true',
744
+ };
745
+ };
746
+ &nbsp;
747
+ const permissionsByRole = {
748
+ 'QPP User': {
749
+ canImpersonate: false,
750
+ hasAuthorizations: true,
751
+ hasApmPayments: true,
752
+ },
753
+ Reviewer: {
754
+ hasAuthorizations: false,
755
+ hasApmPaymentss: false,
756
+ },
757
+ 'Helpdesk Viewer': {
758
+ hasAuthorizations: false,
759
+ hasApmPayments: false,
760
+ hasNonRegistryAuthorizations: false,
761
+ internalReviewerNames: ['QPP Helpdesk'],
762
+ },
763
+ // Helpdesk role &amp;&amp; impersonating (use impersonated user authz values)
764
+ Impersonation: {
765
+ internalReviewerNames: ['QPP Helpdesk'],
766
+ },
767
+ };
768
+ &nbsp;
769
+ /**
770
+ * Return permissions by role
771
+ * @param {string} selectedRole selected user role
772
+ * @param {object} permissionValues default permission values from transformed parsed cookie
773
+ * @returns {object}
774
+ */
775
+ const loadUserPermissionsByRole = <span class="fstat-no" title="function not covered" >(s</span>electedRole, permissionValues) =&gt; {
776
+ <span class="cstat-no" title="statement not covered" > return {</span>
777
+ ...permissionValues,
778
+ ...permissionsByRole[selectedRole],
779
+ };
780
+ };
781
+ &nbsp;
782
+ /**
783
+ * Helper fn to return user permissions/properties from cookies set on login
784
+ * @param {string} docCookie cookie values set on login
785
+ * @param {string} selectedRole string of selected role if user has multiple roles
786
+ * @returns {object}
787
+ */
788
+ const loadUserPermissions = <span class="fstat-no" title="function not covered" >(d</span>ocCookie, selectedRole) =&gt; {
789
+ const parsedCookies = <span class="cstat-no" title="statement not covered" >cookie.parse(docCookie);</span>
790
+ const permissionValues = <span class="cstat-no" title="statement not covered" >transformCookieValues(parsedCookies);</span>
791
+ const impersonating = <span class="cstat-no" title="statement not covered" >isImpersonating(docCookie);</span>
792
+ const role = <span class="cstat-no" title="statement not covered" >impersonating ? 'Impersonation' : selectedRole;</span>
793
+ &nbsp;
794
+ <span class="cstat-no" title="statement not covered" > if (role) {</span>
795
+ <span class="cstat-no" title="statement not covered" > return loadUserPermissionsByRole(role, permissionValues);</span>
796
+ }
797
+ &nbsp;
798
+ <span class="cstat-no" title="statement not covered" > return permissionValues;</span>
799
+ };
800
+ &nbsp;
801
+ /**
802
+ * Return map of link conditionals based on user cookies for side nav
803
+ * @param {object} userPermissions user permissions/properties derived from cookies set on login
804
+ * @returns {object}
805
+ */
806
+ const getUrlConditionMap = <span class="fstat-no" title="function not covered" >(u</span>serPermissions) =&gt; {
807
+ <span class="cstat-no" title="statement not covered" > return {</span>
808
+ [dashboardUrl]: userPermissions.hasAuthorizations,
809
+ [feedbackUrl]: userPermissions.hasAuthorizations,
810
+ '/user/apm-incentive-payments': userPermissions.hasApmPayments,
811
+ [physicianCompareUrl]: userPermissions.hasNonRegistryAuthorizations,
812
+ [reportsPortalUrl]: userPermissions.hasAuthorizations,
813
+ [facilityBasedPreviewBaseUrl]: userPermissions.hasAuthorizations,
814
+ '/user/helpdesk-viewing-tool': userPermissions.canImpersonate,
815
+ '/reviewer/exception': userPermissions.internalReviewerNames?.includes(
816
+ 'QPP Targeted Review &amp; Exceptions'
817
+ ),
818
+ '/reviewer/targeted-review':
819
+ userPermissions.internalReviewerNames?.includes(
820
+ 'QPP Targeted Review &amp; Exceptions'
821
+ ),
822
+ '/self-nomination': userPermissions.internalReviewerNames?.includes(
823
+ 'QPP Self-Nomination'
824
+ ),
825
+ &nbsp;
826
+ // dev pre
827
+ '/user/applications': userPermissions.ehrAuthorized,
828
+ '/user/test-data': userPermissions.ehrAuthorized,
829
+ };
830
+ };
831
+ &nbsp;
832
+ const isImpersonationLink = <span class="fstat-no" title="function not covered" >(d</span>ocCookie, linkLabel) =&gt; {
833
+ <span class="cstat-no" title="statement not covered" > if (!isImpersonating(docCookie)) <span class="cstat-no" title="statement not covered" >return;</span></span>
834
+ const helpdeskLinks = <span class="cstat-no" title="statement not covered" >['Account Home', 'Manage Access', 'Help and Support'];</span>
835
+ <span class="cstat-no" title="statement not covered" > return !helpdeskLinks.includes(linkLabel);</span>
836
+ };
837
+ &nbsp;
838
+ module.exports = {
839
+ submissionsUrl,
840
+ dashboardUrl,
841
+ feedbackUrl,
842
+ manageUrl,
843
+ physicianCompareUrl,
844
+ performanceFeedbackUrl,
845
+ facilityBasedPreviewUrl,
846
+ handleNavigation,
847
+ reportsPortalUrl,
848
+ facilityBasedPreviewBaseUrl,
849
+ viewingToolUrl,
850
+ loadUserPermissions,
851
+ getUrlConditionMap,
852
+ isMultiRoleUser,
853
+ isReviewerOrSelfNomRole,
854
+ getIcon,
855
+ isImpersonating,
856
+ isImpersonationLink,
857
+ };
858
+ &nbsp;</pre></td></tr></table></pre>
859
+
860
+ <div class='push'></div><!-- for sticky footer -->
861
+ </div><!-- /wrapper -->
862
+ <div class='footer quiet pad2 space-top1 center small'>
863
+ Code coverage generated by
864
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
865
+ at Mon Aug 22 2022 12:06:23 GMT-0400 (Eastern Daylight Time)
866
+ </div>
867
+ <script src="../../prettify.js"></script>
868
+ <script>
869
+ window.onload = function () {
870
+ prettyPrint();
871
+ };
872
+ </script>
873
+ <script src="../../sorter.js"></script>
874
+ <script src="../../block-navigation.js"></script>
875
+ </body>
876
+ </html>
877
+