@3d-print-shop/octoprint-sim 1.0.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/index.d.ts +6 -0
- package/dist/index.js +3 -0
- package/dist/octoPrintServer.d.ts +60 -0
- package/dist/octoPrintServer.js +146 -0
- package/dist/octoprint-sim/tests/tsconfig.tsbuildinfo +1 -0
- package/dist/pushSockets.d.ts +28 -0
- package/dist/pushSockets.js +48 -0
- package/dist/simulatedPrinter.d.ts +57 -0
- package/dist/simulatedPrinter.js +131 -0
- package/package.json +42 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { CompleteJob, JobSubmittedHandler, OctoPrintApp, OctoPrintServer, SubmittedJob } from './octoPrintServer.js';
|
|
2
|
+
export { UPLOAD_LIMIT_BYTES, createOctoPrintApp, startOctoPrintServer } from './octoPrintServer.js';
|
|
3
|
+
export type { CompletionEventType, FiledJob, PrintHistory } from './simulatedPrinter.js';
|
|
4
|
+
export { Busy, SimulatedPrinter, parseAuthFrame } from './simulatedPrinter.js';
|
|
5
|
+
export type { Connected } from './pushSockets.js';
|
|
6
|
+
export { PushSockets } from './pushSockets.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Express } from 'express';
|
|
2
|
+
import { SimulatedPrinter } from './simulatedPrinter.js';
|
|
3
|
+
import { PushSockets } from './pushSockets.js';
|
|
4
|
+
import type { CompletionEventType } from './simulatedPrinter.js';
|
|
5
|
+
export interface SubmittedJob {
|
|
6
|
+
remotePath: string;
|
|
7
|
+
filename: string;
|
|
8
|
+
gcode: Buffer;
|
|
9
|
+
}
|
|
10
|
+
export type CompleteJob = (type: CompletionEventType) => void;
|
|
11
|
+
export type JobSubmittedHandler = (job: SubmittedJob, complete: CompleteJob) => void | Promise<void>;
|
|
12
|
+
export declare const UPLOAD_LIMIT_BYTES: number;
|
|
13
|
+
export interface OctoPrintServer {
|
|
14
|
+
port: number;
|
|
15
|
+
/** Read back off the socket, so a caller cannot be misled about its reach. */
|
|
16
|
+
host: string;
|
|
17
|
+
/** The cap actually in force, for the same reason. */
|
|
18
|
+
uploadLimitBytes: number;
|
|
19
|
+
broadcastEvent(type: CompletionEventType, path: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Test control: severs every live push socket without stopping the server, the way a network
|
|
22
|
+
* blip does. The "printer" keeps going - a client has to reconnect and work out what it missed,
|
|
23
|
+
* which is the only way to exercise the shop's reconnect recovery.
|
|
24
|
+
*/
|
|
25
|
+
dropConnections(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Test control: how many push sockets have been accepted. A test that severs the connection
|
|
28
|
+
* asserts on this to prove the client really did reconnect, rather than passing because the
|
|
29
|
+
* disconnect never happened.
|
|
30
|
+
*/
|
|
31
|
+
connectionsAccepted(): number;
|
|
32
|
+
/**
|
|
33
|
+
* Test control: how many sockets are authenticated, and so would receive a broadcast now.
|
|
34
|
+
*
|
|
35
|
+
* Apart from `connectionsAccepted` because they answer different questions, and the gap between
|
|
36
|
+
* them is where a test goes flaky: a socket is COUNTED when it is accepted and only becomes a
|
|
37
|
+
* listener once it has presented a session, which is a round trip later. A test that fires an
|
|
38
|
+
* event when the count rises is firing it at a client that cannot hear it yet.
|
|
39
|
+
*/
|
|
40
|
+
listening(): number;
|
|
41
|
+
/**
|
|
42
|
+
* Test control: every api key a request has presented, in the order they arrived. Still not
|
|
43
|
+
* checked - this remains a test double - but a client that was rebuilt with a corrected key is
|
|
44
|
+
* otherwise indistinguishable from one that kept the old one.
|
|
45
|
+
*/
|
|
46
|
+
keysPresented(): string[];
|
|
47
|
+
close(): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
/** What an app hands back besides itself, so a caller can see what it has been told. */
|
|
50
|
+
export interface OctoPrintApp {
|
|
51
|
+
app: Express;
|
|
52
|
+
keysPresented(): string[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The HTTP half, over a printer and its listeners. Built apart from `startOctoPrintServer` so that
|
|
56
|
+
* every route can be driven without a port: an express app is a function of a request.
|
|
57
|
+
*/
|
|
58
|
+
export declare function createOctoPrintApp(printer: SimulatedPrinter, pushes: PushSockets, onJobSubmitted: JobSubmittedHandler, uploadLimitBytes?: number): OctoPrintApp;
|
|
59
|
+
/** Implements just enough of OctoPrint's real HTTP and WebSocket protocol to drive a client at. */
|
|
60
|
+
export declare function startOctoPrintServer(port: number, onJobSubmitted: JobSubmittedHandler, uploadLimitBytes?: number): Promise<OctoPrintServer>;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
import express from 'express';
|
|
3
|
+
import multer from 'multer';
|
|
4
|
+
import { WebSocketServer, WebSocket } from 'ws';
|
|
5
|
+
import { Busy, SimulatedPrinter } from './simulatedPrinter.js';
|
|
6
|
+
import { PushSockets } from './pushSockets.js';
|
|
7
|
+
// AIDEV-NOTE: loopback, and nothing configurable. This is a test double with no api key check and
|
|
8
|
+
// an unauthenticated upload endpoint; binding every interface put that on the LAN while the banner
|
|
9
|
+
// promised http://localhost. If octo-sim ever needs to be reachable from another machine, that
|
|
10
|
+
// should be an explicit --host flag, not the default it used to be by omission.
|
|
11
|
+
const LOOPBACK = '127.0.0.1';
|
|
12
|
+
// AIDEV-NOTE: memoryStorage with no limit meant one upload could exhaust the heap. 200MB is
|
|
13
|
+
// generous against a large kit's gcode and still bounded. Injectable only so a test can prove the
|
|
14
|
+
// limit is wired up without posting 200MB.
|
|
15
|
+
export const UPLOAD_LIMIT_BYTES = 200 * 1024 * 1024;
|
|
16
|
+
/**
|
|
17
|
+
* The HTTP half, over a printer and its listeners. Built apart from `startOctoPrintServer` so that
|
|
18
|
+
* every route can be driven without a port: an express app is a function of a request.
|
|
19
|
+
*/
|
|
20
|
+
export function createOctoPrintApp(printer, pushes, onJobSubmitted, uploadLimitBytes = UPLOAD_LIMIT_BYTES) {
|
|
21
|
+
const app = express();
|
|
22
|
+
const upload = multer({ storage: multer.memoryStorage(), limits: { fileSize: uploadLimitBytes } });
|
|
23
|
+
const keysPresented = [];
|
|
24
|
+
app.use((req, _res, next) => {
|
|
25
|
+
const presented = req.header('X-Api-Key');
|
|
26
|
+
if (presented !== undefined)
|
|
27
|
+
keysPresented.push(presented);
|
|
28
|
+
next();
|
|
29
|
+
});
|
|
30
|
+
app.post('/api/files/local', upload.single('file'), (req, res) => {
|
|
31
|
+
const file = req.file;
|
|
32
|
+
if (!file) {
|
|
33
|
+
res.status(400).json({ error: 'missing file' });
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const folder = typeof req.body?.path === 'string' ? req.body.path : '';
|
|
37
|
+
let remotePath;
|
|
38
|
+
try {
|
|
39
|
+
remotePath = printer.take(file.originalname, folder);
|
|
40
|
+
}
|
|
41
|
+
catch (refusal) {
|
|
42
|
+
if (!(refusal instanceof Busy))
|
|
43
|
+
throw refusal;
|
|
44
|
+
res.status(409).json({ error: refusal.message });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// AIDEV-NOTE: the shape OctoPrint documents for an upload, not a bare `done`. The client reads
|
|
48
|
+
// `files.local.path` back to learn where the file actually went, so a simulator that answered
|
|
49
|
+
// only `done` could not tell it - and the one thing this answer proves is that the client takes
|
|
50
|
+
// the path from the machine rather than from its own guess.
|
|
51
|
+
res.status(200).json({ done: true, files: { local: { name: file.originalname, path: remotePath, origin: 'local' } } });
|
|
52
|
+
pushes.status();
|
|
53
|
+
const complete = (type) => {
|
|
54
|
+
printer.finished(remotePath, type);
|
|
55
|
+
// State first, then the event. A client that reacts to the event must not find the printer
|
|
56
|
+
// still claiming to run the job it was just told had finished.
|
|
57
|
+
pushes.status();
|
|
58
|
+
pushes.event(type, remotePath);
|
|
59
|
+
};
|
|
60
|
+
// AIDEV-NOTE: a plain `Promise.resolve(onJobSubmitted(...)).catch(...)` only catches a rejected
|
|
61
|
+
// promise - a synchronous throw happens before Promise.resolve() is reached and would leave the
|
|
62
|
+
// printer stuck running for ever. Wrapping the call itself is what catches both.
|
|
63
|
+
void (async () => {
|
|
64
|
+
try {
|
|
65
|
+
await onJobSubmitted({ remotePath, filename: file.originalname, gcode: file.buffer }, complete);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
printer.gaveUp();
|
|
69
|
+
console.error(`octo-sim: job handler failed for ${remotePath}:`, error);
|
|
70
|
+
}
|
|
71
|
+
})();
|
|
72
|
+
});
|
|
73
|
+
app.post('/api/login', express.json(), (_req, res) => {
|
|
74
|
+
res.status(200).json(printer.logIn());
|
|
75
|
+
});
|
|
76
|
+
app.post('/api/job', express.json(), (_req, res) => {
|
|
77
|
+
res.status(200).json({ ok: true });
|
|
78
|
+
});
|
|
79
|
+
const FILE_ROUTE_PREFIX = '/api/files/local/';
|
|
80
|
+
app.get(/^\/api\/files\/local\/.+/, (req, res) => {
|
|
81
|
+
const asked = req.path
|
|
82
|
+
.slice(FILE_ROUTE_PREFIX.length)
|
|
83
|
+
.split('/')
|
|
84
|
+
.map((segment) => decodeURIComponent(segment))
|
|
85
|
+
.join('/');
|
|
86
|
+
const filed = printer.filed(asked);
|
|
87
|
+
if (filed === undefined) {
|
|
88
|
+
res.status(404).json({ error: 'File not found' });
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
res.status(200).json(filed);
|
|
92
|
+
});
|
|
93
|
+
return { app, keysPresented: () => [...keysPresented] };
|
|
94
|
+
}
|
|
95
|
+
/** Implements just enough of OctoPrint's real HTTP and WebSocket protocol to drive a client at. */
|
|
96
|
+
export function startOctoPrintServer(port, onJobSubmitted, uploadLimitBytes = UPLOAD_LIMIT_BYTES) {
|
|
97
|
+
const printer = new SimulatedPrinter();
|
|
98
|
+
const pushes = new PushSockets(printer);
|
|
99
|
+
const { app, keysPresented } = createOctoPrintApp(printer, pushes, onJobSubmitted, uploadLimitBytes);
|
|
100
|
+
const sockets = new Set();
|
|
101
|
+
let connectionsAccepted = 0;
|
|
102
|
+
const httpServer = http.createServer(app);
|
|
103
|
+
const wss = new WebSocketServer({ server: httpServer, path: '/sockjs/websocket' });
|
|
104
|
+
wss.on('connection', (ws) => {
|
|
105
|
+
connectionsAccepted++;
|
|
106
|
+
sockets.add(ws);
|
|
107
|
+
const socket = { send: (message) => ws.send(message), isOpen: () => ws.readyState === WebSocket.OPEN };
|
|
108
|
+
ws.on('message', (raw) => pushes.said(socket, raw.toString()));
|
|
109
|
+
ws.on('close', () => {
|
|
110
|
+
pushes.left(socket);
|
|
111
|
+
sockets.delete(ws);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
const severEveryone = () => {
|
|
115
|
+
// terminate(), not close() - a close handshake is an orderly goodbye, and the failure being
|
|
116
|
+
// simulated is a connection that simply stops.
|
|
117
|
+
for (const client of sockets)
|
|
118
|
+
client.terminate();
|
|
119
|
+
sockets.clear();
|
|
120
|
+
pushes.forgetEveryone();
|
|
121
|
+
};
|
|
122
|
+
return new Promise((resolve, reject) => {
|
|
123
|
+
httpServer.once('error', reject);
|
|
124
|
+
httpServer.listen(port, LOOPBACK, () => {
|
|
125
|
+
const address = httpServer.address();
|
|
126
|
+
const boundPort = typeof address === 'object' && address ? address.port : port;
|
|
127
|
+
resolve({
|
|
128
|
+
port: boundPort,
|
|
129
|
+
host: typeof address === 'object' && address ? address.address : LOOPBACK,
|
|
130
|
+
uploadLimitBytes,
|
|
131
|
+
broadcastEvent: (type, path) => pushes.event(type, path),
|
|
132
|
+
connectionsAccepted: () => connectionsAccepted,
|
|
133
|
+
listening: () => pushes.listening(),
|
|
134
|
+
keysPresented,
|
|
135
|
+
dropConnections: severEveryone,
|
|
136
|
+
close: () => new Promise((closed) => {
|
|
137
|
+
// httpServer.close() waits for open connections to end, and a push socket never ends on
|
|
138
|
+
// its own - without this the server hangs on any client still attached.
|
|
139
|
+
severEveryone();
|
|
140
|
+
wss.close();
|
|
141
|
+
httpServer.close(() => closed());
|
|
142
|
+
}),
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../../../node_modules/typescript/lib/lib.es5.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../../../node_modules/@types/node/globals.typedarray.d.ts","../../../../../node_modules/@types/node/buffer.buffer.d.ts","../../../../../node_modules/@types/node/globals.d.ts","../../../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../../../node_modules/@types/node/web-globals/events.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/utility.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/client-stats.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/round-robin-pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/h2c-client.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-call-history.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/snapshot-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/cache-interceptor.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../../../node_modules/@types/node/web-globals/storage.d.ts","../../../../../node_modules/@types/node/web-globals/streams.d.ts","../../../../../node_modules/@types/node/assert.d.ts","../../../../../node_modules/@types/node/assert/strict.d.ts","../../../../../node_modules/@types/node/async_hooks.d.ts","../../../../../node_modules/@types/node/buffer.d.ts","../../../../../node_modules/@types/node/child_process.d.ts","../../../../../node_modules/@types/node/cluster.d.ts","../../../../../node_modules/@types/node/console.d.ts","../../../../../node_modules/@types/node/constants.d.ts","../../../../../node_modules/@types/node/crypto.d.ts","../../../../../node_modules/@types/node/dgram.d.ts","../../../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../../../node_modules/@types/node/dns.d.ts","../../../../../node_modules/@types/node/dns/promises.d.ts","../../../../../node_modules/@types/node/domain.d.ts","../../../../../node_modules/@types/node/events.d.ts","../../../../../node_modules/@types/node/fs.d.ts","../../../../../node_modules/@types/node/fs/promises.d.ts","../../../../../node_modules/@types/node/http.d.ts","../../../../../node_modules/@types/node/http2.d.ts","../../../../../node_modules/@types/node/https.d.ts","../../../../../node_modules/@types/node/inspector.d.ts","../../../../../node_modules/@types/node/inspector.generated.d.ts","../../../../../node_modules/@types/node/module.d.ts","../../../../../node_modules/@types/node/net.d.ts","../../../../../node_modules/@types/node/os.d.ts","../../../../../node_modules/@types/node/path.d.ts","../../../../../node_modules/@types/node/perf_hooks.d.ts","../../../../../node_modules/@types/node/process.d.ts","../../../../../node_modules/@types/node/punycode.d.ts","../../../../../node_modules/@types/node/querystring.d.ts","../../../../../node_modules/@types/node/readline.d.ts","../../../../../node_modules/@types/node/readline/promises.d.ts","../../../../../node_modules/@types/node/repl.d.ts","../../../../../node_modules/@types/node/sea.d.ts","../../../../../node_modules/@types/node/sqlite.d.ts","../../../../../node_modules/@types/node/stream.d.ts","../../../../../node_modules/@types/node/stream/promises.d.ts","../../../../../node_modules/@types/node/stream/consumers.d.ts","../../../../../node_modules/@types/node/stream/web.d.ts","../../../../../node_modules/@types/node/string_decoder.d.ts","../../../../../node_modules/@types/node/test.d.ts","../../../../../node_modules/@types/node/timers.d.ts","../../../../../node_modules/@types/node/timers/promises.d.ts","../../../../../node_modules/@types/node/tls.d.ts","../../../../../node_modules/@types/node/trace_events.d.ts","../../../../../node_modules/@types/node/tty.d.ts","../../../../../node_modules/@types/node/url.d.ts","../../../../../node_modules/@types/node/util.d.ts","../../../../../node_modules/@types/node/v8.d.ts","../../../../../node_modules/@types/node/vm.d.ts","../../../../../node_modules/@types/node/wasi.d.ts","../../../../../node_modules/@types/node/worker_threads.d.ts","../../../../../node_modules/@types/node/zlib.d.ts","../../../../../node_modules/@types/node/index.d.ts","../../../../../node_modules/@types/yargs-parser/index.d.ts","../../../../../node_modules/@types/yargs/index.d.ts","../../../../../node_modules/@types/yargs/index.d.mts","../../../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../../../node_modules/chalk/index.d.ts","../../../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../../../node_modules/@types/istanbul-reports/index.d.ts","../../../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../../../node_modules/@jest/schemas/build/index.d.ts","../../../../../node_modules/@jest/types/build/index.d.ts","../../../../../node_modules/jest-mock/build/index.d.ts","../../../../../node_modules/@types/stack-utils/index.d.ts","../../../../../node_modules/jest-message-util/build/index.d.ts","../../../../../node_modules/@jest/fake-timers/build/index.d.ts","../../../../../node_modules/@jest/environment/build/index.d.ts","../../../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../../../node_modules/pretty-format/build/index.d.ts","../../../../../node_modules/jest-diff/build/index.d.ts","../../../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../../../node_modules/expect/build/index.d.ts","../../../../../node_modules/jest-snapshot/build/index.d.ts","../../../../../node_modules/@jest/expect/build/index.d.ts","../../../../../node_modules/@jest/globals/build/index.d.ts","../../../../../node_modules/@types/send/index.d.ts","../../../../../node_modules/@types/qs/index.d.ts","../../../../../node_modules/@types/range-parser/index.d.ts","../../../../../node_modules/@types/express-serve-static-core/index.d.ts","../../../../../node_modules/@types/http-errors/index.d.ts","../../../../../node_modules/@types/serve-static/index.d.ts","../../../../../node_modules/@types/connect/index.d.ts","../../../../../node_modules/@types/body-parser/index.d.ts","../../../../../node_modules/@types/express/index.d.ts","../../../../../node_modules/@types/multer/index.d.ts","../../../../../node_modules/@types/ws/index.d.mts","../../../src/simulatedprinter.ts","../../../src/pushsockets.ts","../../../src/octoprintserver.ts","../../../tests/octoprintapp.test.ts","../../../tests/pushsockets.test.ts","../../../tests/simulatedprinter.test.ts","../../../src/index.ts","../../../../../node_modules/@types/jest/node_modules/@jest/expect-utils/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbols/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/any/any.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/any/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/async-iterator/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/literal/literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/literal/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/enum/enum.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/enum/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/function/function.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/function/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/computed/computed.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/computed/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/never/never.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/never/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/union-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/union.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/recursive/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unsafe/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/ref/ref.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/ref/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/tuple/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/error/error.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/error/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/string/string.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/string/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/boolean/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/number/number.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/number/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/integer/integer.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/integer/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/bigint/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/union.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/iterator/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/promise/promise.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/promise/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/sets/set.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/sets/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/optional/optional.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/optional/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/awaited/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-entries.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/omit.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/pick.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/null/null.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/null/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbol/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/undefined/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/partial/partial.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/partial/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/regexp/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/record/record.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/record/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/required/required.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/required/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/transform/transform.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/transform/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/compute.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/infer.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/module.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/not/not.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/not/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/static/static.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/static/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/object/object.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/object/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/helpers/helpers.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/helpers/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/array/array.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/array/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/date/date.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/date/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/uint8array/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unknown/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/void/void.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/void/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/schema/schema.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/schema/anyschema.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/schema/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/clone/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/clone/value.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/clone/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/create/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/create/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/argument/argument.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/argument/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/kind.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/value.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/patterns/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/registry/format.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/registry/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/registry/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/composite/composite.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/composite/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/const/const.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/const/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-undefined.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/extract.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instance-type/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instantiate/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/parameters/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/rest/rest.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/rest/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/return-type/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/type/json.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/type/javascript.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/type/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@jest/schemas/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/jest-matcher-utils/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/jest-mock/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/expect/build/index.d.ts","../../../../../node_modules/@types/jest/index.d.ts"],"fileIdsList":[[50,105,122,123,151,155,165,166,169],[50,105,122,123],[50,105,122,123,175,176],[50,105,122,123,165,166,168],[50,105,122,123,165,166,170,177],[50,105,122,123,163],[50,105,122,123,155,158,159,160,162,164],[50,105,119,122,123,155,185],[50,105,119,122,123,155],[50,105,116,119,122,123,155,179,180,181],[50,105,122,123,182,184,186],[50,105,122,123,159],[50,105,122,123,161],[50,105,122,123,391,395],[50,105,122,123,389],[50,105,122,123,199,201,205,208,210,212,214,216,218,222,226,230,232,234,236,238,240,242,244,246,248,250,258,263,265,267,269,271,274,276,281,285,289,291,293,295,298,300,302,305,307,311,313,315,317,319,321,323,325,327,329,332,335,337,339,343,345,348,350,352,354,358,364,368,370,372,379,381,383,385,388],[50,105,122,123,199,332],[50,105,122,123,200],[50,105,122,123,338],[50,105,122,123,199,315,319,332],[50,105,122,123,320],[50,105,122,123,199,315,332],[50,105,122,123,204],[50,105,122,123,220,226,230,236,267,319,332],[50,105,122,123,275],[50,105,122,123,249],[50,105,122,123,243],[50,105,122,123,333,334],[50,105,122,123,332],[50,105,122,123,222,226,263,269,281,317,319,332],[50,105,122,123,349],[50,105,122,123,198,332],[50,105,122,123,219],[50,105,122,123,201,208,214,218,222,238,250,291,293,295,317,319,323,325,327,332],[50,105,122,123,351],[50,105,122,123,212,222,238,332],[50,105,122,123,353],[50,105,122,123,199,208,210,274,315,319,332],[50,105,122,123,211],[50,105,122,123,336],[50,105,122,123,330],[50,105,122,123,322],[50,105,122,123,199,214,332],[50,105,122,123,215],[50,105,122,123,239],[50,105,122,123,271,317,332,356],[50,105,122,123,258,332,356],[50,105,122,123,222,230,258,271,315,319,332,355,357],[50,105,122,123,355,356,357],[50,105,122,123,240,332],[50,105,122,123,214,271,317,319,332,361],[50,105,122,123,271,317,332,361],[50,105,122,123,230,271,315,319,332,360,362],[50,105,122,123,359,360,361,362,363],[50,105,122,123,271,317,332,366],[50,105,122,123,258,332,366],[50,105,122,123,222,230,258,271,315,319,332,365,367],[50,105,122,123,365,366,367],[50,105,122,123,217],[50,105,122,123,340,341,342],[50,105,122,123,199,201,205,208,212,214,218,220,222,226,230,232,234,236,238,242,244,246,248,250,258,265,267,271,274,291,293,295,300,302,307,311,313,317,321,323,325,327,329,332,339],[50,105,122,123,199,201,205,208,212,214,218,220,222,226,230,232,234,236,238,240,242,244,246,248,250,258,265,267,271,274,291,293,295,300,302,307,311,313,317,321,323,325,327,329,332,339],[50,105,122,123,222,317,332],[50,105,122,123,318],[50,105,122,123,259,260,261,262],[50,105,122,123,261,271,317,319,332],[50,105,122,123,259,263,271,317,332],[50,105,122,123,214,230,246,248,258,332],[50,105,122,123,220,222,226,230,232,236,238,259,260,262,271,317,319,321,332],[50,105,122,123,369],[50,105,122,123,212,222,332],[50,105,122,123,371],[50,105,122,123,205,208,210,212,218,226,230,238,265,267,274,302,317,321,327,332,339],[50,105,122,123,247],[50,105,122,123,223,224,225],[50,105,122,123,208,222,223,274,332],[50,105,122,123,222,223,332],[50,105,122,123,332,374],[50,105,122,123,373,374,375,376,377,378],[50,105,122,123,214,271,317,319,332,374],[50,105,122,123,214,230,258,271,332,373],[50,105,122,123,264],[50,105,122,123,277,278,279,280],[50,105,122,123,271,278,317,319,332],[50,105,122,123,226,230,232,238,269,317,319,321,332],[50,105,122,123,214,220,230,236,246,271,277,279,319,332],[50,105,122,123,213],[50,105,122,123,202,203,270],[50,105,122,123,199,317,332],[50,105,122,123,202,203,205,208,212,214,216,218,226,230,238,263,265,267,269,274,317,319,321,332],[50,105,122,123,205,208,212,216,218,220,222,226,230,236,238,263,265,274,276,281,285,289,298,302,305,307,317,319,321,332],[50,105,122,123,310],[50,105,122,123,205,208,212,216,218,226,230,232,236,238,265,274,302,315,317,319,321,332],[50,105,122,123,199,308,309,315,317,332],[50,105,122,123,221],[50,105,122,123,312],[50,105,122,123,290],[50,105,122,123,245],[50,105,122,123,316],[50,105,122,123,199,208,274,315,319,332],[50,105,122,123,282,283,284],[50,105,122,123,271,283,317,332],[50,105,122,123,271,283,317,319,332],[50,105,122,123,214,220,226,230,232,236,263,271,282,284,317,319,332],[50,105,122,123,272,273],[50,105,122,123,271,272,317],[50,105,122,123,199,271,273,319,332],[50,105,122,123,380],[50,105,122,123,218,222,238,332],[50,105,122,123,296,297],[50,105,122,123,271,296,317,319,332],[50,105,122,123,208,210,214,220,226,230,232,236,242,244,246,248,250,271,274,291,293,295,297,317,319,332],[50,105,122,123,344],[50,105,122,123,286,287,288],[50,105,122,123,271,287,317,332],[50,105,122,123,271,287,317,319,332],[50,105,122,123,214,220,226,230,232,236,263,271,286,288,317,319,332],[50,105,122,123,266],[50,105,122,123,209],[50,105,122,123,208,274,332],[50,105,122,123,206,207],[50,105,122,123,206,271,317],[50,105,122,123,199,207,271,319,332],[50,105,122,123,301],[50,105,122,123,199,201,214,216,222,230,242,244,246,248,258,300,315,317,319,332],[50,105,122,123,231],[50,105,122,123,235],[50,105,122,123,199,234,315,332],[50,105,122,123,299],[50,105,122,123,346,347],[50,105,122,123,303,304],[50,105,122,123,271,303,317,319,332],[50,105,122,123,208,210,214,220,226,230,232,236,242,244,246,248,250,271,274,291,293,295,304,317,319,332],[50,105,122,123,382],[50,105,122,123,226,230,238,332],[50,105,122,123,384],[50,105,122,123,218,222,332],[50,105,122,123,201,205,212,214,216,218,226,230,232,236,238,242,244,246,248,250,258,265,267,291,293,295,300,302,313,317,321,323,325,327,329,330],[50,105,122,123,330,331],[50,105,122,123,199],[50,105,122,123,268],[50,105,122,123,314],[50,105,122,123,205,208,212,216,218,222,226,230,232,234,236,238,265,267,274,302,307,311,313,317,319,321,332],[50,105,122,123,241],[50,105,122,123,292],[50,105,122,123,198],[50,105,122,123,214,230,240,242,244,246,248,250,251,258],[50,105,122,123,214,230,240,244,251,252,258,319],[50,105,122,123,251,252,253,254,255,256,257],[50,105,122,123,240],[50,105,122,123,240,258],[50,105,122,123,214,230,242,244,246,250,258,319],[50,105,122,123,199,214,222,230,242,244,246,248,250,254,315,319,332],[50,105,122,123,214,230,256,315,319],[50,105,122,123,306],[50,105,122,123,237],[50,105,122,123,386,387],[50,105,122,123,205,212,218,250,265,267,276,293,295,300,323,325,329,332,339,354,370,372,381,385,386],[50,105,122,123,201,208,210,214,216,222,226,230,232,234,236,238,242,244,246,248,258,263,271,274,281,285,289,291,298,302,305,307,311,313,317,321,327,332,350,352,358,364,368,379,383],[50,105,122,123,324],[50,105,122,123,294],[50,105,122,123,227,228,229],[50,105,122,123,208,222,227,274,332],[50,105,122,123,222,227,332],[50,105,122,123,326],[50,105,122,123,233],[50,105,122,123,328],[50,105,122,123,197,393,394],[50,105,122,123,391],[50,105,122,123,160,392],[50,105,122,123,197],[50,105,122,123,390],[50,105,122,123,137,187],[50,102,103,105,122,123],[50,104,105,122,123],[105,122,123],[50,105,110,122,123,140],[50,105,106,111,116,122,123,125,137,148],[50,105,106,107,116,122,123,125],[50,105,108,122,123,149],[50,105,109,110,117,122,123,126],[50,105,110,122,123,137,145],[50,105,111,113,116,122,123,125],[50,104,105,112,122,123],[50,105,113,114,122,123],[50,105,115,116,122,123],[50,104,105,116,122,123],[50,105,116,117,118,122,123,137,148],[50,105,116,117,118,122,123,132,137,140],[50,97,105,113,116,119,122,123,125,137,148],[50,105,116,117,119,120,122,123,125,137,145,148],[50,105,119,121,122,123,137,145,148],[48,49,50,51,52,53,54,55,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[50,105,116,122,123],[50,105,122,123,124,148],[50,105,113,116,122,123,125,137],[50,62,65,68,69,105,122,123,148],[50,65,105,122,123,137,148],[50,65,69,105,122,123,148],[50,105,122,123,137],[50,59,105,122,123],[50,63,105,122,123],[50,61,62,65,105,122,123,148],[50,105,122,123,125,145],[50,105,122,123,155],[50,59,105,122,123,155],[50,61,65,105,122,123,125,148],[50,56,57,58,60,64,105,116,122,123,137,148],[50,65,74,82,105,122,123],[50,57,63,105,122,123],[50,65,91,92,105,122,123],[50,57,60,65,105,122,123,140,148,155],[50,65,105,122,123],[50,61,65,105,122,123,148],[50,56,105,122,123],[50,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,92,93,94,95,96,105,122,123],[50,65,84,87,105,113,122,123],[50,65,74,75,76,105,122,123],[50,63,65,75,77,105,122,123],[50,64,105,122,123],[50,57,59,65,105,122,123],[50,65,69,75,77,105,122,123],[50,69,105,122,123],[50,63,65,68,105,122,123,148],[50,57,61,65,74,105,122,123],[50,65,84,105,122,123],[50,77,105,122,123],[50,59,65,91,105,122,123,140,153,155],[50,105,122,123,126],[50,105,122,123,127],[50,104,105,122,123,128],[50,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[50,105,122,123,130],[50,105,122,123,131],[50,105,116,122,123,132,133],[50,105,122,123,132,134,149,151],[50,105,117,122,123],[50,105,116,122,123,137,138,140],[50,105,122,123,139,140],[50,105,122,123,137,138],[50,105,122,123,140],[50,105,122,123,141],[50,102,105,122,123,137,142,148],[50,105,116,122,123,143,144],[50,105,122,123,143,144],[50,105,110,122,123,125,137,145],[50,105,122,123,146],[50,105,122,123,125,147],[50,105,119,122,123,131,148],[50,105,110,122,123,149],[50,105,122,123,137,150],[50,105,122,123,124,151],[50,105,122,123,152],[50,105,110,122,123],[50,97,105,122,123],[50,105,122,123,153],[50,97,105,116,118,122,123,128,137,140,148,150,151,153],[50,105,122,123,137,154],[50,105,117,122,123,137,155],[50,105,119,122,123,155,183],[50,105,116,119,121,122,123,125,137,145,148,154,155],[50,105,122,123,157],[50,105,122,123,156],[50,105,122,123,171,174],[50,105,122,123,172],[50,105,122,123,160,173],[50,105,122,123,165,167],[50,105,122,123,165,172,175],[50,105,122,123,164],[50,105,122,123,190,191,192],[50,105,119,122,123,187,188,189,190,191],[50,105,122,123,190],[50,105,119,122,123,125,137,178,190,191,192],[50,105,122,123,178,190,191],[50,105,122,123,178,190]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"24371e69a38fc33e268d4a8716dbcda430d6c2c414a99ff9669239c4b8f40dea","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"c63b9ada8c72f95aac5db92aea07e5e87ec810353cdf63b2d78f49a58662cf6c","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"1cbdcdef62bf42688e5d825898c3a59458466c48ad8a4ef3f88d8a1cd04310d6","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"67e435fa530778903f5525904e6645b7368eb5ac622055febd19bb399e328ccd","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"5b22bf96be06fca1e134e3a85351ffe7aa2edf0c9a5bd175b7239ee48186dbf5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"5b48cc670da1dfe926036deaf349085caf822def460a6d50de23f1cc12a5f8cd","impliedFormat":1},{"version":"418f34087d52d001e2688a6282a5de9bf583ff771ed5546af0ae36e4f60a458b","affectsGlobalScope":true,"impliedFormat":1},{"version":"036c9a03b01281f99f8251fdc7088e894566be44b3f139a9d48501a978b611df","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1569ad5969ae0de6ad0bdfaaab0dabcd8878bc3147ab096206eed2019bb84e7f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"42a350ce4f6f291198dc89833afcc4fd078248b4e1fdc9d05c846c66a670f710","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"b03754211d839cdc48979996525a32eb62130682c2f9801dfc2f25533ce7238d","impliedFormat":1},{"version":"3910dab597c40e173bf0e0d419d3ce9682c54ebf6ae84849f9b829b1451a17ec","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"486c074a5c0f2254345c0d1c9540380f5463999e42d7e1a159305ea823d3c4b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"f4d99ac08c4097a3cc202bec2c7198c19dcdd80d4ec6c62d1356b10d03b119d5","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ca77e83162eccec633513723d178d4203bdd5465297267696be08013bab0aa1d","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"f61c153d5abbe4381a1fba0d41be0babdd5de51c626ee7ff14cede14dedc33f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7803171d745ab18e77f16bf82e742268ff72b7f7382ab191e4277527580c2d89","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e9ba65cd3d6d194bdda7343f9f2917f7144ead96a924ca58d1a14919992dc20","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"0b0dfb2d3e8420ead06f6a11acfb02ddcec42257e6ce391993e895ba0af86de4","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"dd5115b329c19c4385af13eda13e3ab03355e711c3f313173fd54ed7d08cfd39","impliedFormat":99},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"e00243d23c495ca2170c9b9e20b5c92331239100b51efdc2b4401cdad859bbef","impliedFormat":1},{"version":"41ea7fd137518560e0d2af581edadadd236b685b5e2f80f083127a28e01cf0ac","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"6fa5d56af71f07dc276aae3f6f30807a9cccf758517fb39742af72e963553d80","impliedFormat":1},{"version":"819dddfec57391f8458929ca8e4377f030d42107ff6ec431e620b70b0695d530","impliedFormat":1},{"version":"701bdef1f4a13932f64c4ce89537f2c66301eb46daf30a16a436c991df568686","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"ac5f598a09eed39b957ae3d909b88126f3faf605bd4589c19e9ae85d23ef71e3","impliedFormat":1},{"version":"92abba98a71c0244a6bcdd3ad4d2e04f1d0a8bcae57d2bb865bf53d1ac86e3d0","impliedFormat":1},{"version":"d2afa0d86bc6f2e72c1cf2ecb2372bf1b0f002493706a81f2b9a3ee4f944e219","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"93a3b8e57c68e348fc4054b245bd7cf4893225f56c991028844b693c2fa8c03c","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"1b3395fe23460dd30674c940494aaf8422dc6afbc516a72c431404fb97473c3f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"10904d3f5029f1af161add728e02ffd8034988a9e4563a9c7e0b7387b9372da0","affectsGlobalScope":true,"impliedFormat":1},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"d7143573dd84bfa1a6dd646ff7708923ecaeaef5a2d6d233fa096b42409573e0","signature":"0140bd63bda3f811cfb572cca554801326b6ef00e385f05a4f2ee60859d79f9f"},{"version":"297521b8f677a466e2130c562e262e55e52eaefa9e7bb79f318b6ffc4d1acc0c","signature":"602a32b54d8c8be2ae8e86915fd68e59b7c390e6a782f4cf91765b60e277a641"},{"version":"718e310098071b8f43dd7f9af9ef84cdcdeb6e8eb85c8aa8c898cabfedb5d24a","signature":"1420a878330c43b1bd930f4f1192e6fb3a1619346e1353a980ca4516f5412318"},{"version":"d96ba21986a964f639641feb679902383073ab8e66a939cba0e963f55afd78ab","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f24b7d38f5aa868b828c102bd9beb0d52d312da033b409a813d86d2d80bf0432","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"65712cb2bc02add1a823fe6c4b22745f399d147c30d3ec30e875d570475cff78","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"1feb6e38ff08eb92c81881ebaf06d292b38ece08adc3b281ea7a2e88219588e5",{"version":"c6ff85f84b43c93a20b42b3c494ecd7ad05630656e766063060c83cb9b2242a9","impliedFormat":1},{"version":"b104e2da53231a529373174880dc0abfbc80184bb473b6bf2a9a0746bebb663d","impliedFormat":99},{"version":"3d4bb4d84af5f0b348f01c85537da1c7afabc174e48806c8b20901377c57b8e4","impliedFormat":99},{"version":"a2500b15294325d9784a342145d16ef13d9efb1c3c6cb4d89934b2c0d521b4ab","impliedFormat":99},{"version":"79d5c409e84764fabdd276976a31928576dcf9aea37be3b5a81f74943f01f3ff","impliedFormat":99},{"version":"8ea020ea63ecc981b9318fc532323e31270c911a7ade4ba74ab902fcf8281c45","impliedFormat":99},{"version":"c81e1a9b03e4de1225b33ac84aaf50a876837057828e0806d025daf919bf2d51","impliedFormat":99},{"version":"bb7264d8bd6152524f2ef5dae5c260ae60d459bf406202258bd0ce57c79e5a6d","impliedFormat":99},{"version":"fb66165c4976bc21a4fde14101e36c43d46f907489b7b6a5f2a2679108335d4a","impliedFormat":99},{"version":"628c2e0a0b61be3e44f296083e6af9b5a9b6881037dd43e7685ee473930a4404","impliedFormat":99},{"version":"4776f1e810184f538d55c5da92da77f491999054a1a1ee69a2d995ab2e8d1bc0","impliedFormat":99},{"version":"11544c4e626eab113df9432e97a371693c98c17ae4291d2ad425af5ef00e580b","impliedFormat":99},{"version":"e1847b81166d25f29213d37115253c5b82ec9ee78f19037592aa173e017636d5","impliedFormat":99},{"version":"fe0bd60f36509711c4a69c0e00c0111f5ecdc685e6c1a2ae99bd4d56c76c07fc","impliedFormat":99},{"version":"b8f3f4ee9aae88a9cec9797d166209eb2a7e4beb8a15e0fc3c8b90c9682c337d","impliedFormat":99},{"version":"ea3c4f5121fe2e86101c155ebe60b435c729027ae50025b2a4e1d12a476002ae","impliedFormat":99},{"version":"372db10bea0dbe1f8588f82b339152b11847e6a4535d57310292660c8a9acfc5","impliedFormat":99},{"version":"6f9fba6349c16eed21d139d5562295e8d5aafa5abe6e8ebcde43615a80c69ac1","impliedFormat":99},{"version":"1474533e27d0e3e45a417ea153d4612f0adbff055f244a29606a1fae6db56cda","impliedFormat":99},{"version":"c7fd8a79d0495955d55bfea34bbdb85235b0f27b417a81afc395655ef43d091d","impliedFormat":99},{"version":"987405949bfafbb1c93d976c3352fe33bfb85303a79fc5d9588b681e4af6c3b3","impliedFormat":99},{"version":"867bc1f5a168fd86d12d828dfafd77c557f13b4326588615b19e301f6856f70c","impliedFormat":99},{"version":"6beddab08d635b4c16409a748dcd8de38a8e444a501b8e79d89f458ae88579d1","impliedFormat":99},{"version":"1dea5c7bf28569228ffcc83e69e1c759e7f0133c232708e09cfa4d7ed3ec7079","impliedFormat":99},{"version":"6114545678bb75e581982c990597ca3ba7eeef185256a14c906edfc949db2cd1","impliedFormat":99},{"version":"5c8625f8dbbd94ab6ca171d621049c810cce4fce6ec1fd1c24c331d9858dce17","impliedFormat":99},{"version":"af36e5f207299ba2013f981dffacd4a04cdce2dd4bd255fff084e7257bf8b947","impliedFormat":99},{"version":"c69c720b733cdaa3b4542f4c1206d9f0fcf3696f87a6e88adb15db6882fbcd69","impliedFormat":99},{"version":"9c37e66916cbbe7d96301934b665ec712679c3cb99081ccaae4034b987533a59","impliedFormat":99},{"version":"2e1a163ab5b5c2640d7f5a100446bbcaeda953a06439c901b2ae307f7088dc30","impliedFormat":99},{"version":"f0b3406d2bc2c262f218c42a125832e026997278a890ef3549fa49e62177ce86","impliedFormat":99},{"version":"756cf223ca25eb36c413b2a286fa108f19a5ac39dc6d65f2c590dc118f6150df","impliedFormat":99},{"version":"70ce03da8740ca786a1a78b8a61394ecf812dd1acf2564d0ce6be5caf29e58d9","impliedFormat":99},{"version":"e0f5707d91bb950edb6338e83dd31b6902b6620018f6aa5fd0f504c2b0ea61f5","impliedFormat":99},{"version":"0dc7ae20eab8097b0c7a48b5833f6329e976f88af26055cdae6337141ff2c12e","impliedFormat":99},{"version":"76b6db79c0f5b326ff98b15829505efd25d36ce436b47fe59781ac9aec0d7f1b","impliedFormat":99},{"version":"786f3f186af874ea3e34c2aeef56a0beab90926350f3375781c0a3aa844cd76e","impliedFormat":99},{"version":"63dbc8fa1dcbfb8af6c48f004a1d31988f42af171596c5cca57e4c9d5000d291","impliedFormat":99},{"version":"aa235b26568b02c10d74007f577e0fa21a266745029f912e4fba2c38705b3abe","impliedFormat":99},{"version":"3d6d570b5f36cf08d9ad8d93db7ddc90fa7ccc0c177de2e9948bb23cde805d32","impliedFormat":99},{"version":"9a60faaa0d582db70f85a94a3439bd83720a9468928b76b4db561a1a0137fa90","impliedFormat":99},{"version":"627e2ac450dcd71bdd8c1614b5d3a02b214ad92a1621ebeb2642dffb9be93715","impliedFormat":99},{"version":"813514ef625cb8fc3befeec97afddfb3b80b80ced859959339d99f3ad538d8fe","impliedFormat":99},{"version":"624f8a7a76f26b9b0af9524e6b7fa50f492655ab7489c3f5f0ddd2de5461b0c3","impliedFormat":99},{"version":"d6b6fa535b18062680e96b2f9336e301312a2f7bdaeb47c4a5b3114c3de0c08b","impliedFormat":99},{"version":"818e8f95d3851073e92bcad7815367dd8337863aaf50d79e703ac479cca0b6a4","impliedFormat":99},{"version":"29b716ff24d0db64060c9a90287f9de2863adf0ef1efef71dbaba33ebc20b390","impliedFormat":99},{"version":"2530c36527a988debd39fed6504d8c51a3e0f356aaf2d270edd492f4223bdeff","impliedFormat":99},{"version":"2553cfd0ec0164f3ea228c5badd1ba78607d034fc2dec96c781026a28095204b","impliedFormat":99},{"version":"6e943693dbc91aa2c6c520e7814316469c8482d5d93df51178d8ded531bb29ee","impliedFormat":99},{"version":"e74e1249b69d9f49a6d9bfa5305f2a9f501e18de6ab0829ab342abf6d55d958b","impliedFormat":99},{"version":"16f60d6924a9e0b4b9961e42b5e586b28ffd57cdfa236ae4408f7bed9855a816","impliedFormat":99},{"version":"493c2d42f1b6cfe3b13358ff3085b90fa9a65d4858ea4d02d43772c0795006ec","impliedFormat":99},{"version":"3702c7cbcd937d7b96e5376fe562fd77b4598fe93c7595ee696ebbfefddac70f","impliedFormat":99},{"version":"848621f6b65b3963f86c51c8b533aea13eadb045da52515e6e1407dea19b8457","impliedFormat":99},{"version":"c15b679c261ce17551e17a40a42934aeba007580357f1a286c79e8e091ee3a76","impliedFormat":99},{"version":"156108cedad653a6277b1cb292b18017195881f5fe837fb7f9678642da8fa8f2","impliedFormat":99},{"version":"0a0bb42c33e9faf63e0b49a429e60533ab392f4f02528732ecbd62cfc2d54c10","impliedFormat":99},{"version":"70fa95cd7cb511e55c9262246de1f35f3966c50e8795a147a93c538db824cdc8","impliedFormat":99},{"version":"bc28d8cec56b5f91c8a2ec131444744b13f63c53ce670cb31d4dffdfc246ba34","impliedFormat":99},{"version":"7bd87c0667376e7d6325ada642ec29bf28e940cb146d21d270cac46b127e5313","impliedFormat":99},{"version":"0318969deede7190dd3567433a24133f709874c5414713aac8b706a5cb0fe347","impliedFormat":99},{"version":"3770586d5263348c664379f748428e6f17e275638f8620a60490548d1fada8b4","impliedFormat":99},{"version":"ff65e6f720ba4bf3da5815ca1c2e0df2ece2911579f307c72f320d692410e03d","impliedFormat":99},{"version":"edb4f17f49580ebcec71e1b7217ad1139a52c575e83f4f126db58438a549b6df","impliedFormat":99},{"version":"353c0cbb6e39e73e12c605f010fddc912c8212158ee0c49a6b2e16ede22cdaab","impliedFormat":99},{"version":"e125fdbea060b339306c30c33597b3c677e00c9e78cd4bf9a15b3fb9474ebb5d","impliedFormat":99},{"version":"ee141f547382d979d56c3b059fc12b01a88b7700d96f085e74268bc79f48c40a","impliedFormat":99},{"version":"1d64132735556e2a1823044b321c929ad4ede45b81f3e04e0e23cf76f4cbf638","impliedFormat":99},{"version":"8b4a3550a3cac035fe928701bc046f5fac76cca32c7851376424b37312f4b4ca","impliedFormat":99},{"version":"5fd7f9b36f48d6308feba95d98817496274be1939a9faa5cd9ed0f8adf3adf3a","impliedFormat":99},{"version":"15a8f79b1557978d752c0be488ee5a70daa389638d79570507a3d4cfc620d49d","impliedFormat":99},{"version":"d4c14ea7d76619ef4244e2c220c2caeec78d10f28e1490eeac89df7d2556b79f","impliedFormat":99},{"version":"8096207a00346207d9baf7bc8f436ef45a20818bf306236a4061d6ccc45b0372","impliedFormat":99},{"version":"040f2531989793c4846be366c100455789834ba420dfd6f36464fe73b68e35b6","impliedFormat":99},{"version":"c5c7020a1d11b7129eb8ddffb7087f59c83161a3792b3560dcd43e7528780ab0","impliedFormat":99},{"version":"d1f97ea020060753089059e9b6de1ab05be4cb73649b595c475e2ec197cbce0f","impliedFormat":99},{"version":"b5ddca6fd676daf45113412aa2b8242b8ee2588e99d68c231ab7cd3d88b392fa","impliedFormat":99},{"version":"77404ec69978995e3278f4a2d42940acbf221da672ae9aba95ffa485d0611859","impliedFormat":99},{"version":"4e6672fb142798b69bcb8d6cd5cc2ec9628dbea9744840ee3599b3dcd7b74b09","impliedFormat":99},{"version":"609653f5b74ef61422271a28dea232207e7ab8ad1446de2d57922e3678160f01","impliedFormat":99},{"version":"9f96251a94fbff4038b464ee2d99614bca48e086e1731ae7a2b5b334826d3a86","impliedFormat":99},{"version":"cacbb7f3e679bdea680c6c609f4403574a5de8b66167b8867967083a40821e2a","impliedFormat":99},{"version":"ee4cf97e8bad27c9e13a17a9f9cbd86b32e9fbc969a5c3f479dafb219209848c","impliedFormat":99},{"version":"3a4e35b6e99ed398e77583ffc17f8774cb4253f8796c0e04ce07c26636fed4a9","impliedFormat":99},{"version":"08d323cb848564baef1ecbe29df14f7ad84e5b2eaf2e02ea8cb422f069dcb2fa","impliedFormat":99},{"version":"a05b53646fa669b87d8b97c1fb7c0183d771680fdd1276b12e68bed4e84cf556","impliedFormat":99},{"version":"c3b9c02a31b36dd3a4067f420316c550f93d463e46b2704391100428e145fd7f","impliedFormat":99},{"version":"b2a4d01fcf005530c3f8689ac0197e5fd6b75eb031e73ca39e5a27d41793a5d8","impliedFormat":99},{"version":"e99d9167596f997dd2da0de0751a9f0e2f4100f07bddf049378719191aee87f6","impliedFormat":99},{"version":"40cc853264e24e0578580194c76e25628acdd1111b54ec8abf59b834c4942839","impliedFormat":99},{"version":"403971c465292dedc8dff308f430c6b69ec5e19ea98d650dae40c70f2399dc14","impliedFormat":99},{"version":"fd3774aa27a30b17935ad360d34570820b26ec70fa5fcfd44c7e884247354d37","impliedFormat":99},{"version":"7b149b38e54fe0149fe500c5d5a049654ce17b1705f6a1f72dd50d84c6a678b9","impliedFormat":99},{"version":"3eb76327823b6288eb4ed4648ebf4e75cf47c6fbc466ed920706b801399f7dc3","impliedFormat":99},{"version":"c6a219d0d39552594a4cc75970768004f99684f28890fc36a42b853af04997b7","impliedFormat":99},{"version":"2110d74b178b022ca8c5ae8dcc46e759c34cf3b7e61cb2f8891fd8d24cb614ef","impliedFormat":99},{"version":"38f5e025404a3108f5bb41e52cead694a86d16ad0005e0ef7718a2a31e959d1e","impliedFormat":99},{"version":"8db133d270ebb1ba3fa8e2c4ab48df2cc79cb03a705d47ca9f959b0756113d3d","impliedFormat":99},{"version":"fc9294185089a62f8287130bc100fa5ab11f3e6af8874127bbdf7600f19913ee","impliedFormat":99},{"version":"f06e5783d10123b74b14e141426a80234b9d6e5ad94bfc4850ea912719f4987c","impliedFormat":99},{"version":"de9466be4b561ad0079ac95ca7445c99fdf45ef115a93af8e2e933194b3cdf4c","impliedFormat":99},{"version":"0c1eed961c15e1242389b0497628709f59d7afd50d5a1955daa10b5bd3b68fc2","impliedFormat":99},{"version":"5e07a9f7f130e5404c202bf7b0625a624c9d266b980576f5d62608ef21d96eab","impliedFormat":99},{"version":"2f97d5063ab69bf32d6417d71765fc154dc6ff7c16700db7c4af5341a965c277","impliedFormat":99},{"version":"a8a9459dd76ef5eeef768da4ce466c5539d73b26334131bd1dd6cbd74ce48fa2","impliedFormat":99},{"version":"123ff203ffba727213e5095b9a59091cdbc9d1d94bae0d6adb98060ef410016c","impliedFormat":99},{"version":"9e4d81dd52d5a8b6c159c0b2f2b5fbe2566f12fcc81f7ba7ebb46ca604657b45","impliedFormat":99},{"version":"9ee245e7c6aa2d81ee0d7f30ff6897334842c469b0e20da24b3cddc6f635cc06","impliedFormat":99},{"version":"e7d5132674ddcd01673b0517eebc44c17f478126284c3eabd0a552514cb992bb","impliedFormat":99},{"version":"a820710a917f66fa88a27564465a033c393e1322a61eb581d1f20e0680b498f1","impliedFormat":99},{"version":"19086752f80202e6a993e2e45c0e7fc7c7fc4315c4805f3464625f54d919fa2e","impliedFormat":99},{"version":"141aebe2ee4fecd417d44cf0dabf6b80592c43164e1fbd9bfaf03a4ec377c18e","impliedFormat":99},{"version":"72c35a5291e2e913387583717521a25d15f1e77d889191440dc855c7e821b451","impliedFormat":99},{"version":"ec1c67b32d477ceeebf18bdeb364646d6572e9dd63bb736f461d7ea8510aca4f","impliedFormat":99},{"version":"fb555843022b96141c2bfaf9adcc3e5e5c2d3f10e2bcbd1b2b666bd701cf9303","impliedFormat":99},{"version":"f851083fc20ecc00ff8aaf91ba9584e924385768940654518705423822de09e8","impliedFormat":99},{"version":"c8d53cdb22eedf9fc0c8e41a1d9a147d7ad8997ed1e306f1216ed4e8daedb6b3","impliedFormat":99},{"version":"6c052f137bab4ba9ed6fd76f88a8d00484df9d5cb921614bb4abe60f51970447","impliedFormat":99},{"version":"e182c297b81a8cb2614ebf5d5d29500987deb641ea310802754d2fec3ef3ff00","impliedFormat":99},{"version":"7d5c2df0c3706f45b77970232aa3a38952561311ccc8fcb7591e1b7a469ad761","impliedFormat":99},{"version":"2c41502b030205006ea3849c83063c4327342fbf925d8ed93b18309428fdd832","impliedFormat":99},{"version":"d12eecede214f8807a719178d7d7e2fc32f227d4705d123c3f45d8a3b5765f38","impliedFormat":99},{"version":"c8893abd114f341b860622b92c9ffc8c9eb9f21f6541bd3cbc9a4aa9b1097e42","impliedFormat":99},{"version":"825674da70d892b7e32c53f844c5dfce5b15ea67ceda4768f752eed2f02d8077","impliedFormat":99},{"version":"2c676d27ef1afbc8f8e514bb46f38550adf177ae9b0102951111116fa7ea2e10","impliedFormat":99},{"version":"a6072f5111ea2058cb4d592a4ee241f88b198498340d9ad036499184f7798ae2","impliedFormat":99},{"version":"ab87c99f96d9b1bf93684b114b27191944fef9a164476f2c6c052b93eaac0a4f","impliedFormat":99},{"version":"13e48eaca1087e1268f172607ae2f39c72c831a482cab597076c6073c97a15e7","impliedFormat":99},{"version":"19597dbe4500c782a4252755510be8324451847354cd8e204079ae81ab8d0ef6","impliedFormat":99},{"version":"f7d487e5f0104f0737951510ea361bc919f5b5f3ebc51807f81ce54934a3556f","impliedFormat":99},{"version":"efa8c5897e0239017e5b53e3f465d106b00d01ee94c9ead378a33284a2998356","impliedFormat":99},{"version":"fe3c53940b26832930246d4c39d6e507c26a86027817882702cf03bff314fa1d","impliedFormat":99},{"version":"53ee33b91d4dc2787eccebdbd396291e063db1405514bb3ab446e1ca3fd81a90","impliedFormat":99},{"version":"c4a97da118b4e6dde7c1daa93c4da17f0c4eedece638fc6dcc84f4eb1d370808","impliedFormat":99},{"version":"71666363fbdb0946bfc38a8056c6010060d1a526c0584145a9560151c6962b4f","impliedFormat":99},{"version":"1326f3630d26716257e09424f33074a945940afd64f2482e2bbc885258fca6bb","impliedFormat":99},{"version":"cc2eb5b23140bbceadf000ef2b71d27ac011d1c325b0fc5ecd42a3221db5fb2e","impliedFormat":99},{"version":"d04f5f3e90755ed40b25ed4c6095b6ad13fc9ce98b34a69c8da5ed38e2dbab5a","impliedFormat":99},{"version":"280b04a2238c0636dad2f25bbbbac18cf7bb933c80e8ec0a44a1d6a9f9d69537","impliedFormat":99},{"version":"0e9a2d784877b62ad97ed31816b1f9992563fdda58380cd696e796022a46bfdf","impliedFormat":99},{"version":"1b1411e7a3729bc632d8c0a4d265de9c6cbba4dc36d679c26dad87507faedee3","impliedFormat":99},{"version":"c478cfb0a2474672343b932ea69da64005bbfc23af5e661b907b0df8eb87bcb7","impliedFormat":99},{"version":"1a7bff494148b6e66642db236832784b8b2c9f5ad9bff82de14bcdb863dadcd9","impliedFormat":99},{"version":"65e6ad2d939dd38d03b157450ba887d2e9c7fd0f8f9d3008c0d1e59a0d8a73b4","impliedFormat":99},{"version":"f72b400dbf8f27adbda4c39a673884cb05daf8e0a1d8152eec2480f5700db36c","impliedFormat":99},{"version":"347f6fe4308288802eb123596ad9caf06755e80cfc7f79bbe56f4141a8ee4c50","impliedFormat":99},{"version":"5f5baa59149d3d6d6cef2c09d46bb4d19beb10d6bee8c05b7850c33535b3c438","impliedFormat":99},{"version":"a8f0c99380c9e91a73ecfc0a8582fbdefde3a1351e748079dc8c0439ea97b6db","impliedFormat":99},{"version":"be02e3c3cb4e187fd252e7ae12f6383f274e82288c8772bb0daf1a4e4af571ad","impliedFormat":99},{"version":"82ca40fb541799273571b011cd9de6ee9b577ef68acc8408135504ae69365b74","impliedFormat":99},{"version":"e671e3fc9b6b2290338352606f6c92e6ecf1a56459c3f885a11080301ca7f8de","impliedFormat":99},{"version":"a2e4b90260194318b1fa1e6b0554d257a0862c10e982c8907d30d1e7f3d463af","impliedFormat":99},{"version":"5559ab4aa1ba9fac7225398231a179d63a4c4dccd982a17f09404b536980dae8","impliedFormat":99},{"version":"2d7b9e1626f44684252d826a8b35770b77ce7c322734a5d3236b629a301efdcf","impliedFormat":99},{"version":"5b8dafbb90924201f655931d429a4eceb055f11c836a6e9cbc7c3aecf735912d","impliedFormat":99},{"version":"0b9be1f90e5e154b61924a28ed2de133fd1115b79c682b1e3988ac810674a5c4","impliedFormat":99},{"version":"7a9477ba5fc17786ee74340780083f39f437904229a0cd57fc9a468fd6567eb8","impliedFormat":99},{"version":"3da1dd252145e279f23d85294399ed2120bf8124ed574d34354a0a313c8554b6","impliedFormat":99},{"version":"e5c4080de46b1a486e25a54ddbb6b859312359f9967a7dc3c9d5cf4676378201","impliedFormat":99},{"version":"cfe1cdf673d2db391fd1a1f123e0e69c7ca06c31d9ac8b35460130c5817c8d29","impliedFormat":99},{"version":"b9701f688042f44529f99fd312c49fea853e66538c19cfcbb9ef024fdb5470cc","impliedFormat":99},{"version":"6daa62c5836cc12561d12220d385a4a243a4a5a89afd6f2e48009a8dd8f0ad83","impliedFormat":99},{"version":"c74550758053cf21f7fea90c7f84fa66c27c5f5ac1eca77ce6c2877dbfdec4d1","impliedFormat":99},{"version":"bd8310114a3a5283faac25bfbfc0d75b685a3a3e0d827ee35d166286bdd4f82e","impliedFormat":99},{"version":"1459ae97d13aeb6e457ccffac1fbb5c5b6d469339729d9ef8aeb8f0355e1e2c9","impliedFormat":99},{"version":"1bf03857edaebf4beba27459edf97f9407467dc5c30195425cb8a5d5a573ea52","impliedFormat":99},{"version":"f6b4833d66c12c9106a3299e520ed46f9a4c443cefc22c993315c4bb97a28db1","impliedFormat":99},{"version":"746c02f8b99bd90c4d135badaab575c6cfce0d030528cf90190c8914b0934ea3","impliedFormat":99},{"version":"a858ba8df5e703977dee467b10af084398919e99c9e42559180e75953a1f6ef6","impliedFormat":99},{"version":"d2dcd6105c195d0409abd475b41363789c63ae633282f04465e291a68a151685","impliedFormat":99},{"version":"0b569ed836f0431c2efaef9b6017e8b700a7fed319866d7667f1189957275045","impliedFormat":99},{"version":"9371612fd8638d7f6a249a14843132e7adb0b5c84edba9ed7905e835b644c013","impliedFormat":99},{"version":"0c72189b6ec67331476a36ec70a2b8ce6468dc4db5d3eb52deb9fefbd6981ebb","impliedFormat":99},{"version":"af8dd6bb70bfcb2c6b2de0d42240c2c952b9040af259a287e78eaf883ef1ce0d","impliedFormat":99},{"version":"7e4a27fd17dbb256314c2513784236f2ae2023573e83d0e65ebddfda336701db","impliedFormat":99},{"version":"131ecac1c7c961041df80a1dc353223af4e658d56ba1516317f79bd5400cffeb","impliedFormat":99},{"version":"f3a55347fb874828e442c2916716d56552ac3478204c29c0d47e698c00eb5d28","impliedFormat":99},{"version":"49ebbdfe7427d784ccdc8325bdecc8dda1719a7881086f14751879b4f8d70c21","impliedFormat":99},{"version":"c1692845412646f17177eb62feb9588c8b5d5013602383f02ae9d38f3915020c","impliedFormat":99},{"version":"b1b440e6c973d920935591a3d360d79090b8cf58947c0230259225b02cf98a83","impliedFormat":99},{"version":"defc2ae12099f46649d12aa4872ce23ba43fba275920c00c398487eaf091bbae","impliedFormat":99},{"version":"620390fbef44884902e4911e7473531e9be4db37eeef2da52a34449d456b4617","impliedFormat":99},{"version":"e60440cbd3ec916bc5f25ada3a6c174619745c38bfca58d3554f7d62905dc376","impliedFormat":99},{"version":"86388eda63dcb65b4982786eec9f80c3ef21ca9fb2808ff58634e712f1f39a27","impliedFormat":99},{"version":"022cd098956e78c9644e4b3ad1fe460fac6914ca9349d6213f518386baf7c96b","impliedFormat":99},{"version":"dfc67e73325643e92f71f94276b5fb3be09c59a1eeee022e76c61ae99f3eda4b","impliedFormat":99},{"version":"8c3d6c9abaa0b383f43cac0c227f063dc4018d851a14b6c2142745a78553c426","impliedFormat":99},{"version":"ee551dc83df0963c1ee03dc32ce36d83b3db9793f50b1686dc57ec2bbffc98af","impliedFormat":99},{"version":"968832c4ffd675a0883e3d208b039f205e881ae0489cc13060274cf12e0e4370","impliedFormat":99},{"version":"c593ca754961cfd13820add8b34da35a114cda7215d214e4177a1b0e1a7f3377","impliedFormat":99},{"version":"ed88c51aa3b33bb2b6a8f2434c34f125946ba7b91ed36973169813fdad57f1ec","impliedFormat":99},{"version":"a9ea477d5607129269848510c2af8bcfd8e262ebfbd6cd33a6c451f0cd8f5257","impliedFormat":99},{"version":"c9b868ce3c992a9f81fa8aa3d7839356d677c3f03c0b4584dce4ecd710ee601b","impliedFormat":1},{"version":"68f7865785fea7b6822ee8b9975b7934f6f6c3a908393ffca96ce3d0f0bc8122","impliedFormat":1},{"version":"3bf23090b94bda18a619623d2652b48ea904e26304267b10fcbdb85e032b7351","impliedFormat":1},{"version":"d4d6aab35ead2fbdafc31c9b0cb8a5b5939c7d24c63356c979757194eaa282cf","impliedFormat":1},{"version":"41e505053447b27c132cab048c148ece25b79d688e7f221e915994c4151dfeec","impliedFormat":1},{"version":"6a2c60605a0cf6b80e7e563159c55ea3c25d32871a9e4c3ec8ec231c2cba5e80","impliedFormat":1},{"version":"3e2f739bdfb6b194ae2af13316b4c5bb18b3fe81ac340288675f92ba2061b370","affectsGlobalScope":true,"impliedFormat":1}],"root":[[190,196]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":99,"outDir":"../..","rootDir":"../../../..","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[170,1],[171,2],[177,3],[169,4],[178,5],[164,6],[165,7],[163,2],[186,8],[185,9],[182,10],[187,11],[183,2],[159,2],[161,12],[162,13],[396,14],[197,2],[390,15],[389,16],[200,17],[201,18],[338,17],[339,19],[320,20],[321,21],[204,22],[205,23],[275,24],[276,25],[249,17],[250,26],[243,17],[244,27],[335,28],[333,29],[334,2],[349,30],[350,31],[219,32],[220,33],[351,34],[352,35],[353,36],[354,37],[211,38],[212,39],[337,40],[336,41],[322,17],[323,42],[215,43],[216,44],[239,2],[240,45],[357,46],[355,47],[356,48],[358,49],[359,50],[362,51],[360,52],[363,29],[361,53],[364,54],[367,55],[365,56],[366,57],[368,58],[217,38],[218,59],[343,60],[340,61],[341,62],[342,2],[318,63],[319,64],[263,65],[262,66],[260,67],[259,68],[261,69],[370,70],[369,71],[372,72],[371,73],[248,74],[247,17],[226,75],[224,76],[223,22],[225,77],[375,78],[379,79],[373,80],[374,81],[376,78],[377,78],[378,78],[265,82],[264,22],[281,83],[279,84],[280,29],[277,85],[278,86],[214,87],[213,17],[271,88],[202,17],[203,89],[270,90],[308,91],[311,92],[309,93],[310,94],[222,95],[221,17],[313,96],[312,22],[291,97],[290,17],[246,98],[245,17],[317,99],[316,100],[285,101],[284,102],[282,103],[283,104],[274,105],[273,106],[272,107],[381,108],[380,109],[298,110],[297,111],[296,112],[345,113],[344,2],[289,114],[288,115],[286,116],[287,117],[267,118],[266,22],[210,119],[209,120],[208,121],[207,122],[206,123],[302,124],[301,125],[232,126],[231,22],[236,127],[235,128],[300,129],[299,17],[346,2],[348,130],[347,2],[305,131],[304,132],[303,133],[383,134],[382,135],[385,136],[384,137],[331,138],[332,139],[330,140],[269,141],[268,2],[315,142],[314,143],[242,144],[241,17],[293,145],[292,17],[199,146],[198,2],[252,147],[253,148],[258,149],[251,150],[255,151],[254,152],[256,153],[257,154],[307,155],[306,22],[238,156],[237,22],[388,157],[387,158],[386,159],[325,160],[324,17],[295,161],[294,17],[230,162],[228,163],[227,22],[229,164],[327,165],[326,17],[234,166],[233,17],[329,167],[328,17],[395,168],[392,169],[393,170],[394,171],[391,172],[188,173],[102,174],[103,174],[104,175],[50,176],[105,177],[106,178],[107,179],[48,2],[108,180],[109,181],[110,182],[111,183],[112,184],[113,185],[114,185],[115,186],[116,187],[117,188],[118,189],[51,2],[49,2],[119,190],[120,191],[121,192],[155,193],[122,194],[123,2],[124,195],[125,196],[74,197],[86,198],[71,199],[87,200],[96,201],[62,202],[63,203],[61,204],[95,205],[90,206],[94,207],[65,208],[83,209],[64,210],[93,211],[59,212],[60,206],[66,213],[67,2],[73,214],[70,213],[57,215],[97,216],[88,217],[77,218],[76,213],[78,219],[81,220],[75,221],[79,222],[91,205],[68,223],[69,224],[82,225],[58,200],[85,226],[84,213],[72,224],[80,227],[89,2],[56,2],[92,228],[126,229],[127,230],[128,231],[129,232],[130,233],[131,234],[132,235],[133,235],[134,236],[135,2],[136,237],[137,238],[139,239],[138,240],[140,241],[141,242],[142,243],[143,244],[144,245],[145,246],[146,247],[147,248],[148,249],[149,250],[150,251],[151,252],[152,253],[52,2],[53,254],[54,2],[55,2],[98,255],[99,256],[100,2],[101,241],[153,257],[154,258],[180,2],[181,2],[179,259],[184,260],[167,2],[189,261],[156,2],[158,262],[157,263],[160,2],[175,264],[173,265],[174,266],[168,267],[166,2],[176,268],[172,269],[46,2],[47,2],[9,2],[8,2],[2,2],[10,2],[11,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[3,2],[18,2],[19,2],[4,2],[20,2],[24,2],[21,2],[22,2],[23,2],[25,2],[26,2],[27,2],[5,2],[28,2],[29,2],[30,2],[31,2],[6,2],[35,2],[32,2],[33,2],[34,2],[36,2],[7,2],[37,2],[42,2],[43,2],[38,2],[39,2],[40,2],[41,2],[1,2],[44,2],[45,2],[196,270],[192,271],[191,272],[190,2],[193,273],[194,274],[195,275]],"affectedFilesPendingEmit":[[196,17],[192,17],[191,17],[190,17],[193,17],[194,17],[195,17]],"emitSignatures":[190,191,192,193,194,195,196],"version":"5.9.3"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CompletionEventType, SimulatedPrinter } from './simulatedPrinter.js';
|
|
2
|
+
/** As much of a socket as the push side uses. `ws` satisfies it; so does a test's stand-in. */
|
|
3
|
+
export interface Connected {
|
|
4
|
+
send(message: string): void;
|
|
5
|
+
isOpen(): boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Who is listening to the printer, and what they are told.
|
|
9
|
+
*
|
|
10
|
+
* AIDEV-NOTE: only sockets that have completed the auth handshake are in here. The api key itself
|
|
11
|
+
* is never checked - this is a test double, not a security boundary - but requiring the handshake
|
|
12
|
+
* to have HAPPENED is protocol conformance, and it is the only cover that the shop's client
|
|
13
|
+
* authenticates at all now that the key no longer rides along in the URL.
|
|
14
|
+
*/
|
|
15
|
+
export declare class PushSockets {
|
|
16
|
+
private readonly printer;
|
|
17
|
+
private readonly authenticated;
|
|
18
|
+
constructor(printer: SimulatedPrinter);
|
|
19
|
+
/** A frame arrived. An acceptable one joins the listeners and is brought up to date at once. */
|
|
20
|
+
said(socket: Connected, raw: string): void;
|
|
21
|
+
left(socket: Connected): void;
|
|
22
|
+
forgetEveryone(): void;
|
|
23
|
+
/** How many would receive a broadcast now. */
|
|
24
|
+
listening(): number;
|
|
25
|
+
event(type: CompletionEventType, path: string): void;
|
|
26
|
+
status(): void;
|
|
27
|
+
private tell;
|
|
28
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who is listening to the printer, and what they are told.
|
|
3
|
+
*
|
|
4
|
+
* AIDEV-NOTE: only sockets that have completed the auth handshake are in here. The api key itself
|
|
5
|
+
* is never checked - this is a test double, not a security boundary - but requiring the handshake
|
|
6
|
+
* to have HAPPENED is protocol conformance, and it is the only cover that the shop's client
|
|
7
|
+
* authenticates at all now that the key no longer rides along in the URL.
|
|
8
|
+
*/
|
|
9
|
+
export class PushSockets {
|
|
10
|
+
constructor(printer) {
|
|
11
|
+
this.printer = printer;
|
|
12
|
+
this.authenticated = new Set();
|
|
13
|
+
}
|
|
14
|
+
// AIDEV-NOTE: silence IS the rejection, exactly as OctoPrint answers a bad auth frame. Nothing is
|
|
15
|
+
// sent and the socket is left open, so a client that got it wrong waits for events that never
|
|
16
|
+
// come - which is the failure a real printer would give it.
|
|
17
|
+
/** A frame arrived. An acceptable one joins the listeners and is brought up to date at once. */
|
|
18
|
+
said(socket, raw) {
|
|
19
|
+
if (!this.printer.authenticates(raw))
|
|
20
|
+
return;
|
|
21
|
+
this.authenticated.add(socket);
|
|
22
|
+
// Real OctoPrint sends this the moment a client is entitled to it, and a reconnecting client
|
|
23
|
+
// depends on it to learn whether the job it was waiting on is still running.
|
|
24
|
+
socket.send(JSON.stringify({ history: this.printer.statusPayload() }));
|
|
25
|
+
}
|
|
26
|
+
left(socket) {
|
|
27
|
+
this.authenticated.delete(socket);
|
|
28
|
+
}
|
|
29
|
+
forgetEveryone() {
|
|
30
|
+
this.authenticated.clear();
|
|
31
|
+
}
|
|
32
|
+
/** How many would receive a broadcast now. */
|
|
33
|
+
listening() {
|
|
34
|
+
return this.authenticated.size;
|
|
35
|
+
}
|
|
36
|
+
event(type, path) {
|
|
37
|
+
this.tell(JSON.stringify({ event: { type, payload: { path } } }));
|
|
38
|
+
}
|
|
39
|
+
status() {
|
|
40
|
+
this.tell(JSON.stringify({ current: this.printer.statusPayload() }));
|
|
41
|
+
}
|
|
42
|
+
tell(message) {
|
|
43
|
+
for (const socket of this.authenticated) {
|
|
44
|
+
if (socket.isOpen())
|
|
45
|
+
socket.send(message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export type CompletionEventType = 'PrintDone' | 'PrintFailed' | 'PrintCancelled';
|
|
2
|
+
export interface PrintHistory {
|
|
3
|
+
success: number;
|
|
4
|
+
failure: number;
|
|
5
|
+
last: {
|
|
6
|
+
date: number;
|
|
7
|
+
printTime: number;
|
|
8
|
+
success: boolean;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface FiledJob {
|
|
12
|
+
name: string;
|
|
13
|
+
path: string;
|
|
14
|
+
type: 'machinecode';
|
|
15
|
+
prints?: PrintHistory;
|
|
16
|
+
}
|
|
17
|
+
/** A printer already running something takes nothing else. */
|
|
18
|
+
export declare class Busy extends Error {
|
|
19
|
+
}
|
|
20
|
+
export declare function parseAuthFrame(raw: string): {
|
|
21
|
+
name: string;
|
|
22
|
+
session: string;
|
|
23
|
+
} | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* The printer octo-sim pretends to be: what it has been told, what it is running, and what it has
|
|
26
|
+
* run. It knows nothing of HTTP or of a socket - `octoPrintServer` is the transport over it, and
|
|
27
|
+
* keeping the two apart is what lets every rule here be asked directly.
|
|
28
|
+
*/
|
|
29
|
+
export declare class SimulatedPrinter {
|
|
30
|
+
private readonly now;
|
|
31
|
+
private readonly newSession;
|
|
32
|
+
private readonly issuedSessions;
|
|
33
|
+
private readonly printHistory;
|
|
34
|
+
private readonly uploadedFiles;
|
|
35
|
+
private running;
|
|
36
|
+
private lastJob;
|
|
37
|
+
constructor(now?: () => number, newSession?: () => string);
|
|
38
|
+
/** Passive login: the step that yields the session key the push socket's auth frame requires. */
|
|
39
|
+
logIn(): {
|
|
40
|
+
name: string;
|
|
41
|
+
session: string;
|
|
42
|
+
};
|
|
43
|
+
/** Whether a push socket presenting this frame is entitled to events. Anything else is not. */
|
|
44
|
+
authenticates(raw: string): boolean;
|
|
45
|
+
/** What it is running, if anything - the one job a real machine can have on the bed. */
|
|
46
|
+
busyWith(): string | null;
|
|
47
|
+
/** Take a job, answering where it was filed. Refuses a second one while the first is running. */
|
|
48
|
+
take(filename: string, folder: string): string;
|
|
49
|
+
/** The job on the bed has ended, however it ended. */
|
|
50
|
+
finished(remotePath: string, type: CompletionEventType): void;
|
|
51
|
+
/** The bed is free again, with nothing recorded - a job handler that threw rather than finished. */
|
|
52
|
+
gaveUp(): void;
|
|
53
|
+
/** What the shop can read back about a file, or nothing for one this printer never had. */
|
|
54
|
+
filed(remotePath: string): FiledJob | undefined;
|
|
55
|
+
/** What this printer says about itself, in the shape a push socket carries. */
|
|
56
|
+
statusPayload(): unknown;
|
|
57
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/** A printer already running something takes nothing else. */
|
|
2
|
+
export class Busy extends Error {
|
|
3
|
+
}
|
|
4
|
+
const SIMULATED_USER = 'operator';
|
|
5
|
+
// AIDEV-NOTE: OctoPrint's own sockjs.py splits the auth payload on ':' and requires exactly two
|
|
6
|
+
// parts, `<user id>:<session key>`, where the session came from a login call. Matched here rather
|
|
7
|
+
// than waved through, because a simulator that accepts any shape is what let this codebase send
|
|
8
|
+
// `apikey:<the api key>` for months without anything noticing.
|
|
9
|
+
export function parseAuthFrame(raw) {
|
|
10
|
+
try {
|
|
11
|
+
const message = JSON.parse(raw);
|
|
12
|
+
if (typeof message.auth !== 'string')
|
|
13
|
+
return undefined;
|
|
14
|
+
const parts = message.auth.split(':');
|
|
15
|
+
if (parts.length !== 2 || parts[0] === '' || parts[1] === '')
|
|
16
|
+
return undefined;
|
|
17
|
+
return { name: parts[0], session: parts[1] };
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The printer octo-sim pretends to be: what it has been told, what it is running, and what it has
|
|
25
|
+
* run. It knows nothing of HTTP or of a socket - `octoPrintServer` is the transport over it, and
|
|
26
|
+
* keeping the two apart is what lets every rule here be asked directly.
|
|
27
|
+
*/
|
|
28
|
+
export class SimulatedPrinter {
|
|
29
|
+
constructor(now = Date.now, newSession = () => `sess-${Math.random().toString(36).slice(2)}`) {
|
|
30
|
+
this.now = now;
|
|
31
|
+
this.newSession = newSession;
|
|
32
|
+
this.issuedSessions = new Map();
|
|
33
|
+
this.printHistory = new Map();
|
|
34
|
+
this.uploadedFiles = new Set();
|
|
35
|
+
this.running = null;
|
|
36
|
+
this.lastJob = null;
|
|
37
|
+
}
|
|
38
|
+
// AIDEV-NOTE: the key is not checked, on login or anywhere else - this is a test double and not a
|
|
39
|
+
// security boundary. What IS enforced is that a session was issued at all, which is the protocol
|
|
40
|
+
// conformance a client can get wrong.
|
|
41
|
+
/** Passive login: the step that yields the session key the push socket's auth frame requires. */
|
|
42
|
+
logIn() {
|
|
43
|
+
const session = this.newSession();
|
|
44
|
+
this.issuedSessions.set(session, SIMULATED_USER);
|
|
45
|
+
return { name: SIMULATED_USER, session };
|
|
46
|
+
}
|
|
47
|
+
/** Whether a push socket presenting this frame is entitled to events. Anything else is not. */
|
|
48
|
+
authenticates(raw) {
|
|
49
|
+
const auth = parseAuthFrame(raw);
|
|
50
|
+
return auth !== undefined && this.issuedSessions.get(auth.session) === auth.name;
|
|
51
|
+
}
|
|
52
|
+
/** What it is running, if anything - the one job a real machine can have on the bed. */
|
|
53
|
+
busyWith() {
|
|
54
|
+
return this.running;
|
|
55
|
+
}
|
|
56
|
+
// AIDEV-NOTE: the path the CLIENT asked for. The folder used to be decided here - one client's
|
|
57
|
+
// filing scheme baked into the simulator - so a client uploading anywhere else was told its print
|
|
58
|
+
// had finished under a path it had never named, and waited for an event that could not come.
|
|
59
|
+
/** Take a job, answering where it was filed. Refuses a second one while the first is running. */
|
|
60
|
+
take(filename, folder) {
|
|
61
|
+
if (this.running !== null)
|
|
62
|
+
throw new Busy(`Printer is busy: ${this.running} is still printing`);
|
|
63
|
+
const remotePath = folder === '' ? filename : `${folder}/${filename}`;
|
|
64
|
+
this.running = remotePath;
|
|
65
|
+
this.lastJob = remotePath;
|
|
66
|
+
this.uploadedFiles.add(remotePath);
|
|
67
|
+
return remotePath;
|
|
68
|
+
}
|
|
69
|
+
// AIDEV-NOTE: OctoPrint records a cancelled print as a failure, not a third outcome - so does
|
|
70
|
+
// this. A client reconciling after the fact genuinely cannot tell the two apart; pretending
|
|
71
|
+
// otherwise here would let a test pass that the real server would fail.
|
|
72
|
+
/** The job on the bed has ended, however it ended. */
|
|
73
|
+
finished(remotePath, type) {
|
|
74
|
+
this.running = null;
|
|
75
|
+
const success = type === 'PrintDone';
|
|
76
|
+
const previous = this.printHistory.get(remotePath) ?? { success: 0, failure: 0 };
|
|
77
|
+
this.printHistory.set(remotePath, {
|
|
78
|
+
success: previous.success + (success ? 1 : 0),
|
|
79
|
+
failure: previous.failure + (success ? 0 : 1),
|
|
80
|
+
last: { date: Math.floor(this.now() / 1000), printTime: 1, success },
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/** The bed is free again, with nothing recorded - a job handler that threw rather than finished. */
|
|
84
|
+
gaveUp() {
|
|
85
|
+
this.running = null;
|
|
86
|
+
}
|
|
87
|
+
/** What the shop can read back about a file, or nothing for one this printer never had. */
|
|
88
|
+
filed(remotePath) {
|
|
89
|
+
if (!this.uploadedFiles.has(remotePath))
|
|
90
|
+
return undefined;
|
|
91
|
+
const prints = this.printHistory.get(remotePath);
|
|
92
|
+
return {
|
|
93
|
+
name: remotePath.split('/').pop() ?? remotePath,
|
|
94
|
+
path: remotePath,
|
|
95
|
+
type: 'machinecode',
|
|
96
|
+
// Real OctoPrint leaves `prints` out entirely for a file it has never printed.
|
|
97
|
+
...(prints ? { prints } : {}),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// AIDEV-NOTE: the shape real OctoPrint pushes as `history` (once, on connect, to bring a fresh
|
|
101
|
+
// client up to date) and `current` (as things change). `state.text` is here for faithfulness
|
|
102
|
+
// only - it is documented as human-readable, and a client that decides anything from it rather
|
|
103
|
+
// than from the flags is the bug this payload exists to catch.
|
|
104
|
+
//
|
|
105
|
+
// AIDEV-NOTE: `job.file.path` goes on naming the last job after it ends, as OctoPrint does -
|
|
106
|
+
// `state.flags` is the only thing that says whether it is still running. Clearing it to null on
|
|
107
|
+
// completion (as this server used to) made the path harmless to ignore, which let a client that
|
|
108
|
+
// reads the wrong field look correct here and fail against a real printer.
|
|
109
|
+
/** What this printer says about itself, in the shape a push socket carries. */
|
|
110
|
+
statusPayload() {
|
|
111
|
+
return {
|
|
112
|
+
state: {
|
|
113
|
+
text: this.running === null ? 'Operational' : 'Printing',
|
|
114
|
+
flags: {
|
|
115
|
+
operational: true,
|
|
116
|
+
printing: this.running !== null,
|
|
117
|
+
paused: false,
|
|
118
|
+
pausing: false,
|
|
119
|
+
cancelling: false,
|
|
120
|
+
sdReady: false,
|
|
121
|
+
error: false,
|
|
122
|
+
ready: this.running === null,
|
|
123
|
+
closedOrError: false,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
job: { file: { path: this.lastJob } },
|
|
127
|
+
progress: { completion: this.running === null ? null : 0, printTimeLeft: null },
|
|
128
|
+
logs: [],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@3d-print-shop/octoprint-sim",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist"
|
|
7
|
+
],
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p tests/tsconfig.json",
|
|
22
|
+
"test": "echo \"tests run from root\" && exit 0"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"express": "^5.2.1",
|
|
26
|
+
"multer": "^2.2.0",
|
|
27
|
+
"ws": "^8.21.3"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/express": "^5",
|
|
31
|
+
"@types/multer": "^2",
|
|
32
|
+
"@types/ws": "^8",
|
|
33
|
+
"typescript": "^5.9.3"
|
|
34
|
+
},
|
|
35
|
+
"author": "dcorbin",
|
|
36
|
+
"license": "PolyForm-Noncommercial-1.0.0",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/dcorbin-apps/3d-print-shop.git",
|
|
40
|
+
"directory": "packages/octoprint-sim"
|
|
41
|
+
}
|
|
42
|
+
}
|