apostrophe 2.220.9 → 2.221.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/.nyc_output/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +1 -0
  2. package/.nyc_output/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +1 -0
  3. package/.nyc_output/99acae99-becc-463d-ba35-9333f88d2694.json +1 -0
  4. package/.nyc_output/d071f9e0-3b11-44e6-9817-69f184dd064d.json +1 -0
  5. package/.nyc_output/ed000bec-7ff7-49bf-a109-d17bfe883433.json +1 -0
  6. package/.nyc_output/processinfo/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +1 -0
  7. package/.nyc_output/processinfo/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +1 -0
  8. package/.nyc_output/processinfo/99acae99-becc-463d-ba35-9333f88d2694.json +1 -0
  9. package/.nyc_output/processinfo/d071f9e0-3b11-44e6-9817-69f184dd064d.json +1 -0
  10. package/.nyc_output/processinfo/ed000bec-7ff7-49bf-a109-d17bfe883433.json +1 -0
  11. package/.nyc_output/processinfo/index.json +1 -0
  12. package/CHANGELOG.md +12 -0
  13. package/coverage/a3/defaults.js.html +253 -0
  14. package/coverage/a3/index.html +131 -0
  15. package/coverage/a3/index.js.html +2338 -0
  16. package/coverage/a3/lib/escape-host.js.html +109 -0
  17. package/coverage/a3/lib/index.html +176 -0
  18. package/coverage/a3/lib/mongodb-connect.js.html +250 -0
  19. package/coverage/a3/lib/moog-require.js.html +790 -0
  20. package/coverage/a3/lib/moog.js.html +1711 -0
  21. package/coverage/a3/lib/opentelemetry.js.html +517 -0
  22. package/coverage/a3/modules/@apostrophecms/admin-bar/index.html +116 -0
  23. package/coverage/a3/modules/@apostrophecms/admin-bar/index.js.html +931 -0
  24. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.html +116 -0
  25. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.js.html +115 -0
  26. package/coverage/a3/modules/@apostrophecms/any-page-type/index.html +116 -0
  27. package/coverage/a3/modules/@apostrophecms/any-page-type/index.js.html +1105 -0
  28. package/coverage/a3/modules/@apostrophecms/archive-page/index.html +116 -0
  29. package/coverage/a3/modules/@apostrophecms/archive-page/index.js.html +97 -0
  30. package/coverage/a3/modules/@apostrophecms/area/index.html +116 -0
  31. package/coverage/a3/modules/@apostrophecms/area/index.js.html +2104 -0
  32. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/area.js.html +469 -0
  33. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/index.html +131 -0
  34. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/widget.js.html +286 -0
  35. package/coverage/a3/modules/@apostrophecms/asset/index.html +116 -0
  36. package/coverage/a3/modules/@apostrophecms/asset/index.js.html +3982 -0
  37. package/coverage/a3/modules/@apostrophecms/asset/lib/globalIcons.js.html +346 -0
  38. package/coverage/a3/modules/@apostrophecms/asset/lib/index.html +116 -0
  39. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/index.html +131 -0
  40. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js.html +289 -0
  41. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.vue.js.html +148 -0
  42. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/index.html +116 -0
  43. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/index.html +131 -0
  44. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.es5.js.html +184 -0
  45. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js.html +238 -0
  46. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/utils.js.html +958 -0
  47. package/coverage/a3/modules/@apostrophecms/attachment/index.html +116 -0
  48. package/coverage/a3/modules/@apostrophecms/attachment/index.js.html +3676 -0
  49. package/coverage/a3/modules/@apostrophecms/attachment/lib/index.html +116 -0
  50. package/coverage/a3/modules/@apostrophecms/attachment/lib/legacy-migrations.js.html +205 -0
  51. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/index.html +116 -0
  52. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/rescale.js.html +328 -0
  53. package/coverage/a3/modules/@apostrophecms/busy/index.html +116 -0
  54. package/coverage/a3/modules/@apostrophecms/busy/index.js.html +145 -0
  55. package/coverage/a3/modules/@apostrophecms/cache/index.html +116 -0
  56. package/coverage/a3/modules/@apostrophecms/cache/index.js.html +424 -0
  57. package/coverage/a3/modules/@apostrophecms/db/index.html +116 -0
  58. package/coverage/a3/modules/@apostrophecms/db/index.js.html +640 -0
  59. package/coverage/a3/modules/@apostrophecms/doc/index.html +116 -0
  60. package/coverage/a3/modules/@apostrophecms/doc/index.js.html +3937 -0
  61. package/coverage/a3/modules/@apostrophecms/doc/lib/index.html +116 -0
  62. package/coverage/a3/modules/@apostrophecms/doc/lib/legacy-migrations.js.html +622 -0
  63. package/coverage/a3/modules/@apostrophecms/doc-type/index.html +116 -0
  64. package/coverage/a3/modules/@apostrophecms/doc-type/index.js.html +8638 -0
  65. package/coverage/a3/modules/@apostrophecms/doc-type/lib/autocomplete.js.html +319 -0
  66. package/coverage/a3/modules/@apostrophecms/doc-type/lib/index.html +116 -0
  67. package/coverage/a3/modules/@apostrophecms/email/index.html +116 -0
  68. package/coverage/a3/modules/@apostrophecms/email/index.js.html +301 -0
  69. package/coverage/a3/modules/@apostrophecms/error/index.html +116 -0
  70. package/coverage/a3/modules/@apostrophecms/error/index.js.html +202 -0
  71. package/coverage/a3/modules/@apostrophecms/express/index.html +116 -0
  72. package/coverage/a3/modules/@apostrophecms/express/index.js.html +2116 -0
  73. package/coverage/a3/modules/@apostrophecms/file/index.html +116 -0
  74. package/coverage/a3/modules/@apostrophecms/file/index.js.html +367 -0
  75. package/coverage/a3/modules/@apostrophecms/file-tag/index.html +116 -0
  76. package/coverage/a3/modules/@apostrophecms/file-tag/index.js.html +127 -0
  77. package/coverage/a3/modules/@apostrophecms/global/index.html +116 -0
  78. package/coverage/a3/modules/@apostrophecms/global/index.js.html +535 -0
  79. package/coverage/a3/modules/@apostrophecms/home-page/index.html +116 -0
  80. package/coverage/a3/modules/@apostrophecms/home-page/index.js.html +94 -0
  81. package/coverage/a3/modules/@apostrophecms/html-widget/index.html +116 -0
  82. package/coverage/a3/modules/@apostrophecms/html-widget/index.js.html +271 -0
  83. package/coverage/a3/modules/@apostrophecms/http/index.html +116 -0
  84. package/coverage/a3/modules/@apostrophecms/http/index.js.html +976 -0
  85. package/coverage/a3/modules/@apostrophecms/i18n/index.html +116 -0
  86. package/coverage/a3/modules/@apostrophecms/i18n/index.js.html +2083 -0
  87. package/coverage/a3/modules/@apostrophecms/image/index.html +116 -0
  88. package/coverage/a3/modules/@apostrophecms/image/index.js.html +1486 -0
  89. package/coverage/a3/modules/@apostrophecms/image-tag/index.html +116 -0
  90. package/coverage/a3/modules/@apostrophecms/image-tag/index.js.html +127 -0
  91. package/coverage/a3/modules/@apostrophecms/image-widget/index.html +116 -0
  92. package/coverage/a3/modules/@apostrophecms/image-widget/index.js.html +145 -0
  93. package/coverage/a3/modules/@apostrophecms/job/index.html +116 -0
  94. package/coverage/a3/modules/@apostrophecms/job/index.js.html +1321 -0
  95. package/coverage/a3/modules/@apostrophecms/launder/index.html +116 -0
  96. package/coverage/a3/modules/@apostrophecms/launder/index.js.html +124 -0
  97. package/coverage/a3/modules/@apostrophecms/lock/index.html +116 -0
  98. package/coverage/a3/modules/@apostrophecms/lock/index.js.html +676 -0
  99. package/coverage/a3/modules/@apostrophecms/login/index.html +116 -0
  100. package/coverage/a3/modules/@apostrophecms/login/index.js.html +2617 -0
  101. package/coverage/a3/modules/@apostrophecms/migration/index.html +116 -0
  102. package/coverage/a3/modules/@apostrophecms/migration/index.js.html +970 -0
  103. package/coverage/a3/modules/@apostrophecms/modal/index.html +116 -0
  104. package/coverage/a3/modules/@apostrophecms/modal/index.js.html +193 -0
  105. package/coverage/a3/modules/@apostrophecms/module/index.html +116 -0
  106. package/coverage/a3/modules/@apostrophecms/module/index.js.html +2500 -0
  107. package/coverage/a3/modules/@apostrophecms/module/lib/events.js.html +547 -0
  108. package/coverage/a3/modules/@apostrophecms/module/lib/index.html +116 -0
  109. package/coverage/a3/modules/@apostrophecms/notification/index.html +116 -0
  110. package/coverage/a3/modules/@apostrophecms/notification/index.js.html +1315 -0
  111. package/coverage/a3/modules/@apostrophecms/oembed/index.html +116 -0
  112. package/coverage/a3/modules/@apostrophecms/oembed/index.js.html +781 -0
  113. package/coverage/a3/modules/@apostrophecms/oembed/lib/index.html +161 -0
  114. package/coverage/a3/modules/@apostrophecms/oembed/lib/infogram.js.html +178 -0
  115. package/coverage/a3/modules/@apostrophecms/oembed/lib/vimeo.js.html +124 -0
  116. package/coverage/a3/modules/@apostrophecms/oembed/lib/wufoo.js.html +256 -0
  117. package/coverage/a3/modules/@apostrophecms/oembed/lib/youtube.js.html +322 -0
  118. package/coverage/a3/modules/@apostrophecms/oembed-field/index.html +116 -0
  119. package/coverage/a3/modules/@apostrophecms/oembed-field/index.js.html +268 -0
  120. package/coverage/a3/modules/@apostrophecms/page/index.html +116 -0
  121. package/coverage/a3/modules/@apostrophecms/page/index.js.html +6955 -0
  122. package/coverage/a3/modules/@apostrophecms/page/lib/index.html +116 -0
  123. package/coverage/a3/modules/@apostrophecms/page/lib/legacy-migrations.js.html +568 -0
  124. package/coverage/a3/modules/@apostrophecms/page-type/index.html +116 -0
  125. package/coverage/a3/modules/@apostrophecms/page-type/index.js.html +1501 -0
  126. package/coverage/a3/modules/@apostrophecms/pager/index.html +116 -0
  127. package/coverage/a3/modules/@apostrophecms/pager/index.js.html +232 -0
  128. package/coverage/a3/modules/@apostrophecms/permission/index.html +116 -0
  129. package/coverage/a3/modules/@apostrophecms/permission/index.js.html +1057 -0
  130. package/coverage/a3/modules/@apostrophecms/permission/lib/index.html +116 -0
  131. package/coverage/a3/modules/@apostrophecms/permission/lib/legacy-migrations.js.html +160 -0
  132. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.html +116 -0
  133. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.js.html +1051 -0
  134. package/coverage/a3/modules/@apostrophecms/piece-type/index.html +116 -0
  135. package/coverage/a3/modules/@apostrophecms/piece-type/index.js.html +3103 -0
  136. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.html +116 -0
  137. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.js.html +157 -0
  138. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.html +116 -0
  139. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.js.html +1363 -0
  140. package/coverage/a3/modules/@apostrophecms/schema/index.html +116 -0
  141. package/coverage/a3/modules/@apostrophecms/schema/index.js.html +4603 -0
  142. package/coverage/a3/modules/@apostrophecms/schema/lib/addFieldTypes.js.html +3502 -0
  143. package/coverage/a3/modules/@apostrophecms/schema/lib/index.html +131 -0
  144. package/coverage/a3/modules/@apostrophecms/schema/lib/joinr.js.html +703 -0
  145. package/coverage/a3/modules/@apostrophecms/search/index.html +116 -0
  146. package/coverage/a3/modules/@apostrophecms/search/index.js.html +1222 -0
  147. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.html +116 -0
  148. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.js.html +343 -0
  149. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.html +116 -0
  150. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.js.html +595 -0
  151. package/coverage/a3/modules/@apostrophecms/task/index.html +116 -0
  152. package/coverage/a3/modules/@apostrophecms/task/index.js.html +1147 -0
  153. package/coverage/a3/modules/@apostrophecms/template/index.html +116 -0
  154. package/coverage/a3/modules/@apostrophecms/template/index.js.html +2731 -0
  155. package/coverage/a3/modules/@apostrophecms/template/lib/bundlesLoader.js.html +559 -0
  156. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/component.js.html +310 -0
  157. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/fragment.js.html +325 -0
  158. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/index.html +146 -0
  159. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/render.js.html +490 -0
  160. package/coverage/a3/modules/@apostrophecms/template/lib/index.html +131 -0
  161. package/coverage/a3/modules/@apostrophecms/template/lib/nunjucksLoader.js.html +658 -0
  162. package/coverage/a3/modules/@apostrophecms/ui/index.html +116 -0
  163. package/coverage/a3/modules/@apostrophecms/ui/index.js.html +181 -0
  164. package/coverage/a3/modules/@apostrophecms/uploadfs/index.html +116 -0
  165. package/coverage/a3/modules/@apostrophecms/uploadfs/index.js.html +286 -0
  166. package/coverage/a3/modules/@apostrophecms/url/index.html +116 -0
  167. package/coverage/a3/modules/@apostrophecms/url/index.js.html +733 -0
  168. package/coverage/a3/modules/@apostrophecms/user/index.html +116 -0
  169. package/coverage/a3/modules/@apostrophecms/user/index.js.html +1684 -0
  170. package/coverage/a3/modules/@apostrophecms/user/lib/index.html +116 -0
  171. package/coverage/a3/modules/@apostrophecms/user/lib/legacy-migrations.js.html +157 -0
  172. package/coverage/a3/modules/@apostrophecms/util/index.html +116 -0
  173. package/coverage/a3/modules/@apostrophecms/util/index.js.html +3424 -0
  174. package/coverage/a3/modules/@apostrophecms/util/lib/index.html +116 -0
  175. package/coverage/a3/modules/@apostrophecms/util/lib/logger.js.html +319 -0
  176. package/coverage/a3/modules/@apostrophecms/video-widget/index.html +116 -0
  177. package/coverage/a3/modules/@apostrophecms/video-widget/index.js.html +178 -0
  178. package/coverage/a3/modules/@apostrophecms/widget-type/index.html +116 -0
  179. package/coverage/a3/modules/@apostrophecms/widget-type/index.js.html +1225 -0
  180. package/coverage/a3/test-lib/index.html +131 -0
  181. package/coverage/a3/test-lib/test.js.html +232 -0
  182. package/coverage/a3/test-lib/util.js.html +373 -0
  183. package/coverage/base.css +224 -0
  184. package/coverage/block-navigation.js +87 -0
  185. package/coverage/favicon.png +0 -0
  186. package/coverage/index.html +1256 -0
  187. package/coverage/prettify.css +1 -0
  188. package/coverage/prettify.js +2 -0
  189. package/coverage/sort-arrow-sprite.png +0 -0
  190. package/coverage/sorter.js +196 -0
  191. package/lib/modules/apostrophe-assets/index.js +3 -1
  192. package/lib/modules/apostrophe-pages/lib/api.js +8 -6
  193. package/package.json +1 -1
  194. package/test/package.json +0 -75
