@mannyc1/ts-release 0.0.5 → 0.0.7

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 (136) hide show
  1. package/ARCHITECTURE.md +13 -8
  2. package/README.md +226 -447
  3. package/SPEC.md +48 -43
  4. package/dist/artifacts/adapter.d.ts +39 -0
  5. package/dist/artifacts/adapter.d.ts.map +1 -0
  6. package/dist/artifacts/adapter.js +23 -0
  7. package/dist/artifacts/adapter.js.map +1 -0
  8. package/dist/artifacts/registry.d.ts +21 -0
  9. package/dist/artifacts/registry.d.ts.map +1 -0
  10. package/dist/artifacts/registry.js +21 -0
  11. package/dist/artifacts/registry.js.map +1 -0
  12. package/dist/config/schema.js +1 -1
  13. package/dist/config/schema.js.map +1 -1
  14. package/dist/domain/artifact.d.ts +85 -3
  15. package/dist/domain/artifact.d.ts.map +1 -1
  16. package/dist/domain/artifact.js +171 -3
  17. package/dist/domain/artifact.js.map +1 -1
  18. package/dist/domain/evidence.d.ts +16 -65
  19. package/dist/domain/evidence.d.ts.map +1 -1
  20. package/dist/domain/evidence.js +15 -60
  21. package/dist/domain/evidence.js.map +1 -1
  22. package/dist/domain/operation.d.ts +7 -17
  23. package/dist/domain/operation.d.ts.map +1 -1
  24. package/dist/domain/operation.js +27 -154
  25. package/dist/domain/operation.js.map +1 -1
  26. package/dist/domain/release.d.ts +1 -49
  27. package/dist/domain/release.d.ts.map +1 -1
  28. package/dist/domain/release.js +2 -47
  29. package/dist/domain/release.js.map +1 -1
  30. package/dist/domain/remote-state.d.ts +1 -38
  31. package/dist/domain/remote-state.d.ts.map +1 -1
  32. package/dist/domain/remote-state.js +2 -38
  33. package/dist/domain/remote-state.js.map +1 -1
  34. package/dist/domain/target.d.ts +14 -1
  35. package/dist/domain/target.d.ts.map +1 -1
  36. package/dist/domain/target.js +17 -3
  37. package/dist/domain/target.js.map +1 -1
  38. package/dist/host/platform.d.ts.map +1 -1
  39. package/dist/host/platform.js +4 -11
  40. package/dist/host/platform.js.map +1 -1
  41. package/dist/internal/workspace-path.d.ts +4 -5
  42. package/dist/internal/workspace-path.d.ts.map +1 -1
  43. package/dist/internal/workspace-path.js +3 -0
  44. package/dist/internal/workspace-path.js.map +1 -1
  45. package/dist/planner/artifact-inventory.d.ts.map +1 -1
  46. package/dist/planner/artifact-inventory.js +4 -3
  47. package/dist/planner/artifact-inventory.js.map +1 -1
  48. package/dist/planner/errors.d.ts +2 -16
  49. package/dist/planner/errors.d.ts.map +1 -1
  50. package/dist/planner/errors.js +2 -14
  51. package/dist/planner/errors.js.map +1 -1
  52. package/dist/planner/evidence-recorder.d.ts +8 -6
  53. package/dist/planner/evidence-recorder.d.ts.map +1 -1
  54. package/dist/planner/evidence-recorder.js +72 -54
  55. package/dist/planner/evidence-recorder.js.map +1 -1
  56. package/dist/planner/executor.d.ts +12 -12
  57. package/dist/planner/executor.d.ts.map +1 -1
  58. package/dist/planner/executor.js +45 -68
  59. package/dist/planner/executor.js.map +1 -1
  60. package/dist/planner/normalize-release.d.ts +3 -0
  61. package/dist/planner/normalize-release.d.ts.map +1 -1
  62. package/dist/planner/normalize-release.js +128 -4
  63. package/dist/planner/normalize-release.js.map +1 -1
  64. package/dist/planner/reconcile.d.ts.map +1 -1
  65. package/dist/planner/reconcile.js +2 -6
  66. package/dist/planner/reconcile.js.map +1 -1
  67. package/dist/planner/render-plan.d.ts.map +1 -1
  68. package/dist/planner/render-plan.js +12 -19
  69. package/dist/planner/render-plan.js.map +1 -1
  70. package/dist/targets/adapter-helpers.d.ts +36 -6
  71. package/dist/targets/adapter-helpers.d.ts.map +1 -1
  72. package/dist/targets/adapter-helpers.js +103 -7
  73. package/dist/targets/adapter-helpers.js.map +1 -1
  74. package/dist/targets/github.d.ts +2 -2
  75. package/dist/targets/github.d.ts.map +1 -1
  76. package/dist/targets/github.js +4 -14
  77. package/dist/targets/github.js.map +1 -1
  78. package/dist/targets/homebrew.d.ts +2 -2
  79. package/dist/targets/homebrew.d.ts.map +1 -1
  80. package/dist/targets/homebrew.js +143 -40
  81. package/dist/targets/homebrew.js.map +1 -1
  82. package/dist/targets/live.d.ts.map +1 -1
  83. package/dist/targets/live.js +29 -20
  84. package/dist/targets/live.js.map +1 -1
  85. package/dist/targets/npm.d.ts +2 -2
  86. package/dist/targets/npm.d.ts.map +1 -1
  87. package/dist/targets/npm.js +33 -61
  88. package/dist/targets/npm.js.map +1 -1
  89. package/dist/targets/pypi.d.ts +2 -2
  90. package/dist/targets/pypi.d.ts.map +1 -1
  91. package/dist/targets/pypi.js +67 -41
  92. package/dist/targets/pypi.js.map +1 -1
  93. package/dist/targets/scoop.d.ts.map +1 -1
  94. package/dist/targets/scoop.js +18 -8
  95. package/dist/targets/scoop.js.map +1 -1
  96. package/dist/workflows/config.d.ts +69 -121
  97. package/dist/workflows/config.d.ts.map +1 -1
  98. package/dist/workflows/config.js +80 -129
  99. package/dist/workflows/config.js.map +1 -1
  100. package/dist/workflows/diagnostics.d.ts +2 -2
  101. package/dist/workflows/diagnostics.d.ts.map +1 -1
  102. package/dist/workflows/diagnostics.js +14 -20
  103. package/dist/workflows/diagnostics.js.map +1 -1
  104. package/dist/workflows/distribution.d.ts +25 -0
  105. package/dist/workflows/distribution.d.ts.map +1 -0
  106. package/dist/workflows/distribution.js +24 -0
  107. package/dist/workflows/distribution.js.map +1 -0
  108. package/dist/workflows/evidence.d.ts +4 -13
  109. package/dist/workflows/evidence.d.ts.map +1 -1
  110. package/dist/workflows/evidence.js +15 -37
  111. package/dist/workflows/evidence.js.map +1 -1
  112. package/dist/workflows/index.d.ts +1 -0
  113. package/dist/workflows/index.d.ts.map +1 -1
  114. package/dist/workflows/index.js +1 -0
  115. package/dist/workflows/index.js.map +1 -1
  116. package/dist/workflows/init.d.ts +3 -3
  117. package/dist/workflows/init.d.ts.map +1 -1
  118. package/dist/workflows/init.js +49 -13
  119. package/dist/workflows/init.js.map +1 -1
  120. package/examples/README.md +4 -4
  121. package/package.json +18 -15
  122. package/templates/README.md +15 -2
  123. package/templates/bun-cli-github/README.md +14 -0
  124. package/templates/bun-cli-github/release.config.json +89 -0
  125. package/dist/domain/status.d.ts +0 -43
  126. package/dist/domain/status.d.ts.map +0 -1
  127. package/dist/domain/status.js +0 -51
  128. package/dist/domain/status.js.map +0 -1
  129. package/dist/planner/release-eligibility.d.ts +0 -39
  130. package/dist/planner/release-eligibility.d.ts.map +0 -1
  131. package/dist/planner/release-eligibility.js +0 -578
  132. package/dist/planner/release-eligibility.js.map +0 -1
  133. package/dist/planner/status.d.ts +0 -40
  134. package/dist/planner/status.d.ts.map +0 -1
  135. package/dist/planner/status.js +0 -342
  136. package/dist/planner/status.js.map +0 -1
