@grnsft/if 0.1.3-beta → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/hack-banner.png +0 -0
  2. package/package.json +1 -1
  3. package/.devcontainer/devcontainer.json +0 -38
  4. package/.examples/ompls/azure.yml +0 -205
  5. package/.github/ISSUE_TEMPLATE/agenda.md +0 -37
  6. package/.github/ISSUE_TEMPLATE/blank-issue.md +0 -10
  7. package/.github/ISSUE_TEMPLATE/bug-report.md +0 -32
  8. package/.github/ISSUE_TEMPLATE/dev-ticket.md +0 -44
  9. package/.github/ISSUE_TEMPLATE/feedback.md +0 -42
  10. package/.github/ISSUE_TEMPLATE/model-plugin.md +0 -63
  11. package/.github/ISSUE_TEMPLATE/sprint-planning.md +0 -39
  12. package/.github/ISSUE_TEMPLATE/sprint-retro.md +0 -41
  13. package/.github/ISSUE_TEMPLATE/user-story.md +0 -10
  14. package/.github/PULL_REQUEST_TEMPLATE.md +0 -21
  15. package/.github/workflows/nodejs-ci.yml +0 -26
  16. package/coverage/clover.xml +0 -237
  17. package/coverage/coverage-final.json +0 -11
  18. package/coverage/lcov-report/base.css +0 -224
  19. package/coverage/lcov-report/block-navigation.js +0 -87
  20. package/coverage/lcov-report/config/config.ts.html +0 -256
  21. package/coverage/lcov-report/config/index.html +0 -146
  22. package/coverage/lcov-report/config/index.ts.html +0 -91
  23. package/coverage/lcov-report/config/strings.ts.html +0 -187
  24. package/coverage/lcov-report/favicon.png +0 -0
  25. package/coverage/lcov-report/index.html +0 -146
  26. package/coverage/lcov-report/lib/boavizta/index.html +0 -116
  27. package/coverage/lcov-report/lib/boavizta/index.ts.html +0 -1171
  28. package/coverage/lcov-report/lib/case-studies/aveva-model.ts.html +0 -277
  29. package/coverage/lcov-report/lib/case-studies/emem-model.ts.html +0 -439
  30. package/coverage/lcov-report/lib/case-studies/eshoppen-model.ts.html +0 -550
  31. package/coverage/lcov-report/lib/case-studies/index.html +0 -176
  32. package/coverage/lcov-report/lib/case-studies/index.ts.html +0 -97
  33. package/coverage/lcov-report/lib/case-studies/sci-accenture-model.ts.html +0 -232
  34. package/coverage/lcov-report/lib/ccf/index.html +0 -116
  35. package/coverage/lcov-report/lib/ccf/index.ts.html +0 -1339
  36. package/coverage/lcov-report/lib/cloud-instance-metadata/index.html +0 -116
  37. package/coverage/lcov-report/lib/cloud-instance-metadata/index.ts.html +0 -370
  38. package/coverage/lcov-report/lib/index.html +0 -161
  39. package/coverage/lcov-report/lib/index.ts.html +0 -121
  40. package/coverage/lcov-report/lib/models-universe.ts.html +0 -475
  41. package/coverage/lcov-report/lib/observatory.ts.html +0 -187
  42. package/coverage/lcov-report/lib/planet-aggregator.ts.html +0 -253
  43. package/coverage/lcov-report/lib/sci/index.html +0 -116
  44. package/coverage/lcov-report/lib/sci/index.ts.html +0 -571
  45. package/coverage/lcov-report/lib/sci-e/index.html +0 -116
  46. package/coverage/lcov-report/lib/sci-e/index.ts.html +0 -403
  47. package/coverage/lcov-report/lib/sci-m/index.html +0 -116
  48. package/coverage/lcov-report/lib/sci-m/index.ts.html +0 -487
  49. package/coverage/lcov-report/lib/sci-o/index.html +0 -116
  50. package/coverage/lcov-report/lib/sci-o/index.ts.html +0 -265
  51. package/coverage/lcov-report/lib/shell-imp/index.html +0 -116
  52. package/coverage/lcov-report/lib/shell-imp/index.ts.html +0 -376
  53. package/coverage/lcov-report/lib/supercomputer.ts.html +0 -712
  54. package/coverage/lcov-report/lib/teads-aws/index.html +0 -116
  55. package/coverage/lcov-report/lib/teads-aws/index.ts.html +0 -823
  56. package/coverage/lcov-report/lib/teads-curve/index.html +0 -116
  57. package/coverage/lcov-report/lib/teads-curve/index.ts.html +0 -625
  58. package/coverage/lcov-report/lib/watt-time/index.html +0 -116
  59. package/coverage/lcov-report/lib/watt-time/index.ts.html +0 -829
  60. package/coverage/lcov-report/prettify.css +0 -1
  61. package/coverage/lcov-report/prettify.js +0 -2
  62. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  63. package/coverage/lcov-report/sorter.js +0 -196
  64. package/coverage/lcov-report/types/common.ts.html +0 -109
  65. package/coverage/lcov-report/types/index.html +0 -116
  66. package/coverage/lcov-report/util/args.ts.html +0 -259
  67. package/coverage/lcov-report/util/errors.ts.html +0 -160
  68. package/coverage/lcov-report/util/index.html +0 -146
  69. package/coverage/lcov-report/util/models-universe.ts.html +0 -679
  70. package/coverage/lcov-report/util/observatory.ts.html +0 -229
  71. package/coverage/lcov-report/util/supercomputer.ts.html +0 -466
  72. package/coverage/lcov-report/util/yaml.ts.html +0 -199
  73. package/coverage/lcov.info +0 -403
  74. package/scripts/impact-test.sh +0 -12
