apostrophe 2.221.0 → 2.221.2

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 (195) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/lib/modules/apostrophe-caches/index.js +23 -1
  3. package/lib/modules/apostrophe-soft-redirects/index.js +21 -14
  4. package/package.json +1 -1
  5. package/test/caches.js +29 -0
  6. package/test/soft-redirects.js +16 -3
  7. package/.nyc_output/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +0 -1
  8. package/.nyc_output/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +0 -1
  9. package/.nyc_output/99acae99-becc-463d-ba35-9333f88d2694.json +0 -1
  10. package/.nyc_output/d071f9e0-3b11-44e6-9817-69f184dd064d.json +0 -1
  11. package/.nyc_output/ed000bec-7ff7-49bf-a109-d17bfe883433.json +0 -1
  12. package/.nyc_output/processinfo/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +0 -1
  13. package/.nyc_output/processinfo/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +0 -1
  14. package/.nyc_output/processinfo/99acae99-becc-463d-ba35-9333f88d2694.json +0 -1
  15. package/.nyc_output/processinfo/d071f9e0-3b11-44e6-9817-69f184dd064d.json +0 -1
  16. package/.nyc_output/processinfo/ed000bec-7ff7-49bf-a109-d17bfe883433.json +0 -1
  17. package/.nyc_output/processinfo/index.json +0 -1
  18. package/coverage/a3/defaults.js.html +0 -253
  19. package/coverage/a3/index.html +0 -131
  20. package/coverage/a3/index.js.html +0 -2338
  21. package/coverage/a3/lib/escape-host.js.html +0 -109
  22. package/coverage/a3/lib/index.html +0 -176
  23. package/coverage/a3/lib/mongodb-connect.js.html +0 -250
  24. package/coverage/a3/lib/moog-require.js.html +0 -790
  25. package/coverage/a3/lib/moog.js.html +0 -1711
  26. package/coverage/a3/lib/opentelemetry.js.html +0 -517
  27. package/coverage/a3/modules/@apostrophecms/admin-bar/index.html +0 -116
  28. package/coverage/a3/modules/@apostrophecms/admin-bar/index.js.html +0 -931
  29. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.html +0 -116
  30. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.js.html +0 -115
  31. package/coverage/a3/modules/@apostrophecms/any-page-type/index.html +0 -116
  32. package/coverage/a3/modules/@apostrophecms/any-page-type/index.js.html +0 -1105
  33. package/coverage/a3/modules/@apostrophecms/archive-page/index.html +0 -116
  34. package/coverage/a3/modules/@apostrophecms/archive-page/index.js.html +0 -97
  35. package/coverage/a3/modules/@apostrophecms/area/index.html +0 -116
  36. package/coverage/a3/modules/@apostrophecms/area/index.js.html +0 -2104
  37. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/area.js.html +0 -469
  38. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/index.html +0 -131
  39. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/widget.js.html +0 -286
  40. package/coverage/a3/modules/@apostrophecms/asset/index.html +0 -116
  41. package/coverage/a3/modules/@apostrophecms/asset/index.js.html +0 -3982
  42. package/coverage/a3/modules/@apostrophecms/asset/lib/globalIcons.js.html +0 -346
  43. package/coverage/a3/modules/@apostrophecms/asset/lib/index.html +0 -116
  44. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/index.html +0 -131
  45. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js.html +0 -289
  46. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.vue.js.html +0 -148
  47. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/index.html +0 -116
  48. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/index.html +0 -131
  49. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.es5.js.html +0 -184
  50. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js.html +0 -238
  51. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/utils.js.html +0 -958
  52. package/coverage/a3/modules/@apostrophecms/attachment/index.html +0 -116
  53. package/coverage/a3/modules/@apostrophecms/attachment/index.js.html +0 -3676
  54. package/coverage/a3/modules/@apostrophecms/attachment/lib/index.html +0 -116
  55. package/coverage/a3/modules/@apostrophecms/attachment/lib/legacy-migrations.js.html +0 -205
  56. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/index.html +0 -116
  57. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/rescale.js.html +0 -328
  58. package/coverage/a3/modules/@apostrophecms/busy/index.html +0 -116
  59. package/coverage/a3/modules/@apostrophecms/busy/index.js.html +0 -145
  60. package/coverage/a3/modules/@apostrophecms/cache/index.html +0 -116
  61. package/coverage/a3/modules/@apostrophecms/cache/index.js.html +0 -424
  62. package/coverage/a3/modules/@apostrophecms/db/index.html +0 -116
  63. package/coverage/a3/modules/@apostrophecms/db/index.js.html +0 -640
  64. package/coverage/a3/modules/@apostrophecms/doc/index.html +0 -116
  65. package/coverage/a3/modules/@apostrophecms/doc/index.js.html +0 -3937
  66. package/coverage/a3/modules/@apostrophecms/doc/lib/index.html +0 -116
  67. package/coverage/a3/modules/@apostrophecms/doc/lib/legacy-migrations.js.html +0 -622
  68. package/coverage/a3/modules/@apostrophecms/doc-type/index.html +0 -116
  69. package/coverage/a3/modules/@apostrophecms/doc-type/index.js.html +0 -8638
  70. package/coverage/a3/modules/@apostrophecms/doc-type/lib/autocomplete.js.html +0 -319
  71. package/coverage/a3/modules/@apostrophecms/doc-type/lib/index.html +0 -116
  72. package/coverage/a3/modules/@apostrophecms/email/index.html +0 -116
  73. package/coverage/a3/modules/@apostrophecms/email/index.js.html +0 -301
  74. package/coverage/a3/modules/@apostrophecms/error/index.html +0 -116
  75. package/coverage/a3/modules/@apostrophecms/error/index.js.html +0 -202
  76. package/coverage/a3/modules/@apostrophecms/express/index.html +0 -116
  77. package/coverage/a3/modules/@apostrophecms/express/index.js.html +0 -2116
  78. package/coverage/a3/modules/@apostrophecms/file/index.html +0 -116
  79. package/coverage/a3/modules/@apostrophecms/file/index.js.html +0 -367
  80. package/coverage/a3/modules/@apostrophecms/file-tag/index.html +0 -116
  81. package/coverage/a3/modules/@apostrophecms/file-tag/index.js.html +0 -127
  82. package/coverage/a3/modules/@apostrophecms/global/index.html +0 -116
  83. package/coverage/a3/modules/@apostrophecms/global/index.js.html +0 -535
  84. package/coverage/a3/modules/@apostrophecms/home-page/index.html +0 -116
  85. package/coverage/a3/modules/@apostrophecms/home-page/index.js.html +0 -94
  86. package/coverage/a3/modules/@apostrophecms/html-widget/index.html +0 -116
  87. package/coverage/a3/modules/@apostrophecms/html-widget/index.js.html +0 -271
  88. package/coverage/a3/modules/@apostrophecms/http/index.html +0 -116
  89. package/coverage/a3/modules/@apostrophecms/http/index.js.html +0 -976
  90. package/coverage/a3/modules/@apostrophecms/i18n/index.html +0 -116
  91. package/coverage/a3/modules/@apostrophecms/i18n/index.js.html +0 -2083
  92. package/coverage/a3/modules/@apostrophecms/image/index.html +0 -116
  93. package/coverage/a3/modules/@apostrophecms/image/index.js.html +0 -1486
  94. package/coverage/a3/modules/@apostrophecms/image-tag/index.html +0 -116
  95. package/coverage/a3/modules/@apostrophecms/image-tag/index.js.html +0 -127
  96. package/coverage/a3/modules/@apostrophecms/image-widget/index.html +0 -116
  97. package/coverage/a3/modules/@apostrophecms/image-widget/index.js.html +0 -145
  98. package/coverage/a3/modules/@apostrophecms/job/index.html +0 -116
  99. package/coverage/a3/modules/@apostrophecms/job/index.js.html +0 -1321
  100. package/coverage/a3/modules/@apostrophecms/launder/index.html +0 -116
  101. package/coverage/a3/modules/@apostrophecms/launder/index.js.html +0 -124
  102. package/coverage/a3/modules/@apostrophecms/lock/index.html +0 -116
  103. package/coverage/a3/modules/@apostrophecms/lock/index.js.html +0 -676
  104. package/coverage/a3/modules/@apostrophecms/login/index.html +0 -116
  105. package/coverage/a3/modules/@apostrophecms/login/index.js.html +0 -2617
  106. package/coverage/a3/modules/@apostrophecms/migration/index.html +0 -116
  107. package/coverage/a3/modules/@apostrophecms/migration/index.js.html +0 -970
  108. package/coverage/a3/modules/@apostrophecms/modal/index.html +0 -116
  109. package/coverage/a3/modules/@apostrophecms/modal/index.js.html +0 -193
  110. package/coverage/a3/modules/@apostrophecms/module/index.html +0 -116
  111. package/coverage/a3/modules/@apostrophecms/module/index.js.html +0 -2500
  112. package/coverage/a3/modules/@apostrophecms/module/lib/events.js.html +0 -547
  113. package/coverage/a3/modules/@apostrophecms/module/lib/index.html +0 -116
  114. package/coverage/a3/modules/@apostrophecms/notification/index.html +0 -116
  115. package/coverage/a3/modules/@apostrophecms/notification/index.js.html +0 -1315
  116. package/coverage/a3/modules/@apostrophecms/oembed/index.html +0 -116
  117. package/coverage/a3/modules/@apostrophecms/oembed/index.js.html +0 -781
  118. package/coverage/a3/modules/@apostrophecms/oembed/lib/index.html +0 -161
  119. package/coverage/a3/modules/@apostrophecms/oembed/lib/infogram.js.html +0 -178
  120. package/coverage/a3/modules/@apostrophecms/oembed/lib/vimeo.js.html +0 -124
  121. package/coverage/a3/modules/@apostrophecms/oembed/lib/wufoo.js.html +0 -256
  122. package/coverage/a3/modules/@apostrophecms/oembed/lib/youtube.js.html +0 -322
  123. package/coverage/a3/modules/@apostrophecms/oembed-field/index.html +0 -116
  124. package/coverage/a3/modules/@apostrophecms/oembed-field/index.js.html +0 -268
  125. package/coverage/a3/modules/@apostrophecms/page/index.html +0 -116
  126. package/coverage/a3/modules/@apostrophecms/page/index.js.html +0 -6955
  127. package/coverage/a3/modules/@apostrophecms/page/lib/index.html +0 -116
  128. package/coverage/a3/modules/@apostrophecms/page/lib/legacy-migrations.js.html +0 -568
  129. package/coverage/a3/modules/@apostrophecms/page-type/index.html +0 -116
  130. package/coverage/a3/modules/@apostrophecms/page-type/index.js.html +0 -1501
  131. package/coverage/a3/modules/@apostrophecms/pager/index.html +0 -116
  132. package/coverage/a3/modules/@apostrophecms/pager/index.js.html +0 -232
  133. package/coverage/a3/modules/@apostrophecms/permission/index.html +0 -116
  134. package/coverage/a3/modules/@apostrophecms/permission/index.js.html +0 -1057
  135. package/coverage/a3/modules/@apostrophecms/permission/lib/index.html +0 -116
  136. package/coverage/a3/modules/@apostrophecms/permission/lib/legacy-migrations.js.html +0 -160
  137. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.html +0 -116
  138. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.js.html +0 -1051
  139. package/coverage/a3/modules/@apostrophecms/piece-type/index.html +0 -116
  140. package/coverage/a3/modules/@apostrophecms/piece-type/index.js.html +0 -3103
  141. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.html +0 -116
  142. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.js.html +0 -157
  143. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.html +0 -116
  144. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.js.html +0 -1363
  145. package/coverage/a3/modules/@apostrophecms/schema/index.html +0 -116
  146. package/coverage/a3/modules/@apostrophecms/schema/index.js.html +0 -4603
  147. package/coverage/a3/modules/@apostrophecms/schema/lib/addFieldTypes.js.html +0 -3502
  148. package/coverage/a3/modules/@apostrophecms/schema/lib/index.html +0 -131
  149. package/coverage/a3/modules/@apostrophecms/schema/lib/joinr.js.html +0 -703
  150. package/coverage/a3/modules/@apostrophecms/search/index.html +0 -116
  151. package/coverage/a3/modules/@apostrophecms/search/index.js.html +0 -1222
  152. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.html +0 -116
  153. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.js.html +0 -343
  154. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.html +0 -116
  155. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.js.html +0 -595
  156. package/coverage/a3/modules/@apostrophecms/task/index.html +0 -116
  157. package/coverage/a3/modules/@apostrophecms/task/index.js.html +0 -1147
  158. package/coverage/a3/modules/@apostrophecms/template/index.html +0 -116
  159. package/coverage/a3/modules/@apostrophecms/template/index.js.html +0 -2731
  160. package/coverage/a3/modules/@apostrophecms/template/lib/bundlesLoader.js.html +0 -559
  161. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/component.js.html +0 -310
  162. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/fragment.js.html +0 -325
  163. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/index.html +0 -146
  164. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/render.js.html +0 -490
  165. package/coverage/a3/modules/@apostrophecms/template/lib/index.html +0 -131
  166. package/coverage/a3/modules/@apostrophecms/template/lib/nunjucksLoader.js.html +0 -658
  167. package/coverage/a3/modules/@apostrophecms/ui/index.html +0 -116
  168. package/coverage/a3/modules/@apostrophecms/ui/index.js.html +0 -181
  169. package/coverage/a3/modules/@apostrophecms/uploadfs/index.html +0 -116
  170. package/coverage/a3/modules/@apostrophecms/uploadfs/index.js.html +0 -286
  171. package/coverage/a3/modules/@apostrophecms/url/index.html +0 -116
  172. package/coverage/a3/modules/@apostrophecms/url/index.js.html +0 -733
  173. package/coverage/a3/modules/@apostrophecms/user/index.html +0 -116
  174. package/coverage/a3/modules/@apostrophecms/user/index.js.html +0 -1684
  175. package/coverage/a3/modules/@apostrophecms/user/lib/index.html +0 -116
  176. package/coverage/a3/modules/@apostrophecms/user/lib/legacy-migrations.js.html +0 -157
  177. package/coverage/a3/modules/@apostrophecms/util/index.html +0 -116
  178. package/coverage/a3/modules/@apostrophecms/util/index.js.html +0 -3424
  179. package/coverage/a3/modules/@apostrophecms/util/lib/index.html +0 -116
  180. package/coverage/a3/modules/@apostrophecms/util/lib/logger.js.html +0 -319
  181. package/coverage/a3/modules/@apostrophecms/video-widget/index.html +0 -116
  182. package/coverage/a3/modules/@apostrophecms/video-widget/index.js.html +0 -178
  183. package/coverage/a3/modules/@apostrophecms/widget-type/index.html +0 -116
  184. package/coverage/a3/modules/@apostrophecms/widget-type/index.js.html +0 -1225
  185. package/coverage/a3/test-lib/index.html +0 -131
  186. package/coverage/a3/test-lib/test.js.html +0 -232
  187. package/coverage/a3/test-lib/util.js.html +0 -373
  188. package/coverage/base.css +0 -224
  189. package/coverage/block-navigation.js +0 -87
  190. package/coverage/favicon.png +0 -0
  191. package/coverage/index.html +0 -1256
  192. package/coverage/prettify.css +0 -1
  193. package/coverage/prettify.js +0 -2
  194. package/coverage/sort-arrow-sprite.png +0 -0
  195. package/coverage/sorter.js +0 -196
