@substrat-run/kernel 0.142.0 → 0.144.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.
- package/dist/attachment-extractor.d.ts +0 -9
- package/dist/attachment-extractor.d.ts.map +1 -1
- package/dist/attachment-extractor.js +2 -2
- package/dist/attachment-extractor.js.map +1 -1
- package/dist/attachment-text.d.ts +0 -5
- package/dist/attachment-text.d.ts.map +1 -1
- package/dist/attachment-text.js +0 -4
- package/dist/attachment-text.js.map +1 -1
- package/dist/attribution.d.ts +0 -7
- package/dist/attribution.d.ts.map +1 -1
- package/dist/attribution.js +0 -7
- package/dist/attribution.js.map +1 -1
- package/dist/audit-outcome.d.ts +60 -2
- package/dist/audit-outcome.d.ts.map +1 -1
- package/dist/audit-outcome.js +63 -3
- package/dist/audit-outcome.js.map +1 -1
- package/dist/capability.d.ts +20 -13
- package/dist/capability.d.ts.map +1 -1
- package/dist/capability.js +76 -16
- package/dist/capability.js.map +1 -1
- package/dist/connector-calls.d.ts +0 -5
- package/dist/connector-calls.d.ts.map +1 -1
- package/dist/connector-calls.js +1 -1
- package/dist/connector-calls.js.map +1 -1
- package/dist/denial-query.d.ts +0 -14
- package/dist/denial-query.d.ts.map +1 -1
- package/dist/denial-query.js +1 -1
- package/dist/denial-query.js.map +1 -1
- package/dist/derived-handlers.d.ts +17 -0
- package/dist/derived-handlers.d.ts.map +1 -0
- package/dist/derived-handlers.js +198 -0
- package/dist/derived-handlers.js.map +1 -0
- package/dist/entity-binding.d.ts +121 -0
- package/dist/entity-binding.d.ts.map +1 -0
- package/dist/entity-binding.js +235 -0
- package/dist/entity-binding.js.map +1 -0
- package/dist/entity-grant-shape.d.ts +127 -12
- package/dist/entity-grant-shape.d.ts.map +1 -1
- package/dist/entity-grant-shape.js +399 -137
- package/dist/entity-grant-shape.js.map +1 -1
- package/dist/entity-grant.d.ts +5 -7
- package/dist/entity-grant.d.ts.map +1 -1
- package/dist/entity-grant.js +6 -7
- package/dist/entity-grant.js.map +1 -1
- package/dist/entity-state.d.ts +0 -17
- package/dist/entity-state.d.ts.map +1 -1
- package/dist/entity-state.js +2 -2
- package/dist/entity-state.js.map +1 -1
- package/dist/entity-trash.d.ts +2 -2
- package/dist/entity-trash.d.ts.map +1 -1
- package/dist/entity-trash.js +6 -6
- package/dist/entity-trash.js.map +1 -1
- package/dist/grant-scoped-read.d.ts +0 -2
- package/dist/grant-scoped-read.d.ts.map +1 -1
- package/dist/grant-scoped-read.js +2 -2
- package/dist/grant-scoped-read.js.map +1 -1
- package/dist/index.d.ts +53 -55
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -53
- package/dist/index.js.map +1 -1
- package/dist/job-run.d.ts +0 -39
- package/dist/job-run.d.ts.map +1 -1
- package/dist/job-run.js +6 -6
- package/dist/job-run.js.map +1 -1
- package/dist/list-index.d.ts +0 -45
- package/dist/list-index.d.ts.map +1 -1
- package/dist/list-index.js +2 -39
- package/dist/list-index.js.map +1 -1
- package/dist/membership-executor.d.ts +2 -1
- package/dist/membership-executor.d.ts.map +1 -1
- package/dist/membership-executor.js +1 -1
- package/dist/membership-executor.js.map +1 -1
- package/dist/migration-digest.d.ts +0 -12
- package/dist/migration-digest.d.ts.map +1 -1
- package/dist/migration-digest.js +1 -1
- package/dist/migration-digest.js.map +1 -1
- package/dist/module-erasure.d.ts +2 -1
- package/dist/module-erasure.d.ts.map +1 -1
- package/dist/module-erasure.js +12 -1
- package/dist/module-erasure.js.map +1 -1
- package/dist/module-operations.d.ts +146 -0
- package/dist/module-operations.d.ts.map +1 -0
- package/dist/module-operations.js +174 -0
- package/dist/module-operations.js.map +1 -0
- package/dist/peer.d.ts +0 -2
- package/dist/peer.d.ts.map +1 -1
- package/dist/peer.js +0 -4
- package/dist/peer.js.map +1 -1
- package/dist/platform-request-query.d.ts +6 -6
- package/dist/platform-request-query.d.ts.map +1 -1
- package/dist/platform-request-query.js +23 -7
- package/dist/platform-request-query.js.map +1 -1
- package/dist/platform-sweep.d.ts +26 -2
- package/dist/platform-sweep.d.ts.map +1 -1
- package/dist/platform-sweep.js +6 -2
- package/dist/platform-sweep.js.map +1 -1
- package/dist/refusal-query.d.ts +0 -11
- package/dist/refusal-query.d.ts.map +1 -1
- package/dist/refusal-query.js +1 -1
- package/dist/refusal-query.js.map +1 -1
- package/dist/refusals.d.ts +1 -3
- package/dist/refusals.d.ts.map +1 -1
- package/dist/refusals.js +0 -2
- package/dist/refusals.js.map +1 -1
- package/dist/row-decode.d.ts +16 -1
- package/dist/row-decode.d.ts.map +1 -1
- package/dist/row-decode.js +18 -6
- package/dist/row-decode.js.map +1 -1
- package/dist/scope-copy-ledger.d.ts +0 -2
- package/dist/scope-copy-ledger.d.ts.map +1 -1
- package/dist/scope-copy-ledger.js +1 -1
- package/dist/scope-copy-ledger.js.map +1 -1
- package/dist/scope-host.d.ts +47 -101
- package/dist/scope-host.d.ts.map +1 -1
- package/dist/scope-host.js +0 -17
- package/dist/scope-host.js.map +1 -1
- package/dist/scope-lifecycle.d.ts +0 -21
- package/dist/scope-lifecycle.d.ts.map +1 -1
- package/dist/scope-lifecycle.js +1 -1
- package/dist/scope-lifecycle.js.map +1 -1
- package/dist/scope-role-admin.d.ts +0 -6
- package/dist/scope-role-admin.d.ts.map +1 -1
- package/dist/scope-role-admin.js +1 -1
- package/dist/scope-role-admin.js.map +1 -1
- package/dist/search-index.d.ts +0 -23
- package/dist/search-index.d.ts.map +1 -1
- package/dist/search-index.js +2 -24
- package/dist/search-index.js.map +1 -1
- package/dist/spine-restore.d.ts +0 -22
- package/dist/spine-restore.d.ts.map +1 -1
- package/dist/spine-restore.js +2 -2
- package/dist/spine-restore.js.map +1 -1
- package/dist/sql-identifier.d.ts +3 -0
- package/dist/sql-identifier.d.ts.map +1 -1
- package/dist/sql-identifier.js +2 -0
- package/dist/sql-identifier.js.map +1 -1
- package/dist/sql-limits.d.ts +4 -0
- package/dist/sql-limits.d.ts.map +1 -1
- package/dist/sql-limits.js +4 -0
- package/dist/sql-limits.js.map +1 -1
- package/dist/subject-redaction.d.ts +0 -38
- package/dist/subject-redaction.d.ts.map +1 -1
- package/dist/subject-redaction.js +4 -4
- package/dist/subject-redaction.js.map +1 -1
- package/dist/system-switch-record.d.ts +0 -4
- package/dist/system-switch-record.d.ts.map +1 -1
- package/dist/system-switch-record.js +2 -2
- package/dist/system-switch-record.js.map +1 -1
- package/dist/system-switch.d.ts +5 -23
- package/dist/system-switch.d.ts.map +1 -1
- package/dist/system-switch.js +8 -1
- package/dist/system-switch.js.map +1 -1
- package/dist/table-ownership.d.ts +0 -32
- package/dist/table-ownership.d.ts.map +1 -1
- package/dist/table-ownership.js +5 -5
- package/dist/table-ownership.js.map +1 -1
- package/dist/testing.d.ts +17 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +15 -0
- package/dist/testing.js.map +1 -0
- package/dist/vertical-events.d.ts +1 -7
- package/dist/vertical-events.d.ts.map +1 -1
- package/dist/vertical-events.js +2 -10
- package/dist/vertical-events.js.map +1 -1
- package/package.json +6 -2
- package/dist/connect-state.d.ts +0 -103
- package/dist/connect-state.d.ts.map +0 -1
- package/dist/connect-state.js +0 -128
- package/dist/connect-state.js.map +0 -1
|
@@ -36,13 +36,25 @@ import type { SwitchSql } from './system-switch.js';
|
|
|
36
36
|
* the principal; a table column naming the principal), and a person is marked only on their
|
|
37
37
|
* own record, and only when they hold a row there (live or tombstoned) for some key of the
|
|
38
38
|
* shape — evidence they were given it. Someone `ctx.grant`ed even the whole shape on another
|
|
39
|
-
* person's record is never marked. A shape with no `holder` gets no backfill.
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
39
|
+
* person's record is never marked. A shape with no `holder` gets no backfill. It is read in
|
|
40
|
+
* windows like the walks (#2154): each pass reads at most its read budget of rows, in an index
|
|
41
|
+
* order, marks at most its write budget, and hands back the last row it read as the cursor's
|
|
42
|
+
* `row`, so the next pass seeks past it rather than re-reading from the start. A record tuple
|
|
43
|
+
* (`shape:<type>`, `shape-backfilled`, `scope:<id>`) ends it once a read reaches the end of the
|
|
44
|
+
* range, and never before. A table holder's read is keyed on `idColumn` and then the row's own
|
|
45
|
+
* identity (its `rowid`, or a `WITHOUT ROWID` table's primary key), because nothing makes
|
|
46
|
+
* `idColumn` unique or the principal non-NULL, and a key that ties lets a window's edge skip a row.
|
|
47
|
+
*
|
|
48
|
+
* The cut-off is the cursor. Evidence that lands behind it while the backfill runs (a direct
|
|
49
|
+
* grant of a shape key to the person on their own record, for `'self'` or a table holder) is not
|
|
50
|
+
* marked, and once the record is written nothing is: the same accepted gap as a grant landing
|
|
51
|
+
* after the record. There is deliberately no confirming walk, as a retirement has: it would
|
|
52
|
+
* double every first backfill's reads to catch a grant that a shape grant should have made. For
|
|
53
|
+
* `'grantee'` nothing can land at all, since the first pass records the grantee keys and the
|
|
54
|
+
* tuple writer refuses them to every other grant from then on.
|
|
43
55
|
* - `holder: 'grantee'` (#2083), for a record that names no principal (a portal customer, a
|
|
44
56
|
* contact): whoever holds a live current or retired key of the shape on such an entity was given it.
|
|
45
|
-
* Each
|
|
57
|
+
* Each reconcile records current and retired keys (`shape-grantee-key`), and the explicit tuple
|
|
46
58
|
* writer makes non-shape grants refuse them on that entity type. A tuple from before the
|
|
47
59
|
* first such pass cannot be told apart. A marker already written by a shape grant persists
|
|
48
60
|
* through retirement, so its holder receives the new keys even if their old key was K alone.
|
|
@@ -51,8 +63,36 @@ import type { SwitchSql } from './system-switch.js';
|
|
|
51
63
|
* record. A sharing shape, which people reach through `ctx.grant` (todo's `list`), is skipped
|
|
52
64
|
* whole, backfill included, so a sharee is never marked a holder.
|
|
53
65
|
*/
|
|
66
|
+
/**
|
|
67
|
+
* The index every marker walk reads (#2083): markers only, in `(object, subject)` order, so one
|
|
68
|
+
* shape's markers are one range (`<type>:` up to `<type>;`) and a pass's cursor is a seek into
|
|
69
|
+
* it. Without it a pass scanned the whole `_substrat_tuples` table, even when it had nothing to
|
|
70
|
+
* do. Partial, so it costs a row per marker and nothing for any other tuple. SQLite uses a
|
|
71
|
+
* partial index only where it can prove the index's WHERE from the query's, so the walks write the
|
|
72
|
+
* relation as this same literal: proved from the text alone, with no dependence on SQLite
|
|
73
|
+
* re-planning once a parameter is bound. In KERNEL_DDL on both adapters, which every wake re-runs,
|
|
74
|
+
* so an existing scope builds it on its next wake.
|
|
75
|
+
*/
|
|
76
|
+
export declare const SHAPE_MARKER_INDEX_DDL = "CREATE INDEX IF NOT EXISTS _substrat_tuples_shape_marker ON _substrat_tuples (object, subject) WHERE relation = 'bootstrap'";
|
|
54
77
|
/** Holders topped up per pass — one transaction each, so a large scope never holds one long. */
|
|
55
78
|
export declare const SHAPE_TOP_UP_BATCH = 500;
|
|
79
|
+
/**
|
|
80
|
+
* Rows a pass may READ, per row of work it may write: markers on a walk, and the tuples or table
|
|
81
|
+
* rows the backfill reads for candidates (#2154). The budget bounds writes, but finding
|
|
82
|
+
* the holders who need one means reading past the ones who do not, and on a scope where nobody
|
|
83
|
+
* does (the common reconcile: nothing changed) that is every marker. Ten per row keeps a pass at
|
|
84
|
+
* 5000 index rows by default, short on any scope, while a rollout still spends most of each pass
|
|
85
|
+
* writing. A pass that reads its window without filling its budget hands back a cursor, and the
|
|
86
|
+
* next pass reads on from there.
|
|
87
|
+
*/
|
|
88
|
+
export declare const SHAPE_MARKER_READS_PER_ROW = 10;
|
|
89
|
+
/**
|
|
90
|
+
* Confirming walks that may take keys, per shape per reconcile, before its retirement is left open
|
|
91
|
+
* for the next reconcile. Each one that takes keys starts another, so a steady stream of grants of
|
|
92
|
+
* a retired key landing ahead of the walk would otherwise keep a single reconcile walking forever.
|
|
93
|
+
* Left open, the retirement keeps no record, so the next reconcile simply runs it again.
|
|
94
|
+
*/
|
|
95
|
+
export declare const SHAPE_RETIRE_CONFIRMS_MAX = 3;
|
|
56
96
|
/** The largest batch a caller may ask for: past this a pass is the long transaction it exists to avoid. */
|
|
57
97
|
export declare const SHAPE_TOP_UP_BATCH_MAX = 5000;
|
|
58
98
|
/** `batch`, or `validation_failed`: a pass size is a positive integer no larger than the max. */
|
|
@@ -64,6 +104,54 @@ export declare function shapeTopUpBatch(batch?: number): number;
|
|
|
64
104
|
* transaction, so the marker and its keys land together or not at all.
|
|
65
105
|
*/
|
|
66
106
|
export declare function grantEntityShapeIn(db: SwitchSql, principal: PrincipalId, entity: EntityRef, permissions: readonly string[]): void;
|
|
107
|
+
/**
|
|
108
|
+
* Where a pass stopped, so the next pass of the same reconcile starts there instead of at the
|
|
109
|
+
* first marker (#2083): the shape (its index in `shapes`), the step of it, and for a marker walk
|
|
110
|
+
* the last marker it read. Without it every pass re-read the holders earlier passes had already
|
|
111
|
+
* finished, and a rollout cost passes × markers.
|
|
112
|
+
*
|
|
113
|
+
* Skipping what lies behind it is safe because a walk leaves every marker it passes finished:
|
|
114
|
+
* topped up (each key now has a row) or with its retired keys tombstoned. A marker written behind
|
|
115
|
+
* it mid-run is complete when a shape grant writes it, and the backfill finishes before its
|
|
116
|
+
* shape's walks begin. The exception is a shape grant by an OLDER deployment, carrying the shape
|
|
117
|
+
* as it was, landing behind the cursor while the reconcile runs:
|
|
118
|
+
*
|
|
119
|
+
* - Missing a key the shape gained: the top-up keeps no record, so the next reconcile's top-up
|
|
120
|
+
* reaches that holder.
|
|
121
|
+
* - Holding a key the shape retired: a retirement ends in a run-once record, so a holder it never
|
|
122
|
+
* saw would never be reached. The first walk therefore never writes that record. Once it reaches
|
|
123
|
+
* the last marker, a CONFIRMING walk starts again from the first (`confirm`), and the record is
|
|
124
|
+
* written only when a confirming walk reaches the last marker having taken nothing; one that
|
|
125
|
+
* took keys starts another, up to `SHAPE_RETIRE_CONFIRMS_MAX`; past that the retirement is left
|
|
126
|
+
* open for the next reconcile. A grant landing behind the confirming walk itself is the gap
|
|
127
|
+
* left, the same as one landing after the retirement finished.
|
|
128
|
+
*/
|
|
129
|
+
export interface ShapeCursor {
|
|
130
|
+
shape: number;
|
|
131
|
+
step: 'backfill' | 'retire' | 'topUp';
|
|
132
|
+
/** The last marker a walk read; `null` resumes the step from its start. */
|
|
133
|
+
marker: {
|
|
134
|
+
object: string;
|
|
135
|
+
subject: string;
|
|
136
|
+
} | null;
|
|
137
|
+
/**
|
|
138
|
+
* The backfill only (#2154): the sort key of the last row its read reached, `[object, relation,
|
|
139
|
+
* subject]` of a tuple for a `'self'` or `'grantee'` holder, `[id, rowid]` for a table holder
|
|
140
|
+
* (`[id, …primary key]` for a `WITHOUT ROWID` table). Absent
|
|
141
|
+
* or `null` reads the backfill from its start, which is always safe: a pair it already marked
|
|
142
|
+
* is no longer a candidate, so a cursor from before this field (or one a rollback ignores) only
|
|
143
|
+
* costs a re-read.
|
|
144
|
+
*/
|
|
145
|
+
row?: readonly (string | number)[] | null;
|
|
146
|
+
/**
|
|
147
|
+
* A confirming retire walk only: whether it has taken nothing so far, and how many confirming
|
|
148
|
+
* walks before it, on this shape in this reconcile, took keys.
|
|
149
|
+
*/
|
|
150
|
+
confirm?: {
|
|
151
|
+
clean: boolean;
|
|
152
|
+
count: number;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
67
155
|
/** Where a pass runs and how its events are stamped — the facts only the adapter holds. */
|
|
68
156
|
export interface ShapePass {
|
|
69
157
|
tenantId: string;
|
|
@@ -73,22 +161,49 @@ export interface ShapePass {
|
|
|
73
161
|
now: string;
|
|
74
162
|
/** Rows of work at most: a backfill mark or a holder topped up each count one. */
|
|
75
163
|
limit: number;
|
|
164
|
+
/** The previous pass's `next`; absent or `null` starts the reconcile from the beginning. */
|
|
165
|
+
after?: ShapeCursor | null;
|
|
76
166
|
/** The adapter's monotonic event-id mint, given the instant in ms. */
|
|
77
167
|
mintEventId: (ms: number) => string;
|
|
78
168
|
/** The deploy writing the events, for the outbox `version` column. */
|
|
79
169
|
version: string | null;
|
|
80
170
|
}
|
|
81
171
|
/**
|
|
82
|
-
* One pass of the reconcile over one scope, at most `limit` rows of work
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
172
|
+
* One pass of the reconcile over one scope, at most `limit` rows of work and
|
|
173
|
+
* `limit × SHAPE_MARKER_READS_PER_ROW` rows read (markers, and the backfill's tuples or table
|
|
174
|
+
* rows): backfill marks for any shape whose backfill
|
|
175
|
+
* is not done here, then holders whose retired keys are taken back, each with its
|
|
176
|
+
* `entity.grants-retired` event, then holders topped up, each with its `entity.grants-topped-up`
|
|
177
|
+
* event. `next` is `null` once the scope is done; otherwise the caller runs another pass with it
|
|
178
|
+
* as `after`. `retirementsLeftOpen` counts the shapes whose retirement this pass gave up on at
|
|
179
|
+
* `SHAPE_RETIRE_CONFIRMS_MAX`, for the next reconcile to run again. Run it inside ONE
|
|
180
|
+
* transaction, so the keys and their events commit together. Re-running a finished scope writes
|
|
181
|
+
* nothing.
|
|
88
182
|
*/
|
|
89
183
|
export declare function topUpEntityGrantShapes(db: SwitchSql, pass: ShapePass): {
|
|
90
184
|
toppedUp: number;
|
|
91
185
|
retired: number;
|
|
92
|
-
|
|
186
|
+
retirementsLeftOpen: number;
|
|
187
|
+
next: ShapeCursor | null;
|
|
93
188
|
};
|
|
189
|
+
/**
|
|
190
|
+
* A BINDING shape's record (#1686), on the scope's tuple spine beside the grantee keys: which
|
|
191
|
+
* table column names the record's person (`<table>.<idColumn>.<principalColumn>`), the key that
|
|
192
|
+
* lets someone bind or unbind them, and the shape's current keys — what a binding invite's claim
|
|
193
|
+
* gives. The claim and an unbind read these, never the vertical's code: the shape is the reviewed
|
|
194
|
+
* registry the platform last reconciled this scope with. Each identifier is a SQL identifier, so
|
|
195
|
+
* `.` cannot occur inside one.
|
|
196
|
+
*/
|
|
197
|
+
export declare const BIND_HOLDER_RELATION = "shape-bind-holder";
|
|
198
|
+
export declare const BIND_PERMISSION_RELATION = "shape-bind-permission";
|
|
199
|
+
export declare const BIND_KEY_RELATION = "shape-bind-key";
|
|
200
|
+
/**
|
|
201
|
+
* `(shape:<type>, shape-bound, bound)`: this scope has declared a binding for `<type>` (#1686).
|
|
202
|
+
* Written by the first reconcile that records the binding (and by every claim, to the same effect)
|
|
203
|
+
* and STICKY — no reconcile removes it, whatever later
|
|
204
|
+
* versions declare — so an erasure keeps releasing that type's holders after a version drops the
|
|
205
|
+
* shape, drops its `bind` or moves its holder column. A spine tuple like the others here, so
|
|
206
|
+
* module code can never write one (`ctx.sql` refuses every `_substrat_*` write).
|
|
207
|
+
*/
|
|
208
|
+
export declare const BOUND_EVER_RELATION = "shape-bound";
|
|
94
209
|
//# sourceMappingURL=entity-grant-shape.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-grant-shape.d.ts","sourceRoot":"","sources":["../src/entity-grant-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"entity-grant-shape.d.ts","sourceRoot":"","sources":["../src/entity-grant-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,gIAAsJ,CAAC;AAE1L,gGAAgG;AAChG,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAA2B,GAAG,MAAM,CAS1E;AAuBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CASjI;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,2EAA2E;IAC3E,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAC1C;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,sEAAsE;IACtE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,sEAAsE;IACtE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,SAAS,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CA+D9F;AAuZD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AACxD,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AAChE,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,gBAAgB,CAAC"}
|