@rackbops/docket-types 0.22.0 → 0.23.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.
@@ -6,8 +6,11 @@
6
6
  * carry an instruction; the most it can do here is be quoted as text.
7
7
  */
8
8
  import { clean, ZWSP } from "@rackbops/docket-core";
9
+ import { canonicalSocialUrl, isSocialPlatform, platformName, platformOf, SOCIAL_PLATFORMS, } from "./social-links.js";
9
10
  /** The cleaner lives in core, so the dispatcher's own messages use it too; re-exported here. */
10
11
  export { clean, ZWSP };
12
+ /** What a run did on one platform (0.23.0): the DM's "Social:" line is built from these. */
13
+ export const COVERAGE_STATUSES = ["searched", "empty", "unavailable", "skipped"];
11
14
  export const MAX_SUMMARY_CHARS = 1200;
12
15
  export const MAX_CLAIM_CHARS = 400;
13
16
  export const MAX_URL_CHARS = 400;
@@ -18,6 +21,13 @@ export const MAX_UNCERTAIN_CHARS = 300;
18
21
  export const MAX_BLOCKED = 6;
19
22
  export const MAX_BLOCKED_SITE_CHARS = 100;
20
23
  export const MAX_BLOCKED_WHY_CHARS = 200;
24
+ /** A post's `publishedAt` as kept: an instant, "about 2026-10-19" or "undated" all fit. */
25
+ export const MAX_PUBLISHED_CHARS = 40;
26
+ export const MAX_COVERAGE = 8;
27
+ export const MAX_COVERAGE_PLATFORM_CHARS = 30;
28
+ export const MAX_COVERAGE_NOTE_CHARS = 120;
29
+ /** The DM's "Social:" line, kept whole like the "Couldn't open:" tail, so it is bounded here. */
30
+ export const MAX_COVERAGE_LINE_CHARS = 500;
21
31
  /** Discord's DM limit is 2000 characters; the rest is headroom for the host's own framing. */
22
32
  export const MAX_MESSAGE_CHARS = 1900;
23
33
  /** The JSON schema the research run answers in: the spike's (docket-runner spike/cases.json). */
@@ -33,7 +43,27 @@ export const ANSWER_SCHEMA = {
33
43
  claim: { type: "string" },
34
44
  sources: {
35
45
  type: "array",
36
- items: { type: "string", description: "A URL you opened." },
46
+ items: {
47
+ type: "string",
48
+ description: "A URL you opened; for a post marked snippet, the post's own page.",
49
+ },
50
+ },
51
+ platform: {
52
+ type: "string",
53
+ enum: [...SOCIAL_PLATFORMS],
54
+ description: "For a finding from a social post: the platform it is on. Leave it out for a web " +
55
+ "page.",
56
+ },
57
+ publishedAt: {
58
+ type: "string",
59
+ description: "For a finding from a post: when it was published -- the instant the platform " +
60
+ 'gave, "about <date>" worked out from a relative time, or "undated".',
61
+ },
62
+ evidence: {
63
+ type: "string",
64
+ enum: ["read", "snippet"],
65
+ description: "For a finding from a post: read when you opened the transcript, the comments or " +
66
+ "the post itself; snippet when you have only its caption or a search result.",
37
67
  },
38
68
  },
39
69
  required: ["claim", "sources"],
@@ -55,6 +85,28 @@ export const ANSWER_SCHEMA = {
55
85
  required: ["site", "why"],
56
86
  },
57
87
  },
88
+ coverage: {
89
+ type: "array",
90
+ description: "When social platforms were in scope: one entry per platform, and one for Reddit; " +
91
+ "leave it out otherwise.",
92
+ items: {
93
+ type: "object",
94
+ properties: {
95
+ platform: {
96
+ type: "string",
97
+ description: "youtube, tiktok, instagram, bluesky or reddit.",
98
+ },
99
+ status: {
100
+ type: "string",
101
+ enum: [...COVERAGE_STATUSES],
102
+ description: "searched: something found; empty: nothing found; unavailable: the call failed " +
103
+ "(say which); skipped: not searched (say why).",
104
+ },
105
+ note: { type: "string", description: "A few words: what was found, or why not." },
106
+ },
107
+ required: ["platform", "status"],
108
+ },
109
+ },
58
110
  },