@@ -1,3502 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for a3/modules/@apostrophecms/schema/lib/addFieldTypes.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/modules/@apostrophecms/schema/lib</a> addFieldTypes.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">53.29% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>283/531</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">45.82% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>214/467</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">49.48% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>48/97</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">53.21% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>281/528</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 medium'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a>
758
- <a name='L693'></a><a href='#L693'>693</a>
759
- <a name='L694'></a><a href='#L694'>694</a>
760
- <a name='L695'></a><a href='#L695'>695</a>
761
- <a name='L696'></a><a href='#L696'>696</a>
762
- <a name='L697'></a><a href='#L697'>697</a>
763
- <a name='L698'></a><a href='#L698'>698</a>
764
- <a name='L699'></a><a href='#L699'>699</a>
765
- <a name='L700'></a><a href='#L700'>700</a>
766
- <a name='L701'></a><a href='#L701'>701</a>
767
- <a name='L702'></a><a href='#L702'>702</a>
768
- <a name='L703'></a><a href='#L703'>703</a>
769
- <a name='L704'></a><a href='#L704'>704</a>
770
- <a name='L705'></a><a href='#L705'>705</a>
771
- <a name='L706'></a><a href='#L706'>706</a>
772
- <a name='L707'></a><a href='#L707'>707</a>
773
- <a name='L708'></a><a href='#L708'>708</a>
774
- <a name='L709'></a><a href='#L709'>709</a>
775
- <a name='L710'></a><a href='#L710'>710</a>
776
- <a name='L711'></a><a href='#L711'>711</a>
777
- <a name='L712'></a><a href='#L712'>712</a>
778
- <a name='L713'></a><a href='#L713'>713</a>
779
- <a name='L714'></a><a href='#L714'>714</a>
780
- <a name='L715'></a><a href='#L715'>715</a>
781
- <a name='L716'></a><a href='#L716'>716</a>
782
- <a name='L717'></a><a href='#L717'>717</a>
783
- <a name='L718'></a><a href='#L718'>718</a>
784
- <a name='L719'></a><a href='#L719'>719</a>
785
- <a name='L720'></a><a href='#L720'>720</a>
786
- <a name='L721'></a><a href='#L721'>721</a>
787
- <a name='L722'></a><a href='#L722'>722</a>
788
- <a name='L723'></a><a href='#L723'>723</a>
789
- <a name='L724'></a><a href='#L724'>724</a>
790
- <a name='L725'></a><a href='#L725'>725</a>
791
- <a name='L726'></a><a href='#L726'>726</a>
792
- <a name='L727'></a><a href='#L727'>727</a>
793
- <a name='L728'></a><a href='#L728'>728</a>
794
- <a name='L729'></a><a href='#L729'>729</a>
795
- <a name='L730'></a><a href='#L730'>730</a>
796
- <a name='L731'></a><a href='#L731'>731</a>
797
- <a name='L732'></a><a href='#L732'>732</a>
798
- <a name='L733'></a><a href='#L733'>733</a>
799
- <a name='L734'></a><a href='#L734'>734</a>
800
- <a name='L735'></a><a href='#L735'>735</a>
801
- <a name='L736'></a><a href='#L736'>736</a>
802
- <a name='L737'></a><a href='#L737'>737</a>
803
- <a name='L738'></a><a href='#L738'>738</a>
804
- <a name='L739'></a><a href='#L739'>739</a>
805
- <a name='L740'></a><a href='#L740'>740</a>
806
- <a name='L741'></a><a href='#L741'>741</a>
807
- <a name='L742'></a><a href='#L742'>742</a>
808
- <a name='L743'></a><a href='#L743'>743</a>
809
- <a name='L744'></a><a href='#L744'>744</a>
810
- <a name='L745'></a><a href='#L745'>745</a>
811
- <a name='L746'></a><a href='#L746'>746</a>
812
- <a name='L747'></a><a href='#L747'>747</a>
813
- <a name='L748'></a><a href='#L748'>748</a>
814
- <a name='L749'></a><a href='#L749'>749</a>
815
- <a name='L750'></a><a href='#L750'>750</a>
816
- <a name='L751'></a><a href='#L751'>751</a>
817
- <a name='L752'></a><a href='#L752'>752</a>
818
- <a name='L753'></a><a href='#L753'>753</a>
819
- <a name='L754'></a><a href='#L754'>754</a>
820
- <a name='L755'></a><a href='#L755'>755</a>
821
- <a name='L756'></a><a href='#L756'>756</a>
822
- <a name='L757'></a><a href='#L757'>757</a>
823
- <a name='L758'></a><a href='#L758'>758</a>
824
- <a name='L759'></a><a href='#L759'>759</a>
825
- <a name='L760'></a><a href='#L760'>760</a>
826
- <a name='L761'></a><a href='#L761'>761</a>
827
- <a name='L762'></a><a href='#L762'>762</a>
828
- <a name='L763'></a><a href='#L763'>763</a>
829
- <a name='L764'></a><a href='#L764'>764</a>
830
- <a name='L765'></a><a href='#L765'>765</a>
831
- <a name='L766'></a><a href='#L766'>766</a>
832
- <a name='L767'></a><a href='#L767'>767</a>
833
- <a name='L768'></a><a href='#L768'>768</a>
834
- <a name='L769'></a><a href='#L769'>769</a>
835
- <a name='L770'></a><a href='#L770'>770</a>
836
- <a name='L771'></a><a href='#L771'>771</a>
837
- <a name='L772'></a><a href='#L772'>772</a>
838
- <a name='L773'></a><a href='#L773'>773</a>
839
- <a name='L774'></a><a href='#L774'>774</a>
840
- <a name='L775'></a><a href='#L775'>775</a>
841
- <a name='L776'></a><a href='#L776'>776</a>
842
- <a name='L777'></a><a href='#L777'>777</a>
843
- <a name='L778'></a><a href='#L778'>778</a>
844
- <a name='L779'></a><a href='#L779'>779</a>
845
- <a name='L780'></a><a href='#L780'>780</a>
846
- <a name='L781'></a><a href='#L781'>781</a>
847
- <a name='L782'></a><a href='#L782'>782</a>
848
- <a name='L783'></a><a href='#L783'>783</a>
849
- <a name='L784'></a><a href='#L784'>784</a>
850
- <a name='L785'></a><a href='#L785'>785</a>
851
- <a name='L786'></a><a href='#L786'>786</a>
852
- <a name='L787'></a><a href='#L787'>787</a>
853
- <a name='L788'></a><a href='#L788'>788</a>
854
- <a name='L789'></a><a href='#L789'>789</a>
855
- <a name='L790'></a><a href='#L790'>790</a>
856
- <a name='L791'></a><a href='#L791'>791</a>
857
- <a name='L792'></a><a href='#L792'>792</a>
858
- <a name='L793'></a><a href='#L793'>793</a>
859
- <a name='L794'></a><a href='#L794'>794</a>
860
- <a name='L795'></a><a href='#L795'>795</a>
861
- <a name='L796'></a><a href='#L796'>796</a>
862
- <a name='L797'></a><a href='#L797'>797</a>
863
- <a name='L798'></a><a href='#L798'>798</a>
864
- <a name='L799'></a><a href='#L799'>799</a>
865
- <a name='L800'></a><a href='#L800'>800</a>
866
- <a name='L801'></a><a href='#L801'>801</a>
867
- <a name='L802'></a><a href='#L802'>802</a>
868
- <a name='L803'></a><a href='#L803'>803</a>
869
- <a name='L804'></a><a href='#L804'>804</a>
870
- <a name='L805'></a><a href='#L805'>805</a>
871
- <a name='L806'></a><a href='#L806'>806</a>
872
- <a name='L807'></a><a href='#L807'>807</a>
873
- <a name='L808'></a><a href='#L808'>808</a>
874
- <a name='L809'></a><a href='#L809'>809</a>
875
- <a name='L810'></a><a href='#L810'>810</a>
876
- <a name='L811'></a><a href='#L811'>811</a>
877
- <a name='L812'></a><a href='#L812'>812</a>
878
- <a name='L813'></a><a href='#L813'>813</a>
879
- <a name='L814'></a><a href='#L814'>814</a>
880
- <a name='L815'></a><a href='#L815'>815</a>
881
- <a name='L816'></a><a href='#L816'>816</a>
882
- <a name='L817'></a><a href='#L817'>817</a>
883
- <a name='L818'></a><a href='#L818'>818</a>
884
- <a name='L819'></a><a href='#L819'>819</a>
885
- <a name='L820'></a><a href='#L820'>820</a>
886
- <a name='L821'></a><a href='#L821'>821</a>
887
- <a name='L822'></a><a href='#L822'>822</a>
888
- <a name='L823'></a><a href='#L823'>823</a>
889
- <a name='L824'></a><a href='#L824'>824</a>
890
- <a name='L825'></a><a href='#L825'>825</a>
891
- <a name='L826'></a><a href='#L826'>826</a>
892
- <a name='L827'></a><a href='#L827'>827</a>
893
- <a name='L828'></a><a href='#L828'>828</a>
894
- <a name='L829'></a><a href='#L829'>829</a>
895
- <a name='L830'></a><a href='#L830'>830</a>
896
- <a name='L831'></a><a href='#L831'>831</a>
897
- <a name='L832'></a><a href='#L832'>832</a>
898
- <a name='L833'></a><a href='#L833'>833</a>
899
- <a name='L834'></a><a href='#L834'>834</a>
900
- <a name='L835'></a><a href='#L835'>835</a>
901
- <a name='L836'></a><a href='#L836'>836</a>
902
- <a name='L837'></a><a href='#L837'>837</a>
903
- <a name='L838'></a><a href='#L838'>838</a>
904
- <a name='L839'></a><a href='#L839'>839</a>
905
- <a name='L840'></a><a href='#L840'>840</a>
906
- <a name='L841'></a><a href='#L841'>841</a>
907
- <a name='L842'></a><a href='#L842'>842</a>
908
- <a name='L843'></a><a href='#L843'>843</a>
909
- <a name='L844'></a><a href='#L844'>844</a>
910
- <a name='L845'></a><a href='#L845'>845</a>
911
- <a name='L846'></a><a href='#L846'>846</a>
912
- <a name='L847'></a><a href='#L847'>847</a>
913
- <a name='L848'></a><a href='#L848'>848</a>
914
- <a name='L849'></a><a href='#L849'>849</a>
915
- <a name='L850'></a><a href='#L850'>850</a>
916
- <a name='L851'></a><a href='#L851'>851</a>
917
- <a name='L852'></a><a href='#L852'>852</a>
918
- <a name='L853'></a><a href='#L853'>853</a>
919
- <a name='L854'></a><a href='#L854'>854</a>
920
- <a name='L855'></a><a href='#L855'>855</a>
921
- <a name='L856'></a><a href='#L856'>856</a>
922
- <a name='L857'></a><a href='#L857'>857</a>
923
- <a name='L858'></a><a href='#L858'>858</a>
924
- <a name='L859'></a><a href='#L859'>859</a>
925
- <a name='L860'></a><a href='#L860'>860</a>
926
- <a name='L861'></a><a href='#L861'>861</a>
927
- <a name='L862'></a><a href='#L862'>862</a>
928
- <a name='L863'></a><a href='#L863'>863</a>
929
- <a name='L864'></a><a href='#L864'>864</a>
930
- <a name='L865'></a><a href='#L865'>865</a>
931
- <a name='L866'></a><a href='#L866'>866</a>
932
- <a name='L867'></a><a href='#L867'>867</a>
933
- <a name='L868'></a><a href='#L868'>868</a>
934
- <a name='L869'></a><a href='#L869'>869</a>
935
- <a name='L870'></a><a href='#L870'>870</a>
936
- <a name='L871'></a><a href='#L871'>871</a>
937
- <a name='L872'></a><a href='#L872'>872</a>
938
- <a name='L873'></a><a href='#L873'>873</a>
939
- <a name='L874'></a><a href='#L874'>874</a>
940
- <a name='L875'></a><a href='#L875'>875</a>
941
- <a name='L876'></a><a href='#L876'>876</a>
942
- <a name='L877'></a><a href='#L877'>877</a>
943
- <a name='L878'></a><a href='#L878'>878</a>
944
- <a name='L879'></a><a href='#L879'>879</a>
945
- <a name='L880'></a><a href='#L880'>880</a>
946
- <a name='L881'></a><a href='#L881'>881</a>
947
- <a name='L882'></a><a href='#L882'>882</a>
948
- <a name='L883'></a><a href='#L883'>883</a>
949
- <a name='L884'></a><a href='#L884'>884</a>
950
- <a name='L885'></a><a href='#L885'>885</a>
951
- <a name='L886'></a><a href='#L886'>886</a>
952
- <a name='L887'></a><a href='#L887'>887</a>
953
- <a name='L888'></a><a href='#L888'>888</a>
954
- <a name='L889'></a><a href='#L889'>889</a>
955
- <a name='L890'></a><a href='#L890'>890</a>
956
- <a name='L891'></a><a href='#L891'>891</a>
957
- <a name='L892'></a><a href='#L892'>892</a>
958
- <a name='L893'></a><a href='#L893'>893</a>
959
- <a name='L894'></a><a href='#L894'>894</a>
960
- <a name='L895'></a><a href='#L895'>895</a>
961
- <a name='L896'></a><a href='#L896'>896</a>
962
- <a name='L897'></a><a href='#L897'>897</a>
963
- <a name='L898'></a><a href='#L898'>898</a>
964
- <a name='L899'></a><a href='#L899'>899</a>
965
- <a name='L900'></a><a href='#L900'>900</a>
966
- <a name='L901'></a><a href='#L901'>901</a>
967
- <a name='L902'></a><a href='#L902'>902</a>
968
- <a name='L903'></a><a href='#L903'>903</a>
969
- <a name='L904'></a><a href='#L904'>904</a>
970
- <a name='L905'></a><a href='#L905'>905</a>
971
- <a name='L906'></a><a href='#L906'>906</a>
972
- <a name='L907'></a><a href='#L907'>907</a>
973
- <a name='L908'></a><a href='#L908'>908</a>
974
- <a name='L909'></a><a href='#L909'>909</a>
975
- <a name='L910'></a><a href='#L910'>910</a>
976
- <a name='L911'></a><a href='#L911'>911</a>
977
- <a name='L912'></a><a href='#L912'>912</a>
978
- <a name='L913'></a><a href='#L913'>913</a>
979
- <a name='L914'></a><a href='#L914'>914</a>
980
- <a name='L915'></a><a href='#L915'>915</a>
981
- <a name='L916'></a><a href='#L916'>916</a>
982
- <a name='L917'></a><a href='#L917'>917</a>
983
- <a name='L918'></a><a href='#L918'>918</a>
984
- <a name='L919'></a><a href='#L919'>919</a>
985
- <a name='L920'></a><a href='#L920'>920</a>
986
- <a name='L921'></a><a href='#L921'>921</a>
987
- <a name='L922'></a><a href='#L922'>922</a>
988
- <a name='L923'></a><a href='#L923'>923</a>
989
- <a name='L924'></a><a href='#L924'>924</a>
990
- <a name='L925'></a><a href='#L925'>925</a>
991
- <a name='L926'></a><a href='#L926'>926</a>
992
- <a name='L927'></a><a href='#L927'>927</a>
993
- <a name='L928'></a><a href='#L928'>928</a>
994
- <a name='L929'></a><a href='#L929'>929</a>
995
- <a name='L930'></a><a href='#L930'>930</a>
996
- <a name='L931'></a><a href='#L931'>931</a>
997
- <a name='L932'></a><a href='#L932'>932</a>
998
- <a name='L933'></a><a href='#L933'>933</a>
999
- <a name='L934'></a><a href='#L934'>934</a>
1000
- <a name='L935'></a><a href='#L935'>935</a>
1001
- <a name='L936'></a><a href='#L936'>936</a>
1002
- <a name='L937'></a><a href='#L937'>937</a>
1003
- <a name='L938'></a><a href='#L938'>938</a>
1004
- <a name='L939'></a><a href='#L939'>939</a>
1005
- <a name='L940'></a><a href='#L940'>940</a>
1006
- <a name='L941'></a><a href='#L941'>941</a>
1007
- <a name='L942'></a><a href='#L942'>942</a>
1008
- <a name='L943'></a><a href='#L943'>943</a>
1009
- <a name='L944'></a><a href='#L944'>944</a>
1010
- <a name='L945'></a><a href='#L945'>945</a>
1011
- <a name='L946'></a><a href='#L946'>946</a>
1012
- <a name='L947'></a><a href='#L947'>947</a>
1013
- <a name='L948'></a><a href='#L948'>948</a>
1014
- <a name='L949'></a><a href='#L949'>949</a>
1015
- <a name='L950'></a><a href='#L950'>950</a>
1016
- <a name='L951'></a><a href='#L951'>951</a>
1017
- <a name='L952'></a><a href='#L952'>952</a>
1018
- <a name='L953'></a><a href='#L953'>953</a>
1019
- <a name='L954'></a><a href='#L954'>954</a>
1020
- <a name='L955'></a><a href='#L955'>955</a>
1021
- <a name='L956'></a><a href='#L956'>956</a>
1022
- <a name='L957'></a><a href='#L957'>957</a>
1023
- <a name='L958'></a><a href='#L958'>958</a>
1024
- <a name='L959'></a><a href='#L959'>959</a>
1025
- <a name='L960'></a><a href='#L960'>960</a>
1026
- <a name='L961'></a><a href='#L961'>961</a>
1027
- <a name='L962'></a><a href='#L962'>962</a>
1028
- <a name='L963'></a><a href='#L963'>963</a>
1029
- <a name='L964'></a><a href='#L964'>964</a>
1030
- <a name='L965'></a><a href='#L965'>965</a>
1031
- <a name='L966'></a><a href='#L966'>966</a>
1032
- <a name='L967'></a><a href='#L967'>967</a>
1033
- <a name='L968'></a><a href='#L968'>968</a>
1034
- <a name='L969'></a><a href='#L969'>969</a>
1035
- <a name='L970'></a><a href='#L970'>970</a>
1036
- <a name='L971'></a><a href='#L971'>971</a>
1037
- <a name='L972'></a><a href='#L972'>972</a>
1038
- <a name='L973'></a><a href='#L973'>973</a>
1039
- <a name='L974'></a><a href='#L974'>974</a>
1040
- <a name='L975'></a><a href='#L975'>975</a>
1041
- <a name='L976'></a><a href='#L976'>976</a>
1042
- <a name='L977'></a><a href='#L977'>977</a>
1043
- <a name='L978'></a><a href='#L978'>978</a>
1044
- <a name='L979'></a><a href='#L979'>979</a>
1045
- <a name='L980'></a><a href='#L980'>980</a>
1046
- <a name='L981'></a><a href='#L981'>981</a>
1047
- <a name='L982'></a><a href='#L982'>982</a>
1048
- <a name='L983'></a><a href='#L983'>983</a>
1049
- <a name='L984'></a><a href='#L984'>984</a>
1050
- <a name='L985'></a><a href='#L985'>985</a>
1051
- <a name='L986'></a><a href='#L986'>986</a>
1052
- <a name='L987'></a><a href='#L987'>987</a>
1053
- <a name='L988'></a><a href='#L988'>988</a>
1054
- <a name='L989'></a><a href='#L989'>989</a>
1055
- <a name='L990'></a><a href='#L990'>990</a>
1056
- <a name='L991'></a><a href='#L991'>991</a>
1057
- <a name='L992'></a><a href='#L992'>992</a>
1058
- <a name='L993'></a><a href='#L993'>993</a>
1059
- <a name='L994'></a><a href='#L994'>994</a>
1060
- <a name='L995'></a><a href='#L995'>995</a>
1061
- <a name='L996'></a><a href='#L996'>996</a>
1062
- <a name='L997'></a><a href='#L997'>997</a>
1063
- <a name='L998'></a><a href='#L998'>998</a>
1064
- <a name='L999'></a><a href='#L999'>999</a>
1065
- <a name='L1000'></a><a href='#L1000'>1000</a>
1066
- <a name='L1001'></a><a href='#L1001'>1001</a>
1067
- <a name='L1002'></a><a href='#L1002'>1002</a>
1068
- <a name='L1003'></a><a href='#L1003'>1003</a>
1069
- <a name='L1004'></a><a href='#L1004'>1004</a>
1070
- <a name='L1005'></a><a href='#L1005'>1005</a>
1071
- <a name='L1006'></a><a href='#L1006'>1006</a>
1072
- <a name='L1007'></a><a href='#L1007'>1007</a>
1073
- <a name='L1008'></a><a href='#L1008'>1008</a>
1074
- <a name='L1009'></a><a href='#L1009'>1009</a>
1075
- <a name='L1010'></a><a href='#L1010'>1010</a>
1076
- <a name='L1011'></a><a href='#L1011'>1011</a>
1077
- <a name='L1012'></a><a href='#L1012'>1012</a>
1078
- <a name='L1013'></a><a href='#L1013'>1013</a>
1079
- <a name='L1014'></a><a href='#L1014'>1014</a>
1080
- <a name='L1015'></a><a href='#L1015'>1015</a>
1081
- <a name='L1016'></a><a href='#L1016'>1016</a>
1082
- <a name='L1017'></a><a href='#L1017'>1017</a>
1083
- <a name='L1018'></a><a href='#L1018'>1018</a>
1084
- <a name='L1019'></a><a href='#L1019'>1019</a>
1085
- <a name='L1020'></a><a href='#L1020'>1020</a>
1086
- <a name='L1021'></a><a href='#L1021'>1021</a>
1087
- <a name='L1022'></a><a href='#L1022'>1022</a>
1088
- <a name='L1023'></a><a href='#L1023'>1023</a>
1089
- <a name='L1024'></a><a href='#L1024'>1024</a>
1090
- <a name='L1025'></a><a href='#L1025'>1025</a>
1091
- <a name='L1026'></a><a href='#L1026'>1026</a>
1092
- <a name='L1027'></a><a href='#L1027'>1027</a>
1093
- <a name='L1028'></a><a href='#L1028'>1028</a>
1094
- <a name='L1029'></a><a href='#L1029'>1029</a>
1095
- <a name='L1030'></a><a href='#L1030'>1030</a>
1096
- <a name='L1031'></a><a href='#L1031'>1031</a>
1097
- <a name='L1032'></a><a href='#L1032'>1032</a>
1098
- <a name='L1033'></a><a href='#L1033'>1033</a>
1099
- <a name='L1034'></a><a href='#L1034'>1034</a>
1100
- <a name='L1035'></a><a href='#L1035'>1035</a>
1101
- <a name='L1036'></a><a href='#L1036'>1036</a>
1102
- <a name='L1037'></a><a href='#L1037'>1037</a>
1103
- <a name='L1038'></a><a href='#L1038'>1038</a>
1104
- <a name='L1039'></a><a href='#L1039'>1039</a>
1105
- <a name='L1040'></a><a href='#L1040'>1040</a>
1106
- <a name='L1041'></a><a href='#L1041'>1041</a>
1107
- <a name='L1042'></a><a href='#L1042'>1042</a>
1108
- <a name='L1043'></a><a href='#L1043'>1043</a>
1109
- <a name='L1044'></a><a href='#L1044'>1044</a>
1110
- <a name='L1045'></a><a href='#L1045'>1045</a>
1111
- <a name='L1046'></a><a href='#L1046'>1046</a>
1112
- <a name='L1047'></a><a href='#L1047'>1047</a>
1113
- <a name='L1048'></a><a href='#L1048'>1048</a>
1114
- <a name='L1049'></a><a href='#L1049'>1049</a>
1115
- <a name='L1050'></a><a href='#L1050'>1050</a>
1116
- <a name='L1051'></a><a href='#L1051'>1051</a>
1117
- <a name='L1052'></a><a href='#L1052'>1052</a>
1118
- <a name='L1053'></a><a href='#L1053'>1053</a>
1119
- <a name='L1054'></a><a href='#L1054'>1054</a>
1120
- <a name='L1055'></a><a href='#L1055'>1055</a>
1121
- <a name='L1056'></a><a href='#L1056'>1056</a>
1122
- <a name='L1057'></a><a href='#L1057'>1057</a>
1123
- <a name='L1058'></a><a href='#L1058'>1058</a>
1124
- <a name='L1059'></a><a href='#L1059'>1059</a>
1125
- <a name='L1060'></a><a href='#L1060'>1060</a>
1126
- <a name='L1061'></a><a href='#L1061'>1061</a>
1127
- <a name='L1062'></a><a href='#L1062'>1062</a>
1128
- <a name='L1063'></a><a href='#L1063'>1063</a>
1129
- <a name='L1064'></a><a href='#L1064'>1064</a>
1130
- <a name='L1065'></a><a href='#L1065'>1065</a>
1131
- <a name='L1066'></a><a href='#L1066'>1066</a>
1132
- <a name='L1067'></a><a href='#L1067'>1067</a>
1133
- <a name='L1068'></a><a href='#L1068'>1068</a>
1134
- <a name='L1069'></a><a href='#L1069'>1069</a>
1135
- <a name='L1070'></a><a href='#L1070'>1070</a>
1136
- <a name='L1071'></a><a href='#L1071'>1071</a>
1137
- <a name='L1072'></a><a href='#L1072'>1072</a>
1138
- <a name='L1073'></a><a href='#L1073'>1073</a>
1139
- <a name='L1074'></a><a href='#L1074'>1074</a>
1140
- <a name='L1075'></a><a href='#L1075'>1075</a>
1141
- <a name='L1076'></a><a href='#L1076'>1076</a>
1142
- <a name='L1077'></a><a href='#L1077'>1077</a>
1143
- <a name='L1078'></a><a href='#L1078'>1078</a>
1144
- <a name='L1079'></a><a href='#L1079'>1079</a>
1145
- <a name='L1080'></a><a href='#L1080'>1080</a>
1146
- <a name='L1081'></a><a href='#L1081'>1081</a>
1147
- <a name='L1082'></a><a href='#L1082'>1082</a>
1148
- <a name='L1083'></a><a href='#L1083'>1083</a>
1149
- <a name='L1084'></a><a href='#L1084'>1084</a>
1150
- <a name='L1085'></a><a href='#L1085'>1085</a>
1151
- <a name='L1086'></a><a href='#L1086'>1086</a>
1152
- <a name='L1087'></a><a href='#L1087'>1087</a>
1153
- <a name='L1088'></a><a href='#L1088'>1088</a>
1154
- <a name='L1089'></a><a href='#L1089'>1089</a>
1155
- <a name='L1090'></a><a href='#L1090'>1090</a>
1156
- <a name='L1091'></a><a href='#L1091'>1091</a>
1157
- <a name='L1092'></a><a href='#L1092'>1092</a>
1158
- <a name='L1093'></a><a href='#L1093'>1093</a>
1159
- <a name='L1094'></a><a href='#L1094'>1094</a>
1160
- <a name='L1095'></a><a href='#L1095'>1095</a>
1161
- <a name='L1096'></a><a href='#L1096'>1096</a>
1162
- <a name='L1097'></a><a href='#L1097'>1097</a>
1163
- <a name='L1098'></a><a href='#L1098'>1098</a>
1164
- <a name='L1099'></a><a href='#L1099'>1099</a>
1165
- <a name='L1100'></a><a href='#L1100'>1100</a>
1166
- <a name='L1101'></a><a href='#L1101'>1101</a>
1167
- <a name='L1102'></a><a href='#L1102'>1102</a>
1168
- <a name='L1103'></a><a href='#L1103'>1103</a>
1169
- <a name='L1104'></a><a href='#L1104'>1104</a>
1170
- <a name='L1105'></a><a href='#L1105'>1105</a>
1171
- <a name='L1106'></a><a href='#L1106'>1106</a>
1172
- <a name='L1107'></a><a href='#L1107'>1107</a>
1173
- <a name='L1108'></a><a href='#L1108'>1108</a>
1174
- <a name='L1109'></a><a href='#L1109'>1109</a>
1175
- <a name='L1110'></a><a href='#L1110'>1110</a>
1176
- <a name='L1111'></a><a href='#L1111'>1111</a>
1177
- <a name='L1112'></a><a href='#L1112'>1112</a>
1178
- <a name='L1113'></a><a href='#L1113'>1113</a>
1179
- <a name='L1114'></a><a href='#L1114'>1114</a>
1180
- <a name='L1115'></a><a href='#L1115'>1115</a>
1181
- <a name='L1116'></a><a href='#L1116'>1116</a>
1182
- <a name='L1117'></a><a href='#L1117'>1117</a>
1183
- <a name='L1118'></a><a href='#L1118'>1118</a>
1184
- <a name='L1119'></a><a href='#L1119'>1119</a>
1185
- <a name='L1120'></a><a href='#L1120'>1120</a>
1186
- <a name='L1121'></a><a href='#L1121'>1121</a>
1187
- <a name='L1122'></a><a href='#L1122'>1122</a>
1188
- <a name='L1123'></a><a href='#L1123'>1123</a>
1189
- <a name='L1124'></a><a href='#L1124'>1124</a>
1190
- <a name='L1125'></a><a href='#L1125'>1125</a>
1191
- <a name='L1126'></a><a href='#L1126'>1126</a>
1192
- <a name='L1127'></a><a href='#L1127'>1127</a>
1193
- <a name='L1128'></a><a href='#L1128'>1128</a>
1194
- <a name='L1129'></a><a href='#L1129'>1129</a>
1195
- <a name='L1130'></a><a href='#L1130'>1130</a>
1196
- <a name='L1131'></a><a href='#L1131'>1131</a>
1197
- <a name='L1132'></a><a href='#L1132'>1132</a>
1198
- <a name='L1133'></a><a href='#L1133'>1133</a>
1199
- <a name='L1134'></a><a href='#L1134'>1134</a>
1200
- <a name='L1135'></a><a href='#L1135'>1135</a>
1201
- <a name='L1136'></a><a href='#L1136'>1136</a>
1202
- <a name='L1137'></a><a href='#L1137'>1137</a>
1203
- <a name='L1138'></a><a href='#L1138'>1138</a>
1204
- <a name='L1139'></a><a href='#L1139'>1139</a>
1205
- <a name='L1140'></a><a href='#L1140'>1140</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
1206
- <span class="cline-any cline-yes">1x</span>
1207
- <span class="cline-any cline-yes">1x</span>
1208
- <span class="cline-any cline-yes">1x</span>
1209
- <span class="cline-any cline-yes">1x</span>
1210
- <span class="cline-any cline-yes">1x</span>
1211
- <span class="cline-any cline-neutral">&nbsp;</span>
1212
- <span class="cline-any cline-yes">1x</span>
1213
- <span class="cline-any cline-neutral">&nbsp;</span>
1214
- <span class="cline-any cline-yes">1x</span>
1215
- <span class="cline-any cline-yes">90x</span>
1216
- <span class="cline-any cline-neutral">&nbsp;</span>
1217
- <span class="cline-any cline-neutral">&nbsp;</span>
1218
- <span class="cline-any cline-yes">45x</span>
1219
- <span class="cline-any cline-yes">45x</span>
1220
- <span class="cline-any cline-yes">1x</span>
1221
- <span class="cline-any cline-yes">1x</span>
1222
- <span class="cline-any cline-neutral">&nbsp;</span>
1223
- <span class="cline-any cline-yes">44x</span>
1224
- <span class="cline-any cline-yes">2x</span>
1225
- <span class="cline-any cline-neutral">&nbsp;</span>
1226
- <span class="cline-any cline-neutral">&nbsp;</span>
1227
- <span class="cline-any cline-neutral">&nbsp;</span>
1228
- <span class="cline-any cline-neutral">&nbsp;</span>
1229
- <span class="cline-any cline-yes">44x</span>
1230
- <span class="cline-any cline-neutral">&nbsp;</span>
1231
- <span class="cline-any cline-neutral">&nbsp;</span>
1232
- <span class="cline-any cline-yes">44x</span>
1233
- <span class="cline-any cline-yes">44x</span>
1234
- <span class="cline-any cline-yes">35x</span>
1235
- <span class="cline-any cline-no">&nbsp;</span>
1236
- <span class="cline-any cline-neutral">&nbsp;</span>
1237
- <span class="cline-any cline-neutral">&nbsp;</span>
1238
- <span class="cline-any cline-neutral">&nbsp;</span>
1239
- <span class="cline-any cline-yes">9x</span>
1240
- <span class="cline-any cline-neutral">&nbsp;</span>
1241
- <span class="cline-any cline-yes">44x</span>
1242
- <span class="cline-any cline-yes">44x</span>
1243
- <span class="cline-any cline-neutral">&nbsp;</span>
1244
- <span class="cline-any cline-neutral">&nbsp;</span>
1245
- <span class="cline-any cline-neutral">&nbsp;</span>
1246
- <span class="cline-any cline-neutral">&nbsp;</span>
1247
- <span class="cline-any cline-neutral">&nbsp;</span>
1248
- <span class="cline-any cline-neutral">&nbsp;</span>
1249
- <span class="cline-any cline-no">&nbsp;</span>
1250
- <span class="cline-any cline-neutral">&nbsp;</span>
1251
- <span class="cline-any cline-neutral">&nbsp;</span>
1252
- <span class="cline-any cline-yes">22x</span>
1253
- <span class="cline-any cline-yes">21x</span>
1254
- <span class="cline-any cline-neutral">&nbsp;</span>
1255
- <span class="cline-any cline-yes">1x</span>
1256
- <span class="cline-any cline-neutral">&nbsp;</span>
1257
- <span class="cline-any cline-neutral">&nbsp;</span>
1258
- <span class="cline-any cline-yes">20x</span>
1259
- <span class="cline-any cline-yes">19x</span>
1260
- <span class="cline-any cline-yes">29x</span>
1261
- <span class="cline-any cline-no">&nbsp;</span>
1262
- <span class="cline-any cline-no">&nbsp;</span>
1263
- <span class="cline-any cline-neutral">&nbsp;</span>
1264
- <span class="cline-any cline-neutral">&nbsp;</span>
1265
- <span class="cline-any cline-neutral">&nbsp;</span>
1266
- <span class="cline-any cline-neutral">&nbsp;</span>
1267
- <span class="cline-any cline-no">&nbsp;</span>
1268
- <span class="cline-any cline-neutral">&nbsp;</span>
1269
- <span class="cline-any cline-neutral">&nbsp;</span>
1270
- <span class="cline-any cline-neutral">&nbsp;</span>
1271
- <span class="cline-any cline-neutral">&nbsp;</span>
1272
- <span class="cline-any cline-neutral">&nbsp;</span>
1273
- <span class="cline-any cline-neutral">&nbsp;</span>
1274
- <span class="cline-any cline-neutral">&nbsp;</span>
1275
- <span class="cline-any cline-yes">90x</span>
1276
- <span class="cline-any cline-neutral">&nbsp;</span>
1277
- <span class="cline-any cline-neutral">&nbsp;</span>
1278
- <span class="cline-any cline-yes">62x</span>
1279
- <span class="cline-any cline-neutral">&nbsp;</span>
1280
- <span class="cline-any cline-yes">62x</span>
1281
- <span class="cline-any cline-neutral">&nbsp;</span>
1282
- <span class="cline-any cline-neutral">&nbsp;</span>
1283
- <span class="cline-any cline-neutral">&nbsp;</span>
1284
- <span class="cline-any cline-yes">60x</span>
1285
- <span class="cline-any cline-yes">1x</span>
1286
- <span class="cline-any cline-neutral">&nbsp;</span>
1287
- <span class="cline-any cline-neutral">&nbsp;</span>
1288
- <span class="cline-any cline-neutral">&nbsp;</span>
1289
- <span class="cline-any cline-no">&nbsp;</span>
1290
- <span class="cline-any cline-no">&nbsp;</span>
1291
- <span class="cline-any cline-neutral">&nbsp;</span>
1292
- <span class="cline-any cline-neutral">&nbsp;</span>
1293
- <span class="cline-any cline-neutral">&nbsp;</span>
1294
- <span class="cline-any cline-neutral">&nbsp;</span>
1295
- <span class="cline-any cline-neutral">&nbsp;</span>
1296
- <span class="cline-any cline-neutral">&nbsp;</span>
1297
- <span class="cline-any cline-no">&nbsp;</span>
1298
- <span class="cline-any cline-neutral">&nbsp;</span>
1299
- <span class="cline-any cline-neutral">&nbsp;</span>
1300
- <span class="cline-any cline-yes">11348x</span>
1301
- <span class="cline-any cline-neutral">&nbsp;</span>
1302
- <span class="cline-any cline-yes">5297x</span>
1303
- <span class="cline-any cline-no">&nbsp;</span>
1304
- <span class="cline-any cline-no">&nbsp;</span>
1305
- <span class="cline-any cline-no">&nbsp;</span>
1306
- <span class="cline-any cline-neutral">&nbsp;</span>
1307
- <span class="cline-any cline-neutral">&nbsp;</span>
1308
- <span class="cline-any cline-neutral">&nbsp;</span>
1309
- <span class="cline-any cline-no">&nbsp;</span>
1310
- <span class="cline-any cline-neutral">&nbsp;</span>
1311
- <span class="cline-any cline-neutral">&nbsp;</span>
1312
- <span class="cline-any cline-yes">2x</span>
1313
- <span class="cline-any cline-neutral">&nbsp;</span>
1314
- <span class="cline-any cline-neutral">&nbsp;</span>
1315
- <span class="cline-any cline-neutral">&nbsp;</span>
1316
- <span class="cline-any cline-neutral">&nbsp;</span>
1317
- <span class="cline-any cline-neutral">&nbsp;</span>
1318
- <span class="cline-any cline-neutral">&nbsp;</span>
1319
- <span class="cline-any cline-yes">90x</span>
1320
- <span class="cline-any cline-neutral">&nbsp;</span>
1321
- <span class="cline-any cline-neutral">&nbsp;</span>
1322
- <span class="cline-any cline-neutral">&nbsp;</span>
1323
- <span class="cline-any cline-neutral">&nbsp;</span>
1324
- <span class="cline-any cline-neutral">&nbsp;</span>
1325
- <span class="cline-any cline-neutral">&nbsp;</span>
1326
- <span class="cline-any cline-yes">35x</span>
1327
- <span class="cline-any cline-neutral">&nbsp;</span>
1328
- <span class="cline-any cline-neutral">&nbsp;</span>
1329
- <span class="cline-any cline-yes">35x</span>
1330
- <span class="cline-any cline-yes">9x</span>
1331
- <span class="cline-any cline-neutral">&nbsp;</span>
1332
- <span class="cline-any cline-yes">35x</span>
1333
- <span class="cline-any cline-neutral">&nbsp;</span>
1334
- <span class="cline-any cline-yes">35x</span>
1335
- <span class="cline-any cline-yes">9x</span>
1336
- <span class="cline-any cline-no">&nbsp;</span>
1337
- <span class="cline-any cline-neutral">&nbsp;</span>
1338
- <span class="cline-any cline-neutral">&nbsp;</span>
1339
- <span class="cline-any cline-yes">9x</span>
1340
- <span class="cline-any cline-neutral">&nbsp;</span>
1341
- <span class="cline-any cline-yes">9x</span>
1342
- <span class="cline-any cline-yes">8x</span>
1343
- <span class="cline-any cline-neutral">&nbsp;</span>
1344
- <span class="cline-any cline-neutral">&nbsp;</span>
1345
- <span class="cline-any cline-neutral">&nbsp;</span>
1346
- <span class="cline-any cline-neutral">&nbsp;</span>
1347
- <span class="cline-any cline-yes">8142x</span>
1348
- <span class="cline-any cline-neutral">&nbsp;</span>
1349
- <span class="cline-any cline-yes">3695x</span>
1350
- <span class="cline-any cline-no">&nbsp;</span>
1351
- <span class="cline-any cline-no">&nbsp;</span>
1352
- <span class="cline-any cline-no">&nbsp;</span>
1353
- <span class="cline-any cline-no">&nbsp;</span>
1354
- <span class="cline-any cline-neutral">&nbsp;</span>
1355
- <span class="cline-any cline-no">&nbsp;</span>
1356
- <span class="cline-any cline-no">&nbsp;</span>
1357
- <span class="cline-any cline-neutral">&nbsp;</span>
1358
- <span class="cline-any cline-neutral">&nbsp;</span>
1359
- <span class="cline-any cline-neutral">&nbsp;</span>
1360
- <span class="cline-any cline-no">&nbsp;</span>
1361
- <span class="cline-any cline-neutral">&nbsp;</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-neutral">&nbsp;</span>
1364
- <span class="cline-any cline-neutral">&nbsp;</span>
1365
- <span class="cline-any cline-neutral">&nbsp;</span>
1366
- <span class="cline-any cline-yes">90x</span>
1367
- <span class="cline-any cline-neutral">&nbsp;</span>
1368
- <span class="cline-any cline-neutral">&nbsp;</span>
1369
- <span class="cline-any cline-yes">12x</span>
1370
- <span class="cline-any cline-neutral">&nbsp;</span>
1371
- <span class="cline-any cline-neutral">&nbsp;</span>
1372
- <span class="cline-any cline-yes">4x</span>
1373
- <span class="cline-any cline-neutral">&nbsp;</span>
1374
- <span class="cline-any cline-neutral">&nbsp;</span>
1375
- <span class="cline-any cline-neutral">&nbsp;</span>
1376
- <span class="cline-any cline-no">&nbsp;</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
- <span class="cline-any cline-neutral">&nbsp;</span>
1379
- <span class="cline-any cline-neutral">&nbsp;</span>
1380
- <span class="cline-any cline-neutral">&nbsp;</span>
1381
- <span class="cline-any cline-yes">1482x</span>
1382
- <span class="cline-any cline-neutral">&nbsp;</span>
1383
- <span class="cline-any cline-yes">741x</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-no">&nbsp;</span>
1386
- <span class="cline-any cline-no">&nbsp;</span>
1387
- <span class="cline-any cline-yes">741x</span>
1388
- <span class="cline-any cline-no">&nbsp;</span>
1389
- <span class="cline-any cline-no">&nbsp;</span>
1390
- <span class="cline-any cline-no">&nbsp;</span>
1391
- <span class="cline-any cline-neutral">&nbsp;</span>
1392
- <span class="cline-any cline-neutral">&nbsp;</span>
1393
- <span class="cline-any cline-neutral">&nbsp;</span>
1394
- <span class="cline-any cline-no">&nbsp;</span>
1395
- <span class="cline-any cline-neutral">&nbsp;</span>
1396
- <span class="cline-any cline-neutral">&nbsp;</span>
1397
- <span class="cline-any cline-no">&nbsp;</span>
1398
- <span class="cline-any cline-no">&nbsp;</span>
1399
- <span class="cline-any cline-no">&nbsp;</span>
1400
- <span class="cline-any cline-no">&nbsp;</span>
1401
- <span class="cline-any cline-neutral">&nbsp;</span>
1402
- <span class="cline-any cline-neutral">&nbsp;</span>
1403
- <span class="cline-any cline-neutral">&nbsp;</span>
1404
- <span class="cline-any cline-neutral">&nbsp;</span>
1405
- <span class="cline-any cline-no">&nbsp;</span>
1406
- <span class="cline-any cline-no">&nbsp;</span>
1407
- <span class="cline-any cline-neutral">&nbsp;</span>
1408
- <span class="cline-any cline-neutral">&nbsp;</span>
1409
- <span class="cline-any cline-neutral">&nbsp;</span>
1410
- <span class="cline-any cline-neutral">&nbsp;</span>
1411
- <span class="cline-any cline-no">&nbsp;</span>
1412
- <span class="cline-any cline-neutral">&nbsp;</span>
1413
- <span class="cline-any cline-neutral">&nbsp;</span>
1414
- <span class="cline-any cline-neutral">&nbsp;</span>
1415
- <span class="cline-any cline-neutral">&nbsp;</span>
1416
- <span class="cline-any cline-neutral">&nbsp;</span>
1417
- <span class="cline-any cline-yes">90x</span>
1418
- <span class="cline-any cline-neutral">&nbsp;</span>
1419
- <span class="cline-any cline-neutral">&nbsp;</span>
1420
- <span class="cline-any cline-no">&nbsp;</span>
1421
- <span class="cline-any cline-neutral">&nbsp;</span>
1422
- <span class="cline-any cline-no">&nbsp;</span>
1423
- <span class="cline-any cline-no">&nbsp;</span>
1424
- <span class="cline-any cline-neutral">&nbsp;</span>
1425
- <span class="cline-any cline-neutral">&nbsp;</span>
1426
- <span class="cline-any cline-no">&nbsp;</span>
1427
- <span class="cline-any cline-no">&nbsp;</span>
1428
- <span class="cline-any cline-no">&nbsp;</span>
1429
- <span class="cline-any cline-neutral">&nbsp;</span>
1430
- <span class="cline-any cline-neutral">&nbsp;</span>
1431
- <span class="cline-any cline-neutral">&nbsp;</span>
1432
- <span class="cline-any cline-no">&nbsp;</span>
1433
- <span class="cline-any cline-neutral">&nbsp;</span>
1434
- <span class="cline-any cline-neutral">&nbsp;</span>
1435
- <span class="cline-any cline-neutral">&nbsp;</span>
1436
- <span class="cline-any cline-yes">90x</span>
1437
- <span class="cline-any cline-neutral">&nbsp;</span>
1438
- <span class="cline-any cline-neutral">&nbsp;</span>
1439
- <span class="cline-any cline-no">&nbsp;</span>
1440
- <span class="cline-any cline-no">&nbsp;</span>
1441
- <span class="cline-any cline-neutral">&nbsp;</span>
1442
- <span class="cline-any cline-no">&nbsp;</span>
1443
- <span class="cline-any cline-no">&nbsp;</span>
1444
- <span class="cline-any cline-no">&nbsp;</span>
1445
- <span class="cline-any cline-neutral">&nbsp;</span>
1446
- <span class="cline-any cline-neutral">&nbsp;</span>
1447
- <span class="cline-any cline-no">&nbsp;</span>
1448
- <span class="cline-any cline-no">&nbsp;</span>
1449
- <span class="cline-any cline-neutral">&nbsp;</span>
1450
- <span class="cline-any cline-neutral">&nbsp;</span>
1451
- <span class="cline-any cline-no">&nbsp;</span>
1452
- <span class="cline-any cline-no">&nbsp;</span>
1453
- <span class="cline-any cline-neutral">&nbsp;</span>
1454
- <span class="cline-any cline-no">&nbsp;</span>
1455
- <span class="cline-any cline-no">&nbsp;</span>
1456
- <span class="cline-any cline-neutral">&nbsp;</span>
1457
- <span class="cline-any cline-neutral">&nbsp;</span>
1458
- <span class="cline-any cline-neutral">&nbsp;</span>
1459
- <span class="cline-any cline-neutral">&nbsp;</span>
1460
- <span class="cline-any cline-neutral">&nbsp;</span>
1461
- <span class="cline-any cline-no">&nbsp;</span>
1462
- <span class="cline-any cline-no">&nbsp;</span>
1463
- <span class="cline-any cline-neutral">&nbsp;</span>
1464
- <span class="cline-any cline-neutral">&nbsp;</span>
1465
- <span class="cline-any cline-neutral">&nbsp;</span>
1466
- <span class="cline-any cline-neutral">&nbsp;</span>
1467
- <span class="cline-any cline-neutral">&nbsp;</span>
1468
- <span class="cline-any cline-neutral">&nbsp;</span>
1469
- <span class="cline-any cline-no">&nbsp;</span>
1470
- <span class="cline-any cline-neutral">&nbsp;</span>
1471
- <span class="cline-any cline-no">&nbsp;</span>
1472
- <span class="cline-any cline-no">&nbsp;</span>
1473
- <span class="cline-any cline-no">&nbsp;</span>
1474
- <span class="cline-any cline-neutral">&nbsp;</span>
1475
- <span class="cline-any cline-no">&nbsp;</span>
1476
- <span class="cline-any cline-no">&nbsp;</span>
1477
- <span class="cline-any cline-neutral">&nbsp;</span>
1478
- <span class="cline-any cline-no">&nbsp;</span>
1479
- <span class="cline-any cline-no">&nbsp;</span>
1480
- <span class="cline-any cline-neutral">&nbsp;</span>
1481
- <span class="cline-any cline-neutral">&nbsp;</span>
1482
- <span class="cline-any cline-neutral">&nbsp;</span>
1483
- <span class="cline-any cline-neutral">&nbsp;</span>
1484
- <span class="cline-any cline-no">&nbsp;</span>
1485
- <span class="cline-any cline-no">&nbsp;</span>
1486
- <span class="cline-any cline-no">&nbsp;</span>
1487
- <span class="cline-any cline-neutral">&nbsp;</span>
1488
- <span class="cline-any cline-neutral">&nbsp;</span>
1489
- <span class="cline-any cline-no">&nbsp;</span>
1490
- <span class="cline-any cline-neutral">&nbsp;</span>
1491
- <span class="cline-any cline-neutral">&nbsp;</span>
1492
- <span class="cline-any cline-neutral">&nbsp;</span>
1493
- <span class="cline-any cline-no">&nbsp;</span>
1494
- <span class="cline-any cline-no">&nbsp;</span>
1495
- <span class="cline-any cline-no">&nbsp;</span>
1496
- <span class="cline-any cline-no">&nbsp;</span>
1497
- <span class="cline-any cline-neutral">&nbsp;</span>
1498
- <span class="cline-any cline-neutral">&nbsp;</span>
1499
- <span class="cline-any cline-neutral">&nbsp;</span>
1500
- <span class="cline-any cline-neutral">&nbsp;</span>
1501
- <span class="cline-any cline-no">&nbsp;</span>
1502
- <span class="cline-any cline-no">&nbsp;</span>
1503
- <span class="cline-any cline-neutral">&nbsp;</span>
1504
- <span class="cline-any cline-neutral">&nbsp;</span>
1505
- <span class="cline-any cline-neutral">&nbsp;</span>
1506
- <span class="cline-any cline-neutral">&nbsp;</span>
1507
- <span class="cline-any cline-neutral">&nbsp;</span>
1508
- <span class="cline-any cline-yes">90x</span>
1509
- <span class="cline-any cline-neutral">&nbsp;</span>
1510
- <span class="cline-any cline-neutral">&nbsp;</span>
1511
- <span class="cline-any cline-neutral">&nbsp;</span>
1512
- <span class="cline-any cline-yes">63x</span>
1513
- <span class="cline-any cline-no">&nbsp;</span>
1514
- <span class="cline-any cline-neutral">&nbsp;</span>
1515
- <span class="cline-any cline-yes">63x</span>
1516
- <span class="cline-any cline-neutral">&nbsp;</span>
1517
- <span class="cline-any cline-yes">63x</span>
1518
- <span class="cline-any cline-neutral">&nbsp;</span>
1519
- <span class="cline-any cline-neutral">&nbsp;</span>
1520
- <span class="cline-any cline-no">&nbsp;</span>
1521
- <span class="cline-any cline-no">&nbsp;</span>
1522
- <span class="cline-any cline-neutral">&nbsp;</span>
1523
- <span class="cline-any cline-neutral">&nbsp;</span>
1524
- <span class="cline-any cline-neutral">&nbsp;</span>
1525
- <span class="cline-any cline-neutral">&nbsp;</span>
1526
- <span class="cline-any cline-neutral">&nbsp;</span>
1527
- <span class="cline-any cline-neutral">&nbsp;</span>
1528
- <span class="cline-any cline-yes">8366x</span>
1529
- <span class="cline-any cline-neutral">&nbsp;</span>
1530
- <span class="cline-any cline-yes">3807x</span>
1531
- <span class="cline-any cline-yes">2x</span>
1532
- <span class="cline-any cline-yes">2x</span>
1533
- <span class="cline-any cline-neutral">&nbsp;</span>
1534
- <span class="cline-any cline-yes">2x</span>
1535
- <span class="cline-any cline-yes">1x</span>
1536
- <span class="cline-any cline-neutral">&nbsp;</span>
1537
- <span class="cline-any cline-yes">2x</span>
1538
- <span class="cline-any cline-yes">2x</span>
1539
- <span class="cline-any cline-neutral">&nbsp;</span>
1540
- <span class="cline-any cline-neutral">&nbsp;</span>
1541
- <span class="cline-any cline-neutral">&nbsp;</span>
1542
- <span class="cline-any cline-neutral">&nbsp;</span>
1543
- <span class="cline-any cline-no">&nbsp;</span>
1544
- <span class="cline-any cline-no">&nbsp;</span>
1545
- <span class="cline-any cline-no">&nbsp;</span>
1546
- <span class="cline-any cline-neutral">&nbsp;</span>
1547
- <span class="cline-any cline-neutral">&nbsp;</span>
1548
- <span class="cline-any cline-no">&nbsp;</span>
1549
- <span class="cline-any cline-neutral">&nbsp;</span>
1550
- <span class="cline-any cline-neutral">&nbsp;</span>
1551
- <span class="cline-any cline-no">&nbsp;</span>
1552
- <span class="cline-any cline-no">&nbsp;</span>
1553
- <span class="cline-any cline-neutral">&nbsp;</span>
1554
- <span class="cline-any cline-no">&nbsp;</span>
1555
- <span class="cline-any cline-neutral">&nbsp;</span>
1556
- <span class="cline-any cline-neutral">&nbsp;</span>
1557
- <span class="cline-any cline-neutral">&nbsp;</span>
1558
- <span class="cline-any cline-neutral">&nbsp;</span>
1559
- <span class="cline-any cline-yes">3x</span>
1560
- <span class="cline-any cline-yes">3x</span>
1561
- <span class="cline-any cline-no">&nbsp;</span>
1562
- <span class="cline-any cline-no">&nbsp;</span>
1563
- <span class="cline-any cline-neutral">&nbsp;</span>
1564
- <span class="cline-any cline-yes">3x</span>
1565
- <span class="cline-any cline-neutral">&nbsp;</span>
1566
- <span class="cline-any cline-yes">3x</span>
1567
- <span class="cline-any cline-yes">6x</span>
1568
- <span class="cline-any cline-yes">6x</span>
1569
- <span class="cline-any cline-neutral">&nbsp;</span>
1570
- <span class="cline-any cline-neutral">&nbsp;</span>
1571
- <span class="cline-any cline-neutral">&nbsp;</span>
1572
- <span class="cline-any cline-neutral">&nbsp;</span>
1573
- <span class="cline-any cline-yes">3x</span>
1574
- <span class="cline-any cline-yes">3x</span>
1575
- <span class="cline-any cline-neutral">&nbsp;</span>
1576
- <span class="cline-any cline-neutral">&nbsp;</span>
1577
- <span class="cline-any cline-neutral">&nbsp;</span>
1578
- <span class="cline-any cline-neutral">&nbsp;</span>
1579
- <span class="cline-any cline-neutral">&nbsp;</span>
1580
- <span class="cline-any cline-yes">90x</span>
1581
- <span class="cline-any cline-neutral">&nbsp;</span>
1582
- <span class="cline-any cline-neutral">&nbsp;</span>
1583
- <span class="cline-any cline-neutral">&nbsp;</span>
1584
- <span class="cline-any cline-neutral">&nbsp;</span>
1585
- <span class="cline-any cline-yes">90x</span>
1586
- <span class="cline-any cline-neutral">&nbsp;</span>
1587
- <span class="cline-any cline-neutral">&nbsp;</span>
1588
- <span class="cline-any cline-neutral">&nbsp;</span>
1589
- <span class="cline-any cline-yes">29x</span>
1590
- <span class="cline-any cline-yes">29x</span>
1591
- <span class="cline-any cline-yes">7x</span>
1592
- <span class="cline-any cline-neutral">&nbsp;</span>
1593
- <span class="cline-any cline-yes">22x</span>
1594
- <span class="cline-any cline-yes">4x</span>
1595
- <span class="cline-any cline-neutral">&nbsp;</span>
1596
- <span class="cline-any cline-neutral">&nbsp;</span>
1597
- <span class="cline-any cline-neutral">&nbsp;</span>
1598
- <span class="cline-any cline-neutral">&nbsp;</span>
1599
- <span class="cline-any cline-yes">18x</span>
1600
- <span class="cline-any cline-yes">7x</span>
1601
- <span class="cline-any cline-neutral">&nbsp;</span>
1602
- <span class="cline-any cline-neutral">&nbsp;</span>
1603
- <span class="cline-any cline-neutral">&nbsp;</span>
1604
- <span class="cline-any cline-yes">4x</span>
1605
- <span class="cline-any cline-neutral">&nbsp;</span>
1606
- <span class="cline-any cline-neutral">&nbsp;</span>
1607
- <span class="cline-any cline-yes">2x</span>
1608
- <span class="cline-any cline-yes">2x</span>
1609
- <span class="cline-any cline-no">&nbsp;</span>
1610
- <span class="cline-any cline-no">&nbsp;</span>
1611
- <span class="cline-any cline-no">&nbsp;</span>
1612
- <span class="cline-any cline-neutral">&nbsp;</span>
1613
- <span class="cline-any cline-neutral">&nbsp;</span>
1614
- <span class="cline-any cline-neutral">&nbsp;</span>
1615
- <span class="cline-any cline-neutral">&nbsp;</span>
1616
- <span class="cline-any cline-no">&nbsp;</span>
1617
- <span class="cline-any cline-no">&nbsp;</span>
1618
- <span class="cline-any cline-no">&nbsp;</span>
1619
- <span class="cline-any cline-neutral">&nbsp;</span>
1620
- <span class="cline-any cline-neutral">&nbsp;</span>
1621
- <span class="cline-any cline-neutral">&nbsp;</span>
1622
- <span class="cline-any cline-neutral">&nbsp;</span>
1623
- <span class="cline-any cline-no">&nbsp;</span>
1624
- <span class="cline-any cline-neutral">&nbsp;</span>
1625
- <span class="cline-any cline-neutral">&nbsp;</span>
1626
- <span class="cline-any cline-no">&nbsp;</span>
1627
- <span class="cline-any cline-neutral">&nbsp;</span>
1628
- <span class="cline-any cline-neutral">&nbsp;</span>
1629
- <span class="cline-any cline-neutral">&nbsp;</span>
1630
- <span class="cline-any cline-neutral">&nbsp;</span>
1631
- <span class="cline-any cline-neutral">&nbsp;</span>
1632
- <span class="cline-any cline-yes">90x</span>
1633
- <span class="cline-any cline-neutral">&nbsp;</span>
1634
- <span class="cline-any cline-neutral">&nbsp;</span>
1635
- <span class="cline-any cline-neutral">&nbsp;</span>
1636
- <span class="cline-any cline-yes">17x</span>
1637
- <span class="cline-any cline-yes">17x</span>
1638
- <span class="cline-any cline-no">&nbsp;</span>
1639
- <span class="cline-any cline-neutral">&nbsp;</span>
1640
- <span class="cline-any cline-yes">17x</span>
1641
- <span class="cline-any cline-yes">4x</span>
1642
- <span class="cline-any cline-neutral">&nbsp;</span>
1643
- <span class="cline-any cline-yes">13x</span>
1644
- <span class="cline-any cline-yes">1x</span>
1645
- <span class="cline-any cline-neutral">&nbsp;</span>
1646
- <span class="cline-any cline-neutral">&nbsp;</span>
1647
- <span class="cline-any cline-neutral">&nbsp;</span>
1648
- <span class="cline-any cline-no">&nbsp;</span>
1649
- <span class="cline-any cline-neutral">&nbsp;</span>
1650
- <span class="cline-any cline-neutral">&nbsp;</span>
1651
- <span class="cline-any cline-no">&nbsp;</span>
1652
- <span class="cline-any cline-no">&nbsp;</span>
1653
- <span class="cline-any cline-no">&nbsp;</span>
1654
- <span class="cline-any cline-no">&nbsp;</span>
1655
- <span class="cline-any cline-no">&nbsp;</span>
1656
- <span class="cline-any cline-neutral">&nbsp;</span>
1657
- <span class="cline-any cline-neutral">&nbsp;</span>
1658
- <span class="cline-any cline-neutral">&nbsp;</span>
1659
- <span class="cline-any cline-neutral">&nbsp;</span>
1660
- <span class="cline-any cline-no">&nbsp;</span>
1661
- <span class="cline-any cline-no">&nbsp;</span>
1662
- <span class="cline-any cline-no">&nbsp;</span>
1663
- <span class="cline-any cline-neutral">&nbsp;</span>
1664
- <span class="cline-any cline-neutral">&nbsp;</span>
1665
- <span class="cline-any cline-neutral">&nbsp;</span>
1666
- <span class="cline-any cline-neutral">&nbsp;</span>
1667
- <span class="cline-any cline-no">&nbsp;</span>
1668
- <span class="cline-any cline-neutral">&nbsp;</span>
1669
- <span class="cline-any cline-neutral">&nbsp;</span>
1670
- <span class="cline-any cline-neutral">&nbsp;</span>
1671
- <span class="cline-any cline-neutral">&nbsp;</span>
1672
- <span class="cline-any cline-neutral">&nbsp;</span>
1673
- <span class="cline-any cline-yes">90x</span>
1674
- <span class="cline-any cline-neutral">&nbsp;</span>
1675
- <span class="cline-any cline-neutral">&nbsp;</span>
1676
- <span class="cline-any cline-neutral">&nbsp;</span>
1677
- <span class="cline-any cline-no">&nbsp;</span>
1678
- <span class="cline-any cline-no">&nbsp;</span>
1679
- <span class="cline-any cline-no">&nbsp;</span>
1680
- <span class="cline-any cline-no">&nbsp;</span>
1681
- <span class="cline-any cline-neutral">&nbsp;</span>
1682
- <span class="cline-any cline-neutral">&nbsp;</span>
1683
- <span class="cline-any cline-neutral">&nbsp;</span>
1684
- <span class="cline-any cline-no">&nbsp;</span>
1685
- <span class="cline-any cline-no">&nbsp;</span>
1686
- <span class="cline-any cline-no">&nbsp;</span>
1687
- <span class="cline-any cline-neutral">&nbsp;</span>
1688
- <span class="cline-any cline-neutral">&nbsp;</span>
1689
- <span class="cline-any cline-no">&nbsp;</span>
1690
- <span class="cline-any cline-neutral">&nbsp;</span>
1691
- <span class="cline-any cline-neutral">&nbsp;</span>
1692
- <span class="cline-any cline-neutral">&nbsp;</span>
1693
- <span class="cline-any cline-yes">90x</span>
1694
- <span class="cline-any cline-neutral">&nbsp;</span>
1695
- <span class="cline-any cline-neutral">&nbsp;</span>
1696
- <span class="cline-any cline-neutral">&nbsp;</span>
1697
- <span class="cline-any cline-yes">1x</span>
1698
- <span class="cline-any cline-neutral">&nbsp;</span>
1699
- <span class="cline-any cline-neutral">&nbsp;</span>
1700
- <span class="cline-any cline-neutral">&nbsp;</span>
1701
- <span class="cline-any cline-no">&nbsp;</span>
1702
- <span class="cline-any cline-no">&nbsp;</span>
1703
- <span class="cline-any cline-neutral">&nbsp;</span>
1704
- <span class="cline-any cline-neutral">&nbsp;</span>
1705
- <span class="cline-any cline-no">&nbsp;</span>
1706
- <span class="cline-any cline-neutral">&nbsp;</span>
1707
- <span class="cline-any cline-neutral">&nbsp;</span>
1708
- <span class="cline-any cline-yes">33x</span>
1709
- <span class="cline-any cline-neutral">&nbsp;</span>
1710
- <span class="cline-any cline-yes">16x</span>
1711
- <span class="cline-any cline-no">&nbsp;</span>
1712
- <span class="cline-any cline-no">&nbsp;</span>
1713
- <span class="cline-any cline-no">&nbsp;</span>
1714
- <span class="cline-any cline-neutral">&nbsp;</span>
1715
- <span class="cline-any cline-neutral">&nbsp;</span>
1716
- <span class="cline-any cline-neutral">&nbsp;</span>
1717
- <span class="cline-any cline-neutral">&nbsp;</span>
1718
- <span class="cline-any cline-neutral">&nbsp;</span>
1719
- <span class="cline-any cline-no">&nbsp;</span>
1720
- <span class="cline-any cline-neutral">&nbsp;</span>
1721
- <span class="cline-any cline-neutral">&nbsp;</span>
1722
- <span class="cline-any cline-no">&nbsp;</span>
1723
- <span class="cline-any cline-neutral">&nbsp;</span>
1724
- <span class="cline-any cline-neutral">&nbsp;</span>
1725
- <span class="cline-any cline-neutral">&nbsp;</span>
1726
- <span class="cline-any cline-neutral">&nbsp;</span>
1727
- <span class="cline-any cline-neutral">&nbsp;</span>
1728
- <span class="cline-any cline-yes">90x</span>
1729
- <span class="cline-any cline-neutral">&nbsp;</span>
1730
- <span class="cline-any cline-neutral">&nbsp;</span>
1731
- <span class="cline-any cline-neutral">&nbsp;</span>
1732
- <span class="cline-any cline-no">&nbsp;</span>
1733
- <span class="cline-any cline-no">&nbsp;</span>
1734
- <span class="cline-any cline-neutral">&nbsp;</span>
1735
- <span class="cline-any cline-no">&nbsp;</span>
1736
- <span class="cline-any cline-no">&nbsp;</span>
1737
- <span class="cline-any cline-neutral">&nbsp;</span>
1738
- <span class="cline-any cline-no">&nbsp;</span>
1739
- <span class="cline-any cline-neutral">&nbsp;</span>
1740
- <span class="cline-any cline-no">&nbsp;</span>
1741
- <span class="cline-any cline-neutral">&nbsp;</span>
1742
- <span class="cline-any cline-no">&nbsp;</span>
1743
- <span class="cline-any cline-neutral">&nbsp;</span>
1744
- <span class="cline-any cline-no">&nbsp;</span>
1745
- <span class="cline-any cline-neutral">&nbsp;</span>
1746
- <span class="cline-any cline-neutral">&nbsp;</span>
1747
- <span class="cline-any cline-no">&nbsp;</span>
1748
- <span class="cline-any cline-neutral">&nbsp;</span>
1749
- <span class="cline-any cline-neutral">&nbsp;</span>
1750
- <span class="cline-any cline-no">&nbsp;</span>
1751
- <span class="cline-any cline-no">&nbsp;</span>
1752
- <span class="cline-any cline-neutral">&nbsp;</span>
1753
- <span class="cline-any cline-no">&nbsp;</span>
1754
- <span class="cline-any cline-no">&nbsp;</span>
1755
- <span class="cline-any cline-neutral">&nbsp;</span>
1756
- <span class="cline-any cline-neutral">&nbsp;</span>
1757
- <span class="cline-any cline-neutral">&nbsp;</span>
1758
- <span class="cline-any cline-no">&nbsp;</span>
1759
- <span class="cline-any cline-neutral">&nbsp;</span>
1760
- <span class="cline-any cline-no">&nbsp;</span>
1761
- <span class="cline-any cline-no">&nbsp;</span>
1762
- <span class="cline-any cline-neutral">&nbsp;</span>
1763
- <span class="cline-any cline-no">&nbsp;</span>
1764
- <span class="cline-any cline-no">&nbsp;</span>
1765
- <span class="cline-any cline-no">&nbsp;</span>
1766
- <span class="cline-any cline-neutral">&nbsp;</span>
1767
- <span class="cline-any cline-neutral">&nbsp;</span>
1768
- <span class="cline-any cline-neutral">&nbsp;</span>
1769
- <span class="cline-any cline-neutral">&nbsp;</span>
1770
- <span class="cline-any cline-no">&nbsp;</span>
1771
- <span class="cline-any cline-no">&nbsp;</span>
1772
- <span class="cline-any cline-no">&nbsp;</span>
1773
- <span class="cline-any cline-neutral">&nbsp;</span>
1774
- <span class="cline-any cline-neutral">&nbsp;</span>
1775
- <span class="cline-any cline-neutral">&nbsp;</span>
1776
- <span class="cline-any cline-neutral">&nbsp;</span>
1777
- <span class="cline-any cline-no">&nbsp;</span>
1778
- <span class="cline-any cline-no">&nbsp;</span>
1779
- <span class="cline-any cline-no">&nbsp;</span>
1780
- <span class="cline-any cline-neutral">&nbsp;</span>
1781
- <span class="cline-any cline-no">&nbsp;</span>
1782
- <span class="cline-any cline-no">&nbsp;</span>
1783
- <span class="cline-any cline-neutral">&nbsp;</span>
1784
- <span class="cline-any cline-no">&nbsp;</span>
1785
- <span class="cline-any cline-no">&nbsp;</span>
1786
- <span class="cline-any cline-no">&nbsp;</span>
1787
- <span class="cline-any cline-neutral">&nbsp;</span>
1788
- <span class="cline-any cline-no">&nbsp;</span>
1789
- <span class="cline-any cline-no">&nbsp;</span>
1790
- <span class="cline-any cline-neutral">&nbsp;</span>
1791
- <span class="cline-any cline-no">&nbsp;</span>
1792
- <span class="cline-any cline-neutral">&nbsp;</span>
1793
- <span class="cline-any cline-neutral">&nbsp;</span>
1794
- <span class="cline-any cline-neutral">&nbsp;</span>
1795
- <span class="cline-any cline-no">&nbsp;</span>
1796
- <span class="cline-any cline-neutral">&nbsp;</span>
1797
- <span class="cline-any cline-neutral">&nbsp;</span>
1798
- <span class="cline-any cline-neutral">&nbsp;</span>
1799
- <span class="cline-any cline-neutral">&nbsp;</span>
1800
- <span class="cline-any cline-neutral">&nbsp;</span>
1801
- <span class="cline-any cline-yes">90x</span>
1802
- <span class="cline-any cline-neutral">&nbsp;</span>
1803
- <span class="cline-any cline-neutral">&nbsp;</span>
1804
- <span class="cline-any cline-neutral">&nbsp;</span>
1805
- <span class="cline-any cline-no">&nbsp;</span>
1806
- <span class="cline-any cline-neutral">&nbsp;</span>
1807
- <span class="cline-any cline-neutral">&nbsp;</span>
1808
- <span class="cline-any cline-neutral">&nbsp;</span>
1809
- <span class="cline-any cline-yes">90x</span>
1810
- <span class="cline-any cline-neutral">&nbsp;</span>
1811
- <span class="cline-any cline-neutral">&nbsp;</span>
1812
- <span class="cline-any cline-neutral">&nbsp;</span>
1813
- <span class="cline-any cline-yes">2x</span>
1814
- <span class="cline-any cline-neutral">&nbsp;</span>
1815
- <span class="cline-any cline-neutral">&nbsp;</span>
1816
- <span class="cline-any cline-neutral">&nbsp;</span>
1817
- <span class="cline-any cline-neutral">&nbsp;</span>
1818
- <span class="cline-any cline-neutral">&nbsp;</span>
1819
- <span class="cline-any cline-yes">90x</span>
1820
- <span class="cline-any cline-neutral">&nbsp;</span>
1821
- <span class="cline-any cline-neutral">&nbsp;</span>
1822
- <span class="cline-any cline-neutral">&nbsp;</span>
1823
- <span class="cline-any cline-neutral">&nbsp;</span>
1824
- <span class="cline-any cline-yes">2x</span>
1825
- <span class="cline-any cline-yes">1x</span>
1826
- <span class="cline-any cline-neutral">&nbsp;</span>
1827
- <span class="cline-any cline-yes">1x</span>
1828
- <span class="cline-any cline-neutral">&nbsp;</span>
1829
- <span class="cline-any cline-neutral">&nbsp;</span>
1830
- <span class="cline-any cline-neutral">&nbsp;</span>
1831
- <span class="cline-any cline-neutral">&nbsp;</span>
1832
- <span class="cline-any cline-yes">90x</span>
1833
- <span class="cline-any cline-neutral">&nbsp;</span>
1834
- <span class="cline-any cline-neutral">&nbsp;</span>
1835
- <span class="cline-any cline-neutral">&nbsp;</span>
1836
- <span class="cline-any cline-yes">90x</span>
1837
- <span class="cline-any cline-neutral">&nbsp;</span>
1838
- <span class="cline-any cline-neutral">&nbsp;</span>
1839
- <span class="cline-any cline-neutral">&nbsp;</span>
1840
- <span class="cline-any cline-no">&nbsp;</span>
1841
- <span class="cline-any cline-no">&nbsp;</span>
1842
- <span class="cline-any cline-no">&nbsp;</span>
1843
- <span class="cline-any cline-neutral">&nbsp;</span>
1844
- <span class="cline-any cline-no">&nbsp;</span>
1845
- <span class="cline-any cline-no">&nbsp;</span>
1846
- <span class="cline-any cline-neutral">&nbsp;</span>
1847
- <span class="cline-any cline-neutral">&nbsp;</span>
1848
- <span class="cline-any cline-neutral">&nbsp;</span>
1849
- <span class="cline-any cline-no">&nbsp;</span>
1850
- <span class="cline-any cline-neutral">&nbsp;</span>
1851
- <span class="cline-any cline-neutral">&nbsp;</span>
1852
- <span class="cline-any cline-neutral">&nbsp;</span>
1853
- <span class="cline-any cline-neutral">&nbsp;</span>
1854
- <span class="cline-any cline-no">&nbsp;</span>
1855
- <span class="cline-any cline-neutral">&nbsp;</span>
1856
- <span class="cline-any cline-neutral">&nbsp;</span>
1857
- <span class="cline-any cline-neutral">&nbsp;</span>
1858
- <span class="cline-any cline-no">&nbsp;</span>
1859
- <span class="cline-any cline-no">&nbsp;</span>
1860
- <span class="cline-any cline-neutral">&nbsp;</span>
1861
- <span class="cline-any cline-no">&nbsp;</span>
1862
- <span class="cline-any cline-no">&nbsp;</span>
1863
- <span class="cline-any cline-neutral">&nbsp;</span>
1864
- <span class="cline-any cline-no">&nbsp;</span>
1865
- <span class="cline-any cline-no">&nbsp;</span>
1866
- <span class="cline-any cline-neutral">&nbsp;</span>
1867
- <span class="cline-any cline-no">&nbsp;</span>
1868
- <span class="cline-any cline-no">&nbsp;</span>
1869
- <span class="cline-any cline-neutral">&nbsp;</span>
1870
- <span class="cline-any cline-no">&nbsp;</span>
1871
- <span class="cline-any cline-no">&nbsp;</span>
1872
- <span class="cline-any cline-neutral">&nbsp;</span>
1873
- <span class="cline-any cline-no">&nbsp;</span>
1874
- <span class="cline-any cline-no">&nbsp;</span>
1875
- <span class="cline-any cline-neutral">&nbsp;</span>
1876
- <span class="cline-any cline-neutral">&nbsp;</span>
1877
- <span class="cline-any cline-neutral">&nbsp;</span>
1878
- <span class="cline-any cline-neutral">&nbsp;</span>
1879
- <span class="cline-any cline-yes">90x</span>
1880
- <span class="cline-any cline-neutral">&nbsp;</span>
1881
- <span class="cline-any cline-neutral">&nbsp;</span>
1882
- <span class="cline-any cline-yes">18x</span>
1883
- <span class="cline-any cline-yes">18x</span>
1884
- <span class="cline-any cline-yes">18x</span>
1885
- <span class="cline-any cline-yes">15x</span>
1886
- <span class="cline-any cline-neutral">&nbsp;</span>
1887
- <span class="cline-any cline-yes">18x</span>
1888
- <span class="cline-any cline-yes">18x</span>
1889
- <span class="cline-any cline-no">&nbsp;</span>
1890
- <span class="cline-any cline-neutral">&nbsp;</span>
1891
- <span class="cline-any cline-yes">18x</span>
1892
- <span class="cline-any cline-yes">18x</span>
1893
- <span class="cline-any cline-yes">3x</span>
1894
- <span class="cline-any cline-yes">3x</span>
1895
- <span class="cline-any cline-yes">3x</span>
1896
- <span class="cline-any cline-yes">3x</span>
1897
- <span class="cline-any cline-yes">3x</span>
1898
- <span class="cline-any cline-yes">3x</span>
1899
- <span class="cline-any cline-neutral">&nbsp;</span>
1900
- <span class="cline-any cline-no">&nbsp;</span>
1901
- <span class="cline-any cline-no">&nbsp;</span>
1902
- <span class="cline-any cline-no">&nbsp;</span>
1903
- <span class="cline-any cline-no">&nbsp;</span>
1904
- <span class="cline-any cline-neutral">&nbsp;</span>
1905
- <span class="cline-any cline-neutral">&nbsp;</span>
1906
- <span class="cline-any cline-no">&nbsp;</span>
1907
- <span class="cline-any cline-neutral">&nbsp;</span>
1908
- <span class="cline-any cline-neutral">&nbsp;</span>
1909
- <span class="cline-any cline-yes">3x</span>
1910
- <span class="cline-any cline-neutral">&nbsp;</span>
1911
- <span class="cline-any cline-yes">18x</span>
1912
- <span class="cline-any cline-yes">18x</span>
1913
- <span class="cline-any cline-no">&nbsp;</span>
1914
- <span class="cline-any cline-neutral">&nbsp;</span>
1915
- <span class="cline-any cline-yes">18x</span>
1916
- <span class="cline-any cline-no">&nbsp;</span>
1917
- <span class="cline-any cline-neutral">&nbsp;</span>
1918
- <span class="cline-any cline-yes">18x</span>
1919
- <span class="cline-any cline-no">&nbsp;</span>
1920
- <span class="cline-any cline-neutral">&nbsp;</span>
1921
- <span class="cline-any cline-yes">18x</span>
1922
- <span class="cline-any cline-no">&nbsp;</span>
1923
- <span class="cline-any cline-neutral">&nbsp;</span>
1924
- <span class="cline-any cline-neutral">&nbsp;</span>
1925
- <span class="cline-any cline-neutral">&nbsp;</span>
1926
- <span class="cline-any cline-no">&nbsp;</span>
1927
- <span class="cline-any cline-neutral">&nbsp;</span>
1928
- <span class="cline-any cline-neutral">&nbsp;</span>
1929
- <span class="cline-any cline-no">&nbsp;</span>
1930
- <span class="cline-any cline-no">&nbsp;</span>
1931
- <span class="cline-any cline-neutral">&nbsp;</span>
1932
- <span class="cline-any cline-neutral">&nbsp;</span>
1933
- <span class="cline-any cline-neutral">&nbsp;</span>
1934
- <span class="cline-any cline-yes">3x</span>
1935
- <span class="cline-any cline-yes">3x</span>
1936
- <span class="cline-any cline-neutral">&nbsp;</span>
1937
- <span class="cline-any cline-neutral">&nbsp;</span>
1938
- <span class="cline-any cline-neutral">&nbsp;</span>
1939
- <span class="cline-any cline-yes">3x</span>
1940
- <span class="cline-any cline-yes">3x</span>
1941
- <span class="cline-any cline-yes">3x</span>
1942
- <span class="cline-any cline-neutral">&nbsp;</span>
1943
- <span class="cline-any cline-neutral">&nbsp;</span>
1944
- <span class="cline-any cline-yes">3x</span>
1945
- <span class="cline-any cline-neutral">&nbsp;</span>
1946
- <span class="cline-any cline-neutral">&nbsp;</span>
1947
- <span class="cline-any cline-yes">2x</span>
1948
- <span class="cline-any cline-no">&nbsp;</span>
1949
- <span class="cline-any cline-neutral">&nbsp;</span>
1950
- <span class="cline-any cline-yes">2x</span>
1951
- <span class="cline-any cline-no">&nbsp;</span>
1952
- <span class="cline-any cline-neutral">&nbsp;</span>
1953
- <span class="cline-any cline-yes">2x</span>
1954
- <span class="cline-any cline-no">&nbsp;</span>
1955
- <span class="cline-any cline-no">&nbsp;</span>
1956
- <span class="cline-any cline-neutral">&nbsp;</span>
1957
- <span class="cline-any cline-neutral">&nbsp;</span>
1958
- <span class="cline-any cline-yes">2x</span>
1959
- <span class="cline-any cline-neutral">&nbsp;</span>
1960
- <span class="cline-any cline-neutral">&nbsp;</span>
1961
- <span class="cline-any cline-neutral">&nbsp;</span>
1962
- <span class="cline-any cline-neutral">&nbsp;</span>
1963
- <span class="cline-any cline-yes">90x</span>
1964
- <span class="cline-any cline-neutral">&nbsp;</span>
1965
- <span class="cline-any cline-neutral">&nbsp;</span>
1966
- <span class="cline-any cline-yes">17x</span>
1967
- <span class="cline-any cline-yes">17x</span>
1968
- <span class="cline-any cline-yes">17x</span>
1969
- <span class="cline-any cline-yes">17x</span>
1970
- <span class="cline-any cline-neutral">&nbsp;</span>
1971
- <span class="cline-any cline-neutral">&nbsp;</span>
1972
- <span class="cline-any cline-yes">17x</span>
1973
- <span class="cline-any cline-yes">15x</span>
1974
- <span class="cline-any cline-neutral">&nbsp;</span>
1975
- <span class="cline-any cline-yes">17x</span>
1976
- <span class="cline-any cline-yes">17x</span>
1977
- <span class="cline-any cline-neutral">&nbsp;</span>
1978
- <span class="cline-any cline-no">&nbsp;</span>
1979
- <span class="cline-any cline-no">&nbsp;</span>
1980
- <span class="cline-any cline-neutral">&nbsp;</span>
1981
- <span class="cline-any cline-neutral">&nbsp;</span>
1982
- <span class="cline-any cline-neutral">&nbsp;</span>
1983
- <span class="cline-any cline-neutral">&nbsp;</span>
1984
- <span class="cline-any cline-neutral">&nbsp;</span>
1985
- <span class="cline-any cline-yes">17x</span>
1986
- <span class="cline-any cline-yes">17x</span>
1987
- <span class="cline-any cline-yes">17x</span>
1988
- <span class="cline-any cline-yes">17x</span>
1989
- <span class="cline-any cline-no">&nbsp;</span>
1990
- <span class="cline-any cline-neutral">&nbsp;</span>
1991
- <span class="cline-any cline-neutral">&nbsp;</span>
1992
- <span class="cline-any cline-neutral">&nbsp;</span>
1993
- <span class="cline-any cline-yes">1x</span>
1994
- <span class="cline-any cline-yes">1x</span>
1995
- <span class="cline-any cline-yes">1x</span>
1996
- <span class="cline-any cline-neutral">&nbsp;</span>
1997
- <span class="cline-any cline-neutral">&nbsp;</span>
1998
- <span class="cline-any cline-yes">1x</span>
1999
- <span class="cline-any cline-neutral">&nbsp;</span>
2000
- <span class="cline-any cline-neutral">&nbsp;</span>
2001
- <span class="cline-any cline-yes">1x</span>
2002
- <span class="cline-any cline-yes">1x</span>
2003
- <span class="cline-any cline-neutral">&nbsp;</span>
2004
- <span class="cline-any cline-neutral">&nbsp;</span>
2005
- <span class="cline-any cline-neutral">&nbsp;</span>
2006
- <span class="cline-any cline-no">&nbsp;</span>
2007
- <span class="cline-any cline-no">&nbsp;</span>
2008
- <span class="cline-any cline-neutral">&nbsp;</span>
2009
- <span class="cline-any cline-no">&nbsp;</span>
2010
- <span class="cline-any cline-no">&nbsp;</span>
2011
- <span class="cline-any cline-neutral">&nbsp;</span>
2012
- <span class="cline-any cline-no">&nbsp;</span>
2013
- <span class="cline-any cline-no">&nbsp;</span>
2014
- <span class="cline-any cline-neutral">&nbsp;</span>
2015
- <span class="cline-any cline-no">&nbsp;</span>
2016
- <span class="cline-any cline-no">&nbsp;</span>
2017
- <span class="cline-any cline-neutral">&nbsp;</span>
2018
- <span class="cline-any cline-no">&nbsp;</span>
2019
- <span class="cline-any cline-no">&nbsp;</span>
2020
- <span class="cline-any cline-neutral">&nbsp;</span>
2021
- <span class="cline-any cline-no">&nbsp;</span>
2022
- <span class="cline-any cline-no">&nbsp;</span>
2023
- <span class="cline-any cline-neutral">&nbsp;</span>
2024
- <span class="cline-any cline-no">&nbsp;</span>
2025
- <span class="cline-any cline-neutral">&nbsp;</span>
2026
- <span class="cline-any cline-neutral">&nbsp;</span>
2027
- <span class="cline-any cline-neutral">&nbsp;</span>
2028
- <span class="cline-any cline-neutral">&nbsp;</span>
2029
- <span class="cline-any cline-yes">90x</span>
2030
- <span class="cline-any cline-neutral">&nbsp;</span>
2031
- <span class="cline-any cline-neutral">&nbsp;</span>
2032
- <span class="cline-any cline-neutral">&nbsp;</span>
2033
- <span class="cline-any cline-neutral">&nbsp;</span>
2034
- <span class="cline-any cline-neutral">&nbsp;</span>
2035
- <span class="cline-any cline-neutral">&nbsp;</span>
2036
- <span class="cline-any cline-neutral">&nbsp;</span>
2037
- <span class="cline-any cline-neutral">&nbsp;</span>
2038
- <span class="cline-any cline-neutral">&nbsp;</span>
2039
- <span class="cline-any cline-neutral">&nbsp;</span>
2040
- <span class="cline-any cline-neutral">&nbsp;</span>
2041
- <span class="cline-any cline-neutral">&nbsp;</span>
2042
- <span class="cline-any cline-neutral">&nbsp;</span>
2043
- <span class="cline-any cline-neutral">&nbsp;</span>
2044
- <span class="cline-any cline-neutral">&nbsp;</span>
2045
- <span class="cline-any cline-neutral">&nbsp;</span>
2046
- <span class="cline-any cline-neutral">&nbsp;</span>
2047
- <span class="cline-any cline-neutral">&nbsp;</span>
2048
- <span class="cline-any cline-neutral">&nbsp;</span>
2049
- <span class="cline-any cline-neutral">&nbsp;</span>
2050
- <span class="cline-any cline-neutral">&nbsp;</span>
2051
- <span class="cline-any cline-neutral">&nbsp;</span>
2052
- <span class="cline-any cline-neutral">&nbsp;</span>
2053
- <span class="cline-any cline-neutral">&nbsp;</span>
2054
- <span class="cline-any cline-neutral">&nbsp;</span>
2055
- <span class="cline-any cline-yes">41x</span>
2056
- <span class="cline-any cline-yes">41x</span>
2057
- <span class="cline-any cline-no">&nbsp;</span>
2058
- <span class="cline-any cline-neutral">&nbsp;</span>
2059
- <span class="cline-any cline-yes">41x</span>
2060
- <span class="cline-any cline-yes">41x</span>
2061
- <span class="cline-any cline-yes">31x</span>
2062
- <span class="cline-any cline-neutral">&nbsp;</span>
2063
- <span class="cline-any cline-yes">41x</span>
2064
- <span class="cline-any cline-neutral">&nbsp;</span>
2065
- <span class="cline-any cline-no">&nbsp;</span>
2066
- <span class="cline-any cline-neutral">&nbsp;</span>
2067
- <span class="cline-any cline-yes">41x</span>
2068
- <span class="cline-any cline-no">&nbsp;</span>
2069
- <span class="cline-any cline-neutral">&nbsp;</span>
2070
- <span class="cline-any cline-yes">41x</span>
2071
- <span class="cline-any cline-no">&nbsp;</span>
2072
- <span class="cline-any cline-neutral">&nbsp;</span>
2073
- <span class="cline-any cline-yes">41x</span>
2074
- <span class="cline-any cline-yes">41x</span>
2075
- <span class="cline-any cline-yes">41x</span>
2076
- <span class="cline-any cline-yes">6x</span>
2077
- <span class="cline-any cline-no">&nbsp;</span>
2078
- <span class="cline-any cline-neutral">&nbsp;</span>
2079
- <span class="cline-any cline-yes">6x</span>
2080
- <span class="cline-any cline-yes">6x</span>
2081
- <span class="cline-any cline-neutral">&nbsp;</span>
2082
- <span class="cline-any cline-neutral">&nbsp;</span>
2083
- <span class="cline-any cline-neutral">&nbsp;</span>
2084
- <span class="cline-any cline-yes">41x</span>
2085
- <span class="cline-any cline-yes">41x</span>
2086
- <span class="cline-any cline-no">&nbsp;</span>
2087
- <span class="cline-any cline-neutral">&nbsp;</span>
2088
- <span class="cline-any cline-no">&nbsp;</span>
2089
- <span class="cline-any cline-neutral">&nbsp;</span>
2090
- <span class="cline-any cline-neutral">&nbsp;</span>
2091
- <span class="cline-any cline-neutral">&nbsp;</span>
2092
- <span class="cline-any cline-yes">41x</span>
2093
- <span class="cline-any cline-yes">6x</span>
2094
- <span class="cline-any cline-neutral">&nbsp;</span>
2095
- <span class="cline-any cline-neutral">&nbsp;</span>
2096
- <span class="cline-any cline-neutral">&nbsp;</span>
2097
- <span class="cline-any cline-neutral">&nbsp;</span>
2098
- <span class="cline-any cline-neutral">&nbsp;</span>
2099
- <span class="cline-any cline-yes">41x</span>
2100
- <span class="cline-any cline-yes">35x</span>
2101
- <span class="cline-any cline-yes">35x</span>
2102
- <span class="cline-any cline-neutral">&nbsp;</span>
2103
- <span class="cline-any cline-yes">6x</span>
2104
- <span class="cline-any cline-neutral">&nbsp;</span>
2105
- <span class="cline-any cline-yes">6x</span>
2106
- <span class="cline-any cline-yes">6x</span>
2107
- <span class="cline-any cline-yes">6x</span>
2108
- <span class="cline-any cline-no">&nbsp;</span>
2109
- <span class="cline-any cline-no">&nbsp;</span>
2110
- <span class="cline-any cline-no">&nbsp;</span>
2111
- <span class="cline-any cline-neutral">&nbsp;</span>
2112
- <span class="cline-any cline-yes">6x</span>
2113
- <span class="cline-any cline-yes">6x</span>
2114
- <span class="cline-any cline-yes">6x</span>
2115
- <span class="cline-any cline-yes">5x</span>
2116
- <span class="cline-any cline-yes">5x</span>
2117
- <span class="cline-any cline-yes">5x</span>
2118
- <span class="cline-any cline-yes">4x</span>
2119
- <span class="cline-any cline-neutral">&nbsp;</span>
2120
- <span class="cline-any cline-neutral">&nbsp;</span>
2121
- <span class="cline-any cline-yes">5x</span>
2122
- <span class="cline-any cline-neutral">&nbsp;</span>
2123
- <span class="cline-any cline-neutral">&nbsp;</span>
2124
- <span class="cline-any cline-neutral">&nbsp;</span>
2125
- <span class="cline-any cline-yes">6x</span>
2126
- <span class="cline-any cline-neutral">&nbsp;</span>
2127
- <span class="cline-any cline-neutral">&nbsp;</span>
2128
- <span class="cline-any cline-neutral">&nbsp;</span>
2129
- <span class="cline-any cline-yes">266x</span>
2130
- <span class="cline-any cline-neutral">&nbsp;</span>
2131
- <span class="cline-any cline-neutral">&nbsp;</span>
2132
- <span class="cline-any cline-neutral">&nbsp;</span>
2133
- <span class="cline-any cline-neutral">&nbsp;</span>
2134
- <span class="cline-any cline-yes">433x</span>
2135
- <span class="cline-any cline-yes">433x</span>
2136
- <span class="cline-any cline-yes">433x</span>
2137
- <span class="cline-any cline-yes">433x</span>
2138
- <span class="cline-any cline-neutral">&nbsp;</span>
2139
- <span class="cline-any cline-neutral">&nbsp;</span>
2140
- <span class="cline-any cline-yes">866x</span>
2141
- <span class="cline-any cline-neutral">&nbsp;</span>
2142
- <span class="cline-any cline-neutral">&nbsp;</span>
2143
- <span class="cline-any cline-yes">424x</span>
2144
- <span class="cline-any cline-yes">409x</span>
2145
- <span class="cline-any cline-neutral">&nbsp;</span>
2146
- <span class="cline-any cline-neutral">&nbsp;</span>
2147
- <span class="cline-any cline-yes">15x</span>
2148
- <span class="cline-any cline-yes">15x</span>
2149
- <span class="cline-any cline-neutral">&nbsp;</span>
2150
- <span class="cline-any cline-neutral">&nbsp;</span>
2151
- <span class="cline-any cline-yes">15x</span>
2152
- <span class="cline-any cline-yes">9x</span>
2153
- <span class="cline-any cline-yes">9x</span>
2154
- <span class="cline-any cline-yes">6x</span>
2155
- <span class="cline-any cline-yes">4x</span>
2156
- <span class="cline-any cline-yes">4x</span>
2157
- <span class="cline-any cline-yes">4x</span>
2158
- <span class="cline-any cline-yes">4x</span>
2159
- <span class="cline-any cline-yes">4x</span>
2160
- <span class="cline-any cline-yes">4x</span>
2161
- <span class="cline-any cline-yes">4x</span>
2162
- <span class="cline-any cline-yes">4x</span>
2163
- <span class="cline-any cline-yes">4x</span>
2164
- <span class="cline-any cline-yes">4x</span>
2165
- <span class="cline-any cline-neutral">&nbsp;</span>
2166
- <span class="cline-any cline-yes">2x</span>
2167
- <span class="cline-any cline-neutral">&nbsp;</span>
2168
- <span class="cline-any cline-yes">15x</span>
2169
- <span class="cline-any cline-neutral">&nbsp;</span>
2170
- <span class="cline-any cline-neutral">&nbsp;</span>
2171
- <span class="cline-any cline-neutral">&nbsp;</span>
2172
- <span class="cline-any cline-neutral">&nbsp;</span>
2173
- <span class="cline-any cline-neutral">&nbsp;</span>
2174
- <span class="cline-any cline-neutral">&nbsp;</span>
2175
- <span class="cline-any cline-neutral">&nbsp;</span>
2176
- <span class="cline-any cline-yes">287x</span>
2177
- <span class="cline-any cline-no">&nbsp;</span>
2178
- <span class="cline-any cline-neutral">&nbsp;</span>
2179
- <span class="cline-any cline-yes">287x</span>
2180
- <span class="cline-any cline-neutral">&nbsp;</span>
2181
- <span class="cline-any cline-yes">285x</span>
2182
- <span class="cline-any cline-neutral">&nbsp;</span>
2183
- <span class="cline-any cline-yes">287x</span>
2184
- <span class="cline-any cline-neutral">&nbsp;</span>
2185
- <span class="cline-any cline-neutral">&nbsp;</span>
2186
- <span class="cline-any cline-yes">1x</span>
2187
- <span class="cline-any cline-yes">1x</span>
2188
- <span class="cline-any cline-no">&nbsp;</span>
2189
- <span class="cline-any cline-neutral">&nbsp;</span>
2190
- <span class="cline-any cline-yes">1x</span>
2191
- <span class="cline-any cline-neutral">&nbsp;</span>
2192
- <span class="cline-any cline-yes">287x</span>
2193
- <span class="cline-any cline-no">&nbsp;</span>
2194
- <span class="cline-any cline-neutral">&nbsp;</span>
2195
- <span class="cline-any cline-yes">287x</span>
2196
- <span class="cline-any cline-no">&nbsp;</span>
2197
- <span class="cline-any cline-no">&nbsp;</span>
2198
- <span class="cline-any cline-neutral">&nbsp;</span>
2199
- <span class="cline-any cline-neutral">&nbsp;</span>
2200
- <span class="cline-any cline-yes">287x</span>
2201
- <span class="cline-any cline-yes">287x</span>
2202
- <span class="cline-any cline-yes">287x</span>
2203
- <span class="cline-any cline-yes">287x</span>
2204
- <span class="cline-any cline-yes">287x</span>
2205
- <span class="cline-any cline-yes">287x</span>
2206
- <span class="cline-any cline-neutral">&nbsp;</span>
2207
- <span class="cline-any cline-yes">287x</span>
2208
- <span class="cline-any cline-yes">284x</span>
2209
- <span class="cline-any cline-yes">284x</span>
2210
- <span class="cline-any cline-yes">284x</span>
2211
- <span class="cline-any cline-yes">284x</span>
2212
- <span class="cline-any cline-neutral">&nbsp;</span>
2213
- <span class="cline-any cline-neutral">&nbsp;</span>
2214
- <span class="cline-any cline-yes">287x</span>
2215
- <span class="cline-any cline-yes">287x</span>
2216
- <span class="cline-any cline-neutral">&nbsp;</span>
2217
- <span class="cline-any cline-yes">287x</span>
2218
- <span class="cline-any cline-no">&nbsp;</span>
2219
- <span class="cline-any cline-neutral">&nbsp;</span>
2220
- <span class="cline-any cline-yes">287x</span>
2221
- <span class="cline-any cline-no">&nbsp;</span>
2222
- <span class="cline-any cline-neutral">&nbsp;</span>
2223
- <span class="cline-any cline-yes">287x</span>
2224
- <span class="cline-any cline-no">&nbsp;</span>
2225
- <span class="cline-any cline-neutral">&nbsp;</span>
2226
- <span class="cline-any cline-neutral">&nbsp;</span>
2227
- <span class="cline-any cline-yes">287x</span>
2228
- <span class="cline-any cline-yes">287x</span>
2229
- <span class="cline-any cline-no">&nbsp;</span>
2230
- <span class="cline-any cline-neutral">&nbsp;</span>
2231
- <span class="cline-any cline-neutral">&nbsp;</span>
2232
- <span class="cline-any cline-neutral">&nbsp;</span>
2233
- <span class="cline-any cline-neutral">&nbsp;</span>
2234
- <span class="cline-any cline-yes">13x</span>
2235
- <span class="cline-any cline-yes">13x</span>
2236
- <span class="cline-any cline-yes">13x</span>
2237
- <span class="cline-any cline-yes">2x</span>
2238
- <span class="cline-any cline-neutral">&nbsp;</span>
2239
- <span class="cline-any cline-yes">11x</span>
2240
- <span class="cline-any cline-yes">11x</span>
2241
- <span class="cline-any cline-yes">11x</span>
2242
- <span class="cline-any cline-yes">11x</span>
2243
- <span class="cline-any cline-no">&nbsp;</span>
2244
- <span class="cline-any cline-neutral">&nbsp;</span>
2245
- <span class="cline-any cline-neutral">&nbsp;</span>
2246
- <span class="cline-any cline-yes">11x</span>
2247
- <span class="cline-any cline-neutral">&nbsp;</span>
2248
- <span class="cline-any cline-neutral">&nbsp;</span>
2249
- <span class="cline-any cline-neutral">&nbsp;</span>
2250
- <span class="cline-any cline-yes">90x</span>
2251
- <span class="cline-any cline-neutral">&nbsp;</span>
2252
- <span class="cline-any cline-neutral">&nbsp;</span>
2253
- <span class="cline-any cline-neutral">&nbsp;</span>
2254
- <span class="cline-any cline-yes">10x</span>
2255
- <span class="cline-any cline-neutral">&nbsp;</span>
2256
- <span class="cline-any cline-neutral">&nbsp;</span>
2257
- <span class="cline-any cline-neutral">&nbsp;</span>
2258
- <span class="cline-any cline-yes">4x</span>
2259
- <span class="cline-any cline-no">&nbsp;</span>
2260
- <span class="cline-any cline-neutral">&nbsp;</span>
2261
- <span class="cline-any cline-yes">4x</span>
2262
- <span class="cline-any cline-neutral">&nbsp;</span>
2263
- <span class="cline-any cline-no">&nbsp;</span>
2264
- <span class="cline-any cline-no">&nbsp;</span>
2265
- <span class="cline-any cline-no">&nbsp;</span>
2266
- <span class="cline-any cline-neutral">&nbsp;</span>
2267
- <span class="cline-any cline-no">&nbsp;</span>
2268
- <span class="cline-any cline-neutral">&nbsp;</span>
2269
- <span class="cline-any cline-yes">4x</span>
2270
- <span class="cline-any cline-yes">4x</span>
2271
- <span class="cline-any cline-no">&nbsp;</span>
2272
- <span class="cline-any cline-neutral">&nbsp;</span>
2273
- <span class="cline-any cline-yes">4x</span>
2274
- <span class="cline-any cline-yes">2x</span>
2275
- <span class="cline-any cline-neutral">&nbsp;</span>
2276
- <span class="cline-any cline-neutral">&nbsp;</span>
2277
- <span class="cline-any cline-neutral">&nbsp;</span>
2278
- <span class="cline-any cline-neutral">&nbsp;</span>
2279
- <span class="cline-any cline-yes">2x</span>
2280
- <span class="cline-any cline-yes">2x</span>
2281
- <span class="cline-any cline-yes">2x</span>
2282
- <span class="cline-any cline-neutral">&nbsp;</span>
2283
- <span class="cline-any cline-neutral">&nbsp;</span>
2284
- <span class="cline-any cline-yes">4x</span>
2285
- <span class="cline-any cline-yes">4x</span>
2286
- <span class="cline-any cline-neutral">&nbsp;</span>
2287
- <span class="cline-any cline-neutral">&nbsp;</span>
2288
- <span class="cline-any cline-neutral">&nbsp;</span>
2289
- <span class="cline-any cline-yes">4x</span>
2290
- <span class="cline-any cline-no">&nbsp;</span>
2291
- <span class="cline-any cline-neutral">&nbsp;</span>
2292
- <span class="cline-any cline-neutral">&nbsp;</span>
2293
- <span class="cline-any cline-neutral">&nbsp;</span>
2294
- <span class="cline-any cline-yes">4x</span>
2295
- <span class="cline-any cline-neutral">&nbsp;</span>
2296
- <span class="cline-any cline-neutral">&nbsp;</span>
2297
- <span class="cline-any cline-neutral">&nbsp;</span>
2298
- <span class="cline-any cline-yes">4x</span>
2299
- <span class="cline-any cline-yes">4x</span>
2300
- <span class="cline-any cline-neutral">&nbsp;</span>
2301
- <span class="cline-any cline-yes">4x</span>
2302
- <span class="cline-any cline-no">&nbsp;</span>
2303
- <span class="cline-any cline-neutral">&nbsp;</span>
2304
- <span class="cline-any cline-yes">4x</span>
2305
- <span class="cline-any cline-no">&nbsp;</span>
2306
- <span class="cline-any cline-neutral">&nbsp;</span>
2307
- <span class="cline-any cline-neutral">&nbsp;</span>
2308
- <span class="cline-any cline-neutral">&nbsp;</span>
2309
- <span class="cline-any cline-no">&nbsp;</span>
2310
- <span class="cline-any cline-no">&nbsp;</span>
2311
- <span class="cline-any cline-neutral">&nbsp;</span>
2312
- <span class="cline-any cline-no">&nbsp;</span>
2313
- <span class="cline-any cline-no">&nbsp;</span>
2314
- <span class="cline-any cline-neutral">&nbsp;</span>
2315
- <span class="cline-any cline-neutral">&nbsp;</span>
2316
- <span class="cline-any cline-neutral">&nbsp;</span>
2317
- <span class="cline-any cline-neutral">&nbsp;</span>
2318
- <span class="cline-any cline-neutral">&nbsp;</span>
2319
- <span class="cline-any cline-neutral">&nbsp;</span>
2320
- <span class="cline-any cline-yes">63x</span>
2321
- <span class="cline-any cline-neutral">&nbsp;</span>
2322
- <span class="cline-any cline-neutral">&nbsp;</span>
2323
- <span class="cline-any cline-yes">2x</span>
2324
- <span class="cline-any cline-neutral">&nbsp;</span>
2325
- <span class="cline-any cline-neutral">&nbsp;</span>
2326
- <span class="cline-any cline-yes">61x</span>
2327
- <span class="cline-any cline-yes">1x</span>
2328
- <span class="cline-any cline-neutral">&nbsp;</span>
2329
- <span class="cline-any cline-neutral">&nbsp;</span>
2330
- <span class="cline-any cline-yes">60x</span>
2331
- <span class="cline-any cline-neutral">&nbsp;</span>
2332
- <span class="cline-any cline-neutral">&nbsp;</span>
2333
- <span class="cline-any cline-neutral">&nbsp;</span>
2334
- <span class="cline-any cline-no">&nbsp;</span>
2335
- <span class="cline-any cline-no">&nbsp;</span>
2336
- <span class="cline-any cline-no">&nbsp;</span>
2337
- <span class="cline-any cline-no">&nbsp;</span>
2338
- <span class="cline-any cline-no">&nbsp;</span>
2339
- <span class="cline-any cline-no">&nbsp;</span>
2340
- <span class="cline-any cline-neutral">&nbsp;</span>
2341
- <span class="cline-any cline-no">&nbsp;</span>
2342
- <span class="cline-any cline-neutral">&nbsp;</span>
2343
- <span class="cline-any cline-neutral">&nbsp;</span>
2344
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const _ = require('lodash');
2345
- const dayjs = require('dayjs');
2346
- const tinycolor = require('tinycolor2');
2347
- const { klona } = require('klona');
2348
- const { stripIndents } = require('common-tags');
2349
- const joinr = require('./joinr');
2350
- &nbsp;
2351
- const dateRegex = /^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/;
2352
- &nbsp;
2353
- module.exports = (self) =&gt; {
2354
- self.addFieldType({
2355
- name: 'area',
2356
- async convert(req, field, data, destination) {
2357
- const _id = self.apos.launder.id(data[field.name] &amp;&amp; data[field.name]._id) || self.apos.util.generateId();
2358
- if (typeof data[field.name] === 'string') {
2359
- destination[field.name] = self.apos.area.fromPlaintext(data[field.name]);
2360
- return;
2361
- }
2362
- if (Array.isArray(data[field.name])) {
2363
- data[field.name] = {
2364
- metaType: 'area',
2365
- items: data[field.name]
2366
- };
2367
- }
2368
- let items = [];
2369
- // accept either an array of items, or a complete
2370
- // area object
2371
- try {
2372
- items = data[field.name].items || <span class="branch-1 cbranch-no" title="branch not covered" >[];</span>
2373
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(items)) {
2374
- <span class="cstat-no" title="statement not covered" > items = [];</span>
2375
- }
2376
- } catch (e) {
2377
- // Always recover graciously and import something reasonable, like an empty area
2378
- items = [];
2379
- }
2380
- items = await self.apos.area.sanitizeItems(req, items, field.options || <span class="branch-1 cbranch-no" title="branch not covered" >{})</span>;
2381
- destination[field.name] = {
2382
- _id,
2383
- items,
2384
- metaType: 'area'
2385
- };
2386
- },
2387
- isEmpty: <span class="fstat-no" title="function not covered" >fu</span>nction (field, value) {
2388
- <span class="cstat-no" title="statement not covered" > return self.apos.area.isEmpty({ area: value });</span>
2389
- },
2390
- isEqual (req, field, one, two) {
2391
- if (self.apos.area.isEmpty({ area: one[field.name] }) &amp;&amp; self.apos.area.isEmpty({ area: two[field.name] })) {
2392
- return true;
2393
- }
2394
- return _.isEqual(one[field.name], two[field.name]);
2395
- },
2396
- validate: function (field, options, warn, fail) {
2397
- if (field.options &amp;&amp; field.options.widgets) {
2398
- for (const name of Object.keys(field.options.widgets)) {
2399
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!self.apos.modules[`${name}-widget`]) {
2400
- <span class="cstat-no" title="statement not covered" > if (name.match(/-widget$/)) {</span>
2401
- <span class="cstat-no" title="statement not covered" > warn(stripIndents`</span>
2402
- Do not include "-widget" in the name when configuring a widget in an area field.
2403
- Apostrophe will automatically add "-widget" when looking for the right module.
2404
- `);
2405
- } else {
2406
- <span class="cstat-no" title="statement not covered" > warn(`Nonexistent widget type name ${name} in area field.`);</span>
2407
- }
2408
- }
2409
- }
2410
- }
2411
- }
2412
- });
2413
- &nbsp;
2414
- self.addFieldType({
2415
- name: 'string',
2416
- convert: function (req, field, data, destination) {
2417
- destination[field.name] = self.apos.launder.string(data[field.name], field.def);
2418
- &nbsp;
2419
- destination[field.name] = checkStringLength(destination[field.name], field.min, field.max);
2420
- // If field is required but empty (and client side didn't catch that)
2421
- // This is new and until now if JS client side failed, then it would
2422
- // allow the save with empty values -Lars
2423
- if (field.required &amp;&amp; (_.isUndefined(data[field.name]) || !data[field.name].toString().length)) {
2424
- throw self.apos.error('required');
2425
- }
2426
- },
2427
- index: <span class="fstat-no" title="function not covered" >fu</span>nction (value, field, texts) {
2428
- const silent = <span class="cstat-no" title="statement not covered" >field.silent === undefined ? true : field.silent;</span>
2429
- <span class="cstat-no" title="statement not covered" > texts.push({</span>
2430
- weight: field.weight || 15,
2431
- text: value,
2432
- silent: silent
2433
- });
2434
- },
2435
- isEmpty: <span class="fstat-no" title="function not covered" >fu</span>nction (field, value) {
2436
- <span class="cstat-no" title="statement not covered" > return !value.length;</span>
2437
- },
2438
- addQueryBuilder: function (field, query) {
2439
- query.addBuilder(field.name, {
2440
- finalize: function () {
2441
- <span class="missing-if-branch" title="if path not taken" >I</span>if (self.queryBuilderInterested(query, field.name)) {
2442
- const criteria = <span class="cstat-no" title="statement not covered" >{};</span>
2443
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = new RegExp(self.apos.util.regExpQuote(query.get(field.name)), 'i');</span>
2444
- <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2445
- }
2446
- },
2447
- launder: <span class="fstat-no" title="function not covered" >fu</span>nction (s) {
2448
- <span class="cstat-no" title="statement not covered" > return self.apos.launder.string(s);</span>
2449
- },
2450
- choices: async function () {
2451
- return self.sortedDistinct(field.name, query);
2452
- }
2453
- });
2454
- },
2455
- def: ''
2456
- });
2457
- &nbsp;
2458
- self.addFieldType({
2459
- name: 'slug',
2460
- extend: 'string',
2461
- // if field.page is true, expect a page slug (slashes allowed,
2462
- // leading slash required). Otherwise, expect a object-style slug
2463
- // (no slashes at all)
2464
- convert: function (req, field, data, destination) {
2465
- const options = {
2466
- def: field.def
2467
- };
2468
- if (field.page) {
2469
- options.allow = '/';
2470
- }
2471
- destination[field.name] = self.apos.util.slugify(self.apos.launder.string(data[field.name], field.def), options);
2472
- &nbsp;
2473
- if (field.page) {
2474
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!(destination[field.name].charAt(0) === '/')) {
2475
- <span class="cstat-no" title="statement not covered" > destination[field.name] = '/' + destination[field.name];</span>
2476
- }
2477
- // No runs of slashes
2478
- destination[field.name] = destination[field.name].replace(/\/+/g, '/');
2479
- // No trailing slashes (except for root)
2480
- if (destination[field.name] !== '/') {
2481
- destination[field.name] = destination[field.name].replace(/\/$/, '');
2482
- }
2483
- }
2484
- },
2485
- addQueryBuilder(field, query) {
2486
- query.addBuilder(field.name, {
2487
- finalize: function () {
2488
- <span class="missing-if-branch" title="if path not taken" >I</span>if (self.queryBuilderInterested(query, field.name)) {
2489
- const criteria = <span class="cstat-no" title="statement not covered" >{};</span>
2490
- let slugifyOptions = <span class="cstat-no" title="statement not covered" >{};</span>
2491
- <span class="cstat-no" title="statement not covered" > if (field.page) {</span>
2492
- <span class="cstat-no" title="statement not covered" > slugifyOptions = { allow: '/' };</span>
2493
- }
2494
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = new RegExp(self.apos.util.regExpQuote(self.apos.util.slugify(query.get(field.name), slugifyOptions)));</span>
2495
- <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2496
- }
2497
- },
2498
- choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2499
- <span class="cstat-no" title="statement not covered" > return self.sortedDistinct(field.name, query);</span>
2500
- }
2501
- });
2502
- }
2503
- });
2504
- &nbsp;
2505
- self.addFieldType({
2506
- name: 'boolean',
2507
- convert: function (req, field, data, destination) {
2508
- destination[field.name] = self.apos.launder.boolean(data[field.name], field.def);
2509
- },
2510
- isEmpty: function (field, value) {
2511
- return !value;
2512
- },
2513
- exporters: {
2514
- string: <span class="fstat-no" title="function not covered" >fu</span>nction (req, field, object, output) {
2515
- <span class="cstat-no" title="statement not covered" > output[field.name] = self.apos.launder.boolean(object[field.name]).toString();</span>
2516
- }
2517
- },
2518
- addQueryBuilder(field, query) {
2519
- let criteria;
2520
- query.addBuilder(field.name, {
2521
- finalize: function () {
2522
- <span class="missing-if-branch" title="if path not taken" >I</span>if (query.get(field.name) === false) {
2523
- <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2524
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = { $ne: true };</span>
2525
- <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2526
- } else <span class="missing-if-branch" title="if path not taken" >I</span>if (query.get(field.name) === true) {
2527
- <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2528
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = true;</span>
2529
- <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2530
- }
2531
- },
2532
- launder: <span class="fstat-no" title="function not covered" >fu</span>nction (b) {
2533
- <span class="cstat-no" title="statement not covered" > return self.apos.launder.booleanOrNull(b);</span>
2534
- },
2535
- choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2536
- const values = <span class="cstat-no" title="statement not covered" >query.toDistinct(field.name);</span>
2537
- const choices = <span class="cstat-no" title="statement not covered" >[];</span>
2538
- <span class="cstat-no" title="statement not covered" > if (_.includes(values, true)) {</span>
2539
- <span class="cstat-no" title="statement not covered" > choices.push({</span>
2540
- value: '1',
2541
- label: 'apostrophe:yes'
2542
- });
2543
- }
2544
- <span class="cstat-no" title="statement not covered" > if (_.includes(values, true)) {</span>
2545
- <span class="cstat-no" title="statement not covered" > choices.push({</span>
2546
- value: '0',
2547
- label: 'apostrophe:no'
2548
- });
2549
- }
2550
- <span class="cstat-no" title="statement not covered" > return choices;</span>
2551
- }
2552
- });
2553
- }
2554
- });
2555
- &nbsp;
2556
- self.addFieldType({
2557
- name: 'color',
2558
- <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2559
- <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.string(data[field.name], field.def);</span>
2560
- &nbsp;
2561
- <span class="cstat-no" title="statement not covered" > if (field.required &amp;&amp; (_.isUndefined(destination[field.name]) || !destination[field.name].toString().length)) {</span>
2562
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
2563
- }
2564
- &nbsp;
2565
- const test = <span class="cstat-no" title="statement not covered" >tinycolor(destination[field.name]);</span>
2566
- <span class="cstat-no" title="statement not covered" > if (!tinycolor(test).isValid()) {</span>
2567
- <span class="cstat-no" title="statement not covered" > destination[field.name] = null;</span>
2568
- }
2569
- },
2570
- isEmpty: <span class="fstat-no" title="function not covered" >fu</span>nction (field, value) {
2571
- <span class="cstat-no" title="statement not covered" > return !value.length;</span>
2572
- }
2573
- });
2574
- &nbsp;
2575
- self.addFieldType({
2576
- name: 'checkboxes',
2577
- <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2578
- <span class="cstat-no" title="statement not covered" > if (typeof data[field.name] === 'string') {</span>
2579
- <span class="cstat-no" title="statement not covered" > data[field.name] = self.apos.launder.string(data[field.name]).split(',');</span>
2580
- &nbsp;
2581
- <span class="cstat-no" title="statement not covered" > if (!Array.isArray(data[field.name])) {</span>
2582
- <span class="cstat-no" title="statement not covered" > destination[field.name] = [];</span>
2583
- <span class="cstat-no" title="statement not covered" > return;</span>
2584
- }
2585
- &nbsp;
2586
- <span class="cstat-no" title="statement not covered" > destination[field.name] = _.filter(data[field.name], <span class="fstat-no" title="function not covered" >fu</span>nction (choice) {</span>
2587
- <span class="cstat-no" title="statement not covered" > return _.includes(_.map(field.choices, 'value'), choice);</span>
2588
- });
2589
- } else {
2590
- <span class="cstat-no" title="statement not covered" > if (!Array.isArray(data[field.name])) {</span>
2591
- <span class="cstat-no" title="statement not covered" > destination[field.name] = [];</span>
2592
- } else {
2593
- <span class="cstat-no" title="statement not covered" > destination[field.name] = _.filter(data[field.name], <span class="fstat-no" title="function not covered" >fu</span>nction (choice) {</span>
2594
- <span class="cstat-no" title="statement not covered" > return _.includes(_.map(field.choices, 'value'), choice);</span>
2595
- });
2596
- }
2597
- }
2598
- },
2599
- index: <span class="fstat-no" title="function not covered" >fu</span>nction (value, field, texts) {
2600
- const silent = <span class="cstat-no" title="statement not covered" >field.silent === undefined ? true : field.silent;</span>
2601
- <span class="cstat-no" title="statement not covered" > texts.push({</span>
2602
- weight: field.weight || 15,
2603
- text: (value || []).join(' '),
2604
- silent: silent
2605
- });
2606
- },
2607
- <span class="fstat-no" title="function not covered" > ad</span>dQueryBuilder(field, query) {
2608
- <span class="cstat-no" title="statement not covered" > return query.addBuilder(field.name, {</span>
2609
- finalize: <span class="fstat-no" title="function not covered" >fu</span>nction () {
2610
- <span class="cstat-no" title="statement not covered" > if (self.queryBuilderInterested(query, field.name)) {</span>
2611
- const criteria = <span class="cstat-no" title="statement not covered" >{};</span>
2612
- let v = <span class="cstat-no" title="statement not covered" >query.get(field.name);</span>
2613
- // Allow programmers to pass just one value too (sanitize doesn't apply to them)
2614
- <span class="cstat-no" title="statement not covered" > if (!Array.isArray(v)) {</span>
2615
- <span class="cstat-no" title="statement not covered" > v = [ v ];</span>
2616
- }
2617
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = { $in: v };</span>
2618
- <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2619
- }
2620
- },
2621
- launder: <span class="fstat-no" title="function not covered" >fu</span>nction (value) {
2622
- // Support one or many
2623
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(value)) {</span>
2624
- <span class="cstat-no" title="statement not covered" > return _.map(value, <span class="fstat-no" title="function not covered" >fu</span>nction (v) {</span>
2625
- <span class="cstat-no" title="statement not covered" > return self.apos.launder.select(v, field.choices, field.def);</span>
2626
- });
2627
- } else {
2628
- <span class="cstat-no" title="statement not covered" > return [ self.apos.launder.select(value, field.choices, field.def) ];</span>
2629
- }
2630
- },
2631
- choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2632
- const values = <span class="cstat-no" title="statement not covered" >await query.toDistinct(field.name);</span>
2633
- const choices = <span class="cstat-no" title="statement not covered" >_.map(values, <span class="fstat-no" title="function not covered" >fu</span>nction (value) {</span>
2634
- const choice = <span class="cstat-no" title="statement not covered" >_.find(field.choices, { value: value });</span>
2635
- <span class="cstat-no" title="statement not covered" > return {</span>
2636
- value: value,
2637
- label: choice &amp;&amp; (choice.label || value)
2638
- };
2639
- });
2640
- <span class="cstat-no" title="statement not covered" > self.apos.util.insensitiveSortByProperty(choices, 'label');</span>
2641
- <span class="cstat-no" title="statement not covered" > return choices;</span>
2642
- }
2643
- });
2644
- }
2645
- });
2646
- &nbsp;
2647
- self.addFieldType({
2648
- name: 'select',
2649
- async convert(req, field, data, destination) {
2650
- let choices;
2651
- <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof field.choices) === 'string') {
2652
- <span class="cstat-no" title="statement not covered" > choices = await self.apos.modules[field.moduleName][field.choices](req);</span>
2653
- } else {
2654
- choices = field.choices;
2655
- }
2656
- destination[field.name] = self.apos.launder.select(data[field.name], choices, field.def);
2657
- },
2658
- index: <span class="fstat-no" title="function not covered" >fu</span>nction (value, field, texts) {
2659
- const silent = <span class="cstat-no" title="statement not covered" >field.silent === undefined ? true : field.silent;</span>
2660
- <span class="cstat-no" title="statement not covered" > texts.push({</span>
2661
- weight: field.weight || 15,
2662
- text: value,
2663
- silent: silent
2664
- });
2665
- },
2666
- addQueryBuilder(field, query) {
2667
- return query.addBuilder(field.name, {
2668
- finalize: function () {
2669
- if (self.queryBuilderInterested(query, field.name)) {
2670
- const criteria = {};
2671
- let v = query.get(field.name);
2672
- // Allow programmers to pass just one value too (sanitize doesn't apply to them)
2673
- if (!Array.isArray(v)) {
2674
- v = [ v ];
2675
- }
2676
- criteria[field.name] = { $in: v };
2677
- query.and(criteria);
2678
- }
2679
- },
2680
- launder: <span class="fstat-no" title="function not covered" >fu</span>nction (value) {
2681
- // Support one or many
2682
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(value)) {</span>
2683
- <span class="cstat-no" title="statement not covered" > return _.map(value, <span class="fstat-no" title="function not covered" >fu</span>nction (v) {</span>
2684
- <span class="cstat-no" title="statement not covered" > return self.apos.launder.select(v, field.choices, null);</span>
2685
- });
2686
- } else {
2687
- <span class="cstat-no" title="statement not covered" > value = (typeof field.choices) === 'string'</span>
2688
- ? self.apos.launder.string(value)
2689
- : self.apos.launder.select(value, field.choices, null);
2690
- <span class="cstat-no" title="statement not covered" > if (value === null) {</span>
2691
- <span class="cstat-no" title="statement not covered" > return null;</span>
2692
- }
2693
- <span class="cstat-no" title="statement not covered" > return [ value ];</span>
2694
- }
2695
- },
2696
- choices: async function () {
2697
- let allChoices;
2698
- const values = await query.toDistinct(field.name);
2699
- <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof field.choices) === 'string') {
2700
- const req = <span class="cstat-no" title="statement not covered" >self.apos.task.getReq();</span>
2701
- <span class="cstat-no" title="statement not covered" > allChoices = await self.apos.modules[field.moduleName][field.choices](req);</span>
2702
- } else {
2703
- allChoices = field.choices;
2704
- }
2705
- const choices = _.map(values, function (value) {
2706
- const choice = _.find(allChoices, { value: value });
2707
- return {
2708
- value: value,
2709
- label: choice &amp;&amp; (choice.label || <span class="branch-2 cbranch-no" title="branch not covered" >value)</span>
2710
- };
2711
- });
2712
- self.apos.util.insensitiveSortByProperty(choices, 'label');
2713
- return choices;
2714
- }
2715
- });
2716
- }
2717
- });
2718
- &nbsp;
2719
- self.addFieldType({
2720
- name: 'radio',
2721
- extend: 'select'
2722
- });
2723
- &nbsp;
2724
- self.addFieldType({
2725
- name: 'integer',
2726
- vueComponent: 'AposInputString',
2727
- async convert(req, field, data, destination) {
2728
- destination[field.name] = self.apos.launder.integer(data[field.name], field.def, field.min, field.max);
2729
- if (field.required &amp;&amp; ((data[field.name] == null) || !data[field.name].toString().length)) {
2730
- throw self.apos.error('required');
2731
- }
2732
- if (data[field.name] &amp;&amp; isNaN(parseFloat(data[field.name]))) {
2733
- throw self.apos.error('invalid');
2734
- }
2735
- // This makes it possible to have a field that is not required, but min / max defined.
2736
- // This allows the form to be saved and sets the value to null if no value was given by
2737
- // the user.
2738
- if (!data[field.name] &amp;&amp; data[field.name] !== 0) {
2739
- destination[field.name] = null;
2740
- }
2741
- },
2742
- addQueryBuilder(field, query) {
2743
- return query.addBuilder(field.name, {
2744
- finalize: function () {
2745
- let criteria;
2746
- const value = query.get(field.name);
2747
- <span class="missing-if-branch" title="if path not taken" >I</span>if (value !== undefined &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >value !== null)</span> {
2748
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(value) &amp;&amp; value.length === 2) {</span>
2749
- <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2750
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = {</span>
2751
- $gte: value[0],
2752
- $lte: value[1]
2753
- };
2754
- } else {
2755
- <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2756
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = self.apos.launder.integer(value);</span>
2757
- <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2758
- }
2759
- }
2760
- },
2761
- choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2762
- <span class="cstat-no" title="statement not covered" > return self.sortedDistinct(field.name, query);</span>
2763
- },
2764
- launder: <span class="fstat-no" title="function not covered" >fu</span>nction (s) {
2765
- <span class="cstat-no" title="statement not covered" > return self.apos.launder.integer(s, null);</span>
2766
- }
2767
- });
2768
- }
2769
- });
2770
- &nbsp;
2771
- self.addFieldType({
2772
- name: 'float',
2773
- vueComponent: 'AposInputString',
2774
- async convert(req, field, data, destination) {
2775
- destination[field.name] = self.apos.launder.float(data[field.name], field.def, field.min, field.max);
2776
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.required &amp;&amp; (_.isUndefined(data[field.name]) || !data[field.name].toString().length)) {
2777
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
2778
- }
2779
- if (data[field.name] &amp;&amp; isNaN(parseFloat(data[field.name]))) {
2780
- throw self.apos.error('invalid');
2781
- }
2782
- if (!data[field.name] &amp;&amp; data[field.name] !== 0) {
2783
- destination[field.name] = null;
2784
- }
2785
- },
2786
- <span class="fstat-no" title="function not covered" > ad</span>dQueryBuilder(field, query) {
2787
- <span class="cstat-no" title="statement not covered" > return query.addBuilder(field.name, {</span>
2788
- finalize: <span class="fstat-no" title="function not covered" >fu</span>nction () {
2789
- let criteria;
2790
- const value = <span class="cstat-no" title="statement not covered" >query.get(field.name);</span>
2791
- <span class="cstat-no" title="statement not covered" > if (value !== undefined &amp;&amp; value !== null) {</span>
2792
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(value) &amp;&amp; value.length === 2) {</span>
2793
- <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2794
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = {</span>
2795
- $gte: value[0],
2796
- $lte: value[1]
2797
- };
2798
- } else {
2799
- <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2800
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = self.apos.launder.float(value);</span>
2801
- <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2802
- }
2803
- }
2804
- },
2805
- choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2806
- <span class="cstat-no" title="statement not covered" > return self.sortedDistinct(field.name, query);</span>
2807
- }
2808
- });
2809
- }
2810
- });
2811
- &nbsp;
2812
- self.addFieldType({
2813
- name: 'email',
2814
- vueComponent: 'AposInputString',
2815
- convert: <span class="fstat-no" title="function not covered" >fu</span>nction (req, field, data, destination) {
2816
- <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.string(data[field.name]);</span>
2817
- <span class="cstat-no" title="statement not covered" > if (!data[field.name]) {</span>
2818
- <span class="cstat-no" title="statement not covered" > if (field.required) {</span>
2819
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
2820
- }
2821
- } else {
2822
- // regex source: https://emailregex.com/
2823
- const matches = <span class="cstat-no" title="statement not covered" >data[field.name].match(/^(([^&lt;&gt;()[\]\\.,;:\s@"]+(\.[^&lt;&gt;()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);</span>
2824
- <span class="cstat-no" title="statement not covered" > if (!matches) {</span>
2825
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('invalid');</span>
2826
- }
2827
- }
2828
- <span class="cstat-no" title="statement not covered" > destination[field.name] = data[field.name];</span>
2829
- }
2830
- });
2831
- &nbsp;
2832
- self.addFieldType({
2833
- name: 'url',
2834
- vueComponent: 'AposInputString',
2835
- async convert(req, field, data, destination) {
2836
- destination[field.name] = self.apos.launder.url(data[field.name], field.def, true);
2837
- },
2838
- diffable: <span class="fstat-no" title="function not covered" >fu</span>nction (value) {
2839
- // URLs are fine to diff and display
2840
- <span class="cstat-no" title="statement not covered" > if (typeof value === 'string') {</span>
2841
- <span class="cstat-no" title="statement not covered" > return value;</span>
2842
- }
2843
- // always return a valid string
2844
- <span class="cstat-no" title="statement not covered" > return '';</span>
2845
- },
2846
- addQueryBuilder(field, query) {
2847
- query.addBuilder(field.name, {
2848
- finalize: function () {
2849
- <span class="missing-if-branch" title="if path not taken" >I</span>if (self.queryBuilderInterested(query, field.name)) {
2850
- const criteria = <span class="cstat-no" title="statement not covered" >{};</span>
2851
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = new RegExp(self.apos.util.regExpQuote(query.get(field.name)), 'i');</span>
2852
- <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2853
- }
2854
- },
2855
- launder: <span class="fstat-no" title="function not covered" >fu</span>nction (s) {
2856
- // Don't be too strict, just enough that we can safely pass it to
2857
- // regExpQuote, partial URLs are welcome
2858
- <span class="cstat-no" title="statement not covered" > return self.apos.launder.string(s);</span>
2859
- },
2860
- choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2861
- <span class="cstat-no" title="statement not covered" > return self.sortDistinct(field.name, query);</span>
2862
- }
2863
- });
2864
- }
2865
- });
2866
- &nbsp;
2867
- self.addFieldType({
2868
- name: 'date',
2869
- vueComponent: 'AposInputString',
2870
- <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2871
- const newDateVal = <span class="cstat-no" title="statement not covered" >data[field.name];</span>
2872
- <span class="cstat-no" title="statement not covered" > if (!newDateVal &amp;&amp; destination[field.name]) {</span>
2873
- // Allow date fields to be unset.
2874
- <span class="cstat-no" title="statement not covered" > destination[field.name] = null;</span>
2875
- <span class="cstat-no" title="statement not covered" > return;</span>
2876
- }
2877
- <span class="cstat-no" title="statement not covered" > if (field.min &amp;&amp; newDateVal &amp;&amp; (newDateVal &lt; field.min)) {</span>
2878
- // If the min requirement isn't met, leave as-is.
2879
- <span class="cstat-no" title="statement not covered" > return;</span>
2880
- }
2881
- <span class="cstat-no" title="statement not covered" > if (field.max &amp;&amp; newDateVal &amp;&amp; (newDateVal &gt; field.max)) {</span>
2882
- // If the max requirement isn't met, leave as-is.
2883
- <span class="cstat-no" title="statement not covered" > return;</span>
2884
- }
2885
- &nbsp;
2886
- <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.date(newDateVal, field.def);</span>
2887
- },
2888
- validate: <span class="fstat-no" title="function not covered" >fu</span>nction (field, options, warn, fail) {
2889
- <span class="cstat-no" title="statement not covered" > if (field.max &amp;&amp; !field.max.match(dateRegex)) {</span>
2890
- <span class="cstat-no" title="statement not covered" > fail('Property "max" must be in the date format, YYYY-MM-DD');</span>
2891
- }
2892
- <span class="cstat-no" title="statement not covered" > if (field.min &amp;&amp; !field.min.match(dateRegex)) {</span>
2893
- <span class="cstat-no" title="statement not covered" > fail('Property "min" must be in the date format, YYYY-MM-DD');</span>
2894
- }
2895
- },
2896
- <span class="fstat-no" title="function not covered" > ad</span>dQueryBuilder(field, query) {
2897
- <span class="cstat-no" title="statement not covered" > return query.addBuilder(field.name, {</span>
2898
- finalize: <span class="fstat-no" title="function not covered" >fu</span>nction () {
2899
- <span class="cstat-no" title="statement not covered" > if (self.queryBuilderInterested(query, field.name)) {</span>
2900
- const value = <span class="cstat-no" title="statement not covered" >query.get(field.name);</span>
2901
- let criteria;
2902
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(value)) {</span>
2903
- <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2904
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = {</span>
2905
- $gte: value[0],
2906
- $lte: value[1]
2907
- };
2908
- } else {
2909
- <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2910
- <span class="cstat-no" title="statement not covered" > criteria[field.name] = self.apos.launder.date(value);</span>
2911
- <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2912
- }
2913
- }
2914
- },
2915
- launder: <span class="fstat-no" title="function not covered" >fu</span>nction (value) {
2916
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(value) &amp;&amp; value.length === 2) {</span>
2917
- <span class="cstat-no" title="statement not covered" > if (value[0] instanceof Date) {</span>
2918
- <span class="cstat-no" title="statement not covered" > value[0] = dayjs(value[0]).format('YYYY-MM-DD');</span>
2919
- }
2920
- <span class="cstat-no" title="statement not covered" > if (value[1] instanceof Date) {</span>
2921
- <span class="cstat-no" title="statement not covered" > value[1] = dayjs(value[1]).format('YYYY-MM-DD');</span>
2922
- }
2923
- <span class="cstat-no" title="statement not covered" > value[0] = self.apos.launder.date(value[0]);</span>
2924
- <span class="cstat-no" title="statement not covered" > value[1] = self.apos.launder.date(value[1]);</span>
2925
- <span class="cstat-no" title="statement not covered" > return value;</span>
2926
- } else {
2927
- <span class="cstat-no" title="statement not covered" > if (value instanceof Date) {</span>
2928
- <span class="cstat-no" title="statement not covered" > value = dayjs(value).format('YYYY-MM-DD');</span>
2929
- }
2930
- <span class="cstat-no" title="statement not covered" > return self.apos.launder.date(value, null);</span>
2931
- }
2932
- },
2933
- choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2934
- <span class="cstat-no" title="statement not covered" > return self.sortDistinct(field.name, query);</span>
2935
- }
2936
- });
2937
- }
2938
- });
2939
- &nbsp;
2940
- self.addFieldType({
2941
- name: 'time',
2942
- vueComponent: 'AposInputString',
2943
- <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2944
- <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.time(data[field.name], field.def);</span>
2945
- }
2946
- });
2947
- &nbsp;
2948
- self.addFieldType({
2949
- name: 'dateAndTime',
2950
- vueComponent: 'AposInputDateAndTime',
2951
- convert (req, field, data, destination) {
2952
- destination[field.name] = data[field.name]
2953
- ? self.apos.launder.date(data[field.name])
2954
- : null;
2955
- }
2956
- });
2957
- &nbsp;
2958
- self.addFieldType({
2959
- name: 'password',
2960
- async convert(req, field, data, destination) {
2961
- // This is the only field type that we never update unless
2962
- // there is actually a new value — a blank password is not cool. -Tom
2963
- if (data[field.name]) {
2964
- destination[field.name] = self.apos.launder.string(data[field.name], field.def);
2965
- &nbsp;
2966
- destination[field.name] = checkStringLength(destination[field.name], field.min, field.max);
2967
- }
2968
- }
2969
- });
2970
- &nbsp;
2971
- self.addFieldType({
2972
- name: 'group' // visual grouping only
2973
- });
2974
- &nbsp;
2975
- self.addFieldType({
2976
- name: 'range',
2977
- vueComponent: 'AposInputRange',
2978
- <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2979
- <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.float(data[field.name], field.def, field.min, field.max);</span>
2980
- <span class="cstat-no" title="statement not covered" > if (field.required &amp;&amp; (_.isUndefined(data[field.name]) || !data[field.name].toString().length)) {</span>
2981
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
2982
- }
2983
- <span class="cstat-no" title="statement not covered" > if (data[field.name] &amp;&amp; isNaN(parseFloat(data[field.name]))) {</span>
2984
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('invalid');</span>
2985
- }
2986
- // Allow for ranges to go unset
2987
- // `min` here does not imply requirement, it is the minimum value the range UI will represent
2988
- <span class="cstat-no" title="statement not covered" > if (</span>
2989
- !data[field.name] ||
2990
- data[field.name] &lt; field.min ||
2991
- data[field.name] &gt; field.max
2992
- ) {
2993
- <span class="cstat-no" title="statement not covered" > destination[field.name] = null;</span>
2994
- }
2995
- },
2996
- validate: <span class="fstat-no" title="function not covered" >fu</span>nction (field, options, warn, fail) {
2997
- <span class="cstat-no" title="statement not covered" > if (!field.min &amp;&amp; field.min !== 0) {</span>
2998
- <span class="cstat-no" title="statement not covered" > fail('Property "min" must be set.');</span>
2999
- }
3000
- <span class="cstat-no" title="statement not covered" > if (!field.max &amp;&amp; field.max !== 0) {</span>
3001
- <span class="cstat-no" title="statement not covered" > fail('Property "max" must be set.');</span>
3002
- }
3003
- <span class="cstat-no" title="statement not covered" > if (typeof field.max !== 'number') {</span>
3004
- <span class="cstat-no" title="statement not covered" > fail('Property "max" must be a number');</span>
3005
- }
3006
- <span class="cstat-no" title="statement not covered" > if (typeof field.min !== 'number') {</span>
3007
- <span class="cstat-no" title="statement not covered" > fail('Property "min" must be a number');</span>
3008
- }
3009
- <span class="cstat-no" title="statement not covered" > if (field.step &amp;&amp; typeof field.step !== 'number') {</span>
3010
- <span class="cstat-no" title="statement not covered" > fail('Property "step" must be a number.');</span>
3011
- }
3012
- <span class="cstat-no" title="statement not covered" > if (field.unit &amp;&amp; typeof field.unit !== 'string') {</span>
3013
- <span class="cstat-no" title="statement not covered" > fail('Property "unit" must be a string.');</span>
3014
- }
3015
- }
3016
- });
3017
- &nbsp;
3018
- self.addFieldType({
3019
- name: 'array',
3020
- async convert(req, field, data, destination) {
3021
- const schema = field.schema;
3022
- data = data[field.name];
3023
- if (!Array.isArray(data)) {
3024
- data = [];
3025
- }
3026
- const results = [];
3027
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.limit &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >data.length &gt; field.limit)</span> {
3028
- <span class="cstat-no" title="statement not covered" > data = data.slice(0, field.limit);</span>
3029
- }
3030
- const errors = [];
3031
- for (const datum of data) {
3032
- const result = {};
3033
- result._id = self.apos.launder.id(datum._id) || self.apos.util.generateId();
3034
- result.metaType = 'arrayItem';
3035
- result.scopedArrayName = field.scopedArrayName;
3036
- try {
3037
- await self.convert(req, schema, datum, result);
3038
- } catch (e) {
3039
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(e)) {</span>
3040
- <span class="cstat-no" title="statement not covered" > for (const error of e) {</span>
3041
- <span class="cstat-no" title="statement not covered" > error.path = `${result._id}.${error.path}`;</span>
3042
- <span class="cstat-no" title="statement not covered" > errors.push(error);</span>
3043
- }
3044
- } else {
3045
- <span class="cstat-no" title="statement not covered" > throw e;</span>
3046
- }
3047
- }
3048
- results.push(result);
3049
- }
3050
- destination[field.name] = results;
3051
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.required &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!results.length)</span> {
3052
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
3053
- }
3054
- <span class="missing-if-branch" title="if path not taken" >I</span>if ((field.min !== undefined) &amp;&amp; (<span class="branch-1 cbranch-no" title="branch not covered" >results.length &lt; field.min)</span>) {
3055
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('min');</span>
3056
- }
3057
- <span class="missing-if-branch" title="if path not taken" >I</span>if ((field.max !== undefined) &amp;&amp; (<span class="branch-1 cbranch-no" title="branch not covered" >results.length &gt; field.max)</span>) {
3058
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('max');</span>
3059
- }
3060
- <span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length) {
3061
- <span class="cstat-no" title="statement not covered" > throw errors;</span>
3062
- }
3063
- },
3064
- isEmpty: <span class="fstat-no" title="function not covered" >fu</span>nction (field, value) {
3065
- <span class="cstat-no" title="statement not covered" > return (!Array.isArray(value)) || (!value.length);</span>
3066
- },
3067
- index: <span class="fstat-no" title="function not covered" >fu</span>nction (value, field, texts) {
3068
- <span class="cstat-no" title="statement not covered" > _.each(value || [], <span class="fstat-no" title="function not covered" >fu</span>nction (item) {</span>
3069
- <span class="cstat-no" title="statement not covered" > self.apos.schema.indexFields(field.schema, item, texts);</span>
3070
- });
3071
- },
3072
- validate: function (field, options, warn, fail) {
3073
- for (const subField of field.schema || <span class="branch-1 cbranch-no" title="branch not covered" >field.fields.add)</span> {
3074
- self.validateField(subField, options);
3075
- }
3076
- },
3077
- register: function (metaType, type, field) {
3078
- const localArrayName = field.arrayName || field.name;
3079
- field.scopedArrayName = `${metaType}.${type}.${localArrayName}`;
3080
- self.arrayManagers[field.scopedArrayName] = {
3081
- schema: field.schema
3082
- };
3083
- self.register(metaType, type, field.schema);
3084
- },
3085
- isEqual(req, field, one, two) {
3086
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!(one[field.name] &amp;&amp; two[field.name])) {
3087
- <span class="cstat-no" title="statement not covered" > return !(one[field.name] || two[field.name]);</span>
3088
- }
3089
- <span class="missing-if-branch" title="if path not taken" >I</span>if (one[field.name].length !== two[field.name].length) {
3090
- <span class="cstat-no" title="statement not covered" > return false;</span>
3091
- }
3092
- for (let i = 0; (i &lt; one.length); i++) {
3093
- <span class="cstat-no" title="statement not covered" > if (!self.isEqual(req, field.schema, one[field.name][i], two[field.name][i])) {</span>
3094
- <span class="cstat-no" title="statement not covered" > return false;</span>
3095
- }
3096
- }
3097
- return true;
3098
- },
3099
- def: []
3100
- });
3101
- &nbsp;
3102
- self.addFieldType({
3103
- name: 'object',
3104
- async convert(req, field, data, destination) {
3105
- data = data[field.name];
3106
- const schema = field.schema;
3107
- const errors = [];
3108
- const result = {
3109
- _id: self.apos.launder.id(data &amp;&amp; data._id) || self.apos.util.generateId()
3110
- };
3111
- if (data == null || typeof data !== 'object' || Array.isArray(data)) {
3112
- data = {};
3113
- }
3114
- try {
3115
- await self.convert(req, schema, data, result);
3116
- } catch (e) {
3117
- <span class="cstat-no" title="statement not covered" > for (const error of e) {</span>
3118
- <span class="cstat-no" title="statement not covered" > errors.push({</span>
3119
- path: error.path,
3120
- error: error.error
3121
- });
3122
- }
3123
- }
3124
- result.metaType = 'objectItem';
3125
- result.scopedObjectName = field.scopedObjectName;
3126
- destination[field.name] = result;
3127
- <span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length) {
3128
- <span class="cstat-no" title="statement not covered" > throw errors;</span>
3129
- }
3130
- },
3131
- register: function (metaType, type, field) {
3132
- const localObjectName = field.objectName || field.name;
3133
- field.scopedObjectName = `${metaType}.${type}.${localObjectName}`;
3134
- self.objectManagers[field.scopedObjectName] = {
3135
- schema: field.schema
3136
- };
3137
- self.register(metaType, type, field.schema);
3138
- },
3139
- validate: function (field, options, warn, fail) {
3140
- for (const subField of field.schema || <span class="branch-1 cbranch-no" title="branch not covered" >field.fields.add)</span> {
3141
- self.validateField(subField, options);
3142
- }
3143
- },
3144
- <span class="fstat-no" title="function not covered" > is</span>Equal(req, field, one, two) {
3145
- <span class="cstat-no" title="statement not covered" > if (one &amp;&amp; (!two)) {</span>
3146
- <span class="cstat-no" title="statement not covered" > return false;</span>
3147
- }
3148
- <span class="cstat-no" title="statement not covered" > if (two &amp;&amp; (!one)) {</span>
3149
- <span class="cstat-no" title="statement not covered" > return false;</span>
3150
- }
3151
- <span class="cstat-no" title="statement not covered" > if (!(one || two)) {</span>
3152
- <span class="cstat-no" title="statement not covered" > return true;</span>
3153
- }
3154
- <span class="cstat-no" title="statement not covered" > if (one[field.name] &amp;&amp; (!two[field.name])) {</span>
3155
- <span class="cstat-no" title="statement not covered" > return false;</span>
3156
- }
3157
- <span class="cstat-no" title="statement not covered" > if (two[field.name] &amp;&amp; (!one[field.name])) {</span>
3158
- <span class="cstat-no" title="statement not covered" > return false;</span>
3159
- }
3160
- <span class="cstat-no" title="statement not covered" > if (!(one[field.name] || two[field.name])) {</span>
3161
- <span class="cstat-no" title="statement not covered" > return true;</span>
3162
- }
3163
- <span class="cstat-no" title="statement not covered" > return self.isEqual(req, field.schema, one[field.name], two[field.name]);</span>
3164
- },
3165
- def: {}
3166
- });
3167
- &nbsp;
3168
- self.addFieldType({
3169
- name: 'relationship',
3170
- // Validate a relationship field, copying from `data[field.name]` to
3171
- // `object[field.name]`. If the relationship is named `_product`, then
3172
- // `data._product` should be an array of product docs.
3173
- // These doc objects must at least have an _id property.
3174
- //
3175
- // Alternatively, entries in `data._product` may simply be
3176
- // `_id` strings or `title` strings. Titles are compared in a
3177
- // tolerant manner. This is useful for CSV input. Strings may
3178
- // be mixed with actual docs in a single array.
3179
- //
3180
- // If the relationship field has a `fields` option, then each
3181
- // doc object may also have a `_fields` property which
3182
- // will be validated against the schema in `fields`.
3183
- //
3184
- // The result in `object[field.name]` will always be an array
3185
- // of zero or more related docs, containing only those that
3186
- // actually exist in the database and can be fetched by this user,
3187
- // in the same order specified in `data[field.name]`.
3188
- //
3189
- // Actual storage to the permanent idsStorage and fieldsStorage
3190
- // properties is handled at a lower level in a beforeSave
3191
- // handler of the doc-type module.
3192
- &nbsp;
3193
- async convert(req, field, data, destination) {
3194
- const manager = self.apos.doc.getManager(field.withType);
3195
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!manager) {
3196
- <span class="cstat-no" title="statement not covered" > throw Error('relationship with type ' + field.withType + ' unrecognized');</span>
3197
- }
3198
- let input = data[field.name];
3199
- if (input == null) {
3200
- input = [];
3201
- }
3202
- <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof input) === 'string') {
3203
- // Handy in CSV: allows titles or _ids
3204
- <span class="cstat-no" title="statement not covered" > input = input.split(/\s*,\s*/);</span>
3205
- }
3206
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.min &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >field.min &gt; input.length)</span> {
3207
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('min', `Minimum ${field.withType} required not reached.`);</span>
3208
- }
3209
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.max &amp;&amp; field.max &lt; input.length) {
3210
- <span class="cstat-no" title="statement not covered" > throw self.apos.error('max', `Maximum ${field.withType} required reached.`);</span>
3211
- }
3212
- const ids = [];
3213
- const titlesOrIds = [];
3214
- for (const item of input) {
3215
- <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof item) === 'string') {
3216
- <span class="cstat-no" title="statement not covered" > titlesOrIds.push(item);</span>
3217
- } else {
3218
- <span class="missing-if-branch" title="else path not taken" >E</span>if (item &amp;&amp; ((typeof item._id) === 'string')) {
3219
- ids.push(item._id);
3220
- }
3221
- }
3222
- }
3223
- const clauses = [];
3224
- <span class="missing-if-branch" title="if path not taken" >I</span>if (titlesOrIds.length) {
3225
- <span class="cstat-no" title="statement not covered" > clauses.push({</span>
3226
- titleSortified: {
3227
- $in: titlesOrIds.map(<span class="fstat-no" title="function not covered" >ti</span>tleOrId =&gt; <span class="cstat-no" title="statement not covered" >self.apos.util.sortify(titleOrId))</span>
3228
- }
3229
- });
3230
- }
3231
- if (ids.length) {
3232
- clauses.push({
3233
- _id: {
3234
- $in: ids
3235
- }
3236
- });
3237
- }
3238
- if (!clauses.length) {
3239
- destination[field.name] = [];
3240
- return;
3241
- }
3242
- const results = await manager.find(req, { $or: clauses }).relationships(false).toArray();
3243
- // Must maintain input order. Also discard things not actually found in the db
3244
- const actualDocs = [];
3245
- for (const item of input) {
3246
- <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof item) === 'string') {
3247
- const result = <span class="cstat-no" title="statement not covered" >results.find(<span class="fstat-no" title="function not covered" >re</span>sult =&gt; <span class="cstat-no" title="statement not covered" >(result.title === item) || (result._id === item))</span>;</span>
3248
- <span class="cstat-no" title="statement not covered" > if (result) {</span>
3249
- <span class="cstat-no" title="statement not covered" > actualDocs.push(result);</span>
3250
- }
3251
- } else <span class="missing-if-branch" title="else path not taken" >E</span>if ((item &amp;&amp; ((typeof item._id) === 'string'))) {
3252
- const result = results.find(doc =&gt; (doc._id === item._id));
3253
- if (result) {
3254
- <span class="missing-if-branch" title="else path not taken" >E</span>if (field.schema) {
3255
- result._fields = {};
3256
- if (item &amp;&amp; ((typeof item._fields === 'object'))) {
3257
- await self.convert(req, field.schema, item._fields || <span class="branch-1 cbranch-no" title="branch not covered" >{},</span> result._fields);
3258
- }
3259
- }
3260
- actualDocs.push(result);
3261
- }
3262
- }
3263
- }
3264
- destination[field.name] = actualDocs;
3265
- },
3266
- &nbsp;
3267
- relate: async function (req, field, objects, options) {
3268
- return self.relationshipDriver(req, joinr.byArray, false, objects, field.idsStorage, field.fieldsStorage, field.name, options);
3269
- },
3270
- &nbsp;
3271
- addQueryBuilder(field, query) {
3272
- &nbsp;
3273
- addOperationQueryBuilder('', '$in');
3274
- addOperationQueryBuilder('And', '$all');
3275
- self.addRelationshipSlugQueryBuilder(field, query, '');
3276
- self.addRelationshipSlugQueryBuilder(field, query, 'And');
3277
- &nbsp;
3278
- function addOperationQueryBuilder(suffix, operator) {
3279
- return query.addBuilder(field.name + suffix, {
3280
- finalize: function () {
3281
- &nbsp;
3282
- if (!self.queryBuilderInterested(query, field.name + suffix)) {
3283
- return;
3284
- }
3285
- &nbsp;
3286
- const value = query.get(field.name + suffix);
3287
- const criteria = {};
3288
- // Even programmers appreciate shortcuts, so it's not enough that the
3289
- // sanitizer (which doesn't apply to programmatic use) accepts these
3290
- if (Array.isArray(value)) {
3291
- criteria[field.idsStorage] = {};
3292
- criteria[field.idsStorage][operator] = value.map(self.apos.doc.toAposDocId);
3293
- } else if (value === 'none') {
3294
- criteria.$or = [];
3295
- let clause = {};
3296
- clause[field.idsStorage] = null;
3297
- criteria.$or.push(clause);
3298
- clause = {};
3299
- clause[field.idsStorage] = { $exists: 0 };
3300
- criteria.$or.push(clause);
3301
- clause = {};
3302
- clause[field.idsStorage + '.0'] = { $exists: 0 };
3303
- criteria.$or.push(clause);
3304
- } else {
3305
- criteria[field.idsStorage] = { $in: [ self.apos.doc.toAposDocId(value) ] };
3306
- }
3307
- query.and(criteria);
3308
- },
3309
- choices: self.relationshipQueryBuilderChoices(field, query, '_id'),
3310
- launder: relationshipQueryBuilderLaunder
3311
- });
3312
- }
3313
- },
3314
- validate: function (field, options, warn, fail) {
3315
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.name.match(/^_/)) {
3316
- <span class="cstat-no" title="statement not covered" > warn('Name of relationship field does not start with _. This is permitted for bc but it will fill your database with duplicate outdated data. Please fix it.');</span>
3317
- }
3318
- if (!field.idsStorage) {
3319
- // Supply reasonable value
3320
- field.idsStorage = field.name.replace(/^_/, '') + 'Ids';
3321
- }
3322
- if (!field.withType) {
3323
- // Try to supply reasonable value based on relationship name. Relationship name will be plural,
3324
- // so consider that too
3325
- const withType = field.name.replace(/^_/, '').replace(/s$/, '');
3326
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!_.find(self.apos.doc.managers, { name: withType })) {
3327
- <span class="cstat-no" title="statement not covered" > fail('withType property is missing. Hint: it must match the name of a doc type module. Or omit it and give your relationship the same name as the other type, with a leading _ and optional trailing s.');</span>
3328
- }
3329
- field.withType = withType;
3330
- }
3331
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.withType) {
3332
- <span class="cstat-no" title="statement not covered" > fail('withType property is missing. Hint: it must match the name of a doc type module.');</span>
3333
- }
3334
- <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(field.withType)) {
3335
- <span class="cstat-no" title="statement not covered" > _.each(field.withType, <span class="fstat-no" title="function not covered" >fu</span>nction (type) {</span>
3336
- <span class="cstat-no" title="statement not covered" > lintType(type);</span>
3337
- });
3338
- } else {
3339
- lintType(field.withType);
3340
- const withTypeManager = self.apos.doc.getManager(field.withType);
3341
- field.editor = field.editor || withTypeManager.options.relationshipEditor;
3342
- field.postprocessor = field.postprocessor || withTypeManager.options.relationshipPostprocessor;
3343
- field.editorLabel = field.editorLabel || withTypeManager.options.relationshipEditorLabel;
3344
- field.editorIcon = field.editorIcon || withTypeManager.options.relationshipEditorIcon;
3345
- &nbsp;
3346
- if (!field.schema &amp;&amp; !Array.isArray(field.withType)) {
3347
- const fieldsOption = withTypeManager.options.relationshipFields;
3348
- const fields = fieldsOption &amp;&amp; fieldsOption.add;
3349
- field.fields = fields &amp;&amp; klona(fields);
3350
- field.schema = self.fieldsToArray(`Relationship field ${field.name}`, field.fields);
3351
- }
3352
- }
3353
- <span class="missing-if-branch" title="else path not taken" >E</span>if (field.schema &amp;&amp; !field.fieldsStorage) {
3354
- field.fieldsStorage = field.name.replace(/^_/, '') + 'Fields';
3355
- }
3356
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.schema &amp;&amp; !Array.isArray(field.schema)) {
3357
- <span class="cstat-no" title="statement not covered" > fail('schema property should be an array if present at this stage');</span>
3358
- }
3359
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.filters) {
3360
- <span class="cstat-no" title="statement not covered" > fail('"filters" property should be changed to "builders" for 3.x');</span>
3361
- }
3362
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.builders &amp;&amp; field.builders.projection) {
3363
- <span class="cstat-no" title="statement not covered" > fail('"projection" sub-property should be changed to "project" for 3.x');</span>
3364
- }
3365
- function lintType(type) {
3366
- type = self.apos.doc.normalizeType(type);
3367
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!_.find(self.apos.doc.managers, { name: type })) {
3368
- <span class="cstat-no" title="statement not covered" > fail('withType property, ' + type + ', does not match the name of any piece or page type module.');</span>
3369
- }
3370
- }
3371
- },
3372
- isEqual(req, field, one, two) {
3373
- const ids1 = one[field.idsStorage] || [];
3374
- const ids2 = two[field.idsStorage] || [];
3375
- if (!_.isEqual(ids1, ids2)) {
3376
- return false;
3377
- }
3378
- <span class="missing-if-branch" title="else path not taken" >E</span>if (field.fieldsStorage) {
3379
- const fields1 = one[field.fieldsStorage] || {};
3380
- const fields2 = two[field.fieldsStorage] || {};
3381
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!_.isEqual(fields1, fields2)) {
3382
- <span class="cstat-no" title="statement not covered" > return false;</span>
3383
- }
3384
- }
3385
- return true;
3386
- }
3387
- });
3388
- &nbsp;
3389
- self.addFieldType({
3390
- name: 'relationshipReverse',
3391
- vueComponent: false,
3392
- relate: async function (req, field, objects, options) {
3393
- return self.relationshipDriver(req, joinr.byArrayReverse, true, objects, field.idsStorage, field.fieldsStorage, field.name, options);
3394
- },
3395
- validate: function (field, options, warn, fail) {
3396
- let forwardRelationship;
3397
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.name.match(/^_/)) {
3398
- <span class="cstat-no" title="statement not covered" > warn('Name of relationship field does not start with _. This is permitted for bc but it will fill your database with duplicate outdated data. Please fix it.');</span>
3399
- }
3400
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.withType) {
3401
- // Try to supply reasonable value based on relationship name
3402
- const withType = <span class="cstat-no" title="statement not covered" >field.name.replace(/^_/, '').replace(/s$/, '');</span>
3403
- <span class="cstat-no" title="statement not covered" > if (!_.find(self.apos.doc.managers, { name: withType })) {</span>
3404
- <span class="cstat-no" title="statement not covered" > fail('withType property is missing. Hint: it must match the name of a piece or page type module. Or omit it and give your relationship the same name as the other type, with a leading _ and optional trailing s.');</span>
3405
- }
3406
- <span class="cstat-no" title="statement not covered" > field.withType = withType;</span>
3407
- }
3408
- const otherModule = _.find(self.apos.doc.managers, { name: self.apos.doc.normalizeType(field.withType) });
3409
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!otherModule) {
3410
- <span class="cstat-no" title="statement not covered" > fail('withType property, ' + field.withType + ', does not match the name of a piece or page type module.');</span>
3411
- }
3412
- if (!(field.reverseOf || field.idsStorage)) {
3413
- self.validate(otherModule.schema, {
3414
- type: 'doc type',
3415
- subtype: otherModule.name
3416
- });
3417
- // Look for a relationship with our type in the other type
3418
- forwardRelationship = _.find(otherModule.schema, { withType: options.subtype });
3419
- <span class="missing-if-branch" title="else path not taken" >E</span>if (forwardRelationship) {
3420
- field.reverseOf = forwardRelationship.name;
3421
- }
3422
- }
3423
- <span class="missing-if-branch" title="else path not taken" >E</span>if (field.reverseOf) {
3424
- forwardRelationship = _.find(otherModule.schema, {
3425
- type: 'relationship',
3426
- name: field.reverseOf
3427
- });
3428
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!forwardRelationship) {
3429
- <span class="cstat-no" title="statement not covered" > fail('reverseOf property does not match the name property of any relationship in the schema for ' + field.withType + '. Hint: you are taking advantage of a relationship already being edited in the schema for that type, "reverse" must match "name".');</span>
3430
- }
3431
- // Make sure the other relationship has any missing fields auto-supplied before
3432
- // trying to access them
3433
- self.validate([ forwardRelationship ], {
3434
- type: 'doc type',
3435
- subtype: otherModule.name
3436
- });
3437
- field.idsStorage = forwardRelationship.idsStorage;
3438
- field.fieldsStorage = forwardRelationship.fieldsStorage;
3439
- }
3440
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.idsStorage) {
3441
- <span class="cstat-no" title="statement not covered" > field.idsStorage = field.name.replace(/^_/, '') + 'Ids';</span>
3442
- }
3443
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!forwardRelationship) {
3444
- <span class="cstat-no" title="statement not covered" > forwardRelationship = _.find(otherModule.schema, {</span>
3445
- type: 'relationship',
3446
- idsStorage: field.idsStorage
3447
- });
3448
- <span class="cstat-no" title="statement not covered" > if (!forwardRelationship) {</span>
3449
- <span class="cstat-no" title="statement not covered" > fail('idsStorage property does not match the idsStorage property of any relationship in the schema for ' + field.withType + '. Hint: you are taking advantage of a relationship already being edited in the schema for that type, your idsStorage must be the same to find the data there.');</span>
3450
- }
3451
- <span class="cstat-no" title="statement not covered" > if (forwardRelationship.fieldsStorage) {</span>
3452
- <span class="cstat-no" title="statement not covered" > field.fieldsStorage = forwardRelationship.fieldsStorage;</span>
3453
- }
3454
- }
3455
- }
3456
- });
3457
- &nbsp;
3458
- function checkStringLength (string, min, max) {
3459
- if (string &amp;&amp; min &amp;&amp; string.length &lt; min) {
3460
- // Would be unpleasant, but shouldn't happen since the browser
3461
- // also implements this. We're just checking for naughty scripts
3462
- throw self.apos.error('min');
3463
- }
3464
- // If max is longer than allowed, trim the value down to the max length
3465
- if (string &amp;&amp; max &amp;&amp; string.length &gt; max) {
3466
- return string.substr(0, max);
3467
- }
3468
- &nbsp;
3469
- return string;
3470
- }
3471
- &nbsp;
3472
- function <span class="fstat-no" title="function not covered" >relationshipQueryBuilderLaunder(</span>v) {
3473
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(v)) {</span>
3474
- <span class="cstat-no" title="statement not covered" > return self.apos.launder.ids(v);</span>
3475
- } else <span class="cstat-no" title="statement not covered" >if (typeof v === 'string' &amp;&amp; v.length) {</span>
3476
- <span class="cstat-no" title="statement not covered" > return [ self.apos.launder.id(v) ];</span>
3477
- } else <span class="cstat-no" title="statement not covered" >if (v === 'none') {</span>
3478
- <span class="cstat-no" title="statement not covered" > return 'none';</span>
3479
- }
3480
- <span class="cstat-no" title="statement not covered" > return undefined;</span>
3481
- }
3482
- };
3483
- &nbsp;</pre></td></tr></table></pre>
3484
-
3485
- <div class='push'></div><!-- for sticky footer -->
3486
- </div><!-- /wrapper -->
3487
- <div class='footer quiet pad2 space-top1 center small'>
3488
- Code coverage generated by
3489
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3490
- at Wed Jun 08 2022 11:06:49 GMT+0200 (Central European Summer Time)
3491
- </div>
3492
- <script src="../../../../../prettify.js"></script>
3493
- <script>
3494
- window.onload = function () {
3495
- prettyPrint();
3496
- };
3497
- </script>
3498
- <script src="../../../../../sorter.js"></script>
3499
- <script src="../../../../../block-navigation.js"></script>
3500
- </body>
3501
- </html>
3502
-