@elaraai/east 0.0.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/LICENSE.md +682 -0
  2. package/README.md +276 -0
  3. package/dist/src/analyze.d.ts +95 -0
  4. package/dist/src/analyze.d.ts.map +1 -0
  5. package/dist/src/analyze.js +1110 -0
  6. package/dist/src/analyze.js.map +1 -0
  7. package/dist/src/ast.d.ts +263 -0
  8. package/dist/src/ast.d.ts.map +1 -0
  9. package/dist/src/ast.js +151 -0
  10. package/dist/src/ast.js.map +1 -0
  11. package/dist/src/ast_to_ir.d.ts +24 -0
  12. package/dist/src/ast_to_ir.d.ts.map +1 -0
  13. package/dist/src/ast_to_ir.js +834 -0
  14. package/dist/src/ast_to_ir.js.map +1 -0
  15. package/dist/src/builtins.d.ts +18 -0
  16. package/dist/src/builtins.d.ts.map +1 -0
  17. package/dist/src/builtins.js +1105 -0
  18. package/dist/src/builtins.js.map +1 -0
  19. package/dist/src/comparison.d.ts +28 -0
  20. package/dist/src/comparison.d.ts.map +1 -0
  21. package/dist/src/comparison.js +1017 -0
  22. package/dist/src/comparison.js.map +1 -0
  23. package/dist/src/compile.d.ts +22 -0
  24. package/dist/src/compile.d.ts.map +1 -0
  25. package/dist/src/compile.js +3260 -0
  26. package/dist/src/compile.js.map +1 -0
  27. package/dist/src/containers/ref.d.ts +106 -0
  28. package/dist/src/containers/ref.d.ts.map +1 -0
  29. package/dist/src/containers/ref.js +100 -0
  30. package/dist/src/containers/ref.js.map +1 -0
  31. package/dist/src/containers/sortedmap.d.ts +165 -0
  32. package/dist/src/containers/sortedmap.d.ts.map +1 -0
  33. package/dist/src/containers/sortedmap.js +237 -0
  34. package/dist/src/containers/sortedmap.js.map +1 -0
  35. package/dist/src/containers/sortedset.d.ts +185 -0
  36. package/dist/src/containers/sortedset.d.ts.map +1 -0
  37. package/dist/src/containers/sortedset.js +312 -0
  38. package/dist/src/containers/sortedset.js.map +1 -0
  39. package/dist/src/containers/variant.d.ts +131 -0
  40. package/dist/src/containers/variant.d.ts.map +1 -0
  41. package/dist/src/containers/variant.js +68 -0
  42. package/dist/src/containers/variant.js.map +1 -0
  43. package/dist/src/datetime_format/parse.d.ts +50 -0
  44. package/dist/src/datetime_format/parse.d.ts.map +1 -0
  45. package/dist/src/datetime_format/parse.js +908 -0
  46. package/dist/src/datetime_format/parse.js.map +1 -0
  47. package/dist/src/datetime_format/print.d.ts +35 -0
  48. package/dist/src/datetime_format/print.d.ts.map +1 -0
  49. package/dist/src/datetime_format/print.js +157 -0
  50. package/dist/src/datetime_format/print.js.map +1 -0
  51. package/dist/src/datetime_format/tokenize.d.ts +76 -0
  52. package/dist/src/datetime_format/tokenize.d.ts.map +1 -0
  53. package/dist/src/datetime_format/tokenize.js +271 -0
  54. package/dist/src/datetime_format/tokenize.js.map +1 -0
  55. package/dist/src/datetime_format/types.d.ts +99 -0
  56. package/dist/src/datetime_format/types.d.ts.map +1 -0
  57. package/dist/src/datetime_format/types.js +103 -0
  58. package/dist/src/datetime_format/types.js.map +1 -0
  59. package/dist/src/datetime_format/validate.d.ts +51 -0
  60. package/dist/src/datetime_format/validate.d.ts.map +1 -0
  61. package/dist/src/datetime_format/validate.js +208 -0
  62. package/dist/src/datetime_format/validate.js.map +1 -0
  63. package/dist/src/default.d.ts +21 -0
  64. package/dist/src/default.d.ts.map +1 -0
  65. package/dist/src/default.js +82 -0
  66. package/dist/src/default.js.map +1 -0
  67. package/dist/src/eastir.d.ts +33 -0
  68. package/dist/src/eastir.d.ts.map +1 -0
  69. package/dist/src/eastir.js +92 -0
  70. package/dist/src/eastir.js.map +1 -0
  71. package/dist/src/error.d.ts +13 -0
  72. package/dist/src/error.d.ts.map +1 -0
  73. package/dist/src/error.js +8 -0
  74. package/dist/src/error.js.map +1 -0
  75. package/dist/src/expr/array.d.ts +1711 -0
  76. package/dist/src/expr/array.d.ts.map +1 -0
  77. package/dist/src/expr/array.js +1805 -0
  78. package/dist/src/expr/array.js.map +1 -0
  79. package/dist/src/expr/ast.d.ts +17 -0
  80. package/dist/src/expr/ast.d.ts.map +1 -0
  81. package/dist/src/expr/ast.js +302 -0
  82. package/dist/src/expr/ast.js.map +1 -0
  83. package/dist/src/expr/blob.d.ts +141 -0
  84. package/dist/src/expr/blob.d.ts.map +1 -0
  85. package/dist/src/expr/blob.js +198 -0
  86. package/dist/src/expr/blob.js.map +1 -0
  87. package/dist/src/expr/block.d.ts +201 -0
  88. package/dist/src/expr/block.d.ts.map +1 -0
  89. package/dist/src/expr/block.js +1505 -0
  90. package/dist/src/expr/block.js.map +1 -0
  91. package/dist/src/expr/boolean.d.ts +207 -0
  92. package/dist/src/expr/boolean.d.ts.map +1 -0
  93. package/dist/src/expr/boolean.js +261 -0
  94. package/dist/src/expr/boolean.js.map +1 -0
  95. package/dist/src/expr/datetime.d.ts +544 -0
  96. package/dist/src/expr/datetime.d.ts.map +1 -0
  97. package/dist/src/expr/datetime.js +980 -0
  98. package/dist/src/expr/datetime.js.map +1 -0
  99. package/dist/src/expr/dict.d.ts +1242 -0
  100. package/dist/src/expr/dict.d.ts.map +1 -0
  101. package/dist/src/expr/dict.js +1492 -0
  102. package/dist/src/expr/dict.js.map +1 -0
  103. package/dist/src/expr/expr.d.ts +95 -0
  104. package/dist/src/expr/expr.d.ts.map +1 -0
  105. package/dist/src/expr/expr.js +171 -0
  106. package/dist/src/expr/expr.js.map +1 -0
  107. package/dist/src/expr/float.d.ts +357 -0
  108. package/dist/src/expr/float.d.ts.map +1 -0
  109. package/dist/src/expr/float.js +637 -0
  110. package/dist/src/expr/float.js.map +1 -0
  111. package/dist/src/expr/function.d.ts +46 -0
  112. package/dist/src/expr/function.d.ts.map +1 -0
  113. package/dist/src/expr/function.js +58 -0
  114. package/dist/src/expr/function.js.map +1 -0
  115. package/dist/src/expr/index.d.ts +450 -0
  116. package/dist/src/expr/index.d.ts.map +1 -0
  117. package/dist/src/expr/index.js +423 -0
  118. package/dist/src/expr/index.js.map +1 -0
  119. package/dist/src/expr/integer.d.ts +256 -0
  120. package/dist/src/expr/integer.d.ts.map +1 -0
  121. package/dist/src/expr/integer.js +311 -0
  122. package/dist/src/expr/integer.js.map +1 -0
  123. package/dist/src/expr/libs/array.d.ts +106 -0
  124. package/dist/src/expr/libs/array.d.ts.map +1 -0
  125. package/dist/src/expr/libs/array.js +140 -0
  126. package/dist/src/expr/libs/array.js.map +1 -0
  127. package/dist/src/expr/libs/blob.d.ts +42 -0
  128. package/dist/src/expr/libs/blob.d.ts.map +1 -0
  129. package/dist/src/expr/libs/blob.js +70 -0
  130. package/dist/src/expr/libs/blob.js.map +1 -0
  131. package/dist/src/expr/libs/datetime.d.ts +479 -0
  132. package/dist/src/expr/libs/datetime.d.ts.map +1 -0
  133. package/dist/src/expr/libs/datetime.js +624 -0
  134. package/dist/src/expr/libs/datetime.js.map +1 -0
  135. package/dist/src/expr/libs/dict.d.ts +66 -0
  136. package/dist/src/expr/libs/dict.d.ts.map +1 -0
  137. package/dist/src/expr/libs/dict.js +77 -0
  138. package/dist/src/expr/libs/dict.js.map +1 -0
  139. package/dist/src/expr/libs/float.d.ts +299 -0
  140. package/dist/src/expr/libs/float.d.ts.map +1 -0
  141. package/dist/src/expr/libs/float.js +564 -0
  142. package/dist/src/expr/libs/float.js.map +1 -0
  143. package/dist/src/expr/libs/integer.d.ts +228 -0
  144. package/dist/src/expr/libs/integer.d.ts.map +1 -0
  145. package/dist/src/expr/libs/integer.js +398 -0
  146. package/dist/src/expr/libs/integer.js.map +1 -0
  147. package/dist/src/expr/libs/set.d.ts +59 -0
  148. package/dist/src/expr/libs/set.d.ts.map +1 -0
  149. package/dist/src/expr/libs/set.js +69 -0
  150. package/dist/src/expr/libs/set.js.map +1 -0
  151. package/dist/src/expr/libs/string.d.ts +71 -0
  152. package/dist/src/expr/libs/string.d.ts.map +1 -0
  153. package/dist/src/expr/libs/string.js +75 -0
  154. package/dist/src/expr/libs/string.js.map +1 -0
  155. package/dist/src/expr/never.d.ts +15 -0
  156. package/dist/src/expr/never.d.ts.map +1 -0
  157. package/dist/src/expr/never.js +12 -0
  158. package/dist/src/expr/never.js.map +1 -0
  159. package/dist/src/expr/null.d.ts +15 -0
  160. package/dist/src/expr/null.d.ts.map +1 -0
  161. package/dist/src/expr/null.js +12 -0
  162. package/dist/src/expr/null.js.map +1 -0
  163. package/dist/src/expr/ref.d.ts +103 -0
  164. package/dist/src/expr/ref.d.ts.map +1 -0
  165. package/dist/src/expr/ref.js +131 -0
  166. package/dist/src/expr/ref.js.map +1 -0
  167. package/dist/src/expr/regex_validation.d.ts +25 -0
  168. package/dist/src/expr/regex_validation.d.ts.map +1 -0
  169. package/dist/src/expr/regex_validation.js +130 -0
  170. package/dist/src/expr/regex_validation.js.map +1 -0
  171. package/dist/src/expr/set.d.ts +1071 -0
  172. package/dist/src/expr/set.d.ts.map +1 -0
  173. package/dist/src/expr/set.js +1137 -0
  174. package/dist/src/expr/set.js.map +1 -0
  175. package/dist/src/expr/string.d.ts +414 -0
  176. package/dist/src/expr/string.d.ts.map +1 -0
  177. package/dist/src/expr/string.js +683 -0
  178. package/dist/src/expr/string.js.map +1 -0
  179. package/dist/src/expr/struct.d.ts +48 -0
  180. package/dist/src/expr/struct.d.ts.map +1 -0
  181. package/dist/src/expr/struct.js +65 -0
  182. package/dist/src/expr/struct.js.map +1 -0
  183. package/dist/src/expr/types.d.ts +68 -0
  184. package/dist/src/expr/types.d.ts.map +1 -0
  185. package/dist/src/expr/types.js +6 -0
  186. package/dist/src/expr/types.js.map +1 -0
  187. package/dist/src/expr/variant.d.ts +137 -0
  188. package/dist/src/expr/variant.d.ts.map +1 -0
  189. package/dist/src/expr/variant.js +105 -0
  190. package/dist/src/expr/variant.js.map +1 -0
  191. package/dist/src/fuzz.d.ts +80 -0
  192. package/dist/src/fuzz.d.ts.map +1 -0
  193. package/dist/src/fuzz.js +300 -0
  194. package/dist/src/fuzz.js.map +1 -0
  195. package/dist/src/index.d.ts +21 -0
  196. package/dist/src/index.d.ts.map +1 -0
  197. package/dist/src/index.js +21 -0
  198. package/dist/src/index.js.map +1 -0
  199. package/dist/src/internal.d.ts +36 -0
  200. package/dist/src/internal.d.ts.map +1 -0
  201. package/dist/src/internal.js +11 -0
  202. package/dist/src/internal.js.map +1 -0
  203. package/dist/src/ir.d.ts +1571 -0
  204. package/dist/src/ir.d.ts.map +1 -0
  205. package/dist/src/ir.js +56 -0
  206. package/dist/src/ir.js.map +1 -0
  207. package/dist/src/location.d.ts +48 -0
  208. package/dist/src/location.d.ts.map +1 -0
  209. package/dist/src/location.js +62 -0
  210. package/dist/src/location.js.map +1 -0
  211. package/dist/src/platform.d.ts +21 -0
  212. package/dist/src/platform.d.ts.map +1 -0
  213. package/dist/src/platform.js +8 -0
  214. package/dist/src/platform.js.map +1 -0
  215. package/dist/src/serialization/beast.d.ts +39 -0
  216. package/dist/src/serialization/beast.d.ts.map +1 -0
  217. package/dist/src/serialization/beast.js +555 -0
  218. package/dist/src/serialization/beast.js.map +1 -0
  219. package/dist/src/serialization/beast2-stream.d.ts +38 -0
  220. package/dist/src/serialization/beast2-stream.d.ts.map +1 -0
  221. package/dist/src/serialization/beast2-stream.js +665 -0
  222. package/dist/src/serialization/beast2-stream.js.map +1 -0
  223. package/dist/src/serialization/beast2.d.ts +41 -0
  224. package/dist/src/serialization/beast2.d.ts.map +1 -0
  225. package/dist/src/serialization/beast2.js +489 -0
  226. package/dist/src/serialization/beast2.js.map +1 -0
  227. package/dist/src/serialization/binary-utils.d.ts +151 -0
  228. package/dist/src/serialization/binary-utils.d.ts.map +1 -0
  229. package/dist/src/serialization/binary-utils.js +929 -0
  230. package/dist/src/serialization/binary-utils.js.map +1 -0
  231. package/dist/src/serialization/east.d.ts +84 -0
  232. package/dist/src/serialization/east.d.ts.map +1 -0
  233. package/dist/src/serialization/east.js +1802 -0
  234. package/dist/src/serialization/east.js.map +1 -0
  235. package/dist/src/serialization/index.d.ts +11 -0
  236. package/dist/src/serialization/index.d.ts.map +1 -0
  237. package/dist/src/serialization/index.js +12 -0
  238. package/dist/src/serialization/index.js.map +1 -0
  239. package/dist/src/serialization/json.d.ts +36 -0
  240. package/dist/src/serialization/json.d.ts.map +1 -0
  241. package/dist/src/serialization/json.js +849 -0
  242. package/dist/src/serialization/json.js.map +1 -0
  243. package/dist/src/type_of_type.d.ts +115 -0
  244. package/dist/src/type_of_type.d.ts.map +1 -0
  245. package/dist/src/type_of_type.js +362 -0
  246. package/dist/src/type_of_type.js.map +1 -0
  247. package/dist/src/types.d.ts +648 -0
  248. package/dist/src/types.d.ts.map +1 -0
  249. package/dist/src/types.js +1631 -0
  250. package/dist/src/types.js.map +1 -0
  251. package/package.json +87 -0
