projax 3.3.57 ā 3.3.59
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.
- package/dist/electron/script-runner.js +52 -20
- package/dist/index.js +1 -1
- package/dist/prxi.js +846 -111
- package/dist/prxi.tsx +1236 -181
- package/dist/script-runner.js +52 -20
- package/package.json +1 -1
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/core-bridge.ts.html +0 -292
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -191
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/core-bridge.ts.html +0 -292
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -191
- package/coverage/lcov-report/port-extractor.ts.html +0 -1174
- package/coverage/lcov-report/port-scanner.ts.html +0 -301
- package/coverage/lcov-report/port-utils.ts.html +0 -670
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/script-runner.ts.html +0 -3346
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov-report/test-parser.ts.html +0 -799
- package/coverage/lcov.info +0 -1338
- package/coverage/port-extractor.ts.html +0 -1174
- package/coverage/port-scanner.ts.html +0 -301
- package/coverage/port-utils.ts.html +0 -670
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/script-runner.ts.html +0 -3346
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/coverage/test-parser.ts.html +0 -799
- package/dist/__tests__/core-bridge.test.d.ts +0 -1
- package/dist/__tests__/core-bridge.test.js +0 -135
- package/dist/__tests__/port-extractor.test.d.ts +0 -1
- package/dist/__tests__/port-extractor.test.js +0 -407
- package/dist/__tests__/port-scanner.test.d.ts +0 -1
- package/dist/__tests__/port-scanner.test.js +0 -170
- package/dist/__tests__/port-utils.test.d.ts +0 -1
- package/dist/__tests__/port-utils.test.js +0 -127
- package/dist/__tests__/script-runner.test.d.ts +0 -1
- package/dist/__tests__/script-runner.test.js +0 -491
- package/dist/__tests__/test-parser.test.d.ts +0 -1
- package/dist/__tests__/test-parser.test.js +0 -276
- package/dist/api/__tests__/database.test.d.ts +0 -2
- package/dist/api/__tests__/database.test.d.ts.map +0 -1
- package/dist/api/__tests__/database.test.js +0 -485
- package/dist/api/__tests__/database.test.js.map +0 -1
- package/dist/api/__tests__/routes.test.d.ts +0 -2
- package/dist/api/__tests__/routes.test.d.ts.map +0 -1
- package/dist/api/__tests__/routes.test.js +0 -484
- package/dist/api/__tests__/routes.test.js.map +0 -1
- package/dist/api/__tests__/scanner.test.d.ts +0 -2
- package/dist/api/__tests__/scanner.test.d.ts.map +0 -1
- package/dist/api/__tests__/scanner.test.js +0 -403
- package/dist/api/__tests__/scanner.test.js.map +0 -1
- package/dist/core/__tests__/database.test.d.ts +0 -1
- package/dist/core/__tests__/database.test.js +0 -557
- package/dist/core/__tests__/detector.test.d.ts +0 -1
- package/dist/core/__tests__/detector.test.js +0 -375
- package/dist/core/__tests__/index.test.d.ts +0 -1
- package/dist/core/__tests__/index.test.js +0 -469
- package/dist/core/__tests__/scanner.test.d.ts +0 -1
- package/dist/core/__tests__/scanner.test.js +0 -406
- package/dist/core/__tests__/settings.test.d.ts +0 -1
- package/dist/core/__tests__/settings.test.js +0 -280
- package/dist/electron/core/__tests__/database.test.d.ts +0 -1
- package/dist/electron/core/__tests__/database.test.js +0 -557
- package/dist/electron/core/__tests__/detector.test.d.ts +0 -1
- package/dist/electron/core/__tests__/detector.test.js +0 -375
- package/dist/electron/core/__tests__/index.test.d.ts +0 -1
- package/dist/electron/core/__tests__/index.test.js +0 -469
- package/dist/electron/core/__tests__/scanner.test.d.ts +0 -1
- package/dist/electron/core/__tests__/scanner.test.js +0 -406
- package/dist/electron/core/__tests__/settings.test.d.ts +0 -1
- package/dist/electron/core/__tests__/settings.test.js +0 -280
- package/jest.config.js +0 -26
|
@@ -1,3346 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for script-runner.ts</title>
|
|
7
|
-
<meta charset="utf-8" />
|
|
8
|
-
<link rel="stylesheet" href="prettify.css" />
|
|
9
|
-
<link rel="stylesheet" href="base.css" />
|
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
|
|
11
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
-
<style type='text/css'>
|
|
13
|
-
.coverage-summary .sorter {
|
|
14
|
-
background-image: url(sort-arrow-sprite.png);
|
|
15
|
-
}
|
|
16
|
-
</style>
|
|
17
|
-
</head>
|
|
18
|
-
|
|
19
|
-
<body>
|
|
20
|
-
<div class='wrapper'>
|
|
21
|
-
<div class='pad1'>
|
|
22
|
-
<h1><a href="index.html">All files</a> script-runner.ts</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">25% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>122/488</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">21.89% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>30/137</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">26% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>13/50</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">25.21% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>120/476</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>
|
|
782
|
-
<a name='L717'></a><a href='#L717'>717</a>
|
|
783
|
-
<a name='L718'></a><a href='#L718'>718</a>
|
|
784
|
-
<a name='L719'></a><a href='#L719'>719</a>
|
|
785
|
-
<a name='L720'></a><a href='#L720'>720</a>
|
|
786
|
-
<a name='L721'></a><a href='#L721'>721</a>
|
|
787
|
-
<a name='L722'></a><a href='#L722'>722</a>
|
|
788
|
-
<a name='L723'></a><a href='#L723'>723</a>
|
|
789
|
-
<a name='L724'></a><a href='#L724'>724</a>
|
|
790
|
-
<a name='L725'></a><a href='#L725'>725</a>
|
|
791
|
-
<a name='L726'></a><a href='#L726'>726</a>
|
|
792
|
-
<a name='L727'></a><a href='#L727'>727</a>
|
|
793
|
-
<a name='L728'></a><a href='#L728'>728</a>
|
|
794
|
-
<a name='L729'></a><a href='#L729'>729</a>
|
|
795
|
-
<a name='L730'></a><a href='#L730'>730</a>
|
|
796
|
-
<a name='L731'></a><a href='#L731'>731</a>
|
|
797
|
-
<a name='L732'></a><a href='#L732'>732</a>
|
|
798
|
-
<a name='L733'></a><a href='#L733'>733</a>
|
|
799
|
-
<a name='L734'></a><a href='#L734'>734</a>
|
|
800
|
-
<a name='L735'></a><a href='#L735'>735</a>
|
|
801
|
-
<a name='L736'></a><a href='#L736'>736</a>
|
|
802
|
-
<a name='L737'></a><a href='#L737'>737</a>
|
|
803
|
-
<a name='L738'></a><a href='#L738'>738</a>
|
|
804
|
-
<a name='L739'></a><a href='#L739'>739</a>
|
|
805
|
-
<a name='L740'></a><a href='#L740'>740</a>
|
|
806
|
-
<a name='L741'></a><a href='#L741'>741</a>
|
|
807
|
-
<a name='L742'></a><a href='#L742'>742</a>
|
|
808
|
-
<a name='L743'></a><a href='#L743'>743</a>
|
|
809
|
-
<a name='L744'></a><a href='#L744'>744</a>
|
|
810
|
-
<a name='L745'></a><a href='#L745'>745</a>
|
|
811
|
-
<a name='L746'></a><a href='#L746'>746</a>
|
|
812
|
-
<a name='L747'></a><a href='#L747'>747</a>
|
|
813
|
-
<a name='L748'></a><a href='#L748'>748</a>
|
|
814
|
-
<a name='L749'></a><a href='#L749'>749</a>
|
|
815
|
-
<a name='L750'></a><a href='#L750'>750</a>
|
|
816
|
-
<a name='L751'></a><a href='#L751'>751</a>
|
|
817
|
-
<a name='L752'></a><a href='#L752'>752</a>
|
|
818
|
-
<a name='L753'></a><a href='#L753'>753</a>
|
|
819
|
-
<a name='L754'></a><a href='#L754'>754</a>
|
|
820
|
-
<a name='L755'></a><a href='#L755'>755</a>
|
|
821
|
-
<a name='L756'></a><a href='#L756'>756</a>
|
|
822
|
-
<a name='L757'></a><a href='#L757'>757</a>
|
|
823
|
-
<a name='L758'></a><a href='#L758'>758</a>
|
|
824
|
-
<a name='L759'></a><a href='#L759'>759</a>
|
|
825
|
-
<a name='L760'></a><a href='#L760'>760</a>
|
|
826
|
-
<a name='L761'></a><a href='#L761'>761</a>
|
|
827
|
-
<a name='L762'></a><a href='#L762'>762</a>
|
|
828
|
-
<a name='L763'></a><a href='#L763'>763</a>
|
|
829
|
-
<a name='L764'></a><a href='#L764'>764</a>
|
|
830
|
-
<a name='L765'></a><a href='#L765'>765</a>
|
|
831
|
-
<a name='L766'></a><a href='#L766'>766</a>
|
|
832
|
-
<a name='L767'></a><a href='#L767'>767</a>
|
|
833
|
-
<a name='L768'></a><a href='#L768'>768</a>
|
|
834
|
-
<a name='L769'></a><a href='#L769'>769</a>
|
|
835
|
-
<a name='L770'></a><a href='#L770'>770</a>
|
|
836
|
-
<a name='L771'></a><a href='#L771'>771</a>
|
|
837
|
-
<a name='L772'></a><a href='#L772'>772</a>
|
|
838
|
-
<a name='L773'></a><a href='#L773'>773</a>
|
|
839
|
-
<a name='L774'></a><a href='#L774'>774</a>
|
|
840
|
-
<a name='L775'></a><a href='#L775'>775</a>
|
|
841
|
-
<a name='L776'></a><a href='#L776'>776</a>
|
|
842
|
-
<a name='L777'></a><a href='#L777'>777</a>
|
|
843
|
-
<a name='L778'></a><a href='#L778'>778</a>
|
|
844
|
-
<a name='L779'></a><a href='#L779'>779</a>
|
|
845
|
-
<a name='L780'></a><a href='#L780'>780</a>
|
|
846
|
-
<a name='L781'></a><a href='#L781'>781</a>
|
|
847
|
-
<a name='L782'></a><a href='#L782'>782</a>
|
|
848
|
-
<a name='L783'></a><a href='#L783'>783</a>
|
|
849
|
-
<a name='L784'></a><a href='#L784'>784</a>
|
|
850
|
-
<a name='L785'></a><a href='#L785'>785</a>
|
|
851
|
-
<a name='L786'></a><a href='#L786'>786</a>
|
|
852
|
-
<a name='L787'></a><a href='#L787'>787</a>
|
|
853
|
-
<a name='L788'></a><a href='#L788'>788</a>
|
|
854
|
-
<a name='L789'></a><a href='#L789'>789</a>
|
|
855
|
-
<a name='L790'></a><a href='#L790'>790</a>
|
|
856
|
-
<a name='L791'></a><a href='#L791'>791</a>
|
|
857
|
-
<a name='L792'></a><a href='#L792'>792</a>
|
|
858
|
-
<a name='L793'></a><a href='#L793'>793</a>
|
|
859
|
-
<a name='L794'></a><a href='#L794'>794</a>
|
|
860
|
-
<a name='L795'></a><a href='#L795'>795</a>
|
|
861
|
-
<a name='L796'></a><a href='#L796'>796</a>
|
|
862
|
-
<a name='L797'></a><a href='#L797'>797</a>
|
|
863
|
-
<a name='L798'></a><a href='#L798'>798</a>
|
|
864
|
-
<a name='L799'></a><a href='#L799'>799</a>
|
|
865
|
-
<a name='L800'></a><a href='#L800'>800</a>
|
|
866
|
-
<a name='L801'></a><a href='#L801'>801</a>
|
|
867
|
-
<a name='L802'></a><a href='#L802'>802</a>
|
|
868
|
-
<a name='L803'></a><a href='#L803'>803</a>
|
|
869
|
-
<a name='L804'></a><a href='#L804'>804</a>
|
|
870
|
-
<a name='L805'></a><a href='#L805'>805</a>
|
|
871
|
-
<a name='L806'></a><a href='#L806'>806</a>
|
|
872
|
-
<a name='L807'></a><a href='#L807'>807</a>
|
|
873
|
-
<a name='L808'></a><a href='#L808'>808</a>
|
|
874
|
-
<a name='L809'></a><a href='#L809'>809</a>
|
|
875
|
-
<a name='L810'></a><a href='#L810'>810</a>
|
|
876
|
-
<a name='L811'></a><a href='#L811'>811</a>
|
|
877
|
-
<a name='L812'></a><a href='#L812'>812</a>
|
|
878
|
-
<a name='L813'></a><a href='#L813'>813</a>
|
|
879
|
-
<a name='L814'></a><a href='#L814'>814</a>
|
|
880
|
-
<a name='L815'></a><a href='#L815'>815</a>
|
|
881
|
-
<a name='L816'></a><a href='#L816'>816</a>
|
|
882
|
-
<a name='L817'></a><a href='#L817'>817</a>
|
|
883
|
-
<a name='L818'></a><a href='#L818'>818</a>
|
|
884
|
-
<a name='L819'></a><a href='#L819'>819</a>
|
|
885
|
-
<a name='L820'></a><a href='#L820'>820</a>
|
|
886
|
-
<a name='L821'></a><a href='#L821'>821</a>
|
|
887
|
-
<a name='L822'></a><a href='#L822'>822</a>
|
|
888
|
-
<a name='L823'></a><a href='#L823'>823</a>
|
|
889
|
-
<a name='L824'></a><a href='#L824'>824</a>
|
|
890
|
-
<a name='L825'></a><a href='#L825'>825</a>
|
|
891
|
-
<a name='L826'></a><a href='#L826'>826</a>
|
|
892
|
-
<a name='L827'></a><a href='#L827'>827</a>
|
|
893
|
-
<a name='L828'></a><a href='#L828'>828</a>
|
|
894
|
-
<a name='L829'></a><a href='#L829'>829</a>
|
|
895
|
-
<a name='L830'></a><a href='#L830'>830</a>
|
|
896
|
-
<a name='L831'></a><a href='#L831'>831</a>
|
|
897
|
-
<a name='L832'></a><a href='#L832'>832</a>
|
|
898
|
-
<a name='L833'></a><a href='#L833'>833</a>
|
|
899
|
-
<a name='L834'></a><a href='#L834'>834</a>
|
|
900
|
-
<a name='L835'></a><a href='#L835'>835</a>
|
|
901
|
-
<a name='L836'></a><a href='#L836'>836</a>
|
|
902
|
-
<a name='L837'></a><a href='#L837'>837</a>
|
|
903
|
-
<a name='L838'></a><a href='#L838'>838</a>
|
|
904
|
-
<a name='L839'></a><a href='#L839'>839</a>
|
|
905
|
-
<a name='L840'></a><a href='#L840'>840</a>
|
|
906
|
-
<a name='L841'></a><a href='#L841'>841</a>
|
|
907
|
-
<a name='L842'></a><a href='#L842'>842</a>
|
|
908
|
-
<a name='L843'></a><a href='#L843'>843</a>
|
|
909
|
-
<a name='L844'></a><a href='#L844'>844</a>
|
|
910
|
-
<a name='L845'></a><a href='#L845'>845</a>
|
|
911
|
-
<a name='L846'></a><a href='#L846'>846</a>
|
|
912
|
-
<a name='L847'></a><a href='#L847'>847</a>
|
|
913
|
-
<a name='L848'></a><a href='#L848'>848</a>
|
|
914
|
-
<a name='L849'></a><a href='#L849'>849</a>
|
|
915
|
-
<a name='L850'></a><a href='#L850'>850</a>
|
|
916
|
-
<a name='L851'></a><a href='#L851'>851</a>
|
|
917
|
-
<a name='L852'></a><a href='#L852'>852</a>
|
|
918
|
-
<a name='L853'></a><a href='#L853'>853</a>
|
|
919
|
-
<a name='L854'></a><a href='#L854'>854</a>
|
|
920
|
-
<a name='L855'></a><a href='#L855'>855</a>
|
|
921
|
-
<a name='L856'></a><a href='#L856'>856</a>
|
|
922
|
-
<a name='L857'></a><a href='#L857'>857</a>
|
|
923
|
-
<a name='L858'></a><a href='#L858'>858</a>
|
|
924
|
-
<a name='L859'></a><a href='#L859'>859</a>
|
|
925
|
-
<a name='L860'></a><a href='#L860'>860</a>
|
|
926
|
-
<a name='L861'></a><a href='#L861'>861</a>
|
|
927
|
-
<a name='L862'></a><a href='#L862'>862</a>
|
|
928
|
-
<a name='L863'></a><a href='#L863'>863</a>
|
|
929
|
-
<a name='L864'></a><a href='#L864'>864</a>
|
|
930
|
-
<a name='L865'></a><a href='#L865'>865</a>
|
|
931
|
-
<a name='L866'></a><a href='#L866'>866</a>
|
|
932
|
-
<a name='L867'></a><a href='#L867'>867</a>
|
|
933
|
-
<a name='L868'></a><a href='#L868'>868</a>
|
|
934
|
-
<a name='L869'></a><a href='#L869'>869</a>
|
|
935
|
-
<a name='L870'></a><a href='#L870'>870</a>
|
|
936
|
-
<a name='L871'></a><a href='#L871'>871</a>
|
|
937
|
-
<a name='L872'></a><a href='#L872'>872</a>
|
|
938
|
-
<a name='L873'></a><a href='#L873'>873</a>
|
|
939
|
-
<a name='L874'></a><a href='#L874'>874</a>
|
|
940
|
-
<a name='L875'></a><a href='#L875'>875</a>
|
|
941
|
-
<a name='L876'></a><a href='#L876'>876</a>
|
|
942
|
-
<a name='L877'></a><a href='#L877'>877</a>
|
|
943
|
-
<a name='L878'></a><a href='#L878'>878</a>
|
|
944
|
-
<a name='L879'></a><a href='#L879'>879</a>
|
|
945
|
-
<a name='L880'></a><a href='#L880'>880</a>
|
|
946
|
-
<a name='L881'></a><a href='#L881'>881</a>
|
|
947
|
-
<a name='L882'></a><a href='#L882'>882</a>
|
|
948
|
-
<a name='L883'></a><a href='#L883'>883</a>
|
|
949
|
-
<a name='L884'></a><a href='#L884'>884</a>
|
|
950
|
-
<a name='L885'></a><a href='#L885'>885</a>
|
|
951
|
-
<a name='L886'></a><a href='#L886'>886</a>
|
|
952
|
-
<a name='L887'></a><a href='#L887'>887</a>
|
|
953
|
-
<a name='L888'></a><a href='#L888'>888</a>
|
|
954
|
-
<a name='L889'></a><a href='#L889'>889</a>
|
|
955
|
-
<a name='L890'></a><a href='#L890'>890</a>
|
|
956
|
-
<a name='L891'></a><a href='#L891'>891</a>
|
|
957
|
-
<a name='L892'></a><a href='#L892'>892</a>
|
|
958
|
-
<a name='L893'></a><a href='#L893'>893</a>
|
|
959
|
-
<a name='L894'></a><a href='#L894'>894</a>
|
|
960
|
-
<a name='L895'></a><a href='#L895'>895</a>
|
|
961
|
-
<a name='L896'></a><a href='#L896'>896</a>
|
|
962
|
-
<a name='L897'></a><a href='#L897'>897</a>
|
|
963
|
-
<a name='L898'></a><a href='#L898'>898</a>
|
|
964
|
-
<a name='L899'></a><a href='#L899'>899</a>
|
|
965
|
-
<a name='L900'></a><a href='#L900'>900</a>
|
|
966
|
-
<a name='L901'></a><a href='#L901'>901</a>
|
|
967
|
-
<a name='L902'></a><a href='#L902'>902</a>
|
|
968
|
-
<a name='L903'></a><a href='#L903'>903</a>
|
|
969
|
-
<a name='L904'></a><a href='#L904'>904</a>
|
|
970
|
-
<a name='L905'></a><a href='#L905'>905</a>
|
|
971
|
-
<a name='L906'></a><a href='#L906'>906</a>
|
|
972
|
-
<a name='L907'></a><a href='#L907'>907</a>
|
|
973
|
-
<a name='L908'></a><a href='#L908'>908</a>
|
|
974
|
-
<a name='L909'></a><a href='#L909'>909</a>
|
|
975
|
-
<a name='L910'></a><a href='#L910'>910</a>
|
|
976
|
-
<a name='L911'></a><a href='#L911'>911</a>
|
|
977
|
-
<a name='L912'></a><a href='#L912'>912</a>
|
|
978
|
-
<a name='L913'></a><a href='#L913'>913</a>
|
|
979
|
-
<a name='L914'></a><a href='#L914'>914</a>
|
|
980
|
-
<a name='L915'></a><a href='#L915'>915</a>
|
|
981
|
-
<a name='L916'></a><a href='#L916'>916</a>
|
|
982
|
-
<a name='L917'></a><a href='#L917'>917</a>
|
|
983
|
-
<a name='L918'></a><a href='#L918'>918</a>
|
|
984
|
-
<a name='L919'></a><a href='#L919'>919</a>
|
|
985
|
-
<a name='L920'></a><a href='#L920'>920</a>
|
|
986
|
-
<a name='L921'></a><a href='#L921'>921</a>
|
|
987
|
-
<a name='L922'></a><a href='#L922'>922</a>
|
|
988
|
-
<a name='L923'></a><a href='#L923'>923</a>
|
|
989
|
-
<a name='L924'></a><a href='#L924'>924</a>
|
|
990
|
-
<a name='L925'></a><a href='#L925'>925</a>
|
|
991
|
-
<a name='L926'></a><a href='#L926'>926</a>
|
|
992
|
-
<a name='L927'></a><a href='#L927'>927</a>
|
|
993
|
-
<a name='L928'></a><a href='#L928'>928</a>
|
|
994
|
-
<a name='L929'></a><a href='#L929'>929</a>
|
|
995
|
-
<a name='L930'></a><a href='#L930'>930</a>
|
|
996
|
-
<a name='L931'></a><a href='#L931'>931</a>
|
|
997
|
-
<a name='L932'></a><a href='#L932'>932</a>
|
|
998
|
-
<a name='L933'></a><a href='#L933'>933</a>
|
|
999
|
-
<a name='L934'></a><a href='#L934'>934</a>
|
|
1000
|
-
<a name='L935'></a><a href='#L935'>935</a>
|
|
1001
|
-
<a name='L936'></a><a href='#L936'>936</a>
|
|
1002
|
-
<a name='L937'></a><a href='#L937'>937</a>
|
|
1003
|
-
<a name='L938'></a><a href='#L938'>938</a>
|
|
1004
|
-
<a name='L939'></a><a href='#L939'>939</a>
|
|
1005
|
-
<a name='L940'></a><a href='#L940'>940</a>
|
|
1006
|
-
<a name='L941'></a><a href='#L941'>941</a>
|
|
1007
|
-
<a name='L942'></a><a href='#L942'>942</a>
|
|
1008
|
-
<a name='L943'></a><a href='#L943'>943</a>
|
|
1009
|
-
<a name='L944'></a><a href='#L944'>944</a>
|
|
1010
|
-
<a name='L945'></a><a href='#L945'>945</a>
|
|
1011
|
-
<a name='L946'></a><a href='#L946'>946</a>
|
|
1012
|
-
<a name='L947'></a><a href='#L947'>947</a>
|
|
1013
|
-
<a name='L948'></a><a href='#L948'>948</a>
|
|
1014
|
-
<a name='L949'></a><a href='#L949'>949</a>
|
|
1015
|
-
<a name='L950'></a><a href='#L950'>950</a>
|
|
1016
|
-
<a name='L951'></a><a href='#L951'>951</a>
|
|
1017
|
-
<a name='L952'></a><a href='#L952'>952</a>
|
|
1018
|
-
<a name='L953'></a><a href='#L953'>953</a>
|
|
1019
|
-
<a name='L954'></a><a href='#L954'>954</a>
|
|
1020
|
-
<a name='L955'></a><a href='#L955'>955</a>
|
|
1021
|
-
<a name='L956'></a><a href='#L956'>956</a>
|
|
1022
|
-
<a name='L957'></a><a href='#L957'>957</a>
|
|
1023
|
-
<a name='L958'></a><a href='#L958'>958</a>
|
|
1024
|
-
<a name='L959'></a><a href='#L959'>959</a>
|
|
1025
|
-
<a name='L960'></a><a href='#L960'>960</a>
|
|
1026
|
-
<a name='L961'></a><a href='#L961'>961</a>
|
|
1027
|
-
<a name='L962'></a><a href='#L962'>962</a>
|
|
1028
|
-
<a name='L963'></a><a href='#L963'>963</a>
|
|
1029
|
-
<a name='L964'></a><a href='#L964'>964</a>
|
|
1030
|
-
<a name='L965'></a><a href='#L965'>965</a>
|
|
1031
|
-
<a name='L966'></a><a href='#L966'>966</a>
|
|
1032
|
-
<a name='L967'></a><a href='#L967'>967</a>
|
|
1033
|
-
<a name='L968'></a><a href='#L968'>968</a>
|
|
1034
|
-
<a name='L969'></a><a href='#L969'>969</a>
|
|
1035
|
-
<a name='L970'></a><a href='#L970'>970</a>
|
|
1036
|
-
<a name='L971'></a><a href='#L971'>971</a>
|
|
1037
|
-
<a name='L972'></a><a href='#L972'>972</a>
|
|
1038
|
-
<a name='L973'></a><a href='#L973'>973</a>
|
|
1039
|
-
<a name='L974'></a><a href='#L974'>974</a>
|
|
1040
|
-
<a name='L975'></a><a href='#L975'>975</a>
|
|
1041
|
-
<a name='L976'></a><a href='#L976'>976</a>
|
|
1042
|
-
<a name='L977'></a><a href='#L977'>977</a>
|
|
1043
|
-
<a name='L978'></a><a href='#L978'>978</a>
|
|
1044
|
-
<a name='L979'></a><a href='#L979'>979</a>
|
|
1045
|
-
<a name='L980'></a><a href='#L980'>980</a>
|
|
1046
|
-
<a name='L981'></a><a href='#L981'>981</a>
|
|
1047
|
-
<a name='L982'></a><a href='#L982'>982</a>
|
|
1048
|
-
<a name='L983'></a><a href='#L983'>983</a>
|
|
1049
|
-
<a name='L984'></a><a href='#L984'>984</a>
|
|
1050
|
-
<a name='L985'></a><a href='#L985'>985</a>
|
|
1051
|
-
<a name='L986'></a><a href='#L986'>986</a>
|
|
1052
|
-
<a name='L987'></a><a href='#L987'>987</a>
|
|
1053
|
-
<a name='L988'></a><a href='#L988'>988</a>
|
|
1054
|
-
<a name='L989'></a><a href='#L989'>989</a>
|
|
1055
|
-
<a name='L990'></a><a href='#L990'>990</a>
|
|
1056
|
-
<a name='L991'></a><a href='#L991'>991</a>
|
|
1057
|
-
<a name='L992'></a><a href='#L992'>992</a>
|
|
1058
|
-
<a name='L993'></a><a href='#L993'>993</a>
|
|
1059
|
-
<a name='L994'></a><a href='#L994'>994</a>
|
|
1060
|
-
<a name='L995'></a><a href='#L995'>995</a>
|
|
1061
|
-
<a name='L996'></a><a href='#L996'>996</a>
|
|
1062
|
-
<a name='L997'></a><a href='#L997'>997</a>
|
|
1063
|
-
<a name='L998'></a><a href='#L998'>998</a>
|
|
1064
|
-
<a name='L999'></a><a href='#L999'>999</a>
|
|
1065
|
-
<a name='L1000'></a><a href='#L1000'>1000</a>
|
|
1066
|
-
<a name='L1001'></a><a href='#L1001'>1001</a>
|
|
1067
|
-
<a name='L1002'></a><a href='#L1002'>1002</a>
|
|
1068
|
-
<a name='L1003'></a><a href='#L1003'>1003</a>
|
|
1069
|
-
<a name='L1004'></a><a href='#L1004'>1004</a>
|
|
1070
|
-
<a name='L1005'></a><a href='#L1005'>1005</a>
|
|
1071
|
-
<a name='L1006'></a><a href='#L1006'>1006</a>
|
|
1072
|
-
<a name='L1007'></a><a href='#L1007'>1007</a>
|
|
1073
|
-
<a name='L1008'></a><a href='#L1008'>1008</a>
|
|
1074
|
-
<a name='L1009'></a><a href='#L1009'>1009</a>
|
|
1075
|
-
<a name='L1010'></a><a href='#L1010'>1010</a>
|
|
1076
|
-
<a name='L1011'></a><a href='#L1011'>1011</a>
|
|
1077
|
-
<a name='L1012'></a><a href='#L1012'>1012</a>
|
|
1078
|
-
<a name='L1013'></a><a href='#L1013'>1013</a>
|
|
1079
|
-
<a name='L1014'></a><a href='#L1014'>1014</a>
|
|
1080
|
-
<a name='L1015'></a><a href='#L1015'>1015</a>
|
|
1081
|
-
<a name='L1016'></a><a href='#L1016'>1016</a>
|
|
1082
|
-
<a name='L1017'></a><a href='#L1017'>1017</a>
|
|
1083
|
-
<a name='L1018'></a><a href='#L1018'>1018</a>
|
|
1084
|
-
<a name='L1019'></a><a href='#L1019'>1019</a>
|
|
1085
|
-
<a name='L1020'></a><a href='#L1020'>1020</a>
|
|
1086
|
-
<a name='L1021'></a><a href='#L1021'>1021</a>
|
|
1087
|
-
<a name='L1022'></a><a href='#L1022'>1022</a>
|
|
1088
|
-
<a name='L1023'></a><a href='#L1023'>1023</a>
|
|
1089
|
-
<a name='L1024'></a><a href='#L1024'>1024</a>
|
|
1090
|
-
<a name='L1025'></a><a href='#L1025'>1025</a>
|
|
1091
|
-
<a name='L1026'></a><a href='#L1026'>1026</a>
|
|
1092
|
-
<a name='L1027'></a><a href='#L1027'>1027</a>
|
|
1093
|
-
<a name='L1028'></a><a href='#L1028'>1028</a>
|
|
1094
|
-
<a name='L1029'></a><a href='#L1029'>1029</a>
|
|
1095
|
-
<a name='L1030'></a><a href='#L1030'>1030</a>
|
|
1096
|
-
<a name='L1031'></a><a href='#L1031'>1031</a>
|
|
1097
|
-
<a name='L1032'></a><a href='#L1032'>1032</a>
|
|
1098
|
-
<a name='L1033'></a><a href='#L1033'>1033</a>
|
|
1099
|
-
<a name='L1034'></a><a href='#L1034'>1034</a>
|
|
1100
|
-
<a name='L1035'></a><a href='#L1035'>1035</a>
|
|
1101
|
-
<a name='L1036'></a><a href='#L1036'>1036</a>
|
|
1102
|
-
<a name='L1037'></a><a href='#L1037'>1037</a>
|
|
1103
|
-
<a name='L1038'></a><a href='#L1038'>1038</a>
|
|
1104
|
-
<a name='L1039'></a><a href='#L1039'>1039</a>
|
|
1105
|
-
<a name='L1040'></a><a href='#L1040'>1040</a>
|
|
1106
|
-
<a name='L1041'></a><a href='#L1041'>1041</a>
|
|
1107
|
-
<a name='L1042'></a><a href='#L1042'>1042</a>
|
|
1108
|
-
<a name='L1043'></a><a href='#L1043'>1043</a>
|
|
1109
|
-
<a name='L1044'></a><a href='#L1044'>1044</a>
|
|
1110
|
-
<a name='L1045'></a><a href='#L1045'>1045</a>
|
|
1111
|
-
<a name='L1046'></a><a href='#L1046'>1046</a>
|
|
1112
|
-
<a name='L1047'></a><a href='#L1047'>1047</a>
|
|
1113
|
-
<a name='L1048'></a><a href='#L1048'>1048</a>
|
|
1114
|
-
<a name='L1049'></a><a href='#L1049'>1049</a>
|
|
1115
|
-
<a name='L1050'></a><a href='#L1050'>1050</a>
|
|
1116
|
-
<a name='L1051'></a><a href='#L1051'>1051</a>
|
|
1117
|
-
<a name='L1052'></a><a href='#L1052'>1052</a>
|
|
1118
|
-
<a name='L1053'></a><a href='#L1053'>1053</a>
|
|
1119
|
-
<a name='L1054'></a><a href='#L1054'>1054</a>
|
|
1120
|
-
<a name='L1055'></a><a href='#L1055'>1055</a>
|
|
1121
|
-
<a name='L1056'></a><a href='#L1056'>1056</a>
|
|
1122
|
-
<a name='L1057'></a><a href='#L1057'>1057</a>
|
|
1123
|
-
<a name='L1058'></a><a href='#L1058'>1058</a>
|
|
1124
|
-
<a name='L1059'></a><a href='#L1059'>1059</a>
|
|
1125
|
-
<a name='L1060'></a><a href='#L1060'>1060</a>
|
|
1126
|
-
<a name='L1061'></a><a href='#L1061'>1061</a>
|
|
1127
|
-
<a name='L1062'></a><a href='#L1062'>1062</a>
|
|
1128
|
-
<a name='L1063'></a><a href='#L1063'>1063</a>
|
|
1129
|
-
<a name='L1064'></a><a href='#L1064'>1064</a>
|
|
1130
|
-
<a name='L1065'></a><a href='#L1065'>1065</a>
|
|
1131
|
-
<a name='L1066'></a><a href='#L1066'>1066</a>
|
|
1132
|
-
<a name='L1067'></a><a href='#L1067'>1067</a>
|
|
1133
|
-
<a name='L1068'></a><a href='#L1068'>1068</a>
|
|
1134
|
-
<a name='L1069'></a><a href='#L1069'>1069</a>
|
|
1135
|
-
<a name='L1070'></a><a href='#L1070'>1070</a>
|
|
1136
|
-
<a name='L1071'></a><a href='#L1071'>1071</a>
|
|
1137
|
-
<a name='L1072'></a><a href='#L1072'>1072</a>
|
|
1138
|
-
<a name='L1073'></a><a href='#L1073'>1073</a>
|
|
1139
|
-
<a name='L1074'></a><a href='#L1074'>1074</a>
|
|
1140
|
-
<a name='L1075'></a><a href='#L1075'>1075</a>
|
|
1141
|
-
<a name='L1076'></a><a href='#L1076'>1076</a>
|
|
1142
|
-
<a name='L1077'></a><a href='#L1077'>1077</a>
|
|
1143
|
-
<a name='L1078'></a><a href='#L1078'>1078</a>
|
|
1144
|
-
<a name='L1079'></a><a href='#L1079'>1079</a>
|
|
1145
|
-
<a name='L1080'></a><a href='#L1080'>1080</a>
|
|
1146
|
-
<a name='L1081'></a><a href='#L1081'>1081</a>
|
|
1147
|
-
<a name='L1082'></a><a href='#L1082'>1082</a>
|
|
1148
|
-
<a name='L1083'></a><a href='#L1083'>1083</a>
|
|
1149
|
-
<a name='L1084'></a><a href='#L1084'>1084</a>
|
|
1150
|
-
<a name='L1085'></a><a href='#L1085'>1085</a>
|
|
1151
|
-
<a name='L1086'></a><a href='#L1086'>1086</a>
|
|
1152
|
-
<a name='L1087'></a><a href='#L1087'>1087</a>
|
|
1153
|
-
<a name='L1088'></a><a href='#L1088'>1088</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
1154
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1155
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1156
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1157
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1158
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1159
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1160
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1161
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1162
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1163
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1164
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1165
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1166
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1167
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1168
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1169
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1170
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1171
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1172
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1173
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1174
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1175
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1176
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1177
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1178
|
-
<span class="cline-any cline-yes">26x</span>
|
|
1179
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1180
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1181
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1182
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1183
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1184
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1185
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1186
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1187
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1188
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1189
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1190
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1191
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1192
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1193
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1194
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1195
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1196
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1197
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1198
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1199
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1200
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1201
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1202
|
-
<span class="cline-any cline-no"> </span>
|
|
1203
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1204
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1205
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1206
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1207
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1208
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1209
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1210
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1211
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1212
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1213
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1214
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1215
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1216
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1217
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1218
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1219
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1220
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1221
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1222
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1223
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1224
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1225
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1226
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1227
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1228
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1229
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1230
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1231
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1232
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1233
|
-
<span class="cline-any cline-no"> </span>
|
|
1234
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1235
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1236
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1237
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1238
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1239
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1240
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1241
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1242
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1243
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1244
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1245
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1246
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1247
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1248
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1249
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1250
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1251
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1252
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1253
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1254
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1255
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1256
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1257
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1258
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1259
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1260
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1261
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1262
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1263
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1264
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1265
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1266
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1267
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1268
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1269
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1270
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1271
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1272
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1273
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1274
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1275
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1276
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1277
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1278
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1279
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1280
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1281
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1282
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1283
|
-
<span class="cline-any cline-no"> </span>
|
|
1284
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1285
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1286
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1287
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1288
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1289
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1290
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1291
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1292
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1293
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1294
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1295
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1296
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1297
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1298
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1299
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1300
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1301
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1302
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1303
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1304
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1305
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1306
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1307
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1308
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1309
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1310
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1311
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1312
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1313
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1314
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1315
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1316
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1317
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1318
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1319
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1320
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1321
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1322
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1323
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1324
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1325
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1326
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1327
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1328
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1329
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1330
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1331
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1332
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1333
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1334
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1335
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1336
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1337
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1338
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1339
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1340
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1341
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1342
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1343
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1344
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1345
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1346
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1347
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1348
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1349
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1350
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1351
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1352
|
-
<span class="cline-any cline-no"> </span>
|
|
1353
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1354
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1355
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1356
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1357
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1358
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1359
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1360
|
-
<span class="cline-any cline-yes">18x</span>
|
|
1361
|
-
<span class="cline-any cline-yes">18x</span>
|
|
1362
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1363
|
-
<span class="cline-any cline-yes">18x</span>
|
|
1364
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1365
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1366
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1367
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1368
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1369
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1370
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1371
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1372
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1373
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1374
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1375
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1376
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1377
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1378
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1379
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1380
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1381
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1382
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1383
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1384
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1385
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1386
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1387
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1388
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1389
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1390
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1391
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1392
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1393
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1394
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1395
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1396
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1397
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1398
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1399
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1400
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1401
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1402
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1403
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1404
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1405
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1406
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1407
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1408
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1409
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1410
|
-
<span class="cline-any cline-yes">18x</span>
|
|
1411
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1412
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1413
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1414
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1415
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1416
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1417
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1418
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1419
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1420
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1421
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1422
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1423
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1424
|
-
<span class="cline-any cline-no"> </span>
|
|
1425
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1426
|
-
<span class="cline-any cline-no"> </span>
|
|
1427
|
-
<span class="cline-any cline-no"> </span>
|
|
1428
|
-
<span class="cline-any cline-no"> </span>
|
|
1429
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1430
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1431
|
-
<span class="cline-any cline-no"> </span>
|
|
1432
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1433
|
-
<span class="cline-any cline-no"> </span>
|
|
1434
|
-
<span class="cline-any cline-no"> </span>
|
|
1435
|
-
<span class="cline-any cline-no"> </span>
|
|
1436
|
-
<span class="cline-any cline-no"> </span>
|
|
1437
|
-
<span class="cline-any cline-no"> </span>
|
|
1438
|
-
<span class="cline-any cline-no"> </span>
|
|
1439
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1440
|
-
<span class="cline-any cline-no"> </span>
|
|
1441
|
-
<span class="cline-any cline-no"> </span>
|
|
1442
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1443
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1444
|
-
<span class="cline-any cline-no"> </span>
|
|
1445
|
-
<span class="cline-any cline-no"> </span>
|
|
1446
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1447
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1448
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1449
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1450
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1451
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1452
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1453
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1454
|
-
<span class="cline-any cline-no"> </span>
|
|
1455
|
-
<span class="cline-any cline-no"> </span>
|
|
1456
|
-
<span class="cline-any cline-no"> </span>
|
|
1457
|
-
<span class="cline-any cline-no"> </span>
|
|
1458
|
-
<span class="cline-any cline-no"> </span>
|
|
1459
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1460
|
-
<span class="cline-any cline-no"> </span>
|
|
1461
|
-
<span class="cline-any cline-no"> </span>
|
|
1462
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1463
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1464
|
-
<span class="cline-any cline-no"> </span>
|
|
1465
|
-
<span class="cline-any cline-no"> </span>
|
|
1466
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1467
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1468
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1469
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1470
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1471
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1472
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1473
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1474
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1475
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1476
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1477
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1478
|
-
<span class="cline-any cline-no"> </span>
|
|
1479
|
-
<span class="cline-any cline-no"> </span>
|
|
1480
|
-
<span class="cline-any cline-no"> </span>
|
|
1481
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1482
|
-
<span class="cline-any cline-no"> </span>
|
|
1483
|
-
<span class="cline-any cline-no"> </span>
|
|
1484
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1485
|
-
<span class="cline-any cline-no"> </span>
|
|
1486
|
-
<span class="cline-any cline-no"> </span>
|
|
1487
|
-
<span class="cline-any cline-no"> </span>
|
|
1488
|
-
<span class="cline-any cline-no"> </span>
|
|
1489
|
-
<span class="cline-any cline-no"> </span>
|
|
1490
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1491
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1492
|
-
<span class="cline-any cline-no"> </span>
|
|
1493
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1494
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1495
|
-
<span class="cline-any cline-no"> </span>
|
|
1496
|
-
<span class="cline-any cline-no"> </span>
|
|
1497
|
-
<span class="cline-any cline-no"> </span>
|
|
1498
|
-
<span class="cline-any cline-no"> </span>
|
|
1499
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1500
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1501
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1502
|
-
<span class="cline-any cline-no"> </span>
|
|
1503
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1504
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1505
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1506
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1507
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1508
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1509
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1510
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1511
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1512
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1513
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1514
|
-
<span class="cline-any cline-no"> </span>
|
|
1515
|
-
<span class="cline-any cline-no"> </span>
|
|
1516
|
-
<span class="cline-any cline-no"> </span>
|
|
1517
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1518
|
-
<span class="cline-any cline-no"> </span>
|
|
1519
|
-
<span class="cline-any cline-no"> </span>
|
|
1520
|
-
<span class="cline-any cline-no"> </span>
|
|
1521
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1522
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1523
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1524
|
-
<span class="cline-any cline-no"> </span>
|
|
1525
|
-
<span class="cline-any cline-no"> </span>
|
|
1526
|
-
<span class="cline-any cline-no"> </span>
|
|
1527
|
-
<span class="cline-any cline-no"> </span>
|
|
1528
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1529
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1530
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1531
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1532
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1533
|
-
<span class="cline-any cline-no"> </span>
|
|
1534
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1535
|
-
<span class="cline-any cline-no"> </span>
|
|
1536
|
-
<span class="cline-any cline-no"> </span>
|
|
1537
|
-
<span class="cline-any cline-no"> </span>
|
|
1538
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1539
|
-
<span class="cline-any cline-no"> </span>
|
|
1540
|
-
<span class="cline-any cline-no"> </span>
|
|
1541
|
-
<span class="cline-any cline-no"> </span>
|
|
1542
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1543
|
-
<span class="cline-any cline-no"> </span>
|
|
1544
|
-
<span class="cline-any cline-no"> </span>
|
|
1545
|
-
<span class="cline-any cline-no"> </span>
|
|
1546
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1547
|
-
<span class="cline-any cline-no"> </span>
|
|
1548
|
-
<span class="cline-any cline-no"> </span>
|
|
1549
|
-
<span class="cline-any cline-no"> </span>
|
|
1550
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1551
|
-
<span class="cline-any cline-no"> </span>
|
|
1552
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1553
|
-
<span class="cline-any cline-no"> </span>
|
|
1554
|
-
<span class="cline-any cline-no"> </span>
|
|
1555
|
-
<span class="cline-any cline-no"> </span>
|
|
1556
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1557
|
-
<span class="cline-any cline-no"> </span>
|
|
1558
|
-
<span class="cline-any cline-no"> </span>
|
|
1559
|
-
<span class="cline-any cline-no"> </span>
|
|
1560
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1561
|
-
<span class="cline-any cline-no"> </span>
|
|
1562
|
-
<span class="cline-any cline-no"> </span>
|
|
1563
|
-
<span class="cline-any cline-no"> </span>
|
|
1564
|
-
<span class="cline-any cline-no"> </span>
|
|
1565
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1566
|
-
<span class="cline-any cline-no"> </span>
|
|
1567
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1568
|
-
<span class="cline-any cline-no"> </span>
|
|
1569
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1570
|
-
<span class="cline-any cline-no"> </span>
|
|
1571
|
-
<span class="cline-any cline-no"> </span>
|
|
1572
|
-
<span class="cline-any cline-no"> </span>
|
|
1573
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1574
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1575
|
-
<span class="cline-any cline-no"> </span>
|
|
1576
|
-
<span class="cline-any cline-no"> </span>
|
|
1577
|
-
<span class="cline-any cline-no"> </span>
|
|
1578
|
-
<span class="cline-any cline-no"> </span>
|
|
1579
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1580
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1581
|
-
<span class="cline-any cline-no"> </span>
|
|
1582
|
-
<span class="cline-any cline-no"> </span>
|
|
1583
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1584
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1585
|
-
<span class="cline-any cline-no"> </span>
|
|
1586
|
-
<span class="cline-any cline-no"> </span>
|
|
1587
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1588
|
-
<span class="cline-any cline-no"> </span>
|
|
1589
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1590
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1591
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1592
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1593
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1594
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1595
|
-
<span class="cline-any cline-no"> </span>
|
|
1596
|
-
<span class="cline-any cline-no"> </span>
|
|
1597
|
-
<span class="cline-any cline-no"> </span>
|
|
1598
|
-
<span class="cline-any cline-no"> </span>
|
|
1599
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1600
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1601
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1602
|
-
<span class="cline-any cline-no"> </span>
|
|
1603
|
-
<span class="cline-any cline-no"> </span>
|
|
1604
|
-
<span class="cline-any cline-no"> </span>
|
|
1605
|
-
<span class="cline-any cline-no"> </span>
|
|
1606
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1607
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1608
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1609
|
-
<span class="cline-any cline-no"> </span>
|
|
1610
|
-
<span class="cline-any cline-no"> </span>
|
|
1611
|
-
<span class="cline-any cline-no"> </span>
|
|
1612
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1613
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1614
|
-
<span class="cline-any cline-no"> </span>
|
|
1615
|
-
<span class="cline-any cline-no"> </span>
|
|
1616
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1617
|
-
<span class="cline-any cline-no"> </span>
|
|
1618
|
-
<span class="cline-any cline-no"> </span>
|
|
1619
|
-
<span class="cline-any cline-no"> </span>
|
|
1620
|
-
<span class="cline-any cline-no"> </span>
|
|
1621
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1622
|
-
<span class="cline-any cline-no"> </span>
|
|
1623
|
-
<span class="cline-any cline-no"> </span>
|
|
1624
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1625
|
-
<span class="cline-any cline-no"> </span>
|
|
1626
|
-
<span class="cline-any cline-no"> </span>
|
|
1627
|
-
<span class="cline-any cline-no"> </span>
|
|
1628
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1629
|
-
<span class="cline-any cline-no"> </span>
|
|
1630
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1631
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1632
|
-
<span class="cline-any cline-no"> </span>
|
|
1633
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1634
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1635
|
-
<span class="cline-any cline-no"> </span>
|
|
1636
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1637
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1638
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1639
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1640
|
-
<span class="cline-any cline-no"> </span>
|
|
1641
|
-
<span class="cline-any cline-no"> </span>
|
|
1642
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1643
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1644
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1645
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1646
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1647
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1648
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1649
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1650
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1651
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1652
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1653
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1654
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1655
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1656
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1657
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1658
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1659
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1660
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1661
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1662
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1663
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1664
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1665
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1666
|
-
<span class="cline-any cline-yes">12x</span>
|
|
1667
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1668
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1669
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1670
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1671
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1672
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1673
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1674
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1675
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1676
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1677
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1678
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1679
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1680
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1681
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1682
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1683
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1684
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1685
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1686
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1687
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1688
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1689
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1690
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1691
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1692
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1693
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1694
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1695
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1696
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1697
|
-
<span class="cline-any cline-no"> </span>
|
|
1698
|
-
<span class="cline-any cline-no"> </span>
|
|
1699
|
-
<span class="cline-any cline-no"> </span>
|
|
1700
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1701
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1702
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1703
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1704
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1705
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1706
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1707
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1708
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1709
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1710
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1711
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1712
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1713
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1714
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1715
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1716
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1717
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1718
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1719
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1720
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1721
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1722
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1723
|
-
<span class="cline-any cline-no"> </span>
|
|
1724
|
-
<span class="cline-any cline-no"> </span>
|
|
1725
|
-
<span class="cline-any cline-no"> </span>
|
|
1726
|
-
<span class="cline-any cline-no"> </span>
|
|
1727
|
-
<span class="cline-any cline-no"> </span>
|
|
1728
|
-
<span class="cline-any cline-no"> </span>
|
|
1729
|
-
<span class="cline-any cline-no"> </span>
|
|
1730
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1731
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1732
|
-
<span class="cline-any cline-no"> </span>
|
|
1733
|
-
<span class="cline-any cline-no"> </span>
|
|
1734
|
-
<span class="cline-any cline-no"> </span>
|
|
1735
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1736
|
-
<span class="cline-any cline-no"> </span>
|
|
1737
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1738
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1739
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1740
|
-
<span class="cline-any cline-no"> </span>
|
|
1741
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1742
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1743
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1744
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1745
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1746
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1747
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1748
|
-
<span class="cline-any cline-no"> </span>
|
|
1749
|
-
<span class="cline-any cline-no"> </span>
|
|
1750
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1751
|
-
<span class="cline-any cline-no"> </span>
|
|
1752
|
-
<span class="cline-any cline-no"> </span>
|
|
1753
|
-
<span class="cline-any cline-no"> </span>
|
|
1754
|
-
<span class="cline-any cline-no"> </span>
|
|
1755
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1756
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1757
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1758
|
-
<span class="cline-any cline-no"> </span>
|
|
1759
|
-
<span class="cline-any cline-no"> </span>
|
|
1760
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1761
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1762
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1763
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1764
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1765
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1766
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1767
|
-
<span class="cline-any cline-no"> </span>
|
|
1768
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1769
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1770
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1771
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1772
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1773
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1774
|
-
<span class="cline-any cline-no"> </span>
|
|
1775
|
-
<span class="cline-any cline-no"> </span>
|
|
1776
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1777
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1778
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1779
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1780
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1781
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1782
|
-
<span class="cline-any cline-no"> </span>
|
|
1783
|
-
<span class="cline-any cline-no"> </span>
|
|
1784
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1785
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1786
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1787
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1788
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1789
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1790
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1791
|
-
<span class="cline-any cline-no"> </span>
|
|
1792
|
-
<span class="cline-any cline-no"> </span>
|
|
1793
|
-
<span class="cline-any cline-no"> </span>
|
|
1794
|
-
<span class="cline-any cline-no"> </span>
|
|
1795
|
-
<span class="cline-any cline-no"> </span>
|
|
1796
|
-
<span class="cline-any cline-no"> </span>
|
|
1797
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1798
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1799
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1800
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1801
|
-
<span class="cline-any cline-no"> </span>
|
|
1802
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1803
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1804
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1805
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1806
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1807
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1808
|
-
<span class="cline-any cline-no"> </span>
|
|
1809
|
-
<span class="cline-any cline-no"> </span>
|
|
1810
|
-
<span class="cline-any cline-no"> </span>
|
|
1811
|
-
<span class="cline-any cline-no"> </span>
|
|
1812
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1813
|
-
<span class="cline-any cline-no"> </span>
|
|
1814
|
-
<span class="cline-any cline-no"> </span>
|
|
1815
|
-
<span class="cline-any cline-no"> </span>
|
|
1816
|
-
<span class="cline-any cline-no"> </span>
|
|
1817
|
-
<span class="cline-any cline-no"> </span>
|
|
1818
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1819
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1820
|
-
<span class="cline-any cline-no"> </span>
|
|
1821
|
-
<span class="cline-any cline-no"> </span>
|
|
1822
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1823
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1824
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1825
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1826
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1827
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1828
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1829
|
-
<span class="cline-any cline-no"> </span>
|
|
1830
|
-
<span class="cline-any cline-no"> </span>
|
|
1831
|
-
<span class="cline-any cline-no"> </span>
|
|
1832
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1833
|
-
<span class="cline-any cline-no"> </span>
|
|
1834
|
-
<span class="cline-any cline-no"> </span>
|
|
1835
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1836
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1837
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1838
|
-
<span class="cline-any cline-no"> </span>
|
|
1839
|
-
<span class="cline-any cline-no"> </span>
|
|
1840
|
-
<span class="cline-any cline-no"> </span>
|
|
1841
|
-
<span class="cline-any cline-no"> </span>
|
|
1842
|
-
<span class="cline-any cline-no"> </span>
|
|
1843
|
-
<span class="cline-any cline-no"> </span>
|
|
1844
|
-
<span class="cline-any cline-no"> </span>
|
|
1845
|
-
<span class="cline-any cline-no"> </span>
|
|
1846
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1847
|
-
<span class="cline-any cline-no"> </span>
|
|
1848
|
-
<span class="cline-any cline-no"> </span>
|
|
1849
|
-
<span class="cline-any cline-no"> </span>
|
|
1850
|
-
<span class="cline-any cline-no"> </span>
|
|
1851
|
-
<span class="cline-any cline-no"> </span>
|
|
1852
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1853
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1854
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1855
|
-
<span class="cline-any cline-no"> </span>
|
|
1856
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1857
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1858
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1859
|
-
<span class="cline-any cline-no"> </span>
|
|
1860
|
-
<span class="cline-any cline-no"> </span>
|
|
1861
|
-
<span class="cline-any cline-no"> </span>
|
|
1862
|
-
<span class="cline-any cline-no"> </span>
|
|
1863
|
-
<span class="cline-any cline-no"> </span>
|
|
1864
|
-
<span class="cline-any cline-no"> </span>
|
|
1865
|
-
<span class="cline-any cline-no"> </span>
|
|
1866
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1867
|
-
<span class="cline-any cline-no"> </span>
|
|
1868
|
-
<span class="cline-any cline-no"> </span>
|
|
1869
|
-
<span class="cline-any cline-no"> </span>
|
|
1870
|
-
<span class="cline-any cline-no"> </span>
|
|
1871
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1872
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1873
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1874
|
-
<span class="cline-any cline-no"> </span>
|
|
1875
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1876
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1877
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1878
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1879
|
-
<span class="cline-any cline-no"> </span>
|
|
1880
|
-
<span class="cline-any cline-no"> </span>
|
|
1881
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1882
|
-
<span class="cline-any cline-no"> </span>
|
|
1883
|
-
<span class="cline-any cline-no"> </span>
|
|
1884
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1885
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1886
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1887
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1888
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1889
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1890
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1891
|
-
<span class="cline-any cline-no"> </span>
|
|
1892
|
-
<span class="cline-any cline-no"> </span>
|
|
1893
|
-
<span class="cline-any cline-no"> </span>
|
|
1894
|
-
<span class="cline-any cline-no"> </span>
|
|
1895
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1896
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1897
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1898
|
-
<span class="cline-any cline-no"> </span>
|
|
1899
|
-
<span class="cline-any cline-no"> </span>
|
|
1900
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1901
|
-
<span class="cline-any cline-no"> </span>
|
|
1902
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1903
|
-
<span class="cline-any cline-no"> </span>
|
|
1904
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1905
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1906
|
-
<span class="cline-any cline-no"> </span>
|
|
1907
|
-
<span class="cline-any cline-no"> </span>
|
|
1908
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1909
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1910
|
-
<span class="cline-any cline-no"> </span>
|
|
1911
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1912
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1913
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1914
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1915
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1916
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1917
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1918
|
-
<span class="cline-any cline-no"> </span>
|
|
1919
|
-
<span class="cline-any cline-no"> </span>
|
|
1920
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1921
|
-
<span class="cline-any cline-no"> </span>
|
|
1922
|
-
<span class="cline-any cline-no"> </span>
|
|
1923
|
-
<span class="cline-any cline-no"> </span>
|
|
1924
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1925
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1926
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1927
|
-
<span class="cline-any cline-no"> </span>
|
|
1928
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1929
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1930
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1931
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1932
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1933
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1934
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1935
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1936
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1937
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1938
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1939
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1940
|
-
<span class="cline-any cline-no"> </span>
|
|
1941
|
-
<span class="cline-any cline-no"> </span>
|
|
1942
|
-
<span class="cline-any cline-no"> </span>
|
|
1943
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1944
|
-
<span class="cline-any cline-no"> </span>
|
|
1945
|
-
<span class="cline-any cline-no"> </span>
|
|
1946
|
-
<span class="cline-any cline-no"> </span>
|
|
1947
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1948
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1949
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1950
|
-
<span class="cline-any cline-no"> </span>
|
|
1951
|
-
<span class="cline-any cline-no"> </span>
|
|
1952
|
-
<span class="cline-any cline-no"> </span>
|
|
1953
|
-
<span class="cline-any cline-no"> </span>
|
|
1954
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1955
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1956
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1957
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1958
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1959
|
-
<span class="cline-any cline-no"> </span>
|
|
1960
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1961
|
-
<span class="cline-any cline-no"> </span>
|
|
1962
|
-
<span class="cline-any cline-no"> </span>
|
|
1963
|
-
<span class="cline-any cline-no"> </span>
|
|
1964
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1965
|
-
<span class="cline-any cline-no"> </span>
|
|
1966
|
-
<span class="cline-any cline-no"> </span>
|
|
1967
|
-
<span class="cline-any cline-no"> </span>
|
|
1968
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1969
|
-
<span class="cline-any cline-no"> </span>
|
|
1970
|
-
<span class="cline-any cline-no"> </span>
|
|
1971
|
-
<span class="cline-any cline-no"> </span>
|
|
1972
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1973
|
-
<span class="cline-any cline-no"> </span>
|
|
1974
|
-
<span class="cline-any cline-no"> </span>
|
|
1975
|
-
<span class="cline-any cline-no"> </span>
|
|
1976
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1977
|
-
<span class="cline-any cline-no"> </span>
|
|
1978
|
-
<span class="cline-any cline-no"> </span>
|
|
1979
|
-
<span class="cline-any cline-no"> </span>
|
|
1980
|
-
<span class="cline-any cline-no"> </span>
|
|
1981
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1982
|
-
<span class="cline-any cline-no"> </span>
|
|
1983
|
-
<span class="cline-any cline-no"> </span>
|
|
1984
|
-
<span class="cline-any cline-no"> </span>
|
|
1985
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1986
|
-
<span class="cline-any cline-no"> </span>
|
|
1987
|
-
<span class="cline-any cline-no"> </span>
|
|
1988
|
-
<span class="cline-any cline-no"> </span>
|
|
1989
|
-
<span class="cline-any cline-no"> </span>
|
|
1990
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1991
|
-
<span class="cline-any cline-no"> </span>
|
|
1992
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1993
|
-
<span class="cline-any cline-no"> </span>
|
|
1994
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1995
|
-
<span class="cline-any cline-no"> </span>
|
|
1996
|
-
<span class="cline-any cline-no"> </span>
|
|
1997
|
-
<span class="cline-any cline-no"> </span>
|
|
1998
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1999
|
-
<span class="cline-any cline-no"> </span>
|
|
2000
|
-
<span class="cline-any cline-no"> </span>
|
|
2001
|
-
<span class="cline-any cline-no"> </span>
|
|
2002
|
-
<span class="cline-any cline-no"> </span>
|
|
2003
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2004
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2005
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2006
|
-
<span class="cline-any cline-no"> </span>
|
|
2007
|
-
<span class="cline-any cline-no"> </span>
|
|
2008
|
-
<span class="cline-any cline-no"> </span>
|
|
2009
|
-
<span class="cline-any cline-no"> </span>
|
|
2010
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2011
|
-
<span class="cline-any cline-no"> </span>
|
|
2012
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2013
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2014
|
-
<span class="cline-any cline-no"> </span>
|
|
2015
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2016
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2017
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2018
|
-
<span class="cline-any cline-no"> </span>
|
|
2019
|
-
<span class="cline-any cline-no"> </span>
|
|
2020
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2021
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2022
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2023
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2024
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2025
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2026
|
-
<span class="cline-any cline-no"> </span>
|
|
2027
|
-
<span class="cline-any cline-no"> </span>
|
|
2028
|
-
<span class="cline-any cline-no"> </span>
|
|
2029
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2030
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2031
|
-
<span class="cline-any cline-no"> </span>
|
|
2032
|
-
<span class="cline-any cline-no"> </span>
|
|
2033
|
-
<span class="cline-any cline-no"> </span>
|
|
2034
|
-
<span class="cline-any cline-no"> </span>
|
|
2035
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2036
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2037
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2038
|
-
<span class="cline-any cline-no"> </span>
|
|
2039
|
-
<span class="cline-any cline-no"> </span>
|
|
2040
|
-
<span class="cline-any cline-no"> </span>
|
|
2041
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2042
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2043
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2044
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2045
|
-
<span class="cline-any cline-no"> </span>
|
|
2046
|
-
<span class="cline-any cline-no"> </span>
|
|
2047
|
-
<span class="cline-any cline-no"> </span>
|
|
2048
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2049
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2050
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2051
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2052
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2053
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2054
|
-
<span class="cline-any cline-no"> </span>
|
|
2055
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2056
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2057
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2058
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2059
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2060
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2061
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2062
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2063
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2064
|
-
<span class="cline-any cline-no"> </span>
|
|
2065
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2066
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2067
|
-
<span class="cline-any cline-no"> </span>
|
|
2068
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2069
|
-
<span class="cline-any cline-no"> </span>
|
|
2070
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2071
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2072
|
-
<span class="cline-any cline-no"> </span>
|
|
2073
|
-
<span class="cline-any cline-no"> </span>
|
|
2074
|
-
<span class="cline-any cline-no"> </span>
|
|
2075
|
-
<span class="cline-any cline-no"> </span>
|
|
2076
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2077
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2078
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2079
|
-
<span class="cline-any cline-no"> </span>
|
|
2080
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2081
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2082
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2083
|
-
<span class="cline-any cline-no"> </span>
|
|
2084
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2085
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2086
|
-
<span class="cline-any cline-no"> </span>
|
|
2087
|
-
<span class="cline-any cline-no"> </span>
|
|
2088
|
-
<span class="cline-any cline-no"> </span>
|
|
2089
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2090
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2091
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2092
|
-
<span class="cline-any cline-no"> </span>
|
|
2093
|
-
<span class="cline-any cline-no"> </span>
|
|
2094
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2095
|
-
<span class="cline-any cline-no"> </span>
|
|
2096
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2097
|
-
<span class="cline-any cline-no"> </span>
|
|
2098
|
-
<span class="cline-any cline-no"> </span>
|
|
2099
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2100
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2101
|
-
<span class="cline-any cline-no"> </span>
|
|
2102
|
-
<span class="cline-any cline-no"> </span>
|
|
2103
|
-
<span class="cline-any cline-no"> </span>
|
|
2104
|
-
<span class="cline-any cline-no"> </span>
|
|
2105
|
-
<span class="cline-any cline-no"> </span>
|
|
2106
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2107
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2108
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2109
|
-
<span class="cline-any cline-no"> </span>
|
|
2110
|
-
<span class="cline-any cline-no"> </span>
|
|
2111
|
-
<span class="cline-any cline-no"> </span>
|
|
2112
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2113
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2114
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2115
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2116
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2117
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2118
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2119
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2120
|
-
<span class="cline-any cline-no"> </span>
|
|
2121
|
-
<span class="cline-any cline-no"> </span>
|
|
2122
|
-
<span class="cline-any cline-no"> </span>
|
|
2123
|
-
<span class="cline-any cline-no"> </span>
|
|
2124
|
-
<span class="cline-any cline-no"> </span>
|
|
2125
|
-
<span class="cline-any cline-no"> </span>
|
|
2126
|
-
<span class="cline-any cline-no"> </span>
|
|
2127
|
-
<span class="cline-any cline-no"> </span>
|
|
2128
|
-
<span class="cline-any cline-no"> </span>
|
|
2129
|
-
<span class="cline-any cline-no"> </span>
|
|
2130
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2131
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2132
|
-
<span class="cline-any cline-no"> </span>
|
|
2133
|
-
<span class="cline-any cline-no"> </span>
|
|
2134
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2135
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2136
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2137
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2138
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2139
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2140
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2141
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2142
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2143
|
-
<span class="cline-any cline-no"> </span>
|
|
2144
|
-
<span class="cline-any cline-no"> </span>
|
|
2145
|
-
<span class="cline-any cline-no"> </span>
|
|
2146
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2147
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2148
|
-
<span class="cline-any cline-no"> </span>
|
|
2149
|
-
<span class="cline-any cline-no"> </span>
|
|
2150
|
-
<span class="cline-any cline-no"> </span>
|
|
2151
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2152
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2153
|
-
<span class="cline-any cline-no"> </span>
|
|
2154
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2155
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2156
|
-
<span class="cline-any cline-no"> </span>
|
|
2157
|
-
<span class="cline-any cline-no"> </span>
|
|
2158
|
-
<span class="cline-any cline-no"> </span>
|
|
2159
|
-
<span class="cline-any cline-no"> </span>
|
|
2160
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2161
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2162
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2163
|
-
<span class="cline-any cline-no"> </span>
|
|
2164
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2165
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2166
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2167
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2168
|
-
<span class="cline-any cline-no"> </span>
|
|
2169
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2170
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2171
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2172
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2173
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2174
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2175
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2176
|
-
<span class="cline-any cline-no"> </span>
|
|
2177
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2178
|
-
<span class="cline-any cline-no"> </span>
|
|
2179
|
-
<span class="cline-any cline-no"> </span>
|
|
2180
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2181
|
-
<span class="cline-any cline-no"> </span>
|
|
2182
|
-
<span class="cline-any cline-no"> </span>
|
|
2183
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2184
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2185
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2186
|
-
<span class="cline-any cline-no"> </span>
|
|
2187
|
-
<span class="cline-any cline-no"> </span>
|
|
2188
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2189
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2190
|
-
<span class="cline-any cline-no"> </span>
|
|
2191
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2192
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2193
|
-
<span class="cline-any cline-no"> </span>
|
|
2194
|
-
<span class="cline-any cline-no"> </span>
|
|
2195
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2196
|
-
<span class="cline-any cline-no"> </span>
|
|
2197
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2198
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2199
|
-
<span class="cline-any cline-no"> </span>
|
|
2200
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2201
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2202
|
-
<span class="cline-any cline-no"> </span>
|
|
2203
|
-
<span class="cline-any cline-no"> </span>
|
|
2204
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2205
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2206
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2207
|
-
<span class="cline-any cline-no"> </span>
|
|
2208
|
-
<span class="cline-any cline-no"> </span>
|
|
2209
|
-
<span class="cline-any cline-no"> </span>
|
|
2210
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2211
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2212
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2213
|
-
<span class="cline-any cline-no"> </span>
|
|
2214
|
-
<span class="cline-any cline-no"> </span>
|
|
2215
|
-
<span class="cline-any cline-no"> </span>
|
|
2216
|
-
<span class="cline-any cline-no"> </span>
|
|
2217
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2218
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2219
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2220
|
-
<span class="cline-any cline-no"> </span>
|
|
2221
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2222
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2223
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2224
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2225
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2226
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2227
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2228
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2229
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2230
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2231
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2232
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2233
|
-
<span class="cline-any cline-no"> </span>
|
|
2234
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2235
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2236
|
-
<span class="cline-any cline-no"> </span>
|
|
2237
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2238
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2239
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2240
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import * as fs from 'fs';
|
|
2241
|
-
import * as path from 'path';
|
|
2242
|
-
import * as os from 'os';
|
|
2243
|
-
import { spawn } from 'child_process';
|
|
2244
|
-
import { getDatabaseManager } from './core-bridge';
|
|
2245
|
-
import { detectPortInUse, getProcessOnPort, killProcessOnPort, extractPortFromError } from './port-utils';
|
|
2246
|
-
|
|
2247
|
-
export interface ScriptInfo {
|
|
2248
|
-
name: string;
|
|
2249
|
-
command: string;
|
|
2250
|
-
runner: string;
|
|
2251
|
-
projectType: string;
|
|
2252
|
-
}
|
|
2253
|
-
|
|
2254
|
-
export type ProjectType = 'node' | 'python' | 'rust' | 'go' | 'makefile' | 'unknown';
|
|
2255
|
-
|
|
2256
|
-
export interface ProjectScripts {
|
|
2257
|
-
type: ProjectType;
|
|
2258
|
-
scripts: Map<string, ScriptInfo>;
|
|
2259
|
-
}
|
|
2260
|
-
|
|
2261
|
-
/**
|
|
2262
|
-
* Detect the project type based on files in the directory
|
|
2263
|
-
*/
|
|
2264
|
-
export function detectProjectType(projectPath: string): ProjectType {
|
|
2265
|
-
if (fs.existsSync(path.join(projectPath, 'package.json'))) {
|
|
2266
|
-
return 'node';
|
|
2267
|
-
}
|
|
2268
|
-
if (fs.existsSync(path.join(projectPath, 'pyproject.toml'))) {
|
|
2269
|
-
return 'python';
|
|
2270
|
-
}
|
|
2271
|
-
if (fs.existsSync(path.join(projectPath, 'Cargo.toml'))) {
|
|
2272
|
-
return 'rust';
|
|
2273
|
-
}
|
|
2274
|
-
if (fs.existsSync(path.join(projectPath, 'go.mod'))) {
|
|
2275
|
-
return 'go';
|
|
2276
|
-
}
|
|
2277
|
-
if (fs.existsSync(path.join(projectPath, 'Makefile')) || fs.existsSync(path.join(projectPath, 'makefile'))) {
|
|
2278
|
-
return 'makefile';
|
|
2279
|
-
}
|
|
2280
|
-
return 'unknown';
|
|
2281
|
-
}
|
|
2282
|
-
|
|
2283
|
-
/**
|
|
2284
|
-
* Parse scripts from package.json (Node.js)
|
|
2285
|
-
*/
|
|
2286
|
-
function parseNodeScripts(projectPath: string): Map<string, ScriptInfo> {
|
|
2287
|
-
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
2288
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(packageJsonPath)) {
|
|
2289
|
-
<span class="cstat-no" title="statement not covered" > return new Map();</span>
|
|
2290
|
-
}
|
|
2291
|
-
|
|
2292
|
-
try {
|
|
2293
|
-
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
2294
|
-
const scripts = packageJson.scripts || {};
|
|
2295
|
-
const scriptMap = new Map<string, ScriptInfo>();
|
|
2296
|
-
|
|
2297
|
-
for (const [name, command] of Object.entries(scripts)) {
|
|
2298
|
-
if (typeof command === 'string') {
|
|
2299
|
-
scriptMap.set(name, {
|
|
2300
|
-
name,
|
|
2301
|
-
command: command as string,
|
|
2302
|
-
runner: 'npm',
|
|
2303
|
-
projectType: 'node',
|
|
2304
|
-
});
|
|
2305
|
-
}
|
|
2306
|
-
}
|
|
2307
|
-
|
|
2308
|
-
return scriptMap;
|
|
2309
|
-
} catch (error) {
|
|
2310
|
-
return new Map();
|
|
2311
|
-
}
|
|
2312
|
-
}
|
|
2313
|
-
|
|
2314
|
-
/**
|
|
2315
|
-
* Parse scripts from pyproject.toml (Python)
|
|
2316
|
-
*/
|
|
2317
|
-
function parsePythonScripts(projectPath: string): Map<string, ScriptInfo> {
|
|
2318
|
-
const pyprojectPath = path.join(projectPath, 'pyproject.toml');
|
|
2319
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(pyprojectPath)) {
|
|
2320
|
-
<span class="cstat-no" title="statement not covered" > return new Map();</span>
|
|
2321
|
-
}
|
|
2322
|
-
|
|
2323
|
-
try {
|
|
2324
|
-
const content = fs.readFileSync(pyprojectPath, 'utf-8');
|
|
2325
|
-
const scriptMap = new Map<string, ScriptInfo>();
|
|
2326
|
-
|
|
2327
|
-
// Simple TOML parsing for [project.scripts] section
|
|
2328
|
-
// This is a basic implementation - for production, consider using a TOML parser
|
|
2329
|
-
const scriptsMatch = content.match(/\[project\.scripts\]\s*\n((?:[^\[]+\n?)+)/);
|
|
2330
|
-
if (scriptsMatch) {
|
|
2331
|
-
const scriptsSection = scriptsMatch[1];
|
|
2332
|
-
const scriptLines = scriptsSection.split('\n');
|
|
2333
|
-
|
|
2334
|
-
for (const line of scriptLines) {
|
|
2335
|
-
const match = line.match(/^(\w+)\s*=\s*["']([^"']+)["']/);
|
|
2336
|
-
if (match) {
|
|
2337
|
-
const [, name, command] = match;
|
|
2338
|
-
scriptMap.set(name, {
|
|
2339
|
-
name,
|
|
2340
|
-
command,
|
|
2341
|
-
runner: 'python',
|
|
2342
|
-
projectType: 'python',
|
|
2343
|
-
});
|
|
2344
|
-
}
|
|
2345
|
-
}
|
|
2346
|
-
}
|
|
2347
|
-
|
|
2348
|
-
// Also check for [tool.poetry.scripts]
|
|
2349
|
-
const poetryMatch = content.match(/\[tool\.poetry\.scripts\]\s*\n((?:[^\[]+\n?)+)/);
|
|
2350
|
-
if (poetryMatch) {
|
|
2351
|
-
const scriptsSection = poetryMatch[1];
|
|
2352
|
-
const scriptLines = scriptsSection.split('\n');
|
|
2353
|
-
|
|
2354
|
-
for (const line of scriptLines) {
|
|
2355
|
-
const match = line.match(/^(\w+)\s*=\s*["']([^"']+)["']/);
|
|
2356
|
-
if (match) {
|
|
2357
|
-
const [, name, command] = match;
|
|
2358
|
-
scriptMap.set(name, {
|
|
2359
|
-
name,
|
|
2360
|
-
command,
|
|
2361
|
-
runner: 'poetry',
|
|
2362
|
-
projectType: 'python',
|
|
2363
|
-
});
|
|
2364
|
-
}
|
|
2365
|
-
}
|
|
2366
|
-
}
|
|
2367
|
-
|
|
2368
|
-
return scriptMap;
|
|
2369
|
-
} catch (error) {
|
|
2370
|
-
<span class="cstat-no" title="statement not covered" > return new Map();</span>
|
|
2371
|
-
}
|
|
2372
|
-
}
|
|
2373
|
-
|
|
2374
|
-
/**
|
|
2375
|
-
* Parse scripts from Cargo.toml (Rust)
|
|
2376
|
-
* Cargo doesn't have a scripts section, but we can detect common cargo commands
|
|
2377
|
-
*/
|
|
2378
|
-
function parseRustScripts(projectPath: string): Map<string, ScriptInfo> {
|
|
2379
|
-
const scriptMap = new Map<string, ScriptInfo>();
|
|
2380
|
-
|
|
2381
|
-
// Common cargo commands that can be run
|
|
2382
|
-
const commonCommands = [
|
|
2383
|
-
{ name: 'build', command: 'cargo build', runner: 'cargo' },
|
|
2384
|
-
{ name: 'run', command: 'cargo run', runner: 'cargo' },
|
|
2385
|
-
{ name: 'test', command: 'cargo test', runner: 'cargo' },
|
|
2386
|
-
{ name: 'check', command: 'cargo check', runner: 'cargo' },
|
|
2387
|
-
{ name: 'clippy', command: 'cargo clippy', runner: 'cargo' },
|
|
2388
|
-
{ name: 'fmt', command: 'cargo fmt', runner: 'cargo' },
|
|
2389
|
-
];
|
|
2390
|
-
|
|
2391
|
-
for (const cmd of commonCommands) {
|
|
2392
|
-
scriptMap.set(cmd.name, {
|
|
2393
|
-
name: cmd.name,
|
|
2394
|
-
command: cmd.command,
|
|
2395
|
-
runner: cmd.runner,
|
|
2396
|
-
projectType: 'rust',
|
|
2397
|
-
});
|
|
2398
|
-
}
|
|
2399
|
-
|
|
2400
|
-
return scriptMap;
|
|
2401
|
-
}
|
|
2402
|
-
|
|
2403
|
-
/**
|
|
2404
|
-
* Parse Makefile targets
|
|
2405
|
-
*/
|
|
2406
|
-
function parseMakefileScripts(projectPath: string): Map<string, ScriptInfo> {
|
|
2407
|
-
const makefilePath = fs.existsSync(path.join(projectPath, 'Makefile'))
|
|
2408
|
-
? path.join(projectPath, 'Makefile')
|
|
2409
|
-
: path.join(projectPath, 'makefile');
|
|
2410
|
-
|
|
2411
|
-
if (!fs.existsSync(makefilePath)) {
|
|
2412
|
-
return new Map();
|
|
2413
|
-
}
|
|
2414
|
-
|
|
2415
|
-
try {
|
|
2416
|
-
const content = fs.readFileSync(makefilePath, 'utf-8');
|
|
2417
|
-
const scriptMap = new Map<string, ScriptInfo>();
|
|
2418
|
-
|
|
2419
|
-
// Parse Makefile targets (basic implementation)
|
|
2420
|
-
// Match lines that look like targets: target: dependencies
|
|
2421
|
-
const targetRegex = /^([a-zA-Z0-9_-]+)\s*:.*$/gm;
|
|
2422
|
-
let match;
|
|
2423
|
-
|
|
2424
|
-
while ((match = targetRegex.exec(content)) !== null) {
|
|
2425
|
-
const targetName = match[1];
|
|
2426
|
-
// Skip special targets
|
|
2427
|
-
if (!targetName.startsWith('.') && targetName !== 'PHONY') {
|
|
2428
|
-
scriptMap.set(targetName, {
|
|
2429
|
-
name: targetName,
|
|
2430
|
-
command: `make ${targetName}`,
|
|
2431
|
-
runner: 'make',
|
|
2432
|
-
projectType: 'makefile',
|
|
2433
|
-
});
|
|
2434
|
-
}
|
|
2435
|
-
}
|
|
2436
|
-
|
|
2437
|
-
return scriptMap;
|
|
2438
|
-
} catch (error) {
|
|
2439
|
-
<span class="cstat-no" title="statement not covered" > return new Map();</span>
|
|
2440
|
-
}
|
|
2441
|
-
}
|
|
2442
|
-
|
|
2443
|
-
/**
|
|
2444
|
-
* Get all available scripts for a project
|
|
2445
|
-
*/
|
|
2446
|
-
export function getProjectScripts(projectPath: string): ProjectScripts {
|
|
2447
|
-
const type = detectProjectType(projectPath);
|
|
2448
|
-
let scripts = new Map<string, ScriptInfo>();
|
|
2449
|
-
|
|
2450
|
-
switch (type) {
|
|
2451
|
-
case 'node':
|
|
2452
|
-
scripts = parseNodeScripts(projectPath);
|
|
2453
|
-
break;
|
|
2454
|
-
case 'python':
|
|
2455
|
-
scripts = parsePythonScripts(projectPath);
|
|
2456
|
-
break;
|
|
2457
|
-
case 'rust':
|
|
2458
|
-
scripts = parseRustScripts(projectPath);
|
|
2459
|
-
break;
|
|
2460
|
-
case 'makefile':
|
|
2461
|
-
scripts = parseMakefileScripts(projectPath);
|
|
2462
|
-
break;
|
|
2463
|
-
case 'go':
|
|
2464
|
-
// Go projects typically use Makefile or direct go commands
|
|
2465
|
-
// Check for Makefile first, otherwise provide common go commands
|
|
2466
|
-
const makefileScripts = parseMakefileScripts(projectPath);
|
|
2467
|
-
if (makefileScripts.size > 0) {
|
|
2468
|
-
scripts = makefileScripts;
|
|
2469
|
-
} else {
|
|
2470
|
-
// Common go commands
|
|
2471
|
-
scripts.set('run', {
|
|
2472
|
-
name: 'run',
|
|
2473
|
-
command: 'go run .',
|
|
2474
|
-
runner: 'go',
|
|
2475
|
-
projectType: 'go',
|
|
2476
|
-
});
|
|
2477
|
-
scripts.set('build', {
|
|
2478
|
-
name: 'build',
|
|
2479
|
-
command: 'go build',
|
|
2480
|
-
runner: 'go',
|
|
2481
|
-
projectType: 'go',
|
|
2482
|
-
});
|
|
2483
|
-
scripts.set('test', {
|
|
2484
|
-
name: 'test',
|
|
2485
|
-
command: 'go test ./...',
|
|
2486
|
-
runner: 'go',
|
|
2487
|
-
projectType: 'go',
|
|
2488
|
-
});
|
|
2489
|
-
}
|
|
2490
|
-
break;
|
|
2491
|
-
default:
|
|
2492
|
-
// For unknown projects, check for Makefile as fallback
|
|
2493
|
-
scripts = parseMakefileScripts(projectPath);
|
|
2494
|
-
break;
|
|
2495
|
-
}
|
|
2496
|
-
|
|
2497
|
-
return {
|
|
2498
|
-
type,
|
|
2499
|
-
scripts,
|
|
2500
|
-
};
|
|
2501
|
-
}
|
|
2502
|
-
|
|
2503
|
-
/**
|
|
2504
|
-
* Handle port conflict - prompt user or auto-kill based on force flag
|
|
2505
|
-
*/
|
|
2506
|
-
async function <span class="fstat-no" title="function not covered" >handlePortConflict(</span>
|
|
2507
|
-
port: number,
|
|
2508
|
-
projectName: string,
|
|
2509
|
-
force: boolean
|
|
2510
|
-
): Promise<boolean> {
|
|
2511
|
-
const processInfo = <span class="cstat-no" title="statement not covered" >await getProcessOnPort(port);</span>
|
|
2512
|
-
|
|
2513
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!processInfo) {</span>
|
|
2514
|
-
<span class="cstat-no" title="statement not covered" > console.error(`Port ${port} appears to be in use, but couldn't identify the process.`);</span>
|
|
2515
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2516
|
-
}
|
|
2517
|
-
|
|
2518
|
-
<span class="cstat-no" title="statement not covered" > console.error(`\nā ļø Port ${port} is already in use by process ${processInfo.pid} (${processInfo.command})`);</span>
|
|
2519
|
-
|
|
2520
|
-
<span class="cstat-no" title="statement not covered" > if (force) {</span>
|
|
2521
|
-
<span class="cstat-no" title="statement not covered" > console.log(`Killing process ${processInfo.pid} on port ${port}...`);</span>
|
|
2522
|
-
const killed = <span class="cstat-no" title="statement not covered" >await killProcessOnPort(port);</span>
|
|
2523
|
-
<span class="cstat-no" title="statement not covered" > if (killed) {</span>
|
|
2524
|
-
<span class="cstat-no" title="statement not covered" > console.log(`ā Process killed. Retrying...\n`);</span>
|
|
2525
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
2526
|
-
} else {
|
|
2527
|
-
<span class="cstat-no" title="statement not covered" > console.error(`Failed to kill process on port ${port}`);</span>
|
|
2528
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2529
|
-
}
|
|
2530
|
-
} else {
|
|
2531
|
-
const inquirer = <span class="cstat-no" title="statement not covered" >(<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >await import('</span>inquirer'))</span>.default;</span>
|
|
2532
|
-
const answer = <span class="cstat-no" title="statement not covered" >await inquirer.prompt([</span>
|
|
2533
|
-
{
|
|
2534
|
-
type: 'confirm',
|
|
2535
|
-
name: 'kill',
|
|
2536
|
-
message: `Kill process ${processInfo.pid} (${processInfo.command}) and continue?`,
|
|
2537
|
-
default: false,
|
|
2538
|
-
},
|
|
2539
|
-
]);
|
|
2540
|
-
|
|
2541
|
-
<span class="cstat-no" title="statement not covered" > if (answer.kill) {</span>
|
|
2542
|
-
const killed = <span class="cstat-no" title="statement not covered" >await killProcessOnPort(port);</span>
|
|
2543
|
-
<span class="cstat-no" title="statement not covered" > if (killed) {</span>
|
|
2544
|
-
<span class="cstat-no" title="statement not covered" > console.log(`ā Process killed. Retrying...\n`);</span>
|
|
2545
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
2546
|
-
} else {
|
|
2547
|
-
<span class="cstat-no" title="statement not covered" > console.error(`Failed to kill process on port ${port}`);</span>
|
|
2548
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2549
|
-
}
|
|
2550
|
-
} else {
|
|
2551
|
-
<span class="cstat-no" title="statement not covered" > console.log('Cancelled.');</span>
|
|
2552
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2553
|
-
}
|
|
2554
|
-
}
|
|
2555
|
-
}
|
|
2556
|
-
|
|
2557
|
-
/**
|
|
2558
|
-
* Check ports proactively before script execution
|
|
2559
|
-
*/
|
|
2560
|
-
async function <span class="fstat-no" title="function not covered" >checkPortsBeforeExecution(</span>
|
|
2561
|
-
projectPath: string,
|
|
2562
|
-
scriptName: string,
|
|
2563
|
-
force: boolean
|
|
2564
|
-
): Promise<boolean> {
|
|
2565
|
-
const db = <span class="cstat-no" title="statement not covered" >getDatabaseManager();</span>
|
|
2566
|
-
const project = <span class="cstat-no" title="statement not covered" >db.getProjectByPath(projectPath);</span>
|
|
2567
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!project) <span class="cstat-no" title="statement not covered" >return true; </span></span>// Can't check if project not in DB
|
|
2568
|
-
|
|
2569
|
-
const ports = <span class="cstat-no" title="statement not covered" >db.getProjectPortsByScript(project.id, scriptName);</span>
|
|
2570
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ports.length === 0) {</span>
|
|
2571
|
-
// Also check ports without script name (general project ports)
|
|
2572
|
-
const allPorts = <span class="cstat-no" title="statement not covered" >db.getProjectPorts(project.id);</span>
|
|
2573
|
-
<span class="cstat-no" title="statement not covered" > for (const portInfo of allPorts) {</span>
|
|
2574
|
-
const inUse = <span class="cstat-no" title="statement not covered" >await detectPortInUse(portInfo.port);</span>
|
|
2575
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (inUse) {</span>
|
|
2576
|
-
<span class="cstat-no" title="statement not covered" > return await handlePortConflict(portInfo.port, project.name, force);</span>
|
|
2577
|
-
}
|
|
2578
|
-
}
|
|
2579
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
2580
|
-
}
|
|
2581
|
-
|
|
2582
|
-
<span class="cstat-no" title="statement not covered" > for (const portInfo of ports) {</span>
|
|
2583
|
-
const inUse = <span class="cstat-no" title="statement not covered" >await detectPortInUse(portInfo.port);</span>
|
|
2584
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (inUse) {</span>
|
|
2585
|
-
<span class="cstat-no" title="statement not covered" > return await handlePortConflict(portInfo.port, project.name, force);</span>
|
|
2586
|
-
}
|
|
2587
|
-
}
|
|
2588
|
-
|
|
2589
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
2590
|
-
}
|
|
2591
|
-
|
|
2592
|
-
/**
|
|
2593
|
-
* Execute a script in a project directory
|
|
2594
|
-
*/
|
|
2595
|
-
export function <span class="fstat-no" title="function not covered" >runScript(</span>
|
|
2596
|
-
projectPath: string,
|
|
2597
|
-
scriptName: string,
|
|
2598
|
-
args: string[] = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
|
|
2599
|
-
force: boolean = <span class="branch-0 cbranch-no" title="branch not covered" >false</span>
|
|
2600
|
-
): Promise<number> {
|
|
2601
|
-
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >async </span>(resolve, reject) => {</span>
|
|
2602
|
-
const projectScripts = <span class="cstat-no" title="statement not covered" >getProjectScripts(projectPath);</span>
|
|
2603
|
-
const script = <span class="cstat-no" title="statement not covered" >projectScripts.scripts.get(scriptName);</span>
|
|
2604
|
-
|
|
2605
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!script) {</span>
|
|
2606
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error(`Script "${scriptName}" not found in project`));</span>
|
|
2607
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2608
|
-
}
|
|
2609
|
-
|
|
2610
|
-
// Proactive port checking
|
|
2611
|
-
const canProceed = <span class="cstat-no" title="statement not covered" >await checkPortsBeforeExecution(projectPath, scriptName, force);</span>
|
|
2612
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!canProceed) {</span>
|
|
2613
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error('Port conflict not resolved'));</span>
|
|
2614
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2615
|
-
}
|
|
2616
|
-
|
|
2617
|
-
let command: string;
|
|
2618
|
-
let commandArgs: string[];
|
|
2619
|
-
|
|
2620
|
-
<span class="cstat-no" title="statement not covered" > switch (script.runner) {</span>
|
|
2621
|
-
case 'npm':
|
|
2622
|
-
<span class="cstat-no" title="statement not covered" > command = 'npm';</span>
|
|
2623
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['run', scriptName, ...args];</span>
|
|
2624
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2625
|
-
case 'yarn':
|
|
2626
|
-
<span class="cstat-no" title="statement not covered" > command = 'yarn';</span>
|
|
2627
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = [scriptName, ...args];</span>
|
|
2628
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2629
|
-
case 'pnpm':
|
|
2630
|
-
<span class="cstat-no" title="statement not covered" > command = 'pnpm';</span>
|
|
2631
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['run', scriptName, ...args];</span>
|
|
2632
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2633
|
-
case 'python':
|
|
2634
|
-
<span class="cstat-no" title="statement not covered" > command = 'python';</span>
|
|
2635
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['-m', ...script.command.split(' ').slice(1), ...args];</span>
|
|
2636
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2637
|
-
case 'poetry':
|
|
2638
|
-
<span class="cstat-no" title="statement not covered" > command = 'poetry';</span>
|
|
2639
|
-
// For poetry, the command is already the module path, use 'run' to execute it
|
|
2640
|
-
const modulePath = <span class="cstat-no" title="statement not covered" >script.command.split(' ').slice(1).join(' ');</span>
|
|
2641
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['run', 'python', '-m', modulePath, ...args];</span>
|
|
2642
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2643
|
-
case 'cargo':
|
|
2644
|
-
<span class="cstat-no" title="statement not covered" > command = 'cargo';</span>
|
|
2645
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = scriptName === 'run' ? ['run', ...args] : [scriptName, ...args];</span>
|
|
2646
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2647
|
-
case 'go':
|
|
2648
|
-
<span class="cstat-no" title="statement not covered" > command = 'go';</span>
|
|
2649
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = script.command.split(' ').slice(1);</span>
|
|
2650
|
-
<span class="cstat-no" title="statement not covered" > if (scriptName === 'run' && args.length > 0) {</span>
|
|
2651
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['run', ...args];</span>
|
|
2652
|
-
} else {
|
|
2653
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = [...commandArgs, ...args];</span>
|
|
2654
|
-
}
|
|
2655
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2656
|
-
case 'make':
|
|
2657
|
-
<span class="cstat-no" title="statement not covered" > command = 'make';</span>
|
|
2658
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = [scriptName, ...args];</span>
|
|
2659
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2660
|
-
default:
|
|
2661
|
-
// Fallback: try to run the command directly
|
|
2662
|
-
const parts = <span class="cstat-no" title="statement not covered" >script.command.split(' ');</span>
|
|
2663
|
-
<span class="cstat-no" title="statement not covered" > command = parts[0];</span>
|
|
2664
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = [...parts.slice(1), ...args];</span>
|
|
2665
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2666
|
-
}
|
|
2667
|
-
|
|
2668
|
-
<span class="cstat-no" title="statement not covered" > console.log(`Running: ${command} ${commandArgs.join(' ')}`);</span>
|
|
2669
|
-
<span class="cstat-no" title="statement not covered" > console.log(`In directory: ${projectPath}\n`);</span>
|
|
2670
|
-
|
|
2671
|
-
// Capture stderr for reactive port conflict detection
|
|
2672
|
-
let stderrOutput = <span class="cstat-no" title="statement not covered" >'';</span>
|
|
2673
|
-
let stdoutOutput = <span class="cstat-no" title="statement not covered" >'';</span>
|
|
2674
|
-
|
|
2675
|
-
const child = <span class="cstat-no" title="statement not covered" >spawn(command, commandArgs, {</span>
|
|
2676
|
-
cwd: projectPath,
|
|
2677
|
-
stdio: ['inherit', 'pipe', 'pipe'],
|
|
2678
|
-
shell: process.platform === 'win32',
|
|
2679
|
-
});
|
|
2680
|
-
|
|
2681
|
-
// Capture output for error analysis
|
|
2682
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (child.stdout) {</span>
|
|
2683
|
-
<span class="cstat-no" title="statement not covered" > child.stdout.on('data', <span class="fstat-no" title="function not covered" >(d</span>ata: Buffer) => {</span>
|
|
2684
|
-
<span class="cstat-no" title="statement not covered" > stdoutOutput += data.toString();</span>
|
|
2685
|
-
<span class="cstat-no" title="statement not covered" > process.stdout.write(data);</span>
|
|
2686
|
-
});
|
|
2687
|
-
}
|
|
2688
|
-
|
|
2689
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (child.stderr) {</span>
|
|
2690
|
-
<span class="cstat-no" title="statement not covered" > child.stderr.on('data', <span class="fstat-no" title="function not covered" >(d</span>ata: Buffer) => {</span>
|
|
2691
|
-
<span class="cstat-no" title="statement not covered" > stderrOutput += data.toString();</span>
|
|
2692
|
-
<span class="cstat-no" title="statement not covered" > process.stderr.write(data);</span>
|
|
2693
|
-
});
|
|
2694
|
-
}
|
|
2695
|
-
|
|
2696
|
-
<span class="cstat-no" title="statement not covered" > child.on('close', <span class="fstat-no" title="function not covered" >async </span>(code) => {</span>
|
|
2697
|
-
<span class="cstat-no" title="statement not covered" > if (code === 0) {</span>
|
|
2698
|
-
<span class="cstat-no" title="statement not covered" > resolve(0);</span>
|
|
2699
|
-
} else {
|
|
2700
|
-
// Reactive port conflict detection
|
|
2701
|
-
const errorOutput = <span class="cstat-no" title="statement not covered" >stderrOutput + stdoutOutput;</span>
|
|
2702
|
-
const port = <span class="cstat-no" title="statement not covered" >extractPortFromError(errorOutput);</span>
|
|
2703
|
-
|
|
2704
|
-
<span class="cstat-no" title="statement not covered" > if (port) {</span>
|
|
2705
|
-
const db = <span class="cstat-no" title="statement not covered" >getDatabaseManager();</span>
|
|
2706
|
-
const project = <span class="cstat-no" title="statement not covered" >db.getProjectByPath(projectPath);</span>
|
|
2707
|
-
const projectName = <span class="cstat-no" title="statement not covered" >project?.name || 'project';</span>
|
|
2708
|
-
|
|
2709
|
-
const resolved = <span class="cstat-no" title="statement not covered" >await handlePortConflict(port, projectName, force);</span>
|
|
2710
|
-
<span class="cstat-no" title="statement not covered" > if (resolved) {</span>
|
|
2711
|
-
// Retry script execution
|
|
2712
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2713
|
-
const retryResult = <span class="cstat-no" title="statement not covered" >await runScript(projectPath, scriptName, args, force);</span>
|
|
2714
|
-
<span class="cstat-no" title="statement not covered" > resolve(retryResult);</span>
|
|
2715
|
-
} catch (retryError) {
|
|
2716
|
-
<span class="cstat-no" title="statement not covered" > reject(retryError);</span>
|
|
2717
|
-
}
|
|
2718
|
-
} else {
|
|
2719
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error(`Script exited with code ${code} (port ${port} conflict)`));</span>
|
|
2720
|
-
}
|
|
2721
|
-
} else {
|
|
2722
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error(`Script exited with code ${code}`));</span>
|
|
2723
|
-
}
|
|
2724
|
-
}
|
|
2725
|
-
});
|
|
2726
|
-
|
|
2727
|
-
<span class="cstat-no" title="statement not covered" > child.on('error', <span class="fstat-no" title="function not covered" >(e</span>rror) => {</span>
|
|
2728
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error(`Failed to execute script: ${error.message}`));</span>
|
|
2729
|
-
});
|
|
2730
|
-
});
|
|
2731
|
-
}
|
|
2732
|
-
|
|
2733
|
-
export interface BackgroundProcess {
|
|
2734
|
-
pid: number;
|
|
2735
|
-
projectPath: string;
|
|
2736
|
-
projectName: string;
|
|
2737
|
-
scriptName: string;
|
|
2738
|
-
command: string;
|
|
2739
|
-
startedAt: number;
|
|
2740
|
-
logFile: string;
|
|
2741
|
-
detectedUrls?: string[];
|
|
2742
|
-
detectedPorts?: number[];
|
|
2743
|
-
}
|
|
2744
|
-
|
|
2745
|
-
/**
|
|
2746
|
-
* Get the path to the processes file
|
|
2747
|
-
*/
|
|
2748
|
-
function getProcessesFilePath(): string {
|
|
2749
|
-
const dataDir = path.join(os.homedir(), '.projax');
|
|
2750
|
-
if (!fs.existsSync(dataDir)) {
|
|
2751
|
-
fs.mkdirSync(dataDir, { recursive: true });
|
|
2752
|
-
}
|
|
2753
|
-
return path.join(dataDir, 'processes.json');
|
|
2754
|
-
}
|
|
2755
|
-
|
|
2756
|
-
/**
|
|
2757
|
-
* Load running processes from disk
|
|
2758
|
-
*/
|
|
2759
|
-
export function loadProcesses(): BackgroundProcess[] {
|
|
2760
|
-
const filePath = getProcessesFilePath();
|
|
2761
|
-
if (!fs.existsSync(filePath)) {
|
|
2762
|
-
return [];
|
|
2763
|
-
}
|
|
2764
|
-
try {
|
|
2765
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
2766
|
-
return JSON.parse(content);
|
|
2767
|
-
} catch (error) {
|
|
2768
|
-
return [];
|
|
2769
|
-
}
|
|
2770
|
-
}
|
|
2771
|
-
|
|
2772
|
-
/**
|
|
2773
|
-
* Save running processes to disk
|
|
2774
|
-
*/
|
|
2775
|
-
function saveProcesses(processes: BackgroundProcess[]): void {
|
|
2776
|
-
const filePath = getProcessesFilePath();
|
|
2777
|
-
fs.writeFileSync(filePath, JSON.stringify(processes, null, 2));
|
|
2778
|
-
}
|
|
2779
|
-
|
|
2780
|
-
/**
|
|
2781
|
-
* Add a process to the tracking file
|
|
2782
|
-
*/
|
|
2783
|
-
function <span class="fstat-no" title="function not covered" >addProcess(</span>process: BackgroundProcess): void {
|
|
2784
|
-
const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
|
|
2785
|
-
<span class="cstat-no" title="statement not covered" > processes.push(process);</span>
|
|
2786
|
-
<span class="cstat-no" title="statement not covered" > saveProcesses(processes);</span>
|
|
2787
|
-
}
|
|
2788
|
-
|
|
2789
|
-
/**
|
|
2790
|
-
* Remove a process from tracking by PID
|
|
2791
|
-
*/
|
|
2792
|
-
export function removeProcess(pid: number): void {
|
|
2793
|
-
const processes = loadProcesses();
|
|
2794
|
-
const filtered = processes.filter(p => p.pid !== pid);
|
|
2795
|
-
saveProcesses(filtered);
|
|
2796
|
-
}
|
|
2797
|
-
|
|
2798
|
-
/**
|
|
2799
|
-
* Get all running processes for a project
|
|
2800
|
-
*/
|
|
2801
|
-
export function getProjectProcesses(projectPath: string): BackgroundProcess[] {
|
|
2802
|
-
const processes = loadProcesses();
|
|
2803
|
-
return processes.filter(p => p.projectPath === projectPath);
|
|
2804
|
-
}
|
|
2805
|
-
|
|
2806
|
-
/**
|
|
2807
|
-
* Check if a process is still running
|
|
2808
|
-
*/
|
|
2809
|
-
async function <span class="fstat-no" title="function not covered" >isProcessRunning(</span>pid: number): Promise<boolean> {
|
|
2810
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2811
|
-
<span class="cstat-no" title="statement not covered" > if (os.platform() === 'win32') {</span>
|
|
2812
|
-
const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
|
|
2813
|
-
const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
|
|
2814
|
-
const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
|
|
2815
|
-
const { stdout } = <span class="cstat-no" title="statement not covered" >await execAsync(`tasklist /FI "PID eq ${pid}" /FO CSV /NH`);</span>
|
|
2816
|
-
<span class="cstat-no" title="statement not covered" > return stdout.includes(`"${pid}"`);</span>
|
|
2817
|
-
} else {
|
|
2818
|
-
// On Unix-like systems, kill with signal 0 checks if process exists
|
|
2819
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2820
|
-
<span class="cstat-no" title="statement not covered" > process.kill(pid, 0);</span>
|
|
2821
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
2822
|
-
} catch {
|
|
2823
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2824
|
-
}
|
|
2825
|
-
}
|
|
2826
|
-
} catch {
|
|
2827
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2828
|
-
}
|
|
2829
|
-
}
|
|
2830
|
-
|
|
2831
|
-
/**
|
|
2832
|
-
* Clean up dead processes from tracking
|
|
2833
|
-
*/
|
|
2834
|
-
async function <span class="fstat-no" title="function not covered" >cleanupDeadProcesses(</span>): Promise<void> {
|
|
2835
|
-
const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
|
|
2836
|
-
const aliveProcesses: BackgroundProcess[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2837
|
-
|
|
2838
|
-
<span class="cstat-no" title="statement not covered" > for (const proc of processes) {</span>
|
|
2839
|
-
const isAlive = <span class="cstat-no" title="statement not covered" >await isProcessRunning(proc.pid);</span>
|
|
2840
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isAlive) {</span>
|
|
2841
|
-
<span class="cstat-no" title="statement not covered" > aliveProcesses.push(proc);</span>
|
|
2842
|
-
}
|
|
2843
|
-
}
|
|
2844
|
-
|
|
2845
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (aliveProcesses.length !== processes.length) {</span>
|
|
2846
|
-
<span class="cstat-no" title="statement not covered" > saveProcesses(aliveProcesses);</span>
|
|
2847
|
-
}
|
|
2848
|
-
}
|
|
2849
|
-
|
|
2850
|
-
/**
|
|
2851
|
-
* Get all running processes (synchronous version that returns potentially stale data)
|
|
2852
|
-
*/
|
|
2853
|
-
export function <span class="fstat-no" title="function not covered" >getRunningProcesses(</span>): BackgroundProcess[] {
|
|
2854
|
-
<span class="cstat-no" title="statement not covered" > return loadProcesses();</span>
|
|
2855
|
-
}
|
|
2856
|
-
|
|
2857
|
-
/**
|
|
2858
|
-
* Get all running processes with cleanup (async version)
|
|
2859
|
-
*/
|
|
2860
|
-
export async function <span class="fstat-no" title="function not covered" >getRunningProcessesClean(</span>): Promise<BackgroundProcess[]> {
|
|
2861
|
-
<span class="cstat-no" title="statement not covered" > await cleanupDeadProcesses();</span>
|
|
2862
|
-
<span class="cstat-no" title="statement not covered" > return loadProcesses();</span>
|
|
2863
|
-
}
|
|
2864
|
-
|
|
2865
|
-
/**
|
|
2866
|
-
* Extract URLs from text output
|
|
2867
|
-
*/
|
|
2868
|
-
function <span class="fstat-no" title="function not covered" >extractUrlsFromOutput(</span>output: string): string[] {
|
|
2869
|
-
const urls: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2870
|
-
const urlPatterns = <span class="cstat-no" title="statement not covered" >[</span>
|
|
2871
|
-
/(?:Local|Network):\s*(https?:\/\/[^\s]+)/gi,
|
|
2872
|
-
/(?:https?:\/\/localhost:\d+)/gi,
|
|
2873
|
-
/(?:https?:\/\/127\.0\.0\.1:\d+)/gi,
|
|
2874
|
-
/(?:https?:\/\/0\.0\.0\.0:\d+)/gi,
|
|
2875
|
-
/(?:https?:\/\/[^\s:]+:\d+)/gi,
|
|
2876
|
-
];
|
|
2877
|
-
|
|
2878
|
-
<span class="cstat-no" title="statement not covered" > for (const pattern of urlPatterns) {</span>
|
|
2879
|
-
const matches = <span class="cstat-no" title="statement not covered" >output.matchAll(pattern);</span>
|
|
2880
|
-
<span class="cstat-no" title="statement not covered" > for (const match of matches) {</span>
|
|
2881
|
-
const url = <span class="cstat-no" title="statement not covered" >match[0] || match[1];</span>
|
|
2882
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (url && !urls.includes(url)) {</span>
|
|
2883
|
-
<span class="cstat-no" title="statement not covered" > urls.push(url);</span>
|
|
2884
|
-
}
|
|
2885
|
-
}
|
|
2886
|
-
}
|
|
2887
|
-
|
|
2888
|
-
<span class="cstat-no" title="statement not covered" > return urls;</span>
|
|
2889
|
-
}
|
|
2890
|
-
|
|
2891
|
-
/**
|
|
2892
|
-
* Update process with detected URLs and ports
|
|
2893
|
-
*/
|
|
2894
|
-
function <span class="fstat-no" title="function not covered" >updateProcessUrls(</span>pid: number, urls: string[]): void {
|
|
2895
|
-
const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
|
|
2896
|
-
const process = <span class="cstat-no" title="statement not covered" >processes.find(<span class="fstat-no" title="function not covered" >p </span>=> <span class="cstat-no" title="statement not covered" >p.pid === pid)</span>;</span>
|
|
2897
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (process) {</span>
|
|
2898
|
-
<span class="cstat-no" title="statement not covered" > process.detectedUrls = urls;</span>
|
|
2899
|
-
// Extract ports from URLs
|
|
2900
|
-
const ports = <span class="cstat-no" title="statement not covered" >new Set<number>();</span>
|
|
2901
|
-
<span class="cstat-no" title="statement not covered" > for (const url of urls) {</span>
|
|
2902
|
-
const match = <span class="cstat-no" title="statement not covered" >url.match(/:(\d+)/);</span>
|
|
2903
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (match) {</span>
|
|
2904
|
-
<span class="cstat-no" title="statement not covered" > ports.add(parseInt(match[1], 10));</span>
|
|
2905
|
-
}
|
|
2906
|
-
}
|
|
2907
|
-
<span class="cstat-no" title="statement not covered" > process.detectedPorts = Array.from(ports).sort(<span class="fstat-no" title="function not covered" >(a</span>, b) => <span class="cstat-no" title="statement not covered" >a - b)</span>;</span>
|
|
2908
|
-
<span class="cstat-no" title="statement not covered" > saveProcesses(processes);</span>
|
|
2909
|
-
}
|
|
2910
|
-
}
|
|
2911
|
-
|
|
2912
|
-
/**
|
|
2913
|
-
* Stop a script by PID
|
|
2914
|
-
*/
|
|
2915
|
-
export async function <span class="fstat-no" title="function not covered" >stopScript(</span>pid: number): Promise<boolean> {
|
|
2916
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2917
|
-
const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
|
|
2918
|
-
const processInfo = <span class="cstat-no" title="statement not covered" >processes.find(<span class="fstat-no" title="function not covered" >p </span>=> <span class="cstat-no" title="statement not covered" >p.pid === pid)</span>;</span>
|
|
2919
|
-
|
|
2920
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!processInfo) {</span>
|
|
2921
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2922
|
-
}
|
|
2923
|
-
|
|
2924
|
-
// Check if process is still running before trying to kill it
|
|
2925
|
-
let processExists = <span class="cstat-no" title="statement not covered" >false;</span>
|
|
2926
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2927
|
-
<span class="cstat-no" title="statement not covered" > if (os.platform() === 'win32') {</span>
|
|
2928
|
-
const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
|
|
2929
|
-
const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
|
|
2930
|
-
const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
|
|
2931
|
-
<span class="cstat-no" title="statement not covered" > await execAsync(`tasklist /FI "PID eq ${pid}" /FO CSV /NH`);</span>
|
|
2932
|
-
<span class="cstat-no" title="statement not covered" > processExists = true;</span>
|
|
2933
|
-
} else {
|
|
2934
|
-
const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
|
|
2935
|
-
const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
|
|
2936
|
-
const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
|
|
2937
|
-
<span class="cstat-no" title="statement not covered" > await execAsync(`ps -p ${pid} -o pid=`);</span>
|
|
2938
|
-
<span class="cstat-no" title="statement not covered" > processExists = true;</span>
|
|
2939
|
-
}
|
|
2940
|
-
} catch {
|
|
2941
|
-
// Process doesn't exist anymore
|
|
2942
|
-
<span class="cstat-no" title="statement not covered" > processExists = false;</span>
|
|
2943
|
-
}
|
|
2944
|
-
|
|
2945
|
-
// Try to kill the process (cross-platform)
|
|
2946
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (processExists) {</span>
|
|
2947
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2948
|
-
<span class="cstat-no" title="statement not covered" > if (os.platform() === 'win32') {</span>
|
|
2949
|
-
const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
|
|
2950
|
-
const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
|
|
2951
|
-
const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
|
|
2952
|
-
<span class="cstat-no" title="statement not covered" > await execAsync(`taskkill /F /PID ${pid}`);</span>
|
|
2953
|
-
} else {
|
|
2954
|
-
const { exec } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
|
|
2955
|
-
const { promisify } = <span class="cstat-no" title="statement not covered" >require('util');</span>
|
|
2956
|
-
const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
|
|
2957
|
-
<span class="cstat-no" title="statement not covered" > await execAsync(`kill -9 ${pid}`);</span>
|
|
2958
|
-
}
|
|
2959
|
-
} catch (error) {
|
|
2960
|
-
// Process may have already exited
|
|
2961
|
-
<span class="cstat-no" title="statement not covered" > console.error(`Error killing process ${pid}:`, error);</span>
|
|
2962
|
-
}
|
|
2963
|
-
}
|
|
2964
|
-
|
|
2965
|
-
// Remove from tracking regardless of whether kill succeeded
|
|
2966
|
-
<span class="cstat-no" title="statement not covered" > removeProcess(pid);</span>
|
|
2967
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
2968
|
-
} catch (error) {
|
|
2969
|
-
<span class="cstat-no" title="statement not covered" > console.error(`Error stopping script ${pid}:`, error);</span>
|
|
2970
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2971
|
-
}
|
|
2972
|
-
}
|
|
2973
|
-
|
|
2974
|
-
/**
|
|
2975
|
-
* Stop a script by port (finds process using port and kills it)
|
|
2976
|
-
*/
|
|
2977
|
-
export async function <span class="fstat-no" title="function not covered" >stopScriptByPort(</span>port: number): Promise<boolean> {
|
|
2978
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2979
|
-
const processInfo = <span class="cstat-no" title="statement not covered" >await getProcessOnPort(port);</span>
|
|
2980
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!processInfo) {</span>
|
|
2981
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2982
|
-
}
|
|
2983
|
-
|
|
2984
|
-
// Check if this is a tracked process
|
|
2985
|
-
const processes = <span class="cstat-no" title="statement not covered" >loadProcesses();</span>
|
|
2986
|
-
const trackedProcess = <span class="cstat-no" title="statement not covered" >processes.find(<span class="fstat-no" title="function not covered" >p </span>=> <span class="cstat-no" title="statement not covered" >p.pid === processInfo.pid)</span>;</span>
|
|
2987
|
-
|
|
2988
|
-
<span class="cstat-no" title="statement not covered" > if (trackedProcess) {</span>
|
|
2989
|
-
// Use the tracked process removal
|
|
2990
|
-
<span class="cstat-no" title="statement not covered" > return await stopScript(processInfo.pid);</span>
|
|
2991
|
-
} else {
|
|
2992
|
-
// Kill the process directly
|
|
2993
|
-
const killed = <span class="cstat-no" title="statement not covered" >await killProcessOnPort(port);</span>
|
|
2994
|
-
<span class="cstat-no" title="statement not covered" > return killed;</span>
|
|
2995
|
-
}
|
|
2996
|
-
} catch (error) {
|
|
2997
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2998
|
-
}
|
|
2999
|
-
}
|
|
3000
|
-
|
|
3001
|
-
/**
|
|
3002
|
-
* Stop all processes for a project
|
|
3003
|
-
*/
|
|
3004
|
-
export async function <span class="fstat-no" title="function not covered" >stopProjectProcesses(</span>projectPath: string): Promise<number> {
|
|
3005
|
-
const processes = <span class="cstat-no" title="statement not covered" >getProjectProcesses(projectPath);</span>
|
|
3006
|
-
let stopped = <span class="cstat-no" title="statement not covered" >0;</span>
|
|
3007
|
-
|
|
3008
|
-
<span class="cstat-no" title="statement not covered" > for (const process of processes) {</span>
|
|
3009
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (await stopScript(process.pid)) {</span>
|
|
3010
|
-
<span class="cstat-no" title="statement not covered" > stopped++;</span>
|
|
3011
|
-
}
|
|
3012
|
-
}
|
|
3013
|
-
|
|
3014
|
-
<span class="cstat-no" title="statement not covered" > return stopped;</span>
|
|
3015
|
-
}
|
|
3016
|
-
|
|
3017
|
-
/**
|
|
3018
|
-
* Execute a script in the background (minimal logging)
|
|
3019
|
-
*/
|
|
3020
|
-
export function <span class="fstat-no" title="function not covered" >runScriptInBackground(</span>
|
|
3021
|
-
projectPath: string,
|
|
3022
|
-
projectName: string,
|
|
3023
|
-
scriptName: string,
|
|
3024
|
-
args: string[] = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
|
|
3025
|
-
force: boolean = <span class="branch-0 cbranch-no" title="branch not covered" >false</span>
|
|
3026
|
-
): Promise<number> {
|
|
3027
|
-
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >async </span>(resolve, reject) => {</span>
|
|
3028
|
-
const projectScripts = <span class="cstat-no" title="statement not covered" >getProjectScripts(projectPath);</span>
|
|
3029
|
-
const script = <span class="cstat-no" title="statement not covered" >projectScripts.scripts.get(scriptName);</span>
|
|
3030
|
-
|
|
3031
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!script) {</span>
|
|
3032
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error(`Script "${scriptName}" not found in project`));</span>
|
|
3033
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3034
|
-
}
|
|
3035
|
-
|
|
3036
|
-
// Proactive port checking
|
|
3037
|
-
const canProceed = <span class="cstat-no" title="statement not covered" >await checkPortsBeforeExecution(projectPath, scriptName, force);</span>
|
|
3038
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!canProceed) {</span>
|
|
3039
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error('Port conflict not resolved'));</span>
|
|
3040
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3041
|
-
}
|
|
3042
|
-
|
|
3043
|
-
let command: string;
|
|
3044
|
-
let commandArgs: string[];
|
|
3045
|
-
|
|
3046
|
-
<span class="cstat-no" title="statement not covered" > switch (script.runner) {</span>
|
|
3047
|
-
case 'npm':
|
|
3048
|
-
<span class="cstat-no" title="statement not covered" > command = 'npm';</span>
|
|
3049
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['run', scriptName, ...args];</span>
|
|
3050
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3051
|
-
case 'yarn':
|
|
3052
|
-
<span class="cstat-no" title="statement not covered" > command = 'yarn';</span>
|
|
3053
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = [scriptName, ...args];</span>
|
|
3054
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3055
|
-
case 'pnpm':
|
|
3056
|
-
<span class="cstat-no" title="statement not covered" > command = 'pnpm';</span>
|
|
3057
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['run', scriptName, ...args];</span>
|
|
3058
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3059
|
-
case 'python':
|
|
3060
|
-
<span class="cstat-no" title="statement not covered" > command = 'python';</span>
|
|
3061
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['-m', ...script.command.split(' ').slice(1), ...args];</span>
|
|
3062
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3063
|
-
case 'poetry':
|
|
3064
|
-
<span class="cstat-no" title="statement not covered" > command = 'poetry';</span>
|
|
3065
|
-
const modulePath = <span class="cstat-no" title="statement not covered" >script.command.split(' ').slice(1).join(' ');</span>
|
|
3066
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['run', 'python', '-m', modulePath, ...args];</span>
|
|
3067
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3068
|
-
case 'cargo':
|
|
3069
|
-
<span class="cstat-no" title="statement not covered" > command = 'cargo';</span>
|
|
3070
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = scriptName === 'run' ? ['run', ...args] : [scriptName, ...args];</span>
|
|
3071
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3072
|
-
case 'go':
|
|
3073
|
-
<span class="cstat-no" title="statement not covered" > command = 'go';</span>
|
|
3074
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = script.command.split(' ').slice(1);</span>
|
|
3075
|
-
<span class="cstat-no" title="statement not covered" > if (scriptName === 'run' && args.length > 0) {</span>
|
|
3076
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = ['run', ...args];</span>
|
|
3077
|
-
} else {
|
|
3078
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = [...commandArgs, ...args];</span>
|
|
3079
|
-
}
|
|
3080
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3081
|
-
case 'make':
|
|
3082
|
-
<span class="cstat-no" title="statement not covered" > command = 'make';</span>
|
|
3083
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = [scriptName, ...args];</span>
|
|
3084
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3085
|
-
default:
|
|
3086
|
-
const parts = <span class="cstat-no" title="statement not covered" >script.command.split(' ');</span>
|
|
3087
|
-
<span class="cstat-no" title="statement not covered" > command = parts[0];</span>
|
|
3088
|
-
<span class="cstat-no" title="statement not covered" > commandArgs = [...parts.slice(1), ...args];</span>
|
|
3089
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3090
|
-
}
|
|
3091
|
-
|
|
3092
|
-
// Create log file for the process
|
|
3093
|
-
const dataDir = <span class="cstat-no" title="statement not covered" >path.join(os.homedir(), '.projax');</span>
|
|
3094
|
-
const logsDir = <span class="cstat-no" title="statement not covered" >path.join(dataDir, 'logs');</span>
|
|
3095
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(logsDir)) {</span>
|
|
3096
|
-
<span class="cstat-no" title="statement not covered" > fs.mkdirSync(logsDir, { recursive: true });</span>
|
|
3097
|
-
}
|
|
3098
|
-
const logFile = <span class="cstat-no" title="statement not covered" >path.join(logsDir, `process-${Date.now()}-${scriptName}.log`);</span>
|
|
3099
|
-
|
|
3100
|
-
// Open log file with file descriptors that can be inherited by child process
|
|
3101
|
-
const logFd = <span class="cstat-no" title="statement not covered" >fs.openSync(logFile, 'a');</span>
|
|
3102
|
-
|
|
3103
|
-
// Spawn process in detached mode with output redirected to log file
|
|
3104
|
-
let child;
|
|
3105
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
3106
|
-
<span class="cstat-no" title="statement not covered" > child = spawn(command, commandArgs, {</span>
|
|
3107
|
-
cwd: projectPath,
|
|
3108
|
-
stdio: ['ignore', logFd, logFd], // Redirect stdout and stderr to log file descriptor
|
|
3109
|
-
detached: true,
|
|
3110
|
-
shell: process.platform === 'win32',
|
|
3111
|
-
});
|
|
3112
|
-
} catch (spawnError) {
|
|
3113
|
-
<span class="cstat-no" title="statement not covered" > fs.closeSync(logFd);</span>
|
|
3114
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error(`Failed to spawn process: ${spawnError instanceof Error ? spawnError.message : String(spawnError)}`));</span>
|
|
3115
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3116
|
-
}
|
|
3117
|
-
|
|
3118
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!child.pid) {</span>
|
|
3119
|
-
<span class="cstat-no" title="statement not covered" > fs.closeSync(logFd);</span>
|
|
3120
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error('Failed to start process: no PID assigned'));</span>
|
|
3121
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3122
|
-
}
|
|
3123
|
-
|
|
3124
|
-
// Handle spawn errors
|
|
3125
|
-
<span class="cstat-no" title="statement not covered" > child.on('error', <span class="fstat-no" title="function not covered" >(e</span>rror) => {</span>
|
|
3126
|
-
<span class="cstat-no" title="statement not covered" > fs.closeSync(logFd);</span>
|
|
3127
|
-
<span class="cstat-no" title="statement not covered" > reject(new Error(`Process spawn error: ${error.message}`));</span>
|
|
3128
|
-
});
|
|
3129
|
-
|
|
3130
|
-
// Close the file descriptor in parent process after a short delay
|
|
3131
|
-
// The child process will have its own copy
|
|
3132
|
-
<span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
3133
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
3134
|
-
<span class="cstat-no" title="statement not covered" > fs.closeSync(logFd);</span>
|
|
3135
|
-
} catch {
|
|
3136
|
-
// Already closed or error, ignore
|
|
3137
|
-
}
|
|
3138
|
-
}, 1000);
|
|
3139
|
-
|
|
3140
|
-
// Store process info
|
|
3141
|
-
const processInfo: BackgroundProcess = <span class="cstat-no" title="statement not covered" >{</span>
|
|
3142
|
-
pid: child.pid,
|
|
3143
|
-
projectPath,
|
|
3144
|
-
projectName,
|
|
3145
|
-
scriptName,
|
|
3146
|
-
command: `${command} ${commandArgs.join(' ')}`,
|
|
3147
|
-
startedAt: Date.now(),
|
|
3148
|
-
logFile,
|
|
3149
|
-
};
|
|
3150
|
-
|
|
3151
|
-
<span class="cstat-no" title="statement not covered" > addProcess(processInfo);</span>
|
|
3152
|
-
|
|
3153
|
-
// Listen for process exit to clean up tracking
|
|
3154
|
-
<span class="cstat-no" title="statement not covered" > child.on('exit', <span class="fstat-no" title="function not covered" >async </span>(code, signal) => {</span>
|
|
3155
|
-
// Remove from tracking when process exits
|
|
3156
|
-
<span class="cstat-no" title="statement not covered" > removeProcess(child.pid!);</span>
|
|
3157
|
-
|
|
3158
|
-
// Log exit information
|
|
3159
|
-
<span class="cstat-no" title="statement not covered" > if (code !== null) {</span>
|
|
3160
|
-
<span class="cstat-no" title="statement not covered" > fs.appendFileSync(logFile, `\n\n[Process exited with code ${code}]\n`);</span>
|
|
3161
|
-
} else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (signal !== null) {</span>
|
|
3162
|
-
<span class="cstat-no" title="statement not covered" > fs.appendFileSync(logFile, `\n\n[Process killed by signal ${signal}]\n`);</span>
|
|
3163
|
-
}
|
|
3164
|
-
|
|
3165
|
-
// Check if this was a test script and parse results
|
|
3166
|
-
<span class="cstat-no" title="statement not covered" > await checkAndParseTestResults(logFile, projectPath, scriptName);</span>
|
|
3167
|
-
});
|
|
3168
|
-
|
|
3169
|
-
// Unref so parent can exit and process runs independently
|
|
3170
|
-
<span class="cstat-no" title="statement not covered" > child.unref();</span>
|
|
3171
|
-
|
|
3172
|
-
// Show minimal output
|
|
3173
|
-
<span class="cstat-no" title="statement not covered" > console.log(`ā Started "${projectName}" (${scriptName}) in background [PID: ${child.pid}]`);</span>
|
|
3174
|
-
<span class="cstat-no" title="statement not covered" > console.log(` Logs: ${logFile}`);</span>
|
|
3175
|
-
<span class="cstat-no" title="statement not covered" > console.log(` Command: ${command} ${commandArgs.join(' ')}\n`);</span>
|
|
3176
|
-
|
|
3177
|
-
// For background processes, we can't easily do reactive detection
|
|
3178
|
-
// But we can check the log file after a short delay for port conflicts and URLs
|
|
3179
|
-
<span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >async </span>() => {</span>
|
|
3180
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
3181
|
-
// Wait a bit for process to start and potentially fail
|
|
3182
|
-
<span class="cstat-no" title="statement not covered" > await new Promise(<span class="fstat-no" title="function not covered" >resolve </span>=> <span class="cstat-no" title="statement not covered" >setTimeout(resolve, 2000))</span>;</span>
|
|
3183
|
-
|
|
3184
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (fs.existsSync(logFile)) {</span>
|
|
3185
|
-
const logContent = <span class="cstat-no" title="statement not covered" >fs.readFileSync(logFile, 'utf-8');</span>
|
|
3186
|
-
|
|
3187
|
-
// Check for port conflicts
|
|
3188
|
-
const port = <span class="cstat-no" title="statement not covered" >extractPortFromError(logContent);</span>
|
|
3189
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (port) {</span>
|
|
3190
|
-
<span class="cstat-no" title="statement not covered" > console.error(`\nā ļø Port conflict detected in background process: port ${port} is in use`);</span>
|
|
3191
|
-
<span class="cstat-no" title="statement not covered" > console.error(` Check log file: ${logFile}`);</span>
|
|
3192
|
-
<span class="cstat-no" title="statement not covered" > console.error(` Use: prx <project> <script> --force to auto-resolve port conflicts\n`);</span>
|
|
3193
|
-
}
|
|
3194
|
-
|
|
3195
|
-
// Extract URLs from output
|
|
3196
|
-
const urls = <span class="cstat-no" title="statement not covered" >extractUrlsFromOutput(logContent);</span>
|
|
3197
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (urls.length > 0) {</span>
|
|
3198
|
-
<span class="cstat-no" title="statement not covered" > updateProcessUrls(child.pid!, urls);</span>
|
|
3199
|
-
}
|
|
3200
|
-
}
|
|
3201
|
-
} catch {
|
|
3202
|
-
// Ignore errors checking log file
|
|
3203
|
-
}
|
|
3204
|
-
}, 3000);
|
|
3205
|
-
|
|
3206
|
-
// Also check for URLs from detected ports
|
|
3207
|
-
<span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >async </span>() => {</span>
|
|
3208
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
3209
|
-
const db = <span class="cstat-no" title="statement not covered" >getDatabaseManager();</span>
|
|
3210
|
-
const project = <span class="cstat-no" title="statement not covered" >db.getProjectByPath(projectPath);</span>
|
|
3211
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (project) {</span>
|
|
3212
|
-
const ports = <span class="cstat-no" title="statement not covered" >db.getProjectPorts(project.id);</span>
|
|
3213
|
-
const urls: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
3214
|
-
<span class="cstat-no" title="statement not covered" > for (const portInfo of ports) {</span>
|
|
3215
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (portInfo.script_name === scriptName) {</span>
|
|
3216
|
-
<span class="cstat-no" title="statement not covered" > urls.push(`http://localhost:${portInfo.port}`);</span>
|
|
3217
|
-
}
|
|
3218
|
-
}
|
|
3219
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (urls.length > 0) {</span>
|
|
3220
|
-
<span class="cstat-no" title="statement not covered" > updateProcessUrls(child.pid!, urls);</span>
|
|
3221
|
-
}
|
|
3222
|
-
}
|
|
3223
|
-
} catch {
|
|
3224
|
-
// Ignore errors
|
|
3225
|
-
}
|
|
3226
|
-
}, 5000);
|
|
3227
|
-
|
|
3228
|
-
// Check for test results periodically (for watch mode tests)
|
|
3229
|
-
// Parse results every 10 seconds for the first 60 seconds, then every 30 seconds
|
|
3230
|
-
let parseAttempt = <span class="cstat-no" title="statement not covered" >0;</span>
|
|
3231
|
-
const parseInterval = <span class="cstat-no" title="statement not covered" >setInterval(<span class="fstat-no" title="function not covered" >async </span>() => {</span>
|
|
3232
|
-
<span class="cstat-no" title="statement not covered" > parseAttempt++;</span>
|
|
3233
|
-
|
|
3234
|
-
// Stop parsing after 10 minutes or if process is dead
|
|
3235
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (parseAttempt > 20 || !child.pid) {</span>
|
|
3236
|
-
<span class="cstat-no" title="statement not covered" > clearInterval(parseInterval);</span>
|
|
3237
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3238
|
-
}
|
|
3239
|
-
|
|
3240
|
-
<span class="cstat-no" title="statement not covered" > await checkAndParseTestResults(logFile, projectPath, scriptName);</span>
|
|
3241
|
-
|
|
3242
|
-
// After first minute, slow down to every 30 seconds
|
|
3243
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (parseAttempt >= 6) {</span>
|
|
3244
|
-
<span class="cstat-no" title="statement not covered" > clearInterval(parseInterval);</span>
|
|
3245
|
-
const slowInterval = <span class="cstat-no" title="statement not covered" >setInterval(<span class="fstat-no" title="function not covered" >async </span>() => {</span>
|
|
3246
|
-
<span class="cstat-no" title="statement not covered" > await checkAndParseTestResults(logFile, projectPath, scriptName);</span>
|
|
3247
|
-
}, 30000);
|
|
3248
|
-
|
|
3249
|
-
// Stop after 10 minutes total
|
|
3250
|
-
<span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>> <span class="cstat-no" title="statement not covered" >clearInterval(slowInterval),</span> 540000);</span>
|
|
3251
|
-
}
|
|
3252
|
-
}, 10000); // Initial interval: every 10 seconds
|
|
3253
|
-
|
|
3254
|
-
// Resolve with PID since process is running in background
|
|
3255
|
-
<span class="cstat-no" title="statement not covered" > resolve(child.pid);</span>
|
|
3256
|
-
});
|
|
3257
|
-
}
|
|
3258
|
-
|
|
3259
|
-
/**
|
|
3260
|
-
* Check log file for test output and parse results
|
|
3261
|
-
*/
|
|
3262
|
-
async function <span class="fstat-no" title="function not covered" >checkAndParseTestResults(</span>logFile: string, projectPath: string, scriptName: string): Promise<void> {
|
|
3263
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
3264
|
-
// Only parse if script name suggests it's a test command
|
|
3265
|
-
const testScriptPatterns = <span class="cstat-no" title="statement not covered" >['test', 'spec', 'jest', 'vitest', 'mocha', 'pytest', 'unittest'];</span>
|
|
3266
|
-
const isTestScript = <span class="cstat-no" title="statement not covered" >testScriptPatterns.some(<span class="fstat-no" title="function not covered" >pattern </span>=> <span class="cstat-no" title="statement not covered" >scriptName.toLowerCase().includes(pattern))</span>;</span>
|
|
3267
|
-
|
|
3268
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isTestScript) {</span>
|
|
3269
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3270
|
-
}
|
|
3271
|
-
|
|
3272
|
-
// Read the log file
|
|
3273
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(logFile)) {</span>
|
|
3274
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3275
|
-
}
|
|
3276
|
-
|
|
3277
|
-
const logContent = <span class="cstat-no" title="statement not covered" >fs.readFileSync(logFile, 'utf-8');</span>
|
|
3278
|
-
|
|
3279
|
-
// Import test parser (dynamic to avoid circular dependency issues)
|
|
3280
|
-
const testParserPath = <span class="cstat-no" title="statement not covered" >path.join(__dirname, 'test-parser.js');</span>
|
|
3281
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(testParserPath)) {</span>
|
|
3282
|
-
// Parser not available (might be in development mode)
|
|
3283
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3284
|
-
}
|
|
3285
|
-
|
|
3286
|
-
const { parseTestOutput, isTestOutput } = <span class="cstat-no" title="statement not covered" >await import(testParserPath<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >);</span></span></span>
|
|
3287
|
-
|
|
3288
|
-
// Check if output contains test results
|
|
3289
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isTestOutput(logContent)) {</span>
|
|
3290
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3291
|
-
}
|
|
3292
|
-
|
|
3293
|
-
// Parse test results
|
|
3294
|
-
const parsed = <span class="cstat-no" title="statement not covered" >parseTestOutput(logContent);</span>
|
|
3295
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!parsed) {</span>
|
|
3296
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3297
|
-
}
|
|
3298
|
-
|
|
3299
|
-
// Get project from database
|
|
3300
|
-
const db = <span class="cstat-no" title="statement not covered" >getDatabaseManager();</span>
|
|
3301
|
-
const project = <span class="cstat-no" title="statement not covered" >db.getProjectByPath(projectPath);</span>
|
|
3302
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!project) {</span>
|
|
3303
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3304
|
-
}
|
|
3305
|
-
|
|
3306
|
-
// Save test results to database
|
|
3307
|
-
<span class="cstat-no" title="statement not covered" > db.addTestResult(</span>
|
|
3308
|
-
project.id,
|
|
3309
|
-
scriptName,
|
|
3310
|
-
parsed.passed,
|
|
3311
|
-
parsed.failed,
|
|
3312
|
-
parsed.skipped,
|
|
3313
|
-
parsed.total,
|
|
3314
|
-
parsed.duration,
|
|
3315
|
-
parsed.coverage,
|
|
3316
|
-
parsed.framework,
|
|
3317
|
-
logContent.slice(-5000) // Store last 5000 chars of output
|
|
3318
|
-
);
|
|
3319
|
-
|
|
3320
|
-
<span class="cstat-no" title="statement not covered" > console.log(`\nš Test results saved: ${parsed.passed} passed, ${parsed.failed} failed, ${parsed.skipped} skipped`);</span>
|
|
3321
|
-
} catch (error) {
|
|
3322
|
-
// Silently fail - test parsing is optional
|
|
3323
|
-
<span class="cstat-no" title="statement not covered" > console.error('Error parsing test results:', error);</span>
|
|
3324
|
-
}
|
|
3325
|
-
}
|
|
3326
|
-
|
|
3327
|
-
</pre></td></tr></table></pre>
|
|
3328
|
-
|
|
3329
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
3330
|
-
</div><!-- /wrapper -->
|
|
3331
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
3332
|
-
Code coverage generated by
|
|
3333
|
-
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
3334
|
-
at 2026-01-08T07:29:04.482Z
|
|
3335
|
-
</div>
|
|
3336
|
-
<script src="prettify.js"></script>
|
|
3337
|
-
<script>
|
|
3338
|
-
window.onload = function () {
|
|
3339
|
-
prettyPrint();
|
|
3340
|
-
};
|
|
3341
|
-
</script>
|
|
3342
|
-
<script src="sorter.js"></script>
|
|
3343
|
-
<script src="block-navigation.js"></script>
|
|
3344
|
-
</body>
|
|
3345
|
-
</html>
|
|
3346
|
-
|