@c15t/backend 0.0.1-rc.24 → 1.0.5

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 (168) hide show
  1. package/.turbo/turbo-build.log +10 -10
  2. package/.turbo/turbo-fmt.log +3 -3
  3. package/README.md +19 -7
  4. package/dist/core.d.ts +0 -2
  5. package/dist/core.d.ts.map +1 -1
  6. package/dist/index.cjs +2 -7
  7. package/dist/index.js +2 -7
  8. package/dist/init.d.ts +0 -1
  9. package/dist/init.d.ts.map +1 -1
  10. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts +0 -3
  11. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -1
  12. package/dist/pkgs/db-adapters/adapters/kysely-adapter/dialect.d.ts +0 -2
  13. package/dist/pkgs/db-adapters/adapters/kysely-adapter/dialect.d.ts.map +1 -1
  14. package/dist/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.d.ts +0 -1
  15. package/dist/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -1
  16. package/dist/pkgs/db-adapters/adapters/kysely-adapter/types.d.ts +0 -2
  17. package/dist/pkgs/db-adapters/adapters/kysely-adapter/types.d.ts.map +1 -1
  18. package/dist/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.d.ts +0 -1
  19. package/dist/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.d.ts.map +1 -1
  20. package/dist/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.d.ts +0 -1
  21. package/dist/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -1
  22. package/dist/pkgs/logger/types.d.ts +1 -1
  23. package/dist/pkgs/logger/types.d.ts.map +1 -1
  24. package/dist/pkgs/types/context.d.ts +0 -4
  25. package/dist/pkgs/types/context.d.ts.map +1 -1
  26. package/dist/pkgs/types/options.d.ts +0 -1
  27. package/dist/pkgs/types/options.d.ts.map +1 -1
  28. package/dist/types/options.d.ts +0 -1
  29. package/dist/types/options.d.ts.map +1 -1
  30. package/package.json +3 -4
  31. package/src/core.ts +0 -2
  32. package/src/init.test.ts +0 -17
  33. package/src/init.ts +1 -22
  34. package/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts +0 -3
  35. package/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts +0 -2
  36. package/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts +0 -1
  37. package/src/pkgs/db-adapters/adapters/kysely-adapter/types.ts +0 -2
  38. package/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts +0 -1
  39. package/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts +0 -1
  40. package/src/pkgs/logger/types.ts +1 -5
  41. package/src/pkgs/types/context.ts +0 -5
  42. package/src/pkgs/types/options.ts +0 -1
  43. package/src/types/options.ts +0 -1
  44. package/.turbo/turbo-test.log +0 -551
  45. package/coverage/coverage-final.json +0 -83
  46. package/coverage/coverage-summary.json +0 -84
  47. package/coverage/html/backend/index.html +0 -116
  48. package/coverage/html/backend/rslib.config.ts.html +0 -424
  49. package/coverage/html/backend/src/core.ts.html +0 -796
  50. package/coverage/html/backend/src/index.html +0 -131
  51. package/coverage/html/backend/src/init.ts.html +0 -1072
  52. package/coverage/html/backend/src/integrations/cloudflare.ts.html +0 -889
  53. package/coverage/html/backend/src/integrations/index.html +0 -146
  54. package/coverage/html/backend/src/integrations/next.ts.html +0 -691
  55. package/coverage/html/backend/src/integrations/node.ts.html +0 -505
  56. package/coverage/html/backend/src/pkgs/api-router/hooks/index.html +0 -116
  57. package/coverage/html/backend/src/pkgs/api-router/hooks/processor.ts.html +0 -538
  58. package/coverage/html/backend/src/pkgs/api-router/index.html +0 -131
  59. package/coverage/html/backend/src/pkgs/api-router/index.ts.html +0 -529
  60. package/coverage/html/backend/src/pkgs/api-router/telemetry.ts.html +0 -334
  61. package/coverage/html/backend/src/pkgs/api-router/utils/cors.ts.html +0 -304
  62. package/coverage/html/backend/src/pkgs/api-router/utils/define-route.ts.html +0 -1315
  63. package/coverage/html/backend/src/pkgs/api-router/utils/index.html +0 -146
  64. package/coverage/html/backend/src/pkgs/api-router/utils/ip.ts.html +0 -361
  65. package/coverage/html/backend/src/pkgs/data-model/fields/field-factory.ts.html +0 -709
  66. package/coverage/html/backend/src/pkgs/data-model/fields/id-generator.ts.html +0 -256
  67. package/coverage/html/backend/src/pkgs/data-model/fields/index.html +0 -161
  68. package/coverage/html/backend/src/pkgs/data-model/fields/superjson-utils.ts.html +0 -136
  69. package/coverage/html/backend/src/pkgs/data-model/fields/zod-fields.ts.html +0 -496
  70. package/coverage/html/backend/src/pkgs/data-model/hooks/create-hooks.ts.html +0 -349
  71. package/coverage/html/backend/src/pkgs/data-model/hooks/index.html +0 -176
  72. package/coverage/html/backend/src/pkgs/data-model/hooks/update-hooks.ts.html +0 -358
  73. package/coverage/html/backend/src/pkgs/data-model/hooks/update-many-hooks.ts.html +0 -613
  74. package/coverage/html/backend/src/pkgs/data-model/hooks/utils.ts.html +0 -538
  75. package/coverage/html/backend/src/pkgs/data-model/hooks/with-hooks-factory.ts.html +0 -289
  76. package/coverage/html/backend/src/pkgs/db-adapters/adapter-factory.ts.html +0 -277
  77. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts.html +0 -2212
  78. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/index.html +0 -116
  79. package/coverage/html/backend/src/pkgs/db-adapters/adapters/index.html +0 -116
  80. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts.html +0 -676
  81. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/index.html +0 -131
  82. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts.html +0 -3637
  83. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/index.html +0 -116
  84. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts.html +0 -1417
  85. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/index.html +0 -116
  86. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts.html +0 -2074
  87. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/index.html +0 -116
  88. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts.html +0 -1837
  89. package/coverage/html/backend/src/pkgs/db-adapters/adapters/test.ts.html +0 -316
  90. package/coverage/html/backend/src/pkgs/db-adapters/index.html +0 -131
  91. package/coverage/html/backend/src/pkgs/db-adapters/utils.ts.html +0 -238
  92. package/coverage/html/backend/src/pkgs/logger/console-formatter.ts.html +0 -310
  93. package/coverage/html/backend/src/pkgs/logger/index.html +0 -176
  94. package/coverage/html/backend/src/pkgs/logger/log-levels.ts.html +0 -223
  95. package/coverage/html/backend/src/pkgs/logger/logger-factory.ts.html +0 -448
  96. package/coverage/html/backend/src/pkgs/logger/result-logging.ts.html +0 -487
  97. package/coverage/html/backend/src/pkgs/logger/telemetry.ts.html +0 -373
  98. package/coverage/html/backend/src/pkgs/migrations/get-migration.ts.html +0 -343
  99. package/coverage/html/backend/src/pkgs/migrations/get-schema/get-schema.ts.html +0 -217
  100. package/coverage/html/backend/src/pkgs/migrations/get-schema/index.html +0 -146
  101. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-fields.ts.html +0 -280
  102. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-tables.ts.html +0 -289
  103. package/coverage/html/backend/src/pkgs/migrations/index.html +0 -176
  104. package/coverage/html/backend/src/pkgs/migrations/migration-builders.ts.html +0 -595
  105. package/coverage/html/backend/src/pkgs/migrations/migration-execution.ts.html +0 -301
  106. package/coverage/html/backend/src/pkgs/migrations/schema-comparison.ts.html +0 -691
  107. package/coverage/html/backend/src/pkgs/migrations/type-mapping.ts.html +0 -817
  108. package/coverage/html/backend/src/pkgs/results/core/error-class.ts.html +0 -1012
  109. package/coverage/html/backend/src/pkgs/results/core/error-codes.ts.html +0 -703
  110. package/coverage/html/backend/src/pkgs/results/core/index.html +0 -146
  111. package/coverage/html/backend/src/pkgs/results/core/tracing.ts.html +0 -280
  112. package/coverage/html/backend/src/pkgs/results/create-telemetry-options.ts.html +0 -271
  113. package/coverage/html/backend/src/pkgs/results/h3-integration.ts.html +0 -511
  114. package/coverage/html/backend/src/pkgs/results/index.html +0 -131
  115. package/coverage/html/backend/src/pkgs/results/pipeline/index.html +0 -131
  116. package/coverage/html/backend/src/pkgs/results/pipeline/retrieval-pipeline.ts.html +0 -649
  117. package/coverage/html/backend/src/pkgs/results/pipeline/validation-pipeline.ts.html +0 -577
  118. package/coverage/html/backend/src/pkgs/results/results/index.html +0 -131
  119. package/coverage/html/backend/src/pkgs/results/results/recovery-utils.ts.html +0 -628
  120. package/coverage/html/backend/src/pkgs/results/results/result-helpers.ts.html +0 -1234
  121. package/coverage/html/backend/src/pkgs/utils/env.ts.html +0 -337
  122. package/coverage/html/backend/src/pkgs/utils/index.html +0 -131
  123. package/coverage/html/backend/src/pkgs/utils/url.ts.html +0 -400
  124. package/coverage/html/backend/src/routes/index.html +0 -176
  125. package/coverage/html/backend/src/routes/index.ts.html +0 -121
  126. package/coverage/html/backend/src/routes/set-consent.ts.html +0 -832
  127. package/coverage/html/backend/src/routes/show-consent-banner.ts.html +0 -478
  128. package/coverage/html/backend/src/routes/status.ts.html +0 -268
  129. package/coverage/html/backend/src/routes/verify-consent.ts.html +0 -703
  130. package/coverage/html/backend/src/schema/audit-log/index.html +0 -146
  131. package/coverage/html/backend/src/schema/audit-log/registry.ts.html +0 -436
  132. package/coverage/html/backend/src/schema/audit-log/schema.ts.html +0 -223
  133. package/coverage/html/backend/src/schema/audit-log/table.ts.html +0 -640
  134. package/coverage/html/backend/src/schema/consent/index.html +0 -146
  135. package/coverage/html/backend/src/schema/consent/registry.ts.html +0 -616
  136. package/coverage/html/backend/src/schema/consent/schema.ts.html +0 -238
  137. package/coverage/html/backend/src/schema/consent/table.ts.html +0 -748
  138. package/coverage/html/backend/src/schema/consent-policy/index.html +0 -146
  139. package/coverage/html/backend/src/schema/consent-policy/registry.ts.html +0 -1063
  140. package/coverage/html/backend/src/schema/consent-policy/schema.ts.html +0 -265
  141. package/coverage/html/backend/src/schema/consent-policy/table.ts.html +0 -535
  142. package/coverage/html/backend/src/schema/consent-purpose/index.html +0 -146
  143. package/coverage/html/backend/src/schema/consent-purpose/registry.ts.html +0 -589
  144. package/coverage/html/backend/src/schema/consent-purpose/schema.ts.html +0 -259
  145. package/coverage/html/backend/src/schema/consent-purpose/table.ts.html +0 -547
  146. package/coverage/html/backend/src/schema/consent-record/index.html +0 -131
  147. package/coverage/html/backend/src/schema/consent-record/schema.ts.html +0 -211
  148. package/coverage/html/backend/src/schema/consent-record/table.ts.html +0 -457
  149. package/coverage/html/backend/src/schema/create-registry.ts.html +0 -148
  150. package/coverage/html/backend/src/schema/definition.ts.html +0 -685
  151. package/coverage/html/backend/src/schema/domain/index.html +0 -146
  152. package/coverage/html/backend/src/schema/domain/registry.ts.html +0 -973
  153. package/coverage/html/backend/src/schema/domain/schema.ts.html +0 -214
  154. package/coverage/html/backend/src/schema/domain/table.ts.html +0 -496
  155. package/coverage/html/backend/src/schema/index.html +0 -146
  156. package/coverage/html/backend/src/schema/schemas.ts.html +0 -166
  157. package/coverage/html/backend/src/schema/subject/index.html +0 -146
  158. package/coverage/html/backend/src/schema/subject/registry.ts.html +0 -973
  159. package/coverage/html/backend/src/schema/subject/schema.ts.html +0 -208
  160. package/coverage/html/backend/src/schema/subject/table.ts.html +0 -499
  161. package/coverage/html/base.css +0 -224
  162. package/coverage/html/block-navigation.js +0 -87
  163. package/coverage/html/favicon.png +0 -0
  164. package/coverage/html/index.html +0 -581
  165. package/coverage/html/prettify.css +0 -1
  166. package/coverage/html/prettify.js +0 -2
  167. package/coverage/html/sort-arrow-sprite.png +0 -0
  168. package/coverage/html/sorter.js +0 -196