@@ -0,0 +1,564 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ import { BooleanType, FloatType, IntegerType, StringType } from "../../types.js";
6
+ import { Expr } from "../expr.js";
7
+ /** Standard library functions for floats */
8
+ export default {
9
+ /**
10
+ * Checks if two floats are approximately equal within an epsilon tolerance.
11
+ *
12
+ * @param x - The first float value
13
+ * @param y - The second float value
14
+ * @param epsilon - The maximum allowed difference between the values
15
+ * @returns `true` if the absolute difference between `x` and `y` is less than or equal to `epsilon`
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const approxEq = East.function([FloatType, FloatType, FloatType], BooleanType, ($, x, y, eps) => {
20
+ * $.return(East.Float.approxEqual(x, y, eps));
21
+ * });
22
+ * const compiled = East.compile(approxEq.toIR(), []);
23
+ * compiled(0.3, 0.1 + 0.2, 0.0001); // true (handles floating point precision)
24
+ * compiled(1.0, 1.1, 0.05); // false
25
+ * ```
26
+ */
27
+ approxEqual: Expr.function([FloatType, FloatType, FloatType], BooleanType, ($, x, y, epsilon) => {
28
+ const diff = $.let(x.subtract(y).abs());
29
+ $.return(Expr.lessEqual(diff, epsilon));
30
+ }),
31
+ /**
32
+ * Rounds a float down to the nearest integer (floor).
33
+ *
34
+ * @param x - The float value to round
35
+ * @returns The largest integer less than or equal to `x`
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const floor = East.function([FloatType], IntegerType, ($, x) => {
40
+ * $.return(East.Float.roundFloor(x));
41
+ * });
42
+ * const compiled = East.compile(floor.toIR(), []);
43
+ * compiled(3.7); // 3n
44
+ * compiled(-2.3); // -3n
45
+ * ```
46
+ */
47
+ roundFloor: Expr.function([FloatType], IntegerType, ($, x) => {
48
+ const rem = $.let(x.remainder(1.0));
49
+ const is_exact = $.let(Expr.equal(rem, 0.0).bitOr(Expr.equal(rem, -0.0)));
50
+ const floored_float = $.let(is_exact.ifElse(() => x, () => Expr.greaterEqual(x, 0.0).ifElse(() => x.subtract(rem), () => x.subtract(rem).subtract(1.0))));
51
+ $.return(floored_float.toInteger());
52
+ }),
53
+ /**
54
+ * Rounds a float up to the nearest integer (ceiling).
55
+ *
56
+ * @param x - The float value to round
57
+ * @returns The smallest integer greater than or equal to `x`
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * const ceil = East.function([FloatType], IntegerType, ($, x) => {
62
+ * $.return(East.Float.roundCeil(x));
63
+ * });
64
+ * const compiled = East.compile(ceil.toIR(), []);
65
+ * compiled(3.2); // 4n
66
+ * compiled(-2.7); // -2n
67
+ * ```
68
+ */
69
+ roundCeil: Expr.function([FloatType], IntegerType, ($, x) => {
70
+ // Use the step-based roundUp with step=1.0, then convert
71
+ const rem = $.let(x.remainder(1.0));
72
+ const is_exact = $.let(Expr.equal(rem, 0.0).bitOr(Expr.equal(rem, -0.0)));
73
+ const ceiled_float = $.let(is_exact.ifElse(() => x, () => Expr.greaterEqual(x, 0.0).ifElse(() => x.subtract(rem).add(1.0), () => x.subtract(rem))));
74
+ $.return(ceiled_float.toInteger());
75
+ }),
76
+ /**
77
+ * Rounds a float to the nearest integer using half-away-from-zero rounding.
78
+ *
79
+ * @param x - The float value to round
80
+ * @returns The nearest integer, with ties (0.5) rounding away from zero
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * const roundHalf = East.function([FloatType], IntegerType, ($, x) => {
85
+ * $.return(East.Float.roundHalf(x));
86
+ * });
87
+ * const compiled = East.compile(roundHalf.toIR(), []);
88
+ * compiled(3.5); // 4n
89
+ * compiled(3.4); // 3n
90
+ * compiled(-2.5); // -3n
91
+ * ```
92
+ */
93
+ roundHalf: Expr.function([FloatType], IntegerType, ($, x) => {
94
+ const rounded_float = $.let(Expr.greaterEqual(x, 0.0).ifElse(() => x.add(0.5).subtract(x.add(0.5).remainder(1.0)), () => x.subtract(0.5).subtract(x.subtract(0.5).remainder(1.0))));
95
+ $.return(rounded_float.toInteger());
96
+ }),
97
+ /**
98
+ * Truncates a float towards zero (removes the fractional part).
99
+ *
100
+ * @param x - The float value to truncate
101
+ * @returns The integer part of `x`, discarding the fractional part
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * const trunc = East.function([FloatType], IntegerType, ($, x) => {
106
+ * $.return(East.Float.roundTrunc(x));
107
+ * });
108
+ * const compiled = East.compile(trunc.toIR(), []);
109
+ * compiled(3.7); // 3n
110
+ * compiled(-2.7); // -2n
111
+ * ```
112
+ */
113
+ roundTrunc: Expr.function([FloatType], IntegerType, ($, x) => {
114
+ const truncated_float = $.let(x.subtract(x.remainder(1.0)));
115
+ $.return(truncated_float.toInteger());
116
+ }),
117
+ /**
118
+ * Rounds a float to the nearest multiple of a step value.
119
+ *
120
+ * @param x - The float value to round
121
+ * @param step - The step value to round to (uses absolute value)
122
+ * @returns The nearest multiple of `step`, with ties rounding away from zero
123
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * const roundNearest = East.function([FloatType, FloatType], FloatType, ($, x, step) => {
128
+ * $.return(East.Float.roundNearest(x, step));
129
+ * });
130
+ * const compiled = East.compile(roundNearest.toIR(), []);
131
+ * compiled(17.3, 5.0); // 15.0
132
+ * compiled(17.6, 5.0); // 20.0
133
+ * compiled(3.14159, 0.01); // 3.14
134
+ * ```
135
+ */
136
+ roundNearest: Expr.function([FloatType, FloatType], FloatType, ($, x, step) => {
137
+ // Check for NaN/Infinity
138
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot round NaN"));
139
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot round Infinity"));
140
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot round -Infinity"));
141
+ $.if(Expr.equal(step, 0.0), $ => $.return(x));
142
+ const abs_step = $.let(step.abs());
143
+ const divisions = $.let(x.divide(abs_step));
144
+ // Round to nearest integer multiple
145
+ const rounded_divisions_float = $.let(Expr.greaterEqual(divisions, 0.0).ifElse(() => {
146
+ const shifted = divisions.add(0.5);
147
+ return shifted.subtract(shifted.remainder(1.0));
148
+ }, () => {
149
+ const shifted = divisions.subtract(0.5);
150
+ return shifted.subtract(shifted.remainder(1.0));
151
+ }));
152
+ $.return(rounded_divisions_float.multiply(abs_step));
153
+ }),
154
+ /**
155
+ * Rounds a float up to the next multiple of a step value (ceiling).
156
+ *
157
+ * @param x - The float value to round
158
+ * @param step - The step value to round to (uses absolute value)
159
+ * @returns The smallest multiple of `step` greater than or equal to `x`
160
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
161
+ *
162
+ * @example
163
+ * ```ts
164
+ * const roundUp = East.function([FloatType, FloatType], FloatType, ($, x, step) => {
165
+ * $.return(East.Float.roundUp(x, step));
166
+ * });
167
+ * const compiled = East.compile(roundUp.toIR(), []);
168
+ * compiled(17.1, 5.0); // 20.0
169
+ * compiled(15.0, 5.0); // 15.0 (already exact)
170
+ * compiled(3.14, 0.1); // 3.2
171
+ * ```
172
+ */
173
+ roundUp: Expr.function([FloatType, FloatType], FloatType, ($, x, step) => {
174
+ // Check for NaN/Infinity
175
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot round NaN"));
176
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot round Infinity"));
177
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot round -Infinity"));
178
+ $.if(Expr.equal(step, 0.0), $ => $.return(x));
179
+ const abs_step = $.let(step.abs());
180
+ const divisions = $.let(x.divide(abs_step));
181
+ const rem = $.let(divisions.remainder(1.0));
182
+ // Check if already exact
183
+ const is_exact = $.let(Expr.equal(rem, 0.0).bitOr(Expr.equal(rem, -0.0)));
184
+ $.if(is_exact, $ => $.return(x));
185
+ // Round up
186
+ const ceiled = $.let(Expr.greaterEqual(x, 0.0).ifElse(() => divisions.subtract(rem).add(1.0), () => divisions.subtract(rem)));
187
+ $.return(ceiled.multiply(abs_step));
188
+ }),
189
+ /**
190
+ * Rounds a float down to the previous multiple of a step value (floor).
191
+ *
192
+ * @param x - The float value to round
193
+ * @param step - The step value to round to (uses absolute value)
194
+ * @returns The largest multiple of `step` less than or equal to `x`
195
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
196
+ *
197
+ * @example
198
+ * ```ts
199
+ * const roundDown = East.function([FloatType, FloatType], FloatType, ($, x, step) => {
200
+ * $.return(East.Float.roundDown(x, step));
201
+ * });
202
+ * const compiled = East.compile(roundDown.toIR(), []);
203
+ * compiled(17.9, 5.0); // 15.0
204
+ * compiled(15.0, 5.0); // 15.0 (already exact)
205
+ * compiled(3.19, 0.1); // 3.1
206
+ * ```
207
+ */
208
+ roundDown: Expr.function([FloatType, FloatType], FloatType, ($, x, step) => {
209
+ // Check for NaN/Infinity
210
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot round NaN"));
211
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot round Infinity"));
212
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot round -Infinity"));
213
+ $.if(Expr.equal(step, 0.0), $ => $.return(x));
214
+ const abs_step = $.let(step.abs());
215
+ const divisions = $.let(x.divide(abs_step));
216
+ const rem = $.let(divisions.remainder(1.0));
217
+ // Check if already exact
218
+ const is_exact = $.let(Expr.equal(rem, 0.0).bitOr(Expr.equal(rem, -0.0)));
219
+ $.if(is_exact, $ => $.return(x));
220
+ // Round down
221
+ const floored = $.let(Expr.greaterEqual(x, 0.0).ifElse(() => divisions.subtract(rem), () => divisions.subtract(rem).subtract(1.0)));
222
+ $.return(floored.multiply(abs_step));
223
+ }),
224
+ /**
225
+ * Rounds a float towards zero to the nearest multiple of a step value (truncate).
226
+ *
227
+ * @param x - The float value to round
228
+ * @param step - The step value to round to (uses absolute value)
229
+ * @returns The multiple of `step` closest to zero that is between zero and `x`
230
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
231
+ *
232
+ * @example
233
+ * ```ts
234
+ * const roundTruncate = East.function([FloatType, FloatType], FloatType, ($, x, step) => {
235
+ * $.return(East.Float.roundTruncate(x, step));
236
+ * });
237
+ * const compiled = East.compile(roundTruncate.toIR(), []);
238
+ * compiled(17.9, 5.0); // 15.0
239
+ * compiled(-17.9, 5.0); // -15.0
240
+ * ```
241
+ */
242
+ roundTruncate: Expr.function([FloatType, FloatType], FloatType, ($, x, step) => {
243
+ // Check for NaN/Infinity
244
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot round NaN"));
245
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot round Infinity"));
246
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot round -Infinity"));
247
+ $.if(Expr.equal(step, 0.0), $ => $.return(x));
248
+ const abs_step = $.let(step.abs());
249
+ const divisions = $.let(x.divide(abs_step));
250
+ const truncated = $.let(divisions.subtract(divisions.remainder(1.0)));
251
+ $.return(truncated.multiply(abs_step));
252
+ }),
253
+ /**
254
+ * Rounds a float to a specified number of decimal places.
255
+ *
256
+ * @param x - The float value to round
257
+ * @param decimals - The number of decimal places to round to
258
+ * @returns The float rounded to the specified number of decimal places
259
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
260
+ *
261
+ * @example
262
+ * ```ts
263
+ * const roundDecimals = East.function([FloatType, IntegerType], FloatType, ($, x, decimals) => {
264
+ * $.return(East.Float.roundToDecimals(x, decimals));
265
+ * });
266
+ * const compiled = East.compile(roundDecimals.toIR(), []);
267
+ * compiled(3.14159, 2n); // 3.14
268
+ * compiled(2.5, 0n); // 3.0
269
+ * ```
270
+ */
271
+ roundToDecimals: Expr.function([FloatType, IntegerType], FloatType, ($, x, decimals) => {
272
+ // Check for NaN/Infinity
273
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot round NaN"));
274
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot round Infinity"));
275
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot round -Infinity"));
276
+ // Build multiplier as 10^decimals iteratively
277
+ const remaining = $.let(decimals);
278
+ const multiplier = $.let(1.0);
279
+ $.while(Expr.greater(remaining, 0n), $ => {
280
+ $.assign(multiplier, multiplier.multiply(10.0));
281
+ $.assign(remaining, remaining.subtract(1n));
282
+ });
283
+ const scaled = $.let(x.multiply(multiplier));
284
+ const rounded = $.let(Expr.greaterEqual(scaled, 0.0).ifElse(() => {
285
+ const shifted = scaled.add(0.5);
286
+ return shifted.subtract(shifted.remainder(1.0));
287
+ }, () => {
288
+ const shifted = scaled.subtract(0.5);
289
+ return shifted.subtract(shifted.remainder(1.0));
290
+ }));
291
+ $.return(rounded.divide(multiplier));
292
+ }),
293
+ /**
294
+ * Formats a float with comma separators for thousands.
295
+ *
296
+ * @param x - The float value to format
297
+ * @param decimals - The number of decimal places to display
298
+ * @returns A formatted string with comma separators (e.g., `"1,234.567"`)
299
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
300
+ *
301
+ * @example
302
+ * ```ts
303
+ * const formatComma = East.function([FloatType, IntegerType], StringType, ($, x, decimals) => {
304
+ * $.return(East.Float.printCommaSeperated(x, decimals));
305
+ * });
306
+ * const compiled = East.compile(formatComma.toIR(), []);
307
+ * compiled(1234.567, 2n); // "1,234.57"
308
+ * compiled(1000000, 0n); // "1,000,000"
309
+ * compiled(-5432.1, 3n); // "-5,432.100"
310
+ * ```
311
+ */
312
+ printCommaSeperated: Expr.function([FloatType, IntegerType], StringType, ($, x, decimals) => {
313
+ // Check for NaN/Infinity
314
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot format NaN"));
315
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot format Infinity"));
316
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot format -Infinity"));
317
+ const negative = $.let(Expr.less(x, 0.0));
318
+ const abs_x = $.let(x.abs());
319
+ // Build multiplier for rounding
320
+ const remaining = $.let(decimals);
321
+ const multiplier = $.let(1.0);
322
+ $.while(Expr.greater(remaining, 0n), $ => {
323
+ $.assign(multiplier, multiplier.multiply(10.0));
324
+ $.assign(remaining, remaining.subtract(1n));
325
+ });
326
+ // Round and split
327
+ const scaled = $.let(abs_x.multiply(multiplier));
328
+ const shifted = $.let(scaled.add(0.5));
329
+ const rounded_scaled_float = $.let(shifted.subtract(shifted.remainder(1.0)));
330
+ const rounded_scaled = $.let(rounded_scaled_float.toInteger());
331
+ const integer_part = $.let(rounded_scaled.divide(multiplier.toInteger()));
332
+ const frac_part = $.let(rounded_scaled.remainder(multiplier.toInteger()));
333
+ // Format integer with commas
334
+ const int_with_commas = $.let(integer_part);
335
+ const comma_ret = $.let("");
336
+ $.while(Expr.greater(int_with_commas, 999n), $ => {
337
+ const z = $.let(int_with_commas.remainder(1000n));
338
+ $.if(Expr.less(z, 10n), $ => {
339
+ $.assign(comma_ret, Expr.str `,00${z}${comma_ret}`);
340
+ }).else($ => {
341
+ $.if(Expr.less(z, 100n), $ => {
342
+ $.assign(comma_ret, Expr.str `,0${z}${comma_ret}`);
343
+ }).else($ => {
344
+ $.assign(comma_ret, Expr.str `,${z}${comma_ret}`);
345
+ });
346
+ });
347
+ $.assign(int_with_commas, int_with_commas.divide(1000n));
348
+ });
349
+ const int_str = $.let(Expr.str `${int_with_commas}${comma_ret}`);
350
+ // Format fractional part with padding
351
+ const frac_str = $.let(Expr.str `${frac_part}`);
352
+ const padding_needed = $.let(decimals.subtract(frac_str.length()));
353
+ const padding = $.let("");
354
+ $.while(Expr.greater(padding_needed, 0n), $ => {
355
+ $.assign(padding, Expr.str `0${padding}`);
356
+ $.assign(padding_needed, padding_needed.subtract(1n));
357
+ });
358
+ const result = $.let(Expr.equal(decimals, 0n).ifElse(() => int_str, () => Expr.str `${int_str}.${padding}${frac_str}`));
359
+ $.return(negative.ifElse(() => Expr.str `-${result}`, () => result));
360
+ }),
361
+ /**
362
+ * Formats a float as currency with comma separators and 2 decimal places.
363
+ *
364
+ * @param x - The float value to format as currency
365
+ * @returns A formatted currency string (e.g., `"$1,234.56"`)
366
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
367
+ *
368
+ * @example
369
+ * ```ts
370
+ * const formatCurrency = East.function([FloatType], StringType, ($, x) => {
371
+ * $.return(East.Float.printCurrency(x));
372
+ * });
373
+ * const compiled = East.compile(formatCurrency.toIR(), []);
374
+ * compiled(1234.567); // "$1,234.57"
375
+ * compiled(-42.5); // "-$42.50"
376
+ * compiled(1000000); // "$1,000,000.00"
377
+ * ```
378
+ */
379
+ printCurrency: Expr.function([FloatType], StringType, ($, x) => {
380
+ // Check for NaN/Infinity
381
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot format NaN"));
382
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot format Infinity"));
383
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot format -Infinity"));
384
+ const negative = $.let(Expr.less(x, 0.0));
385
+ const abs_x = $.let(x.abs());
386
+ // Round to cents
387
+ const shifted = $.let(abs_x.multiply(100.0).add(0.5));
388
+ const cents_total_float = $.let(shifted.subtract(shifted.remainder(1.0)));
389
+ const cents_total = $.let(cents_total_float.toInteger());
390
+ const dollars = $.let(cents_total.divide(100n));
391
+ const cents = $.let(cents_total.remainder(100n));
392
+ // Format dollars with commas
393
+ const dollars_with_commas = $.let(dollars);
394
+ const comma_ret = $.let("");
395
+ $.while(Expr.greater(dollars_with_commas, 999n), $ => {
396
+ const z = $.let(dollars_with_commas.remainder(1000n));
397
+ $.if(Expr.less(z, 10n), $ => {
398
+ $.assign(comma_ret, Expr.str `,00${z}${comma_ret}`);
399
+ }).else($ => {
400
+ $.if(Expr.less(z, 100n), $ => {
401
+ $.assign(comma_ret, Expr.str `,0${z}${comma_ret}`);
402
+ }).else($ => {
403
+ $.assign(comma_ret, Expr.str `,${z}${comma_ret}`);
404
+ });
405
+ });
406
+ $.assign(dollars_with_commas, dollars_with_commas.divide(1000n));
407
+ });
408
+ const dollars_str = $.let(Expr.str `${dollars_with_commas}${comma_ret}`);
409
+ const cents_str = $.let(Expr.less(cents, 10n).ifElse(() => Expr.str `0${cents}`, () => Expr.str `${cents}`));
410
+ const result = $.let(Expr.str `${dollars_str}.${cents_str}`);
411
+ $.return(negative.ifElse(() => Expr.str `-$${result}`, () => Expr.str `$${result}`));
412
+ }),
413
+ /**
414
+ * Formats a float with a fixed number of decimal places.
415
+ *
416
+ * @param x - The float value to format
417
+ * @param decimals - The number of decimal places to display
418
+ * @returns A formatted string with the specified decimal places (e.g., `"3.14"`)
419
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
420
+ *
421
+ * @example
422
+ * ```ts
423
+ * const formatFixed = East.function([FloatType, IntegerType], StringType, ($, x, decimals) => {
424
+ * $.return(East.Float.printFixed(x, decimals));
425
+ * });
426
+ * const compiled = East.compile(formatFixed.toIR(), []);
427
+ * compiled(3.14159, 2n); // "3.14"
428
+ * compiled(42, 3n); // "42.000"
429
+ * compiled(-0.5, 1n); // "-0.5"
430
+ * ```
431
+ */
432
+ printFixed: Expr.function([FloatType, IntegerType], StringType, ($, x, decimals) => {
433
+ // Check for NaN/Infinity
434
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot format NaN"));
435
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot format Infinity"));
436
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot format -Infinity"));
437
+ const negative = $.let(Expr.less(x, 0.0));
438
+ const abs_x = $.let(x.abs());
439
+ // Build multiplier
440
+ const remaining = $.let(decimals);
441
+ const multiplier = $.let(1.0);
442
+ $.while(Expr.greater(remaining, 0n), $ => {
443
+ $.assign(multiplier, multiplier.multiply(10.0));
444
+ $.assign(remaining, remaining.subtract(1n));
445
+ });
446
+ // Round and split
447
+ const scaled = $.let(abs_x.multiply(multiplier));
448
+ const shifted = $.let(scaled.add(0.5));
449
+ const rounded_scaled_float = $.let(shifted.subtract(shifted.remainder(1.0)));
450
+ const rounded_scaled = $.let(rounded_scaled_float.toInteger());
451
+ const integer_part = $.let(rounded_scaled.divide(multiplier.toInteger()));
452
+ const frac_part = $.let(rounded_scaled.remainder(multiplier.toInteger()));
453
+ // Format fractional part with padding
454
+ const frac_str = $.let(Expr.str `${frac_part}`);
455
+ const padding_needed = $.let(decimals.subtract(frac_str.length()));
456
+ const padding = $.let("");
457
+ $.while(Expr.greater(padding_needed, 0n), $ => {
458
+ $.assign(padding, Expr.str `0${padding}`);
459
+ $.assign(padding_needed, padding_needed.subtract(1n));
460
+ });
461
+ const result = $.let(Expr.equal(decimals, 0n).ifElse(() => Expr.str `${integer_part}`, () => Expr.str `${integer_part}.${padding}${frac_str}`));
462
+ $.return(negative.ifElse(() => Expr.str `-${result}`, () => result));
463
+ }),
464
+ /**
465
+ * Formats a float in compact form with business unit suffixes.
466
+ *
467
+ * Uses suffixes: K (thousands), M (millions), B (billions), T (trillions),
468
+ * Q (quadrillions), Qi (quintillions).
469
+ *
470
+ * @param x - The float value to format
471
+ * @returns A compact formatted string (e.g., `"21.5K"`, `"1.82M"`, `"314B"`)
472
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
473
+ *
474
+ * @example
475
+ * ```ts
476
+ * const formatCompact = East.function([FloatType], StringType, ($, x) => {
477
+ * $.return(East.Float.printCompact(x));
478
+ * });
479
+ * const compiled = East.compile(formatCompact.toIR(), []);
480
+ * compiled(1500); // "1.5K"
481
+ * compiled(2500000); // "2.5M"
482
+ * compiled(3140000000); // "3.14B"
483
+ * ```
484
+ */
485
+ printCompact: Expr.function([FloatType], StringType, ($, x) => {
486
+ // Check for NaN/Infinity
487
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot format NaN"));
488
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot format Infinity"));
489
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot format -Infinity"));
490
+ const negative = $.let(Expr.less(x, 0.0));
491
+ const y = $.let(x.abs());
492
+ $.if(Expr.less(y, 1000.0), $ => {
493
+ const shifted = $.let(y.add(0.5));
494
+ const rounded_int = $.let(shifted.subtract(shifted.remainder(1.0)));
495
+ const rounded = $.let(rounded_int.divide(100.0));
496
+ $.return(negative.ifElse(() => Expr.str `-${rounded}`, () => Expr.str `${rounded}`));
497
+ });
498
+ const scale = $.let(1n);
499
+ const scaled = $.let(y);
500
+ $.while(Expr.greaterEqual(scaled, 1000000.0), $ => {
501
+ $.assign(scaled, scaled.divide(1000.0));
502
+ $.assign(scale, scale.add(1n));
503
+ });
504
+ const suffix = $.let(Expr.equal(scale, 1n).ifElse(() => "K", () => Expr.equal(scale, 2n).ifElse(() => "M", () => Expr.equal(scale, 3n).ifElse(() => "B", () => Expr.equal(scale, 4n).ifElse(() => "T", () => Expr.equal(scale, 5n).ifElse(() => "Q", () => "Qi"))))));
505
+ const div = $.let(scaled.divide(1000.0));
506
+ $.if(Expr.greaterEqual(scaled, 100000.0), $ => {
507
+ const shifted = $.let(div.add(0.5));
508
+ const rounded_float = $.let(shifted.subtract(shifted.remainder(1.0)));
509
+ const rounded = $.let(rounded_float.toInteger());
510
+ $.return(negative.ifElse(() => Expr.str `-${rounded}${suffix}`, () => Expr.str `${rounded}${suffix}`));
511
+ });
512
+ $.if(Expr.greaterEqual(scaled, 10000.0), $ => {
513
+ const shifted = $.let(div.multiply(10.0).add(0.5));
514
+ const rounded_int = $.let(shifted.subtract(shifted.remainder(1.0)));
515
+ const rounded = $.let(rounded_int.divide(10.0));
516
+ $.return(negative.ifElse(() => Expr.str `-${rounded}${suffix}`, () => Expr.str `${rounded}${suffix}`));
517
+ });
518
+ const shifted = $.let(div.multiply(100.0).add(0.5));
519
+ const rounded_int = $.let(shifted.subtract(shifted.remainder(1.0)));
520
+ const rounded = $.let(rounded_int.divide(100.0));
521
+ $.return(negative.ifElse(() => Expr.str `-${rounded}${suffix}`, () => Expr.str `${rounded}${suffix}`));
522
+ }),
523
+ /**
524
+ * Formats a float as a percentage.
525
+ *
526
+ * Multiplies the value by 100 and appends a percent sign.
527
+ *
528
+ * @param x - The float value to format (e.g., `0.452` for 45.2%)
529
+ * @param decimals - The number of decimal places to display
530
+ * @returns A formatted percentage string (e.g., `"45.2%"`)
531
+ * @throws {Error} When `x` is NaN, Infinity, or -Infinity
532
+ *
533
+ * @example
534
+ * ```ts
535
+ * const formatPercent = East.function([FloatType, IntegerType], StringType, ($, x, decimals) => {
536
+ * $.return(East.Float.printPercentage(x, decimals));
537
+ * });
538
+ * const compiled = East.compile(formatPercent.toIR(), []);
539
+ * compiled(0.452, 1n); // "45.2%"
540
+ * compiled(0.5, 0n); // "50%"
541
+ * compiled(-0.123, 2n); // "-12.30%"
542
+ * ```
543
+ */
544
+ printPercentage: Expr.function([FloatType, IntegerType], StringType, ($, x, decimals) => {
545
+ // Check for NaN/Infinity
546
+ $.if(Expr.equal(x, NaN), $ => $.error("Cannot format NaN"));
547
+ $.if(Expr.equal(x, Infinity), $ => $.error("Cannot format Infinity"));
548
+ $.if(Expr.equal(x, -Infinity), $ => $.error("Cannot format -Infinity"));
549
+ const percentage = $.let(x.multiply(100.0));
550
+ // Build multiplier
551
+ const remaining = $.let(decimals);
552
+ const multiplier = $.let(1.0);
553
+ $.while(Expr.greater(remaining, 0n), $ => {
554
+ $.assign(multiplier, multiplier.multiply(10.0));
555
+ $.assign(remaining, remaining.subtract(1n));
556
+ });
557
+ const scaled = $.let(percentage.multiply(multiplier));
558
+ const shifted = $.let(Expr.greaterEqual(scaled, 0.0).ifElse(() => scaled.add(0.5), () => scaled.subtract(0.5)));
559
+ const rounded_int = $.let(shifted.subtract(shifted.remainder(1.0)));
560
+ const rounded = $.let(rounded_int.divide(multiplier));
561
+ $.return(Expr.str `${rounded}%`);
562
+ }),
563
+ };
564
+ //# sourceMappingURL=float.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"float.js","sourceRoot":"","sources":["../../../../src/expr/libs/float.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,4CAA4C;AAC5C,eAAe;IACb;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;QAC9F,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;OAeG;IACH,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CACzB,QAAQ,CAAC,MAAM,CACb,GAAG,EAAE,CAAC,CAAC,EACP,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CACpC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EACrB,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CACpC,CACF,CACF,CAAC;QACF,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;OAeG;IACH,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1D,yDAAyD;QACzD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CACxB,QAAQ,CAAC,MAAM,CACb,GAAG,EAAE,CAAC,CAAC,EACP,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CACpC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAC9B,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CACtB,CACF,CACF,CAAC;QACF,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;OAgBG;IACH,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CACzB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAC9B,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EACpD,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAC/D,CACF,CAAC;QACF,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;OAeG;IACH,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC5E,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAEvE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE5C,oCAAoC;QACpC,MAAM,uBAAuB,GAAG,CAAC,CAAC,GAAG,CACnC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM,CACtC,GAAG,EAAE;YACH,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC,EACD,GAAG,EAAE;YACH,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxC,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC,CACF,CACF,CAAC;QAEF,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvE,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAEvE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5C,yBAAyB;QACzB,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjC,WAAW;QACX,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAClB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAC9B,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EACtC,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAC9B,CACF,CAAC;QACF,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACzE,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAEvE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5C,yBAAyB;QACzB,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjC,aAAa;QACb,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CACnB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAC9B,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC7B,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAC5C,CACF,CAAC;QACF,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;OAiBG;IACH,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC7E,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAEvE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;OAiBG;IACH,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;QACrF,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAEvE,8CAA8C;QAC9C,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE9B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YACvC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CACnB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CACnC,GAAG,EAAE;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC,EACD,GAAG,EAAE;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrC,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC,CACF,CACF,CAAC;QAEF,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;OAkBG;IACH,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;QAC1F,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAE7B,gCAAgC;QAChC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YACvC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAE1E,6BAA6B;QAC7B,MAAM,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;YAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAElD,CAAC,CAAC,EAAE,CACF,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EACjB,CAAC,CAAC,EAAE;gBACF,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAA,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;YACrD,CAAC,CACF,CAAC,IAAI,CACJ,CAAC,CAAC,EAAE;gBACF,CAAC,CAAC,EAAE,CACF,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAClB,CAAC,CAAC,EAAE;oBACF,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAA,KAAK,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;gBACpD,CAAC,CACF,CAAC,IAAI,CACJ,CAAC,CAAC,EAAE;oBACF,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAA,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;gBACnD,CAAC,CACF,CAAA;YACH,CAAC,CACF,CAAA;YAED,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,eAAe,GAAG,SAAS,EAAE,CAAC,CAAC;QAEhE,sCAAsC;QACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,SAAS,EAAE,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YAC5C,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAA,IAAI,OAAO,EAAE,CAAC,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,CAC7B,GAAG,EAAE,CAAC,OAAO,EACb,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,OAAO,IAAI,OAAO,GAAG,QAAQ,EAAE,CACjD,CACF,CAAC;QAEF,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,IAAI,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;OAiBG;IACH,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7D,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAE7B,iBAAiB;QACjB,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,MAAM,iBAAiB,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjD,6BAA6B;QAC7B,MAAM,mBAAmB,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;YACnD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAEtD,CAAC,CAAC,EAAE,CACF,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EACjB,CAAC,CAAC,EAAE;gBACF,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAA,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;YACrD,CAAC,CACF,CAAC,IAAI,CACJ,CAAC,CAAC,EAAE;gBACF,CAAC,CAAC,EAAE,CACF,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAClB,CAAC,CAAC,EAAE;oBACF,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAA,KAAK,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;gBACpD,CAAC,CACF,CAAC,IAAI,CACJ,CAAC,CAAC,EAAE;oBACF,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAA,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;gBACnD,CAAC,CACF,CAAA;YACH,CAAC,CACF,CAAA;YAED,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,mBAAmB,GAAG,SAAS,EAAE,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,CAClD,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,IAAI,KAAK,EAAE,EACzB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,KAAK,EAAE,CACzB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;QAE5D,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,KAAK,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;QACjF,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAE7B,mBAAmB;QACnB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YACvC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAE1E,sCAAsC;QACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,SAAS,EAAE,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YAC5C,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAA,IAAI,OAAO,EAAE,CAAC,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,CAC7B,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,YAAY,EAAE,EAC/B,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,YAAY,IAAI,OAAO,GAAG,QAAQ,EAAE,CACtD,CACF,CAAC;QAEF,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,IAAI,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5D,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAEzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;YAC7B,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAClC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACjD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,IAAI,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;QACpF,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAExB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE;YAChD,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAClB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CACpD,CACF,CACF,CACF,CACF,CAAC;QAEF,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;YAC5C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,IAAI,OAAO,GAAG,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QACvG,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE;YAC3C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,IAAI,OAAO,GAAG,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QACvG,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,IAAI,OAAO,GAAG,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;QACtF,yBAAyB;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAExE,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAE5C,mBAAmB;QACnB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YACvC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CACnB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CACnC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EACrB,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAC3B,CACF,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAEtD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC;CACH,CAAA"}