@marktoflow/gui 2.0.1 → 2.0.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 (167) hide show
  1. package/README.md +9 -3
  2. package/coverage/base.css +224 -0
  3. package/coverage/block-navigation.js +87 -0
  4. package/coverage/client/App.tsx.html +2230 -0
  5. package/coverage/client/components/Accessibility/LiveRegion.tsx.html +166 -0
  6. package/coverage/client/components/Accessibility/SkipNav.tsx.html +106 -0
  7. package/coverage/client/components/Accessibility/index.html +131 -0
  8. package/coverage/client/components/Admin/AuditViewer.tsx.html +214 -0
  9. package/coverage/client/components/Admin/EnvironmentSwitcher.tsx.html +187 -0
  10. package/coverage/client/components/Admin/RoleManager.tsx.html +250 -0
  11. package/coverage/client/components/Admin/SecretsVault.tsx.html +241 -0
  12. package/coverage/client/components/Admin/index.html +161 -0
  13. package/coverage/client/components/Canvas/AlignmentTools.tsx.html +694 -0
  14. package/coverage/client/components/Canvas/Canvas.tsx.html +1513 -0
  15. package/coverage/client/components/Canvas/DataPreviewBadge.tsx.html +307 -0
  16. package/coverage/client/components/Canvas/ExecutionInputDialog.tsx.html +769 -0
  17. package/coverage/client/components/Canvas/ExecutionOverlay.tsx.html +2938 -0
  18. package/coverage/client/components/Canvas/ForEachNode.tsx.html +568 -0
  19. package/coverage/client/components/Canvas/GroupNode.tsx.html +421 -0
  20. package/coverage/client/components/Canvas/IfElseNode.tsx.html +508 -0
  21. package/coverage/client/components/Canvas/InlineEditor.tsx.html +472 -0
  22. package/coverage/client/components/Canvas/NodeContextMenu.tsx.html +661 -0
  23. package/coverage/client/components/Canvas/NodeTooltip.tsx.html +316 -0
  24. package/coverage/client/components/Canvas/OutputNode.tsx.html +418 -0
  25. package/coverage/client/components/Canvas/ParallelNode.tsx.html +556 -0
  26. package/coverage/client/components/Canvas/StepNode.tsx.html +463 -0
  27. package/coverage/client/components/Canvas/StickyNoteNode.tsx.html +442 -0
  28. package/coverage/client/components/Canvas/SubWorkflowNode.tsx.html +508 -0
  29. package/coverage/client/components/Canvas/SwitchNode.tsx.html +640 -0
  30. package/coverage/client/components/Canvas/Toolbar.tsx.html +1030 -0
  31. package/coverage/client/components/Canvas/TransformNode.tsx.html +667 -0
  32. package/coverage/client/components/Canvas/TriggerNode.tsx.html +469 -0
  33. package/coverage/client/components/Canvas/TryCatchNode.tsx.html +577 -0
  34. package/coverage/client/components/Canvas/WhileNode.tsx.html +595 -0
  35. package/coverage/client/components/Canvas/index.html +446 -0
  36. package/coverage/client/components/Canvas/index.ts.html +157 -0
  37. package/coverage/client/components/Collaboration/ActivityFeed.tsx.html +253 -0
  38. package/coverage/client/components/Collaboration/CommentThread.tsx.html +397 -0
  39. package/coverage/client/components/Collaboration/LockIndicator.tsx.html +172 -0
  40. package/coverage/client/components/Collaboration/PresenceIndicator.tsx.html +214 -0
  41. package/coverage/client/components/Collaboration/index.html +161 -0
  42. package/coverage/client/components/CommandPalette/CommandItem.tsx.html +313 -0
  43. package/coverage/client/components/CommandPalette/CommandPalette.tsx.html +685 -0
  44. package/coverage/client/components/CommandPalette/index.html +131 -0
  45. package/coverage/client/components/Debug/VariableInspector.tsx.html +529 -0
  46. package/coverage/client/components/Debug/index.html +116 -0
  47. package/coverage/client/components/Editor/InputsEditor.tsx.html +1459 -0
  48. package/coverage/client/components/Editor/NewStepWizard.tsx.html +1117 -0
  49. package/coverage/client/components/Editor/StepEditor.tsx.html +1681 -0
  50. package/coverage/client/components/Editor/YamlEditor.tsx.html +565 -0
  51. package/coverage/client/components/Editor/index.html +161 -0
  52. package/coverage/client/components/Execution/TimelineView.tsx.html +397 -0
  53. package/coverage/client/components/Execution/index.html +116 -0
  54. package/coverage/client/components/Onboarding/OnboardingTour.tsx.html +265 -0
  55. package/coverage/client/components/Onboarding/index.html +116 -0
  56. package/coverage/client/components/Panels/PropertiesPanel.tsx.html +2035 -0
  57. package/coverage/client/components/Panels/ValidationPanel.tsx.html +856 -0
  58. package/coverage/client/components/Panels/index.html +131 -0
  59. package/coverage/client/components/Prompt/ChangePreview.tsx.html +928 -0
  60. package/coverage/client/components/Prompt/PromptHistoryPanel.tsx.html +712 -0
  61. package/coverage/client/components/Prompt/PromptInput.tsx.html +415 -0
  62. package/coverage/client/components/Prompt/index.html +146 -0
  63. package/coverage/client/components/Settings/ProviderSwitcher.tsx.html +1306 -0
  64. package/coverage/client/components/Settings/SettingsPanel.tsx.html +355 -0
  65. package/coverage/client/components/Settings/controls/SettingNumber.tsx.html +211 -0
  66. package/coverage/client/components/Settings/controls/SettingSelect.tsx.html +196 -0
  67. package/coverage/client/components/Settings/controls/SettingToggle.tsx.html +199 -0
  68. package/coverage/client/components/Settings/controls/index.html +146 -0
  69. package/coverage/client/components/Settings/index.html +131 -0
  70. package/coverage/client/components/Settings/sections/AISettings.tsx.html +154 -0
  71. package/coverage/client/components/Settings/sections/CanvasSettings.tsx.html +220 -0
  72. package/coverage/client/components/Settings/sections/EditorSettings.tsx.html +208 -0
  73. package/coverage/client/components/Settings/sections/ExecutionSettings.tsx.html +172 -0
  74. package/coverage/client/components/Settings/sections/GeneralSettings.tsx.html +151 -0
  75. package/coverage/client/components/Settings/sections/NotificationSettings.tsx.html +190 -0
  76. package/coverage/client/components/Settings/sections/index.html +191 -0
  77. package/coverage/client/components/Sidebar/ImportDialog.tsx.html +856 -0
  78. package/coverage/client/components/Sidebar/NewWorkflowDialog.tsx.html +694 -0
  79. package/coverage/client/components/Sidebar/Sidebar.tsx.html +1456 -0
  80. package/coverage/client/components/Sidebar/index.html +146 -0
  81. package/coverage/client/components/Templates/TemplateCard.tsx.html +181 -0
  82. package/coverage/client/components/Templates/TemplateGallery.tsx.html +307 -0
  83. package/coverage/client/components/Templates/index.html +131 -0
  84. package/coverage/client/components/Versions/DiffViewer.tsx.html +220 -0
  85. package/coverage/client/components/Versions/VersionHistory.tsx.html +352 -0
  86. package/coverage/client/components/Versions/index.html +131 -0
  87. package/coverage/client/components/common/Breadcrumb.tsx.html +205 -0
  88. package/coverage/client/components/common/Button.tsx.html +289 -0
  89. package/coverage/client/components/common/ContextMenu.tsx.html +691 -0
  90. package/coverage/client/components/common/KeyboardShortcuts.tsx.html +541 -0
  91. package/coverage/client/components/common/Modal.tsx.html +364 -0
  92. package/coverage/client/components/common/Tabs.tsx.html +256 -0
  93. package/coverage/client/components/common/ThemeToggle.tsx.html +301 -0
  94. package/coverage/client/components/common/index.html +206 -0
  95. package/coverage/client/components/index.html +116 -0
  96. package/coverage/client/components/index.ts.html +181 -0
  97. package/coverage/client/hooks/index.html +176 -0
  98. package/coverage/client/hooks/index.ts.html +97 -0
  99. package/coverage/client/hooks/useAIPrompt.ts.html +409 -0
  100. package/coverage/client/hooks/useCanvas.ts.html +739 -0
  101. package/coverage/client/hooks/useWebSocket.ts.html +580 -0
  102. package/coverage/client/hooks/useWorkflow.ts.html +502 -0
  103. package/coverage/client/index.html +131 -0
  104. package/coverage/client/main.tsx.html +115 -0
  105. package/coverage/client/stores/agentStore.ts.html +421 -0
  106. package/coverage/client/stores/canvasStore.ts.html +1129 -0
  107. package/coverage/client/stores/collaborationStore.ts.html +544 -0
  108. package/coverage/client/stores/commandStore.ts.html +610 -0
  109. package/coverage/client/stores/editorStore.ts.html +484 -0
  110. package/coverage/client/stores/executionStore.ts.html +1594 -0
  111. package/coverage/client/stores/governanceStore.ts.html +493 -0
  112. package/coverage/client/stores/index.html +341 -0
  113. package/coverage/client/stores/index.ts.html +112 -0
  114. package/coverage/client/stores/layoutStore.ts.html +439 -0
  115. package/coverage/client/stores/navigationStore.ts.html +232 -0
  116. package/coverage/client/stores/onboardingStore.ts.html +247 -0
  117. package/coverage/client/stores/promptStore.ts.html +430 -0
  118. package/coverage/client/stores/settingsStore.ts.html +472 -0
  119. package/coverage/client/stores/themeStore.ts.html +271 -0
  120. package/coverage/client/stores/versionStore.ts.html +340 -0
  121. package/coverage/client/stores/workflowStore.ts.html +739 -0
  122. package/coverage/client/utils/applyDagreLayout.ts.html +286 -0
  123. package/coverage/client/utils/cn.ts.html +112 -0
  124. package/coverage/client/utils/index.html +206 -0
  125. package/coverage/client/utils/index.ts.html +97 -0
  126. package/coverage/client/utils/platform.ts.html +223 -0
  127. package/coverage/client/utils/serviceIcons.tsx.html +376 -0
  128. package/coverage/client/utils/stepValidation.ts.html +550 -0
  129. package/coverage/client/utils/workflowToGraph.ts.html +1624 -0
  130. package/coverage/coverage-final.json +107 -0
  131. package/coverage/favicon.png +0 -0
  132. package/coverage/index.html +461 -0
  133. package/coverage/prettify.css +1 -0
  134. package/coverage/prettify.js +2 -0
  135. package/coverage/shared/constants.ts.html +655 -0
  136. package/coverage/shared/index.html +146 -0
  137. package/coverage/shared/settings.ts.html +406 -0
  138. package/coverage/shared/types.ts.html +622 -0
  139. package/coverage/sort-arrow-sprite.png +0 -0
  140. package/coverage/sorter.js +210 -0
  141. package/dist/client/assets/{index-DQeR1ew6.css → index-DipWdkNl.css} +1 -1
  142. package/dist/client/assets/{index-LbIVPHbD.js → index-DtX_BPDj.js} +20 -20
  143. package/dist/client/assets/{index-LbIVPHbD.js.map → index-DtX_BPDj.js.map} +1 -1
  144. package/dist/client/index.html +3 -3
  145. package/dist/server/routes/form.js +27 -1
  146. package/dist/server/routes/form.js.map +1 -1
  147. package/dist/server/services/AIService.js +16 -6
  148. package/dist/server/services/AIService.js.map +1 -1
  149. package/dist/server/services/agents/{claude-code-provider.js → claude-agent-provider.js} +11 -11
  150. package/dist/server/services/agents/claude-agent-provider.js.map +1 -0
  151. package/dist/server/services/agents/claude-provider.js +4 -5
  152. package/dist/server/services/agents/claude-provider.js.map +1 -1
  153. package/dist/server/services/agents/codex-provider.js +5 -6
  154. package/dist/server/services/agents/codex-provider.js.map +1 -1
  155. package/dist/server/services/agents/copilot-provider.js +35 -8
  156. package/dist/server/services/agents/copilot-provider.js.map +1 -1
  157. package/dist/server/services/agents/openai-provider.js +244 -0
  158. package/dist/server/services/agents/openai-provider.js.map +1 -0
  159. package/dist/server/services/agents/opencode-provider.js +258 -0
  160. package/dist/server/services/agents/opencode-provider.js.map +1 -0
  161. package/dist/server/services/agents/registry.js +17 -22
  162. package/dist/server/services/agents/registry.js.map +1 -1
  163. package/index.html +1 -1
  164. package/package.json +3 -3
  165. package/client.log +0 -0
  166. package/dist/server/services/agents/claude-code-provider.js.map +0 -1
  167. package/server.log +0 -0
