@workflow/core 5.0.0-beta.51 → 5.0.0-beta.53
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/README.md +2 -0
- package/dist/log-format.d.ts +4 -0
- package/dist/log-format.d.ts.map +1 -1
- package/dist/log-format.js +47 -9
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +6 -4
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +15 -6
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +37 -9
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +73 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/docs/foundations/errors-and-retries.mdx +10 -0
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Core runtime package for [Workflow SDK](https://workflow-sdk.dev).
|
|
4
4
|
|
|
5
|
+
Failed-run logs include underlying error causes and codes to help diagnose failures such as socket, DNS, and TLS errors. Unreadable causes are marked without preventing the run from being recorded as failed.
|
|
6
|
+
|
|
5
7
|
Queued step messages carry immutable run identity in `runContext`, so step
|
|
6
8
|
execution skips the initial `runs.get` and fetches the run row only when
|
|
7
9
|
continuing into workflow replay. Messages from older producers without
|
package/dist/log-format.d.ts
CHANGED
|
@@ -7,10 +7,14 @@
|
|
|
7
7
|
* user error · FatalError
|
|
8
8
|
* run wrun_…
|
|
9
9
|
* step step_… · add (./workflows/x)
|
|
10
|
+
* cause TypeError: fetch failed
|
|
10
11
|
* hint: Move the call to a step function.
|
|
11
12
|
* FatalError: …
|
|
12
13
|
* at … (trimmed stack, internals collapsed)
|
|
13
14
|
*
|
|
15
|
+
* The stack body comes from the message when the caller embedded it there,
|
|
16
|
+
* and from the `errorStack` metadata field otherwise.
|
|
17
|
+
*
|
|
14
18
|
* Without this composition, callers passing `${framing}\n${stack}` as the
|
|
15
19
|
* message and structured fields as the metadata object got `util.inspect`'s
|
|
16
20
|
* default object dump appended *after* the stack, which buries the run ID
|
package/dist/log-format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-format.d.ts","sourceRoot":"","sources":["../src/log-format.ts"],"names":[],"mappings":"AAQA
|
|
1
|
+
{"version":3,"file":"log-format.d.ts","sourceRoot":"","sources":["../src/log-format.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,MAAM,CAkBR"}
|
package/dist/log-format.js
CHANGED
|
@@ -9,10 +9,14 @@ import { formatStepName, formatWorkflowName, parseStepName, parseWorkflowName, }
|
|
|
9
9
|
* user error · FatalError
|
|
10
10
|
* run wrun_…
|
|
11
11
|
* step step_… · add (./workflows/x)
|
|
12
|
+
* cause TypeError: fetch failed
|
|
12
13
|
* hint: Move the call to a step function.
|
|
13
14
|
* FatalError: …
|
|
14
15
|
* at … (trimmed stack, internals collapsed)
|
|
15
16
|
*
|
|
17
|
+
* The stack body comes from the message when the caller embedded it there,
|
|
18
|
+
* and from the `errorStack` metadata field otherwise.
|
|
19
|
+
*
|
|
16
20
|
* Without this composition, callers passing `${framing}\n${stack}` as the
|
|
17
21
|
* message and structured fields as the metadata object got `util.inspect`'s
|
|
18
22
|
* default object dump appended *after* the stack, which buries the run ID
|
|
@@ -25,7 +29,15 @@ import { formatStepName, formatWorkflowName, parseStepName, parseWorkflowName, }
|
|
|
25
29
|
*/
|
|
26
30
|
export function composeLogLine(prefix, message, metadata) {
|
|
27
31
|
const [framing, ...rest] = message.split('\n');
|
|
28
|
-
const
|
|
32
|
+
const embeddedBody = rest.join('\n');
|
|
33
|
+
// Callers supply the stack one of two ways: embedded in the message (step
|
|
34
|
+
// executor / combined runtime render `${framing}\n${stack}`) or as an
|
|
35
|
+
// `errorStack` field next to a single-line framing (the run-failure log in
|
|
36
|
+
// runtime.ts). Promote the field when the message has no body of its own so
|
|
37
|
+
// the stack survives either way, and gets the same trimming either way.
|
|
38
|
+
const body = embeddedBody.trim()
|
|
39
|
+
? embeddedBody
|
|
40
|
+
: (pickString(metadata ?? {}, 'errorStack') ?? '');
|
|
29
41
|
const fields = renderStructuredFields(framing ?? '', body, metadata);
|
|
30
42
|
const trimmedBody = trimStackBody(body);
|
|
31
43
|
const lines = [`${prefix} ${framing ?? ''}`];
|
|
@@ -38,12 +50,13 @@ export function composeLogLine(prefix, message, metadata) {
|
|
|
38
50
|
function renderStructuredFields(framing, body, metadata) {
|
|
39
51
|
if (!metadata || Object.keys(metadata).length === 0)
|
|
40
52
|
return null;
|
|
41
|
-
// Drop fields
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
53
|
+
// Drop fields the composed line already shows elsewhere. `errorStack` is
|
|
54
|
+
// always rendered as the body — embedded in the message by the step
|
|
55
|
+
// executor / combined runtime, or promoted out of the field by
|
|
56
|
+
// composeLogLine — so repeating it here would be pure noise. A message
|
|
57
|
+
// with neither (a WARN whose framing is a fixed sentence and whose
|
|
58
|
+
// `errorMessage` is the only place the underlying error's text appears)
|
|
59
|
+
// keeps `errorMessage` and renders it as its own row below.
|
|
47
60
|
const redundant = new Set();
|
|
48
61
|
redundant.add('errorStack');
|
|
49
62
|
const errorMessage = pickString(metadata, 'errorMessage');
|
|
@@ -61,15 +74,23 @@ function renderStructuredFields(framing, body, metadata) {
|
|
|
61
74
|
'errorName',
|
|
62
75
|
'errorMessage',
|
|
63
76
|
'errorStack',
|
|
77
|
+
'errorCause',
|
|
64
78
|
'hint',
|
|
65
79
|
'attempt',
|
|
66
80
|
'retryCount',
|
|
67
81
|
]);
|
|
68
82
|
const lines = [];
|
|
69
83
|
// Header: error class + attribution badge.
|
|
84
|
+
//
|
|
85
|
+
// Without a badge the row is just the class name, which the stack header
|
|
86
|
+
// below (`Name: message`) already states — so it only earns its line when
|
|
87
|
+
// the stack doesn't open with that same name. A badge always earns its
|
|
88
|
+
// line: attribution is the one thing the stack cannot express, and the
|
|
89
|
+
// class stays attached to it as the thing being attributed.
|
|
70
90
|
const errorName = pickString(metadata, 'errorName');
|
|
71
91
|
const attribution = pickString(metadata, 'errorAttribution');
|
|
72
|
-
|
|
92
|
+
const nameEchoedByStack = errorName !== null && stackHeaderNames(body, errorName);
|
|
93
|
+
if (attribution || (errorName && !nameEchoedByStack)) {
|
|
73
94
|
const badge = attribution
|
|
74
95
|
? attribution === 'sdk'
|
|
75
96
|
? Ansi.magenta('sdk error')
|
|
@@ -114,6 +135,14 @@ function renderStructuredFields(framing, body, metadata) {
|
|
|
114
135
|
if (errorMessage && !redundant.has('errorMessage')) {
|
|
115
136
|
lines.push(` ${kvKey('error')} ${formatPassthroughValue(errorMessage)}`);
|
|
116
137
|
}
|
|
138
|
+
// What the error was wrapping. Sits directly under the message it explains,
|
|
139
|
+
// one link per line (see `formatErrorCauseChain`). Skipped when the stack
|
|
140
|
+
// body already spells the chain out, which happens when the stack came off
|
|
141
|
+
// an already-inspected error and carries `[cause]:` lines of its own.
|
|
142
|
+
const errorCause = pickString(metadata, 'errorCause');
|
|
143
|
+
if (errorCause && !body.includes(errorCause)) {
|
|
144
|
+
lines.push(` ${kvKey('cause')} ${formatPassthroughValue(errorCause)}`);
|
|
145
|
+
}
|
|
117
146
|
const hint = pickString(metadata, 'hint');
|
|
118
147
|
if (hint) {
|
|
119
148
|
lines.push(` ${Ansi.hint(hint)}`);
|
|
@@ -216,6 +245,15 @@ function isFrameworkFrame(line) {
|
|
|
216
245
|
}
|
|
217
246
|
return false;
|
|
218
247
|
}
|
|
248
|
+
/**
|
|
249
|
+
* True when the stack body opens with `<errorName>:` (or the bare name), the
|
|
250
|
+
* shape V8 gives `Error#stack`. Used to avoid restating the class in a
|
|
251
|
+
* header row directly above it.
|
|
252
|
+
*/
|
|
253
|
+
function stackHeaderNames(body, errorName) {
|
|
254
|
+
const header = body.split('\n', 1)[0]?.trim() ?? '';
|
|
255
|
+
return header === errorName || header.startsWith(`${errorName}:`);
|
|
256
|
+
}
|
|
219
257
|
function pickString(metadata, key) {
|
|
220
258
|
const v = metadata[key];
|
|
221
259
|
return typeof v === 'string' && v.length > 0 ? v : null;
|
|
@@ -254,4 +292,4 @@ function formatPassthroughValue(v) {
|
|
|
254
292
|
return String(v);
|
|
255
293
|
}
|
|
256
294
|
}
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYyxFQUNkLE9BQWUsRUFDZixRQUE2QztJQUU3QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4QyxNQUFNLEtBQUssR0FBYSxDQUFDLEdBQUcsTUFBTSxJQUFJLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELElBQUksTUFBTTtRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsSUFBSSxXQUFXO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQzdCLE9BQWUsRUFDZixJQUFZLEVBQ1osUUFBNkM7SUFFN0MsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFB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QUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBYyxDQUFDLEVBQUU7UUFDbEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBVTtJQUN4QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQztpQkFDTCxLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBbnNpIGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMvYW5zaSc7XG5pbXBvcnQge1xuICBmb3JtYXRTdGVwTmFtZSxcbiAgZm9ybWF0V29ya2Zsb3dOYW1lLFxuICBwYXJzZVN0ZXBOYW1lLFxuICBwYXJzZVdvcmtmbG93TmFtZSxcbn0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcblxuLyoqXG4gKiBTdHJ1Y3R1cmVkLWxvZyBjb21wb3NpdGlvbiBmb3IgYGNvbnNvbGUuZXJyb3JgIC8gYGNvbnNvbGUud2FybmAuIEVtaXRzXG4gKiBvbmUgc3RyaW5nIGluIHRocmVlIHNlY3Rpb25zIHNvIHRoZSBtb3N0IHVzZWZ1bCBpbmZvcm1hdGlvbiBpcyBhdCB0aGVcbiAqIHRvcCwgc3RhY2sgdHJhY2UgYXQgdGhlIGJvdHRvbTpcbiAqXG4gKiAgICAgW3dvcmtmbG93LXNka10gPGZyYW1pbmcgbGluZT5cbiAqICAgICAgIHVzZXIgZXJyb3IgwrcgRmF0YWxFcnJvclxuICogICAgICAgcnVuICAgIHdydW5f4oCmXG4gKiAgICAgICBzdGVwICAgc3RlcF/igKYgwrcgYWRkICguL3dvcmtmbG93cy94KVxuICogICAgICAgaGludDogIE1vdmUgdGhlIGNhbGwgdG8gYSBzdGVwIGZ1bmN0aW9uLlxuICogICAgIEZhdGFsRXJyb3I6IOKAplxuICogICAgICAgICBhdCDigKYgKHRyaW1tZWQgc3RhY2ssIGludGVybmFscyBjb2xsYXBzZWQpXG4gKlxuICogV2l0aG91dCB0aGlzIGNvbXBvc2l0aW9uLCBjYWxsZXJzIHBhc3NpbmcgYCR7ZnJhbWluZ31cXG4ke3N0YWNrfWAgYXMgdGhlXG4gKiBtZXNzYWdlIGFuZCBzdHJ1Y3R1cmVkIGZpZWxkcyBhcyB0aGUgbWV0YWRhdGEgb2JqZWN0IGdvdCBgdXRpbC5pbnNwZWN0YCdzXG4gKiBkZWZhdWx0IG9iamVjdCBkdW1wIGFwcGVuZGVkICphZnRlciogdGhlIHN0YWNrLCB3aGljaCBidXJpZXMgdGhlIHJ1biBJRFxuICogYW5kIGF0dHJpYnV0aW9uIGJhZGdlIHVuZGVyIDMwKyBsaW5lcyBvZiBgbm9kZV9tb2R1bGVzLy5wbnBtLy4uLmAgZnJhbWVzLlxuICpcbiAqIFRoZSBzYW1lIG1ldGFkYXRhIGlzIGFsc28gZW1pdHRlZCBhcyBzdHJ1Y3R1cmVkIE9UZWwgc3BhbiBldmVudHMgZnJvbVxuICogdGhlIGxvZ2dlciBpdHNlbGYsIHNvIGJhY2tlbmRzIHRoYXQgd2FudCBKU09OLXNoYXBlZCBkYXRhIHN0aWxsIGdldCBpdC5cbiAqIHdlYi93ZWItc2hhcmVkIGRvIG5vdCBjb25zdW1lIHN0ZGVyciBhdCBhbGw6IHRoZXkgcmVhZCBDQk9SL0pTT04gZXZlbnRcbiAqIHBheWxvYWRzIGZyb20gdGhlIFdvcmxkIGV2ZW50IGxvZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2VMb2dMaW5lKFxuICBwcmVmaXg6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG4gIGNvbnN0IFtmcmFtaW5nLCAuLi5yZXN0XSA9IG1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBib2R5ID0gcmVzdC5qb2luKCdcXG4nKTtcbiAgY29uc3QgZmllbGRzID0gcmVuZGVyU3RydWN0dXJlZEZpZWxkcyhmcmFtaW5nID8/ICcnLCBib2R5LCBtZXRhZGF0YSk7XG4gIGNvbnN0IHRyaW1tZWRCb2R5ID0gdHJpbVN0YWNrQm9keShib2R5KTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbYCR7cHJlZml4fSAke2ZyYW1pbmcgPz8gJyd9YF07XG4gIGlmIChmaWVsZHMpIGxpbmVzLnB1c2goZmllbGRzKTtcbiAgaWYgKHRyaW1tZWRCb2R5KSBsaW5lcy5wdXNoKHRyaW1tZWRCb2R5KTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKFxuICBmcmFtaW5nOiBzdHJpbmcsXG4gIGJvZHk6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBEcm9wIGZpZWxkcyB0aGF0IHRoZSBtZXNzYWdlIGFscmVhZHkgZW5jb2Rlcy4gV2UgcmVuZGVyIGZyYW1pbmdzIGFuZFxuICAvLyBzdGFja3MgaW50byB0aGUgbWVzc2FnZSBzdHJpbmcgaXRzZWxmIGluIHN0ZXAgZXhlY3V0b3IgLyBjb21iaW5lZCBydW50aW1lLCBzb1xuICAvLyByZXBlYXRpbmcgdGhlbSBoZXJlIHdvdWxkIGJlIHB1cmUgbm9pc2UuIEEgbWVzc2FnZSB3aXRoIG5laXRoZXIgKGEgV0FSTlxuICAvLyB3aG9zZSBmcmFtaW5nIGlzIGEgZml4ZWQgc2VudGVuY2UgYW5kIHdob3NlIGBlcnJvck1lc3NhZ2VgIGlzIHRoZSBvbmx5XG4gIC8vIHBsYWNlIHRoZSB1bmRlcmx5aW5nIGVycm9yJ3MgdGV4dCBhcHBlYXJzKSBrZWVwcyBgZXJyb3JNZXNzYWdlYCBhbmRcbiAgLy8gcmVuZGVycyBpdCBhcyBpdHMgb3duIHJvdyBiZWxvdy5cbiAgY29uc3QgcmVkdW5kYW50ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJlZHVuZGFudC5hZGQoJ2Vycm9yU3RhY2snKTtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yTWVzc2FnZScpO1xuICBpZiAoXG4gICAgZXJyb3JNZXNzYWdlICYmXG4gICAgKGZyYW1pbmcuaW5jbHVkZXMoZXJyb3JNZXNzYWdlKSB8fCBib2R5LmluY2x1ZGVzKGVycm9yTWVzc2FnZSkpXG4gICkge1xuICAgIHJlZHVuZGFudC5hZGQoJ2Vycm9yTWVzc2FnZScpO1xuICB9XG5cbiAgY29uc3Qgd2VsbEtub3duID0gbmV3IFNldChbXG4gICAgJ3dvcmtmbG93UnVuSWQnLFxuICAgICd3b3JrZmxvd05hbWUnLFxuICAgICdzdGVwSWQnLFxuICAgICdzdGVwTmFtZScsXG4gICAgJ2Vycm9yQXR0cmlidXRpb24nLFxuICAgICdlcnJvckNvZGUnLFxuICAgICdlcnJvck5hbWUnLFxuICAgICdlcnJvck1lc3NhZ2UnLFxuICAgICdlcnJvclN0YWNrJyxcbiAgICAnaGludCcsXG4gICAgJ2F0dGVtcHQnLFxuICAgICdyZXRyeUNvdW50JyxcbiAgXSk7XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gSGVhZGVyOiBlcnJvciBjbGFzcyArIGF0dHJpYnV0aW9uIGJhZGdlLlxuICBjb25zdCBlcnJvck5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JOYW1lJyk7XG4gIGNvbnN0IGF0dHJpYnV0aW9uID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yQXR0cmlidXRpb24nKTtcbiAgaWYgKGVycm9yTmFtZSB8fCBhdHRyaWJ1dGlvbikge1xuICAgIGNvbnN0IGJhZGdlID0gYXR0cmlidXRpb25cbiAgICAgID8gYXR0cmlidXRpb24gPT09ICdzZGsnXG4gICAgICAgID8gQW5zaS5tYWdlbnRhKCdzZGsgZXJyb3InKVxuICAgICAgICA6IEFuc2kucmVkKCd1c2VyIGVycm9yJylcbiAgICAgIDogJyc7XG4gICAgY29uc3QgY2xzID0gZXJyb3JOYW1lID8gQW5zaS5ib2xkKGVycm9yTmFtZSkgOiAnJztcbiAgICBjb25zdCBzZXAgPSBiYWRnZSAmJiBjbHMgPyBBbnNpLmRpbSgnIMK3ICcpIDogJyc7XG4gICAgbGluZXMucHVzaChgICAke2JhZGdlfSR7c2VwfSR7Y2xzfWApO1xuICB9XG5cbiAgLy8gSUQgKyBwYXJzZWQgZnJpZW5kbHktbmFtZSByb3dzLlxuICBjb25zdCBydW5JZCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICd3b3JrZmxvd1J1bklkJyk7XG4gIGNvbnN0IHdmTmFtZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICd3b3JrZmxvd05hbWUnKTtcbiAgaWYgKHJ1bklkKSB7XG4gICAgbGluZXMucHVzaChmb3JtYXRJZFJvdygncnVuJywgcnVuSWQsIHdmTmFtZSwgZm9ybWF0V29ya2Zsb3dOYW1lKSk7XG4gIH0gZWxzZSBpZiAod2ZOYW1lKSB7XG4gICAgbGluZXMucHVzaChmb3JtYXRJZFJvdygncnVuJywgbnVsbCwgd2ZOYW1lLCBmb3JtYXRXb3JrZmxvd05hbWUpKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBJZCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdzdGVwSWQnKTtcbiAgY29uc3Qgc3RlcE5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnc3RlcE5hbWUnKTtcbiAgaWYgKHN0ZXBJZCB8fCBzdGVwTmFtZSkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3N0ZXAnLCBzdGVwSWQsIHN0ZXBOYW1lLCBmb3JtYXRTdGVwTmFtZSkpO1xuICB9XG5cbiAgaWYgKG1ldGFkYXRhLmF0dGVtcHQgIT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS5yZXRyeUNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBgYXR0ZW1wdGAgYW5kIGByZXRyeUNvdW50YCByZWFkIGFtYmlndW91c2x5IG5leHQgdG8gZWFjaCBvdGhlciAoaXNcbiAgICAvLyBcIjMgcmV0cmllc1wiIHRoZSBsaW1pdCBvciB3aGF0IGFscmVhZHkgaGFwcGVuZWQ/KS4gUmVuZGVyIHRoZSBsaW1pdFxuICAgIC8vIGFzIFwibWF4IHJldHJpZXNcIiB0byBtYWtlIHRoZSBib3VuZGFyeSBleHBsaWNpdCwgYW5kIGtlZXAgYGF0dGVtcHRgXG4gICAgLy8gYXMgdGhlIGNvdW50IG9mIHRvdGFsIGludm9jYXRpb25zIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwuXG4gICAgY29uc3QgYSA9IG1ldGFkYXRhLmF0dGVtcHQ7XG4gICAgY29uc3QgciA9IG1ldGFkYXRhLnJldHJ5Q291bnQ7XG4gICAgaWYgKGEgIT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgIGAgICR7a3ZLZXkoJ3JldHJ5Jyl9ICR7YX0gJHtBbnNpLmRpbSgnYXR0ZW1wdHMgwrcnKX0gJHtyfSAke0Fuc2kuZGltKCdtYXggcmV0cmllcycpfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgJHtrdktleSgncmV0cnknKX0gJHthfSAke0Fuc2kuZGltKCdhdHRlbXB0cycpfWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGVycm9yQ29kZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdlcnJvckNvZGUnKTtcbiAgaWYgKGVycm9yQ29kZSAmJiBlcnJvckNvZGUgIT09IGVycm9yTmFtZSkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtrdktleSgnY29kZScpfSAke0Fuc2kuZGltKGVycm9yQ29kZSl9YCk7XG4gIH1cblxuICBpZiAoZXJyb3JNZXNzYWdlICYmICFyZWR1bmRhbnQuaGFzKCdlcnJvck1lc3NhZ2UnKSkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtrdktleSgnZXJyb3InKX0gJHtmb3JtYXRQYXNzdGhyb3VnaFZhbHVlKGVycm9yTWVzc2FnZSl9YCk7XG4gIH1cblxuICBjb25zdCBoaW50ID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2hpbnQnKTtcbiAgaWYgKGhpbnQpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7QW5zaS5oaW50KGhpbnQpfWApO1xuICB9XG5cbiAgLy8gU29ydGVkIHBhc3MtdGhyb3VnaCBmb3IgdW5rbm93biBmaWVsZHMuXG4gIGNvbnN0IHBhc3NUaHJvdWdoID0gT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpXG4gICAgLmZpbHRlcihcbiAgICAgIChbaywgdl0pID0+XG4gICAgICAgICF3ZWxsS25vd24uaGFzKGspICYmICFyZWR1bmRhbnQuaGFzKGspICYmIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG4gICAgKVxuICAgIC5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgcGFzc1Rocm91Z2gpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoayl9ICR7Zm9ybWF0UGFzc3Rocm91Z2hWYWx1ZSh2KX1gKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5sZW5ndGggPyBsaW5lcy5qb2luKCdcXG4nKSA6IG51bGw7XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIHN0YWNrIGRvd24gdG8gZnJhbWVzIHRoZSB1c2VyIGNhbiBhY3Qgb24uIFY4IHN0YWNrcyBmb3Igb3VyXG4gKiBydW50aW1lIGVycm9ycyBsb29rIGxpa2U6XG4gKlxuICogICAgIE5hbWU6IG1lc3NhZ2VcbiAqICAgICAgICAgYXQgdXNlclN0ZXAgKC4vd29ya2Zsb3dzL2Zvby50czoxMjoxMSlcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9ydW50aW1lL3N0ZXAtZXhlY3V0b3IudHM6NTM1OjMyKVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLi9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEDigKYv4oCmL2Jhc2Utc2VydmVyLmpzOjE0NTQ6OSlcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvcGVudGVsZW1ldHJ5K2FwaUDigKYv4oCmL2FwaS5qczo1NDQwKVxuICogICAgICAgICBhdCDigKYgKDE1IG1vcmUgZnJhbWVzIGludG8gTmV4dC5qcyAvIHBucG0gaW50ZXJuYWxzKVxuICpcbiAqIFR3by1wYXNzIHRyaW06XG4gKlxuICogICAxLiBEcm9wIGZyYW1ld29yay1pbnRlcm5hbCBmcmFtZXMgKGBub2RlX21vZHVsZXMvLnBucG0vYCwgYG5vZGU6aW50ZXJuYWwvYCxcbiAqICAgICAgVHVyYm9wYWNrLWJ1bmRsZWQgYG5vZGVfbW9kdWxlc19fcG5wbV8qYCAvIGBfbmV4dF9kaXN0XypgIGNodW5rcykuXG4gKiAgIDIuIENhcCB0aGUgc3Vydml2aW5nIGZyYW1lcyBhdCBgTUFYX1ZJU0lCTEVfRlJBTUVTYDogcGFzdCB0aGF0LCBldmVuXG4gKiAgICAgIFwidXNlci1pc2hcIiBmcmFtZXMgYXJlIHVzdWFsbHkgZGVlcCBhc3luYyB3cmFwcGluZyB0aGF0IGRvZXNuJ3QgaGVscFxuICogICAgICBwaW5wb2ludCB0aGUgdGhyb3cuIFRoZSB1c2VyIGNhbiBkcm9wIGludG8gdGhlIGluc3BlY3QgQ0xJIGZvciB0aGVcbiAqICAgICAgZnVsbCBzdGFjayBvbiBkZW1hbmQuXG4gKlxuICogRWFjaCBzdXBwcmVzc2VkIHJ1biBlbWl0cyBvbmUgc3VtbWFyeSBsaW5lIHNvIHBlb3BsZSBrbm93IGhvdyBtdWNoIHdhc1xuICogdHJpbW1lZC5cbiAqL1xuY29uc3QgTUFYX1ZJU0lCTEVfRlJBTUVTID0gNjtcblxuZnVuY3Rpb24gdHJpbVN0YWNrQm9keShib2R5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFib2R5KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbGluZXMgPSBib2R5LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgZHJvcHBlZFJ1biA9IDA7XG4gIGxldCB2aXNpYmxlRnJhbWVDb3VudCA9IDA7XG4gIGxldCBjYXBwZWRGcmFtZXMgPSAwO1xuXG4gIGNvbnN0IGZsdXNoRHJvcHBlZCA9ICgpID0+IHtcbiAgICBpZiAoZHJvcHBlZFJ1biA+IDApIHtcbiAgICAgIG91dC5wdXNoKFxuICAgICAgICBBbnNpLmRpbShcbiAgICAgICAgICBgICAgICAgICDigKYgJHtkcm9wcGVkUnVufSBtb3JlICR7ZHJvcHBlZFJ1biA9PT0gMSA/ICdmcmFtZScgOiAnZnJhbWVzJ30gaW4gZnJhbWV3b3JrIGludGVybmFsc2BcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGRyb3BwZWRSdW4gPSAwO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBjb25zdCBpc0ZyYW1lID0gbGluZS50cmltU3RhcnQoKS5zdGFydHNXaXRoKCdhdCAnKTtcbiAgICBpZiAoaXNGcmFtZSAmJiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmUpKSB7XG4gICAgICBkcm9wcGVkUnVuKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzRnJhbWUgJiYgdmlzaWJsZUZyYW1lQ291bnQgPj0gTUFYX1ZJU0lCTEVfRlJBTUVTKSB7XG4gICAgICBjYXBwZWRGcmFtZXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmbHVzaERyb3BwZWQoKTtcbiAgICBvdXQucHVzaChsaW5lKTtcbiAgICBpZiAoaXNGcmFtZSkgdmlzaWJsZUZyYW1lQ291bnQrKztcbiAgfVxuICBmbHVzaERyb3BwZWQoKTtcbiAgaWYgKGNhcHBlZEZyYW1lcyA+IDApIHtcbiAgICBvdXQucHVzaChcbiAgICAgIEFuc2kuZGltKFxuICAgICAgICBgICAgICAgICDigKYgJHtjYXBwZWRGcmFtZXN9IG1vcmUgJHtjYXBwZWRGcmFtZXMgPT09IDEgPyAnZnJhbWUnIDogJ2ZyYW1lcyd9IChydW4gXFxgcG5wbSB3ZiBpbnNwZWN0IHJ1biA8aWQ+XFxgIGZvciB0aGUgZnVsbCBzdGFjaylgXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBPbmx5IGF0LWZyYW1lcyBhcmUgY2FuZGlkYXRlcyBmb3Igc3RyaXBwaW5nLiBIZWFkZXIgbGluZXMgKGBOYW1lOiDigKZgKVxuICAvLyBhbmQgYXJiaXRyYXJ5IHRyYWlsaW5nIGNvbnRleHQgKGUuZy4gYGNvZGU6ICdVU0VSX0VSUk9SJ2ApIHBhc3MgdGhyb3VnaC5cbiAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCdhdCAnKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBub2RlOiogaW50ZXJuYWxzICh0aW1lcnMsIGFzeW5jIGhvb2tzLCB2bSwgZXRjLikgbmV2ZXIgaGVscCB1c2Vycy5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ25vZGU6aW50ZXJuYWwvJykpIHJldHVybiB0cnVlO1xuICAvLyBwbnBtLXJvb3RlZCBmcmFtZXdvcmtzIGluc3RhbGxlZCBhcyBub2RlX21vZHVsZXMgZGVwZW5kZW5jaWVzLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzLy5wbnBtLycpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVHVyYm9wYWNrL05leHQgYnVuZGxlIHRoZSBzYW1lIGZyYW1ld29yayBjb2RlIGludG8gY2h1bmtzIGxpa2VcbiAgLy8gYG5vZGVfbW9kdWxlc19fcG5wbV88aGFzaD4uXy5qc2AgYW5kIGA8Li4uPl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLFxuICAvLyBhbmQgZW1pdHMgTmV4dC5qcyBsb2FkZXIgcnVudGltZSBhcyBgMGR4Nl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLlxuICAvLyBUaGVzZSBhcmUgdGhlIGZyYW1lcyB0aGF0IHNob3cgdXAgYWZ0ZXIgVHVyYm9wYWNrIERDRSwgc2FtZSBpbnRlbnRcbiAgLy8gYXMgdGhlIHJhdyBgbm9kZV9tb2R1bGVzLy5wbnBtL2AgZmlsdGVyIGFib3ZlLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzX19wbnBtXycpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ19uZXh0X2Rpc3RfJykpIHJldHVybiB0cnVlO1xuICAvLyBQbGFpbiBub2RlX21vZHVsZXMgKG5vbi1wbnBtIHNldHVwcykgZm9yIHRoZSBzYW1lIGtpbmRzIG9mIGZyYW1ld29ya3MuXG4gIGlmIChcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvbmV4dC8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy92aXRlc3QvJykgfHxcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvQHZpdGVzdC8nKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBpY2tTdHJpbmcoXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAga2V5OiBzdHJpbmdcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2ID0gbWV0YWRhdGFba2V5XTtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA+IDAgPyB2IDogbnVsbDtcbn1cblxuZnVuY3Rpb24ga3ZLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQW5zaS5kaW0oa2V5LnBhZEVuZCg2KSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdElkUm93KFxuICBsYWJlbDogc3RyaW5nLFxuICBpZDogc3RyaW5nIHwgbnVsbCxcbiAgbmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgZm9ybWF0TmFtZTogKG46IHN0cmluZykgPT4gc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBpZENlbGwgPSBpZCA/IGlkIDogQW5zaS5kaW0oJ+KAlCcpO1xuICBjb25zdCBwYXJzZWQgPSBuYW1lXG4gICAgPyBsYWJlbCA9PT0gJ3J1bidcbiAgICAgID8gcGFyc2VXb3JrZmxvd05hbWUobmFtZSlcbiAgICAgIDogcGFyc2VTdGVwTmFtZShuYW1lKVxuICAgIDogbnVsbDtcbiAgY29uc3QgbmFtZUNlbGwgPSBwYXJzZWRcbiAgICA/IGAke0Fuc2kuZGltKCfCtycpfSAke2Zvcm1hdE5hbWUobmFtZSBhcyBzdHJpbmcpfWBcbiAgICA6ICcnO1xuICByZXR1cm4gYCAgJHtrdktleShsYWJlbCl9ICR7aWRDZWxsfSR7bmFtZUNlbGwgPyAnICcgKyBuYW1lQ2VsbCA6ICcnfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBhc3N0aHJvdWdoVmFsdWUodjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodi5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgIHJldHVybiB2XG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcCgobGluZSwgaSkgPT4gKGkgPT09IDAgPyBsaW5lIDogYCAgICAgICAgICR7bGluZX1gKSlcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHJldHVybiBTdHJpbmcodik7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHYpO1xuICB9XG59XG4iXX0=
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzVCLE1BQWMsRUFDZCxPQUFlLEVBQ2YsUUFBNkM7SUFFN0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQywwRUFBMEU7SUFDMUUsc0VBQXNFO0lBQ3RFLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUU7UUFDOUIsQ0FBQyxDQUFDLFlBQVk7UUFDZCxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRCxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRSxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFeEMsTUFBTSxLQUFLLEdBQWEsQ0FBQyxHQUFHLE1BQU0sSUFBSSxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RCxJQUFJLE1BQU07UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0s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cy9hbnNpJztcbmltcG9ydCB7XG4gIGZvcm1hdFN0ZXBOYW1lLFxuICBmb3JtYXRXb3JrZmxvd05hbWUsXG4gIHBhcnNlU3RlcE5hbWUsXG4gIHBhcnNlV29ya2Zsb3dOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQtbG9nIGNvbXBvc2l0aW9uIGZvciBgY29uc29sZS5lcnJvcmAgLyBgY29uc29sZS53YXJuYC4gRW1pdHNcbiAqIG9uZSBzdHJpbmcgaW4gdGhyZWUgc2VjdGlvbnMgc28gdGhlIG1vc3QgdXNlZnVsIGluZm9ybWF0aW9uIGlzIGF0IHRoZVxuICogdG9wLCBzdGFjayB0cmFjZSBhdCB0aGUgYm90dG9tOlxuICpcbiAqICAgICBbd29ya2Zsb3ctc2RrXSA8ZnJhbWluZyBsaW5lPlxuICogICAgICAgdXNlciBlcnJvciDCtyBGYXRhbEVycm9yXG4gKiAgICAgICBydW4gICAgd3J1bl/igKZcbiAqICAgICAgIHN0ZXAgICBzdGVwX+KApiDCtyBhZGQgKC4vd29ya2Zsb3dzL3gpXG4gKiAgICAgICBjYXVzZSAgVHlwZUVycm9yOiBmZXRjaCBmYWlsZWRcbiAqICAgICAgIGhpbnQ6ICBNb3ZlIHRoZSBjYWxsIHRvIGEgc3RlcCBmdW5jdGlvbi5cbiAqICAgICBGYXRhbEVycm9yOiDigKZcbiAqICAgICAgICAgYXQg4oCmICh0cmltbWVkIHN0YWNrLCBpbnRlcm5hbHMgY29sbGFwc2VkKVxuICpcbiAqIFRoZSBzdGFjayBib2R5IGNvbWVzIGZyb20gdGhlIG1lc3NhZ2Ugd2hlbiB0aGUgY2FsbGVyIGVtYmVkZGVkIGl0IHRoZXJlLFxuICogYW5kIGZyb20gdGhlIGBlcnJvclN0YWNrYCBtZXRhZGF0YSBmaWVsZCBvdGhlcndpc2UuXG4gKlxuICogV2l0aG91dCB0aGlzIGNvbXBvc2l0aW9uLCBjYWxsZXJzIHBhc3NpbmcgYCR7ZnJhbWluZ31cXG4ke3N0YWNrfWAgYXMgdGhlXG4gKiBtZXNzYWdlIGFuZCBzdHJ1Y3R1cmVkIGZpZWxkcyBhcyB0aGUgbWV0YWRhdGEgb2JqZWN0IGdvdCBgdXRpbC5pbnNwZWN0YCdzXG4gKiBkZWZhdWx0IG9iamVjdCBkdW1wIGFwcGVuZGVkICphZnRlciogdGhlIHN0YWNrLCB3aGljaCBidXJpZXMgdGhlIHJ1biBJRFxuICogYW5kIGF0dHJpYnV0aW9uIGJhZGdlIHVuZGVyIDMwKyBsaW5lcyBvZiBgbm9kZV9tb2R1bGVzLy5wbnBtLy4uLmAgZnJhbWVzLlxuICpcbiAqIFRoZSBzYW1lIG1ldGFkYXRhIGlzIGFsc28gZW1pdHRlZCBhcyBzdHJ1Y3R1cmVkIE9UZWwgc3BhbiBldmVudHMgZnJvbVxuICogdGhlIGxvZ2dlciBpdHNlbGYsIHNvIGJhY2tlbmRzIHRoYXQgd2FudCBKU09OLXNoYXBlZCBkYXRhIHN0aWxsIGdldCBpdC5cbiAqIHdlYi93ZWItc2hhcmVkIGRvIG5vdCBjb25zdW1lIHN0ZGVyciBhdCBhbGw6IHRoZXkgcmVhZCBDQk9SL0pTT04gZXZlbnRcbiAqIHBheWxvYWRzIGZyb20gdGhlIFdvcmxkIGV2ZW50IGxvZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2VMb2dMaW5lKFxuICBwcmVmaXg6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG4gIGNvbnN0IFtmcmFtaW5nLCAuLi5yZXN0XSA9IG1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBlbWJlZGRlZEJvZHkgPSByZXN0LmpvaW4oJ1xcbicpO1xuICAvLyBDYWxsZXJzIHN1cHBseSB0aGUgc3RhY2sgb25lIG9mIHR3byB3YXlzOiBlbWJlZGRlZCBpbiB0aGUgbWVzc2FnZSAoc3RlcFxuICAvLyBleGVjdXRvciAvIGNvbWJpbmVkIHJ1bnRpbWUgcmVuZGVyIGAke2ZyYW1pbmd9XFxuJHtzdGFja31gKSBvciBhcyBhblxuICAvLyBgZXJyb3JTdGFja2AgZmllbGQgbmV4dCB0byBhIHNpbmdsZS1saW5lIGZyYW1pbmcgKHRoZSBydW4tZmFpbHVyZSBsb2cgaW5cbiAgLy8gcnVudGltZS50cykuIFByb21vdGUgdGhlIGZpZWxkIHdoZW4gdGhlIG1lc3NhZ2UgaGFzIG5vIGJvZHkgb2YgaXRzIG93biBzb1xuICAvLyB0aGUgc3RhY2sgc3Vydml2ZXMgZWl0aGVyIHdheSwgYW5kIGdldHMgdGhlIHNhbWUgdHJpbW1pbmcgZWl0aGVyIHdheS5cbiAgY29uc3QgYm9keSA9IGVtYmVkZGVkQm9keS50cmltKClcbiAgICA/IGVtYmVkZGVkQm9keVxuICAgIDogKHBpY2tTdHJpbmcobWV0YWRhdGEgPz8ge30sICdlcnJvclN0YWNrJykgPz8gJycpO1xuICBjb25zdCBmaWVsZHMgPSByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKGZyYW1pbmcgPz8gJycsIGJvZHksIG1ldGFkYXRhKTtcbiAgY29uc3QgdHJpbW1lZEJvZHkgPSB0cmltU3RhY2tCb2R5KGJvZHkpO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtgJHtwcmVmaXh9ICR7ZnJhbWluZyA/PyAnJ31gXTtcbiAgaWYgKGZpZWxkcykgbGluZXMucHVzaChmaWVsZHMpO1xuICBpZiAodHJpbW1lZEJvZHkpIGxpbmVzLnB1c2godHJpbW1lZEJvZHkpO1xuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0cnVjdHVyZWRGaWVsZHMoXG4gIGZyYW1pbmc6IHN0cmluZyxcbiAgYm9keTogc3RyaW5nLFxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWRcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIW1ldGFkYXRhIHx8IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIC8vIERyb3AgZmllbGRzIHRoZSBjb21wb3NlZCBsaW5lIGFscmVhZHkgc2hvd3MgZWxzZXdoZXJlLiBgZXJyb3JTdGFja2AgaXNcbiAgLy8gYWx3YXlzIHJlbmRlcmVkIGFzIHRoZSBib2R5IOKAlCBlbWJlZGRlZCBpbiB0aGUgbWVzc2FnZSBieSB0aGUgc3RlcFxuICAvLyBleGVjdXRvciAvIGNvbWJpbmVkIHJ1bnRpbWUsIG9yIHByb21vdGVkIG91dCBvZiB0aGUgZmllbGQgYnlcbiAgLy8gY29tcG9zZUxvZ0xpbmUg4oCUIHNvIHJlcGVhdGluZyBpdCBoZXJlIHdvdWxkIGJlIHB1cmUgbm9pc2UuIEEgbWVzc2FnZVxuICAvLyB3aXRoIG5laXRoZXIgKGEgV0FSTiB3aG9zZSBmcmFtaW5nIGlzIGEgZml4ZWQgc2VudGVuY2UgYW5kIHdob3NlXG4gIC8vIGBlcnJvck1lc3NhZ2VgIGlzIHRoZSBvbmx5IHBsYWNlIHRoZSB1bmRlcmx5aW5nIGVycm9yJ3MgdGV4dCBhcHBlYXJzKVxuICAvLyBrZWVwcyBgZXJyb3JNZXNzYWdlYCBhbmQgcmVuZGVycyBpdCBhcyBpdHMgb3duIHJvdyBiZWxvdy5cbiAgY29uc3QgcmVkdW5kYW50ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJlZHVuZGFudC5hZGQoJ2Vycm9yU3RhY2snKTtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yTWVzc2FnZScpO1xuICBpZiAoXG4gICAgZXJyb3JNZXNzYWdlICYmXG4gICAgKGZyYW1pbmcuaW5jbHVkZXMoZXJyb3JNZXNzYWdlKSB8fCBib2R5LmluY2x1ZGVzKGVycm9yTWVzc2FnZSkpXG4gICkge1xuICAgIHJlZHVuZGFudC5hZGQoJ2Vycm9yTWVzc2FnZScpO1xuICB9XG5cbiAgY29uc3Qgd2VsbEtub3duID0gbmV3IFNldChbXG4gICAgJ3dvcmtmbG93UnVuSWQnLFxuICAgICd3b3JrZmxvd05hbWUnLFxuICAgICdzdGVwSWQnLFxuICAgICdzdGVwTmFtZScsXG4gICAgJ2Vycm9yQXR0cmlidXRpb24nLFxuICAgICdlcnJvckNvZGUnLFxuICAgICdlcnJvck5hbWUnLFxuICAgICdlcnJvck1lc3NhZ2UnLFxuICAgICdlcnJvclN0YWNrJyxcbiAgICAnZXJyb3JDYXVzZScsXG4gICAgJ2hpbnQnLFxuICAgICdhdHRlbXB0JyxcbiAgICAncmV0cnlDb3VudCcsXG4gIF0pO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEhlYWRlcjogZXJyb3IgY2xhc3MgKyBhdHRyaWJ1dGlvbiBiYWRnZS5cbiAgLy9cbiAgLy8gV2l0aG91dCBhIGJhZGdlIHRoZSByb3cgaXMganVzdCB0aGUgY2xhc3MgbmFtZSwgd2hpY2ggdGhlIHN0YWNrIGhlYWRlclxuICAvLyBiZWxvdyAoYE5hbWU6IG1lc3NhZ2VgKSBhbHJlYWR5IHN0YXRlcyDigJQgc28gaXQgb25seSBlYXJucyBpdHMgbGluZSB3aGVuXG4gIC8vIHRoZSBzdGFjayBkb2Vzbid0IG9wZW4gd2l0aCB0aGF0IHNhbWUgbmFtZS4gQSBiYWRnZSBhbHdheXMgZWFybnMgaXRzXG4gIC8vIGxpbmU6IGF0dHJpYnV0aW9uIGlzIHRoZSBvbmUgdGhpbmcgdGhlIHN0YWNrIGNhbm5vdCBleHByZXNzLCBhbmQgdGhlXG4gIC8vIGNsYXNzIHN0YXlzIGF0dGFjaGVkIHRvIGl0IGFzIHRoZSB0aGluZyBiZWluZyBhdHRyaWJ1dGVkLlxuICBjb25zdCBlcnJvck5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JOYW1lJyk7XG4gIGNvbnN0IGF0dHJpYnV0aW9uID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yQXR0cmlidXRpb24nKTtcbiAgY29uc3QgbmFtZUVjaG9lZEJ5U3RhY2sgPVxuICAgIGVycm9yTmFtZSAhPT0gbnVsbCAmJiBzdGFja0hlYWRlck5hbWVzKGJvZHksIGVycm9yTmFtZSk7XG4gIGlmIChhdHRyaWJ1dGlvbiB8fCAoZXJyb3JOYW1lICYmICFuYW1lRWNob2VkQnlTdGFjaykpIHtcbiAgICBjb25zdCBiYWRnZSA9IGF0dHJpYnV0aW9uXG4gICAgICA/IGF0dHJpYnV0aW9uID09PSAnc2RrJ1xuICAgICAgICA/IEFuc2kubWFnZW50YSgnc2RrIGVycm9yJylcbiAgICAgICAgOiBBbnNpLnJlZCgndXNlciBlcnJvcicpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGNscyA9IGVycm9yTmFtZSA/IEFuc2kuYm9sZChlcnJvck5hbWUpIDogJyc7XG4gICAgY29uc3Qgc2VwID0gYmFkZ2UgJiYgY2xzID8gQW5zaS5kaW0oJyDCtyAnKSA6ICcnO1xuICAgIGxpbmVzLnB1c2goYCAgJHtiYWRnZX0ke3NlcH0ke2Nsc31gKTtcbiAgfVxuXG4gIC8vIElEICsgcGFyc2VkIGZyaWVuZGx5LW5hbWUgcm93cy5cbiAgY29uc3QgcnVuSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dSdW5JZCcpO1xuICBjb25zdCB3Zk5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dOYW1lJyk7XG4gIGlmIChydW5JZCkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIHJ1bklkLCB3Zk5hbWUsIGZvcm1hdFdvcmtmbG93TmFtZSkpO1xuICB9IGVsc2UgaWYgKHdmTmFtZSkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIG51bGwsIHdmTmFtZSwgZm9ybWF0V29ya2Zsb3dOYW1lKSk7XG4gIH1cblxuICBjb25zdCBzdGVwSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnc3RlcElkJyk7XG4gIGNvbnN0IHN0ZXBOYW1lID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3N0ZXBOYW1lJyk7XG4gIGlmIChzdGVwSWQgfHwgc3RlcE5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGZvcm1hdElkUm93KCdzdGVwJywgc3RlcElkLCBzdGVwTmFtZSwgZm9ybWF0U3RlcE5hbWUpKTtcbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5hdHRlbXB0ICE9PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEucmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gYGF0dGVtcHRgIGFuZCBgcmV0cnlDb3VudGAgcmVhZCBhbWJpZ3VvdXNseSBuZXh0IHRvIGVhY2ggb3RoZXIgKGlzXG4gICAgLy8gXCIzIHJldHJpZXNcIiB0aGUgbGltaXQgb3Igd2hhdCBhbHJlYWR5IGhhcHBlbmVkPykuIFJlbmRlciB0aGUgbGltaXRcbiAgICAvLyBhcyBcIm1heCByZXRyaWVzXCIgdG8gbWFrZSB0aGUgYm91bmRhcnkgZXhwbGljaXQsIGFuZCBrZWVwIGBhdHRlbXB0YFxuICAgIC8vIGFzIHRoZSBjb3VudCBvZiB0b3RhbCBpbnZvY2F0aW9ucyBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsLlxuICAgIGNvbnN0IGEgPSBtZXRhZGF0YS5hdHRlbXB0O1xuICAgIGNvbnN0IHIgPSBtZXRhZGF0YS5yZXRyeUNvdW50O1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICBgICAke2t2S2V5KCdyZXRyeScpfSAke2F9ICR7QW5zaS5kaW0oJ2F0dGVtcHRzIMK3Jyl9ICR7cn0gJHtBbnNpLmRpbSgnbWF4IHJldHJpZXMnKX1gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ3JldHJ5Jyl9ICR7YX0gJHtBbnNpLmRpbSgnYXR0ZW1wdHMnKX1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBlcnJvckNvZGUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JDb2RlJyk7XG4gIGlmIChlcnJvckNvZGUgJiYgZXJyb3JDb2RlICE9PSBlcnJvck5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ2NvZGUnKX0gJHtBbnNpLmRpbShlcnJvckNvZGUpfWApO1xuICB9XG5cbiAgaWYgKGVycm9yTWVzc2FnZSAmJiAhcmVkdW5kYW50LmhhcygnZXJyb3JNZXNzYWdlJykpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ2Vycm9yJyl9ICR7Zm9ybWF0UGFzc3Rocm91Z2hWYWx1ZShlcnJvck1lc3NhZ2UpfWApO1xuICB9XG5cbiAgLy8gV2hhdCB0aGUgZXJyb3Igd2FzIHdyYXBwaW5nLiBTaXRzIGRpcmVjdGx5IHVuZGVyIHRoZSBtZXNzYWdlIGl0IGV4cGxhaW5zLFxuICAvLyBvbmUgbGluayBwZXIgbGluZSAoc2VlIGBmb3JtYXRFcnJvckNhdXNlQ2hhaW5gKS4gU2tpcHBlZCB3aGVuIHRoZSBzdGFja1xuICAvLyBib2R5IGFscmVhZHkgc3BlbGxzIHRoZSBjaGFpbiBvdXQsIHdoaWNoIGhhcHBlbnMgd2hlbiB0aGUgc3RhY2sgY2FtZSBvZmZcbiAgLy8gYW4gYWxyZWFkeS1pbnNwZWN0ZWQgZXJyb3IgYW5kIGNhcnJpZXMgYFtjYXVzZV06YCBsaW5lcyBvZiBpdHMgb3duLlxuICBjb25zdCBlcnJvckNhdXNlID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yQ2F1c2UnKTtcbiAgaWYgKGVycm9yQ2F1c2UgJiYgIWJvZHkuaW5jbHVkZXMoZXJyb3JDYXVzZSkpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ2NhdXNlJyl9ICR7Zm9ybWF0UGFzc3Rocm91Z2hWYWx1ZShlcnJvckNhdXNlKX1gKTtcbiAgfVxuXG4gIGNvbnN0IGhpbnQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnaGludCcpO1xuICBpZiAoaGludCkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtBbnNpLmhpbnQoaGludCl9YCk7XG4gIH1cblxuICAvLyBTb3J0ZWQgcGFzcy10aHJvdWdoIGZvciB1bmtub3duIGZpZWxkcy5cbiAgY29uc3QgcGFzc1Rocm91Z2ggPSBPYmplY3QuZW50cmllcyhtZXRhZGF0YSlcbiAgICAuZmlsdGVyKFxuICAgICAgKFtrLCB2XSkgPT5cbiAgICAgICAgIXdlbGxLbm93bi5oYXMoaykgJiYgIXJlZHVuZGFudC5oYXMoaykgJiYgdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbiAgICApXG4gICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBwYXNzVGhyb3VnaCkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtrdktleShrKX0gJHtmb3JtYXRQYXNzdGhyb3VnaFZhbHVlKHYpfWApO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzLmxlbmd0aCA/IGxpbmVzLmpvaW4oJ1xcbicpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBTdHJpcCB0aGUgc3RhY2sgZG93biB0byBmcmFtZXMgdGhlIHVzZXIgY2FuIGFjdCBvbi4gVjggc3RhY2tzIGZvciBvdXJcbiAqIHJ1bnRpbWUgZXJyb3JzIGxvb2sgbGlrZTpcbiAqXG4gKiAgICAgTmFtZTogbWVzc2FnZVxuICogICAgICAgICBhdCB1c2VyU3RlcCAoLi93b3JrZmxvd3MvZm9vLnRzOjEyOjExKVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3J1bnRpbWUvc3RlcC1leGVjdXRvci50czo1MzU6MzIpXG4gKiAgICAgICAgIGF0IDx1bmtub3duPiAoLi4uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QOKApi/igKYvYmFzZS1zZXJ2ZXIuanM6MTQ1NDo5KVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkrYXBpQOKApi/igKYvYXBpLmpzOjU0NDApXG4gKiAgICAgICAgIGF0IOKApiAoMTUgbW9yZSBmcmFtZXMgaW50byBOZXh0LmpzIC8gcG5wbSBpbnRlcm5hbHMpXG4gKlxuICogVHdvLXBhc3MgdHJpbTpcbiAqXG4gKiAgIDEuIERyb3AgZnJhbWV3b3JrLWludGVybmFsIGZyYW1lcyAoYG5vZGVfbW9kdWxlcy8ucG5wbS9gLCBgbm9kZTppbnRlcm5hbC9gLFxuICogICAgICBUdXJib3BhY2stYnVuZGxlZCBgbm9kZV9tb2R1bGVzX19wbnBtXypgIC8gYF9uZXh0X2Rpc3RfKmAgY2h1bmtzKS5cbiAqICAgMi4gQ2FwIHRoZSBzdXJ2aXZpbmcgZnJhbWVzIGF0IGBNQVhfVklTSUJMRV9GUkFNRVNgOiBwYXN0IHRoYXQsIGV2ZW5cbiAqICAgICAgXCJ1c2VyLWlzaFwiIGZyYW1lcyBhcmUgdXN1YWxseSBkZWVwIGFzeW5jIHdyYXBwaW5nIHRoYXQgZG9lc24ndCBoZWxwXG4gKiAgICAgIHBpbnBvaW50IHRoZSB0aHJvdy4gVGhlIHVzZXIgY2FuIGRyb3AgaW50byB0aGUgaW5zcGVjdCBDTEkgZm9yIHRoZVxuICogICAgICBmdWxsIHN0YWNrIG9uIGRlbWFuZC5cbiAqXG4gKiBFYWNoIHN1cHByZXNzZWQgcnVuIGVtaXRzIG9uZSBzdW1tYXJ5IGxpbmUgc28gcGVvcGxlIGtub3cgaG93IG11Y2ggd2FzXG4gKiB0cmltbWVkLlxuICovXG5jb25zdCBNQVhfVklTSUJMRV9GUkFNRVMgPSA2O1xuXG5mdW5jdGlvbiB0cmltU3RhY2tCb2R5KGJvZHk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWJvZHkpIHJldHVybiBudWxsO1xuICBjb25zdCBsaW5lcyA9IGJvZHkuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBvdXQ6IHN0cmluZ1tdID0gW107XG4gIGxldCBkcm9wcGVkUnVuID0gMDtcbiAgbGV0IHZpc2libGVGcmFtZUNvdW50ID0gMDtcbiAgbGV0IGNhcHBlZEZyYW1lcyA9IDA7XG5cbiAgY29uc3QgZmx1c2hEcm9wcGVkID0gKCkgPT4ge1xuICAgIGlmIChkcm9wcGVkUnVuID4gMCkge1xuICAgICAgb3V0LnB1c2goXG4gICAgICAgIEFuc2kuZGltKFxuICAgICAgICAgIGAgICAgICAgIOKApiAke2Ryb3BwZWRSdW59IG1vcmUgJHtkcm9wcGVkUnVuID09PSAxID8gJ2ZyYW1lJyA6ICdmcmFtZXMnfSBpbiBmcmFtZXdvcmsgaW50ZXJuYWxzYFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgZHJvcHBlZFJ1biA9IDA7XG4gICAgfVxuICB9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGNvbnN0IGlzRnJhbWUgPSBsaW5lLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoJ2F0ICcpO1xuICAgIGlmIChpc0ZyYW1lICYmIGlzRnJhbWV3b3JrRnJhbWUobGluZSkpIHtcbiAgICAgIGRyb3BwZWRSdW4rKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNGcmFtZSAmJiB2aXNpYmxlRnJhbWVDb3VudCA+PSBNQVhfVklTSUJMRV9GUkFNRVMpIHtcbiAgICAgIGNhcHBlZEZyYW1lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZsdXNoRHJvcHBlZCgpO1xuICAgIG91dC5wdXNoKGxpbmUpO1xuICAgIGlmIChpc0ZyYW1lKSB2aXNpYmxlRnJhbWVDb3VudCsrO1xuICB9XG4gIGZsdXNoRHJvcHBlZCgpO1xuICBpZiAoY2FwcGVkRnJhbWVzID4gMCkge1xuICAgIG91dC5wdXNoKFxuICAgICAgQW5zaS5kaW0oXG4gICAgICAgIGAgICAgICAgIOKApiAke2NhcHBlZEZyYW1lc30gbW9yZSAke2NhcHBlZEZyYW1lcyA9PT0gMSA/ICdmcmFtZScgOiAnZnJhbWVzJ30gKHJ1biBcXGBwbnBtIHdmIGluc3BlY3QgcnVuIDxpZD5cXGAgZm9yIHRoZSBmdWxsIHN0YWNrKWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiBvdXQuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGlzRnJhbWV3b3JrRnJhbWUobGluZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIE9ubHkgYXQtZnJhbWVzIGFyZSBjYW5kaWRhdGVzIGZvciBzdHJpcHBpbmcuIEhlYWRlciBsaW5lcyAoYE5hbWU6IOKApmApXG4gIC8vIGFuZCBhcmJpdHJhcnkgdHJhaWxpbmcgY29udGV4dCAoZS5nLiBgY29kZTogJ1VTRVJfRVJST1InYCkgcGFzcyB0aHJvdWdoLlxuICBjb25zdCB0cmltbWVkID0gbGluZS50cmltU3RhcnQoKTtcbiAgaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoJ2F0ICcpKSByZXR1cm4gZmFsc2U7XG4gIC8vIG5vZGU6KiBpbnRlcm5hbHMgKHRpbWVycywgYXN5bmMgaG9va3MsIHZtLCBldGMuKSBuZXZlciBoZWxwIHVzZXJzLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZTppbnRlcm5hbC8nKSkgcmV0dXJuIHRydWU7XG4gIC8vIHBucG0tcm9vdGVkIGZyYW1ld29ya3MgaW5zdGFsbGVkIGFzIG5vZGVfbW9kdWxlcyBkZXBlbmRlbmNpZXMuXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvLnBucG0vJykpIHJldHVybiB0cnVlO1xuICAvLyBUdXJib3BhY2svTmV4dCBidW5kbGUgdGhlIHNhbWUgZnJhbWV3b3JrIGNvZGUgaW50byBjaHVua3MgbGlrZVxuICAvLyBgbm9kZV9tb2R1bGVzX19wbnBtXzxoYXNoPi5fLmpzYCBhbmQgYDwuLi4+X25leHRfZGlzdF88aGFzaD4uXy5qc2AsXG4gIC8vIGFuZCBlbWl0cyBOZXh0LmpzIGxvYWRlciBydW50aW1lIGFzIGAwZHg2X25leHRfZGlzdF88aGFzaD4uXy5qc2AuXG4gIC8vIFRoZXNlIGFyZSB0aGUgZnJhbWVzIHRoYXQgc2hvdyB1cCBhZnRlciBUdXJib3BhY2sgRENFLCBzYW1lIGludGVudFxuICAvLyBhcyB0aGUgcmF3IGBub2RlX21vZHVsZXMvLnBucG0vYCBmaWx0ZXIgYWJvdmUuXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXNfX3BucG1fJykpIHJldHVybiB0cnVlO1xuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnX25leHRfZGlzdF8nKSkgcmV0dXJuIHRydWU7XG4gIC8vIFBsYWluIG5vZGVfbW9kdWxlcyAobm9uLXBucG0gc2V0dXBzKSBmb3IgdGhlIHNhbWUga2luZHMgb2YgZnJhbWV3b3Jrcy5cbiAgaWYgKFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9uZXh0LycpIHx8XG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5LycpIHx8XG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL3ZpdGVzdC8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9Adml0ZXN0LycpXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gdGhlIHN0YWNrIGJvZHkgb3BlbnMgd2l0aCBgPGVycm9yTmFtZT46YCAob3IgdGhlIGJhcmUgbmFtZSksIHRoZVxuICogc2hhcGUgVjggZ2l2ZXMgYEVycm9yI3N0YWNrYC4gVXNlZCB0byBhdm9pZCByZXN0YXRpbmcgdGhlIGNsYXNzIGluIGFcbiAqIGhlYWRlciByb3cgZGlyZWN0bHkgYWJvdmUgaXQuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGVhZGVyTmFtZXMoYm9keTogc3RyaW5nLCBlcnJvck5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBoZWFkZXIgPSBib2R5LnNwbGl0KCdcXG4nLCAxKVswXT8udHJpbSgpID8/ICcnO1xuICByZXR1cm4gaGVhZGVyID09PSBlcnJvck5hbWUgfHwgaGVhZGVyLnN0YXJ0c1dpdGgoYCR7ZXJyb3JOYW1lfTpgKTtcbn1cblxuZnVuY3Rpb24gcGlja1N0cmluZyhcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBrZXk6IHN0cmluZ1xuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHYgPSBtZXRhZGF0YVtrZXldO1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoID4gMCA/IHYgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBrdktleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBBbnNpLmRpbShrZXkucGFkRW5kKDYpKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SWRSb3coXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcgfCBudWxsLFxuICBuYW1lOiBzdHJpbmcgfCBudWxsLFxuICBmb3JtYXROYW1lOiAobjogc3RyaW5nKSA9PiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGlkQ2VsbCA9IGlkID8gaWQgOiBBbnNpLmRpbSgn4oCUJyk7XG4gIGNvbnN0IHBhcnNlZCA9IG5hbWVcbiAgICA/IGxhYmVsID09PSAncnVuJ1xuICAgICAgPyBwYXJzZVdvcmtmbG93TmFtZShuYW1lKVxuICAgICAgOiBwYXJzZVN0ZXBOYW1lKG5hbWUpXG4gICAgOiBudWxsO1xuICBjb25zdCBuYW1lQ2VsbCA9IHBhcnNlZFxuICAgID8gYCR7QW5zaS5kaW0oJ8K3Jyl9ICR7Zm9ybWF0TmFtZShuYW1lIGFzIHN0cmluZyl9YFxuICAgIDogJyc7XG4gIHJldHVybiBgICAke2t2S2V5KGxhYmVsKX0gJHtpZENlbGx9JHtuYW1lQ2VsbCA/ICcgJyArIG5hbWVDZWxsIDogJyd9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UGFzc3Rocm91Z2hWYWx1ZSh2OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2LmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgcmV0dXJuIHZcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChsaW5lLCBpKSA9PiAoaSA9PT0gMCA/IGxpbmUgOiBgICAgICAgICAgJHtsaW5lfWApKVxuICAgICAgICAuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG4gIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJykgcmV0dXJuIFN0cmluZyh2KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTdHJpbmcodik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,KAAK,EACN,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"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"}
|