@@ -1,578 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as FileSystem from "effect/FileSystem";
3
- import * as Path from "effect/Path";
4
- import * as Schema from "effect/Schema";
5
- import * as Semver from "semver";
6
- import { CommandSpec } from "../domain/operation.js";
7
- import { ReleaseEligibilityDecision, ReleaseEligibilityInput } from "../domain/remote-state.js";
8
- import { ConventionalCommitReleaseRule, GitTag, IntentFilesReleaseDecision, PackageManifestReleaseIdentitySource, ReleaseIdentity, ReleaseIntentFile, ReleaseName, ReleaseVersion, RemoteStateReleaseDecision, StaticReleaseIdentitySource } from "../domain/release.js";
9
- import { TargetId } from "../domain/target.js";
10
- import { ReleaseCommandRunner } from "../host/host.js";
11
- import { ReleaseEligibilityCheckError } from "./errors.js";
12
- import { readReleasePackageManifest, renderReleaseVersionTemplate, resolveIdentityCommit, resolveReleaseIdentitySource, validateNonEmptySafeRelativePath } from "./normalize-release.js";
13
- export { ReleasePackageManifest } from "../domain/release.js";
14
- export class ReleaseEligibilityRemoteCheck extends Schema.Class("ReleaseEligibilityRemoteCheck")({
15
- packageName: ReleaseName,
16
- packageVersion: ReleaseVersion,
17
- npmTargetId: TargetId,
18
- npmRegistry: Schema.String,
19
- githubTargetId: TargetId,
20
- githubRepository: Schema.String,
21
- githubTag: GitTag,
22
- githubTokenEnv: Schema.optionalKey(Schema.String),
23
- expectedGithubDraft: Schema.Boolean
24
- }) {
25
- }
26
- class GitHubCliReleaseViewResponse extends Schema.Class("GitHubCliReleaseViewResponse")({
27
- isDraft: Schema.Boolean
28
- }) {
29
- }
30
- const decodeGitHubCliReleaseViewResponse = Schema.decodeUnknownEffect(GitHubCliReleaseViewResponse);
31
- const decodeReleaseIntentFile = Schema.decodeUnknownEffect(ReleaseIntentFile);
32
- const defaultReleaseRules = [
33
- ConventionalCommitReleaseRule.make({ breaking: true, release: "major" }),
34
- ConventionalCommitReleaseRule.make({ type: "feat", release: "minor" }),
35
- ConventionalCommitReleaseRule.make({ type: "fix", release: "patch" })
36
- ];
37
- const releaseLabel = (input) => `${input.packageName}@${input.packageVersion}`;
38
- const expectedGithubState = (input) => input.expectedGithubDraft ? "draft" : "published";
39
- const decisionStrategy = (metadata) => metadata?.strategy;
40
- const enrichDecision = (decision, input, metadata) => {
41
- const strategy = decisionStrategy(metadata);
42
- return ReleaseEligibilityDecision.make({
43
- shouldRelease: decision.shouldRelease,
44
- status: decision.status,
45
- reason: decision.reason,
46
- ...(strategy === undefined ? {} : { strategy }),
47
- packageName: input.packageName,
48
- packageVersion: input.packageVersion,
49
- githubTag: input.githubTag,
50
- ...(metadata?.source === undefined ? {} : { source: metadata.source })
51
- });
52
- };
53
- const skippedDecision = (reason, metadata) => ReleaseEligibilityDecision.make({
54
- shouldRelease: false,
55
- status: "skipped",
56
- reason,
57
- ...(metadata.strategy === undefined ? {} : { strategy: metadata.strategy }),
58
- ...(metadata.source === undefined ? {} : { source: metadata.source })
59
- });
60
- export const decideReleaseEligibility = (input) => {
61
- if (input.npm === "missing" && input.github === "missing") {
62
- return ReleaseEligibilityDecision.make({
63
- shouldRelease: true,
64
- status: "ready",
65
- reason: `${releaseLabel(input)} is missing from npm and GitHub.`
66
- });
67
- }
68
- const expectedGithub = expectedGithubState(input);
69
- if (input.npm === "published" && input.github === expectedGithub) {
70
- return ReleaseEligibilityDecision.make({
71
- shouldRelease: false,
72
- status: "complete",
73
- reason: `${releaseLabel(input)} is already published to npm and GitHub.`
74
- });
75
- }
76
- if (input.npm === "published" && input.github === "draft" && !input.expectedGithubDraft) {
77
- return ReleaseEligibilityDecision.make({
78
- shouldRelease: false,
79
- status: "partial",
80
- reason: `${releaseLabel(input)} is published to npm, but GitHub release v${input.packageVersion} is still a draft.`
81
- });
82
- }
83
- if (input.npm === "published" && input.github === "published" && input.expectedGithubDraft) {
84
- return ReleaseEligibilityDecision.make({
85
- shouldRelease: false,
86
- status: "partial",
87
- reason: `${releaseLabel(input)} is published to npm, but GitHub release v${input.packageVersion} is public while the target expects a draft.`
88
- });
89
- }
90
- return ReleaseEligibilityDecision.make({
91
- shouldRelease: false,
92
- status: "partial",
93
- reason: `${releaseLabel(input)} has partial remote state: npm=${input.npm}, github=${input.github}, expected-github=${expectedGithub}.`
94
- });
95
- };
96
- const eligibilityError = (reason, targetId, cause) => ReleaseEligibilityCheckError.make({
97
- ...(targetId === undefined ? {} : { targetId }),
98
- reason,
99
- ...(cause === undefined ? {} : { cause })
100
- });
101
- const findNpmTarget = (targets, packageName) => targets.find((target) => target._tag === "NpmRegistryTarget" && target.packageName === packageName);
102
- const findNpmTargetById = (targets, targetId) => targets.find((target) => target._tag === "NpmRegistryTarget" && target.id === targetId);
103
- const findGitHubTarget = (targets) => targets.find((target) => target._tag === "GitHubReleaseTarget");
104
- export const releaseEligibilityRemoteCheckFromIdentity = Effect.fn("releaseEligibilityRemoteCheckFromIdentity")(function* (identity, targets) {
105
- const npmTarget = findNpmTarget(targets, identity.name);
106
- if (npmTarget === undefined) {
107
- const npmTargetById = findNpmTargetById(targets, "npm");
108
- if (npmTargetById !== undefined) {
109
- return yield* Effect.fail(eligibilityError(`npm target ${npmTargetById.id} packageName ${npmTargetById.packageName} does not match release identity ${identity.name}.`, npmTargetById.id));
110
- }
111
- return yield* Effect.fail(eligibilityError(`release config must include an npm target for ${identity.name}`));
112
- }
113
- const githubTarget = findGitHubTarget(targets);
114
- if (githubTarget === undefined) {
115
- return yield* Effect.fail(eligibilityError("release config must include a GitHub release target"));
116
- }
117
- return ReleaseEligibilityRemoteCheck.make({
118
- packageName: identity.name,
119
- packageVersion: identity.version,
120
- npmTargetId: npmTarget.id,
121
- npmRegistry: npmTarget.registry,
122
- githubTargetId: githubTarget.id,
123
- githubRepository: githubTarget.repository,
124
- githubTag: identity.tag ?? identity.version,
125
- ...(githubTarget.tokenEnv === undefined ? {} : { githubTokenEnv: githubTarget.tokenEnv }),
126
- expectedGithubDraft: githubTarget.draft ?? false
127
- });
128
- });
129
- export const releaseEligibilityRemoteCheckFromIntent = Effect.fn("releaseEligibilityRemoteCheckFromIntent")(function* (manifest, intent) {
130
- const staticTag = intent.identity instanceof StaticReleaseIdentitySource ? intent.identity.tag : undefined;
131
- return yield* releaseEligibilityRemoteCheckFromIdentity(ReleaseIdentity.make({
132
- name: manifest.name,
133
- version: manifest.version,
134
- commit: "HEAD",
135
- ...(staticTag === undefined ? {} : { tag: staticTag })
136
- }), intent.targets);
137
- });
138
- const looksMissing = (stdout, stderr) => {
139
- const text = `${stdout}\n${stderr}`.toLowerCase();
140
- return text.includes("not found") || text.includes("404") || text.includes("e404");
141
- };
142
- const firstDiagnosticLine = (result) => {
143
- const lines = `${result.stderr}\n${result.stdout}`
144
- .split(/\r?\n/)
145
- .map((line) => line.trim())
146
- .filter((line) => line.length > 0);
147
- return lines[0] ?? `exit code ${result.exitCode}`;
148
- };
149
- const npmViewCommand = (input) => CommandSpec.make({
150
- executable: "npm",
151
- args: [
152
- "view",
153
- `${input.packageName}@${input.packageVersion}`,
154
- "version",
155
- "--registry",
156
- input.npmRegistry
157
- ],
158
- requiredEnv: [],
159
- redactedEnv: []
160
- });
161
- const githubReleaseViewCommand = (input) => CommandSpec.make({
162
- executable: "gh",
163
- args: [
164
- "release",
165
- "view",
166
- input.githubTag,
167
- "--repo",
168
- input.githubRepository,
169
- "--json",
170
- "isDraft,tagName,publishedAt"
171
- ],
172
- requiredEnv: input.githubTokenEnv === undefined ? [] : [input.githubTokenEnv],
173
- redactedEnv: input.githubTokenEnv === undefined ? [] : [input.githubTokenEnv]
174
- });
175
- const gitTagsAtHeadCommand = (root) => CommandSpec.make({
176
- executable: "git",
177
- args: ["tag", "--points-at", "HEAD"],
178
- cwd: root,
179
- requiredEnv: [],
180
- redactedEnv: []
181
- });
182
- const gitListTagsCommand = (root) => CommandSpec.make({
183
- executable: "git",
184
- args: ["tag", "--list", "--merged", "HEAD"],
185
- cwd: root,
186
- requiredEnv: [],
187
- redactedEnv: []
188
- });
189
- const gitLogCommand = (root, sinceTag) => CommandSpec.make({
190
- executable: "git",
191
- args: sinceTag === undefined
192
- ? ["log", "--format=%B%x1e"]
193
- : ["log", `${sinceTag}..HEAD`, "--format=%B%x1e"],
194
- cwd: root,
195
- requiredEnv: [],
196
- redactedEnv: []
197
- });
198
- const parseGitHubCliReleaseView = Effect.fn("parseGitHubCliReleaseView")(function* (input, stdout) {
199
- const parsed = yield* Effect.try({
200
- try: () => JSON.parse(stdout),
201
- catch: (cause) => eligibilityError("gh release view returned invalid JSON.", input.githubTargetId, cause)
202
- });
203
- const response = yield* decodeGitHubCliReleaseViewResponse(parsed).pipe(Effect.mapError((error) => eligibilityError(`gh release view returned malformed JSON: ${error.message}`, input.githubTargetId)));
204
- return response.isDraft ? "draft" : "published";
205
- });
206
- export const classifyNpmRemoteState = Effect.fn("classifyNpmRemoteState")(function* (input) {
207
- const commandRunner = yield* ReleaseCommandRunner;
208
- const result = yield* commandRunner.runCommand(npmViewCommand(input));
209
- if (result.exitCode === 0) {
210
- return "published";
211
- }
212
- if (looksMissing(result.stdout, result.stderr)) {
213
- return "missing";
214
- }
215
- return yield* Effect.fail(eligibilityError(`npm view failed while checking package state: ${firstDiagnosticLine(result)}`, input.npmTargetId));
216
- });
217
- export const classifyGitHubReleaseAvailability = Effect.fn("classifyGitHubReleaseAvailability")(function* (input) {
218
- const commandRunner = yield* ReleaseCommandRunner;
219
- const result = yield* commandRunner.runCommand(githubReleaseViewCommand(input));
220
- if (result.exitCode === 0) {
221
- return yield* parseGitHubCliReleaseView(input, result.stdout);
222
- }
223
- if (looksMissing(result.stdout, result.stderr)) {
224
- return "missing";
225
- }
226
- return yield* Effect.fail(eligibilityError(`gh release view failed while checking release state: ${firstDiagnosticLine(result)}`, input.githubTargetId));
227
- });
228
- export const checkReleaseEligibility = Effect.fn("checkReleaseEligibility")(function* (input, metadata = undefined) {
229
- const npm = yield* classifyNpmRemoteState(input);
230
- const github = yield* classifyGitHubReleaseAvailability(input);
231
- return enrichDecision(decideReleaseEligibility(ReleaseEligibilityInput.make({
232
- packageName: input.packageName,
233
- packageVersion: input.packageVersion,
234
- expectedGithubDraft: input.expectedGithubDraft,
235
- npm,
236
- github
237
- })), input, metadata);
238
- });
239
- const strategyFromIntent = (intent) => intent.releaseDecision ?? RemoteStateReleaseDecision.make({});
240
- const identitySourceName = (intent) => intent.identity instanceof PackageManifestReleaseIdentitySource
241
- ? "PackageManifestReleaseIdentitySource"
242
- : "StaticReleaseIdentitySource";
243
- const checkRemoteStateForIdentity = Effect.fn("checkRemoteStateForIdentity")(function* (identity, targets, metadata) {
244
- const remoteCheck = yield* releaseEligibilityRemoteCheckFromIdentity(identity, targets);
245
- return yield* checkReleaseEligibility(remoteCheck, metadata);
246
- });
247
- const skippedReleaseResolution = (decision) => ({
248
- _tag: "Skipped",
249
- decision
250
- });
251
- const resolvedReleaseResolution = (identity, targets, metadata) => ({
252
- _tag: "Resolved",
253
- identity,
254
- targets,
255
- metadata
256
- });
257
- const resolveRemoteStateDecision = Effect.fn("resolveRemoteStateDecision")(function* (strategy, intent, root) {
258
- const identity = yield* resolveReleaseIdentitySource(intent.identity, root);
259
- return resolvedReleaseResolution(identity, intent.targets, {
260
- strategy: strategy._tag,
261
- source: identitySourceName(intent)
262
- });
263
- });
264
- const templateParts = (template, field) => {
265
- const placeholder = "{version}";
266
- const firstIndex = template.indexOf(placeholder);
267
- const lastIndex = template.lastIndexOf(placeholder);
268
- if (firstIndex >= 0 && firstIndex === lastIndex) {
269
- return Effect.succeed({
270
- prefix: template.slice(0, firstIndex),
271
- suffix: template.slice(firstIndex + placeholder.length)
272
- });
273
- }
274
- return Effect.fail(eligibilityError(`${field} must contain exactly one {version} placeholder.`));
275
- };
276
- const versionFromTag = (tag, parts) => {
277
- if (!tag.startsWith(parts.prefix) || !tag.endsWith(parts.suffix)) {
278
- return undefined;
279
- }
280
- const suffixStart = tag.length - parts.suffix.length;
281
- const version = tag.slice(parts.prefix.length, suffixStart);
282
- return version.length === 0 ? undefined : version;
283
- };
284
- const stdoutLines = (stdout) => stdout.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0);
285
- const readMatchingCurrentTags = Effect.fn("readMatchingCurrentTags")(function* (root, template, providedTag, requireCurrentRef) {
286
- const parts = yield* templateParts(template, "releaseDecision.tagTemplate");
287
- const tags = providedTag !== undefined && !requireCurrentRef
288
- ? [providedTag]
289
- : yield* Effect.gen(function* () {
290
- const commandRunner = yield* ReleaseCommandRunner;
291
- const result = yield* commandRunner.runCommand(gitTagsAtHeadCommand(root));
292
- if (result.exitCode !== 0) {
293
- return yield* Effect.fail(eligibilityError(`git tag --points-at HEAD failed: ${firstDiagnosticLine(result)}`));
294
- }
295
- const currentTags = stdoutLines(result.stdout);
296
- return providedTag === undefined
297
- ? currentTags
298
- : currentTags.filter((tag) => tag === providedTag);
299
- });
300
- return tags.flatMap((tag) => {
301
- const version = versionFromTag(tag, parts);
302
- return version === undefined ? [] : [{ tag, version }];
303
- });
304
- });
305
- const resolveTagIdentity = Effect.fn("resolveTagIdentity")(function* (root, manifest, tag) {
306
- return yield* resolveIdentityCommit(ReleaseIdentity.make({
307
- name: manifest.name,
308
- version: tag.version,
309
- commit: "HEAD",
310
- tag: tag.tag
311
- }), root);
312
- });
313
- const resolveGitTagDecision = Effect.fn("resolveGitTagDecision")(function* (strategy, intent, root) {
314
- const metadata = {
315
- strategy: strategy._tag,
316
- source: strategy.tag === undefined ? "git tag --points-at HEAD" : `tag ${strategy.tag}`
317
- };
318
- const manifest = yield* readReleasePackageManifest(root, strategy.packagePath ?? "package.json", "releaseDecision.packagePath");
319
- const tagTemplate = strategy.tagTemplate ?? "v{version}";
320
- const requireCurrentRef = strategy.requireCurrentRef ?? true;
321
- const matchingTags = yield* readMatchingCurrentTags(root, tagTemplate, strategy.tag, requireCurrentRef);
322
- if (matchingTags.length === 0) {
323
- if (strategy.tag !== undefined && requireCurrentRef) {
324
- return skippedReleaseResolution(skippedDecision(`Release tag ${strategy.tag} does not point at HEAD.`, metadata));
325
- }
326
- return skippedReleaseResolution(skippedDecision("No release tag matching releaseDecision.tagTemplate points at HEAD.", metadata));
327
- }
328
- if (matchingTags.length > 1) {
329
- return yield* Effect.fail(eligibilityError(`Multiple release tags match ${tagTemplate}: ${matchingTags.map((tag) => tag.tag).join(", ")}.`));
330
- }
331
- const tag = matchingTags[0];
332
- if (tag === undefined) {
333
- return skippedReleaseResolution(skippedDecision("No release tag matching releaseDecision.tagTemplate points at HEAD.", metadata));
334
- }
335
- const identity = yield* resolveTagIdentity(root, manifest, tag);
336
- return resolvedReleaseResolution(identity, intent.targets, metadata);
337
- });
338
- const matchingTagsFromList = Effect.fn("matchingTagsFromList")(function* (stdout, template) {
339
- const parts = yield* templateParts(template, "releaseDecision.tagTemplate");
340
- const candidates = [];
341
- for (const tag of stdoutLines(stdout)) {
342
- const version = versionFromTag(tag, parts);
343
- if (version === undefined) {
344
- continue;
345
- }
346
- const validVersion = Semver.valid(version);
347
- if (validVersion !== null) {
348
- candidates.push({ tag, version: validVersion });
349
- }
350
- }
351
- return candidates.sort((left, right) => Semver.rcompare(left.version, right.version));
352
- });
353
- const latestMatchingTag = Effect.fn("latestMatchingTag")(function* (root, template) {
354
- const commandRunner = yield* ReleaseCommandRunner;
355
- const result = yield* commandRunner.runCommand(gitListTagsCommand(root));
356
- if (result.exitCode !== 0) {
357
- return yield* Effect.fail(eligibilityError(`git tag --list failed: ${firstDiagnosticLine(result)}`));
358
- }
359
- const matching = yield* matchingTagsFromList(result.stdout, template);
360
- return matching[0];
361
- });
362
- const parseCommit = (message) => {
363
- const firstLine = message.split(/\r?\n/)[0]?.trim() ?? "";
364
- const match = /^([A-Za-z][A-Za-z0-9-]*)(?:\([^)]+\))?(!)?:/.exec(firstLine);
365
- const type = match?.[1];
366
- const breakingSubject = match?.[2] === "!";
367
- const breakingBody = /^BREAKING[ -]CHANGE:/m.test(message);
368
- return {
369
- type,
370
- breaking: breakingSubject || breakingBody
371
- };
372
- };
373
- const bumpRank = (bump) => {
374
- switch (bump) {
375
- case "major":
376
- return 3;
377
- case "minor":
378
- return 2;
379
- case "patch":
380
- return 1;
381
- case "none":
382
- return 0;
383
- }
384
- };
385
- const higherBump = (left, right) => bumpRank(right) > bumpRank(left) ? right : left;
386
- const ruleMatches = (rule, commit) => {
387
- if (rule.breaking !== undefined && rule.breaking !== commit.breaking) {
388
- return false;
389
- }
390
- if (rule.type !== undefined && rule.type !== commit.type) {
391
- return false;
392
- }
393
- return rule.breaking !== undefined || rule.type !== undefined;
394
- };
395
- const classifyConventionalCommitBump = (message, rules) => {
396
- const commit = parseCommit(message);
397
- let bump = "none";
398
- for (const rule of rules) {
399
- if (ruleMatches(rule, commit)) {
400
- bump = higherBump(bump, rule.release);
401
- }
402
- }
403
- return bump;
404
- };
405
- const readCommitMessages = Effect.fn("readCommitMessages")(function* (root, sinceTag) {
406
- const commandRunner = yield* ReleaseCommandRunner;
407
- const result = yield* commandRunner.runCommand(gitLogCommand(root, sinceTag));
408
- if (result.exitCode !== 0) {
409
- return yield* Effect.fail(eligibilityError(`git log failed: ${firstDiagnosticLine(result)}`));
410
- }
411
- return result.stdout
412
- .split("\x1e")
413
- .map((message) => message.trim())
414
- .filter((message) => message.length > 0);
415
- });
416
- const nextSemverVersion = (version, bump, field) => {
417
- const validVersion = Semver.valid(version);
418
- if (validVersion === null) {
419
- return Effect.fail(eligibilityError(`${field} must be a valid SemVer version.`));
420
- }
421
- const nextVersion = Semver.inc(validVersion, bump);
422
- if (nextVersion !== null) {
423
- return Effect.succeed(nextVersion);
424
- }
425
- return Effect.fail(eligibilityError(`Unable to increment ${validVersion} as ${bump}.`));
426
- };
427
- const highestConventionalBump = (messages, rules) => {
428
- let bump = "none";
429
- for (const message of messages) {
430
- bump = higherBump(bump, classifyConventionalCommitBump(message, rules));
431
- }
432
- return bump;
433
- };
434
- const resolveConventionalCommitsDecision = Effect.fn("resolveConventionalCommitsDecision")(function* (strategy, intent, root) {
435
- const metadata = {
436
- strategy: strategy._tag,
437
- source: "git commits"
438
- };
439
- const tagTemplate = strategy.tagTemplate ?? "v{version}";
440
- const manifest = yield* readReleasePackageManifest(root, strategy.packagePath ?? "package.json", "releaseDecision.packagePath");
441
- const latest = yield* latestMatchingTag(root, tagTemplate);
442
- const messages = yield* readCommitMessages(root, latest?.tag);
443
- if (messages.length === 0) {
444
- return skippedReleaseResolution(skippedDecision("No commits were found for conventional commit analysis.", metadata));
445
- }
446
- const bump = highestConventionalBump(messages, strategy.releaseRules ?? defaultReleaseRules);
447
- if (bump === "none") {
448
- return skippedReleaseResolution(skippedDecision("No releasable conventional commits were found.", metadata));
449
- }
450
- const baseVersion = latest?.version ?? manifest.version;
451
- const nextVersion = yield* nextSemverVersion(baseVersion, bump, latest === undefined ? "package.json version" : "release tag version");
452
- const identity = yield* resolveIdentityCommit(ReleaseIdentity.make({
453
- name: manifest.name,
454
- version: nextVersion,
455
- commit: "HEAD",
456
- tag: renderReleaseVersionTemplate(tagTemplate, nextVersion)
457
- }), root);
458
- return resolvedReleaseResolution(identity, intent.targets, metadata);
459
- });
460
- const readIntentFiles = Effect.fn("readIntentFiles")(function* (root, strategy) {
461
- const directory = strategy.directory ?? ".release/intents";
462
- yield* validateNonEmptySafeRelativePath("releaseDecision.directory", directory);
463
- const manifest = yield* readReleasePackageManifest(root, strategy.packagePath ?? "package.json", "releaseDecision.packagePath");
464
- const fs = yield* FileSystem.FileSystem;
465
- const path = yield* Path.Path;
466
- const absoluteDirectory = path.resolve(root, directory);
467
- const entries = yield* fs.readDirectory(absoluteDirectory).pipe(Effect.catch(() => Effect.succeed([])));
468
- const files = [];
469
- for (const entry of entries.filter((item) => item.endsWith(".json")).sort()) {
470
- yield* validateNonEmptySafeRelativePath("releaseDecision.intentFile", entry);
471
- const intentPath = path.join(absoluteDirectory, entry);
472
- const contents = yield* fs.readFileString(intentPath).pipe(Effect.mapError((error) => eligibilityError(`Unable to read release intent file ${entry}: ${error.message}`, undefined, error)));
473
- const parsed = yield* Effect.try({
474
- try: () => JSON.parse(contents),
475
- catch: (cause) => eligibilityError(`Release intent file ${entry} is not valid JSON.`, undefined, cause)
476
- });
477
- const decoded = yield* decodeReleaseIntentFile(parsed).pipe(Effect.mapError((error) => eligibilityError(`Release intent file ${entry} is invalid: ${error.message}`)));
478
- if (decoded.package === manifest.name) {
479
- files.push(decoded);
480
- }
481
- }
482
- return {
483
- manifest,
484
- packageName: manifest.name,
485
- directory,
486
- files
487
- };
488
- });
489
- const highestIntentBump = (files) => {
490
- let bump = "none";
491
- for (const file of files) {
492
- const release = file.empty === true ? "none" : file.release;
493
- bump = higherBump(bump, release);
494
- }
495
- return bump;
496
- };
497
- const resolveIntentFilesDecision = Effect.fn("resolveIntentFilesDecision")(function* (strategy, intent, root) {
498
- const metadata = {
499
- strategy: strategy._tag,
500
- source: strategy.directory ?? ".release/intents"
501
- };
502
- const intentFiles = yield* readIntentFiles(root, strategy);
503
- const manifest = intentFiles.manifest;
504
- if (intentFiles.files.length === 0) {
505
- return skippedReleaseResolution(skippedDecision(`No release intent files were found for ${manifest.name}.`, metadata));
506
- }
507
- const bump = highestIntentBump(intentFiles.files);
508
- if (bump === "none") {
509
- return skippedReleaseResolution(skippedDecision(`Release intent files for ${manifest.name} request no release.`, metadata));
510
- }
511
- const nextVersion = yield* nextSemverVersion(manifest.version, bump, "package.json version");
512
- const tagTemplate = strategy.tagTemplate ?? "v{version}";
513
- yield* templateParts(tagTemplate, "releaseDecision.tagTemplate");
514
- const identity = yield* resolveIdentityCommit(ReleaseIdentity.make({
515
- name: manifest.name,
516
- version: nextVersion,
517
- commit: "HEAD",
518
- tag: renderReleaseVersionTemplate(tagTemplate, nextVersion)
519
- }), root);
520
- return resolvedReleaseResolution(identity, intent.targets, metadata);
521
- });
522
- const resolveReleaseDecision = Effect.fn("resolveReleaseDecision")(function* (intent, root = ".") {
523
- const strategy = strategyFromIntent(intent);
524
- switch (strategy._tag) {
525
- case "RemoteStateReleaseDecision":
526
- return yield* resolveRemoteStateDecision(strategy, intent, root);
527
- case "GitTagReleaseDecision":
528
- return yield* resolveGitTagDecision(strategy, intent, root);
529
- case "ConventionalCommitsReleaseDecision":
530
- return yield* resolveConventionalCommitsDecision(strategy, intent, root);
531
- case "IntentFilesReleaseDecision":
532
- return yield* resolveIntentFilesDecision(strategy, intent, root);
533
- }
534
- });
535
- export const checkReleaseDecision = Effect.fn("checkReleaseDecision")(function* (intent, root = ".") {
536
- const resolution = yield* resolveReleaseDecision(intent, root);
537
- switch (resolution._tag) {
538
- case "Skipped":
539
- return resolution.decision;
540
- case "Resolved":
541
- return yield* checkRemoteStateForIdentity(resolution.identity, resolution.targets, resolution.metadata);
542
- }
543
- });
544
- export const checkReleaseIntentRequirement = Effect.fn("checkReleaseIntentRequirement")(function* (intent, root = ".") {
545
- const strategy = strategyFromIntent(intent);
546
- if (!(strategy instanceof IntentFilesReleaseDecision)) {
547
- return skippedDecision("Release config is not using IntentFilesReleaseDecision.", {
548
- strategy: strategy._tag,
549
- source: "releaseDecision"
550
- });
551
- }
552
- const intentFiles = yield* readIntentFiles(root, strategy);
553
- if (intentFiles.files.length === 0 && (strategy.requireIntent ?? true)) {
554
- return yield* Effect.fail(eligibilityError(`release intent files are required for ${intentFiles.packageName} in ${intentFiles.directory}.`));
555
- }
556
- const bump = highestIntentBump(intentFiles.files);
557
- return ReleaseEligibilityDecision.make({
558
- shouldRelease: bump !== "none",
559
- status: bump === "none" ? "skipped" : "ready",
560
- reason: bump === "none"
561
- ? `Release intent files for ${intentFiles.packageName} request no release.`
562
- : `Release intent files for ${intentFiles.packageName} request a ${bump} release.`,
563
- strategy: strategy._tag,
564
- packageName: intentFiles.packageName,
565
- source: intentFiles.directory
566
- });
567
- });
568
- export const renderReleaseEligibilityText = (decision) => {
569
- const strategy = decision.strategy === undefined ? "" : ` strategy=${decision.strategy}`;
570
- const source = decision.source === undefined ? "" : ` source=${JSON.stringify(decision.source)}`;
571
- const release = decision.packageName === undefined || decision.packageVersion === undefined
572
- ? ""
573
- : ` release=${decision.packageName}@${decision.packageVersion}`;
574
- const tag = decision.githubTag === undefined ? "" : ` github-tag=${decision.githubTag}`;
575
- return `release eligibility status=${decision.status} should-release=${decision.shouldRelease}${strategy}${source}${release}${tag} reason=${JSON.stringify(decision.reason)}\n`;
576
- };
577
- export const renderReleaseEligibilityJson = (decision) => `${JSON.stringify(decision, null, 2)}\n`;
578
- //# sourceMappingURL=release-eligibility.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"release-eligibility.js","sourceRoot":"","sources":["../../src/planner/release-eligibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAGL,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,6BAA6B,EAE7B,MAAM,EAEN,0BAA0B,EAC1B,oCAAoC,EAGpC,eAAe,EAEf,iBAAiB,EACjB,WAAW,EAEX,cAAc,EACd,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAwD,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,qBAAqB,EACrB,4BAA4B,EAC5B,gCAAgC,EACjC,MAAM,wBAAwB,CAAA;AAI/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,MAAM,OAAO,6BAA8B,SAAQ,MAAM,CAAC,KAAK,CAC7D,+BAA+B,CAChC,CAAC;IACA,WAAW,EAAE,WAAW;IACxB,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,cAAc,EAAE,QAAQ;IACxB,gBAAgB,EAAE,MAAM,CAAC,MAAM;IAC/B,SAAS,EAAE,MAAM;IACjB,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACjD,mBAAmB,EAAE,MAAM,CAAC,OAAO;CACpC,CAAC;CAAG;AAEL,MAAM,4BAA6B,SAAQ,MAAM,CAAC,KAAK,CACrD,8BAA8B,CAC/B,CAAC;IACA,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC;CAAG;AA4BL,MAAM,kCAAkC,GAAG,MAAM,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAA;AACnG,MAAM,uBAAuB,GAAG,MAAM,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAA;AAE7E,MAAM,mBAAmB,GAAiD;IACxE,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACxE,6BAA6B,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACtE,6BAA6B,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;CACtE,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAA8B,EAAU,EAAE,CAC9D,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,EAAE,CAAA;AAEhD,MAAM,mBAAmB,GAAG,CAAC,KAA8B,EAA6B,EAAE,CACxF,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAA;AAEnD,MAAM,gBAAgB,GAAG,CAAC,QAAgD,EAAsB,EAAE,CAChG,QAAQ,EAAE,QAAQ,CAAA;AAEpB,MAAM,cAAc,GAAG,CACrB,QAAoC,EACpC,KAAoC,EACpC,QAAgD,EACpB,EAAE;IAC9B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAC3C,OAAO,0BAA0B,CAAC,IAAI,CAAC;QACrC,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC/C,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;KACvE,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CACtB,MAAc,EACd,QAAoC,EACR,EAAE,CAC9B,0BAA0B,CAAC,IAAI,CAAC;IAC9B,aAAa,EAAE,KAAK;IACpB,MAAM,EAAE,SAAS;IACjB,MAAM;IACN,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3E,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;CACtE,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,KAA8B,EACF,EAAE;IAC9B,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,0BAA0B,CAAC,IAAI,CAAC;YACrC,aAAa,EAAE,IAAI;YACnB,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,kCAAkC;SACjE,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;IACjD,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACjE,OAAO,0BAA0B,CAAC,IAAI,CAAC;YACrC,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,0CAA0C;SACzE,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACxF,OAAO,0BAA0B,CAAC,IAAI,CAAC;YACrC,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,6CAA6C,KAAK,CAAC,cAAc,oBAAoB;SACpH,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC3F,OAAO,0BAA0B,CAAC,IAAI,CAAC;YACrC,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,6CAA6C,KAAK,CAAC,cAAc,8CAA8C;SAC9I,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,0BAA0B,CAAC,IAAI,CAAC;QACrC,aAAa,EAAE,KAAK;QACpB,MAAM,EAAE,SAAS;QACjB,MAAM,EACJ,GAAG,YAAY,CAAC,KAAK,CAAC,kCAAkC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,MAAM,qBAAqB,cAAc,GAAG;KAClI,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CACvB,MAAc,EACd,QAAiB,EACjB,KAAe,EACe,EAAE,CAChC,4BAA4B,CAAC,IAAI,CAAC;IAChC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/C,MAAM;IACN,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;CAC1C,CAAC,CAAA;AAEJ,MAAM,aAAa,GAAG,CACpB,OAAoC,EACpC,WAAmB,EACY,EAAE,CACjC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAA+B,EAAE,CACnD,MAAM,CAAC,IAAI,KAAK,mBAAmB,IAAI,MAAM,CAAC,WAAW,KAAK,WAAW,CAC1E,CAAA;AAEH,MAAM,iBAAiB,GAAG,CACxB,OAAoC,EACpC,QAAgB,EACe,EAAE,CACjC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAA+B,EAAE,CACnD,MAAM,CAAC,IAAI,KAAK,mBAAmB,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,CAC9D,CAAA;AAEH,MAAM,gBAAgB,GAAG,CAAC,OAAoC,EAAmC,EAAE,CACjG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAiC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAA;AAEhG,MAAM,CAAC,MAAM,yCAAyC,GAAG,MAAM,CAAC,EAAE,CAChE,2CAA2C,CAC5C,CAAC,QAAQ,CAAC,EAAC,QAAyB,EAAE,OAAoC;IACzE,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACvD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CACd,cAAc,aAAa,CAAC,EAAE,gBAAgB,aAAa,CAAC,WAAW,oCAAoC,QAAQ,CAAC,IAAI,GAAG,EAC3H,aAAa,CAAC,EAAE,CACjB,CACF,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CAAC,iDAAiD,QAAQ,CAAC,IAAI,EAAE,CAAC,CACnF,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC9C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CAAC,qDAAqD,CAAC,CACxE,CAAA;IACH,CAAC;IAED,OAAO,6BAA6B,CAAC,IAAI,CAAC;QACxC,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,cAAc,EAAE,QAAQ,CAAC,OAAO;QAChC,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,WAAW,EAAE,SAAS,CAAC,QAAQ;QAC/B,cAAc,EAAE,YAAY,CAAC,EAAE;QAC/B,gBAAgB,EAAE,YAAY,CAAC,UAAU;QACzC,SAAS,EAAE,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,OAAO;QAC3C,GAAG,CAAC,YAAY,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC;QACzF,mBAAmB,EAAE,YAAY,CAAC,KAAK,IAAI,KAAK;KACjD,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAG,MAAM,CAAC,EAAE,CAC9D,yCAAyC,CAC1C,CAAC,QAAQ,CAAC,EAAC,QAAgC,EAAE,MAAqB;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,YAAY,2BAA2B,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1G,OAAO,KAAK,CAAC,CAAC,yCAAyC,CACrD,eAAe,CAAC,IAAI,CAAC;QACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,MAAM;QACd,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;KACvD,CAAC,EACF,MAAM,CAAC,OAAO,CACf,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,MAAc,EAAW,EAAE;IAC/D,MAAM,IAAI,GAAG,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,WAAW,EAAE,CAAA;IACjD,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACpF,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,MAAuF,EAAU,EAAE;IAC9H,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;SAC/C,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,KAAoC,EAAe,EAAE,CAC3E,WAAW,CAAC,IAAI,CAAC;IACf,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE;QACJ,MAAM;QACN,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,EAAE;QAC9C,SAAS;QACT,YAAY;QACZ,KAAK,CAAC,WAAW;KAClB;IACD,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;CAChB,CAAC,CAAA;AAEJ,MAAM,wBAAwB,GAAG,CAAC,KAAoC,EAAe,EAAE,CACrF,WAAW,CAAC,IAAI,CAAC;IACf,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE;QACJ,SAAS;QACT,MAAM;QACN,KAAK,CAAC,SAAS;QACf,QAAQ;QACR,KAAK,CAAC,gBAAgB;QACtB,QAAQ;QACR,6BAA6B;KAC9B;IACD,WAAW,EAAE,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IAC7E,WAAW,EAAE,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;CAC9E,CAAC,CAAA;AAEJ,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAe,EAAE,CACzD,WAAW,CAAC,IAAI,CAAC;IACf,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC;IACpC,GAAG,EAAE,IAAI;IACT,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;CAChB,CAAC,CAAA;AAEJ,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAe,EAAE,CACvD,WAAW,CAAC,IAAI,CAAC;IACf,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC;IAC3C,GAAG,EAAE,IAAI;IACT,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;CAChB,CAAC,CAAA;AAEJ,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,QAA4B,EAAe,EAAE,CAChF,WAAW,CAAC,IAAI,CAAC;IACf,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,QAAQ,KAAK,SAAS;QAC1B,CAAC,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC;QAC5B,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,QAAQ,QAAQ,EAAE,iBAAiB,CAAC;IACnD,GAAG,EAAE,IAAI;IACT,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;CAChB,CAAC,CAAA;AAEJ,MAAM,yBAAyB,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EAChF,KAAoC,EACpC,MAAc;IAEd,MAAM,MAAM,GAAY,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QACxC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC7B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,gBAAgB,CACd,wCAAwC,EACxC,KAAK,CAAC,cAAc,EACpB,KAAK,CACN;KACJ,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,kCAAkC,CAAC,MAAM,CAAC,CAAC,IAAI,CACrE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,gBAAgB,CAAC,4CAA4C,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CACpG,CACF,CAAA;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAA;AACjD,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,EACjF,KAAoC;IAEpC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;IACrE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAoC,CAAA;IAC7C,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,OAAO,SAAkC,CAAA;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CACd,iDAAiD,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAC9E,KAAK,CAAC,WAAW,CAClB,CACF,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,EAAE,CAAC,mCAAmC,CAAC,CAAC,QAAQ,CAAC,EACvG,KAAoC;IAEpC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/E,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/D,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,OAAO,SAA6C,CAAA;IACtD,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CACd,wDAAwD,mBAAmB,CAAC,MAAM,CAAC,EAAE,EACrF,KAAK,CAAC,cAAc,CACrB,CACF,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC,EACnF,KAAoC,EACpC,WAAmD,SAAS;IAE5D,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAA;IAC9D,OAAO,cAAc,CACnB,wBAAwB,CACtB,uBAAuB,CAAC,IAAI,CAAC;QAC3B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,GAAG;QACH,MAAM;KACP,CAAC,CACH,EACD,KAAK,EACL,QAAQ,CACT,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAA2B,EAAE,CAC5E,MAAM,CAAC,eAAe,IAAI,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAE/D,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAU,EAAE,CAC3D,MAAM,CAAC,QAAQ,YAAY,oCAAoC;IAC7D,CAAC,CAAC,sCAAsC;IACxC,CAAC,CAAC,6BAA6B,CAAA;AAEnC,MAAM,2BAA2B,GAAG,MAAM,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,EACpF,QAAyB,EACzB,OAAoC,EACpC,QAAoC;IAEpC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,yCAAyC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACvF,OAAO,KAAK,CAAC,CAAC,uBAAuB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;AAC9D,CAAC,CAAC,CAAA;AAcF,MAAM,wBAAwB,GAAG,CAAC,QAAoC,EAA6B,EAAE,CAAC,CAAC;IACrG,IAAI,EAAE,SAAS;IACf,QAAQ;CACT,CAAC,CAAA;AAEF,MAAM,yBAAyB,GAAG,CAChC,QAAyB,EACzB,OAAoC,EACpC,QAAoC,EACT,EAAE,CAAC,CAAC;IAC/B,IAAI,EAAE,UAAU;IAChB,QAAQ;IACR,OAAO;IACP,QAAQ;CACT,CAAC,CAAA;AAEF,MAAM,0BAA0B,GAAG,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAClF,QAAoC,EACpC,MAAqB,EACrB,IAAY;IAEZ,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,4BAA4B,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC3E,OAAO,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE;QACzD,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC;KACnC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,KAAa,EAA8D,EAAE;IACpH,MAAM,WAAW,GAAG,WAAW,CAAA;IAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;IACnD,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,OAAO,CAAC;YACpB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;YACrC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;SACxD,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAChB,gBAAgB,CAAC,GAAG,KAAK,kDAAkD,CAAC,CAC7E,CAAA;AACH,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CACrB,GAAW,EACX,KAAoB,EACA,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA;IACpD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAC3D,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,MAAc,EAAyB,EAAE,CAC5D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAEpF,MAAM,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC,EAC5E,IAAY,EACZ,QAAgB,EAChB,WAA+B,EAC/B,iBAA0B;IAE1B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAA;IAC3E,MAAM,IAAI,GAAG,WAAW,KAAK,SAAS,IAAI,CAAC,iBAAiB;QAC1D,CAAC,CAAC,CAAC,WAAW,CAAC;QACf,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAA;YACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;YAC1E,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CAAC,oCAAoC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CACpF,CAAA;YACH,CAAC;YACD,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC9C,OAAO,WAAW,KAAK,SAAS;gBAC9B,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,WAAW,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;IACJ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC1C,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAClE,IAAY,EACZ,QAAgC,EAChC,GAAgB;IAEhB,OAAO,KAAK,CAAC,CAAC,qBAAqB,CACjC,eAAe,CAAC,IAAI,CAAC;QACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,GAAG,CAAC,GAAG;KACb,CAAC,EACF,IAAI,CACL,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,qBAAqB,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EACxE,QAA+B,EAC/B,MAAqB,EACrB,IAAY;IAEZ,MAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,GAAG,EAAE;KACxF,CAAA;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,0BAA0B,CAChD,IAAI,EACJ,QAAQ,CAAC,WAAW,IAAI,cAAc,EACtC,6BAA6B,CAC9B,CAAA;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,YAAY,CAAA;IACxD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,IAAI,IAAI,CAAA;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;IACvG,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,IAAI,iBAAiB,EAAE,CAAC;YACpD,OAAO,wBAAwB,CAC7B,eAAe,CAAC,eAAe,QAAQ,CAAC,GAAG,0BAA0B,EAAE,QAAQ,CAAC,CACjF,CAAA;QACH,CAAC;QACD,OAAO,wBAAwB,CAC7B,eAAe,CAAC,qEAAqE,EAAE,QAAQ,CAAC,CACjG,CAAA;IACH,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CAAC,+BAA+B,WAAW,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAClH,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;IAC3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,wBAAwB,CAC7B,eAAe,CAAC,qEAAqE,EAAE,QAAQ,CAAC,CACjG,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC/D,OAAO,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACtE,CAAC,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EACtE,MAAc,EACd,QAAgB;IAEhB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAA;IAC3E,MAAM,UAAU,GAAuB,EAAE,CAAA;IACzC,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;AACvF,CAAC,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,EAChE,IAAY,EACZ,QAAgB;IAEhB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAA;IACxE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CAAC,0BAA0B,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAC1E,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACrE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;AACpB,CAAC,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,CAAC,OAAe,EAAsB,EAAE;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACzD,MAAM,KAAK,GAAG,6CAA6C,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3E,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IACvB,MAAM,eAAe,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;IAC1C,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC1D,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,eAAe,IAAI,YAAY;KAC1C,CAAA;AACH,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAU,EAAE;IAC7C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,CAAC,CAAA;QACV,KAAK,OAAO;YACV,OAAO,CAAC,CAAA;QACV,KAAK,OAAO;YACV,OAAO,CAAC,CAAA;QACV,KAAK,MAAM;YACT,OAAO,CAAC,CAAA;IACZ,CAAC;AACH,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAE,KAAkB,EAAe,EAAE,CACxE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AAEjD,MAAM,WAAW,GAAG,CAAC,IAAmC,EAAE,MAA0B,EAAW,EAAE;IAC/F,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QACzD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAA;AAC/D,CAAC,CAAA;AAED,MAAM,8BAA8B,GAAG,CACrC,OAAe,EACf,KAAmD,EACtC,EAAE;IACf,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IACnC,IAAI,IAAI,GAAgB,MAAM,CAAA;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9B,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAClE,IAAY,EACZ,QAA4B;IAE5B,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7E,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CAAC,mBAAmB,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CACnE,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM;SACjB,KAAK,CAAC,MAAM,CAAC;SACb,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SAChC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC5C,CAAC,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,CACxB,OAAe,EACf,IAAiC,EACjC,KAAa,EACwC,EAAE;IACvD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC1C,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,KAAK,kCAAkC,CAAC,CAAC,CAAA;IAClF,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IAClD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,YAAY,OAAO,IAAI,GAAG,CAAC,CAAC,CAAA;AACzF,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,CAC9B,QAA+B,EAC/B,KAAmD,EACtC,EAAE;IACf,IAAI,IAAI,GAAgB,MAAM,CAAA;IAC9B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,8BAA8B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,kCAAkC,GAAG,MAAM,CAAC,EAAE,CAAC,oCAAoC,CAAC,CAAC,QAAQ,CAAC,EAClG,QAA4C,EAC5C,MAAqB,EACrB,IAAY;IAEZ,MAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,MAAM,EAAE,aAAa;KACtB,CAAA;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,YAAY,CAAA;IACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,0BAA0B,CAChD,IAAI,EACJ,QAAQ,CAAC,WAAW,IAAI,cAAc,EACtC,6BAA6B,CAC9B,CAAA;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,wBAAwB,CAAC,eAAe,CAAC,yDAAyD,EAAE,QAAQ,CAAC,CAAC,CAAA;IACvH,CAAC;IACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,IAAI,mBAAmB,CAAC,CAAA;IAC5F,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,wBAAwB,CAAC,eAAe,CAAC,gDAAgD,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC9G,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,EAAE,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAA;IACvD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAA;IACtI,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAC3C,eAAe,CAAC,IAAI,CAAC;QACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,4BAA4B,CAAC,WAAW,EAAE,WAAW,CAAC;KAC5D,CAAC,EACF,IAAI,CACL,CAAA;IACD,OAAO,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACtE,CAAC,CAAC,CAAA;AAEF,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAC5D,IAAY,EACZ,QAAoC;IAEpC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,kBAAkB,CAAA;IAC1D,KAAK,CAAC,CAAC,gCAAgC,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAA;IAC/E,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,0BAA0B,CAChD,IAAI,EACJ,QAAQ,CAAC,WAAW,IAAI,cAAc,EACtC,6BAA6B,CAC9B,CAAA;IACD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAC7D,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAgB,EAAE,CAAC,CAAC,CACtD,CAAA;IACD,MAAM,KAAK,GAA6B,EAAE,CAAA;IAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5E,KAAK,CAAC,CAAC,gCAAgC,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;QACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,IAAI,CACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,gBAAgB,CAAC,sCAAsC,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CACpG,CACF,CAAA;QACD,MAAM,MAAM,GAAY,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACxC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC/B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,gBAAgB,CACd,uBAAuB,KAAK,qBAAqB,EACjD,SAAS,EACT,KAAK,CACN;SACJ,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,CACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,gBAAgB,CAAC,uBAAuB,KAAK,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAC9E,CACF,CAAA;QACD,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ;QACR,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,SAAS;QACT,KAAK;KACN,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAuC,EAAe,EAAE;IACjF,IAAI,IAAI,GAAgB,MAAM,CAAA;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAA;QAC3D,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,0BAA0B,GAAG,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAClF,QAAoC,EACpC,MAAqB,EACrB,IAAY;IAEZ,MAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,MAAM,EAAE,QAAQ,CAAC,SAAS,IAAI,kBAAkB;KACjD,CAAA;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAA;IACrC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,wBAAwB,CAAC,eAAe,CAAC,0CAA0C,QAAQ,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IACxH,CAAC;IACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACjD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,wBAAwB,CAAC,eAAe,CAAC,4BAA4B,QAAQ,CAAC,IAAI,sBAAsB,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7H,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAA;IAC5F,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,YAAY,CAAA;IACxD,KAAK,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAA;IAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAC3C,eAAe,CAAC,IAAI,CAAC;QACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,4BAA4B,CAAC,WAAW,EAAE,WAAW,CAAC;KAC5D,CAAC,EACF,IAAI,CACL,CAAA;IACD,OAAO,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACtE,CAAC,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAG,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,EAC1E,MAAqB,EACrB,OAAe,GAAG;IAElB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC3C,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,4BAA4B;YAC/B,OAAO,KAAK,CAAC,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QAClE,KAAK,uBAAuB;YAC1B,OAAO,KAAK,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QAC7D,KAAK,oCAAoC;YACvC,OAAO,KAAK,CAAC,CAAC,kCAAkC,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QAC1E,KAAK,4BAA4B;YAC/B,OAAO,KAAK,CAAC,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IACpE,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAC7E,MAAqB,EACrB,OAAe,GAAG;IAElB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC9D,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC,QAAQ,CAAA;QAC5B,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,CAAC,2BAA2B,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC3G,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,EAC/F,MAAqB,EACrB,OAAe,GAAG;IAElB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,CAAC,CAAC,QAAQ,YAAY,0BAA0B,CAAC,EAAE,CAAC;QACtD,OAAO,eAAe,CAAC,yDAAyD,EAAE;YAChF,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,MAAM,EAAE,iBAAiB;SAC1B,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC1D,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,gBAAgB,CAAC,yCAAyC,WAAW,CAAC,WAAW,OAAO,WAAW,CAAC,SAAS,GAAG,CAAC,CAClH,CAAA;IACH,CAAC;IACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACjD,OAAO,0BAA0B,CAAC,IAAI,CAAC;QACrC,aAAa,EAAE,IAAI,KAAK,MAAM;QAC9B,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QAC7C,MAAM,EAAE,IAAI,KAAK,MAAM;YACrB,CAAC,CAAC,4BAA4B,WAAW,CAAC,WAAW,sBAAsB;YAC3E,CAAC,CAAC,4BAA4B,WAAW,CAAC,WAAW,cAAc,IAAI,WAAW;QACpF,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,MAAM,EAAE,WAAW,CAAC,SAAS;KAC9B,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAoC,EAAU,EAAE;IAC3F,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,QAAQ,CAAC,QAAQ,EAAE,CAAA;IACxF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAA;IAChG,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS;QACzF,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,YAAY,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAA;IACjE,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,QAAQ,CAAC,SAAS,EAAE,CAAA;IACvF,OAAO,8BAA8B,QAAQ,CAAC,MAAM,mBAAmB,QAAQ,CAAC,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,GAAG,WAAW,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAA;AACjL,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAoC,EAAU,EAAE,CAC3F,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA"}