@@ -0,0 +1,2230 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for client/App.tsx</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">client</a> App.tsx</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/502</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/1</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/1</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/502</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 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>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a>
634
+ <a name='L569'></a><a href='#L569'>569</a>
635
+ <a name='L570'></a><a href='#L570'>570</a>
636
+ <a name='L571'></a><a href='#L571'>571</a>
637
+ <a name='L572'></a><a href='#L572'>572</a>
638
+ <a name='L573'></a><a href='#L573'>573</a>
639
+ <a name='L574'></a><a href='#L574'>574</a>
640
+ <a name='L575'></a><a href='#L575'>575</a>
641
+ <a name='L576'></a><a href='#L576'>576</a>
642
+ <a name='L577'></a><a href='#L577'>577</a>
643
+ <a name='L578'></a><a href='#L578'>578</a>
644
+ <a name='L579'></a><a href='#L579'>579</a>
645
+ <a name='L580'></a><a href='#L580'>580</a>
646
+ <a name='L581'></a><a href='#L581'>581</a>
647
+ <a name='L582'></a><a href='#L582'>582</a>
648
+ <a name='L583'></a><a href='#L583'>583</a>
649
+ <a name='L584'></a><a href='#L584'>584</a>
650
+ <a name='L585'></a><a href='#L585'>585</a>
651
+ <a name='L586'></a><a href='#L586'>586</a>
652
+ <a name='L587'></a><a href='#L587'>587</a>
653
+ <a name='L588'></a><a href='#L588'>588</a>
654
+ <a name='L589'></a><a href='#L589'>589</a>
655
+ <a name='L590'></a><a href='#L590'>590</a>
656
+ <a name='L591'></a><a href='#L591'>591</a>
657
+ <a name='L592'></a><a href='#L592'>592</a>
658
+ <a name='L593'></a><a href='#L593'>593</a>
659
+ <a name='L594'></a><a href='#L594'>594</a>
660
+ <a name='L595'></a><a href='#L595'>595</a>
661
+ <a name='L596'></a><a href='#L596'>596</a>
662
+ <a name='L597'></a><a href='#L597'>597</a>
663
+ <a name='L598'></a><a href='#L598'>598</a>
664
+ <a name='L599'></a><a href='#L599'>599</a>
665
+ <a name='L600'></a><a href='#L600'>600</a>
666
+ <a name='L601'></a><a href='#L601'>601</a>
667
+ <a name='L602'></a><a href='#L602'>602</a>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a>
700
+ <a name='L635'></a><a href='#L635'>635</a>
701
+ <a name='L636'></a><a href='#L636'>636</a>
702
+ <a name='L637'></a><a href='#L637'>637</a>
703
+ <a name='L638'></a><a href='#L638'>638</a>
704
+ <a name='L639'></a><a href='#L639'>639</a>
705
+ <a name='L640'></a><a href='#L640'>640</a>
706
+ <a name='L641'></a><a href='#L641'>641</a>
707
+ <a name='L642'></a><a href='#L642'>642</a>
708
+ <a name='L643'></a><a href='#L643'>643</a>
709
+ <a name='L644'></a><a href='#L644'>644</a>
710
+ <a name='L645'></a><a href='#L645'>645</a>
711
+ <a name='L646'></a><a href='#L646'>646</a>
712
+ <a name='L647'></a><a href='#L647'>647</a>
713
+ <a name='L648'></a><a href='#L648'>648</a>
714
+ <a name='L649'></a><a href='#L649'>649</a>
715
+ <a name='L650'></a><a href='#L650'>650</a>
716
+ <a name='L651'></a><a href='#L651'>651</a>
717
+ <a name='L652'></a><a href='#L652'>652</a>
718
+ <a name='L653'></a><a href='#L653'>653</a>
719
+ <a name='L654'></a><a href='#L654'>654</a>
720
+ <a name='L655'></a><a href='#L655'>655</a>
721
+ <a name='L656'></a><a href='#L656'>656</a>
722
+ <a name='L657'></a><a href='#L657'>657</a>
723
+ <a name='L658'></a><a href='#L658'>658</a>
724
+ <a name='L659'></a><a href='#L659'>659</a>
725
+ <a name='L660'></a><a href='#L660'>660</a>
726
+ <a name='L661'></a><a href='#L661'>661</a>
727
+ <a name='L662'></a><a href='#L662'>662</a>
728
+ <a name='L663'></a><a href='#L663'>663</a>
729
+ <a name='L664'></a><a href='#L664'>664</a>
730
+ <a name='L665'></a><a href='#L665'>665</a>
731
+ <a name='L666'></a><a href='#L666'>666</a>
732
+ <a name='L667'></a><a href='#L667'>667</a>
733
+ <a name='L668'></a><a href='#L668'>668</a>
734
+ <a name='L669'></a><a href='#L669'>669</a>
735
+ <a name='L670'></a><a href='#L670'>670</a>
736
+ <a name='L671'></a><a href='#L671'>671</a>
737
+ <a name='L672'></a><a href='#L672'>672</a>
738
+ <a name='L673'></a><a href='#L673'>673</a>
739
+ <a name='L674'></a><a href='#L674'>674</a>
740
+ <a name='L675'></a><a href='#L675'>675</a>
741
+ <a name='L676'></a><a href='#L676'>676</a>
742
+ <a name='L677'></a><a href='#L677'>677</a>
743
+ <a name='L678'></a><a href='#L678'>678</a>
744
+ <a name='L679'></a><a href='#L679'>679</a>
745
+ <a name='L680'></a><a href='#L680'>680</a>
746
+ <a name='L681'></a><a href='#L681'>681</a>
747
+ <a name='L682'></a><a href='#L682'>682</a>
748
+ <a name='L683'></a><a href='#L683'>683</a>
749
+ <a name='L684'></a><a href='#L684'>684</a>
750
+ <a name='L685'></a><a href='#L685'>685</a>
751
+ <a name='L686'></a><a href='#L686'>686</a>
752
+ <a name='L687'></a><a href='#L687'>687</a>
753
+ <a name='L688'></a><a href='#L688'>688</a>
754
+ <a name='L689'></a><a href='#L689'>689</a>
755
+ <a name='L690'></a><a href='#L690'>690</a>
756
+ <a name='L691'></a><a href='#L691'>691</a>
757
+ <a name='L692'></a><a href='#L692'>692</a>
758
+ <a name='L693'></a><a href='#L693'>693</a>
759
+ <a name='L694'></a><a href='#L694'>694</a>
760
+ <a name='L695'></a><a href='#L695'>695</a>
761
+ <a name='L696'></a><a href='#L696'>696</a>
762
+ <a name='L697'></a><a href='#L697'>697</a>
763
+ <a name='L698'></a><a href='#L698'>698</a>
764
+ <a name='L699'></a><a href='#L699'>699</a>
765
+ <a name='L700'></a><a href='#L700'>700</a>
766
+ <a name='L701'></a><a href='#L701'>701</a>
767
+ <a name='L702'></a><a href='#L702'>702</a>
768
+ <a name='L703'></a><a href='#L703'>703</a>
769
+ <a name='L704'></a><a href='#L704'>704</a>
770
+ <a name='L705'></a><a href='#L705'>705</a>
771
+ <a name='L706'></a><a href='#L706'>706</a>
772
+ <a name='L707'></a><a href='#L707'>707</a>
773
+ <a name='L708'></a><a href='#L708'>708</a>
774
+ <a name='L709'></a><a href='#L709'>709</a>
775
+ <a name='L710'></a><a href='#L710'>710</a>
776
+ <a name='L711'></a><a href='#L711'>711</a>
777
+ <a name='L712'></a><a href='#L712'>712</a>
778
+ <a name='L713'></a><a href='#L713'>713</a>
779
+ <a name='L714'></a><a href='#L714'>714</a>
780
+ <a name='L715'></a><a href='#L715'>715</a>
781
+ <a name='L716'></a><a href='#L716'>716</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-neutral">&nbsp;</span>
792
+ <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-neutral">&nbsp;</span>
800
+ <span class="cline-any cline-neutral">&nbsp;</span>
801
+ <span class="cline-any cline-neutral">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span>
803
+ <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-neutral">&nbsp;</span>
805
+ <span class="cline-any cline-neutral">&nbsp;</span>
806
+ <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-neutral">&nbsp;</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-neutral">&nbsp;</span>
812
+ <span class="cline-any cline-neutral">&nbsp;</span>
813
+ <span class="cline-any cline-neutral">&nbsp;</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span>
817
+ <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-neutral">&nbsp;</span>
819
+ <span class="cline-any cline-no">&nbsp;</span>
820
+ <span class="cline-any cline-neutral">&nbsp;</span>
821
+ <span class="cline-any cline-no">&nbsp;</span>
822
+ <span class="cline-any cline-no">&nbsp;</span>
823
+ <span class="cline-any cline-no">&nbsp;</span>
824
+ <span class="cline-any cline-no">&nbsp;</span>
825
+ <span class="cline-any cline-no">&nbsp;</span>
826
+ <span class="cline-any cline-no">&nbsp;</span>
827
+ <span class="cline-any cline-neutral">&nbsp;</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-no">&nbsp;</span>
830
+ <span class="cline-any cline-no">&nbsp;</span>
831
+ <span class="cline-any cline-no">&nbsp;</span>
832
+ <span class="cline-any cline-no">&nbsp;</span>
833
+ <span class="cline-any cline-no">&nbsp;</span>
834
+ <span class="cline-any cline-no">&nbsp;</span>
835
+ <span class="cline-any cline-neutral">&nbsp;</span>
836
+ <span class="cline-any cline-neutral">&nbsp;</span>
837
+ <span class="cline-any cline-no">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-no">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-no">&nbsp;</span>
844
+ <span class="cline-any cline-no">&nbsp;</span>
845
+ <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-no">&nbsp;</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-no">&nbsp;</span>
850
+ <span class="cline-any cline-no">&nbsp;</span>
851
+ <span class="cline-any cline-no">&nbsp;</span>
852
+ <span class="cline-any cline-neutral">&nbsp;</span>
853
+ <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-no">&nbsp;</span>
855
+ <span class="cline-any cline-no">&nbsp;</span>
856
+ <span class="cline-any cline-no">&nbsp;</span>
857
+ <span class="cline-any cline-no">&nbsp;</span>
858
+ <span class="cline-any cline-no">&nbsp;</span>
859
+ <span class="cline-any cline-neutral">&nbsp;</span>
860
+ <span class="cline-any cline-no">&nbsp;</span>
861
+ <span class="cline-any cline-no">&nbsp;</span>
862
+ <span class="cline-any cline-no">&nbsp;</span>
863
+ <span class="cline-any cline-no">&nbsp;</span>
864
+ <span class="cline-any cline-no">&nbsp;</span>
865
+ <span class="cline-any cline-no">&nbsp;</span>
866
+ <span class="cline-any cline-no">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</span>
868
+ <span class="cline-any cline-no">&nbsp;</span>
869
+ <span class="cline-any cline-no">&nbsp;</span>
870
+ <span class="cline-any cline-no">&nbsp;</span>
871
+ <span class="cline-any cline-no">&nbsp;</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-no">&nbsp;</span>
875
+ <span class="cline-any cline-no">&nbsp;</span>
876
+ <span class="cline-any cline-no">&nbsp;</span>
877
+ <span class="cline-any cline-no">&nbsp;</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
+ <span class="cline-any cline-no">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
881
+ <span class="cline-any cline-no">&nbsp;</span>
882
+ <span class="cline-any cline-no">&nbsp;</span>
883
+ <span class="cline-any cline-no">&nbsp;</span>
884
+ <span class="cline-any cline-no">&nbsp;</span>
885
+ <span class="cline-any cline-no">&nbsp;</span>
886
+ <span class="cline-any cline-no">&nbsp;</span>
887
+ <span class="cline-any cline-no">&nbsp;</span>
888
+ <span class="cline-any cline-neutral">&nbsp;</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-no">&nbsp;</span>
891
+ <span class="cline-any cline-no">&nbsp;</span>
892
+ <span class="cline-any cline-no">&nbsp;</span>
893
+ <span class="cline-any cline-no">&nbsp;</span>
894
+ <span class="cline-any cline-no">&nbsp;</span>
895
+ <span class="cline-any cline-no">&nbsp;</span>
896
+ <span class="cline-any cline-neutral">&nbsp;</span>
897
+ <span class="cline-any cline-neutral">&nbsp;</span>
898
+ <span class="cline-any cline-no">&nbsp;</span>
899
+ <span class="cline-any cline-no">&nbsp;</span>
900
+ <span class="cline-any cline-no">&nbsp;</span>
901
+ <span class="cline-any cline-no">&nbsp;</span>
902
+ <span class="cline-any cline-no">&nbsp;</span>
903
+ <span class="cline-any cline-no">&nbsp;</span>
904
+ <span class="cline-any cline-neutral">&nbsp;</span>
905
+ <span class="cline-any cline-neutral">&nbsp;</span>
906
+ <span class="cline-any cline-no">&nbsp;</span>
907
+ <span class="cline-any cline-no">&nbsp;</span>
908
+ <span class="cline-any cline-no">&nbsp;</span>
909
+ <span class="cline-any cline-no">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-no">&nbsp;</span>
913
+ <span class="cline-any cline-no">&nbsp;</span>
914
+ <span class="cline-any cline-no">&nbsp;</span>
915
+ <span class="cline-any cline-no">&nbsp;</span>
916
+ <span class="cline-any cline-no">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-no">&nbsp;</span>
920
+ <span class="cline-any cline-no">&nbsp;</span>
921
+ <span class="cline-any cline-no">&nbsp;</span>
922
+ <span class="cline-any cline-no">&nbsp;</span>
923
+ <span class="cline-any cline-no">&nbsp;</span>
924
+ <span class="cline-any cline-no">&nbsp;</span>
925
+ <span class="cline-any cline-no">&nbsp;</span>
926
+ <span class="cline-any cline-no">&nbsp;</span>
927
+ <span class="cline-any cline-no">&nbsp;</span>
928
+ <span class="cline-any cline-no">&nbsp;</span>
929
+ <span class="cline-any cline-no">&nbsp;</span>
930
+ <span class="cline-any cline-neutral">&nbsp;</span>
931
+ <span class="cline-any cline-neutral">&nbsp;</span>
932
+ <span class="cline-any cline-no">&nbsp;</span>
933
+ <span class="cline-any cline-no">&nbsp;</span>
934
+ <span class="cline-any cline-no">&nbsp;</span>
935
+ <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-no">&nbsp;</span>
937
+ <span class="cline-any cline-no">&nbsp;</span>
938
+ <span class="cline-any cline-no">&nbsp;</span>
939
+ <span class="cline-any cline-no">&nbsp;</span>
940
+ <span class="cline-any cline-no">&nbsp;</span>
941
+ <span class="cline-any cline-no">&nbsp;</span>
942
+ <span class="cline-any cline-neutral">&nbsp;</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-no">&nbsp;</span>
945
+ <span class="cline-any cline-no">&nbsp;</span>
946
+ <span class="cline-any cline-no">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-no">&nbsp;</span>
950
+ <span class="cline-any cline-no">&nbsp;</span>
951
+ <span class="cline-any cline-no">&nbsp;</span>
952
+ <span class="cline-any cline-no">&nbsp;</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-neutral">&nbsp;</span>
955
+ <span class="cline-any cline-no">&nbsp;</span>
956
+ <span class="cline-any cline-neutral">&nbsp;</span>
957
+ <span class="cline-any cline-neutral">&nbsp;</span>
958
+ <span class="cline-any cline-no">&nbsp;</span>
959
+ <span class="cline-any cline-no">&nbsp;</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-no">&nbsp;</span>
962
+ <span class="cline-any cline-no">&nbsp;</span>
963
+ <span class="cline-any cline-no">&nbsp;</span>
964
+ <span class="cline-any cline-no">&nbsp;</span>
965
+ <span class="cline-any cline-neutral">&nbsp;</span>
966
+ <span class="cline-any cline-no">&nbsp;</span>
967
+ <span class="cline-any cline-no">&nbsp;</span>
968
+ <span class="cline-any cline-no">&nbsp;</span>
969
+ <span class="cline-any cline-no">&nbsp;</span>
970
+ <span class="cline-any cline-no">&nbsp;</span>
971
+ <span class="cline-any cline-neutral">&nbsp;</span>
972
+ <span class="cline-any cline-no">&nbsp;</span>
973
+ <span class="cline-any cline-no">&nbsp;</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-no">&nbsp;</span>
976
+ <span class="cline-any cline-neutral">&nbsp;</span>
977
+ <span class="cline-any cline-no">&nbsp;</span>
978
+ <span class="cline-any cline-no">&nbsp;</span>
979
+ <span class="cline-any cline-no">&nbsp;</span>
980
+ <span class="cline-any cline-no">&nbsp;</span>
981
+ <span class="cline-any cline-no">&nbsp;</span>
982
+ <span class="cline-any cline-no">&nbsp;</span>
983
+ <span class="cline-any cline-no">&nbsp;</span>
984
+ <span class="cline-any cline-no">&nbsp;</span>
985
+ <span class="cline-any cline-no">&nbsp;</span>
986
+ <span class="cline-any cline-no">&nbsp;</span>
987
+ <span class="cline-any cline-no">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-neutral">&nbsp;</span>
990
+ <span class="cline-any cline-no">&nbsp;</span>
991
+ <span class="cline-any cline-no">&nbsp;</span>
992
+ <span class="cline-any cline-no">&nbsp;</span>
993
+ <span class="cline-any cline-no">&nbsp;</span>
994
+ <span class="cline-any cline-no">&nbsp;</span>
995
+ <span class="cline-any cline-no">&nbsp;</span>
996
+ <span class="cline-any cline-no">&nbsp;</span>
997
+ <span class="cline-any cline-neutral">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-no">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-no">&nbsp;</span>
1002
+ <span class="cline-any cline-no">&nbsp;</span>
1003
+ <span class="cline-any cline-no">&nbsp;</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-no">&nbsp;</span>
1007
+ <span class="cline-any cline-no">&nbsp;</span>
1008
+ <span class="cline-any cline-neutral">&nbsp;</span>
1009
+ <span class="cline-any cline-neutral">&nbsp;</span>
1010
+ <span class="cline-any cline-neutral">&nbsp;</span>
1011
+ <span class="cline-any cline-neutral">&nbsp;</span>
1012
+ <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-no">&nbsp;</span>
1014
+ <span class="cline-any cline-no">&nbsp;</span>
1015
+ <span class="cline-any cline-no">&nbsp;</span>
1016
+ <span class="cline-any cline-no">&nbsp;</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-neutral">&nbsp;</span>
1019
+ <span class="cline-any cline-no">&nbsp;</span>
1020
+ <span class="cline-any cline-no">&nbsp;</span>
1021
+ <span class="cline-any cline-neutral">&nbsp;</span>
1022
+ <span class="cline-any cline-neutral">&nbsp;</span>
1023
+ <span class="cline-any cline-no">&nbsp;</span>
1024
+ <span class="cline-any cline-neutral">&nbsp;</span>
1025
+ <span class="cline-any cline-neutral">&nbsp;</span>
1026
+ <span class="cline-any cline-no">&nbsp;</span>
1027
+ <span class="cline-any cline-no">&nbsp;</span>
1028
+ <span class="cline-any cline-no">&nbsp;</span>
1029
+ <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-neutral">&nbsp;</span>
1031
+ <span class="cline-any cline-no">&nbsp;</span>
1032
+ <span class="cline-any cline-no">&nbsp;</span>
1033
+ <span class="cline-any cline-no">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-neutral">&nbsp;</span>
1036
+ <span class="cline-any cline-no">&nbsp;</span>
1037
+ <span class="cline-any cline-no">&nbsp;</span>
1038
+ <span class="cline-any cline-no">&nbsp;</span>
1039
+ <span class="cline-any cline-no">&nbsp;</span>
1040
+ <span class="cline-any cline-neutral">&nbsp;</span>
1041
+ <span class="cline-any cline-no">&nbsp;</span>
1042
+ <span class="cline-any cline-no">&nbsp;</span>
1043
+ <span class="cline-any cline-no">&nbsp;</span>
1044
+ <span class="cline-any cline-no">&nbsp;</span>
1045
+ <span class="cline-any cline-no">&nbsp;</span>
1046
+ <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-no">&nbsp;</span>
1049
+ <span class="cline-any cline-no">&nbsp;</span>
1050
+ <span class="cline-any cline-neutral">&nbsp;</span>
1051
+ <span class="cline-any cline-no">&nbsp;</span>
1052
+ <span class="cline-any cline-no">&nbsp;</span>
1053
+ <span class="cline-any cline-no">&nbsp;</span>
1054
+ <span class="cline-any cline-no">&nbsp;</span>
1055
+ <span class="cline-any cline-no">&nbsp;</span>
1056
+ <span class="cline-any cline-no">&nbsp;</span>
1057
+ <span class="cline-any cline-no">&nbsp;</span>
1058
+ <span class="cline-any cline-no">&nbsp;</span>
1059
+ <span class="cline-any cline-no">&nbsp;</span>
1060
+ <span class="cline-any cline-no">&nbsp;</span>
1061
+ <span class="cline-any cline-no">&nbsp;</span>
1062
+ <span class="cline-any cline-no">&nbsp;</span>
1063
+ <span class="cline-any cline-no">&nbsp;</span>
1064
+ <span class="cline-any cline-no">&nbsp;</span>
1065
+ <span class="cline-any cline-no">&nbsp;</span>
1066
+ <span class="cline-any cline-no">&nbsp;</span>
1067
+ <span class="cline-any cline-no">&nbsp;</span>
1068
+ <span class="cline-any cline-no">&nbsp;</span>
1069
+ <span class="cline-any cline-neutral">&nbsp;</span>
1070
+ <span class="cline-any cline-no">&nbsp;</span>
1071
+ <span class="cline-any cline-neutral">&nbsp;</span>
1072
+ <span class="cline-any cline-neutral">&nbsp;</span>
1073
+ <span class="cline-any cline-no">&nbsp;</span>
1074
+ <span class="cline-any cline-no">&nbsp;</span>
1075
+ <span class="cline-any cline-no">&nbsp;</span>
1076
+ <span class="cline-any cline-no">&nbsp;</span>
1077
+ <span class="cline-any cline-neutral">&nbsp;</span>
1078
+ <span class="cline-any cline-no">&nbsp;</span>
1079
+ <span class="cline-any cline-neutral">&nbsp;</span>
1080
+ <span class="cline-any cline-no">&nbsp;</span>
1081
+ <span class="cline-any cline-no">&nbsp;</span>
1082
+ <span class="cline-any cline-no">&nbsp;</span>
1083
+ <span class="cline-any cline-neutral">&nbsp;</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-no">&nbsp;</span>
1086
+ <span class="cline-any cline-no">&nbsp;</span>
1087
+ <span class="cline-any cline-no">&nbsp;</span>
1088
+ <span class="cline-any cline-no">&nbsp;</span>
1089
+ <span class="cline-any cline-no">&nbsp;</span>
1090
+ <span class="cline-any cline-no">&nbsp;</span>
1091
+ <span class="cline-any cline-no">&nbsp;</span>
1092
+ <span class="cline-any cline-neutral">&nbsp;</span>
1093
+ <span class="cline-any cline-neutral">&nbsp;</span>
1094
+ <span class="cline-any cline-no">&nbsp;</span>
1095
+ <span class="cline-any cline-no">&nbsp;</span>
1096
+ <span class="cline-any cline-no">&nbsp;</span>
1097
+ <span class="cline-any cline-no">&nbsp;</span>
1098
+ <span class="cline-any cline-no">&nbsp;</span>
1099
+ <span class="cline-any cline-no">&nbsp;</span>
1100
+ <span class="cline-any cline-no">&nbsp;</span>
1101
+ <span class="cline-any cline-no">&nbsp;</span>
1102
+ <span class="cline-any cline-no">&nbsp;</span>
1103
+ <span class="cline-any cline-no">&nbsp;</span>
1104
+ <span class="cline-any cline-neutral">&nbsp;</span>
1105
+ <span class="cline-any cline-no">&nbsp;</span>
1106
+ <span class="cline-any cline-no">&nbsp;</span>
1107
+ <span class="cline-any cline-no">&nbsp;</span>
1108
+ <span class="cline-any cline-no">&nbsp;</span>
1109
+ <span class="cline-any cline-neutral">&nbsp;</span>
1110
+ <span class="cline-any cline-neutral">&nbsp;</span>
1111
+ <span class="cline-any cline-no">&nbsp;</span>
1112
+ <span class="cline-any cline-no">&nbsp;</span>
1113
+ <span class="cline-any cline-neutral">&nbsp;</span>
1114
+ <span class="cline-any cline-neutral">&nbsp;</span>
1115
+ <span class="cline-any cline-no">&nbsp;</span>
1116
+ <span class="cline-any cline-no">&nbsp;</span>
1117
+ <span class="cline-any cline-no">&nbsp;</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-no">&nbsp;</span>
1121
+ <span class="cline-any cline-neutral">&nbsp;</span>
1122
+ <span class="cline-any cline-no">&nbsp;</span>
1123
+ <span class="cline-any cline-no">&nbsp;</span>
1124
+ <span class="cline-any cline-no">&nbsp;</span>
1125
+ <span class="cline-any cline-no">&nbsp;</span>
1126
+ <span class="cline-any cline-no">&nbsp;</span>
1127
+ <span class="cline-any cline-no">&nbsp;</span>
1128
+ <span class="cline-any cline-no">&nbsp;</span>
1129
+ <span class="cline-any cline-no">&nbsp;</span>
1130
+ <span class="cline-any cline-no">&nbsp;</span>
1131
+ <span class="cline-any cline-no">&nbsp;</span>
1132
+ <span class="cline-any cline-no">&nbsp;</span>
1133
+ <span class="cline-any cline-no">&nbsp;</span>
1134
+ <span class="cline-any cline-no">&nbsp;</span>
1135
+ <span class="cline-any cline-no">&nbsp;</span>
1136
+ <span class="cline-any cline-no">&nbsp;</span>
1137
+ <span class="cline-any cline-no">&nbsp;</span>
1138
+ <span class="cline-any cline-no">&nbsp;</span>
1139
+ <span class="cline-any cline-no">&nbsp;</span>
1140
+ <span class="cline-any cline-no">&nbsp;</span>
1141
+ <span class="cline-any cline-no">&nbsp;</span>
1142
+ <span class="cline-any cline-no">&nbsp;</span>
1143
+ <span class="cline-any cline-no">&nbsp;</span>
1144
+ <span class="cline-any cline-neutral">&nbsp;</span>
1145
+ <span class="cline-any cline-neutral">&nbsp;</span>
1146
+ <span class="cline-any cline-neutral">&nbsp;</span>
1147
+ <span class="cline-any cline-no">&nbsp;</span>
1148
+ <span class="cline-any cline-no">&nbsp;</span>
1149
+ <span class="cline-any cline-no">&nbsp;</span>
1150
+ <span class="cline-any cline-no">&nbsp;</span>
1151
+ <span class="cline-any cline-no">&nbsp;</span>
1152
+ <span class="cline-any cline-neutral">&nbsp;</span>
1153
+ <span class="cline-any cline-neutral">&nbsp;</span>
1154
+ <span class="cline-any cline-no">&nbsp;</span>
1155
+ <span class="cline-any cline-no">&nbsp;</span>
1156
+ <span class="cline-any cline-no">&nbsp;</span>
1157
+ <span class="cline-any cline-no">&nbsp;</span>
1158
+ <span class="cline-any cline-no">&nbsp;</span>
1159
+ <span class="cline-any cline-neutral">&nbsp;</span>
1160
+ <span class="cline-any cline-neutral">&nbsp;</span>
1161
+ <span class="cline-any cline-no">&nbsp;</span>
1162
+ <span class="cline-any cline-no">&nbsp;</span>
1163
+ <span class="cline-any cline-no">&nbsp;</span>
1164
+ <span class="cline-any cline-no">&nbsp;</span>
1165
+ <span class="cline-any cline-no">&nbsp;</span>
1166
+ <span class="cline-any cline-no">&nbsp;</span>
1167
+ <span class="cline-any cline-no">&nbsp;</span>
1168
+ <span class="cline-any cline-no">&nbsp;</span>
1169
+ <span class="cline-any cline-neutral">&nbsp;</span>
1170
+ <span class="cline-any cline-neutral">&nbsp;</span>
1171
+ <span class="cline-any cline-no">&nbsp;</span>
1172
+ <span class="cline-any cline-no">&nbsp;</span>
1173
+ <span class="cline-any cline-no">&nbsp;</span>
1174
+ <span class="cline-any cline-no">&nbsp;</span>
1175
+ <span class="cline-any cline-no">&nbsp;</span>
1176
+ <span class="cline-any cline-no">&nbsp;</span>
1177
+ <span class="cline-any cline-no">&nbsp;</span>
1178
+ <span class="cline-any cline-neutral">&nbsp;</span>
1179
+ <span class="cline-any cline-neutral">&nbsp;</span>
1180
+ <span class="cline-any cline-no">&nbsp;</span>
1181
+ <span class="cline-any cline-no">&nbsp;</span>
1182
+ <span class="cline-any cline-neutral">&nbsp;</span>
1183
+ <span class="cline-any cline-no">&nbsp;</span>
1184
+ <span class="cline-any cline-no">&nbsp;</span>
1185
+ <span class="cline-any cline-no">&nbsp;</span>
1186
+ <span class="cline-any cline-no">&nbsp;</span>
1187
+ <span class="cline-any cline-no">&nbsp;</span>
1188
+ <span class="cline-any cline-no">&nbsp;</span>
1189
+ <span class="cline-any cline-neutral">&nbsp;</span>
1190
+ <span class="cline-any cline-no">&nbsp;</span>
1191
+ <span class="cline-any cline-neutral">&nbsp;</span>
1192
+ <span class="cline-any cline-neutral">&nbsp;</span>
1193
+ <span class="cline-any cline-no">&nbsp;</span>
1194
+ <span class="cline-any cline-no">&nbsp;</span>
1195
+ <span class="cline-any cline-no">&nbsp;</span>
1196
+ <span class="cline-any cline-no">&nbsp;</span>
1197
+ <span class="cline-any cline-no">&nbsp;</span>
1198
+ <span class="cline-any cline-neutral">&nbsp;</span>
1199
+ <span class="cline-any cline-neutral">&nbsp;</span>
1200
+ <span class="cline-any cline-no">&nbsp;</span>
1201
+ <span class="cline-any cline-no">&nbsp;</span>
1202
+ <span class="cline-any cline-no">&nbsp;</span>
1203
+ <span class="cline-any cline-no">&nbsp;</span>
1204
+ <span class="cline-any cline-no">&nbsp;</span>
1205
+ <span class="cline-any cline-neutral">&nbsp;</span>
1206
+ <span class="cline-any cline-neutral">&nbsp;</span>
1207
+ <span class="cline-any cline-no">&nbsp;</span>
1208
+ <span class="cline-any cline-no">&nbsp;</span>
1209
+ <span class="cline-any cline-no">&nbsp;</span>
1210
+ <span class="cline-any cline-no">&nbsp;</span>
1211
+ <span class="cline-any cline-no">&nbsp;</span>
1212
+ <span class="cline-any cline-neutral">&nbsp;</span>
1213
+ <span class="cline-any cline-neutral">&nbsp;</span>
1214
+ <span class="cline-any cline-no">&nbsp;</span>
1215
+ <span class="cline-any cline-no">&nbsp;</span>
1216
+ <span class="cline-any cline-no">&nbsp;</span>
1217
+ <span class="cline-any cline-no">&nbsp;</span>
1218
+ <span class="cline-any cline-no">&nbsp;</span>
1219
+ <span class="cline-any cline-neutral">&nbsp;</span>
1220
+ <span class="cline-any cline-neutral">&nbsp;</span>
1221
+ <span class="cline-any cline-no">&nbsp;</span>
1222
+ <span class="cline-any cline-no">&nbsp;</span>
1223
+ <span class="cline-any cline-no">&nbsp;</span>
1224
+ <span class="cline-any cline-no">&nbsp;</span>
1225
+ <span class="cline-any cline-neutral">&nbsp;</span>
1226
+ <span class="cline-any cline-neutral">&nbsp;</span>
1227
+ <span class="cline-any cline-no">&nbsp;</span>
1228
+ <span class="cline-any cline-no">&nbsp;</span>
1229
+ <span class="cline-any cline-no">&nbsp;</span>
1230
+ <span class="cline-any cline-no">&nbsp;</span>
1231
+ <span class="cline-any cline-neutral">&nbsp;</span>
1232
+ <span class="cline-any cline-neutral">&nbsp;</span>
1233
+ <span class="cline-any cline-no">&nbsp;</span>
1234
+ <span class="cline-any cline-no">&nbsp;</span>
1235
+ <span class="cline-any cline-no">&nbsp;</span>
1236
+ <span class="cline-any cline-no">&nbsp;</span>
1237
+ <span class="cline-any cline-neutral">&nbsp;</span>
1238
+ <span class="cline-any cline-neutral">&nbsp;</span>
1239
+ <span class="cline-any cline-no">&nbsp;</span>
1240
+ <span class="cline-any cline-no">&nbsp;</span>
1241
+ <span class="cline-any cline-no">&nbsp;</span>
1242
+ <span class="cline-any cline-no">&nbsp;</span>
1243
+ <span class="cline-any cline-neutral">&nbsp;</span>
1244
+ <span class="cline-any cline-neutral">&nbsp;</span>
1245
+ <span class="cline-any cline-no">&nbsp;</span>
1246
+ <span class="cline-any cline-no">&nbsp;</span>
1247
+ <span class="cline-any cline-no">&nbsp;</span>
1248
+ <span class="cline-any cline-no">&nbsp;</span>
1249
+ <span class="cline-any cline-neutral">&nbsp;</span>
1250
+ <span class="cline-any cline-neutral">&nbsp;</span>
1251
+ <span class="cline-any cline-neutral">&nbsp;</span>
1252
+ <span class="cline-any cline-no">&nbsp;</span>
1253
+ <span class="cline-any cline-no">&nbsp;</span>
1254
+ <span class="cline-any cline-no">&nbsp;</span>
1255
+ <span class="cline-any cline-no">&nbsp;</span>
1256
+ <span class="cline-any cline-no">&nbsp;</span>
1257
+ <span class="cline-any cline-no">&nbsp;</span>
1258
+ <span class="cline-any cline-no">&nbsp;</span>
1259
+ <span class="cline-any cline-no">&nbsp;</span>
1260
+ <span class="cline-any cline-neutral">&nbsp;</span>
1261
+ <span class="cline-any cline-neutral">&nbsp;</span>
1262
+ <span class="cline-any cline-no">&nbsp;</span>
1263
+ <span class="cline-any cline-no">&nbsp;</span>
1264
+ <span class="cline-any cline-no">&nbsp;</span>
1265
+ <span class="cline-any cline-no">&nbsp;</span>
1266
+ <span class="cline-any cline-neutral">&nbsp;</span>
1267
+ <span class="cline-any cline-neutral">&nbsp;</span>
1268
+ <span class="cline-any cline-no">&nbsp;</span>
1269
+ <span class="cline-any cline-no">&nbsp;</span>
1270
+ <span class="cline-any cline-no">&nbsp;</span>
1271
+ <span class="cline-any cline-no">&nbsp;</span>
1272
+ <span class="cline-any cline-neutral">&nbsp;</span>
1273
+ <span class="cline-any cline-neutral">&nbsp;</span>
1274
+ <span class="cline-any cline-no">&nbsp;</span>
1275
+ <span class="cline-any cline-no">&nbsp;</span>
1276
+ <span class="cline-any cline-no">&nbsp;</span>
1277
+ <span class="cline-any cline-no">&nbsp;</span>
1278
+ <span class="cline-any cline-neutral">&nbsp;</span>
1279
+ <span class="cline-any cline-neutral">&nbsp;</span>
1280
+ <span class="cline-any cline-no">&nbsp;</span>
1281
+ <span class="cline-any cline-no">&nbsp;</span>
1282
+ <span class="cline-any cline-no">&nbsp;</span>
1283
+ <span class="cline-any cline-no">&nbsp;</span>
1284
+ <span class="cline-any cline-no">&nbsp;</span>
1285
+ <span class="cline-any cline-neutral">&nbsp;</span>
1286
+ <span class="cline-any cline-no">&nbsp;</span>
1287
+ <span class="cline-any cline-no">&nbsp;</span>
1288
+ <span class="cline-any cline-no">&nbsp;</span>
1289
+ <span class="cline-any cline-neutral">&nbsp;</span>
1290
+ <span class="cline-any cline-no">&nbsp;</span>
1291
+ <span class="cline-any cline-no">&nbsp;</span>
1292
+ <span class="cline-any cline-no">&nbsp;</span>
1293
+ <span class="cline-any cline-no">&nbsp;</span>
1294
+ <span class="cline-any cline-no">&nbsp;</span>
1295
+ <span class="cline-any cline-no">&nbsp;</span>
1296
+ <span class="cline-any cline-no">&nbsp;</span>
1297
+ <span class="cline-any cline-neutral">&nbsp;</span>
1298
+ <span class="cline-any cline-no">&nbsp;</span>
1299
+ <span class="cline-any cline-neutral">&nbsp;</span>
1300
+ <span class="cline-any cline-neutral">&nbsp;</span>
1301
+ <span class="cline-any cline-no">&nbsp;</span>
1302
+ <span class="cline-any cline-neutral">&nbsp;</span>
1303
+ <span class="cline-any cline-no">&nbsp;</span>
1304
+ <span class="cline-any cline-no">&nbsp;</span>
1305
+ <span class="cline-any cline-no">&nbsp;</span>
1306
+ <span class="cline-any cline-no">&nbsp;</span>
1307
+ <span class="cline-any cline-no">&nbsp;</span>
1308
+ <span class="cline-any cline-no">&nbsp;</span>
1309
+ <span class="cline-any cline-neutral">&nbsp;</span>
1310
+ <span class="cline-any cline-no">&nbsp;</span>
1311
+ <span class="cline-any cline-no">&nbsp;</span>
1312
+ <span class="cline-any cline-no">&nbsp;</span>
1313
+ <span class="cline-any cline-no">&nbsp;</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-no">&nbsp;</span>
1316
+ <span class="cline-any cline-no">&nbsp;</span>
1317
+ <span class="cline-any cline-no">&nbsp;</span>
1318
+ <span class="cline-any cline-no">&nbsp;</span>
1319
+ <span class="cline-any cline-no">&nbsp;</span>
1320
+ <span class="cline-any cline-neutral">&nbsp;</span>
1321
+ <span class="cline-any cline-no">&nbsp;</span>
1322
+ <span class="cline-any cline-no">&nbsp;</span>
1323
+ <span class="cline-any cline-no">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-neutral">&nbsp;</span>
1326
+ <span class="cline-any cline-neutral">&nbsp;</span>
1327
+ <span class="cline-any cline-no">&nbsp;</span>
1328
+ <span class="cline-any cline-no">&nbsp;</span>
1329
+ <span class="cline-any cline-no">&nbsp;</span>
1330
+ <span class="cline-any cline-no">&nbsp;</span>
1331
+ <span class="cline-any cline-no">&nbsp;</span>
1332
+ <span class="cline-any cline-no">&nbsp;</span>
1333
+ <span class="cline-any cline-no">&nbsp;</span>
1334
+ <span class="cline-any cline-no">&nbsp;</span>
1335
+ <span class="cline-any cline-no">&nbsp;</span>
1336
+ <span class="cline-any cline-no">&nbsp;</span>
1337
+ <span class="cline-any cline-neutral">&nbsp;</span>
1338
+ <span class="cline-any cline-no">&nbsp;</span>
1339
+ <span class="cline-any cline-no">&nbsp;</span>
1340
+ <span class="cline-any cline-no">&nbsp;</span>
1341
+ <span class="cline-any cline-no">&nbsp;</span>
1342
+ <span class="cline-any cline-no">&nbsp;</span>
1343
+ <span class="cline-any cline-no">&nbsp;</span>
1344
+ <span class="cline-any cline-no">&nbsp;</span>
1345
+ <span class="cline-any cline-no">&nbsp;</span>
1346
+ <span class="cline-any cline-neutral">&nbsp;</span>
1347
+ <span class="cline-any cline-neutral">&nbsp;</span>
1348
+ <span class="cline-any cline-neutral">&nbsp;</span>
1349
+ <span class="cline-any cline-no">&nbsp;</span>
1350
+ <span class="cline-any cline-no">&nbsp;</span>
1351
+ <span class="cline-any cline-no">&nbsp;</span>
1352
+ <span class="cline-any cline-no">&nbsp;</span>
1353
+ <span class="cline-any cline-no">&nbsp;</span>
1354
+ <span class="cline-any cline-no">&nbsp;</span>
1355
+ <span class="cline-any cline-no">&nbsp;</span>
1356
+ <span class="cline-any cline-neutral">&nbsp;</span>
1357
+ <span class="cline-any cline-neutral">&nbsp;</span>
1358
+ <span class="cline-any cline-no">&nbsp;</span>
1359
+ <span class="cline-any cline-no">&nbsp;</span>
1360
+ <span class="cline-any cline-no">&nbsp;</span>
1361
+ <span class="cline-any cline-no">&nbsp;</span>
1362
+ <span class="cline-any cline-neutral">&nbsp;</span>
1363
+ <span class="cline-any cline-neutral">&nbsp;</span>
1364
+ <span class="cline-any cline-no">&nbsp;</span>
1365
+ <span class="cline-any cline-no">&nbsp;</span>
1366
+ <span class="cline-any cline-neutral">&nbsp;</span>
1367
+ <span class="cline-any cline-neutral">&nbsp;</span>
1368
+ <span class="cline-any cline-no">&nbsp;</span>
1369
+ <span class="cline-any cline-no">&nbsp;</span>
1370
+ <span class="cline-any cline-no">&nbsp;</span>
1371
+ <span class="cline-any cline-no">&nbsp;</span>
1372
+ <span class="cline-any cline-no">&nbsp;</span>
1373
+ <span class="cline-any cline-neutral">&nbsp;</span>
1374
+ <span class="cline-any cline-no">&nbsp;</span>
1375
+ <span class="cline-any cline-no">&nbsp;</span>
1376
+ <span class="cline-any cline-neutral">&nbsp;</span>
1377
+ <span class="cline-any cline-neutral">&nbsp;</span>
1378
+ <span class="cline-any cline-neutral">&nbsp;</span>
1379
+ <span class="cline-any cline-no">&nbsp;</span>
1380
+ <span class="cline-any cline-no">&nbsp;</span>
1381
+ <span class="cline-any cline-no">&nbsp;</span>
1382
+ <span class="cline-any cline-no">&nbsp;</span>
1383
+ <span class="cline-any cline-no">&nbsp;</span>
1384
+ <span class="cline-any cline-no">&nbsp;</span>
1385
+ <span class="cline-any cline-neutral">&nbsp;</span>
1386
+ <span class="cline-any cline-no">&nbsp;</span>
1387
+ <span class="cline-any cline-no">&nbsp;</span>
1388
+ <span class="cline-any cline-neutral">&nbsp;</span>
1389
+ <span class="cline-any cline-neutral">&nbsp;</span>
1390
+ <span class="cline-any cline-neutral">&nbsp;</span>
1391
+ <span class="cline-any cline-no">&nbsp;</span>
1392
+ <span class="cline-any cline-no">&nbsp;</span>
1393
+ <span class="cline-any cline-no">&nbsp;</span>
1394
+ <span class="cline-any cline-no">&nbsp;</span>
1395
+ <span class="cline-any cline-no">&nbsp;</span>
1396
+ <span class="cline-any cline-no">&nbsp;</span>
1397
+ <span class="cline-any cline-neutral">&nbsp;</span>
1398
+ <span class="cline-any cline-no">&nbsp;</span>
1399
+ <span class="cline-any cline-no">&nbsp;</span>
1400
+ <span class="cline-any cline-neutral">&nbsp;</span>
1401
+ <span class="cline-any cline-neutral">&nbsp;</span>
1402
+ <span class="cline-any cline-neutral">&nbsp;</span>
1403
+ <span class="cline-any cline-no">&nbsp;</span>
1404
+ <span class="cline-any cline-no">&nbsp;</span>
1405
+ <span class="cline-any cline-no">&nbsp;</span>
1406
+ <span class="cline-any cline-no">&nbsp;</span>
1407
+ <span class="cline-any cline-no">&nbsp;</span>
1408
+ <span class="cline-any cline-no">&nbsp;</span>
1409
+ <span class="cline-any cline-no">&nbsp;</span>
1410
+ <span class="cline-any cline-no">&nbsp;</span>
1411
+ <span class="cline-any cline-no">&nbsp;</span>
1412
+ <span class="cline-any cline-no">&nbsp;</span>
1413
+ <span class="cline-any cline-no">&nbsp;</span>
1414
+ <span class="cline-any cline-no">&nbsp;</span>
1415
+ <span class="cline-any cline-no">&nbsp;</span>
1416
+ <span class="cline-any cline-no">&nbsp;</span>
1417
+ <span class="cline-any cline-no">&nbsp;</span>
1418
+ <span class="cline-any cline-no">&nbsp;</span>
1419
+ <span class="cline-any cline-no">&nbsp;</span>
1420
+ <span class="cline-any cline-no">&nbsp;</span>
1421
+ <span class="cline-any cline-no">&nbsp;</span>
1422
+ <span class="cline-any cline-no">&nbsp;</span>
1423
+ <span class="cline-any cline-no">&nbsp;</span>
1424
+ <span class="cline-any cline-no">&nbsp;</span>
1425
+ <span class="cline-any cline-neutral">&nbsp;</span>
1426
+ <span class="cline-any cline-no">&nbsp;</span>
1427
+ <span class="cline-any cline-no">&nbsp;</span>
1428
+ <span class="cline-any cline-no">&nbsp;</span>
1429
+ <span class="cline-any cline-no">&nbsp;</span>
1430
+ <span class="cline-any cline-no">&nbsp;</span>
1431
+ <span class="cline-any cline-no">&nbsp;</span>
1432
+ <span class="cline-any cline-no">&nbsp;</span>
1433
+ <span class="cline-any cline-no">&nbsp;</span>
1434
+ <span class="cline-any cline-no">&nbsp;</span>
1435
+ <span class="cline-any cline-no">&nbsp;</span>
1436
+ <span class="cline-any cline-no">&nbsp;</span>
1437
+ <span class="cline-any cline-no">&nbsp;</span>
1438
+ <span class="cline-any cline-no">&nbsp;</span>
1439
+ <span class="cline-any cline-no">&nbsp;</span>
1440
+ <span class="cline-any cline-no">&nbsp;</span>
1441
+ <span class="cline-any cline-no">&nbsp;</span>
1442
+ <span class="cline-any cline-neutral">&nbsp;</span>
1443
+ <span class="cline-any cline-neutral">&nbsp;</span>
1444
+ <span class="cline-any cline-no">&nbsp;</span>
1445
+ <span class="cline-any cline-no">&nbsp;</span>
1446
+ <span class="cline-any cline-neutral">&nbsp;</span>
1447
+ <span class="cline-any cline-neutral">&nbsp;</span>
1448
+ <span class="cline-any cline-no">&nbsp;</span>
1449
+ <span class="cline-any cline-neutral">&nbsp;</span>
1450
+ <span class="cline-any cline-neutral">&nbsp;</span>
1451
+ <span class="cline-any cline-no">&nbsp;</span>
1452
+ <span class="cline-any cline-no">&nbsp;</span>
1453
+ <span class="cline-any cline-no">&nbsp;</span>
1454
+ <span class="cline-any cline-no">&nbsp;</span>
1455
+ <span class="cline-any cline-no">&nbsp;</span>
1456
+ <span class="cline-any cline-no">&nbsp;</span>
1457
+ <span class="cline-any cline-no">&nbsp;</span>
1458
+ <span class="cline-any cline-no">&nbsp;</span>
1459
+ <span class="cline-any cline-neutral">&nbsp;</span>
1460
+ <span class="cline-any cline-neutral">&nbsp;</span>
1461
+ <span class="cline-any cline-no">&nbsp;</span>
1462
+ <span class="cline-any cline-no">&nbsp;</span>
1463
+ <span class="cline-any cline-no">&nbsp;</span>
1464
+ <span class="cline-any cline-no">&nbsp;</span>
1465
+ <span class="cline-any cline-no">&nbsp;</span>
1466
+ <span class="cline-any cline-no">&nbsp;</span>
1467
+ <span class="cline-any cline-no">&nbsp;</span>
1468
+ <span class="cline-any cline-no">&nbsp;</span>
1469
+ <span class="cline-any cline-no">&nbsp;</span>
1470
+ <span class="cline-any cline-no">&nbsp;</span>
1471
+ <span class="cline-any cline-neutral">&nbsp;</span>
1472
+ <span class="cline-any cline-neutral">&nbsp;</span>
1473
+ <span class="cline-any cline-neutral">&nbsp;</span>
1474
+ <span class="cline-any cline-no">&nbsp;</span>
1475
+ <span class="cline-any cline-no">&nbsp;</span>
1476
+ <span class="cline-any cline-no">&nbsp;</span>
1477
+ <span class="cline-any cline-no">&nbsp;</span>
1478
+ <span class="cline-any cline-no">&nbsp;</span>
1479
+ <span class="cline-any cline-no">&nbsp;</span>
1480
+ <span class="cline-any cline-no">&nbsp;</span>
1481
+ <span class="cline-any cline-no">&nbsp;</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-neutral">&nbsp;</span>
1484
+ <span class="cline-any cline-neutral">&nbsp;</span>
1485
+ <span class="cline-any cline-no">&nbsp;</span>
1486
+ <span class="cline-any cline-no">&nbsp;</span>
1487
+ <span class="cline-any cline-no">&nbsp;</span>
1488
+ <span class="cline-any cline-no">&nbsp;</span>
1489
+ <span class="cline-any cline-neutral">&nbsp;</span>
1490
+ <span class="cline-any cline-neutral">&nbsp;</span>
1491
+ <span class="cline-any cline-no">&nbsp;</span>
1492
+ <span class="cline-any cline-no">&nbsp;</span>
1493
+ <span class="cline-any cline-no">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-no">&nbsp;</span>
1496
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import { useEffect, useCallback, useState, useRef } from 'react';</span></span></span>
1497
+ import { ReactFlowProvider } from '@xyflow/react';
1498
+ import { Menu, PanelRight, PanelLeft, X, Wrench } from 'lucide-react';
1499
+ import { Canvas } from './components/Canvas/Canvas';
1500
+ import { Toolbar } from './components/Canvas/Toolbar';
1501
+ import { ExecutionOverlay } from './components/Canvas/ExecutionOverlay';
1502
+ import { ExecutionInputDialog } from './components/Canvas/ExecutionInputDialog';
1503
+ import { ValidationPanel } from './components/Panels/ValidationPanel';
1504
+ import { Sidebar } from './components/Sidebar/Sidebar';
1505
+ import { PropertiesPanel } from './components/Panels/PropertiesPanel';
1506
+ import { PromptInput } from './components/Prompt/PromptInput';
1507
+ import { ChangePreview } from './components/Prompt/ChangePreview';
1508
+ import { NewStepWizard } from './components/Editor/NewStepWizard';
1509
+ import {
1510
+ KeyboardShortcuts,
1511
+ KeyboardShortcutsButton,
1512
+ useKeyboardShortcuts,
1513
+ } from './components/common/KeyboardShortcuts';
1514
+ import { ThemeToggle } from './components/common/ThemeToggle';
1515
+ import { Breadcrumb, type BreadcrumbItem } from './components/common/Breadcrumb';
1516
+ import { CommandPalette } from './components/CommandPalette/CommandPalette';
1517
+ import { OnboardingTour } from './components/Onboarding/OnboardingTour';
1518
+ import { SkipNav } from './components/Accessibility/SkipNav';
1519
+ import { LiveRegion } from './components/Accessibility/LiveRegion';
1520
+ import { useWorkflow } from './hooks/useWorkflow';
1521
+ import { useWebSocket } from './hooks/useWebSocket';
1522
+ import { usePromptStore } from './stores/promptStore';
1523
+ import { useEditorStore } from './stores/editorStore';
1524
+ import { useNavigationStore } from './stores/navigationStore';
1525
+ import { useWorkflowStore } from './stores/workflowStore';
1526
+ import { useExecutionStore } from './stores/executionStore';
1527
+ import { useLayoutStore, getBreakpoint } from './stores/layoutStore';
1528
+ import { useCommandStore, type Command } from './stores/commandStore';
1529
+ import { useThemeStore } from './stores/themeStore';
1530
+ import { useOnboardingStore } from './stores/onboardingStore';
1531
+ import { useSettingsStore } from './stores/settingsStore';
1532
+ import type { WorkflowStep, StepStatus, WorkflowStatus } from '@shared/types';
1533
+ &nbsp;
1534
+ <span class="cstat-no" title="statement not covered" >export default function App() {</span>
1535
+ // Workflow management
1536
+ <span class="cstat-no" title="statement not covered" > const {</span>
1537
+ <span class="cstat-no" title="statement not covered" > currentWorkflow,</span>
1538
+ <span class="cstat-no" title="statement not covered" > selectedWorkflow,</span>
1539
+ <span class="cstat-no" title="statement not covered" > saveWorkflow,</span>
1540
+ <span class="cstat-no" title="statement not covered" > refreshWorkflows,</span>
1541
+ <span class="cstat-no" title="statement not covered" > } = useWorkflow();</span>
1542
+ &nbsp;
1543
+ // Editor state
1544
+ <span class="cstat-no" title="statement not covered" > const {</span>
1545
+ <span class="cstat-no" title="statement not covered" > isNewStepOpen,</span>
1546
+ <span class="cstat-no" title="statement not covered" > newStepPosition,</span>
1547
+ <span class="cstat-no" title="statement not covered" > openNewStepWizard,</span>
1548
+ <span class="cstat-no" title="statement not covered" > closeNewStepWizard,</span>
1549
+ <span class="cstat-no" title="statement not covered" > } = useEditorStore();</span>
1550
+ &nbsp;
1551
+ // Prompt state
1552
+ <span class="cstat-no" title="statement not covered" > const { pendingChanges, acceptChanges, rejectChanges } = usePromptStore();</span>
1553
+ &nbsp;
1554
+ // Keyboard shortcuts
1555
+ <span class="cstat-no" title="statement not covered" > const { isOpen: isShortcutsOpen, setIsOpen: setShortcutsOpen, openShortcuts } = useKeyboardShortcuts();</span>
1556
+ &nbsp;
1557
+ // Navigation for sub-workflow drilling
1558
+ <span class="cstat-no" title="statement not covered" > const { breadcrumbs, popToIndex, resetNavigation } = useNavigationStore();</span>
1559
+ <span class="cstat-no" title="statement not covered" > const { loadWorkflow } = useWorkflowStore();</span>
1560
+ &nbsp;
1561
+ // Handle breadcrumb navigation
1562
+ <span class="cstat-no" title="statement not covered" > const handleBreadcrumbNavigate = useCallback((item: BreadcrumbItem, index: number) =&gt; {</span>
1563
+ // Navigate to the clicked breadcrumb
1564
+ <span class="cstat-no" title="statement not covered" > popToIndex(index);</span>
1565
+ <span class="cstat-no" title="statement not covered" > loadWorkflow(item.path || '');</span>
1566
+ <span class="cstat-no" title="statement not covered" > }, [popToIndex, loadWorkflow]);</span>
1567
+ &nbsp;
1568
+ // WebSocket for real-time updates
1569
+ <span class="cstat-no" title="statement not covered" > const { connected, subscribeToExecution, unsubscribeFromExecution } = useWebSocket({</span>
1570
+ <span class="cstat-no" title="statement not covered" > onWorkflowUpdated: () =&gt; {</span>
1571
+ <span class="cstat-no" title="statement not covered" > refreshWorkflows();</span>
1572
+ <span class="cstat-no" title="statement not covered" > },</span>
1573
+ <span class="cstat-no" title="statement not covered" > onExecutionStep: (event) =&gt; {</span>
1574
+ // Update execution state from WebSocket events
1575
+ <span class="cstat-no" title="statement not covered" > setCurrentStepId(event.stepId);</span>
1576
+ <span class="cstat-no" title="statement not covered" > setExecutionSteps((prev) =&gt;</span>
1577
+ <span class="cstat-no" title="statement not covered" > prev.map((s) =&gt;</span>
1578
+ <span class="cstat-no" title="statement not covered" > s.stepId === event.stepId</span>
1579
+ <span class="cstat-no" title="statement not covered" > ? { ...s, status: event.status, duration: event.duration, error: event.error }</span>
1580
+ <span class="cstat-no" title="statement not covered" > : s</span>
1581
+ <span class="cstat-no" title="statement not covered" > )</span>
1582
+ <span class="cstat-no" title="statement not covered" > );</span>
1583
+ <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [</span>
1584
+ <span class="cstat-no" title="statement not covered" > ...prev,</span>
1585
+ <span class="cstat-no" title="statement not covered" > `Step "${event.stepName || event.stepId}": ${event.status}${event.error ? ` - ${event.error}` : ''}`,</span>
1586
+ <span class="cstat-no" title="statement not covered" > ]);</span>
1587
+ &nbsp;
1588
+ // Update execution store
1589
+ <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1590
+ <span class="cstat-no" title="statement not covered" > updateStepStatus(runIdRef.current, event.stepId, event.status, event.output, event.error);</span>
1591
+ <span class="cstat-no" title="statement not covered" > addLog(runIdRef.current, `Step "${event.stepName || event.stepId}": ${event.status}`);</span>
1592
+ <span class="cstat-no" title="statement not covered" > }</span>
1593
+ <span class="cstat-no" title="statement not covered" > },</span>
1594
+ <span class="cstat-no" title="statement not covered" > onExecutionCompleted: (event) =&gt; {</span>
1595
+ <span class="cstat-no" title="statement not covered" > setWorkflowStatus(event.status);</span>
1596
+ <span class="cstat-no" title="statement not covered" > setCurrentStepId(null);</span>
1597
+ <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [</span>
1598
+ <span class="cstat-no" title="statement not covered" > ...prev,</span>
1599
+ <span class="cstat-no" title="statement not covered" > event.status === 'completed'</span>
1600
+ <span class="cstat-no" title="statement not covered" > ? 'Workflow completed successfully!'</span>
1601
+ <span class="cstat-no" title="statement not covered" > : event.error || 'Workflow execution failed',</span>
1602
+ <span class="cstat-no" title="statement not covered" > ]);</span>
1603
+ &nbsp;
1604
+ // Update execution store
1605
+ <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1606
+ <span class="cstat-no" title="statement not covered" > completeExecution(runIdRef.current, event.status);</span>
1607
+ <span class="cstat-no" title="statement not covered" > if (event.error) {</span>
1608
+ <span class="cstat-no" title="statement not covered" > addLog(runIdRef.current, `Error: ${event.error}`);</span>
1609
+ <span class="cstat-no" title="statement not covered" > }</span>
1610
+ <span class="cstat-no" title="statement not covered" > }</span>
1611
+ &nbsp;
1612
+ // Unsubscribe from WebSocket
1613
+ <span class="cstat-no" title="statement not covered" > if (event.runId) {</span>
1614
+ <span class="cstat-no" title="statement not covered" > unsubscribeFromExecution(event.runId);</span>
1615
+ <span class="cstat-no" title="statement not covered" > }</span>
1616
+ <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
1617
+ <span class="cstat-no" title="statement not covered" > },</span>
1618
+ <span class="cstat-no" title="statement not covered" > });</span>
1619
+ &nbsp;
1620
+ // Execution store
1621
+ <span class="cstat-no" title="statement not covered" > const {</span>
1622
+ <span class="cstat-no" title="statement not covered" > isExecuting,</span>
1623
+ <span class="cstat-no" title="statement not covered" > isPaused,</span>
1624
+ <span class="cstat-no" title="statement not covered" > currentRunId,</span>
1625
+ <span class="cstat-no" title="statement not covered" > runs,</span>
1626
+ <span class="cstat-no" title="statement not covered" > startExecution,</span>
1627
+ <span class="cstat-no" title="statement not covered" > updateStepStatus,</span>
1628
+ <span class="cstat-no" title="statement not covered" > completeExecution,</span>
1629
+ <span class="cstat-no" title="statement not covered" > addLog,</span>
1630
+ <span class="cstat-no" title="statement not covered" > pauseExecution,</span>
1631
+ <span class="cstat-no" title="statement not covered" > resumeExecution,</span>
1632
+ <span class="cstat-no" title="statement not covered" > cancelExecution,</span>
1633
+ // Debug methods
1634
+ <span class="cstat-no" title="statement not covered" > debug,</span>
1635
+ <span class="cstat-no" title="statement not covered" > enableDebugMode,</span>
1636
+ <span class="cstat-no" title="statement not covered" > disableDebugMode,</span>
1637
+ <span class="cstat-no" title="statement not covered" > toggleBreakpoint,</span>
1638
+ <span class="cstat-no" title="statement not covered" > clearAllBreakpoints,</span>
1639
+ <span class="cstat-no" title="statement not covered" > stepOver,</span>
1640
+ <span class="cstat-no" title="statement not covered" > stepInto,</span>
1641
+ <span class="cstat-no" title="statement not covered" > stepOut,</span>
1642
+ <span class="cstat-no" title="statement not covered" > addWatchExpression,</span>
1643
+ <span class="cstat-no" title="statement not covered" > removeWatchExpression,</span>
1644
+ <span class="cstat-no" title="statement not covered" > } = useExecutionStore();</span>
1645
+ &nbsp;
1646
+ // Layout store for responsive behavior
1647
+ <span class="cstat-no" title="statement not covered" > const {</span>
1648
+ <span class="cstat-no" title="statement not covered" > breakpoint,</span>
1649
+ <span class="cstat-no" title="statement not covered" > setBreakpoint,</span>
1650
+ <span class="cstat-no" title="statement not covered" > sidebarOpen,</span>
1651
+ <span class="cstat-no" title="statement not covered" > setSidebarOpen,</span>
1652
+ <span class="cstat-no" title="statement not covered" > propertiesPanelOpen,</span>
1653
+ <span class="cstat-no" title="statement not covered" > setPropertiesPanelOpen,</span>
1654
+ <span class="cstat-no" title="statement not covered" > toolbarVisible,</span>
1655
+ <span class="cstat-no" title="statement not covered" > setToolbarVisible,</span>
1656
+ <span class="cstat-no" title="statement not covered" > } = useLayoutStore();</span>
1657
+ &nbsp;
1658
+ // Command palette
1659
+ <span class="cstat-no" title="statement not covered" > const { open: openCommandPalette, registerCommands } = useCommandStore();</span>
1660
+ <span class="cstat-no" title="statement not covered" > const { toggleTheme } = useThemeStore();</span>
1661
+ <span class="cstat-no" title="statement not covered" > const { openSettings } = useSettingsStore();</span>
1662
+ &nbsp;
1663
+ // Load settings on mount
1664
+ <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1665
+ <span class="cstat-no" title="statement not covered" > useSettingsStore.getState().loadSettings();</span>
1666
+ <span class="cstat-no" title="statement not covered" > }, []);</span>
1667
+ <span class="cstat-no" title="statement not covered" > const { workflows } = useWorkflowStore();</span>
1668
+ &nbsp;
1669
+ // Status message for accessibility live region
1670
+ <span class="cstat-no" title="statement not covered" > const [liveMessage, setLiveMessage] = useState('');</span>
1671
+ &nbsp;
1672
+ // Register commands on mount and when dependencies change
1673
+ <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1674
+ <span class="cstat-no" title="statement not covered" > const commands: Command[] = [</span>
1675
+ // Actions
1676
+ <span class="cstat-no" title="statement not covered" > { id: 'save', label: 'Save Workflow', category: 'action', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + S`, execute: () =&gt; handleSave(), keywords: ['save', 'persist'] },</span>
1677
+ <span class="cstat-no" title="statement not covered" > { id: 'execute', label: 'Execute Workflow', category: 'action', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + Enter`, execute: () =&gt; handleExecute(), keywords: ['run', 'start'] },</span>
1678
+ <span class="cstat-no" title="statement not covered" > { id: 'validate', label: 'Validate Workflow', category: 'action', execute: () =&gt; handleValidate(), keywords: ['check', 'lint'] },</span>
1679
+ <span class="cstat-no" title="statement not covered" > { id: 'add-step', label: 'Add New Step', category: 'action', shortcut: 'N', execute: () =&gt; handleAddStep(), keywords: ['create', 'new'] },</span>
1680
+ // Settings
1681
+ <span class="cstat-no" title="statement not covered" > { id: 'open-settings', label: 'Open Settings', category: 'setting', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + ,`, execute: () =&gt; openSettings(), keywords: ['preferences', 'config'] },</span>
1682
+ <span class="cstat-no" title="statement not covered" > { id: 'toggle-theme', label: 'Toggle Theme', category: 'setting', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + Shift + T`, execute: () =&gt; toggleTheme(), keywords: ['dark', 'light', 'mode'] },</span>
1683
+ <span class="cstat-no" title="statement not covered" > { id: 'show-shortcuts', label: 'Show Keyboard Shortcuts', category: 'setting', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + /`, execute: () =&gt; setShortcutsOpen(true), keywords: ['keys', 'hotkeys'] },</span>
1684
+ <span class="cstat-no" title="statement not covered" > { id: 'toggle-sidebar', label: 'Toggle Sidebar', category: 'setting', execute: () =&gt; setSidebarOpen(!sidebarOpen), keywords: ['panel', 'left'] },</span>
1685
+ <span class="cstat-no" title="statement not covered" > { id: 'toggle-properties', label: 'Toggle Properties Panel', category: 'setting', execute: () =&gt; setPropertiesPanelOpen(!propertiesPanelOpen), keywords: ['panel', 'right'] },</span>
1686
+ // Navigation
1687
+ <span class="cstat-no" title="statement not covered" > { id: 'nav-back', label: 'Navigate Back', category: 'navigation', execute: () =&gt; handleNavigateBack(), keywords: ['parent', 'up'] },</span>
1688
+ <span class="cstat-no" title="statement not covered" > { id: 'nav-root', label: 'Navigate to Root', category: 'navigation', execute: () =&gt; handleNavigateToRoot(), keywords: ['home', 'top'] },</span>
1689
+ // Debug
1690
+ <span class="cstat-no" title="statement not covered" > { id: 'toggle-debug', label: 'Toggle Debug Mode', category: 'action', shortcut: 'F9', execute: () =&gt; debug.enabled ? disableDebugMode() : enableDebugMode(), keywords: ['breakpoint', 'inspect'] },</span>
1691
+ // Workflows
1692
+ <span class="cstat-no" title="statement not covered" > ...workflows.map((w) =&gt; ({</span>
1693
+ <span class="cstat-no" title="statement not covered" > id: `workflow-${w.path}`,</span>
1694
+ <span class="cstat-no" title="statement not covered" > label: w.name,</span>
1695
+ <span class="cstat-no" title="statement not covered" > description: w.path,</span>
1696
+ <span class="cstat-no" title="statement not covered" > category: 'workflow' as const,</span>
1697
+ <span class="cstat-no" title="statement not covered" > execute: () =&gt; { useWorkflowStore.getState().selectWorkflow(w.path); },</span>
1698
+ <span class="cstat-no" title="statement not covered" > keywords: [w.name.toLowerCase()],</span>
1699
+ <span class="cstat-no" title="statement not covered" > })),</span>
1700
+ <span class="cstat-no" title="statement not covered" > ];</span>
1701
+ <span class="cstat-no" title="statement not covered" > registerCommands(commands);</span>
1702
+ <span class="cstat-no" title="statement not covered" > }, [workflows, sidebarOpen, propertiesPanelOpen, breakpoint, debug.enabled]);</span>
1703
+ &nbsp;
1704
+ // Breakpoint detection on resize
1705
+ <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1706
+ <span class="cstat-no" title="statement not covered" > const handleResize = () =&gt; {</span>
1707
+ <span class="cstat-no" title="statement not covered" > const newBreakpoint = getBreakpoint(window.innerWidth);</span>
1708
+ <span class="cstat-no" title="statement not covered" > if (newBreakpoint !== breakpoint) {</span>
1709
+ <span class="cstat-no" title="statement not covered" > setBreakpoint(newBreakpoint);</span>
1710
+ <span class="cstat-no" title="statement not covered" > }</span>
1711
+ <span class="cstat-no" title="statement not covered" > };</span>
1712
+ &nbsp;
1713
+ // Set initial breakpoint
1714
+ <span class="cstat-no" title="statement not covered" > handleResize();</span>
1715
+ &nbsp;
1716
+ <span class="cstat-no" title="statement not covered" > window.addEventListener('resize', handleResize);</span>
1717
+ <span class="cstat-no" title="statement not covered" > return () =&gt; window.removeEventListener('resize', handleResize);</span>
1718
+ <span class="cstat-no" title="statement not covered" > }, [breakpoint, setBreakpoint]);</span>
1719
+ &nbsp;
1720
+ // Local execution state for overlay
1721
+ <span class="cstat-no" title="statement not covered" > const [workflowStatus, setWorkflowStatus] = useState&lt;WorkflowStatus&gt;('pending');</span>
1722
+ <span class="cstat-no" title="statement not covered" > const [executionSteps, setExecutionSteps] = useState&lt;Array&lt;{</span>
1723
+ stepId: string;
1724
+ stepName: string;
1725
+ status: StepStatus;
1726
+ duration?: number;
1727
+ error?: string;
1728
+ <span class="cstat-no" title="statement not covered" > }&gt;&gt;([]);</span>
1729
+ <span class="cstat-no" title="statement not covered" > const [executionLogs, setExecutionLogs] = useState&lt;string[]&gt;([]);</span>
1730
+ <span class="cstat-no" title="statement not covered" > const [currentStepId, setCurrentStepId] = useState&lt;string | null&gt;(null);</span>
1731
+ <span class="cstat-no" title="statement not covered" > const runIdRef = useRef&lt;string | null&gt;(null);</span>
1732
+ &nbsp;
1733
+ // Input collection dialog state
1734
+ <span class="cstat-no" title="statement not covered" > const [showInputDialog, setShowInputDialog] = useState(false);</span>
1735
+ <span class="cstat-no" title="statement not covered" > const [pendingInputs, setPendingInputs] = useState&lt;Record&lt;string, any&gt;&gt;({});</span>
1736
+ &nbsp;
1737
+ // Validation panel state
1738
+ <span class="cstat-no" title="statement not covered" > const [showValidationPanel, setShowValidationPanel] = useState(false);</span>
1739
+ &nbsp;
1740
+ // Handle adding a new step
1741
+ <span class="cstat-no" title="statement not covered" > const handleAddStep = useCallback(() =&gt; {</span>
1742
+ <span class="cstat-no" title="statement not covered" > openNewStepWizard();</span>
1743
+ <span class="cstat-no" title="statement not covered" > }, [openNewStepWizard]);</span>
1744
+ &nbsp;
1745
+ // Handle step creation
1746
+ <span class="cstat-no" title="statement not covered" > const handleCreateStep = useCallback(</span>
1747
+ <span class="cstat-no" title="statement not covered" > (step: WorkflowStep) =&gt; {</span>
1748
+ <span class="cstat-no" title="statement not covered" > if (!currentWorkflow) return;</span>
1749
+ &nbsp;
1750
+ // Add step to workflow
1751
+ <span class="cstat-no" title="statement not covered" > const updatedWorkflow = {</span>
1752
+ <span class="cstat-no" title="statement not covered" > ...currentWorkflow,</span>
1753
+ <span class="cstat-no" title="statement not covered" > steps: [...currentWorkflow.steps, step],</span>
1754
+ <span class="cstat-no" title="statement not covered" > };</span>
1755
+ &nbsp;
1756
+ <span class="cstat-no" title="statement not covered" > saveWorkflow(updatedWorkflow);</span>
1757
+ <span class="cstat-no" title="statement not covered" > console.log('Created step:', step);</span>
1758
+ <span class="cstat-no" title="statement not covered" > },</span>
1759
+ <span class="cstat-no" title="statement not covered" > [currentWorkflow, saveWorkflow]</span>
1760
+ <span class="cstat-no" title="statement not covered" > );</span>
1761
+ &nbsp;
1762
+ // Handle workflow execution with input collection
1763
+ <span class="cstat-no" title="statement not covered" > const handleExecute = useCallback(async (inputs?: Record&lt;string, any&gt;) =&gt; {</span>
1764
+ <span class="cstat-no" title="statement not covered" > if (isExecuting) {</span>
1765
+ // Stop execution via API
1766
+ <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1767
+ <span class="cstat-no" title="statement not covered" > try {</span>
1768
+ <span class="cstat-no" title="statement not covered" > const response = await fetch(`/api/execute/cancel/${runIdRef.current}`, {</span>
1769
+ <span class="cstat-no" title="statement not covered" > method: 'POST',</span>
1770
+ <span class="cstat-no" title="statement not covered" > });</span>
1771
+ <span class="cstat-no" title="statement not covered" > if (response.ok) {</span>
1772
+ <span class="cstat-no" title="statement not covered" > cancelExecution(runIdRef.current);</span>
1773
+ <span class="cstat-no" title="statement not covered" > setWorkflowStatus('cancelled');</span>
1774
+ <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, 'Execution cancelled by user']);</span>
1775
+ <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
1776
+ <span class="cstat-no" title="statement not covered" > }</span>
1777
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1778
+ <span class="cstat-no" title="statement not covered" > console.error('Failed to cancel execution:', error);</span>
1779
+ <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, 'Failed to cancel execution']);</span>
1780
+ <span class="cstat-no" title="statement not covered" > }</span>
1781
+ <span class="cstat-no" title="statement not covered" > }</span>
1782
+ <span class="cstat-no" title="statement not covered" > return;</span>
1783
+ <span class="cstat-no" title="statement not covered" > }</span>
1784
+ &nbsp;
1785
+ <span class="cstat-no" title="statement not covered" > if (!currentWorkflow || !selectedWorkflow) return;</span>
1786
+ &nbsp;
1787
+ // If inputs are not provided and workflow has inputs, show dialog
1788
+ <span class="cstat-no" title="statement not covered" > if (!inputs &amp;&amp; currentWorkflow.inputs &amp;&amp; Object.keys(currentWorkflow.inputs).length &gt; 0) {</span>
1789
+ <span class="cstat-no" title="statement not covered" > setShowInputDialog(true);</span>
1790
+ <span class="cstat-no" title="statement not covered" > return;</span>
1791
+ <span class="cstat-no" title="statement not covered" > }</span>
1792
+ &nbsp;
1793
+ <span class="cstat-no" title="statement not covered" > try {</span>
1794
+ // Update local state for overlay
1795
+ <span class="cstat-no" title="statement not covered" > setWorkflowStatus('running');</span>
1796
+ <span class="cstat-no" title="statement not covered" > setCurrentStepId(null);</span>
1797
+ <span class="cstat-no" title="statement not covered" > setExecutionLogs(['Starting workflow execution...']);</span>
1798
+ &nbsp;
1799
+ // Initialize steps
1800
+ <span class="cstat-no" title="statement not covered" > setExecutionSteps(</span>
1801
+ <span class="cstat-no" title="statement not covered" > currentWorkflow.steps.map((step) =&gt; ({</span>
1802
+ <span class="cstat-no" title="statement not covered" > stepId: step.id,</span>
1803
+ <span class="cstat-no" title="statement not covered" > stepName: step.name || step.id,</span>
1804
+ <span class="cstat-no" title="statement not covered" > status: 'pending' as StepStatus,</span>
1805
+ <span class="cstat-no" title="statement not covered" > }))</span>
1806
+ <span class="cstat-no" title="statement not covered" > );</span>
1807
+ &nbsp;
1808
+ // Call API to start execution - this returns the actual runId
1809
+ <span class="cstat-no" title="statement not covered" > const response = await fetch(`/api/execute/${encodeURIComponent(selectedWorkflow)}`, {</span>
1810
+ <span class="cstat-no" title="statement not covered" > method: 'POST',</span>
1811
+ <span class="cstat-no" title="statement not covered" > headers: {</span>
1812
+ <span class="cstat-no" title="statement not covered" > 'Content-Type': 'application/json',</span>
1813
+ <span class="cstat-no" title="statement not covered" > },</span>
1814
+ <span class="cstat-no" title="statement not covered" > body: JSON.stringify({</span>
1815
+ <span class="cstat-no" title="statement not covered" > inputs: inputs || {},</span>
1816
+ <span class="cstat-no" title="statement not covered" > dryRun: false,</span>
1817
+ <span class="cstat-no" title="statement not covered" > }),</span>
1818
+ <span class="cstat-no" title="statement not covered" > });</span>
1819
+ &nbsp;
1820
+ <span class="cstat-no" title="statement not covered" > if (!response.ok) {</span>
1821
+ <span class="cstat-no" title="statement not covered" > const error = await response.json();</span>
1822
+ <span class="cstat-no" title="statement not covered" > throw new Error(error.message || 'Failed to start execution');</span>
1823
+ <span class="cstat-no" title="statement not covered" > }</span>
1824
+ &nbsp;
1825
+ // Get the actual runId from the backend response
1826
+ <span class="cstat-no" title="statement not covered" > const apiResult = await response.json();</span>
1827
+ <span class="cstat-no" title="statement not covered" > const runId = apiResult.runId;</span>
1828
+ &nbsp;
1829
+ // Store in history and subscribe to the correct runId
1830
+ <span class="cstat-no" title="statement not covered" > const workflowName = currentWorkflow.metadata?.name || 'Untitled Workflow';</span>
1831
+ <span class="cstat-no" title="statement not covered" > startExecution(selectedWorkflow, workflowName, {}, runId);</span>
1832
+ <span class="cstat-no" title="statement not covered" > runIdRef.current = runId;</span>
1833
+ &nbsp;
1834
+ // Subscribe to WebSocket for real-time updates with the correct runId
1835
+ <span class="cstat-no" title="statement not covered" > subscribeToExecution(runId);</span>
1836
+ &nbsp;
1837
+ <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, `Execution started: ${runId}`]);</span>
1838
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1839
+ <span class="cstat-no" title="statement not covered" > const errorMessage = error instanceof Error ? error.message : 'Unknown error';</span>
1840
+ <span class="cstat-no" title="statement not covered" > console.error('Failed to execute workflow:', error);</span>
1841
+ <span class="cstat-no" title="statement not covered" > setWorkflowStatus('failed');</span>
1842
+ <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, `Error: ${errorMessage}`]);</span>
1843
+ <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1844
+ <span class="cstat-no" title="statement not covered" > completeExecution(runIdRef.current, 'failed');</span>
1845
+ <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
1846
+ <span class="cstat-no" title="statement not covered" > }</span>
1847
+ <span class="cstat-no" title="statement not covered" > }</span>
1848
+ <span class="cstat-no" title="statement not covered" > }, [</span>
1849
+ <span class="cstat-no" title="statement not covered" > isExecuting,</span>
1850
+ <span class="cstat-no" title="statement not covered" > currentWorkflow,</span>
1851
+ <span class="cstat-no" title="statement not covered" > selectedWorkflow,</span>
1852
+ <span class="cstat-no" title="statement not covered" > startExecution,</span>
1853
+ <span class="cstat-no" title="statement not covered" > cancelExecution,</span>
1854
+ <span class="cstat-no" title="statement not covered" > subscribeToExecution,</span>
1855
+ <span class="cstat-no" title="statement not covered" > updateStepStatus,</span>
1856
+ <span class="cstat-no" title="statement not covered" > addLog,</span>
1857
+ <span class="cstat-no" title="statement not covered" > completeExecution,</span>
1858
+ <span class="cstat-no" title="statement not covered" > ]);</span>
1859
+ &nbsp;
1860
+ &nbsp;
1861
+ // Handle save
1862
+ <span class="cstat-no" title="statement not covered" > const handleSave = useCallback(() =&gt; {</span>
1863
+ <span class="cstat-no" title="statement not covered" > if (currentWorkflow) {</span>
1864
+ <span class="cstat-no" title="statement not covered" > saveWorkflow(currentWorkflow);</span>
1865
+ <span class="cstat-no" title="statement not covered" > }</span>
1866
+ <span class="cstat-no" title="statement not covered" > }, [currentWorkflow, saveWorkflow]);</span>
1867
+ &nbsp;
1868
+ // Handle validate
1869
+ <span class="cstat-no" title="statement not covered" > const handleValidate = useCallback(() =&gt; {</span>
1870
+ <span class="cstat-no" title="statement not covered" > if (selectedWorkflow) {</span>
1871
+ <span class="cstat-no" title="statement not covered" > setShowValidationPanel(true);</span>
1872
+ <span class="cstat-no" title="statement not covered" > }</span>
1873
+ <span class="cstat-no" title="statement not covered" > }, [selectedWorkflow]);</span>
1874
+ &nbsp;
1875
+ // Handle navigating back to parent workflow
1876
+ <span class="cstat-no" title="statement not covered" > const handleNavigateBack = useCallback(() =&gt; {</span>
1877
+ <span class="cstat-no" title="statement not covered" > if (breadcrumbs.length &gt; 1) {</span>
1878
+ <span class="cstat-no" title="statement not covered" > const parentIndex = breadcrumbs.length - 2;</span>
1879
+ <span class="cstat-no" title="statement not covered" > const parentItem = breadcrumbs[parentIndex];</span>
1880
+ <span class="cstat-no" title="statement not covered" > popToIndex(parentIndex);</span>
1881
+ <span class="cstat-no" title="statement not covered" > loadWorkflow(parentItem.path);</span>
1882
+ <span class="cstat-no" title="statement not covered" > }</span>
1883
+ <span class="cstat-no" title="statement not covered" > }, [breadcrumbs, popToIndex, loadWorkflow]);</span>
1884
+ &nbsp;
1885
+ // Handle navigating to root workflow
1886
+ <span class="cstat-no" title="statement not covered" > const handleNavigateToRoot = useCallback(() =&gt; {</span>
1887
+ <span class="cstat-no" title="statement not covered" > if (breadcrumbs.length &gt; 1) {</span>
1888
+ <span class="cstat-no" title="statement not covered" > const rootItem = breadcrumbs[0];</span>
1889
+ <span class="cstat-no" title="statement not covered" > popToIndex(0);</span>
1890
+ <span class="cstat-no" title="statement not covered" > loadWorkflow(rootItem.path);</span>
1891
+ <span class="cstat-no" title="statement not covered" > }</span>
1892
+ <span class="cstat-no" title="statement not covered" > }, [breadcrumbs, popToIndex, loadWorkflow]);</span>
1893
+ &nbsp;
1894
+ // Global keyboard shortcuts
1895
+ <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1896
+ <span class="cstat-no" title="statement not covered" > const handleKeyDown = (e: KeyboardEvent) =&gt; {</span>
1897
+ // Ignore if in an input/textarea
1898
+ <span class="cstat-no" title="statement not covered" > if (</span>
1899
+ <span class="cstat-no" title="statement not covered" > e.target instanceof HTMLInputElement ||</span>
1900
+ <span class="cstat-no" title="statement not covered" > e.target instanceof HTMLTextAreaElement</span>
1901
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1902
+ <span class="cstat-no" title="statement not covered" > return;</span>
1903
+ <span class="cstat-no" title="statement not covered" > }</span>
1904
+ &nbsp;
1905
+ <span class="cstat-no" title="statement not covered" > const isMeta = e.metaKey || e.ctrlKey;</span>
1906
+ &nbsp;
1907
+ // Cmd/Ctrl + ,: Open settings
1908
+ <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === ',') {</span>
1909
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1910
+ <span class="cstat-no" title="statement not covered" > openSettings();</span>
1911
+ <span class="cstat-no" title="statement not covered" > return;</span>
1912
+ <span class="cstat-no" title="statement not covered" > }</span>
1913
+ &nbsp;
1914
+ // Cmd/Ctrl + K: Command palette
1915
+ <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'k') {</span>
1916
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1917
+ <span class="cstat-no" title="statement not covered" > openCommandPalette('commands');</span>
1918
+ <span class="cstat-no" title="statement not covered" > return;</span>
1919
+ <span class="cstat-no" title="statement not covered" > }</span>
1920
+ &nbsp;
1921
+ // Cmd/Ctrl + P: Quick workflow switcher
1922
+ <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'p') {</span>
1923
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1924
+ <span class="cstat-no" title="statement not covered" > openCommandPalette('workflows');</span>
1925
+ <span class="cstat-no" title="statement not covered" > return;</span>
1926
+ <span class="cstat-no" title="statement not covered" > }</span>
1927
+ &nbsp;
1928
+ // Cmd/Ctrl + Shift + T: Toggle theme
1929
+ <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.shiftKey &amp;&amp; e.key === 't') {</span>
1930
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1931
+ <span class="cstat-no" title="statement not covered" > toggleTheme();</span>
1932
+ <span class="cstat-no" title="statement not covered" > return;</span>
1933
+ <span class="cstat-no" title="statement not covered" > }</span>
1934
+ &nbsp;
1935
+ // Cmd/Ctrl + S: Save
1936
+ <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 's') {</span>
1937
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1938
+ <span class="cstat-no" title="statement not covered" > handleSave();</span>
1939
+ <span class="cstat-no" title="statement not covered" > }</span>
1940
+ &nbsp;
1941
+ // Cmd/Ctrl + Enter: Execute
1942
+ <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'Enter') {</span>
1943
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1944
+ <span class="cstat-no" title="statement not covered" > handleExecute();</span>
1945
+ <span class="cstat-no" title="statement not covered" > }</span>
1946
+ &nbsp;
1947
+ // N: New step (when no modifier)
1948
+ <span class="cstat-no" title="statement not covered" > if (e.key === 'n' &amp;&amp; !isMeta &amp;&amp; !e.shiftKey &amp;&amp; !e.altKey) {</span>
1949
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1950
+ <span class="cstat-no" title="statement not covered" > handleAddStep();</span>
1951
+ <span class="cstat-no" title="statement not covered" > }</span>
1952
+ &nbsp;
1953
+ // Cmd/Ctrl + Left Arrow: Navigate back to parent workflow
1954
+ <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'ArrowLeft') {</span>
1955
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1956
+ <span class="cstat-no" title="statement not covered" > handleNavigateBack();</span>
1957
+ <span class="cstat-no" title="statement not covered" > }</span>
1958
+ &nbsp;
1959
+ // Cmd/Ctrl + Up Arrow: Navigate to root workflow
1960
+ <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'ArrowUp') {</span>
1961
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1962
+ <span class="cstat-no" title="statement not covered" > handleNavigateToRoot();</span>
1963
+ <span class="cstat-no" title="statement not covered" > }</span>
1964
+ &nbsp;
1965
+ // Debug keyboard shortcuts
1966
+ // F9: Toggle debug mode
1967
+ <span class="cstat-no" title="statement not covered" > if (e.key === 'F9') {</span>
1968
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1969
+ <span class="cstat-no" title="statement not covered" > if (debug.enabled) {</span>
1970
+ <span class="cstat-no" title="statement not covered" > disableDebugMode();</span>
1971
+ <span class="cstat-no" title="statement not covered" > } else {</span>
1972
+ <span class="cstat-no" title="statement not covered" > enableDebugMode();</span>
1973
+ <span class="cstat-no" title="statement not covered" > }</span>
1974
+ <span class="cstat-no" title="statement not covered" > }</span>
1975
+ &nbsp;
1976
+ // F10: Step over (when paused in debug mode)
1977
+ <span class="cstat-no" title="statement not covered" > if (e.key === 'F10' &amp;&amp; debug.enabled &amp;&amp; isPaused) {</span>
1978
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1979
+ <span class="cstat-no" title="statement not covered" > stepOver();</span>
1980
+ <span class="cstat-no" title="statement not covered" > }</span>
1981
+ &nbsp;
1982
+ // F11: Step into (when paused in debug mode)
1983
+ <span class="cstat-no" title="statement not covered" > if (e.key === 'F11' &amp;&amp; !e.shiftKey &amp;&amp; debug.enabled &amp;&amp; isPaused) {</span>
1984
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1985
+ <span class="cstat-no" title="statement not covered" > stepInto();</span>
1986
+ <span class="cstat-no" title="statement not covered" > }</span>
1987
+ &nbsp;
1988
+ // Shift+F11: Step out (when paused in debug mode)
1989
+ <span class="cstat-no" title="statement not covered" > if (e.key === 'F11' &amp;&amp; e.shiftKey &amp;&amp; debug.enabled &amp;&amp; isPaused) {</span>
1990
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1991
+ <span class="cstat-no" title="statement not covered" > stepOut();</span>
1992
+ <span class="cstat-no" title="statement not covered" > }</span>
1993
+ &nbsp;
1994
+ // F5: Continue execution (when paused)
1995
+ <span class="cstat-no" title="statement not covered" > if (e.key === 'F5' &amp;&amp; isPaused) {</span>
1996
+ <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1997
+ <span class="cstat-no" title="statement not covered" > resumeExecution();</span>
1998
+ <span class="cstat-no" title="statement not covered" > }</span>
1999
+ <span class="cstat-no" title="statement not covered" > };</span>
2000
+ &nbsp;
2001
+ <span class="cstat-no" title="statement not covered" > window.addEventListener('keydown', handleKeyDown);</span>
2002
+ <span class="cstat-no" title="statement not covered" > return () =&gt; window.removeEventListener('keydown', handleKeyDown);</span>
2003
+ <span class="cstat-no" title="statement not covered" > }, [handleSave, handleExecute, handleAddStep, handleNavigateBack, handleNavigateToRoot, debug.enabled, isPaused, enableDebugMode, disableDebugMode, stepOver, stepInto, stepOut, resumeExecution, openCommandPalette, toggleTheme, openSettings]);</span>
2004
+ &nbsp;
2005
+ <span class="cstat-no" title="statement not covered" > return (</span>
2006
+ <span class="cstat-no" title="statement not covered" > &lt;ReactFlowProvider&gt;</span>
2007
+ <span class="cstat-no" title="statement not covered" > &lt;SkipNav /&gt;</span>
2008
+ <span class="cstat-no" title="statement not covered" > &lt;LiveRegion message={liveMessage} /&gt;</span>
2009
+ <span class="cstat-no" title="statement not covered" > &lt;CommandPalette /&gt;</span>
2010
+ <span class="cstat-no" title="statement not covered" > &lt;OnboardingTour /&gt;</span>
2011
+ <span class="cstat-no" title="statement not covered" > &lt;div className="flex h-screen w-screen overflow-hidden bg-bg-canvas" id="main-content"&gt;</span>
2012
+ {/* Left Sidebar - Workflow List &amp; Tools */}
2013
+ <span class="cstat-no" title="statement not covered" > &lt;Sidebar /&gt;</span>
2014
+ &nbsp;
2015
+ {/* Main Canvas Area */}
2016
+ <span class="cstat-no" title="statement not covered" > &lt;div className="flex flex-1 flex-col relative"&gt;</span>
2017
+ {/* Mobile Header */}
2018
+ <span class="cstat-no" title="statement not covered" > {breakpoint === 'mobile' &amp;&amp; (</span>
2019
+ <span class="cstat-no" title="statement not covered" > &lt;div className="flex items-center justify-between p-3 border-b border-border-default bg-bg-panel"&gt;</span>
2020
+ <span class="cstat-no" title="statement not covered" > &lt;button</span>
2021
+ <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setSidebarOpen(true)}</span>
2022
+ <span class="cstat-no" title="statement not covered" > className="w-10 h-10 rounded-lg flex items-center justify-center hover:bg-bg-hover transition-colors"</span>
2023
+ <span class="cstat-no" title="statement not covered" > aria-label="Open menu"</span>
2024
+ &gt;
2025
+ <span class="cstat-no" title="statement not covered" > &lt;Menu className="w-5 h-5 text-text-secondary" /&gt;</span>
2026
+ <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2027
+ <span class="cstat-no" title="statement not covered" > &lt;h1 className="text-sm font-medium text-text-primary flex items-center gap-1.5"&gt;</span>
2028
+ <span class="cstat-no" title="statement not covered" > &lt;img src="/marktoflow-logo.png" alt="Marktoflow" className="w-6 h-6 rounded-full object-cover" /&gt;</span>
2029
+ Marktoflow
2030
+ <span class="cstat-no" title="statement not covered" > &lt;/h1&gt;</span>
2031
+ <span class="cstat-no" title="statement not covered" > &lt;button</span>
2032
+ <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setPropertiesPanelOpen(true)}</span>
2033
+ <span class="cstat-no" title="statement not covered" > className="w-10 h-10 rounded-lg flex items-center justify-center hover:bg-bg-hover transition-colors"</span>
2034
+ <span class="cstat-no" title="statement not covered" > aria-label="Open properties"</span>
2035
+ &gt;
2036
+ <span class="cstat-no" title="statement not covered" > &lt;PanelRight className="w-5 h-5 text-text-secondary" /&gt;</span>
2037
+ <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2038
+ <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2039
+ )}
2040
+ &nbsp;
2041
+ {/* Desktop: Connection status, theme toggle &amp; shortcuts */}
2042
+ <span class="cstat-no" title="statement not covered" > {breakpoint !== 'mobile' &amp;&amp; (</span>
2043
+ <span class="cstat-no" title="statement not covered" > &lt;div className="absolute top-4 right-4 z-10 flex items-center gap-2"&gt;</span>
2044
+ <span class="cstat-no" title="statement not covered" > &lt;ThemeToggle showLabel /&gt;</span>
2045
+ <span class="cstat-no" title="statement not covered" > &lt;KeyboardShortcutsButton onClick={openShortcuts} /&gt;</span>
2046
+ <span class="cstat-no" title="statement not covered" > &lt;div</span>
2047
+ <span class="cstat-no" title="statement not covered" > className={`flex items-center gap-2 px-3 py-1.5 rounded-full text-xs ${</span>
2048
+ <span class="cstat-no" title="statement not covered" > connected</span>
2049
+ <span class="cstat-no" title="statement not covered" > ? 'bg-success/10 text-success'</span>
2050
+ <span class="cstat-no" title="statement not covered" > : 'bg-error/10 text-error'</span>
2051
+ <span class="cstat-no" title="statement not covered" > }`}</span>
2052
+ &gt;
2053
+ <span class="cstat-no" title="statement not covered" > &lt;div</span>
2054
+ <span class="cstat-no" title="statement not covered" > className={`w-2 h-2 rounded-full ${</span>
2055
+ <span class="cstat-no" title="statement not covered" > connected ? 'bg-success' : 'bg-error'</span>
2056
+ <span class="cstat-no" title="statement not covered" > }`}</span>
2057
+ <span class="cstat-no" title="statement not covered" > /&gt;</span>
2058
+ <span class="cstat-no" title="statement not covered" > {connected ? 'Connected' : 'Disconnected'}</span>
2059
+ <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2060
+ <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2061
+ )}
2062
+ &nbsp;
2063
+ {/* Toolbar */}
2064
+ <span class="cstat-no" title="statement not covered" > &lt;Toolbar</span>
2065
+ <span class="cstat-no" title="statement not covered" > onAddStep={handleAddStep}</span>
2066
+ <span class="cstat-no" title="statement not covered" > onExecute={handleExecute}</span>
2067
+ <span class="cstat-no" title="statement not covered" > onSave={handleSave}</span>
2068
+ <span class="cstat-no" title="statement not covered" > onValidate={handleValidate}</span>
2069
+ <span class="cstat-no" title="statement not covered" > isExecuting={isExecuting}</span>
2070
+ <span class="cstat-no" title="statement not covered" > /&gt;</span>
2071
+ &nbsp;
2072
+ {/* Breadcrumb for sub-workflow navigation */}
2073
+ <span class="cstat-no" title="statement not covered" > &lt;Breadcrumb</span>
2074
+ <span class="cstat-no" title="statement not covered" > items={breadcrumbs}</span>
2075
+ <span class="cstat-no" title="statement not covered" > onNavigate={handleBreadcrumbNavigate}</span>
2076
+ <span class="cstat-no" title="statement not covered" > /&gt;</span>
2077
+ &nbsp;
2078
+ {/* Canvas */}
2079
+ <span class="cstat-no" title="statement not covered" > &lt;div className="flex-1 relative"&gt;</span>
2080
+ <span class="cstat-no" title="statement not covered" > &lt;Canvas /&gt;</span>
2081
+ &nbsp;
2082
+ {/* Show Toolbar button (when hidden) */}
2083
+ <span class="cstat-no" title="statement not covered" > {!toolbarVisible &amp;&amp; breakpoint !== 'mobile' &amp;&amp; (</span>
2084
+ <span class="cstat-no" title="statement not covered" > &lt;button</span>
2085
+ <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setToolbarVisible(true)}</span>
2086
+ <span class="cstat-no" title="statement not covered" > className="absolute top-4 left-1/2 -translate-x-1/2 z-10 p-2 bg-bg-panel/90 backdrop-blur border border-border-default rounded-lg shadow-md hover:bg-bg-hover transition-colors text-text-muted hover:text-text-primary"</span>
2087
+ <span class="cstat-no" title="statement not covered" > title="Show toolbar"</span>
2088
+ &gt;
2089
+ <span class="cstat-no" title="statement not covered" > &lt;Wrench className="w-4 h-4" /&gt;</span>
2090
+ <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2091
+ )}
2092
+ &nbsp;
2093
+ {/* Left edge: toggle sidebar */}
2094
+ <span class="cstat-no" title="statement not covered" > {breakpoint !== 'mobile' &amp;&amp; (</span>
2095
+ <span class="cstat-no" title="statement not covered" > &lt;button</span>
2096
+ <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setSidebarOpen(!sidebarOpen)}</span>
2097
+ <span class="cstat-no" title="statement not covered" > className="absolute left-0 top-1/2 -translate-y-1/2 z-10 p-1.5 bg-bg-panel/90 backdrop-blur border border-l-0 border-border-default rounded-r-lg shadow-sm hover:bg-bg-hover transition-colors text-text-muted hover:text-text-primary"</span>
2098
+ <span class="cstat-no" title="statement not covered" > title={sidebarOpen ? 'Collapse sidebar' : 'Expand sidebar'}</span>
2099
+ <span class="cstat-no" title="statement not covered" > aria-label={sidebarOpen ? 'Collapse sidebar' : 'Expand sidebar'}</span>
2100
+ &gt;
2101
+ <span class="cstat-no" title="statement not covered" > &lt;PanelLeft className="w-4 h-4" /&gt;</span>
2102
+ <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2103
+ )}
2104
+ &nbsp;
2105
+ {/* Right edge: toggle properties panel */}
2106
+ <span class="cstat-no" title="statement not covered" > {breakpoint !== 'mobile' &amp;&amp; (</span>
2107
+ <span class="cstat-no" title="statement not covered" > &lt;button</span>
2108
+ <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setPropertiesPanelOpen(!propertiesPanelOpen)}</span>
2109
+ <span class="cstat-no" title="statement not covered" > className="absolute right-0 top-1/2 -translate-y-1/2 z-10 p-1.5 bg-bg-panel/90 backdrop-blur border border-r-0 border-border-default rounded-l-lg shadow-sm hover:bg-bg-hover transition-colors text-text-muted hover:text-text-primary"</span>
2110
+ <span class="cstat-no" title="statement not covered" > title={propertiesPanelOpen ? 'Collapse properties' : 'Expand properties'}</span>
2111
+ <span class="cstat-no" title="statement not covered" > aria-label={propertiesPanelOpen ? 'Collapse properties' : 'Expand properties'}</span>
2112
+ &gt;
2113
+ <span class="cstat-no" title="statement not covered" > &lt;PanelRight className="w-4 h-4" /&gt;</span>
2114
+ <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2115
+ )}
2116
+ &nbsp;
2117
+ {/* Execution Overlay */}
2118
+ <span class="cstat-no" title="statement not covered" > &lt;ExecutionOverlay</span>
2119
+ <span class="cstat-no" title="statement not covered" > isExecuting={isExecuting}</span>
2120
+ <span class="cstat-no" title="statement not covered" > isPaused={isPaused}</span>
2121
+ <span class="cstat-no" title="statement not covered" > workflowStatus={workflowStatus}</span>
2122
+ <span class="cstat-no" title="statement not covered" > currentStepId={currentStepId}</span>
2123
+ <span class="cstat-no" title="statement not covered" > steps={executionSteps}</span>
2124
+ <span class="cstat-no" title="statement not covered" > logs={executionLogs}</span>
2125
+ <span class="cstat-no" title="statement not covered" > onPause={() =&gt; pauseExecution()}</span>
2126
+ <span class="cstat-no" title="statement not covered" > onResume={() =&gt; resumeExecution()}</span>
2127
+ <span class="cstat-no" title="statement not covered" > onStop={() =&gt; {</span>
2128
+ <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
2129
+ <span class="cstat-no" title="statement not covered" > cancelExecution(runIdRef.current);</span>
2130
+ <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
2131
+ <span class="cstat-no" title="statement not covered" > }</span>
2132
+ <span class="cstat-no" title="statement not covered" > setWorkflowStatus('cancelled');</span>
2133
+ <span class="cstat-no" title="statement not covered" > }}</span>
2134
+ <span class="cstat-no" title="statement not covered" > onStepOver={() =&gt; stepOver()}</span>
2135
+ <span class="cstat-no" title="statement not covered" > onClose={() =&gt; {</span>
2136
+ <span class="cstat-no" title="statement not covered" > setWorkflowStatus('pending');</span>
2137
+ <span class="cstat-no" title="statement not covered" > setExecutionSteps([]);</span>
2138
+ <span class="cstat-no" title="statement not covered" > setExecutionLogs([]);</span>
2139
+ <span class="cstat-no" title="statement not covered" > }}</span>
2140
+ // Debug props
2141
+ <span class="cstat-no" title="statement not covered" > debug={debug}</span>
2142
+ <span class="cstat-no" title="statement not covered" > onToggleDebugMode={() =&gt; {</span>
2143
+ <span class="cstat-no" title="statement not covered" > if (debug.enabled) {</span>
2144
+ <span class="cstat-no" title="statement not covered" > disableDebugMode();</span>
2145
+ <span class="cstat-no" title="statement not covered" > } else {</span>
2146
+ <span class="cstat-no" title="statement not covered" > enableDebugMode();</span>
2147
+ <span class="cstat-no" title="statement not covered" > }</span>
2148
+ <span class="cstat-no" title="statement not covered" > }}</span>
2149
+ <span class="cstat-no" title="statement not covered" > onToggleBreakpoint={(stepId) =&gt; toggleBreakpoint(stepId)}</span>
2150
+ <span class="cstat-no" title="statement not covered" > onStepInto={() =&gt; stepInto()}</span>
2151
+ <span class="cstat-no" title="statement not covered" > onStepOut={() =&gt; stepOut()}</span>
2152
+ <span class="cstat-no" title="statement not covered" > onClearBreakpoints={() =&gt; clearAllBreakpoints()}</span>
2153
+ <span class="cstat-no" title="statement not covered" > onAddWatchExpression={(expr) =&gt; addWatchExpression(expr)}</span>
2154
+ <span class="cstat-no" title="statement not covered" > onRemoveWatchExpression={(expr) =&gt; removeWatchExpression(expr)}</span>
2155
+ <span class="cstat-no" title="statement not covered" > /&gt;</span>
2156
+ <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2157
+ &nbsp;
2158
+ {/* AI Prompt Input */}
2159
+ <span class="cstat-no" title="statement not covered" > &lt;PromptInput /&gt;</span>
2160
+ <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2161
+ &nbsp;
2162
+ {/* Right Panel - Properties */}
2163
+ <span class="cstat-no" title="statement not covered" > &lt;PropertiesPanel /&gt;</span>
2164
+ &nbsp;
2165
+ {/* New Step Wizard */}
2166
+ <span class="cstat-no" title="statement not covered" > &lt;NewStepWizard</span>
2167
+ <span class="cstat-no" title="statement not covered" > open={isNewStepOpen}</span>
2168
+ <span class="cstat-no" title="statement not covered" > onOpenChange={(open) =&gt; {</span>
2169
+ <span class="cstat-no" title="statement not covered" > if (!open) closeNewStepWizard();</span>
2170
+ <span class="cstat-no" title="statement not covered" > }}</span>
2171
+ <span class="cstat-no" title="statement not covered" > onCreateStep={handleCreateStep}</span>
2172
+ <span class="cstat-no" title="statement not covered" > position={newStepPosition || undefined}</span>
2173
+ <span class="cstat-no" title="statement not covered" > /&gt;</span>
2174
+ &nbsp;
2175
+ {/* Change Preview Modal */}
2176
+ <span class="cstat-no" title="statement not covered" > {pendingChanges &amp;&amp; (</span>
2177
+ <span class="cstat-no" title="statement not covered" > &lt;ChangePreview</span>
2178
+ <span class="cstat-no" title="statement not covered" > open={!!pendingChanges}</span>
2179
+ <span class="cstat-no" title="statement not covered" > onOpenChange={() =&gt; rejectChanges()}</span>
2180
+ <span class="cstat-no" title="statement not covered" > originalWorkflow={currentWorkflow}</span>
2181
+ <span class="cstat-no" title="statement not covered" > modifiedWorkflow={pendingChanges}</span>
2182
+ <span class="cstat-no" title="statement not covered" > explanation="AI has suggested the following changes to your workflow."</span>
2183
+ <span class="cstat-no" title="statement not covered" > onAccept={acceptChanges}</span>
2184
+ <span class="cstat-no" title="statement not covered" > onReject={rejectChanges}</span>
2185
+ <span class="cstat-no" title="statement not covered" > /&gt;</span>
2186
+ )}
2187
+ &nbsp;
2188
+ {/* Execution Input Dialog */}
2189
+ <span class="cstat-no" title="statement not covered" > {currentWorkflow?.inputs &amp;&amp; (</span>
2190
+ <span class="cstat-no" title="statement not covered" > &lt;ExecutionInputDialog</span>
2191
+ <span class="cstat-no" title="statement not covered" > open={showInputDialog}</span>
2192
+ <span class="cstat-no" title="statement not covered" > onOpenChange={setShowInputDialog}</span>
2193
+ <span class="cstat-no" title="statement not covered" > inputs={currentWorkflow.inputs}</span>
2194
+ <span class="cstat-no" title="statement not covered" > onExecute={handleExecute}</span>
2195
+ <span class="cstat-no" title="statement not covered" > workflowName={currentWorkflow.metadata?.name}</span>
2196
+ <span class="cstat-no" title="statement not covered" > /&gt;</span>
2197
+ )}
2198
+ &nbsp;
2199
+ {/* Validation Panel */}
2200
+ <span class="cstat-no" title="statement not covered" > &lt;ValidationPanel</span>
2201
+ <span class="cstat-no" title="statement not covered" > workflowPath={showValidationPanel ? selectedWorkflow : null}</span>
2202
+ <span class="cstat-no" title="statement not covered" > onClose={() =&gt; setShowValidationPanel(false)}</span>
2203
+ <span class="cstat-no" title="statement not covered" > /&gt;</span>
2204
+ &nbsp;
2205
+ {/* Keyboard Shortcuts Modal */}
2206
+ <span class="cstat-no" title="statement not covered" > &lt;KeyboardShortcuts open={isShortcutsOpen} onOpenChange={setShortcutsOpen} /&gt;</span>
2207
+ <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2208
+ <span class="cstat-no" title="statement not covered" > &lt;/ReactFlowProvider&gt;</span>
2209
+ );
2210
+ <span class="cstat-no" title="statement not covered" >}</span>
2211
+ &nbsp;</pre></td></tr></table></pre>
2212
+
2213
+ <div class='push'></div><!-- for sticky footer -->
2214
+ </div><!-- /wrapper -->
2215
+ <div class='footer quiet pad2 space-top1 center small'>
2216
+ Code coverage generated by
2217
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2218
+ at 2026-02-09T21:07:24.535Z
2219
+ </div>
2220
+ <script src="../prettify.js"></script>
2221
+ <script>
2222
+ window.onload = function () {
2223
+ prettyPrint();
2224
+ };
2225
+ </script>
2226
+ <script src="../sorter.js"></script>
2227
+ <script src="../block-navigation.js"></script>
2228
+ </body>
2229
+ </html>
2230
+