@@ -1,2212 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for backend/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../../../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../../../../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../../../../../index.html">All files</a> / <a href="index.html">backend/src/pkgs/db-adapters/adapters/drizzle-adapter</a> drizzle-adapter.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">1.19% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>2/167</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>0/111</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>0/26</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">1.22% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>2/163</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a>
758
- <a name='L693'></a><a href='#L693'>693</a>
759
- <a name='L694'></a><a href='#L694'>694</a>
760
- <a name='L695'></a><a href='#L695'>695</a>
761
- <a name='L696'></a><a href='#L696'>696</a>
762
- <a name='L697'></a><a href='#L697'>697</a>
763
- <a name='L698'></a><a href='#L698'>698</a>
764
- <a name='L699'></a><a href='#L699'>699</a>
765
- <a name='L700'></a><a href='#L700'>700</a>
766
- <a name='L701'></a><a href='#L701'>701</a>
767
- <a name='L702'></a><a href='#L702'>702</a>
768
- <a name='L703'></a><a href='#L703'>703</a>
769
- <a name='L704'></a><a href='#L704'>704</a>
770
- <a name='L705'></a><a href='#L705'>705</a>
771
- <a name='L706'></a><a href='#L706'>706</a>
772
- <a name='L707'></a><a href='#L707'>707</a>
773
- <a name='L708'></a><a href='#L708'>708</a>
774
- <a name='L709'></a><a href='#L709'>709</a>
775
- <a name='L710'></a><a href='#L710'>710</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-neutral">&nbsp;</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-yes">3x</span>
822
- <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-neutral">&nbsp;</span>
824
- <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-no">&nbsp;</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-neutral">&nbsp;</span>
831
- <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-neutral">&nbsp;</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-neutral">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-neutral">&nbsp;</span>
837
- <span class="cline-any cline-no">&nbsp;</span>
838
- <span class="cline-any cline-no">&nbsp;</span>
839
- <span class="cline-any cline-neutral">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-no">&nbsp;</span>
842
- <span class="cline-any cline-neutral">&nbsp;</span>
843
- <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-neutral">&nbsp;</span>
852
- <span class="cline-any cline-neutral">&nbsp;</span>
853
- <span class="cline-any cline-no">&nbsp;</span>
854
- <span class="cline-any cline-no">&nbsp;</span>
855
- <span class="cline-any cline-no">&nbsp;</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&nbsp;</span>
860
- <span class="cline-any cline-neutral">&nbsp;</span>
861
- <span class="cline-any cline-neutral">&nbsp;</span>
862
- <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-neutral">&nbsp;</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
- <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-no">&nbsp;</span>
867
- <span class="cline-any cline-no">&nbsp;</span>
868
- <span class="cline-any cline-no">&nbsp;</span>
869
- <span class="cline-any cline-no">&nbsp;</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-neutral">&nbsp;</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-neutral">&nbsp;</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-no">&nbsp;</span>
882
- <span class="cline-any cline-neutral">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-neutral">&nbsp;</span>
888
- <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-neutral">&nbsp;</span>
891
- <span class="cline-any cline-no">&nbsp;</span>
892
- <span class="cline-any cline-no">&nbsp;</span>
893
- <span class="cline-any cline-no">&nbsp;</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-neutral">&nbsp;</span>
896
- <span class="cline-any cline-no">&nbsp;</span>
897
- <span class="cline-any cline-no">&nbsp;</span>
898
- <span class="cline-any cline-neutral">&nbsp;</span>
899
- <span class="cline-any cline-neutral">&nbsp;</span>
900
- <span class="cline-any cline-no">&nbsp;</span>
901
- <span class="cline-any cline-neutral">&nbsp;</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-neutral">&nbsp;</span>
909
- <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-neutral">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
918
- <span class="cline-any cline-no">&nbsp;</span>
919
- <span class="cline-any cline-no">&nbsp;</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-no">&nbsp;</span>
922
- <span class="cline-any cline-no">&nbsp;</span>
923
- <span class="cline-any cline-no">&nbsp;</span>
924
- <span class="cline-any cline-no">&nbsp;</span>
925
- <span class="cline-any cline-neutral">&nbsp;</span>
926
- <span class="cline-any cline-no">&nbsp;</span>
927
- <span class="cline-any cline-no">&nbsp;</span>
928
- <span class="cline-any cline-no">&nbsp;</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-neutral">&nbsp;</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-neutral">&nbsp;</span>
934
- <span class="cline-any cline-neutral">&nbsp;</span>
935
- <span class="cline-any cline-neutral">&nbsp;</span>
936
- <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-neutral">&nbsp;</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-neutral">&nbsp;</span>
940
- <span class="cline-any cline-neutral">&nbsp;</span>
941
- <span class="cline-any cline-no">&nbsp;</span>
942
- <span class="cline-any cline-no">&nbsp;</span>
943
- <span class="cline-any cline-no">&nbsp;</span>
944
- <span class="cline-any cline-neutral">&nbsp;</span>
945
- <span class="cline-any cline-neutral">&nbsp;</span>
946
- <span class="cline-any cline-neutral">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-neutral">&nbsp;</span>
949
- <span class="cline-any cline-neutral">&nbsp;</span>
950
- <span class="cline-any cline-neutral">&nbsp;</span>
951
- <span class="cline-any cline-neutral">&nbsp;</span>
952
- <span class="cline-any cline-neutral">&nbsp;</span>
953
- <span class="cline-any cline-neutral">&nbsp;</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-neutral">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-no">&nbsp;</span>
958
- <span class="cline-any cline-neutral">&nbsp;</span>
959
- <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-no">&nbsp;</span>
961
- <span class="cline-any cline-no">&nbsp;</span>
962
- <span class="cline-any cline-neutral">&nbsp;</span>
963
- <span class="cline-any cline-neutral">&nbsp;</span>
964
- <span class="cline-any cline-no">&nbsp;</span>
965
- <span class="cline-any cline-no">&nbsp;</span>
966
- <span class="cline-any cline-neutral">&nbsp;</span>
967
- <span class="cline-any cline-neutral">&nbsp;</span>
968
- <span class="cline-any cline-no">&nbsp;</span>
969
- <span class="cline-any cline-no">&nbsp;</span>
970
- <span class="cline-any cline-neutral">&nbsp;</span>
971
- <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-no">&nbsp;</span>
973
- <span class="cline-any cline-neutral">&nbsp;</span>
974
- <span class="cline-any cline-no">&nbsp;</span>
975
- <span class="cline-any cline-no">&nbsp;</span>
976
- <span class="cline-any cline-neutral">&nbsp;</span>
977
- <span class="cline-any cline-no">&nbsp;</span>
978
- <span class="cline-any cline-neutral">&nbsp;</span>
979
- <span class="cline-any cline-no">&nbsp;</span>
980
- <span class="cline-any cline-no">&nbsp;</span>
981
- <span class="cline-any cline-no">&nbsp;</span>
982
- <span class="cline-any cline-no">&nbsp;</span>
983
- <span class="cline-any cline-neutral">&nbsp;</span>
984
- <span class="cline-any cline-neutral">&nbsp;</span>
985
- <span class="cline-any cline-neutral">&nbsp;</span>
986
- <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-neutral">&nbsp;</span>
988
- <span class="cline-any cline-neutral">&nbsp;</span>
989
- <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-neutral">&nbsp;</span>
991
- <span class="cline-any cline-neutral">&nbsp;</span>
992
- <span class="cline-any cline-neutral">&nbsp;</span>
993
- <span class="cline-any cline-neutral">&nbsp;</span>
994
- <span class="cline-any cline-neutral">&nbsp;</span>
995
- <span class="cline-any cline-neutral">&nbsp;</span>
996
- <span class="cline-any cline-no">&nbsp;</span>
997
- <span class="cline-any cline-neutral">&nbsp;</span>
998
- <span class="cline-any cline-no">&nbsp;</span>
999
- <span class="cline-any cline-neutral">&nbsp;</span>
1000
- <span class="cline-any cline-neutral">&nbsp;</span>
1001
- <span class="cline-any cline-no">&nbsp;</span>
1002
- <span class="cline-any cline-neutral">&nbsp;</span>
1003
- <span class="cline-any cline-no">&nbsp;</span>
1004
- <span class="cline-any cline-no">&nbsp;</span>
1005
- <span class="cline-any cline-neutral">&nbsp;</span>
1006
- <span class="cline-any cline-neutral">&nbsp;</span>
1007
- <span class="cline-any cline-neutral">&nbsp;</span>
1008
- <span class="cline-any cline-no">&nbsp;</span>
1009
- <span class="cline-any cline-no">&nbsp;</span>
1010
- <span class="cline-any cline-no">&nbsp;</span>
1011
- <span class="cline-any cline-neutral">&nbsp;</span>
1012
- <span class="cline-any cline-no">&nbsp;</span>
1013
- <span class="cline-any cline-no">&nbsp;</span>
1014
- <span class="cline-any cline-neutral">&nbsp;</span>
1015
- <span class="cline-any cline-no">&nbsp;</span>
1016
- <span class="cline-any cline-neutral">&nbsp;</span>
1017
- <span class="cline-any cline-neutral">&nbsp;</span>
1018
- <span class="cline-any cline-no">&nbsp;</span>
1019
- <span class="cline-any cline-no">&nbsp;</span>
1020
- <span class="cline-any cline-neutral">&nbsp;</span>
1021
- <span class="cline-any cline-neutral">&nbsp;</span>
1022
- <span class="cline-any cline-neutral">&nbsp;</span>
1023
- <span class="cline-any cline-neutral">&nbsp;</span>
1024
- <span class="cline-any cline-neutral">&nbsp;</span>
1025
- <span class="cline-any cline-neutral">&nbsp;</span>
1026
- <span class="cline-any cline-neutral">&nbsp;</span>
1027
- <span class="cline-any cline-neutral">&nbsp;</span>
1028
- <span class="cline-any cline-neutral">&nbsp;</span>
1029
- <span class="cline-any cline-neutral">&nbsp;</span>
1030
- <span class="cline-any cline-neutral">&nbsp;</span>
1031
- <span class="cline-any cline-neutral">&nbsp;</span>
1032
- <span class="cline-any cline-neutral">&nbsp;</span>
1033
- <span class="cline-any cline-neutral">&nbsp;</span>
1034
- <span class="cline-any cline-neutral">&nbsp;</span>
1035
- <span class="cline-any cline-neutral">&nbsp;</span>
1036
- <span class="cline-any cline-no">&nbsp;</span>
1037
- <span class="cline-any cline-neutral">&nbsp;</span>
1038
- <span class="cline-any cline-neutral">&nbsp;</span>
1039
- <span class="cline-any cline-neutral">&nbsp;</span>
1040
- <span class="cline-any cline-neutral">&nbsp;</span>
1041
- <span class="cline-any cline-neutral">&nbsp;</span>
1042
- <span class="cline-any cline-neutral">&nbsp;</span>
1043
- <span class="cline-any cline-neutral">&nbsp;</span>
1044
- <span class="cline-any cline-neutral">&nbsp;</span>
1045
- <span class="cline-any cline-no">&nbsp;</span>
1046
- <span class="cline-any cline-no">&nbsp;</span>
1047
- <span class="cline-any cline-no">&nbsp;</span>
1048
- <span class="cline-any cline-no">&nbsp;</span>
1049
- <span class="cline-any cline-no">&nbsp;</span>
1050
- <span class="cline-any cline-no">&nbsp;</span>
1051
- <span class="cline-any cline-neutral">&nbsp;</span>
1052
- <span class="cline-any cline-no">&nbsp;</span>
1053
- <span class="cline-any cline-neutral">&nbsp;</span>
1054
- <span class="cline-any cline-neutral">&nbsp;</span>
1055
- <span class="cline-any cline-neutral">&nbsp;</span>
1056
- <span class="cline-any cline-neutral">&nbsp;</span>
1057
- <span class="cline-any cline-neutral">&nbsp;</span>
1058
- <span class="cline-any cline-neutral">&nbsp;</span>
1059
- <span class="cline-any cline-no">&nbsp;</span>
1060
- <span class="cline-any cline-neutral">&nbsp;</span>
1061
- <span class="cline-any cline-neutral">&nbsp;</span>
1062
- <span class="cline-any cline-neutral">&nbsp;</span>
1063
- <span class="cline-any cline-neutral">&nbsp;</span>
1064
- <span class="cline-any cline-neutral">&nbsp;</span>
1065
- <span class="cline-any cline-neutral">&nbsp;</span>
1066
- <span class="cline-any cline-neutral">&nbsp;</span>
1067
- <span class="cline-any cline-neutral">&nbsp;</span>
1068
- <span class="cline-any cline-neutral">&nbsp;</span>
1069
- <span class="cline-any cline-neutral">&nbsp;</span>
1070
- <span class="cline-any cline-neutral">&nbsp;</span>
1071
- <span class="cline-any cline-neutral">&nbsp;</span>
1072
- <span class="cline-any cline-neutral">&nbsp;</span>
1073
- <span class="cline-any cline-neutral">&nbsp;</span>
1074
- <span class="cline-any cline-neutral">&nbsp;</span>
1075
- <span class="cline-any cline-no">&nbsp;</span>
1076
- <span class="cline-any cline-no">&nbsp;</span>
1077
- <span class="cline-any cline-neutral">&nbsp;</span>
1078
- <span class="cline-any cline-neutral">&nbsp;</span>
1079
- <span class="cline-any cline-no">&nbsp;</span>
1080
- <span class="cline-any cline-neutral">&nbsp;</span>
1081
- <span class="cline-any cline-no">&nbsp;</span>
1082
- <span class="cline-any cline-neutral">&nbsp;</span>
1083
- <span class="cline-any cline-neutral">&nbsp;</span>
1084
- <span class="cline-any cline-neutral">&nbsp;</span>
1085
- <span class="cline-any cline-no">&nbsp;</span>
1086
- <span class="cline-any cline-neutral">&nbsp;</span>
1087
- <span class="cline-any cline-neutral">&nbsp;</span>
1088
- <span class="cline-any cline-no">&nbsp;</span>
1089
- <span class="cline-any cline-no">&nbsp;</span>
1090
- <span class="cline-any cline-no">&nbsp;</span>
1091
- <span class="cline-any cline-no">&nbsp;</span>
1092
- <span class="cline-any cline-neutral">&nbsp;</span>
1093
- <span class="cline-any cline-no">&nbsp;</span>
1094
- <span class="cline-any cline-no">&nbsp;</span>
1095
- <span class="cline-any cline-no">&nbsp;</span>
1096
- <span class="cline-any cline-neutral">&nbsp;</span>
1097
- <span class="cline-any cline-neutral">&nbsp;</span>
1098
- <span class="cline-any cline-no">&nbsp;</span>
1099
- <span class="cline-any cline-neutral">&nbsp;</span>
1100
- <span class="cline-any cline-neutral">&nbsp;</span>
1101
- <span class="cline-any cline-neutral">&nbsp;</span>
1102
- <span class="cline-any cline-neutral">&nbsp;</span>
1103
- <span class="cline-any cline-neutral">&nbsp;</span>
1104
- <span class="cline-any cline-neutral">&nbsp;</span>
1105
- <span class="cline-any cline-neutral">&nbsp;</span>
1106
- <span class="cline-any cline-neutral">&nbsp;</span>
1107
- <span class="cline-any cline-neutral">&nbsp;</span>
1108
- <span class="cline-any cline-neutral">&nbsp;</span>
1109
- <span class="cline-any cline-neutral">&nbsp;</span>
1110
- <span class="cline-any cline-neutral">&nbsp;</span>
1111
- <span class="cline-any cline-neutral">&nbsp;</span>
1112
- <span class="cline-any cline-neutral">&nbsp;</span>
1113
- <span class="cline-any cline-neutral">&nbsp;</span>
1114
- <span class="cline-any cline-neutral">&nbsp;</span>
1115
- <span class="cline-any cline-neutral">&nbsp;</span>
1116
- <span class="cline-any cline-neutral">&nbsp;</span>
1117
- <span class="cline-any cline-no">&nbsp;</span>
1118
- <span class="cline-any cline-no">&nbsp;</span>
1119
- <span class="cline-any cline-no">&nbsp;</span>
1120
- <span class="cline-any cline-neutral">&nbsp;</span>
1121
- <span class="cline-any cline-neutral">&nbsp;</span>
1122
- <span class="cline-any cline-no">&nbsp;</span>
1123
- <span class="cline-any cline-no">&nbsp;</span>
1124
- <span class="cline-any cline-no">&nbsp;</span>
1125
- <span class="cline-any cline-neutral">&nbsp;</span>
1126
- <span class="cline-any cline-no">&nbsp;</span>
1127
- <span class="cline-any cline-no">&nbsp;</span>
1128
- <span class="cline-any cline-no">&nbsp;</span>
1129
- <span class="cline-any cline-neutral">&nbsp;</span>
1130
- <span class="cline-any cline-neutral">&nbsp;</span>
1131
- <span class="cline-any cline-neutral">&nbsp;</span>
1132
- <span class="cline-any cline-no">&nbsp;</span>
1133
- <span class="cline-any cline-neutral">&nbsp;</span>
1134
- <span class="cline-any cline-neutral">&nbsp;</span>
1135
- <span class="cline-any cline-no">&nbsp;</span>
1136
- <span class="cline-any cline-no">&nbsp;</span>
1137
- <span class="cline-any cline-no">&nbsp;</span>
1138
- <span class="cline-any cline-neutral">&nbsp;</span>
1139
- <span class="cline-any cline-neutral">&nbsp;</span>
1140
- <span class="cline-any cline-neutral">&nbsp;</span>
1141
- <span class="cline-any cline-no">&nbsp;</span>
1142
- <span class="cline-any cline-neutral">&nbsp;</span>
1143
- <span class="cline-any cline-neutral">&nbsp;</span>
1144
- <span class="cline-any cline-no">&nbsp;</span>
1145
- <span class="cline-any cline-no">&nbsp;</span>
1146
- <span class="cline-any cline-neutral">&nbsp;</span>
1147
- <span class="cline-any cline-neutral">&nbsp;</span>
1148
- <span class="cline-any cline-neutral">&nbsp;</span>
1149
- <span class="cline-any cline-no">&nbsp;</span>
1150
- <span class="cline-any cline-neutral">&nbsp;</span>
1151
- <span class="cline-any cline-neutral">&nbsp;</span>
1152
- <span class="cline-any cline-neutral">&nbsp;</span>
1153
- <span class="cline-any cline-neutral">&nbsp;</span>
1154
- <span class="cline-any cline-neutral">&nbsp;</span>
1155
- <span class="cline-any cline-neutral">&nbsp;</span>
1156
- <span class="cline-any cline-neutral">&nbsp;</span>
1157
- <span class="cline-any cline-neutral">&nbsp;</span>
1158
- <span class="cline-any cline-neutral">&nbsp;</span>
1159
- <span class="cline-any cline-neutral">&nbsp;</span>
1160
- <span class="cline-any cline-neutral">&nbsp;</span>
1161
- <span class="cline-any cline-neutral">&nbsp;</span>
1162
- <span class="cline-any cline-neutral">&nbsp;</span>
1163
- <span class="cline-any cline-neutral">&nbsp;</span>
1164
- <span class="cline-any cline-neutral">&nbsp;</span>
1165
- <span class="cline-any cline-neutral">&nbsp;</span>
1166
- <span class="cline-any cline-neutral">&nbsp;</span>
1167
- <span class="cline-any cline-neutral">&nbsp;</span>
1168
- <span class="cline-any cline-neutral">&nbsp;</span>
1169
- <span class="cline-any cline-neutral">&nbsp;</span>
1170
- <span class="cline-any cline-neutral">&nbsp;</span>
1171
- <span class="cline-any cline-neutral">&nbsp;</span>
1172
- <span class="cline-any cline-neutral">&nbsp;</span>
1173
- <span class="cline-any cline-neutral">&nbsp;</span>
1174
- <span class="cline-any cline-neutral">&nbsp;</span>
1175
- <span class="cline-any cline-neutral">&nbsp;</span>
1176
- <span class="cline-any cline-neutral">&nbsp;</span>
1177
- <span class="cline-any cline-neutral">&nbsp;</span>
1178
- <span class="cline-any cline-neutral">&nbsp;</span>
1179
- <span class="cline-any cline-neutral">&nbsp;</span>
1180
- <span class="cline-any cline-neutral">&nbsp;</span>
1181
- <span class="cline-any cline-neutral">&nbsp;</span>
1182
- <span class="cline-any cline-neutral">&nbsp;</span>
1183
- <span class="cline-any cline-neutral">&nbsp;</span>
1184
- <span class="cline-any cline-neutral">&nbsp;</span>
1185
- <span class="cline-any cline-neutral">&nbsp;</span>
1186
- <span class="cline-any cline-neutral">&nbsp;</span>
1187
- <span class="cline-any cline-neutral">&nbsp;</span>
1188
- <span class="cline-any cline-neutral">&nbsp;</span>
1189
- <span class="cline-any cline-neutral">&nbsp;</span>
1190
- <span class="cline-any cline-neutral">&nbsp;</span>
1191
- <span class="cline-any cline-neutral">&nbsp;</span>
1192
- <span class="cline-any cline-neutral">&nbsp;</span>
1193
- <span class="cline-any cline-neutral">&nbsp;</span>
1194
- <span class="cline-any cline-neutral">&nbsp;</span>
1195
- <span class="cline-any cline-neutral">&nbsp;</span>
1196
- <span class="cline-any cline-neutral">&nbsp;</span>
1197
- <span class="cline-any cline-neutral">&nbsp;</span>
1198
- <span class="cline-any cline-neutral">&nbsp;</span>
1199
- <span class="cline-any cline-neutral">&nbsp;</span>
1200
- <span class="cline-any cline-neutral">&nbsp;</span>
1201
- <span class="cline-any cline-neutral">&nbsp;</span>
1202
- <span class="cline-any cline-neutral">&nbsp;</span>
1203
- <span class="cline-any cline-neutral">&nbsp;</span>
1204
- <span class="cline-any cline-neutral">&nbsp;</span>
1205
- <span class="cline-any cline-neutral">&nbsp;</span>
1206
- <span class="cline-any cline-neutral">&nbsp;</span>
1207
- <span class="cline-any cline-neutral">&nbsp;</span>
1208
- <span class="cline-any cline-neutral">&nbsp;</span>
1209
- <span class="cline-any cline-neutral">&nbsp;</span>
1210
- <span class="cline-any cline-neutral">&nbsp;</span>
1211
- <span class="cline-any cline-neutral">&nbsp;</span>
1212
- <span class="cline-any cline-neutral">&nbsp;</span>
1213
- <span class="cline-any cline-neutral">&nbsp;</span>
1214
- <span class="cline-any cline-neutral">&nbsp;</span>
1215
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1219
- <span class="cline-any cline-neutral">&nbsp;</span>
1220
- <span class="cline-any cline-no">&nbsp;</span>
1221
- <span class="cline-any cline-no">&nbsp;</span>
1222
- <span class="cline-any cline-neutral">&nbsp;</span>
1223
- <span class="cline-any cline-neutral">&nbsp;</span>
1224
- <span class="cline-any cline-neutral">&nbsp;</span>
1225
- <span class="cline-any cline-neutral">&nbsp;</span>
1226
- <span class="cline-any cline-neutral">&nbsp;</span>
1227
- <span class="cline-any cline-neutral">&nbsp;</span>
1228
- <span class="cline-any cline-neutral">&nbsp;</span>
1229
- <span class="cline-any cline-no">&nbsp;</span>
1230
- <span class="cline-any cline-no">&nbsp;</span>
1231
- <span class="cline-any cline-no">&nbsp;</span>
1232
- <span class="cline-any cline-neutral">&nbsp;</span>
1233
- <span class="cline-any cline-neutral">&nbsp;</span>
1234
- <span class="cline-any cline-neutral">&nbsp;</span>
1235
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1240
- <span class="cline-any cline-neutral">&nbsp;</span>
1241
- <span class="cline-any cline-neutral">&nbsp;</span>
1242
- <span class="cline-any cline-neutral">&nbsp;</span>
1243
- <span class="cline-any cline-neutral">&nbsp;</span>
1244
- <span class="cline-any cline-neutral">&nbsp;</span>
1245
- <span class="cline-any cline-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-neutral">&nbsp;</span>
1250
- <span class="cline-any cline-neutral">&nbsp;</span>
1251
- <span class="cline-any cline-neutral">&nbsp;</span>
1252
- <span class="cline-any cline-neutral">&nbsp;</span>
1253
- <span class="cline-any cline-neutral">&nbsp;</span>
1254
- <span class="cline-any cline-neutral">&nbsp;</span>
1255
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1259
- <span class="cline-any cline-neutral">&nbsp;</span>
1260
- <span class="cline-any cline-neutral">&nbsp;</span>
1261
- <span class="cline-any cline-neutral">&nbsp;</span>
1262
- <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</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-neutral">&nbsp;</span>
1279
- <span class="cline-any cline-neutral">&nbsp;</span>
1280
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1285
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1290
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1298
- <span class="cline-any cline-neutral">&nbsp;</span>
1299
- <span class="cline-any cline-yes">3x</span>
1300
- <span class="cline-any cline-neutral">&nbsp;</span>
1301
- <span class="cline-any cline-neutral">&nbsp;</span>
1302
- <span class="cline-any cline-neutral">&nbsp;</span>
1303
- <span class="cline-any cline-neutral">&nbsp;</span>
1304
- <span class="cline-any cline-neutral">&nbsp;</span>
1305
- <span class="cline-any cline-neutral">&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-no">&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-neutral">&nbsp;</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-no">&nbsp;</span>
1320
- <span class="cline-any cline-no">&nbsp;</span>
1321
- <span class="cline-any cline-no">&nbsp;</span>
1322
- <span class="cline-any cline-no">&nbsp;</span>
1323
- <span class="cline-any cline-no">&nbsp;</span>
1324
- <span class="cline-any cline-no">&nbsp;</span>
1325
- <span class="cline-any cline-no">&nbsp;</span>
1326
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1330
- <span class="cline-any cline-neutral">&nbsp;</span>
1331
- <span class="cline-any cline-neutral">&nbsp;</span>
1332
- <span class="cline-any cline-neutral">&nbsp;</span>
1333
- <span class="cline-any cline-neutral">&nbsp;</span>
1334
- <span class="cline-any cline-neutral">&nbsp;</span>
1335
- <span class="cline-any cline-no">&nbsp;</span>
1336
- <span class="cline-any cline-no">&nbsp;</span>
1337
- <span class="cline-any cline-no">&nbsp;</span>
1338
- <span class="cline-any cline-no">&nbsp;</span>
1339
- <span class="cline-any cline-neutral">&nbsp;</span>
1340
- <span class="cline-any cline-neutral">&nbsp;</span>
1341
- <span class="cline-any cline-neutral">&nbsp;</span>
1342
- <span class="cline-any cline-neutral">&nbsp;</span>
1343
- <span class="cline-any cline-no">&nbsp;</span>
1344
- <span class="cline-any cline-no">&nbsp;</span>
1345
- <span class="cline-any cline-neutral">&nbsp;</span>
1346
- <span class="cline-any cline-no">&nbsp;</span>
1347
- <span class="cline-any cline-neutral">&nbsp;</span>
1348
- <span class="cline-any cline-neutral">&nbsp;</span>
1349
- <span class="cline-any cline-neutral">&nbsp;</span>
1350
- <span class="cline-any cline-neutral">&nbsp;</span>
1351
- <span class="cline-any cline-neutral">&nbsp;</span>
1352
- <span class="cline-any cline-neutral">&nbsp;</span>
1353
- <span class="cline-any cline-neutral">&nbsp;</span>
1354
- <span class="cline-any cline-neutral">&nbsp;</span>
1355
- <span class="cline-any cline-neutral">&nbsp;</span>
1356
- <span class="cline-any cline-no">&nbsp;</span>
1357
- <span class="cline-any cline-no">&nbsp;</span>
1358
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-neutral">&nbsp;</span>
1364
- <span class="cline-any cline-neutral">&nbsp;</span>
1365
- <span class="cline-any cline-neutral">&nbsp;</span>
1366
- <span class="cline-any cline-no">&nbsp;</span>
1367
- <span class="cline-any cline-no">&nbsp;</span>
1368
- <span class="cline-any cline-neutral">&nbsp;</span>
1369
- <span class="cline-any cline-no">&nbsp;</span>
1370
- <span class="cline-any cline-no">&nbsp;</span>
1371
- <span class="cline-any cline-neutral">&nbsp;</span>
1372
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
- <span class="cline-any cline-neutral">&nbsp;</span>
1379
- <span class="cline-any cline-neutral">&nbsp;</span>
1380
- <span class="cline-any cline-no">&nbsp;</span>
1381
- <span class="cline-any cline-no">&nbsp;</span>
1382
- <span class="cline-any cline-no">&nbsp;</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-neutral">&nbsp;</span>
1385
- <span class="cline-any cline-neutral">&nbsp;</span>
1386
- <span class="cline-any cline-neutral">&nbsp;</span>
1387
- <span class="cline-any cline-no">&nbsp;</span>
1388
- <span class="cline-any cline-neutral">&nbsp;</span>
1389
- <span class="cline-any cline-neutral">&nbsp;</span>
1390
- <span class="cline-any cline-neutral">&nbsp;</span>
1391
- <span class="cline-any cline-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-neutral">&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-no">&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-neutral">&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-neutral">&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-no">&nbsp;</span>
1417
- <span class="cline-any cline-no">&nbsp;</span>
1418
- <span class="cline-any cline-no">&nbsp;</span>
1419
- <span class="cline-any cline-no">&nbsp;</span>
1420
- <span class="cline-any cline-no">&nbsp;</span>
1421
- <span class="cline-any cline-neutral">&nbsp;</span>
1422
- <span class="cline-any cline-neutral">&nbsp;</span>
1423
- <span class="cline-any cline-neutral">&nbsp;</span>
1424
- <span class="cline-any cline-no">&nbsp;</span>
1425
- <span class="cline-any cline-no">&nbsp;</span>
1426
- <span class="cline-any cline-neutral">&nbsp;</span>
1427
- <span class="cline-any cline-neutral">&nbsp;</span>
1428
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1433
- <span class="cline-any cline-neutral">&nbsp;</span>
1434
- <span class="cline-any cline-no">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-no">&nbsp;</span>
1437
- <span class="cline-any cline-no">&nbsp;</span>
1438
- <span class="cline-any cline-no">&nbsp;</span>
1439
- <span class="cline-any cline-neutral">&nbsp;</span>
1440
- <span class="cline-any cline-neutral">&nbsp;</span>
1441
- <span class="cline-any cline-neutral">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1448
- <span class="cline-any cline-no">&nbsp;</span>
1449
- <span class="cline-any cline-no">&nbsp;</span>
1450
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1455
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1462
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1469
- <span class="cline-any cline-neutral">&nbsp;</span>
1470
- <span class="cline-any cline-no">&nbsp;</span>
1471
- <span class="cline-any cline-neutral">&nbsp;</span>
1472
- <span class="cline-any cline-no">&nbsp;</span>
1473
- <span class="cline-any cline-neutral">&nbsp;</span>
1474
- <span class="cline-any cline-neutral">&nbsp;</span>
1475
- <span class="cline-any cline-neutral">&nbsp;</span>
1476
- <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">//@ts-nocheck
1485
- &nbsp;
1486
- import {
1487
- type SQL,
1488
- and,
1489
- asc,
1490
- count,
1491
- desc,
1492
- eq,
1493
- inArray,
1494
- like,
1495
- or,
1496
- } from 'drizzle-orm';
1497
- import { type EntityName, generateId } from '~/pkgs/data-model';
1498
- import { DoubleTieError, ERROR_CODES } from '~/pkgs/results';
1499
- import type { Adapter, C15TOptions, Where } from '~/pkgs/types';
1500
- import { getConsentTables } from '~/schema/definition';
1501
- import { applyDefaultValue } from '../../utils';
1502
- &nbsp;
1503
- /**
1504
- * Database interface for Drizzle ORM integration
1505
- *
1506
- * This generic interface represents a Drizzle ORM database connection.
1507
- * It allows the adapter to work with different Drizzle providers.
1508
- *
1509
- * @remarks
1510
- * The interface uses an index signature to allow for dynamic access to
1511
- * the database's properties and methods.
1512
- */
1513
- export interface DB {
1514
- [key: string]: unknown;
1515
- }
1516
- &nbsp;
1517
- /**
1518
- * Creates a transformer for converting between C15T data models and Drizzle schema
1519
- *
1520
- * This function creates an object with utility methods for converting data between
1521
- * the C15T internal representation and the Drizzle ORM schema representation.
1522
- *
1523
- * @internal This function is primarily used internally by the drizzleAdapter
1524
- * @param db - The Drizzle database instance
1525
- * @param config - Configuration options for the Drizzle adapter
1526
- * @param options - C15T options
1527
- * @returns An object containing entity transformation utilities
1528
- * @throws {DoubleTieError} If the schema is not found or if a model or field doesn't exist
1529
- */
1530
- const createEntityTransformer = <span class="fstat-no" title="function not covered" >(</span>
1531
- db: DB,
1532
- config: DrizzleAdapterConfig,
1533
- options: C15TOptions
1534
- ) =&gt; {
1535
- const schema = <span class="cstat-no" title="statement not covered" >getConsentTables(options);</span>
1536
- &nbsp;
1537
- /**
1538
- * Gets the field name in the database schema
1539
- *
1540
- * @internal
1541
- * @param model - The model name
1542
- * @param field - The field name in the C15T model
1543
- * @returns The corresponding field name in the database schema
1544
- */
1545
- function <span class="fstat-no" title="function not covered" >getField(m</span>odel: string, field: string) {
1546
- <span class="cstat-no" title="statement not covered" > if (field === 'id') {</span>
1547
- <span class="cstat-no" title="statement not covered" > return field;</span>
1548
- }
1549
- const f = <span class="cstat-no" title="statement not covered" >schema[model].fields[field];</span>
1550
- <span class="cstat-no" title="statement not covered" > return f.fieldName || field;</span>
1551
- }
1552
- &nbsp;
1553
- /**
1554
- * Gets the schema model for a given entity name
1555
- *
1556
- * @internal
1557
- * @param entityName - The entity name to get the schema for
1558
- * @returns The schema model for the entity
1559
- * @throws {DoubleTieError} If the schema is not found or the model doesn't exist in the schema
1560
- */
1561
- function <span class="fstat-no" title="function not covered" >getSchema(e</span>ntityName: string) {
1562
- const schema = <span class="cstat-no" title="statement not covered" >config.schema || db._.fullSchema;</span>
1563
- <span class="cstat-no" title="statement not covered" > if (!schema) {</span>
1564
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
1565
- 'The schema could not be found. Please ensure the schema is properly configured in the adapter.',
1566
- {
1567
- code: ERROR_CODES.DATABASE_CONNECTION_ERROR,
1568
- status: 500,
1569
- meta: {
1570
- provider: config.provider,
1571
- },
1572
- }
1573
- );
1574
- }
1575
- const model = <span class="cstat-no" title="statement not covered" >getEntityName(entityName);</span>
1576
- const schemaModel = <span class="cstat-no" title="statement not covered" >schema[model];</span>
1577
- <span class="cstat-no" title="statement not covered" > if (!schemaModel) {</span>
1578
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
1579
- `The model "${model}" does not exist in the schema. Please verify the model name and ensure it is defined in your schema.`,
1580
- {
1581
- code: ERROR_CODES.DATABASE_QUERY_ERROR,
1582
- status: 404,
1583
- meta: {
1584
- model,
1585
- availableModels: Object.keys(schema),
1586
- },
1587
- }
1588
- );
1589
- }
1590
- <span class="cstat-no" title="statement not covered" > return schemaModel;</span>
1591
- }
1592
- &nbsp;
1593
- /**
1594
- * Converts a model name to its corresponding entity name in the database
1595
- *
1596
- * @internal
1597
- * @param model - The model name to convert
1598
- * @returns The database entity name
1599
- */
1600
- const getEntityName = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(m</span>odel: string) =&gt; {</span>
1601
- <span class="cstat-no" title="statement not covered" > if (schema[model].entityName !== model) {</span>
1602
- <span class="cstat-no" title="statement not covered" > return schema[model].entityName;</span>
1603
- }
1604
- &nbsp;
1605
- <span class="cstat-no" title="statement not covered" > if (config.usePlural) {</span>
1606
- <span class="cstat-no" title="statement not covered" > return `${model}s`;</span>
1607
- }
1608
- &nbsp;
1609
- <span class="cstat-no" title="statement not covered" > return model;</span>
1610
- };
1611
- &nbsp;
1612
- /**
1613
- * Converts C15T where clauses to Drizzle ORM conditions
1614
- *
1615
- * @internal
1616
- * @typeParam EntityType - The type of entity being queried
1617
- * @param where - Array of where conditions from C15T
1618
- * @param model - The model name
1619
- * @returns Array of Drizzle ORM conditions
1620
- * @throws {DoubleTieError} If a field doesn't exist or if the operator value is invalid
1621
- */
1622
- function <span class="fstat-no" title="function not covered" >convertWhereClause&lt;EntityType extends EntityName&gt;(</span>
1623
- where: Where&lt;EntityType&gt;[],
1624
- model: EntityType
1625
- ) {
1626
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
1627
- <span class="cstat-no" title="statement not covered" > if (!where) {</span>
1628
- <span class="cstat-no" title="statement not covered" > return [];</span>
1629
- }
1630
- <span class="cstat-no" title="statement not covered" > if (where.length === 1) {</span>
1631
- const w = <span class="cstat-no" title="statement not covered" >where[0];</span>
1632
- <span class="cstat-no" title="statement not covered" > if (!w) {</span>
1633
- <span class="cstat-no" title="statement not covered" > return [];</span>
1634
- }
1635
- const field = <span class="cstat-no" title="statement not covered" >getField(model, w.field);</span>
1636
- <span class="cstat-no" title="statement not covered" > if (!schemaModel[field]) {</span>
1637
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
1638
- `The field "${field}" does not exist in model "${model}". Please verify the field name and ensure it is defined in your schema.`,
1639
- {
1640
- code: ERROR_CODES.DATABASE_QUERY_ERROR,
1641
- status: 404,
1642
- meta: {
1643
- model,
1644
- field,
1645
- availableFields: Object.keys(schemaModel),
1646
- },
1647
- }
1648
- );
1649
- }
1650
- <span class="cstat-no" title="statement not covered" > if (w.operator === 'in') {</span>
1651
- <span class="cstat-no" title="statement not covered" > if (!Array.isArray(w.value)) {</span>
1652
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
1653
- `The value for the field "${field}" must be an array when using the "in" operator.`,
1654
- {
1655
- code: ERROR_CODES.BAD_REQUEST,
1656
- status: 400,
1657
- meta: {
1658
- field,
1659
- operator: w.operator,
1660
- expectedType: 'array',
1661
- actualType: typeof w.value,
1662
- },
1663
- }
1664
- );
1665
- }
1666
- <span class="cstat-no" title="statement not covered" > return [inArray(schemaModel[field], w.value)];</span>
1667
- }
1668
- &nbsp;
1669
- <span class="cstat-no" title="statement not covered" > if (w.operator === 'contains') {</span>
1670
- <span class="cstat-no" title="statement not covered" > return [like(schemaModel[field], `%${w.value}%`)];</span>
1671
- }
1672
- &nbsp;
1673
- <span class="cstat-no" title="statement not covered" > if (w.operator === 'starts_with') {</span>
1674
- <span class="cstat-no" title="statement not covered" > return [like(schemaModel[field], `${w.value}%`)];</span>
1675
- }
1676
- &nbsp;
1677
- <span class="cstat-no" title="statement not covered" > if (w.operator === 'ends_with') {</span>
1678
- <span class="cstat-no" title="statement not covered" > return [like(schemaModel[field], `%${w.value}`)];</span>
1679
- }
1680
- &nbsp;
1681
- <span class="cstat-no" title="statement not covered" > return [eq(schemaModel[field], w.value)];</span>
1682
- }
1683
- const andGroup = <span class="cstat-no" title="statement not covered" >where.filter(<span class="fstat-no" title="function not covered" >(w</span>) =&gt; <span class="cstat-no" title="statement not covered" >w.connector === 'AND' || !w.connector)</span>;</span>
1684
- const orGroup = <span class="cstat-no" title="statement not covered" >where.filter(<span class="fstat-no" title="function not covered" >(w</span>) =&gt; <span class="cstat-no" title="statement not covered" >w.connector === 'OR')</span>;</span>
1685
- &nbsp;
1686
- const andClause = <span class="cstat-no" title="statement not covered" >and(</span>
1687
- ...andGroup.map(<span class="fstat-no" title="function not covered" >(w</span>) =&gt; {
1688
- const field = <span class="cstat-no" title="statement not covered" >getField(model, w.field);</span>
1689
- <span class="cstat-no" title="statement not covered" > if (w.operator === 'in') {</span>
1690
- <span class="cstat-no" title="statement not covered" > if (!Array.isArray(w.value)) {</span>
1691
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
1692
- `The value for the field "${field}" must be an array when using the "in" operator.`,
1693
- {
1694
- code: ERROR_CODES.BAD_REQUEST,
1695
- status: 400,
1696
- meta: {
1697
- field,
1698
- operator: w.operator,
1699
- expectedType: 'array',
1700
- actualType: typeof w.value,
1701
- },
1702
- }
1703
- );
1704
- }
1705
- <span class="cstat-no" title="statement not covered" > return inArray(schemaModel[field], w.value);</span>
1706
- }
1707
- <span class="cstat-no" title="statement not covered" > return eq(schemaModel[field], w.value);</span>
1708
- })
1709
- );
1710
- const orClause = <span class="cstat-no" title="statement not covered" >or(</span>
1711
- ...orGroup.map(<span class="fstat-no" title="function not covered" >(w</span>) =&gt; {
1712
- const field = <span class="cstat-no" title="statement not covered" >getField(model, w.field);</span>
1713
- <span class="cstat-no" title="statement not covered" > return eq(schemaModel[field], w.value);</span>
1714
- })
1715
- );
1716
- &nbsp;
1717
- const clause: SQL&lt;unknown&gt;[] = <span class="cstat-no" title="statement not covered" >[];</span>
1718
- <span class="cstat-no" title="statement not covered" > if (andGroup.length &amp;&amp; andClause) {</span>
1719
- <span class="cstat-no" title="statement not covered" > clause.push(andClause);</span>
1720
- }
1721
- <span class="cstat-no" title="statement not covered" > if (orGroup.length &amp;&amp; orClause) {</span>
1722
- <span class="cstat-no" title="statement not covered" > clause.push(orClause);</span>
1723
- }
1724
- <span class="cstat-no" title="statement not covered" > return clause;</span>
1725
- }
1726
- &nbsp;
1727
- const useDatabaseGeneratedId = <span class="cstat-no" title="statement not covered" >options?.advanced?.generateId === false;</span>
1728
- <span class="cstat-no" title="statement not covered" > return {</span>
1729
- getSchema,
1730
- /**
1731
- * Transforms input data from C15T format to Drizzle format
1732
- *
1733
- * @internal
1734
- * @param data - The data to transform
1735
- * @param model - The model name
1736
- * @param action - Whether this is a create or update operation
1737
- * @returns Transformed data for Drizzle ORM
1738
- */
1739
- <span class="fstat-no" title="function not covered" > transformInput(</span>
1740
- data: Record&lt;string, unknown&gt;,
1741
- model: string,
1742
- action: 'create' | 'update'
1743
- ) {
1744
- const transformedData: Record&lt;string, unknown&gt; =
1745
- <span class="cstat-no" title="statement not covered" > useDatabaseGeneratedId || action === 'update'</span>
1746
- ? {}
1747
- : {
1748
- id: options.advanced?.generateId
1749
- ? options.advanced.generateId({
1750
- model,
1751
- })
1752
- : data.id || generateId(schema[model].entityPrefix),
1753
- };
1754
- const fields = <span class="cstat-no" title="statement not covered" >schema[model].fields;</span>
1755
- <span class="cstat-no" title="statement not covered" > for (const field in fields) {</span>
1756
- <span class="cstat-no" title="statement not covered" > if (Object.hasOwn(fields, field)) {</span>
1757
- const value = <span class="cstat-no" title="statement not covered" >data[field];</span>
1758
- <span class="cstat-no" title="statement not covered" > if (value === undefined &amp;&amp; !fields[field].defaultValue) {</span>
1759
- <span class="cstat-no" title="statement not covered" > continue;</span>
1760
- }
1761
- <span class="cstat-no" title="statement not covered" > transformedData[fields[field].fieldName || field] = applyDefaultValue(</span>
1762
- value,
1763
- fields[field],
1764
- action
1765
- );
1766
- }
1767
- }
1768
- <span class="cstat-no" title="statement not covered" > return transformedData;</span>
1769
- },
1770
- /**
1771
- * Transforms output data from Drizzle format to C15T format
1772
- *
1773
- * @internal
1774
- * @param data - The data to transform
1775
- * @param model - The model name
1776
- * @param select - Optional array of fields to select
1777
- * @returns Transformed data for C15T or null if no data
1778
- */
1779
- <span class="fstat-no" title="function not covered" > transformOutput(</span>
1780
- data: Record&lt;string, unknown&gt;,
1781
- model: string,
1782
- select: string[] = <span class="branch-0 cbranch-no" title="branch not covered" >[]</span>
1783
- ) {
1784
- <span class="cstat-no" title="statement not covered" > if (!data) {</span>
1785
- <span class="cstat-no" title="statement not covered" > return null;</span>
1786
- }
1787
- &nbsp;
1788
- let transformedData: Record&lt;string, unknown&gt; = <span class="cstat-no" title="statement not covered" >{};</span>
1789
- &nbsp;
1790
- <span class="cstat-no" title="statement not covered" > if (</span>
1791
- (data.id || data._id) &amp;&amp;
1792
- (select.length === 0 || select.includes('id'))
1793
- ) {
1794
- <span class="cstat-no" title="statement not covered" > transformedData = { id: data.id };</span>
1795
- }
1796
- &nbsp;
1797
- const tableSchema = <span class="cstat-no" title="statement not covered" >schema[model].fields;</span>
1798
- <span class="cstat-no" title="statement not covered" > for (const key in tableSchema) {</span>
1799
- <span class="cstat-no" title="statement not covered" > if (select.length &amp;&amp; !select.includes(key)) {</span>
1800
- <span class="cstat-no" title="statement not covered" > continue;</span>
1801
- }
1802
- const field = <span class="cstat-no" title="statement not covered" >tableSchema[key];</span>
1803
- <span class="cstat-no" title="statement not covered" > if (field) {</span>
1804
- <span class="cstat-no" title="statement not covered" > transformedData[key] = data[field.fieldName || key];</span>
1805
- }
1806
- }
1807
- <span class="cstat-no" title="statement not covered" > return transformedData;</span>
1808
- },
1809
- convertWhereClause,
1810
- /**
1811
- * Helper for returning data from operations in MySQL
1812
- *
1813
- * @internal
1814
- * @param model - The model name
1815
- * @param builder - The query builder
1816
- * @param data - The data being operated on
1817
- * @param where - Optional where conditions
1818
- * @returns The result of the operation
1819
- */
1820
- withReturning: <span class="fstat-no" title="function not covered" >async (</span>
1821
- model: string,
1822
- builder: unknown,
1823
- data: Record&lt;string, unknown&gt;,
1824
- where?: Where&lt;string&gt;[]
1825
- ) =&gt; {
1826
- <span class="cstat-no" title="statement not covered" > if (config.provider !== 'mysql') {</span>
1827
- const c = <span class="cstat-no" title="statement not covered" >await builder.returning();</span>
1828
- <span class="cstat-no" title="statement not covered" > return c[0];</span>
1829
- }
1830
- &nbsp;
1831
- <span class="cstat-no" title="statement not covered" > await builder.execute();</span>
1832
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
1833
- const builderVal = <span class="cstat-no" title="statement not covered" >builder.config?.values;</span>
1834
- &nbsp;
1835
- <span class="cstat-no" title="statement not covered" > if (where?.length) {</span>
1836
- const clause = <span class="cstat-no" title="statement not covered" >convertWhereClause(where, model);</span>
1837
- const res = <span class="cstat-no" title="statement not covered" >await db</span>
1838
- .select()
1839
- .from(schemaModel)
1840
- .where(...clause);
1841
- <span class="cstat-no" title="statement not covered" > return res[0];</span>
1842
- }
1843
- &nbsp;
1844
- <span class="cstat-no" title="statement not covered" > if (builderVal) {</span>
1845
- const tId = <span class="cstat-no" title="statement not covered" >builderVal[0]?.id.value;</span>
1846
- const res = <span class="cstat-no" title="statement not covered" >await db</span>
1847
- .select()
1848
- .from(schemaModel)
1849
- .where(eq(schemaModel.id, tId));
1850
- <span class="cstat-no" title="statement not covered" > return res[0];</span>
1851
- }
1852
- &nbsp;
1853
- <span class="cstat-no" title="statement not covered" > if (data.id) {</span>
1854
- const res = <span class="cstat-no" title="statement not covered" >await db</span>
1855
- .select()
1856
- .from(schemaModel)
1857
- .where(eq(schemaModel.id, data.id));
1858
- <span class="cstat-no" title="statement not covered" > return res[0];</span>
1859
- }
1860
- },
1861
- getField,
1862
- getEntityName,
1863
- };
1864
- };
1865
- &nbsp;
1866
- /**
1867
- * Configuration options for the Drizzle adapter
1868
- *
1869
- * @example
1870
- * ```typescript
1871
- * // Basic Drizzle adapter configuration
1872
- * const config: DrizzleAdapterConfig = {
1873
- * provider: 'pg', // PostgreSQL
1874
- * usePlural: true // Use plural table names
1875
- * };
1876
- *
1877
- * // Configuration with explicit schema
1878
- * const configWithSchema: DrizzleAdapterConfig = {
1879
- * provider: 'mysql',
1880
- * schema: {
1881
- * subjects: subjects, // Drizzle schema objects
1882
- * consents: consents,
1883
- * purposes: purposes
1884
- * }
1885
- * };
1886
- * ```
1887
- */
1888
- export interface DrizzleAdapterConfig {
1889
- /**
1890
- * The schema object that defines the tables and fields
1891
- *
1892
- * @remarks
1893
- * If not provided, the adapter will attempt to use `db._.fullSchema`
1894
- */
1895
- schema?: Record&lt;string, unknown&gt;;
1896
- &nbsp;
1897
- /**
1898
- * The database provider
1899
- *
1900
- * @remarks
1901
- * Different providers have different SQL dialects and features
1902
- */
1903
- provider: 'pg' | 'mysql' | 'sqlite';
1904
- &nbsp;
1905
- /**
1906
- * If the table names in the schema are plural
1907
- * set this to true. For example, if the schema
1908
- * has an object with a key "subjects" instead of "subject"
1909
- *
1910
- * @default false
1911
- */
1912
- usePlural?: boolean;
1913
- }
1914
- &nbsp;
1915
- /**
1916
- * Validates that the schema contains all required fields
1917
- *
1918
- * @internal
1919
- * @param schema - The schema to check
1920
- * @param model - The model name
1921
- * @param values - The values to validate against the schema
1922
- * @throws {DoubleTieError} If the schema is missing or a field doesn't exist
1923
- */
1924
- function <span class="fstat-no" title="function not covered" >checkMissingFields(</span>
1925
- schema: Record&lt;string, unknown&gt;,
1926
- model: string,
1927
- values: Record&lt;string, unknown&gt;
1928
- ) {
1929
- <span class="cstat-no" title="statement not covered" > if (!schema) {</span>
1930
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
1931
- 'The schema could not be found. Please ensure the schema is properly configured in the adapter.',
1932
- {
1933
- code: ERROR_CODES.DATABASE_CONNECTION_ERROR,
1934
- status: 500,
1935
- }
1936
- );
1937
- }
1938
- <span class="cstat-no" title="statement not covered" > for (const key in values) {</span>
1939
- <span class="cstat-no" title="statement not covered" > if (!schema[key]) {</span>
1940
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
1941
- `The field "${key}" does not exist in the "${model}" schema. Please update your drizzle schema or re-generate using "npx @c15t/cli generate".`
1942
- );
1943
- }
1944
- }
1945
- }
1946
- &nbsp;
1947
- /**
1948
- * Creates a C15T adapter for Drizzle ORM
1949
- *
1950
- * This factory function creates an adapter that allows C15T to use Drizzle ORM
1951
- * as its database layer. It supports PostgreSQL, MySQL, and SQLite.
1952
- *
1953
- * @param db - The Drizzle database instance
1954
- * @param config - Configuration options for the Drizzle adapter
1955
- * @returns A C15T adapter factory function
1956
- *
1957
- * @example
1958
- * ```typescript
1959
- * import { drizzle } from 'drizzle-orm/postgres-js';
1960
- * import postgres from 'postgres';
1961
- * import { drizzleAdapter } from '@c15t/db/adapters/drizzle';
1962
- * import * as schema from './schema';
1963
- * import { c15tInstance } from '@c15t/backend';
1964
- *
1965
- * // Create a Postgres connection
1966
- * const connection = postgres('postgresql://user:password@localhost:5432/db');
1967
- * const db = drizzle(connection, { schema });
1968
- *
1969
- * // Create the C15T instance with Drizzle adapter
1970
- * const c15t = c15tInstance({
1971
- * storage: drizzleAdapter(db, {
1972
- * provider: 'pg',
1973
- * schema, // Pass your Drizzle schema
1974
- * usePlural: true
1975
- * }),
1976
- * // Other C15T options...
1977
- * secret: process.env.SECRET
1978
- * });
1979
- *
1980
- * // Use in your application
1981
- * export default c15tInstance.handler;
1982
- * ```
1983
- *
1984
- * @example
1985
- * ```typescript
1986
- * // Using with MySQL
1987
- * import { drizzle } from 'drizzle-orm/mysql2';
1988
- * import mysql from 'mysql2/promise';
1989
- * import { c15tInstance } from '@c15t/backend';
1990
- *
1991
- * const connection = await mysql.createConnection({
1992
- * host: 'localhost',
1993
- * user: 'root',
1994
- * database: 'c15t'
1995
- * });
1996
- *
1997
- * const db = drizzle(connection);
1998
- *
1999
- * const c15t = c15tInstance({
2000
- * storage: drizzleAdapter(db, {
2001
- * provider: 'mysql'
2002
- * }),
2003
- * secret: process.env.SECRET
2004
- * });
2005
- * ```
2006
- */
2007
- export const drizzleAdapter =
2008
- <span class="fstat-no" title="function not covered" > (d</span>b: DB, config: DrizzleAdapterConfig) =&gt; <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(o</span>ptions: C15TOptions) =&gt; {</span>
2009
- const {
2010
- transformInput,
2011
- transformOutput,
2012
- convertWhereClause,
2013
- getSchema,
2014
- withReturning,
2015
- getField,
2016
- getEntityName,
2017
- } = <span class="cstat-no" title="statement not covered" >createEntityTransformer(db, config, options);</span>
2018
- <span class="cstat-no" title="statement not covered" > return {</span>
2019
- id: 'drizzle',
2020
- /**
2021
- * Creates a new record in the database
2022
- *
2023
- * @param data - The data for the create operation
2024
- * @returns The created record
2025
- * @throws {DoubleTieError} If the model or fields don't exist
2026
- */
2027
- <span class="fstat-no" title="function not covered" > async c</span>reate(data) {
2028
- const { model, data: values } = <span class="cstat-no" title="statement not covered" >data;</span>
2029
- const transformed = <span class="cstat-no" title="statement not covered" >transformInput(values, model, 'create');</span>
2030
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
2031
- <span class="cstat-no" title="statement not covered" > checkMissingFields(schemaModel, getEntityName(model), transformed);</span>
2032
- const builder = <span class="cstat-no" title="statement not covered" >db.insert(schemaModel).values(transformed);</span>
2033
- const returned = <span class="cstat-no" title="statement not covered" >await withReturning(model, builder, transformed);</span>
2034
- <span class="cstat-no" title="statement not covered" > return transformOutput(returned, model);</span>
2035
- },
2036
- /**
2037
- * Finds a single record matching the where conditions
2038
- *
2039
- * @param data - The data for the find operation
2040
- * @returns The found record or null if not found
2041
- * @throws {DoubleTieError} If the model or fields don't exist
2042
- */
2043
- <span class="fstat-no" title="function not covered" > async f</span>indOne(data) {
2044
- const { model, where, select } = <span class="cstat-no" title="statement not covered" >data;</span>
2045
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
2046
- const clause = <span class="cstat-no" title="statement not covered" >convertWhereClause(where, model);</span>
2047
- const res = <span class="cstat-no" title="statement not covered" >await db</span>
2048
- .select()
2049
- .from(schemaModel)
2050
- .where(...clause);
2051
- &nbsp;
2052
- <span class="cstat-no" title="statement not covered" > if (!res.length) {</span>
2053
- <span class="cstat-no" title="statement not covered" > return null;</span>
2054
- }
2055
- <span class="cstat-no" title="statement not covered" > return transformOutput(res[0], model, select);</span>
2056
- },
2057
- /**
2058
- * Finds multiple records matching the where conditions
2059
- *
2060
- * @param data - The data for the find operation
2061
- * @returns Array of matching records
2062
- * @throws {DoubleTieError} If the model or fields don't exist
2063
- */
2064
- <span class="fstat-no" title="function not covered" > async f</span>indMany(data) {
2065
- const { model, where, sortBy, limit, offset } = <span class="cstat-no" title="statement not covered" >data;</span>
2066
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
2067
- const clause = <span class="cstat-no" title="statement not covered" >where ? convertWhereClause(where, model) : [];</span>
2068
- &nbsp;
2069
- const sortFn = <span class="cstat-no" title="statement not covered" >sortBy?.direction === 'desc' ? desc : asc;</span>
2070
- const builder = <span class="cstat-no" title="statement not covered" >db</span>
2071
- .select()
2072
- .from(schemaModel)
2073
- .limit(limit || 100)
2074
- .offset(offset || 0);
2075
- <span class="cstat-no" title="statement not covered" > if (sortBy?.field) {</span>
2076
- <span class="cstat-no" title="statement not covered" > builder.orderBy(sortFn(schemaModel[getField(model, sortBy?.field)]));</span>
2077
- }
2078
- const res = <span class="cstat-no" title="statement not covered" >await builder.where(...clause);</span>
2079
- <span class="cstat-no" title="statement not covered" > return res.map(<span class="fstat-no" title="function not covered" >(r</span>) =&gt; <span class="cstat-no" title="statement not covered" >transformOutput(r, model))</span>;</span>
2080
- },
2081
- /**
2082
- * Counts records matching the where conditions
2083
- *
2084
- * @param data - The data for the count operation
2085
- * @returns The count of matching records
2086
- * @throws {DoubleTieError} If the model or fields don't exist
2087
- */
2088
- <span class="fstat-no" title="function not covered" > async c</span>ount(data) {
2089
- const { model, where } = <span class="cstat-no" title="statement not covered" >data;</span>
2090
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
2091
- const clause = <span class="cstat-no" title="statement not covered" >where ? convertWhereClause(where, model) : [];</span>
2092
- const res = <span class="cstat-no" title="statement not covered" >await db</span>
2093
- .select({ count: count() })
2094
- .from(schemaModel)
2095
- .where(...clause);
2096
- <span class="cstat-no" title="statement not covered" > return res[0].count;</span>
2097
- },
2098
- /**
2099
- * Updates a single record matching the where conditions
2100
- *
2101
- * @param data - The data for the update operation
2102
- * @returns The updated record
2103
- * @throws {DoubleTieError} If the model or fields don't exist
2104
- */
2105
- <span class="fstat-no" title="function not covered" > async u</span>pdate(data) {
2106
- const { model, where, update } = <span class="cstat-no" title="statement not covered" >data;</span>
2107
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
2108
- const clause = <span class="cstat-no" title="statement not covered" >convertWhereClause(where, model);</span>
2109
- const transformed = <span class="cstat-no" title="statement not covered" >transformInput(update, model, 'update');</span>
2110
- const result = <span class="cstat-no" title="statement not covered" >await db</span>
2111
- .update(schemaModel)
2112
- .set(transformed)
2113
- .where(clause)
2114
- .returning();
2115
- <span class="cstat-no" title="statement not covered" > return result.length ? transformOutput(result[0], model) : null;</span>
2116
- },
2117
- /**
2118
- * Updates multiple records matching the where conditions
2119
- *
2120
- * @param data - The data for the update operation
2121
- * @returns The number of records updated
2122
- * @throws {DoubleTieError} If the model or fields don't exist
2123
- */
2124
- <span class="fstat-no" title="function not covered" > async u</span>pdateMany(data) {
2125
- const { model, where, update: values } = <span class="cstat-no" title="statement not covered" >data;</span>
2126
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
2127
- const clause = <span class="cstat-no" title="statement not covered" >convertWhereClause(where, model);</span>
2128
- const transformed = <span class="cstat-no" title="statement not covered" >transformInput(values, model, 'update');</span>
2129
- const builder = <span class="cstat-no" title="statement not covered" >db</span>
2130
- .update(schemaModel)
2131
- .set(transformed)
2132
- .where(...clause);
2133
- const res = <span class="cstat-no" title="statement not covered" >await builder;</span>
2134
- <span class="cstat-no" title="statement not covered" > return res ? res.changes : 0;</span>
2135
- },
2136
- /**
2137
- * Deletes a single record matching the where conditions
2138
- *
2139
- * @param data - The data for the delete operation
2140
- * @throws {DoubleTieError} If the model or fields don't exist
2141
- */
2142
- <span class="fstat-no" title="function not covered" > async d</span>elete(data) {
2143
- const { model, where } = <span class="cstat-no" title="statement not covered" >data;</span>
2144
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
2145
- const clause = <span class="cstat-no" title="statement not covered" >convertWhereClause(where, model);</span>
2146
- const builder = <span class="cstat-no" title="statement not covered" >db.delete(schemaModel).where(...clause);</span>
2147
- <span class="cstat-no" title="statement not covered" > await builder;</span>
2148
- },
2149
- /**
2150
- * Deletes multiple records matching the where conditions
2151
- *
2152
- * @param data - The data for the delete operation
2153
- * @returns The number of records deleted
2154
- * @throws {DoubleTieError} If the model or fields don't exist
2155
- */
2156
- <span class="fstat-no" title="function not covered" > async d</span>eleteMany(data) {
2157
- const { model, where } = <span class="cstat-no" title="statement not covered" >data;</span>
2158
- const schemaModel = <span class="cstat-no" title="statement not covered" >getSchema(model);</span>
2159
- const clause = <span class="cstat-no" title="statement not covered" >convertWhereClause(where, model);</span>
2160
- const result = <span class="cstat-no" title="statement not covered" >await db.delete(schemaModel).where(clause);</span>
2161
- <span class="cstat-no" title="statement not covered" > return result ? (result.rowCount as number) : 0;</span>
2162
- },
2163
- /**
2164
- * Executes a function within a database transaction
2165
- *
2166
- * This method wraps Drizzle's transaction functionality to provide a consistent interface
2167
- * for executing multiple database operations atomically.
2168
- *
2169
- * @typeParam ResultType - The type of data returned by the transaction
2170
- * @param data - The transaction data containing the callback function
2171
- * @returns A promise that resolves with the result of the callback function
2172
- * @throws {Error} If the transaction fails to complete
2173
- */
2174
- <span class="fstat-no" title="function not covered" > async t</span>ransaction&lt;ResultType&gt;(data: {
2175
- callback: (transactionAdapter: Adapter) =&gt; Promise&lt;ResultType&gt;;
2176
- }): Promise&lt;ResultType&gt; {
2177
- const { callback } = <span class="cstat-no" title="statement not covered" >data;</span>
2178
- &nbsp;
2179
- <span class="cstat-no" title="statement not covered" > return await db.transaction(<span class="fstat-no" title="function not covered" >async (t</span>x) =&gt; {</span>
2180
- // Create a new adapter instance that uses the transaction connection
2181
- const transactionAdapter = <span class="cstat-no" title="statement not covered" >drizzleAdapter(</span>
2182
- tx as unknown as DB,
2183
- config
2184
- )(options);
2185
- &nbsp;
2186
- // Execute the callback function with the transaction adapter
2187
- <span class="cstat-no" title="statement not covered" > return await callback(transactionAdapter);</span>
2188
- });
2189
- },
2190
- options: config,
2191
- } satisfies Adapter;
2192
- };
2193
- &nbsp;</pre></td></tr></table></pre>
2194
-
2195
- <div class='push'></div><!-- for sticky footer -->
2196
- </div><!-- /wrapper -->
2197
- <div class='footer quiet pad2 space-top1 center small'>
2198
- Code coverage generated by
2199
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2200
- at 2025-04-14T10:55:46.797Z
2201
- </div>
2202
- <script src="../../../../../../prettify.js"></script>
2203
- <script>
2204
- window.onload = function () {
2205
- prettyPrint();
2206
- };
2207
- </script>
2208
- <script src="../../../../../../sorter.js"></script>
2209
- <script src="../../../../../../block-navigation.js"></script>
2210
- </body>
2211
- </html>
2212
-