@@ -1,1339 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for lib/ccf/index.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">lib/ccf</a> index.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">93.7% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>134/143</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">70.49% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>43/61</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">89.47% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>17/19</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">93.7% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>134/143</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
485
- <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-neutral">&nbsp;</span>
487
- <span class="cline-any cline-yes">3x</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-yes">3x</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-yes">3x</span>
492
- <span class="cline-any cline-yes">3x</span>
493
- <span class="cline-any cline-yes">3x</span>
494
- <span class="cline-any cline-yes">3x</span>
495
- <span class="cline-any cline-yes">3x</span>
496
- <span class="cline-any cline-yes">3x</span>
497
- <span class="cline-any cline-yes">3x</span>
498
- <span class="cline-any cline-yes">3x</span>
499
- <span class="cline-any cline-yes">3x</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-yes">3x</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-yes">3x</span>
504
- <span class="cline-any cline-yes">3x</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-yes">3x</span>
507
- <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-yes">7x</span>
513
- <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-neutral">&nbsp;</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-yes">7x</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-neutral">&nbsp;</span>
524
- <span class="cline-any cline-yes">7x</span>
525
- <span class="cline-any cline-yes">7x</span>
526
- <span class="cline-any cline-yes">7x</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-yes">7x</span>
529
- <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-yes">7x</span>
532
- <span class="cline-any cline-neutral">&nbsp;</span>
533
- <span class="cline-any cline-neutral">&nbsp;</span>
534
- <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-neutral">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-no">&nbsp;</span>
539
- <span class="cline-any cline-neutral">&nbsp;</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-yes">9x</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-yes">9x</span>
557
- <span class="cline-any cline-no">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-yes">9x</span>
561
- <span class="cline-any cline-yes">9x</span>
562
- <span class="cline-any cline-yes">9x</span>
563
- <span class="cline-any cline-yes">7x</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-yes">2x</span>
566
- <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-no">&nbsp;</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-yes">7x</span>
572
- <span class="cline-any cline-yes">7x</span>
573
- <span class="cline-any cline-yes">7x</span>
574
- <span class="cline-any cline-yes">6x</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">1x</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-no">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-yes">6x</span>
583
- <span class="cline-any cline-no">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-yes">6x</span>
587
- <span class="cline-any cline-yes">1x</span>
588
- <span class="cline-any cline-no">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-yes">1x</span>
591
- <span class="cline-any cline-yes">1x</span>
592
- <span class="cline-any cline-yes">1x</span>
593
- <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-no">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-yes">6x</span>
599
- <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-yes">10x</span>
612
- <span class="cline-any cline-yes">1x</span>
613
- <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-yes">9x</span>
615
- <span class="cline-any cline-yes">1x</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-neutral">&nbsp;</span>
618
- <span class="cline-any cline-yes">8x</span>
619
- <span class="cline-any cline-yes">2x</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-yes">6x</span>
622
- <span class="cline-any cline-yes">12x</span>
623
- <span class="cline-any cline-yes">11x</span>
624
- <span class="cline-any cline-yes">11x</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-yes">5x</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-neutral">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-yes">12x</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-yes">1x</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-yes">11x</span>
652
- <span class="cline-any cline-yes">11x</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-yes">11x</span>
658
- <span class="cline-any cline-yes">1x</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-yes">1x</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">1x</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-yes">1x</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-yes">10x</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-yes">10x</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-yes">10x</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-yes">11x</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-no">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-yes">7x</span>
710
- <span class="cline-any cline-yes">7x</span>
711
- <span class="cline-any cline-yes">7x</span>
712
- <span class="cline-any cline-yes">7x</span>
713
- <span class="cline-any cline-yes">7x</span>
714
- <span class="cline-any cline-yes">7x</span>
715
- <span class="cline-any cline-yes">7x</span>
716
- <span class="cline-any cline-yes">4347x</span>
717
- <span class="cline-any cline-yes">4347x</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-yes">4347x</span>
721
- <span class="cline-any cline-yes">4347x</span>
722
- <span class="cline-any cline-yes">4347x</span>
723
- <span class="cline-any cline-yes">4347x</span>
724
- <span class="cline-any cline-yes">4718x</span>
725
- <span class="cline-any cline-yes">4718x</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-yes">4718x</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-yes">4718x</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-yes">4347x</span>
736
- <span class="cline-any cline-yes">4347x</span>
737
- <span class="cline-any cline-yes">4347x</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-yes">7x</span>
756
- <span class="cline-any cline-yes">1939x</span>
757
- <span class="cline-any cline-yes">1939x</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-yes">1939x</span>
760
- <span class="cline-any cline-no">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-yes">1939x</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-neutral">&nbsp;</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-neutral">&nbsp;</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-yes">7x</span>
782
- <span class="cline-any cline-yes">4165x</span>
783
- <span class="cline-any cline-yes">4165x</span>
784
- <span class="cline-any cline-yes">4165x</span>
785
- <span class="cline-any cline-yes">903x</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-yes">4165x</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-yes">7x</span>
807
- <span class="cline-any cline-yes">4347x</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-yes">7x</span>
811
- <span class="cline-any cline-yes">1939x</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-yes">7x</span>
815
- <span class="cline-any cline-yes">4165x</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-yes">21x</span>
822
- <span class="cline-any cline-yes">21x</span>
823
- <span class="cline-any cline-yes">21x</span>
824
- <span class="cline-any cline-yes">21x</span>
825
- <span class="cline-any cline-yes">189x</span>
826
- <span class="cline-any cline-neutral">&nbsp;</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-yes">189x</span>
829
- <span class="cline-any cline-yes">189x</span>
830
- <span class="cline-any cline-yes">189x</span>
831
- <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-yes">21x</span>
833
- <span class="cline-any cline-yes">21x</span>
834
- <span class="cline-any cline-yes">21x</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-neutral">&nbsp;</span>
837
- <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-neutral">&nbsp;</span>
840
- <span class="cline-any cline-neutral">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-neutral">&nbsp;</span>
843
- <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-yes">4720x</span>
845
- <span class="cline-any cline-yes">406x</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-yes">4720x</span>
849
- <span class="cline-any cline-yes">462x</span>
850
- <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-neutral">&nbsp;</span>
852
- <span class="cline-any cline-yes">4720x</span>
853
- <span class="cline-any cline-yes">589x</span>
854
- <span class="cline-any cline-yes">546x</span>
855
- <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-yes">43x</span>
857
- <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&nbsp;</span>
860
- <span class="cline-any cline-yes">4720x</span>
861
- <span class="cline-any cline-yes">504x</span>
862
- <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-neutral">&nbsp;</span>
864
- <span class="cline-any cline-yes">4720x</span>
865
- <span class="cline-any cline-yes">1x</span>
866
- <span class="cline-any cline-neutral">&nbsp;</span>
867
- <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-yes">4719x</span>
869
- <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-neutral">&nbsp;</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-yes">11x</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-neutral">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-yes">11x</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-yes">11x</span>
888
- <span class="cline-any cline-yes">11x</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-yes">11x</span>
891
- <span class="cline-any cline-neutral">&nbsp;</span>
892
- <span class="cline-any cline-yes">11x</span>
893
- <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-yes">11x</span>
895
- <span class="cline-any cline-neutral">&nbsp;</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-neutral">&nbsp;</span>
899
- <span class="cline-any cline-neutral">&nbsp;</span>
900
- <span class="cline-any cline-neutral">&nbsp;</span>
901
- <span class="cline-any cline-neutral">&nbsp;</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Spline from 'typescript-cubic-spline';
903
- &nbsp;
904
- import {IComputeInstance, IOutputModelInterface} from '../interfaces';
905
- import {INSTANCE_TYPE_COMPUTE_PROCESSOR_MAPPING} from '@cloud-carbon-footprint/aws/dist/lib/AWSInstanceTypes';
906
- &nbsp;
907
- import {CONFIG} from '../../config';
908
- &nbsp;
909
- import * as AWS_INSTANCES from './aws-instances.json';
910
- import * as GCP_INSTANCES from './gcp-instances.json';
911
- import * as AZURE_INSTANCES from './azure-instances.json';
912
- import * as GCP_USE from './gcp-use.json';
913
- import * as AWS_USE from './aws-use.json';
914
- import * as AZURE_USE from './azure-use.json';
915
- import * as GCP_EMBODIED from './gcp-embodied.json';
916
- import * as AWS_EMBODIED from './aws-embodied.json';
917
- import * as AZURE_EMBODIED from './azure-embodied.json';
918
- &nbsp;
919
- import {KeyValuePair, Interpolation} from '../../types/common';
920
- &nbsp;
921
- const {MODEL_IDS} = CONFIG;
922
- const {CCF} = MODEL_IDS;
923
- &nbsp;
924
- export class CloudCarbonFootprint implements IOutputModelInterface {
925
- // Defined for compatibility. Not used in CCF.
926
- authParams: object | undefined;
927
- // name of the data source
928
- name: string | undefined;
929
- // compute instances grouped by the vendor with usage data
930
- private computeInstances: {
931
- [key: string]: {
932
- [key: string]: IComputeInstance;
933
- };
934
- } = {};
935
- &nbsp;
936
- // list of all the by Architecture
937
- private computeInstanceUsageByArchitecture: KeyValuePair = {
938
- gcp: {},
939
- aws: {},
940
- azure: {},
941
- };
942
- private vendor = '';
943
- private instanceType = '';
944
- private expectedLifespan = 4;
945
- &nbsp;
946
- private interpolation = Interpolation.LINEAR;
947
- &nbsp;
948
- constructor() {
949
- this.standardizeInstanceMetrics();
950
- }
951
- &nbsp;
952
- /**
953
- * Defined for compatibility. Not used in CCF.
954
- */
955
- <span class="fstat-no" title="function not covered" > authenticate(</span>authParams: object): void {
956
- <span class="cstat-no" title="statement not covered" > this.authParams = authParams;</span>
957
- }
958
- &nbsp;
959
- /**
960
- * Configures the CCF Plugin for IEF
961
- * @param {string} name name of the resource
962
- * @param {Object} staticParams static parameters for the resource
963
- * @param {("aws"|"gcp"|"azure")} staticParams.vendor aws, gcp, azure
964
- * @param {string} staticParams.'instance-type' instance type from the list of supported instances
965
- * @param {number} staticParams.'expected-lifespan' expected lifespan of the instance in years
966
- * @param {Interpolation} staticParams.interpolation linear(All Clouds), spline (only for AWS)
967
- */
968
- async configure(
969
- name: string,
970
- staticParams: object | undefined = <span class="branch-0 cbranch-no" title="branch not covered" >undefined</span>
971
- ): Promise&lt;IOutputModelInterface&gt; {
972
- this.name = name;
973
- &nbsp;
974
- <span class="missing-if-branch" title="if path not taken" >I</span>if (staticParams === undefined) {
975
- <span class="cstat-no" title="statement not covered" > throw new Error('Required Parameters not provided');</span>
976
- }
977
- &nbsp;
978
- if ('vendor' in staticParams) {
979
- const vendor = staticParams?.vendor as string;
980
- if (['aws', 'gcp', 'azure'].includes(vendor)) {
981
- this.vendor = vendor;
982
- } else {
983
- throw new Error('vendor not supported');
984
- }
985
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
986
- <span class="cstat-no" title="statement not covered" > throw new Error('vendor not provided');</span>
987
- }
988
- &nbsp;
989
- if ('instance-type' in staticParams) {
990
- const instanceType = staticParams['instance-type'] as string;
991
- if (instanceType in this.computeInstances[this.vendor]) {
992
- this.instanceType = instanceType;
993
- } else {
994
- throw new Error('Instance Type not supported');
995
- }
996
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
997
- <span class="cstat-no" title="statement not covered" > throw new Error('Instance Type not provided');</span>
998
- }
999
- &nbsp;
1000
- <span class="missing-if-branch" title="if path not taken" >I</span>if ('expected-lifespan' in staticParams) {
1001
- <span class="cstat-no" title="statement not covered" > this.expectedLifespan = staticParams['expected-lifespan'] as number;</span>
1002
- }
1003
- &nbsp;
1004
- if ('interpolation' in staticParams) {
1005
- <span class="missing-if-branch" title="if path not taken" >I</span>if (this.vendor !== 'aws') {
1006
- <span class="cstat-no" title="statement not covered" > throw new Error('Interpolation method not supported');</span>
1007
- }
1008
- const interpolation = staticParams?.interpolation as Interpolation;
1009
- if (Object.values(Interpolation).includes(interpolation)) {
1010
- this.interpolation = interpolation;
1011
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
1012
- <span class="cstat-no" title="statement not covered" > throw new Error('Interpolation method not supported');</span>
1013
- }
1014
- }
1015
- &nbsp;
1016
- return this;
1017
- }
1018
- &nbsp;
1019
- /**
1020
- * Calculate the total emissions for a list of inputs
1021
- *
1022
- * Each input require:
1023
- * @param {Object[]} inputs ISO 8601 timestamp string
1024
- * @param {string} inputs[].timestamp ISO 8601 timestamp string
1025
- * @param {number} inputs[].duration input duration in seconds
1026
- * @param {number} inputs[].cpu-util percentage cpu usage
1027
- */
1028
- async execute(inputs: object | object[] | undefined): Promise&lt;any[]&gt; {
1029
- if (inputs === undefined) {
1030
- throw new Error('Required Parameters not provided');
1031
- }
1032
- if (!Array.isArray(inputs)) {
1033
- throw new Error('inputs should be an array');
1034
- }
1035
- &nbsp;
1036
- if (this.instanceType === '' || this.vendor === '') {
1037
- throw new Error('Configuration is incomplete');
1038
- }
1039
- inputs.map((input: KeyValuePair) =&gt; {
1040
- input['energy'] = this.calculateEnergy(input);
1041
- input['embodied-carbon'] = this.embodiedEmissions(input);
1042
- return input;
1043
- });
1044
- &nbsp;
1045
- return inputs;
1046
- }
1047
- &nbsp;
1048
- /**
1049
- * Calculates the energy consumption for a single input
1050
- * requires
1051
- *
1052
- * duration: duration of the input in seconds
1053
- * cpu-util: cpu usage in percentage
1054
- * timestamp: ISO 8601 timestamp string
1055
- *
1056
- * Uses a spline method for AWS and linear interpolation for GCP and Azure
1057
- */
1058
- private calculateEnergy(input: KeyValuePair) {
1059
- if (
1060
- !('duration' in input) ||
1061
- !('cpu-util' in input) ||
1062
- !('timestamp' in input)
1063
- ) {
1064
- throw new Error(
1065
- 'Required Parameters duration,cpu,timestamp not provided for input'
1066
- );
1067
- }
1068
- &nbsp;
1069
- const duration = input['duration'];
1070
- const cpu = input['cpu-util'];
1071
- &nbsp;
1072
- // get the wattage for the instance type
1073
- let wattage;
1074
- &nbsp;
1075
- if (this.vendor === 'aws' &amp;&amp; this.interpolation === 'spline') {
1076
- const x = [0, 10, 50, 100];
1077
- &nbsp;
1078
- const y: number[] = [
1079
- this.computeInstances['aws'][this.instanceType].consumption.idle ?? <span class="branch-1 cbranch-no" title="branch not covered" >0,</span>
1080
- this.computeInstances['aws'][this.instanceType].consumption
1081
- .tenPercent ?? <span class="branch-1 cbranch-no" title="branch not covered" >0,</span>
1082
- this.computeInstances['aws'][this.instanceType].consumption
1083
- .fiftyPercent ?? <span class="branch-1 cbranch-no" title="branch not covered" >0,</span>
1084
- this.computeInstances['aws'][this.instanceType].consumption
1085
- .hundredPercent ?? <span class="branch-1 cbranch-no" title="branch not covered" >0,</span>
1086
- ];
1087
- &nbsp;
1088
- const spline = new Spline(x, y);
1089
- &nbsp;
1090
- wattage = spline.at(cpu);
1091
- } else {
1092
- const idle =
1093
- this.computeInstances[this.vendor][this.instanceType].consumption
1094
- .minWatts ?? <span class="branch-1 cbranch-no" title="branch not covered" >0;</span>
1095
- const max =
1096
- this.computeInstances[this.vendor][this.instanceType].consumption
1097
- .maxWatts ?? <span class="branch-1 cbranch-no" title="branch not covered" >0;</span>
1098
- &nbsp;
1099
- // linear interpolation
1100
- wattage = idle + (max - idle) * (cpu / 100);
1101
- }
1102
- // duration is in seconds
1103
- // wattage is in watts
1104
- // eg: 30W x 300s = 9000 J
1105
- // 1 Wh = 3600 J
1106
- // 9000 J / 3600 = 2.5 Wh
1107
- // J / 3600 = Wh
1108
- // 2.5 Wh / 1000 = 0.0025 kWh
1109
- // Wh / 1000 = kWh
1110
- // (wattage * duration) / (seconds in an hour) / 1000 = kWh
1111
- return (wattage * duration) / 3600 / 1000;
1112
- }
1113
- &nbsp;
1114
- /**
1115
- * Returns model identifier
1116
- */
1117
- <span class="fstat-no" title="function not covered" > modelIdentifier(</span>): string {
1118
- <span class="cstat-no" title="statement not covered" > return CCF;</span>
1119
- }
1120
- &nbsp;
1121
- /**
1122
- * Standardize the instance metrics for all the vendors
1123
- *
1124
- * Maps the instance metrics to a standard format (min, max, idle, 10%, 50%, 100%) for all the vendors
1125
- */
1126
- standardizeInstanceMetrics() {
1127
- this.computeInstances['aws'] = {};
1128
- this.computeInstances['gcp'] = {};
1129
- this.computeInstances['azure'] = {};
1130
- this.calculateAverage('gcp', GCP_USE);
1131
- this.calculateAverage('azure', AZURE_USE);
1132
- this.calculateAverage('aws', AWS_USE);
1133
- AWS_INSTANCES.forEach((instance: KeyValuePair) =&gt; {
1134
- const cpus = parseInt(instance['Instance vCPU'], 10);
1135
- const architectures = INSTANCE_TYPE_COMPUTE_PROCESSOR_MAPPING[
1136
- instance['Instance type']
1137
- ] ?? ['Average'];
1138
- let minWatts = 0.0;
1139
- let maxWatts = 0.0;
1140
- let count = 0;
1141
- architectures.forEach((architecture: string) =&gt; {
1142
- architecture = this.resolveAwsArchitecture(architecture);
1143
- minWatts +=
1144
- this.computeInstanceUsageByArchitecture['aws'][architecture][
1145
- 'Min Watts'
1146
- ] ?? <span class="branch-1 cbranch-no" title="branch not covered" >0;</span>
1147
- maxWatts +=
1148
- this.computeInstanceUsageByArchitecture['aws'][architecture][
1149
- 'Max Watts'
1150
- ] ?? <span class="branch-1 cbranch-no" title="branch not covered" >0;</span>
1151
- count += 1;
1152
- });
1153
- minWatts = minWatts / count;
1154
- maxWatts = maxWatts / count;
1155
- this.computeInstances['aws'][instance['Instance type']] = {
1156
- consumption: {
1157
- idle: parseFloat(instance['Instance @ Idle'].replace(',', '.')),
1158
- tenPercent: parseFloat(instance['Instance @ 10%'].replace(',', '.')),
1159
- fiftyPercent: parseFloat(
1160
- instance['Instance @ 50%'].replace(',', '.')
1161
- ),
1162
- hundredPercent: parseFloat(
1163
- instance['Instance @ 100%'].replace(',', '.')
1164
- ),
1165
- minWatts: minWatts * cpus,
1166
- maxWatts: maxWatts * cpus,
1167
- },
1168
- vCPUs: cpus,
1169
- maxvCPUs: parseInt(instance['Platform Total Number of vCPU'], 10),
1170
- name: instance['Instance type'],
1171
- } as IComputeInstance;
1172
- });
1173
- GCP_INSTANCES.forEach((instance: KeyValuePair) =&gt; {
1174
- const cpus = parseInt(instance['Instance vCPUs'], 10);
1175
- let architecture = instance['Microarchitecture'];
1176
- &nbsp;
1177
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!(architecture in this.computeInstanceUsageByArchitecture['gcp'])) {
1178
- <span class="cstat-no" title="statement not covered" > architecture = 'Average';</span>
1179
- }
1180
- this.computeInstances['gcp'][instance['Machine type']] = {
1181
- name: instance['Machine type'],
1182
- vCPUs: cpus,
1183
- consumption: {
1184
- minWatts:
1185
- this.computeInstanceUsageByArchitecture['gcp'][architecture][
1186
- 'Min Watts'
1187
- ] * cpus,
1188
- maxWatts:
1189
- this.computeInstanceUsageByArchitecture['gcp'][architecture][
1190
- 'Max Watts'
1191
- ] * cpus,
1192
- },
1193
- maxvCPUs: parseInt(
1194
- instance['Platform vCPUs (highest vCPU possible)'],
1195
- 10
1196
- ),
1197
- } as IComputeInstance;
1198
- });
1199
- AZURE_INSTANCES.forEach((instance: KeyValuePair) =&gt; {
1200
- const cpus = parseInt(instance['Instance vCPUs'], 10);
1201
- let architecture = instance['Microarchitecture'];
1202
- if (!(architecture in this.computeInstanceUsageByArchitecture['azure'])) {
1203
- architecture = 'Average';
1204
- }
1205
- this.computeInstances['azure'][instance['Virtual Machine']] = {
1206
- consumption: {
1207
- minWatts:
1208
- this.computeInstanceUsageByArchitecture['azure'][architecture][
1209
- 'Min Watts'
1210
- ] * cpus,
1211
- maxWatts:
1212
- this.computeInstanceUsageByArchitecture['azure'][architecture][
1213
- 'Max Watts'
1214
- ] * cpus,
1215
- },
1216
- name: instance['Virtual Machine'],
1217
- vCPUs: instance['Instance vCPUs'],
1218
- maxvCPUs: parseInt(
1219
- instance['Platform vCPUs (highest vCPU possible)'],
1220
- 10
1221
- ),
1222
- } as IComputeInstance;
1223
- });
1224
- AWS_EMBODIED.forEach((instance: KeyValuePair) =&gt; {
1225
- this.computeInstances['aws'][instance['type']].embodiedEmission =
1226
- instance['total'];
1227
- });
1228
- GCP_EMBODIED.forEach((instance: KeyValuePair) =&gt; {
1229
- this.computeInstances['gcp'][instance['type']].embodiedEmission =
1230
- instance['total'];
1231
- });
1232
- AZURE_EMBODIED.forEach((instance: KeyValuePair) =&gt; {
1233
- this.computeInstances['azure'][instance['type']].embodiedEmission =
1234
- instance['total'];
1235
- });
1236
- }
1237
- &nbsp;
1238
- private calculateAverage(vendor: string, instanceList: KeyValuePair[]) {
1239
- let min = 0.0;
1240
- let max = 0.0;
1241
- let count = 0.0;
1242
- instanceList.forEach((instance: KeyValuePair) =&gt; {
1243
- this.computeInstanceUsageByArchitecture[vendor][
1244
- instance['Architecture']
1245
- ] = instance;
1246
- min += parseFloat(instance['Min Watts']);
1247
- max += parseFloat(instance['Max Watts']);
1248
- count += 1.0;
1249
- });
1250
- const avgMin = min / count;
1251
- const avgMax = max / count;
1252
- this.computeInstanceUsageByArchitecture[vendor]['Average'] = {
1253
- 'Min Watts': avgMin,
1254
- 'Max Watts': avgMax,
1255
- Architecture: 'Average',
1256
- };
1257
- }
1258
- &nbsp;
1259
- // Architecture strings are different between Instances-Use.JSON and the bundled Typescript from CCF.
1260
- // This function resolves the differences.
1261
- resolveAwsArchitecture(architecture: string) {
1262
- if (architecture.includes('AMD ')) {
1263
- architecture = architecture.substring(4);
1264
- }
1265
- &nbsp;
1266
- if (architecture.includes('Skylake')) {
1267
- architecture = 'Sky Lake';
1268
- }
1269
- &nbsp;
1270
- if (architecture.includes('Graviton')) {
1271
- if (architecture.includes('2')) {
1272
- architecture = 'Graviton2';
1273
- } else {
1274
- architecture = 'Graviton';
1275
- }
1276
- }
1277
- &nbsp;
1278
- if (architecture.includes('Unknown')) {
1279
- architecture = 'Average';
1280
- }
1281
- &nbsp;
1282
- if (!(architecture in this.computeInstanceUsageByArchitecture['aws'])) {
1283
- throw new Error(`${architecture} not supported`);
1284
- }
1285
- &nbsp;
1286
- return architecture;
1287
- }
1288
- &nbsp;
1289
- /**
1290
- * Calculates the embodied emissions for a given input
1291
- */
1292
- private embodiedEmissions(input: KeyValuePair): number {
1293
- // duration
1294
- const durationInHours = input['duration'] / 3600;
1295
- // M = TE * (TR/EL) * (RR/TR)
1296
- // Where:
1297
- // TE = Total Embodied Emissions, the sum of Life Cycle Assessment(LCA) emissions for all hardware components
1298
- // TR = Time Reserved, the length of time the hardware is reserved for use by the software
1299
- // EL = Expected Lifespan, the anticipated time that the equipment will be installed
1300
- // RR = Resources Reserved, the number of resources reserved for use by the software.
1301
- // TR = Total Resources, the total number of resources available.
1302
- const totalEmissions =
1303
- this.computeInstances[this.vendor][this.instanceType].embodiedEmission ??
1304
- <span class="branch-1 cbranch-no" title="branch not covered" > 0;</span>
1305
- const timeReserved = durationInHours;
1306
- const expectedLifespan = 8760 * this.expectedLifespan;
1307
- const reservedResources =
1308
- this.computeInstances[this.vendor][this.instanceType].vCPUs ?? <span class="branch-1 cbranch-no" title="branch not covered" >1.0;</span>
1309
- const totalResources =
1310
- this.computeInstances[this.vendor][this.instanceType].maxVCPUs ?? 1.0;
1311
- // Multiply totalEmissions by 1000 to convert from kgCO2e to gCO2e
1312
- return (
1313
- totalEmissions *
1314
- 1000 *
1315
- (timeReserved / expectedLifespan) *
1316
- (reservedResources / totalResources)
1317
- );
1318
- }
1319
- }
1320
- &nbsp;</pre></td></tr></table></pre>
1321
-
1322
- <div class='push'></div><!-- for sticky footer -->
1323
- </div><!-- /wrapper -->
1324
- <div class='footer quiet pad2 space-top1 center small'>
1325
- Code coverage generated by
1326
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1327
- at 2023-11-01T14:37:41.749Z
1328
- </div>
1329
- <script src="../../prettify.js"></script>
1330
- <script>
1331
- window.onload = function () {
1332
- prettyPrint();
1333
- };
1334
- </script>
1335
- <script src="../../sorter.js"></script>
1336
- <script src="../../block-navigation.js"></script>
1337
- </body>
1338
- </html>
1339
-