59
111
  required: ["summary", "findings", "uncertain"],
60
112
  };
@@ -98,10 +150,39 @@ function decodeURIComponentSafe(text) {
98
150
  function isObj(v) {
99
151
  return typeof v === "object" && v !== null && !Array.isArray(v);
100
152
  }
153
+ /**
154
+ * The platform every source of a finding is on, when they agree (0.23.0); null when any is a web
155
+ * page, or they differ.
156
+ */
157
+ function platformOfAll(sources) {
158
+ const platforms = new Set(sources.map(platformOf));
159
+ const [only] = platforms;
160
+ return platforms.size === 1 && only ? only : null;
161
+ }
162
+ /**
163
+ * A finding's post fields (0.23.0): `platform` as the run set it (one of `SOCIAL_PLATFORMS`, and
164
+ * a source is on it) or as every source's host says; with one, `publishedAt` (one line, capped)
165
+ * and `evidence` when usable. A finding on web pages alone gets none, whatever the run set.
166
+ */
167
+ function postFields(f, sources) {
168
+ const given = isSocialPlatform(f.platform) && sources.some((u) => platformOf(u) === f.platform)
169
+ ? f.platform
170
+ : null;
171
+ const platform = given ?? platformOfAll(sources);
172
+ if (!platform)
173
+ return {};
174
+ const when = typeof f.publishedAt === "string" ? clean(f.publishedAt, MAX_PUBLISHED_CHARS, true) : "";
175
+ return {
176
+ platform,
177
+ ...(when.length > 0 ? { publishedAt: when } : {}),
178
+ ...(f.evidence === "read" || f.evidence === "snippet" ? { evidence: f.evidence } : {}),
179
+ };
180
+ }
101
181
  /**
102
182
  * The answer in `value`, capped and cleaned, or null when it is not one. A claim with no usable
103
183
  * source is not a finding: it moves to `uncertain`, marked, since every claim a reader might act
104
- * on needs a source the run opened.
184
+ * on needs a source the run opened. A source on a social platform is kept as one post
185
+ * (`canonicalSocialUrl`), so a `youtu.be` link and its watch page are one (0.23.0).
105
186
  */
106
187
  export function parseAnswer(value) {
107
188
  if (!isObj(value) || typeof value.summary !== "string" || !Array.isArray(value.findings)) {
@@ -119,11 +200,18 @@ export function parseAnswer(value) {
119
200
  if (claim.length === 0)
120
201
  continue;
121
202
  const raw = Array.isArray(f.sources) ? f.sources : [];
122
- const sources = [...new Set(raw.map(safeUrl).filter((u) => u !== null))];
203
+ const sources = [
204
+ ...new Set(raw
205
+ .map(safeUrl)
206
+ .filter((u) => u !== null)
207
+ .map(canonicalSocialUrl)),
208
+ ];
123
209
  if (sources.length === 0)
124
210
  unsourced.push(`${claim} (no source given)`);
125
- else
126
- findings.push({ claim, sources: sources.slice(0, MAX_SOURCES_PER_FINDING) });
211
+ else {
212
+ const kept = sources.slice(0, MAX_SOURCES_PER_FINDING);
213
+ findings.push({ claim, sources: kept, ...postFields(f, kept) });
214
+ }
127
215
  }
128
216
  // The model's own lines come first, so the cap drops markers before them: `withBarredSites`
129
217
  // reads these lines to tell a site was not opened.
@@ -138,13 +226,49 @@ export function parseAnswer(value) {
138
226
  }
139
227
  uncertain.push(...unsourced);
140
228
  const blocked = parseBlocked(value.blocked);
229
+ const coverage = parseCoverage(value.coverage);
141
230
  return {
142
231
  summary,
143
232
  findings: findings.slice(0, MAX_FINDINGS),
144
233
  uncertain: uncertain.slice(0, MAX_UNCERTAIN),
145
234
  ...(blocked.length > 0 ? { blocked } : {}),
235
+ ...(coverage.length > 0 ? { coverage } : {}),
146
236
  };
147
237
  }
238
+ /**
239
+ * The coverage rows in `value` (0.23.0), cleaned: a lower-cased one-line platform id, a status in
240
+ * `COVERAGE_STATUSES`, a one-line note when given; the first row per platform, at most
241
+ * `MAX_COVERAGE`. A row with no platform or an unknown status is dropped; anything not a list is
242
+ * none.
243
+ */
244
+ export function parseCoverage(value) {
245
+ if (!Array.isArray(value))
246
+ return [];
247
+ const out = [];
248
+ for (const c of value) {
249
+ if (out.length >= MAX_COVERAGE)
250
+ break;
251
+ if (!isObj(c) || typeof c.platform !== "string" || typeof c.status !== "string")
252
+ continue;
253
+ const platform = clean(c.platform, MAX_COVERAGE_PLATFORM_CHARS, true).toLowerCase();
254
+ const status = COVERAGE_STATUSES.includes(c.status)
255
+ ? c.status
256
+ : null;
257
+ if (platform.length === 0 || !status || out.some((o) => o.platform === platform))
258
+ continue;
259
+ const note = typeof c.note === "string" ? clean(c.note, MAX_COVERAGE_NOTE_CHARS, true) : "";
260
+ out.push({ platform, status, ...(note.length > 0 ? { note } : {}) });
261
+ }
262
+ return out;
263
+ }
264
+ /** A claim as compared for repeats: case, spacing and a trailing stop do not count. */
265
+ export function sameClaim(claim) {
266
+ return claim
267
+ .toLowerCase()
268
+ .replace(/\s+/g, " ")
269
+ .trim()
270
+ .replace(/[.!]+$/, "");
271
+ }
148
272
  /**
149
273
  * The blocked pages in `value`, cleaned: a one-line site and reason, the URL only when `safeUrl`
150
274
  * takes it, at most `MAX_BLOCKED`. An entry with no site is dropped; anything not a list is none.
@@ -242,19 +366,49 @@ function fit(lines, max) {
242
366
  export function fitMessage(lines) {
243
367
  return fit(lines, MAX_MESSAGE_CHARS);
244
368
  }
369
+ /**
370
+ * A finding's line in a DM: the claim, for a post its platform, date and "snippet only" when it
371
+ * was not opened (0.23.0), then its first source in <...> so Discord shows the link without an
372
+ * embed.
373
+ */
374
+ export function findingLine(f) {
375
+ const parts = f.platform
376
+ ? [
377
+ platformName(f.platform),
378
+ ...(f.publishedAt ? [f.publishedAt] : []),
379
+ ...(f.evidence === "snippet" ? ["snippet only"] : []),
380
+ ]
381
+ : [];
382
+ const post = parts.length > 0 ? ` (${parts.join(", ")})` : "";
383
+ return `- ${f.claim}${post} <${f.sources[0]}>`;
384
+ }
385
+ const STATUS_WORDS = {
386
+ searched: "searched",
387
+ empty: "nothing found",
388
+ unavailable: "unavailable",
389
+ skipped: "skipped",
390
+ };
391
+ /**
392
+ * The DM's "Social:" line (0.23.0): each platform's status, with its note in brackets, in one
393
+ * line of at most `MAX_COVERAGE_LINE_CHARS`.
394
+ */
395
+ export function coverageLine(coverage) {
396
+ const items = coverage.map((c) => `${platformName(c.platform)} ${STATUS_WORDS[c.status]}${c.note ? ` (${c.note})` : ""}`);
397
+ return clean(`Social: ${items.join("; ")}.`, MAX_COVERAGE_LINE_CHARS, true);
398
+ }
245
399
  /**
246
400
  * The DM a reviewed answer goes out as, at most `MAX_MESSAGE_CHARS`. Every piece of it was
247
- * cleaned by `parseAnswer`; the title is the owner's own and is cleaned here. `tail`, when given,
248
- * goes after the reviewer's note and is kept whole: the caller bounds it (the "couldn't open" list
249
- * and the queued line, 0.9.0). Without it the DM is what it was before 0.9.0.
401
+ * cleaned by `parseAnswer`; the title is the owner's own and is cleaned here. The "Social:" line
402
+ * (0.23.0, when the answer has `coverage`), the reviewer's note and `tail` are kept whole, in
403
+ * that order: `tail`, when given, is bounded by the caller (the "couldn't open" list and the
404
+ * queued line, 0.9.0). Without coverage or a tail the DM is what it was before 0.9.0.
250
405
  */
251
406
  export function renderAnswer(title, answer, review, tail = "") {
252
407
  const lines = [`Research: ${clean(title, 200, true)}`, "", answer.summary];
253
408
  if (answer.findings.length > 0) {
254
409
  lines.push("", "Findings:");
255
- // Sources in <...> so Discord shows the link without an embed.
256
410
  for (const f of answer.findings)
257
- lines.push(`- ${f.claim} <${f.sources[0]}>`);
411
+ lines.push(findingLine(f));
258
412
  }
259
413
  if (answer.uncertain.length > 0) {
260
414
  lines.push("", "Uncertain:");
@@ -264,7 +418,8 @@ export function renderAnswer(title, answer, review, tail = "") {
264
418
  const note = review.verdict === "approve"
265
419
  ? "Checked by a reviewer run."
266
420
  : `Checked and corrected by a reviewer run (${review.problems.length} problem(s) fixed).`;
267
- const after = tail.length > 0 ? `${note}\n\n${tail}` : note;
421
+ const social = answer.coverage && answer.coverage.length > 0 ? coverageLine(answer.coverage) : "";
422
+ const after = [social, note, tail].filter((s) => s.length > 0).join("\n\n");
268
423
  return `${fit(lines, MAX_MESSAGE_CHARS - after.length - 2)}\n\n${after}`;
269
424
  }
270
425
  /** Lines fitted into at most `max` characters, whole lines dropped from the end. */
@@ -283,7 +438,7 @@ export function renderUpdate(title, update, review) {
283
438
  }
284
439
  const lines = [head, "", update.summary, "", "New or corrected:"];
285
440
  for (const f of update.findings)
286
- lines.push(`- ${f.claim} <${f.sources[0]}>`);
441
+ lines.push(findingLine(f));
287
442
  const note = review.verdict === "approve"
288
443
  ? "Checked by a reviewer run."
289
444
  : `Checked and corrected by a reviewer run (${review.problems.length} problem(s) fixed).`;
@@ -1 +1 @@
1
- {"version":3,"file":"research-answer.js","sourceRoot":"","sources":["../src/research-answer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"research-answer.js","sourceRoot":"","sources":["../src/research-answer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { type Coverage, type ResearchAnswer } from "./research-answer.js";
2
+ import { type SocialPlatform } from "./social-links.js";
3
+ /**
4
+ * Social platforms as research sources (0.23.0, docket#107; the matrix and roshne's decisions in
5
+ * docs/social-sources.md). A `web` first pass may search YouTube (Firecrawl's `youtube-com`
6
+ * provider), TikTok and Instagram (Firecrawl's `oriane` provider, an index of public posts) and
7
+ * Bluesky (its public `searchPosts` endpoint) for what people say, through the tools it already
8
+ * has: `firecrawl_scrape` takes a typed `alexandria` body in place of a `url`, and Bluesky's
9
+ * endpoint is a page WebFetch reads. So no tool, key or runner change: as with `proxy: "basic"`,
10
+ * the prompt is the only control over which provider a run calls and how often (`socialLines`,
11
+ * `socialChecks`), and plain code is the belt under it (`socialOutgoing`).
12
+ *
13
+ * The request says when (`social`: `auto`, the default, searched when the question asks what
14
+ * people recommend, think or experienced; `none`; or a list of platforms, which forces them) and
15
+ * from when (`since`). The run spends about `SOCIAL_MAX_CREDITS` Firecrawl credits at most
16
+ * (decision 4) and gets `SOCIAL_MAX_TURNS` turns (decision 6; the 1 USD cap is unchanged). A run
17
+ * on gathered pages, first or second pass, searches no platform: it cannot open pages.
18
+ *
19
+ * Reddit is never searched (roshne, 2026-11-07: "if we want to do anything with Reddit, it has to
20
+ * be done through a local PC session with me logged in"; its API is closing to outside apps and its
21
+ * terms bar scraping): every answer's `coverage` names it unavailable with `REDDIT_WHY`, whatever
22
+ * the run wrote.
23
+ */
24
+ /** What a request asks of social platforms, as `parseSocial` reads its `social` field. */
25
+ export type SocialChoice = {
26
+ mode: "auto";
27
+ } | {
28
+ mode: "none";
29
+ } | {
30
+ mode: "only";
31
+ platforms: SocialPlatform[];
32
+ };
33
+ export declare const SOCIAL_AUTO: SocialChoice;
34
+ /**
35
+ * The choice in a request's `social` field: absent, empty or `auto` is `auto`; `none` (or `off`,
36
+ * `no`) is `none`; otherwise platform names, separated by commas or spaces, each one of
37
+ * `SOCIAL_PLATFORMS` or an alias (`yt`, `insta`, `ig`, `bsky`), is `only` those. Null when a name
38
+ * is not one of them (`reddit`, `x`, a typo), so a host can refuse it at intake and say what is
39
+ * offered; at run time `socialChoice` reads such a value as `auto`.
40
+ */
41
+ export declare function parseSocial(value: unknown): SocialChoice | null;
42
+ /** The choice a run acts on: `parseSocial`, with an unreadable stored value read as `auto`. */
43
+ export declare function socialChoice(value: unknown): SocialChoice;
44
+ /** The platforms a choice searches: all four on `auto`, the list on `only`, none on `none`. */
45
+ export declare function socialPlatforms(choice: SocialChoice): readonly SocialPlatform[];
46
+ /** Decision 6: 20 turns instead of 15 when social search is on; the budget is unchanged. */
47
+ export declare const SOCIAL_MAX_TURNS = 20;
48
+ /** Decision 4: 4 YouTube calls (5 credits each), 2 Oriane calls (50 each at the default detail) ... */
49
+ export declare const SOCIAL_YOUTUBE_CALLS = 4;
50
+ export declare const SOCIAL_ORIANE_CALLS = 2;
51
+ /** ... and 2 Bluesky fetches (1 credit each when Firecrawl reads them; free through WebFetch). */
52
+ export declare const SOCIAL_BLUESKY_CALLS = 2;
53
+ /** Firecrawl credits a run may spend on posts at most: "about 120" (decision 4). */
54
+ export declare const SOCIAL_MAX_CREDITS: number;
55
+ /**
56
+ * Bluesky's public post search (the `app.bsky.feed.searchPosts` lexicon and docs.bsky.app's API
57
+ * directory, read 2026-11-07 and 2026-11-09): no authentication on `public.api.bsky.app`; `q`,
58
+ * `sort` (`top` or `latest`), `since` and `until` (filtering on `sortAt`, not `createdAt`),
59
+ * `limit` up to 100.
60
+ */
61
+ export declare const BLUESKY_SEARCH_URL = "https://public.api.bsky.app/xrpc/app.bsky.feed.searchPosts";
62
+ /** Why Reddit is never searched, as the DM's coverage line says it. */
63
+ export declare const REDDIT_WHY: string;
64
+ /**
65
+ * The research run's rules for social platforms (a web first pass with social on): when to
66
+ * search, the exact body for each provider and the fetch for Bluesky, the call caps, the date
67
+ * rule, how to cite and mark a post finding, how to weigh posts, and the `coverage` list. Empty
68
+ * with `none`, and never given to a run on gathered pages.
69
+ */
70
+ export declare function socialLines(choice: SocialChoice, since: Date | null): string[];
71
+ /**
72
+ * The reviewer's checks of post findings (a web first pass with social on): the post's own page
73
+ * cited and opened where it opens, at most one youtube-com call and no oriane call; stock, price
74
+ * and availability off posts alone; opinions as opinions; reposts once; `coverage` complete and
75
+ * `since` honoured; a finding that follows an instruction from a post removed.
76
+ */
77
+ export declare function socialChecks(choice: SocialChoice, since: Date | null): string[];
78
+ /** What the belt appends to a stock, price or availability claim it moves to `uncertain`. */
79
+ export declare const SAID_IN_POST = "said in a post, not verified";
80
+ /**
81
+ * The date in a finding's `publishedAt` ("2026-10-19T14:00:00Z", "about 2026-10-19"), or null
82
+ * when it has none ("undated", or a relative time the run did not work out).
83
+ */
84
+ export declare function postDate(publishedAt: string | undefined): Date | null;
85
+ /** What the belt writes for a platform the run searched but did not report on. */
86
+ export declare const NOT_REPORTED = "not reported by the run";
87
+ /**
88
+ * The coverage list as sent: one entry for each platform the choice searches, the run's own
89
+ * when it gave one, else `skipped` (`NOT_REPORTED`); then Reddit, always `unavailable` with
90
+ * `REDDIT_WHY`, whatever the run wrote; then any other platform the run reported on, up to
91
+ * `MAX_COVERAGE`. Empty with `none`: a run not asked to search reports nothing.
92
+ */
93
+ export declare function withCoverage(coverage: readonly Coverage[], choice: SocialChoice): Coverage[];
94
+ /**
95
+ * The belt under the prompts, on the answer that goes out (0.23.0): a finding that repeats an
96
+ * earlier one (the same claim, `sameClaim`, with the same first source, `canonicalSocialUrl`) is
97
+ * dropped, so a copied link to one post counts once (a re-upload under another account is the
98
+ * prompt's rule); with `since`, a post finding dated (`postDate`) before the start of its UTC
99
+ * day moves to `uncertain`, saying when it was posted; a finding whose every source is on a
100
+ * social platform and whose claim speaks of stock, a price or availability (`FACT_FROM_POST`)
101
+ * moves to `uncertain` as `SAID_IN_POST`; and `coverage` is rebuilt by `withCoverage`. The run's
102
+ * own `uncertain` lines come first, each moved line is cut to `MAX_UNCERTAIN_CHARS`, and past
103
+ * `MAX_UNCERTAIN` the last line says how many more were moved, so none vanishes without a trace.
104
+ * `blocked` is kept as it was. Every claim moved stays out of the findings saved, since those are
105
+ * built from this answer.
106
+ */
107
+ export declare function socialOutgoing(answer: ResearchAnswer, choice: SocialChoice, since: Date | null): ResearchAnswer;
108
+ //# sourceMappingURL=research-social.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-social.d.ts","sourceRoot":"","sources":["../src/research-social.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,QAAQ,EAIb,KAAK,cAAc,EAGpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAA;AAE1B;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,0FAA0F;AAC1F,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,cAAc,EAAE,CAAA;CAAE,CAAA;AAEjD,eAAO,MAAM,WAAW,EAAE,YAA+B,CAAA;AAczD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAa/D;AAED,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAEzD;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,cAAc,EAAE,CAG/E;AAED,4FAA4F;AAC5F,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAClC,uGAAuG;AACvG,eAAO,MAAM,oBAAoB,IAAI,CAAA;AACrC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,kGAAkG;AAClG,eAAO,MAAM,oBAAoB,IAAI,CAAA;AACrC,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,QAC6C,CAAA;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,+DAA+D,CAAA;AAE9F,uEAAuE;AACvE,eAAO,MAAM,UAAU,QAEc,CAAA;AAYrC;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,CA6C9E;AAuDD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,CAsB/E;AAyBD,6FAA6F;AAC7F,eAAO,MAAM,YAAY,iCAAiC,CAAA;AAE1D;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAWrE;AAOD,kFAAkF;AAClF,eAAO,MAAM,YAAY,4BAA4B,CAAA;AAErD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,GAAG,QAAQ,EAAE,CAiB5F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,IAAI,GAAG,IAAI,GACjB,cAAc,CAiChB"}