@@ -0,0 +1,1711 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for a3/lib/moog.js</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">a3/lib</a> moog.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">92.54% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>211/228</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">86.42% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>121/140</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'>34/38</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">92.37% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>206/223</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>
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></td><td class="line-coverage quiet"><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-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-yes">1x</span>
613
+ <span class="cline-any cline-yes">1x</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">121x</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-yes">121x</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-yes">121x</span>
622
+ <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-yes">121x</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-yes">121x</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">121x</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-yes">10103x</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-yes">2x</span>
638
+ <span class="cline-any cline-yes">1x</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-yes">1x</span>
641
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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">10101x</span>
652
+ <span class="cline-any cline-yes">10101x</span>
653
+ <span class="cline-any cline-yes">10061x</span>
654
+ <span class="cline-any cline-yes">10061x</span>
655
+ <span class="cline-any cline-no">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-yes">10101x</span>
659
+ <span class="cline-any cline-yes">10101x</span>
660
+ <span class="cline-any cline-yes">10101x</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-yes">10101x</span>
663
+ <span class="cline-any cline-yes">10101x</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-yes">10101x</span>
667
+ <span class="cline-any cline-yes">10101x</span>
668
+ <span class="cline-any cline-no">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-yes">10101x</span>
672
+ <span class="cline-any cline-yes">8180x</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-neutral">&nbsp;</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-neutral">&nbsp;</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-yes">4970x</span>
681
+ <span class="cline-any cline-yes">4970x</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">3210x</span>
686
+ <span class="cline-any cline-yes">3099x</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-yes">10101x</span>
691
+ <span class="cline-any cline-yes">10101x</span>
692
+ <span class="cline-any cline-neutral">&nbsp;</span>
693
+ <span class="cline-any cline-neutral">&nbsp;</span>
694
+ <span class="cline-any cline-yes">121x</span>
695
+ <span class="cline-any cline-yes">1x</span>
696
+ <span class="cline-any cline-yes">1x</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-yes">121x</span>
700
+ <span class="cline-any cline-yes">4x</span>
701
+ <span class="cline-any cline-yes">4x</span>
702
+ <span class="cline-any cline-yes">2x</span>
703
+ <span class="cline-any cline-neutral">&nbsp;</span>
704
+ <span class="cline-any cline-yes">2x</span>
705
+ <span class="cline-any cline-yes">1x</span>
706
+ <span class="cline-any cline-neutral">&nbsp;</span>
707
+ <span class="cline-any cline-yes">1x</span>
708
+ <span class="cline-any cline-neutral">&nbsp;</span>
709
+ <span class="cline-any cline-yes">1x</span>
710
+ <span class="cline-any cline-neutral">&nbsp;</span>
711
+ <span class="cline-any cline-no">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-neutral">&nbsp;</span>
714
+ <span class="cline-any cline-yes">1x</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-neutral">&nbsp;</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-yes">121x</span>
723
+ <span class="cline-any cline-neutral">&nbsp;</span>
724
+ <span class="cline-any cline-neutral">&nbsp;</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-yes">4655x</span>
728
+ <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-yes">4652x</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">4652x</span>
734
+ <span class="cline-any cline-neutral">&nbsp;</span>
735
+ <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-yes">4652x</span>
737
+ <span class="cline-any cline-neutral">&nbsp;</span>
738
+ <span class="cline-any cline-neutral">&nbsp;</span>
739
+ <span class="cline-any cline-yes">4652x</span>
740
+ <span class="cline-any cline-neutral">&nbsp;</span>
741
+ <span class="cline-any cline-yes">4652x</span>
742
+ <span class="cline-any cline-yes">4652x</span>
743
+ <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-yes">4652x</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-neutral">&nbsp;</span>
756
+ <span class="cline-any cline-neutral">&nbsp;</span>
757
+ <span class="cline-any cline-neutral">&nbsp;</span>
758
+ <span class="cline-any cline-neutral">&nbsp;</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-neutral">&nbsp;</span>
761
+ <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-yes">4652x</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-yes">4652x</span>
770
+ <span class="cline-any cline-yes">23660x</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-yes">4652x</span>
774
+ <span class="cline-any cline-yes">4652x</span>
775
+ <span class="cline-any cline-yes">23660x</span>
776
+ <span class="cline-any cline-yes">2553x</span>
777
+ <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-yes">23660x</span>
779
+ <span class="cline-any cline-yes">109786x</span>
780
+ <span class="cline-any cline-no">&nbsp;</span>
781
+ <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-yes">23660x</span>
786
+ <span class="cline-any cline-yes">19456x</span>
787
+ <span class="cline-any cline-yes">4545x</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-yes">19456x</span>
790
+ <span class="cline-any cline-yes">4545x</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-yes">19456x</span>
794
+ <span class="cline-any cline-yes">19456x</span>
795
+ <span class="cline-any cline-yes">6532x</span>
796
+ <span class="cline-any cline-yes">6532x</span>
797
+ <span class="cline-any cline-yes">5328x</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-yes">6532x</span>
804
+ <span class="cline-any cline-yes">21076x</span>
805
+ <span class="cline-any cline-yes">2x</span>
806
+ <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-yes">6532x</span>
808
+ <span class="cline-any cline-yes">1297x</span>
809
+ <span class="cline-any cline-yes">1657x</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-neutral">&nbsp;</span>
812
+ <span class="cline-any cline-yes">6532x</span>
813
+ <span class="cline-any cline-neutral">&nbsp;</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
816
+ <span class="cline-any cline-yes">91x</span>
817
+ <span class="cline-any cline-yes">364x</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-yes">454x</span>
821
+ <span class="cline-any cline-neutral">&nbsp;</span>
822
+ <span class="cline-any cline-neutral">&nbsp;</span>
823
+ <span class="cline-any cline-yes">90x</span>
824
+ <span class="cline-any cline-yes">1x</span>
825
+ <span class="cline-any cline-no">&nbsp;</span>
826
+ <span class="cline-any cline-neutral">&nbsp;</span>
827
+ <span class="cline-any cline-yes">6441x</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-neutral">&nbsp;</span>
830
+ <span class="cline-any cline-yes">1x</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-yes">4x</span>
833
+ <span class="cline-any cline-yes">3x</span>
834
+ <span class="cline-any cline-yes">1x</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-yes">6532x</span>
839
+ <span class="cline-any cline-yes">2484x</span>
840
+ <span class="cline-any cline-yes">2484x</span>
841
+ <span class="cline-any cline-yes">3996x</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">7027x</span>
845
+ <span class="cline-any cline-yes">6599x</span>
846
+ <span class="cline-any cline-yes">6599x</span>
847
+ <span class="cline-any cline-yes">1734x</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
853
+ <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-neutral">&nbsp;</span>
855
+ <span class="cline-any cline-neutral">&nbsp;</span>
856
+ <span class="cline-any cline-yes">2484x</span>
857
+ <span class="cline-any cline-yes">3996x</span>
858
+ <span class="cline-any cline-yes">758x</span>
859
+ <span class="cline-any cline-yes">758x</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
861
+ <span class="cline-any cline-neutral">&nbsp;</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-yes">2484x</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</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">6532x</span>
869
+ <span class="cline-any cline-yes">9200x</span>
870
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</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-yes">4652x</span>
881
+ <span class="cline-any cline-yes">23660x</span>
882
+ <span class="cline-any cline-yes">23660x</span>
883
+ <span class="cline-any cline-yes">93x</span>
884
+ <span class="cline-any cline-neutral">&nbsp;</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-neutral">&nbsp;</span>
889
+ <span class="cline-any cline-yes">4652x</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-neutral">&nbsp;</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-neutral">&nbsp;</span>
894
+ <span class="cline-any cline-yes">23160x</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-yes">4652x</span>
900
+ <span class="cline-any cline-yes">23660x</span>
901
+ <span class="cline-any cline-yes">14802x</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-neutral">&nbsp;</span>
904
+ <span class="cline-any cline-neutral">&nbsp;</span>
905
+ <span class="cline-any cline-neutral">&nbsp;</span>
906
+ <span class="cline-any cline-yes">46321x</span>
907
+ <span class="cline-any cline-neutral">&nbsp;</span>
908
+ <span class="cline-any cline-neutral">&nbsp;</span>
909
+ <span class="cline-any cline-neutral">&nbsp;</span>
910
+ <span class="cline-any cline-neutral">&nbsp;</span>
911
+ <span class="cline-any cline-neutral">&nbsp;</span>
912
+ <span class="cline-any cline-neutral">&nbsp;</span>
913
+ <span class="cline-any cline-yes">4652x</span>
914
+ <span class="cline-any cline-yes">23660x</span>
915
+ <span class="cline-any cline-yes">4632x</span>
916
+ <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-neutral">&nbsp;</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-yes">50973x</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-yes">259902x</span>
923
+ <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-yes">236242x</span>
925
+ <span class="cline-any cline-yes">236242x</span>
926
+ <span class="cline-any cline-neutral">&nbsp;</span>
927
+ <span class="cline-any cline-neutral">&nbsp;</span>
928
+ <span class="cline-any cline-yes">23660x</span>
929
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
+ <span class="cline-any cline-yes">259902x</span>
931
+ <span class="cline-any cline-yes">26494x</span>
932
+ <span class="cline-any cline-neutral">&nbsp;</span>
933
+ <span class="cline-any cline-neutral">&nbsp;</span>
934
+ <span class="cline-any cline-neutral">&nbsp;</span>
935
+ <span class="cline-any cline-neutral">&nbsp;</span>
936
+ <span class="cline-any cline-neutral">&nbsp;</span>
937
+ <span class="cline-any cline-yes">180x</span>
938
+ <span class="cline-any cline-yes">180x</span>
939
+ <span class="cline-any cline-yes">180x</span>
940
+ <span class="cline-any cline-yes">180x</span>
941
+ <span class="cline-any cline-yes">1170x</span>
942
+ <span class="cline-any cline-no">&nbsp;</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-yes">180x</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-yes">26494x</span>
949
+ <span class="cline-any cline-no">&nbsp;</span>
950
+ <span class="cline-any cline-neutral">&nbsp;</span>
951
+ <span class="cline-any cline-yes">26494x</span>
952
+ <span class="cline-any cline-neutral">&nbsp;</span>
953
+ <span class="cline-any cline-yes">259902x</span>
954
+ <span class="cline-any cline-yes">259902x</span>
955
+ <span class="cline-any cline-yes">3418x</span>
956
+ <span class="cline-any cline-no">&nbsp;</span>
957
+ <span class="cline-any cline-neutral">&nbsp;</span>
958
+ <span class="cline-any cline-yes">3418x</span>
959
+ <span class="cline-any cline-yes">3418x</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-neutral">&nbsp;</span>
963
+ <span class="cline-any cline-neutral">&nbsp;</span>
964
+ <span class="cline-any cline-yes">4652x</span>
965
+ <span class="cline-any cline-neutral">&nbsp;</span>
966
+ <span class="cline-any cline-neutral">&nbsp;</span>
967
+ <span class="cline-any cline-yes">3419x</span>
968
+ <span class="cline-any cline-yes">5492x</span>
969
+ <span class="cline-any cline-neutral">&nbsp;</span>
970
+ <span class="cline-any cline-neutral">&nbsp;</span>
971
+ <span class="cline-any cline-neutral">&nbsp;</span>
972
+ <span class="cline-any cline-yes">1x</span>
973
+ <span class="cline-any cline-yes">1x</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-neutral">&nbsp;</span>
976
+ <span class="cline-any cline-yes">5491x</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-yes">91x</span>
979
+ <span class="cline-any cline-yes">91x</span>
980
+ <span class="cline-any cline-yes">1x</span>
981
+ <span class="cline-any cline-neutral">&nbsp;</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-yes">5400x</span>
984
+ <span class="cline-any cline-yes">5400x</span>
985
+ <span class="cline-any cline-yes">11614x</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-neutral">&nbsp;</span>
990
+ <span class="cline-any cline-neutral">&nbsp;</span>
991
+ <span class="cline-any cline-neutral">&nbsp;</span>
992
+ <span class="cline-any cline-yes">23160x</span>
993
+ <span class="cline-any cline-yes">23160x</span>
994
+ <span class="cline-any cline-yes">118120x</span>
995
+ <span class="cline-any cline-neutral">&nbsp;</span>
996
+ <span class="cline-any cline-neutral">&nbsp;</span>
997
+ <span class="cline-any cline-neutral">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-neutral">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-neutral">&nbsp;</span>
1002
+ <span class="cline-any cline-neutral">&nbsp;</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-yes">121x</span>
1007
+ <span class="cline-any cline-neutral">&nbsp;</span>
1008
+ <span class="cline-any cline-neutral">&nbsp;</span>
1009
+ <span class="cline-any cline-neutral">&nbsp;</span>
1010
+ <span class="cline-any cline-yes">17927x</span>
1011
+ <span class="cline-any cline-neutral">&nbsp;</span>
1012
+ <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-yes">17927x</span>
1014
+ <span class="cline-any cline-neutral">&nbsp;</span>
1015
+ <span class="cline-any cline-yes">17927x</span>
1016
+ <span class="cline-any cline-neutral">&nbsp;</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-neutral">&nbsp;</span>
1019
+ <span class="cline-any cline-neutral">&nbsp;</span>
1020
+ <span class="cline-any cline-yes">89635x</span>
1021
+ <span class="cline-any cline-neutral">&nbsp;</span>
1022
+ <span class="cline-any cline-yes">17927x</span>
1023
+ <span class="cline-any cline-neutral">&nbsp;</span>
1024
+ <span class="cline-any cline-neutral">&nbsp;</span>
1025
+ <span class="cline-any cline-yes">89635x</span>
1026
+ <span class="cline-any cline-yes">89635x</span>
1027
+ <span class="cline-any cline-yes">461045x</span>
1028
+ <span class="cline-any cline-neutral">&nbsp;</span>
1029
+ <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-neutral">&nbsp;</span>
1031
+ <span class="cline-any cline-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-neutral">&nbsp;</span>
1033
+ <span class="cline-any cline-neutral">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-yes">121x</span>
1036
+ <span class="cline-any cline-yes">4637x</span>
1037
+ <span class="cline-any cline-yes">1x</span>
1038
+ <span class="cline-any cline-neutral">&nbsp;</span>
1039
+ <span class="cline-any cline-yes">4636x</span>
1040
+ <span class="cline-any cline-no">&nbsp;</span>
1041
+ <span class="cline-any cline-neutral">&nbsp;</span>
1042
+ <span class="cline-any cline-yes">4636x</span>
1043
+ <span class="cline-any cline-neutral">&nbsp;</span>
1044
+ <span class="cline-any cline-neutral">&nbsp;</span>
1045
+ <span class="cline-any cline-neutral">&nbsp;</span>
1046
+ <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-neutral">&nbsp;</span>
1049
+ <span class="cline-any cline-yes">121x</span>
1050
+ <span class="cline-any cline-yes">2962x</span>
1051
+ <span class="cline-any cline-yes">1x</span>
1052
+ <span class="cline-any cline-neutral">&nbsp;</span>
1053
+ <span class="cline-any cline-yes">2961x</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-neutral">&nbsp;</span>
1056
+ <span class="cline-any cline-neutral">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-neutral">&nbsp;</span>
1059
+ <span class="cline-any cline-neutral">&nbsp;</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-yes">121x</span>
1062
+ <span class="cline-any cline-yes">9612x</span>
1063
+ <span class="cline-any cline-yes">9475x</span>
1064
+ <span class="cline-any cline-neutral">&nbsp;</span>
1065
+ <span class="cline-any cline-yes">137x</span>
1066
+ <span class="cline-any cline-neutral">&nbsp;</span>
1067
+ <span class="cline-any cline-neutral">&nbsp;</span>
1068
+ <span class="cline-any cline-neutral">&nbsp;</span>
1069
+ <span class="cline-any cline-neutral">&nbsp;</span>
1070
+ <span class="cline-any cline-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-neutral">&nbsp;</span>
1072
+ <span class="cline-any cline-yes">121x</span>
1073
+ <span class="cline-any cline-yes">2962x</span>
1074
+ <span class="cline-any cline-yes">3x</span>
1075
+ <span class="cline-any cline-neutral">&nbsp;</span>
1076
+ <span class="cline-any cline-yes">2959x</span>
1077
+ <span class="cline-any cline-yes">2937x</span>
1078
+ <span class="cline-any cline-neutral">&nbsp;</span>
1079
+ <span class="cline-any cline-yes">22x</span>
1080
+ <span class="cline-any cline-neutral">&nbsp;</span>
1081
+ <span class="cline-any cline-neutral">&nbsp;</span>
1082
+ <span class="cline-any cline-yes">121x</span>
1083
+ <span class="cline-any cline-neutral">&nbsp;</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-neutral">&nbsp;</span>
1086
+ <span class="cline-any cline-yes">22582x</span>
1087
+ <span class="cline-any cline-yes">22582x</span>
1088
+ <span class="cline-any cline-yes">22582x</span>
1089
+ <span class="cline-any cline-yes">22582x</span>
1090
+ <span class="cline-any cline-yes">22582x</span>
1091
+ <span class="cline-any cline-yes">1x</span>
1092
+ <span class="cline-any cline-neutral">&nbsp;</span>
1093
+ <span class="cline-any cline-yes">22581x</span>
1094
+ <span class="cline-any cline-yes">115873x</span>
1095
+ <span class="cline-any cline-yes">115873x</span>
1096
+ <span class="cline-any cline-yes">1x</span>
1097
+ <span class="cline-any cline-neutral">&nbsp;</span>
1098
+ <span class="cline-any cline-yes">115872x</span>
1099
+ <span class="cline-any cline-yes">115872x</span>
1100
+ <span class="cline-any cline-yes">115872x</span>
1101
+ <span class="cline-any cline-neutral">&nbsp;</span>
1102
+ <span class="cline-any cline-neutral">&nbsp;</span>
1103
+ <span class="cline-any cline-neutral">&nbsp;</span>
1104
+ <span class="cline-any cline-yes">115872x</span>
1105
+ <span class="cline-any cline-yes">35766x</span>
1106
+ <span class="cline-any cline-yes">35766x</span>
1107
+ <span class="cline-any cline-yes">35766x</span>
1108
+ <span class="cline-any cline-neutral">&nbsp;</span>
1109
+ <span class="cline-any cline-neutral">&nbsp;</span>
1110
+ <span class="cline-any cline-yes">461x</span>
1111
+ <span class="cline-any cline-neutral">&nbsp;</span>
1112
+ <span class="cline-any cline-neutral">&nbsp;</span>
1113
+ <span class="cline-any cline-neutral">&nbsp;</span>
1114
+ <span class="cline-any cline-neutral">&nbsp;</span>
1115
+ <span class="cline-any cline-neutral">&nbsp;</span>
1116
+ <span class="cline-any cline-neutral">&nbsp;</span>
1117
+ <span class="cline-any cline-yes">22579x</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-neutral">&nbsp;</span>
1121
+ <span class="cline-any cline-yes">22579x</span>
1122
+ <span class="cline-any cline-yes">22579x</span>
1123
+ <span class="cline-any cline-yes">115869x</span>
1124
+ <span class="cline-any cline-yes">115869x</span>
1125
+ <span class="cline-any cline-neutral">&nbsp;</span>
1126
+ <span class="cline-any cline-neutral">&nbsp;</span>
1127
+ <span class="cline-any cline-yes">22579x</span>
1128
+ <span class="cline-any cline-neutral">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-neutral">&nbsp;</span>
1131
+ <span class="cline-any cline-neutral">&nbsp;</span>
1132
+ <span class="cline-any cline-neutral">&nbsp;</span>
1133
+ <span class="cline-any cline-neutral">&nbsp;</span>
1134
+ <span class="cline-any cline-neutral">&nbsp;</span>
1135
+ <span class="cline-any cline-neutral">&nbsp;</span>
1136
+ <span class="cline-any cline-yes">329383x</span>
1137
+ <span class="cline-any cline-neutral">&nbsp;</span>
1138
+ <span class="cline-any cline-neutral">&nbsp;</span>
1139
+ <span class="cline-any cline-neutral">&nbsp;</span>
1140
+ <span class="cline-any cline-no">&nbsp;</span>
1141
+ <span class="cline-any cline-no">&nbsp;</span>
1142
+ <span class="cline-any cline-no">&nbsp;</span>
1143
+ <span class="cline-any cline-neutral">&nbsp;</span>
1144
+ <span class="cline-any cline-no">&nbsp;</span>
1145
+ <span class="cline-any cline-neutral">&nbsp;</span>
1146
+ <span class="cline-any cline-neutral">&nbsp;</span>
1147
+ <span class="cline-any cline-neutral">&nbsp;</span>
1148
+ <span class="cline-any cline-no">&nbsp;</span>
1149
+ <span class="cline-any cline-neutral">&nbsp;</span>
1150
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// moog implements the pattern we use to initialize modules. It supports
1151
+ // inheritance via `extend`, the `init`, `beforeSuperClass`,
1152
+ // `methods`, and `extendMethods` features, etc.
1153
+ &nbsp;
1154
+ const _ = require('lodash');
1155
+ const { klona } = require('klona');
1156
+ &nbsp;
1157
+ module.exports = function(options) {
1158
+ &nbsp;
1159
+ options = options || {};
1160
+ &nbsp;
1161
+ const self = {};
1162
+ &nbsp;
1163
+ self.options = options;
1164
+ &nbsp;
1165
+ self.definitions = {};
1166
+ &nbsp;
1167
+ self.ordinal = 0;
1168
+ &nbsp;
1169
+ // The "extending" argument is of interest to subclasses like
1170
+ // moog-require that need to know about relative paths. Must
1171
+ // return the new definition for the convenience of moog-require too
1172
+ &nbsp;
1173
+ self.define = function(className, definition, extending) {
1174
+ &nbsp;
1175
+ if (!definition) {
1176
+ // This can happen because we use self.define as an autoloader
1177
+ // when resolving "extend". The moog-require module overloads
1178
+ // self.define to handle this case
1179
+ if (extending) {
1180
+ throw new Error(`The module ${className} is not defined. Referenced in ${extending.__meta.name}.`);
1181
+ } else {
1182
+ throw new Error(`The module ${className} is not defined.`);
1183
+ }
1184
+ }
1185
+ &nbsp;
1186
+ // Make a shallow clone to avoid numerous problems with multiple
1187
+ // intentionally separate instances of moog; otherwise they wind
1188
+ // up sharing `__meta` depending on whether they were loaded with
1189
+ // `require`, and so on. We must clone `__meta` itself for the
1190
+ // same reason, and also `__meta.chain` because it is an array
1191
+ // object. All other properties of `__meta` are simple values.
1192
+ &nbsp;
1193
+ definition = _.clone(definition);
1194
+ if (definition.__meta !== undefined) {
1195
+ definition.__meta = _.clone(definition.__meta);
1196
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (definition.__meta.chain) {
1197
+ <span class="cstat-no" title="statement not covered" > definition.__meta.chain = _.clone(definition.__meta.chain);</span>
1198
+ }
1199
+ }
1200
+ definition.__meta = definition.__meta || {};
1201
+ definition.__meta.name = className;
1202
+ definition.__meta.ordinal = self.ordinal++;
1203
+ &nbsp;
1204
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (!extending) {
1205
+ definition.__meta.explicit = true;
1206
+ }
1207
+ &nbsp;
1208
+ const exists = _.has(self.definitions, className);
1209
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (definition.extendIfFirst &amp;&amp; (<span class="branch-1 cbranch-no" title="branch not covered" >!exists)</span>) {
1210
+ <span class="cstat-no" title="statement not covered" > definition.extend = definition.extendIfFirst;</span>
1211
+ }
1212
+ &nbsp;
1213
+ if ((!definition.extend) &amp;&amp; (definition.extend !== false)) {
1214
+ if (exists) {
1215
+ // Double definitions result in implicit subclassing of
1216
+ // the original definition by the new one; anything else
1217
+ // trying to access this className name will see
1218
+ // the resulting subclass via self.definitions. However
1219
+ // we reset the __name property for the benefit of
1220
+ // implementations that need to distinguish assets that
1221
+ // come from each subclass in the inheritance chain.
1222
+ definition.extend = self.definitions[className];
1223
+ definition.__meta.name = self.originalToMy(definition.__meta.name);
1224
+ } else {
1225
+ // Extend the default base class by default, if any, unless
1226
+ // we're it
1227
+ if (self.options.defaultBaseClass &amp;&amp; className !== self.options.defaultBaseClass) {
1228
+ definition.extend = self.options.defaultBaseClass;
1229
+ }
1230
+ }
1231
+ }
1232
+ self.definitions[className] = definition;
1233
+ return definition;
1234
+ };
1235
+ &nbsp;
1236
+ self.redefine = function(className, definition) {
1237
+ delete self.definitions[className];
1238
+ return self.define(className, definition);
1239
+ };
1240
+ &nbsp;
1241
+ self.isDefined = function(className, options) {
1242
+ options = options || {};
1243
+ if (_.has(self.definitions, className)) {
1244
+ return true;
1245
+ }
1246
+ if (options.autoload === false) {
1247
+ return false;
1248
+ }
1249
+ try {
1250
+ // Can we autoload it?
1251
+ self.define(className);
1252
+ // Yes, but we don't really want it yet
1253
+ <span class="cstat-no" title="statement not covered" > delete self.definitions[className];</span>
1254
+ <span class="cstat-no" title="statement not covered" > return true;</span>
1255
+ } catch (e) {
1256
+ return false;
1257
+ }
1258
+ };
1259
+ &nbsp;
1260
+ // Create an instance of the given class name, awaiting the
1261
+ // init functions of each class in the inheritance tree,
1262
+ // if present
1263
+ &nbsp;
1264
+ self.create = async function(className, _options) {
1265
+ &nbsp;
1266
+ const {
1267
+ that,
1268
+ steps
1269
+ } = createPrep(className);
1270
+ &nbsp;
1271
+ const options = {};
1272
+ &nbsp;
1273
+ // Everything in Apostrophe appreciates self.options being
1274
+ // a thing already after create is complete
1275
+ that.options = options;
1276
+ &nbsp;
1277
+ // Now we want to start from the base class and go down
1278
+ steps.reverse();
1279
+ &nbsp;
1280
+ // Actually just the apos object merging in, app.js merging was handled elsewhere
1281
+ Object.assign(options, _options || {});
1282
+ &nbsp;
1283
+ self.options.sections = self.options.sections || [];
1284
+ self.options.unparsedSections = self.options.unparsedSections || [];
1285
+ &nbsp;
1286
+ const validKeys = [
1287
+ '__meta',
1288
+ 'options',
1289
+ 'cascades',
1290
+ 'beforeSuperClass',
1291
+ 'init',
1292
+ 'afterAllSections',
1293
+ 'extend',
1294
+ 'improve',
1295
+ 'methods',
1296
+ 'extendMethods',
1297
+ 'instantiate',
1298
+ 'bundle'
1299
+ ]
1300
+ .concat(self.options.sections)
1301
+ .concat(self.options.sections.map(getExtendKey))
1302
+ .concat(self.options.unparsedSections)
1303
+ .concat(self.options.unparsedSections.map(getExtendKey));
1304
+ &nbsp;
1305
+ const upgradeHints = {
1306
+ construct: 'in Apostrophe 3.x, "construct" has been replaced with "methods", "routes", "apiRoutes", etc.',
1307
+ beforeConstruct: 'in Apostrophe 3.x, "beforeConstruct" has been replaced with "beforeSuperClass". It takes (self) and should be solely concerned with modifying the options before the base class sees them. It must be synchronous. Check out the new fields section, you might not need beforeSuperClass.',
1308
+ afterConstruct: 'in Apostrophe 3.x, "afterConstruct" has been replaced with "init". It takes (self) and may be an async function.'
1309
+ };
1310
+ &nbsp;
1311
+ for (const step of steps) {
1312
+ Object.assign(options, step.options || {});
1313
+ }
1314
+ &nbsp;
1315
+ let cascades = [];
1316
+ for (const step of steps) {
1317
+ if (step.cascades) {
1318
+ cascades = cascades.concat(step.cascades);
1319
+ }
1320
+ for (const key of Object.keys(step)) {
1321
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!(validKeys.includes(key) || cascades.includes(key))) {
1322
+ const message = <span class="cstat-no" title="statement not covered" >upgradeHints[key] || `${key} is not a valid top level property for an Apostrophe 3.x module. Make sure you nest regular module options in the new "options" property.`;</span>
1323
+ <span class="cstat-no" title="statement not covered" > throw `${clarifyModuleName(step.__meta.name)}: ${message}`;</span>
1324
+ }
1325
+ }
1326
+ &nbsp;
1327
+ for (const cascade of cascades) {
1328
+ if (!that[cascade]) {
1329
+ that[cascade] = {};
1330
+ }
1331
+ if (!that[`${cascade}Groups`]) {
1332
+ that[`${cascade}Groups`] = {};
1333
+ }
1334
+ // You can have access to options within a function, if you choose to provide one
1335
+ const properties = ((typeof step[cascade]) === 'function') ? step[cascade](that, options) : step[cascade];
1336
+ if (properties) {
1337
+ const valid = [ 'add', 'remove', 'order', 'group' ];
1338
+ if (properties.add) {
1339
+ that[cascade] = {
1340
+ ...that[cascade],
1341
+ ...properties.add
1342
+ };
1343
+ }
1344
+ &nbsp;
1345
+ const lastFields = Object.entries(that[cascade])
1346
+ .filter(([ field, val ]) =&gt; val.last === true)
1347
+ .map(([ field, val ]) =&gt; field);
1348
+ &nbsp;
1349
+ if (properties.remove) {
1350
+ for (const field of properties.remove) {
1351
+ delete that[cascade][field];
1352
+ }
1353
+ }
1354
+ if (properties.order) {
1355
+ // 1. Ordered fields
1356
+ // 2. Other fields not marked as last
1357
+ // 3. Fields marked as last
1358
+ that[cascade] = Object.fromEntries([
1359
+ ...properties.order.map(field =&gt; [ field, that[cascade][field] ]),
1360
+ ...Object.keys(that[cascade])
1361
+ .filter(field =&gt; {
1362
+ return !properties.order.includes(field) &amp;&amp;
1363
+ !lastFields.includes(field);
1364
+ })
1365
+ .map(field =&gt; [ field, that[cascade][field] ]),
1366
+ ...lastFields.filter(field =&gt; !properties.order.includes(field))
1367
+ .map(<span class="fstat-no" title="function not covered" >fi</span>eld =&gt; <span class="cstat-no" title="statement not covered" >[ field, that[cascade][field] ])</span>
1368
+ ]);
1369
+ } else if (lastFields.length &gt; 0) {
1370
+ // 1. Fields not marked as last
1371
+ // 2. Fields marked as last
1372
+ that[cascade] = Object.fromEntries([
1373
+ ...Object.keys(that[cascade])
1374
+ .filter(field =&gt; !lastFields.includes(field))
1375
+ .map(field =&gt; [ field, that[cascade][field] ]),
1376
+ ...lastFields.map(field =&gt; [ field, that[cascade][field] ])
1377
+ ]);
1378
+ }
1379
+ &nbsp;
1380
+ if (properties.group) {
1381
+ const groups = klona(that[`${cascade}Groups`]);
1382
+ for (const value of Object.values(properties.group)) {
1383
+ for (const field of value.fields || []) {
1384
+ // Remove fields from existing groups if they're added to a new
1385
+ // group.
1386
+ for (const val of Object.values(groups)) {
1387
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (val.fields) {
1388
+ if (val.fields.includes(field)) {
1389
+ val.fields = val.fields.filter(_field =&gt; _field !== field);
1390
+ }
1391
+ }
1392
+ }
1393
+ }
1394
+ }
1395
+ &nbsp;
1396
+ // Combine groups of the same name now that inherited groups are
1397
+ // filtered
1398
+ for (const [ key, value ] of Object.entries(properties.group)) {
1399
+ if (groups[key] &amp;&amp; Array.isArray(groups[key].fields)) {
1400
+ value.fields = groups[key].fields.concat(value.fields);
1401
+ value.label = value.label || groups[key].label;
1402
+ }
1403
+ }
1404
+ &nbsp;
1405
+ that[`${cascade}Groups`] = {
1406
+ ...groups,
1407
+ ...klona(properties.group)
1408
+ };
1409
+ }
1410
+ for (const key of Object.keys(properties)) {
1411
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!valid.includes(key)) {
1412
+ <span class="cstat-no" title="statement not covered" > throw `${clarifyModuleName(step.__meta.name)}: ${key} is not valid inside "${cascade}".\nPossibly you forgot to nest a field in "add".`;</span>
1413
+ }
1414
+ }
1415
+ }
1416
+ }
1417
+ }
1418
+ &nbsp;
1419
+ // This needs to be after the options and cascades are compiled so it can manipulate
1420
+ // the result, yet we've already reordered the steps with the superclass first,
1421
+ // so walk them backwards to implement beforeSuperClass
1422
+ for (let i = (steps.length - 1); (i &gt;= 0); i--) {
1423
+ const step = steps[i];
1424
+ if (step.beforeSuperClass) {
1425
+ step.beforeSuperClass(that, options);
1426
+ }
1427
+ }
1428
+ &nbsp;
1429
+ // Always build methods first so they can be referenced safely
1430
+ // in other sections
1431
+ build(null, 'methods');
1432
+ &nbsp;
1433
+ // Unparsed sections, like `queries` and `extendQueries`. These are just captured
1434
+ // in an object with the props from each level so the module can do something with
1435
+ // them at runtime. Do it before init so that init can carry out queries
1436
+ (self.options.unparsedSections || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.forEach(section =&gt; capture(section));
1437
+ &nbsp;
1438
+ // init is called BEFORE routes etc. are called so that the section functions
1439
+ // for those things can benefit from methods, properties, etc. set by init
1440
+ // when deciding what to return
1441
+ for (const step of steps) {
1442
+ if (step.init) {
1443
+ await step.init(that, options);
1444
+ }
1445
+ }
1446
+ &nbsp;
1447
+ // helpers, eventHandlers, apiRoutes, renderRoutes, whatever comes up
1448
+ (self.options.sections || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.forEach(section =&gt; build(section, section));
1449
+ &nbsp;
1450
+ // afterAllSections is called last and has access to self.routes, etc.
1451
+ // For project-level developers this is usually not important, but
1452
+ // the core does call certain methods in the @apostrophecms/modules base class
1453
+ // implementation of afterAllSections to actually add the routes and handlers
1454
+ // to the system
1455
+ for (const step of steps) {
1456
+ if (step.afterAllSections) {
1457
+ await step.afterAllSections(that, options);
1458
+ }
1459
+ }
1460
+ &nbsp;
1461
+ function build(section, keyword) {
1462
+ for (const step of steps) {
1463
+ let context;
1464
+ if (section) {
1465
+ // non-methods attach to a named section object
1466
+ that[section] = that[section] || {};
1467
+ context = that[section];
1468
+ } else {
1469
+ // methods attach directly to self
1470
+ context = that;
1471
+ }
1472
+ if (step[keyword]) {
1473
+ if (Array.isArray(step[keyword])) {
1474
+ // If an array of method names is passed rather than an object,
1475
+ // add helper functions that invoke the methods of the same name.
1476
+ // Helpers in particular are often also needed as methods and it
1477
+ // is tedious to wrap them all by hand. Doing it this way ensures
1478
+ // that extendHelpers will behave sensibly
1479
+ const methods = step[keyword];
1480
+ step[keyword] = function(self, options) {
1481
+ const wrapped = {};
1482
+ methods.forEach(method =&gt; {
1483
+ wrapped[method] = <span class="fstat-no" title="function not covered" >fu</span>nction(...rest) {
1484
+ <span class="cstat-no" title="statement not covered" > return self[method](...rest);</span>
1485
+ };
1486
+ });
1487
+ return wrapped;
1488
+ };
1489
+ }
1490
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof step[keyword]) !== 'function') {
1491
+ <span class="cstat-no" title="statement not covered" > throw stepError(step, `${keyword} must be a function that takes (self) and returns an object`);</span>
1492
+ }
1493
+ _.merge(context, step[keyword](that, options));
1494
+ }
1495
+ const extend = getExtendKey(keyword);
1496
+ if (step[extend]) {
1497
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof step[extend]) !== 'function') {
1498
+ <span class="cstat-no" title="statement not covered" > throw stepError(step, `${extend} must be a function that takes (self) and returns an object`);</span>
1499
+ }
1500
+ const extensions = step[extend](that, options);
1501
+ wrap(context, extensions);
1502
+ }
1503
+ }
1504
+ }
1505
+ &nbsp;
1506
+ return that;
1507
+ &nbsp;
1508
+ function wrap(context, extensions) {
1509
+ _.each(extensions, (fn, name) =&gt; {
1510
+ if ((typeof fn) !== 'function') {
1511
+ // Nested structure is allowed, for instance to implement
1512
+ // the eventHandlers syntax, with event names
1513
+ // and the actual named handlers grouped within them
1514
+ context[name] = context[name] || <span class="branch-1 cbranch-no" title="branch not covered" >{};</span>
1515
+ return wrap(context[name], fn);
1516
+ }
1517
+ let superMethod;
1518
+ if (Array.isArray(context[name])) {
1519
+ // Middleware chain - actual route fn will be last fn
1520
+ superMethod = context[name][context[name].length - 1];
1521
+ context[name][context[name].length - 1] = function() {
1522
+ return fn.apply(that, [ superMethod, ...arguments ]);
1523
+ };
1524
+ } else {
1525
+ superMethod = context[name];
1526
+ context[name] = function() {
1527
+ return fn.apply(that, [ superMethod, ...arguments ]);
1528
+ };
1529
+ }
1530
+ });
1531
+ }
1532
+ &nbsp;
1533
+ function capture(section) {
1534
+ that.__meta[section] = {};
1535
+ for (const step of steps) {
1536
+ that.__meta[section][step.__meta.name] = step[section];
1537
+ }
1538
+ }
1539
+ &nbsp;
1540
+ };
1541
+ &nbsp;
1542
+ // Like self.create, but the returned object only has
1543
+ // the `__meta` property and the unparsed sections.
1544
+ // Used by the asset task to access just enough information
1545
+ // about modules without instantiating them fully in a release build
1546
+ // environment, where database access is typically forbidden.
1547
+ &nbsp;
1548
+ self.getMetadata = function(className) {
1549
+ const {
1550
+ that,
1551
+ steps
1552
+ } = createPrep(className);
1553
+ &nbsp;
1554
+ // Now we want to start from the base class and go down
1555
+ steps.reverse();
1556
+ &nbsp;
1557
+ self.options.unparsedSections = self.options.unparsedSections || <span class="branch-1 cbranch-no" title="branch not covered" >[];</span>
1558
+ &nbsp;
1559
+ // Unparsed sections, like `queries` and `extendQueries`. These are just captured
1560
+ // in an object with the props from each level so the module can do something with
1561
+ // them at runtime. Do it before init so that init can carry out queries
1562
+ (self.options.unparsedSections || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.forEach(section =&gt; capture(section));
1563
+ &nbsp;
1564
+ return that;
1565
+ &nbsp;
1566
+ function capture(section) {
1567
+ that[section] = {};
1568
+ for (const step of steps) {
1569
+ that[section][step.__meta.name] = step[section];
1570
+ }
1571
+ }
1572
+ };
1573
+ &nbsp;
1574
+ // Returns true if the given object is of the given moog class.
1575
+ // If the object is not a moog object, `false` is returned.
1576
+ &nbsp;
1577
+ self.instanceOf = function(object, name) {
1578
+ if (!object.__meta) {
1579
+ return false;
1580
+ }
1581
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!object.__meta.chain) {
1582
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1583
+ }
1584
+ return !!_.find(object.__meta.chain, { name: name });
1585
+ };
1586
+ &nbsp;
1587
+ // Given a moog class name like `my-foo` or `@namespace/my-foo`,
1588
+ // this method will return `foo` or `@namespace/my-foo`. Any other
1589
+ // name is returned as-is.
1590
+ &nbsp;
1591
+ self.myToOriginal = function(name) {
1592
+ if (name.match(/^my-/)) {
1593
+ return name.replace(/^my-/, '');
1594
+ }
1595
+ return name.replace(/^@([^/]+)\/my-(.*)$/, '@$1/$2');
1596
+ };
1597
+ &nbsp;
1598
+ // Given a moog class name like `foo` or `@namespace/foo`, this method
1599
+ // will return `my-foo` or `@namespace/my-foo` as appropriate. The behavior
1600
+ // of this method when given a name that already has a my- prefix is
1601
+ // undefined and should not be relied upon (see isMy).
1602
+ &nbsp;
1603
+ self.originalToMy = function(name) {
1604
+ if (name.match(/^@/)) {
1605
+ return name.replace(/^@([^/]+)\/(.*)$/, '@$1/my-$2');
1606
+ } else {
1607
+ return 'my-' + name;
1608
+ }
1609
+ };
1610
+ &nbsp;
1611
+ // Given a moog class name like `my-foo` or `@namespace/my-foo`, this
1612
+ // method will return true. Otherwise it will return false.
1613
+ &nbsp;
1614
+ self.isMy = function(name) {
1615
+ if (name.match(/^my-/)) {
1616
+ return true;
1617
+ }
1618
+ if (name.match(/^@([^/]+)\/my-(.*)$/)) {
1619
+ return true;
1620
+ }
1621
+ return false;
1622
+ };
1623
+ &nbsp;
1624
+ return self;
1625
+ &nbsp;
1626
+ function createPrep(className) {
1627
+ &nbsp;
1628
+ const that = {};
1629
+ const steps = [];
1630
+ const seen = {};
1631
+ let next = self.definitions[className];
1632
+ if (!next) {
1633
+ throw new Error('The className ' + className + ' is not defined.');
1634
+ }
1635
+ while (next) {
1636
+ const current = next;
1637
+ if (_.has(seen, current.__meta.ordinal)) {
1638
+ throw new Error('The className ' + className + ' encounters an infinite loop, "extend" probably points back to itself or its subclass.');
1639
+ }
1640
+ seen[current.__meta.ordinal] = true;
1641
+ steps.push(current);
1642
+ next = current.extend;
1643
+ // In most cases it'll be a string we need to look up
1644
+ // in self.definitions. In a few cases it is already
1645
+ // a pointer to another definition (see double defines, above)
1646
+ if (typeof (next) === 'string') {
1647
+ const nextName = next;
1648
+ next = self.definitions[nextName];
1649
+ if (!next) {
1650
+ // Try to use define as an autoloader. This will fail in
1651
+ // the default implementation
1652
+ next = self.define(nextName, undefined, current);
1653
+ }
1654
+ }
1655
+ }
1656
+ &nbsp;
1657
+ // Attach metadata about the modules in the
1658
+ // inheritance chain, base class first
1659
+ that.__meta = {
1660
+ chain: [],
1661
+ name: className
1662
+ };
1663
+ let i = steps.length - 1;
1664
+ while (i &gt;= 0) {
1665
+ that.__meta.chain.push(steps[i].__meta);
1666
+ i--;
1667
+ }
1668
+ &nbsp;
1669
+ return {
1670
+ that,
1671
+ steps
1672
+ };
1673
+ }
1674
+ &nbsp;
1675
+ };
1676
+ &nbsp;
1677
+ function getExtendKey(keyword) {
1678
+ return 'extend' + keyword.charAt(0).toUpperCase() + keyword.slice(1);
1679
+ }
1680
+ &nbsp;
1681
+ function <span class="fstat-no" title="function not covered" >clarifyModuleName(</span>original) {
1682
+ const name = <span class="cstat-no" title="statement not covered" >original.replace(/^my-/, '').replace(/^(@[^/]+\/)my-(.*)$/, '$1$2');</span>
1683
+ <span class="cstat-no" title="statement not covered" > if (name !== original) {</span>
1684
+ <span class="cstat-no" title="statement not covered" > return `${name} (project level)`;</span>
1685
+ }
1686
+ <span class="cstat-no" title="statement not covered" > return name;</span>
1687
+ }
1688
+ &nbsp;
1689
+ function <span class="fstat-no" title="function not covered" >stepError(</span>step, message) {
1690
+ <span class="cstat-no" title="statement not covered" > throw new Error(`${clarifyModuleName(step.__meta.name)}: ${message}`);</span>
1691
+ }
1692
+ &nbsp;</pre></td></tr></table></pre>
1693
+
1694
+ <div class='push'></div><!-- for sticky footer -->
1695
+ </div><!-- /wrapper -->
1696
+ <div class='footer quiet pad2 space-top1 center small'>
1697
+ Code coverage generated by
1698
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1699
+ at Wed Jun 08 2022 11:06:49 GMT+0200 (Central European Summer Time)
1700
+ </div>
1701
+ <script src="../../prettify.js"></script>
1702
+ <script>
1703
+ window.onload = function () {
1704
+ prettyPrint();
1705
+ };
1706
+ </script>
1707
+ <script src="../../sorter.js"></script>
1708
+ <script src="../../block-navigation.js"></script>
1709
+ </body>
1710
+ </html>
1711
+