dsh-kingdom 0.3.1
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/LICENSE +29 -0
- package/README.md +184 -0
- package/cordis.patch.yml +6 -0
- package/lib/core/binding.js +57 -0
- package/lib/core/binding.js.map +1 -0
- package/lib/core/db.js +521 -0
- package/lib/core/db.js.map +1 -0
- package/lib/core/execution.js +88 -0
- package/lib/core/execution.js.map +1 -0
- package/lib/core/kingdom.js +117 -0
- package/lib/core/kingdom.js.map +1 -0
- package/lib/core/task-service.js +581 -0
- package/lib/core/task-service.js.map +1 -0
- package/lib/core/task.js +93 -0
- package/lib/core/task.js.map +1 -0
- package/lib/core/territory.js +47 -0
- package/lib/core/territory.js.map +1 -0
- package/lib/gui/contract.js +53 -0
- package/lib/gui/contract.js.map +1 -0
- package/lib/gui/server.js +204 -0
- package/lib/gui/server.js.map +1 -0
- package/lib/gui/snapshot.js +379 -0
- package/lib/gui/snapshot.js.map +1 -0
- package/lib/index.js +489 -0
- package/lib/index.js.map +1 -0
- package/lib/paths.js +23 -0
- package/lib/paths.js.map +1 -0
- package/lib/types/core/binding.d.ts +11 -0
- package/lib/types/core/db.d.ts +261 -0
- package/lib/types/core/execution.d.ts +51 -0
- package/lib/types/core/kingdom.d.ts +34 -0
- package/lib/types/core/task-service.d.ts +107 -0
- package/lib/types/core/task.d.ts +60 -0
- package/lib/types/core/territory.d.ts +9 -0
- package/lib/types/gui/contract.d.ts +226 -0
- package/lib/types/gui/server.d.ts +26 -0
- package/lib/types/gui/snapshot.d.ts +44 -0
- package/lib/types/index.d.ts +80 -0
- package/lib/types/paths.d.ts +6 -0
- package/lib/types/worker/dsh-subagent.d.ts +79 -0
- package/lib/types/worker/executor.d.ts +121 -0
- package/lib/worker/dsh-subagent.js +117 -0
- package/lib/worker/dsh-subagent.js.map +1 -0
- package/lib/worker/executor.js +94 -0
- package/lib/worker/executor.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import { GUI_SCHEMA_VERSION, TRANSIENT_WINDOW_MS } from './contract.js';
|
|
2
|
+
import { asExecutionState, isLiveExecutionState } from '../core/execution.js';
|
|
3
|
+
import { asTaskStatus } from '../core/task.js';
|
|
4
|
+
// ── 行 → 视图 ───────────────────────────────────────────────────
|
|
5
|
+
function parseJson(text) {
|
|
6
|
+
try {
|
|
7
|
+
const value = JSON.parse(text);
|
|
8
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
9
|
+
? value
|
|
10
|
+
: {};
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return {};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function stringList(value) {
|
|
17
|
+
return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
|
|
18
|
+
}
|
|
19
|
+
export function toEventView(row) {
|
|
20
|
+
return {
|
|
21
|
+
seq: row.seq,
|
|
22
|
+
eventId: row.event_id,
|
|
23
|
+
type: row.event_type,
|
|
24
|
+
actorRole: row.actor_role,
|
|
25
|
+
actorId: row.actor_id,
|
|
26
|
+
targetType: row.target_type,
|
|
27
|
+
targetId: row.target_id,
|
|
28
|
+
payload: parseJson(row.payload_json),
|
|
29
|
+
createdAt: row.created_at,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function toBindingView(row) {
|
|
33
|
+
return {
|
|
34
|
+
bindingId: row.binding_id,
|
|
35
|
+
roleType: row.role_type,
|
|
36
|
+
roleName: row.role_name,
|
|
37
|
+
runtimeType: row.runtime_type,
|
|
38
|
+
sessionId: row.session_id,
|
|
39
|
+
createdAt: row.created_at,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export function toTerritoryView(row) {
|
|
43
|
+
return {
|
|
44
|
+
territoryId: row.territory_id,
|
|
45
|
+
name: row.name,
|
|
46
|
+
workspacePath: row.workspace_path,
|
|
47
|
+
summary: row.summary,
|
|
48
|
+
status: row.status,
|
|
49
|
+
createdAt: row.created_at,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function toClaimView(row) {
|
|
53
|
+
const payload = parseJson(row.result_json);
|
|
54
|
+
return {
|
|
55
|
+
resultId: row.result_id,
|
|
56
|
+
attemptNo: row.attempt_no,
|
|
57
|
+
workerBindingId: row.worker_binding_id,
|
|
58
|
+
sessionId: row.session_id,
|
|
59
|
+
claimedOutcome: row.outcome,
|
|
60
|
+
summary: typeof payload.summary === 'string' ? payload.summary : null,
|
|
61
|
+
artifacts: stringList(payload.artifacts),
|
|
62
|
+
risks: stringList(payload.risks),
|
|
63
|
+
createdAt: row.created_at,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function toExecutionView(row) {
|
|
67
|
+
return {
|
|
68
|
+
executionId: row.execution_id,
|
|
69
|
+
taskId: row.task_id,
|
|
70
|
+
attemptNo: row.attempt_no,
|
|
71
|
+
workerBindingId: row.worker_binding_id,
|
|
72
|
+
sessionId: row.session_id,
|
|
73
|
+
state: row.state,
|
|
74
|
+
detail: row.detail,
|
|
75
|
+
startedAt: row.started_at,
|
|
76
|
+
heartbeatAt: row.heartbeat_at,
|
|
77
|
+
endedAt: row.ended_at,
|
|
78
|
+
pausePending: row.pause_requested_at !== null && row.state === 'RUNNING',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 任务当前允许的下一步动作。
|
|
83
|
+
*
|
|
84
|
+
* 这是 GUI 按钮可用性的**唯一**依据——GUI 不应自己从 status 推断,
|
|
85
|
+
* 否则状态机一改按钮就错。
|
|
86
|
+
*/
|
|
87
|
+
export function allowedActionsFor(task, execution) {
|
|
88
|
+
const status = asTaskStatus(task.status);
|
|
89
|
+
const live = execution !== null && isLiveExecutionState(asExecutionState(execution.state));
|
|
90
|
+
switch (status) {
|
|
91
|
+
case 'CREATED':
|
|
92
|
+
return ['assign'];
|
|
93
|
+
case 'ASSIGNED':
|
|
94
|
+
return ['start'];
|
|
95
|
+
case 'RUNNING': {
|
|
96
|
+
if (!live) {
|
|
97
|
+
// REWORK 之后:任务已回 RUNNING,但还没有新的 Execution。
|
|
98
|
+
return ['start'];
|
|
99
|
+
}
|
|
100
|
+
const state = asExecutionState(execution.state);
|
|
101
|
+
const actions = ['execution:abort'];
|
|
102
|
+
if (state === 'PAUSED')
|
|
103
|
+
actions.unshift('execution:resume');
|
|
104
|
+
else if (execution.pause_requested_at === null)
|
|
105
|
+
actions.unshift('execution:pause');
|
|
106
|
+
return actions;
|
|
107
|
+
}
|
|
108
|
+
case 'REVIEW':
|
|
109
|
+
return ['review:accept', 'review:rework', 'review:fail'];
|
|
110
|
+
default:
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export function toTaskView(store, task) {
|
|
115
|
+
const claim = store.latestWorkerResult(task.task_id);
|
|
116
|
+
const execution = store.latestExecution(task.task_id);
|
|
117
|
+
return {
|
|
118
|
+
taskId: task.task_id,
|
|
119
|
+
territoryId: task.territory_id,
|
|
120
|
+
title: task.title,
|
|
121
|
+
description: task.description,
|
|
122
|
+
acceptanceCriteria: task.acceptance_criteria,
|
|
123
|
+
status: task.status,
|
|
124
|
+
assignedBindingId: task.assigned_binding_id,
|
|
125
|
+
resultSummary: task.result_summary,
|
|
126
|
+
attemptCount: store.maxAttemptNo(task.task_id),
|
|
127
|
+
latestClaim: claim ? toClaimView(claim) : null,
|
|
128
|
+
latestExecution: execution ? toExecutionView(execution) : null,
|
|
129
|
+
allowedActions: allowedActionsFor(task, execution),
|
|
130
|
+
createdAt: task.created_at,
|
|
131
|
+
updatedAt: task.updated_at,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 在窗口期内找出**最近的一条**指定类型事件(events 已按 seq 降序传入)。
|
|
136
|
+
*
|
|
137
|
+
* 注意语义:返回的是这些类型里**最新的那条**,若它已过期则返回 null
|
|
138
|
+
* ——而不是"往前翻到第一条没过期的"。因此调用方必须把一组互斥的候选类型
|
|
139
|
+
* 一次性传进来,再按 `event_type` 分派;分成多次调用会让较早的动作
|
|
140
|
+
* 盖住较晚的动作(例如刚 ACCEPT 完却还在播派发)。
|
|
141
|
+
*/
|
|
142
|
+
function latestWithin(input, types) {
|
|
143
|
+
for (const event of input.events) {
|
|
144
|
+
if (!types.includes(event.event_type))
|
|
145
|
+
continue;
|
|
146
|
+
const age = input.nowMs - Date.parse(event.created_at);
|
|
147
|
+
if (Number.isNaN(age))
|
|
148
|
+
continue;
|
|
149
|
+
return age <= input.transientWindowMs ? event : null;
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
function actor(role, binding, state, activity, extra = {}) {
|
|
154
|
+
return {
|
|
155
|
+
role,
|
|
156
|
+
bindingId: binding?.binding_id ?? null,
|
|
157
|
+
roleName: binding?.role_name ?? null,
|
|
158
|
+
state,
|
|
159
|
+
activity,
|
|
160
|
+
taskId: null,
|
|
161
|
+
executionId: null,
|
|
162
|
+
attemptNo: null,
|
|
163
|
+
since: null,
|
|
164
|
+
transient: false,
|
|
165
|
+
remainingMs: null,
|
|
166
|
+
fallbackState: 'idle',
|
|
167
|
+
sourceSeq: null,
|
|
168
|
+
...extra,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function transientFrom(input, event) {
|
|
172
|
+
const elapsed = input.nowMs - Date.parse(event.created_at);
|
|
173
|
+
return {
|
|
174
|
+
transient: true,
|
|
175
|
+
remainingMs: Math.max(0, input.transientWindowMs - elapsed),
|
|
176
|
+
since: event.created_at,
|
|
177
|
+
sourceSeq: event.seq,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 宰相:只负责规划。
|
|
182
|
+
* `TASK_PLANNED` → 短暂播放规划动作,之后回待命。
|
|
183
|
+
*/
|
|
184
|
+
function chancellorActor(input, binding) {
|
|
185
|
+
if (!binding)
|
|
186
|
+
return actor('CHANCELLOR', null, 'absent', null);
|
|
187
|
+
const planned = latestWithin(input, ['TASK_PLANNED']);
|
|
188
|
+
if (planned) {
|
|
189
|
+
return actor('CHANCELLOR', binding, 'planning', 'plan', {
|
|
190
|
+
taskId: planned.target_id,
|
|
191
|
+
...transientFrom(input, planned),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return actor('CHANCELLOR', binding, 'idle', null);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 主管:派发、复核、返工、确认。
|
|
198
|
+
*
|
|
199
|
+
* 一组一次性动作**一次性**取最新的那条再分派(见 {@link latestWithin} 的语义说明),
|
|
200
|
+
* 否则「刚 ACCEPT 完」会被「几秒前的派发」盖住。
|
|
201
|
+
* 没有一次性动作时,只要还有任务停在 REVIEW,主管就保持 `reviewing` 循环——
|
|
202
|
+
* 这正好对应"Claim 已到达但尚未成为事实"这个治理状态。
|
|
203
|
+
*/
|
|
204
|
+
function supervisorActor(input, binding) {
|
|
205
|
+
if (!binding)
|
|
206
|
+
return actor('SUPERVISOR', null, 'absent', null);
|
|
207
|
+
const recent = latestWithin(input, ['TASK_ASSIGNED', 'TASK_REWORK_REQUESTED', 'TASK_ACCEPTED', 'TASK_FAILED']);
|
|
208
|
+
if (recent) {
|
|
209
|
+
const common = { taskId: recent.target_id, fallbackState: 'idle', ...transientFrom(input, recent) };
|
|
210
|
+
switch (recent.event_type) {
|
|
211
|
+
case 'TASK_ASSIGNED':
|
|
212
|
+
return actor('SUPERVISOR', binding, 'assigning', 'assign', common);
|
|
213
|
+
case 'TASK_REWORK_REQUESTED':
|
|
214
|
+
return actor('SUPERVISOR', binding, 'reviewing', 'rework', common);
|
|
215
|
+
case 'TASK_ACCEPTED':
|
|
216
|
+
return actor('SUPERVISOR', binding, 'reviewing', 'accept', common);
|
|
217
|
+
default:
|
|
218
|
+
return actor('SUPERVISOR', binding, 'reviewing', 'review', common);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// 持续状态:有待审 Claim 就一直在复核。
|
|
222
|
+
const pending = input.tasks.find(t => t.status === 'REVIEW');
|
|
223
|
+
if (pending) {
|
|
224
|
+
return actor('SUPERVISOR', binding, 'reviewing', 'review', {
|
|
225
|
+
taskId: pending.task_id,
|
|
226
|
+
since: pending.updated_at,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return actor('SUPERVISOR', binding, 'idle', null);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* 骑士(Worker):**只由 Execution 决定是否在工作**,不看 Task.status。
|
|
233
|
+
*
|
|
234
|
+
* 这是整套映射里最容易搞错的一条:REWORK 之后 Task 立刻回到 RUNNING,
|
|
235
|
+
* 但那时还没有新的 Execution,骑士必须处于 `waiting`(等待新 Execution),
|
|
236
|
+
* 而不能立即假装工作。
|
|
237
|
+
*/
|
|
238
|
+
function workerActor(input, binding) {
|
|
239
|
+
if (!binding)
|
|
240
|
+
return actor('WORKER', null, 'absent', null);
|
|
241
|
+
const live = input.executions.find(e => isLiveExecutionState(asExecutionState(e.state)));
|
|
242
|
+
if (live) {
|
|
243
|
+
const state = asExecutionState(live.state);
|
|
244
|
+
const common = {
|
|
245
|
+
taskId: live.task_id,
|
|
246
|
+
executionId: live.execution_id,
|
|
247
|
+
attemptNo: live.attempt_no,
|
|
248
|
+
since: live.started_at,
|
|
249
|
+
};
|
|
250
|
+
if (state === 'PAUSED') {
|
|
251
|
+
return actor('WORKER', binding, 'sleeping', null, { ...common, fallbackState: 'sleeping' });
|
|
252
|
+
}
|
|
253
|
+
// STARTING / RUNNING 都算在工作;pausePending 由 ExecutionView 单独暴露,
|
|
254
|
+
// GUI 可以据此播"准备休息",但**不能**直接播睡觉——那会谎报运行状态。
|
|
255
|
+
return actor('WORKER', binding, 'working', 'execute', { ...common, fallbackState: 'working' });
|
|
256
|
+
}
|
|
257
|
+
// 一次性表演:庆祝(任务刚被 ACCEPT)与困惑(宿主观察到执行没跑起来)。
|
|
258
|
+
// 同样一次性取最新再分派,避免旧事件盖住新事件。
|
|
259
|
+
const recent = latestWithin(input, ['TASK_ACCEPTED', 'WORKER_EXECUTION_FAILED']);
|
|
260
|
+
if (recent) {
|
|
261
|
+
const common = { taskId: recent.target_id, fallbackState: 'idle', ...transientFrom(input, recent) };
|
|
262
|
+
return recent.event_type === 'TASK_ACCEPTED'
|
|
263
|
+
? actor('WORKER', binding, 'celebrating', null, common)
|
|
264
|
+
: actor('WORKER', binding, 'confused', null, common);
|
|
265
|
+
}
|
|
266
|
+
// 任务处于 RUNNING 但没有活跃 Execution = 返工后待命,等新一轮执行。
|
|
267
|
+
const awaiting = input.tasks.find(t => t.status === 'RUNNING' && t.assigned_binding_id === binding.binding_id);
|
|
268
|
+
if (awaiting) {
|
|
269
|
+
return actor('WORKER', binding, 'waiting', null, {
|
|
270
|
+
taskId: awaiting.task_id,
|
|
271
|
+
since: awaiting.updated_at,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
return actor('WORKER', binding, 'idle', null);
|
|
275
|
+
}
|
|
276
|
+
/** 计算全部角色此刻的表演语义。 */
|
|
277
|
+
export function projectStage(input) {
|
|
278
|
+
const byRole = (role) => input.bindings.find(b => b.role_type === role) ?? null;
|
|
279
|
+
const owner = byRole('OWNER');
|
|
280
|
+
return [
|
|
281
|
+
owner ? actor('OWNER', owner, 'idle', null) : actor('OWNER', null, 'absent', null),
|
|
282
|
+
chancellorActor(input, byRole('CHANCELLOR')),
|
|
283
|
+
supervisorActor(input, byRole('SUPERVISOR')),
|
|
284
|
+
workerActor(input, byRole('WORKER')),
|
|
285
|
+
];
|
|
286
|
+
}
|
|
287
|
+
export function buildSnapshot(store, options) {
|
|
288
|
+
const kingdom = store.getDefaultKingdom();
|
|
289
|
+
const nowMs = options.nowMs ?? Date.now();
|
|
290
|
+
const generatedAt = new Date(nowMs).toISOString();
|
|
291
|
+
if (!kingdom) {
|
|
292
|
+
return {
|
|
293
|
+
schemaVersion: GUI_SCHEMA_VERSION,
|
|
294
|
+
revision: 0,
|
|
295
|
+
generatedAt,
|
|
296
|
+
kingdom: null,
|
|
297
|
+
auth: options.auth,
|
|
298
|
+
bindings: [],
|
|
299
|
+
territories: [],
|
|
300
|
+
tasks: [],
|
|
301
|
+
liveExecutions: [],
|
|
302
|
+
stage: [],
|
|
303
|
+
recentEvents: [],
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
const kingdomId = kingdom.kingdom_id;
|
|
307
|
+
const bindings = store.listBindings(kingdomId);
|
|
308
|
+
const tasks = store.listTasks(kingdomId);
|
|
309
|
+
const events = store.listEvents(kingdomId, options.eventLimit ?? 50);
|
|
310
|
+
const liveExecutions = store.listLiveExecutions(kingdomId);
|
|
311
|
+
return {
|
|
312
|
+
schemaVersion: GUI_SCHEMA_VERSION,
|
|
313
|
+
revision: store.revision(kingdomId),
|
|
314
|
+
generatedAt,
|
|
315
|
+
kingdom: {
|
|
316
|
+
kingdomId,
|
|
317
|
+
name: kingdom.name,
|
|
318
|
+
ownerId: kingdom.owner_id,
|
|
319
|
+
ownerName: kingdom.owner_name,
|
|
320
|
+
createdAt: kingdom.created_at,
|
|
321
|
+
},
|
|
322
|
+
auth: options.auth,
|
|
323
|
+
bindings: bindings.map(toBindingView),
|
|
324
|
+
territories: store.listTerritories(kingdomId).map(toTerritoryView),
|
|
325
|
+
tasks: tasks.map(t => toTaskView(store, t)),
|
|
326
|
+
liveExecutions: liveExecutions.map(toExecutionView),
|
|
327
|
+
stage: projectStage({
|
|
328
|
+
bindings,
|
|
329
|
+
tasks,
|
|
330
|
+
executions: liveExecutions,
|
|
331
|
+
events,
|
|
332
|
+
nowMs,
|
|
333
|
+
transientWindowMs: options.transientWindowMs ?? TRANSIENT_WINDOW_MS,
|
|
334
|
+
}),
|
|
335
|
+
recentEvents: events.map(toEventView),
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
export function buildTaskDetail(store, kingdomId, taskId) {
|
|
339
|
+
const task = store.getTask(taskId);
|
|
340
|
+
if (!task)
|
|
341
|
+
return null;
|
|
342
|
+
const territory = store.getTerritoryById(task.territory_id);
|
|
343
|
+
if (!territory || territory.kingdom_id !== kingdomId)
|
|
344
|
+
return null;
|
|
345
|
+
const binding = task.assigned_binding_id ? store.getBindingById(task.assigned_binding_id) : null;
|
|
346
|
+
const executions = store.listExecutions(taskId);
|
|
347
|
+
const related = store
|
|
348
|
+
.listEvents(kingdomId, 500)
|
|
349
|
+
.filter(e => e.target_id === taskId)
|
|
350
|
+
.sort((a, b) => a.seq - b.seq);
|
|
351
|
+
const reviews = related
|
|
352
|
+
.filter(e => ['TASK_ACCEPTED', 'TASK_REWORK_REQUESTED', 'TASK_FAILED'].includes(e.event_type))
|
|
353
|
+
.map((e) => {
|
|
354
|
+
const payload = parseJson(e.payload_json);
|
|
355
|
+
return {
|
|
356
|
+
seq: e.seq,
|
|
357
|
+
decision: typeof payload.decision === 'string' ? payload.decision : e.event_type,
|
|
358
|
+
reason: typeof payload.reason === 'string' ? payload.reason : null,
|
|
359
|
+
reviewerBindingId: typeof payload.reviewer_binding_id === 'string' ? payload.reviewer_binding_id : null,
|
|
360
|
+
reviewedAttemptNo: typeof payload.reviewed_attempt_no === 'number' ? payload.reviewed_attempt_no : null,
|
|
361
|
+
claimedOutcome: typeof payload.claimed_outcome === 'string' ? payload.claimed_outcome : null,
|
|
362
|
+
createdAt: e.created_at,
|
|
363
|
+
};
|
|
364
|
+
});
|
|
365
|
+
const view = toTaskView(store, task);
|
|
366
|
+
return {
|
|
367
|
+
schemaVersion: GUI_SCHEMA_VERSION,
|
|
368
|
+
revision: store.revision(kingdomId),
|
|
369
|
+
task: view,
|
|
370
|
+
territory: toTerritoryView(territory),
|
|
371
|
+
assignedBinding: binding ? toBindingView(binding) : null,
|
|
372
|
+
claims: store.listWorkerResults(taskId).map(toClaimView),
|
|
373
|
+
executions: executions.map(toExecutionView),
|
|
374
|
+
reviews,
|
|
375
|
+
relatedEvents: related.map(toEventView),
|
|
376
|
+
allowedActions: view.allowedActions,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/gui/snapshot.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAUvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,gEAAgE;AAEhE,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACzE,CAAC,CAAC,KAAgC;YAClC,CAAC,CAAC,EAAE,CAAA;IACR,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC5F,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAa;IACvC,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,IAAI,EAAE,GAAG,CAAC,UAAU;QACpB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;QACpC,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAmB;IAC/C,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAiB;IAC/C,OAAO;QACL,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAoB;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC1C,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,eAAe,EAAE,GAAG,CAAC,iBAAiB;QACtC,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,cAAc,EAAE,GAAG,CAAC,OAAO;QAC3B,OAAO,EAAE,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACrE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;QACxC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAiB;IAC/C,OAAO;QACL,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,MAAM,EAAE,GAAG,CAAC,OAAO;QACnB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,eAAe,EAAE,GAAG,CAAC,iBAAiB;QACtC,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,YAAY,EAAE,GAAG,CAAC,kBAAkB,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;KACzE,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa,EAAE,SAA8B;IAC7E,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,SAAS,KAAK,IAAI,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1F,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnB,KAAK,UAAU;YACb,OAAO,CAAC,OAAO,CAAC,CAAA;QAClB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,2CAA2C;gBAC3C,OAAO,CAAC,OAAO,CAAC,CAAA;YAClB,CAAC;YACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAoB,CAAC,iBAAiB,CAAC,CAAA;YACpD,IAAI,KAAK,KAAK,QAAQ;gBAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;iBACtD,IAAI,SAAS,CAAC,kBAAkB,KAAK,IAAI;gBAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;YAClF,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,CAAC,eAAe,EAAE,eAAe,EAAE,aAAa,CAAC,CAAA;QAC1D;YACE,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAmB,EAAE,IAAa;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,WAAW,EAAE,IAAI,CAAC,YAAY;QAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;QAC5C,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,iBAAiB,EAAE,IAAI,CAAC,mBAAmB;QAC3C,aAAa,EAAE,IAAI,CAAC,cAAc;QAClC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9C,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9C,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9D,cAAc,EAAE,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC;QAClD,SAAS,EAAE,IAAI,CAAC,UAAU;QAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;KAC3B,CAAA;AACH,CAAC;AAaD;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,KAAiB,EAAE,KAAe;IACtD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;YAAE,SAAQ;QAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACtD,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC/B,OAAO,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACtD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,KAAK,CACZ,IAAe,EACf,OAA8B,EAC9B,KAAiB,EACjB,QAAuB,EACvB,QAAiC,EAAE;IAEnC,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;QACtC,QAAQ,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;QACpC,KAAK;QACL,QAAQ;QACR,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,GAAG,KAAK;KACT,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB,EAAE,KAAe;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC1D,OAAO;QACL,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAC3D,KAAK,EAAE,KAAK,CAAC,UAAU;QACvB,SAAS,EAAE,KAAK,CAAC,GAAG;KACrB,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,KAAiB,EAAE,OAA8B;IACxE,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,CAAA;IACrD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;YACtD,MAAM,EAAE,OAAO,CAAC,SAAS;YACzB,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;SACjC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,KAAiB,EAAE,OAA8B;IACxE,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAE9D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,uBAAuB,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAA;IAC9G,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,MAAoB,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;QACjH,QAAQ,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1B,KAAK,eAAe;gBAClB,OAAO,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YACpE,KAAK,uBAAuB;gBAC1B,OAAO,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YACpE,KAAK,eAAe;gBAClB,OAAO,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YACpE;gBACE,OAAO,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;IACD,yBAAyB;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAA;IAC5D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE;YACzD,MAAM,EAAE,OAAO,CAAC,OAAO;YACvB,KAAK,EAAE,OAAO,CAAC,UAAU;SAC1B,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;AACnD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,KAAiB,EAAE,OAA8B;IACpE,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAE1D,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACxF,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB,CAAA;QACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,8DAA8D;QAC9D,0CAA0C;QAC1C,OAAO,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAA;IAChG,CAAC;IAED,yCAAyC;IACzC,0BAA0B;IAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAC,CAAA;IAChF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,MAAoB,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;QACjH,OAAO,MAAM,CAAC,UAAU,KAAK,eAAe;YAC1C,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC;YACvD,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACxD,CAAC;IAED,+CAA+C;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,mBAAmB,KAAK,OAAO,CAAC,UAAU,CAC5E,CAAA;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;YAC/C,MAAM,EAAE,QAAQ,CAAC,OAAO;YACxB,KAAK,EAAE,QAAQ,CAAC,UAAU;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;AAC/C,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,MAAM,GAAG,CAAC,IAAY,EAAyB,EAAE,CACrD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,IAAI,CAAA;IAExD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC7B,OAAO;QACL,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;QAClF,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5C,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5C,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KACrC,CAAA;AACH,CAAC;AAYD,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,OAAwB;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;IACzC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IAEjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,aAAa,EAAE,kBAAkB;YACjC,QAAQ,EAAE,CAAC;YACX,WAAW;YACX,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,EAAE;YACT,cAAc,EAAE,EAAE;YAClB,KAAK,EAAE,EAAE;YACT,YAAY,EAAE,EAAE;SACjB,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAA;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAA;IACpE,MAAM,cAAc,GAAG,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAE1D,OAAO;QACL,aAAa,EAAE,kBAAkB;QACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnC,WAAW;QACX,OAAO,EAAE;YACP,SAAS;YACT,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,SAAS,EAAE,OAAO,CAAC,UAAU;YAC7B,SAAS,EAAE,OAAO,CAAC,UAAU;SAC9B;QACD,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;QACrC,WAAW,EAAE,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;QAClE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3C,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;QACnD,KAAK,EAAE,YAAY,CAAC;YAClB,QAAQ;YACR,KAAK;YACL,UAAU,EAAE,cAAc;YAC1B,MAAM;YACN,KAAK;YACL,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,mBAAmB;SACpE,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;KACtC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAmB,EACnB,SAAiB,EACjB,MAAc;IAEd,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC3D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAEjE,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAChG,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,KAAK;SAClB,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC;SACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IAEhC,MAAM,OAAO,GAAG,OAAO;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,uBAAuB,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;SAC7F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;QACzC,OAAO;YACL,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;YAChF,MAAM,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YAClE,iBAAiB,EAAE,OAAO,OAAO,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI;YACvG,iBAAiB,EAAE,OAAO,OAAO,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI;YACvG,cAAc,EAAE,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;YAC5F,SAAS,EAAE,CAAC,CAAC,UAAU;SACxB,CAAA;IACH,CAAC,CAAC,CAAA;IAEJ,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACpC,OAAO;QACL,aAAa,EAAE,kBAAkB;QACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnC,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,eAAe,CAAC,SAAS,CAAC;QACrC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;QACxD,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QACxD,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC;QAC3C,OAAO;QACP,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACvC,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAA;AACH,CAAC"}
|