@workflow/core 5.0.0-beta.52 → 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 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
@@ -7,6 +7,7 @@
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)
@@ -1 +1 @@
1
- {"version":3,"file":"log-format.d.ts","sourceRoot":"","sources":["../src/log-format.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;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"}
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"}
@@ -9,6 +9,7 @@ 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)
@@ -73,6 +74,7 @@ function renderStructuredFields(framing, body, metadata) {
73
74
  'errorName',
74
75
  'errorMessage',
75
76
  'errorStack',
77
+ 'errorCause',
76
78
  'hint',
77
79
  'attempt',
78
80
  'retryCount',
@@ -133,6 +135,14 @@ function renderStructuredFields(framing, body, metadata) {
133
135
  if (errorMessage && !redundant.has('errorMessage')) {
134
136
  lines.push(` ${kvKey('error')} ${formatPassthroughValue(errorMessage)}`);
135
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
+ }
136
146
  const hint = pickString(metadata, 'hint');
137
147
  if (hint) {
138
148
  lines.push(` ${Ansi.hint(hint)}`);
@@ -282,4 +292,4 @@ function formatPassthroughValue(v) {
282
292
  return String(v);
283
293
  }
284
294
  }
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYyxFQUNkLE9BQWUsRUFDZixRQUE2QztJQUU3QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLDBFQUEwRTtJQUMxRSxzRUFBc0U7SUFDdEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRTtRQUM5QixDQUFDLENBQUMsWUFBWTtRQUNkLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4QyxNQUFNLEtBQUssR0FBYSxDQUFDLEdBQUcsTUFBTSxJQUFJLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELElBQUksTUFBTTtRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxD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QUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDO2lCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFuc2kgZnJvbSAnQHdvcmtmbG93L2Vycm9ycy9hbnNpJztcbmltcG9ydCB7XG4gIGZvcm1hdFN0ZXBOYW1lLFxuICBmb3JtYXRXb3JrZmxvd05hbWUsXG4gIHBhcnNlU3RlcE5hbWUsXG4gIHBhcnNlV29ya2Zsb3dOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQtbG9nIGNvbXBvc2l0aW9uIGZvciBgY29uc29sZS5lcnJvcmAgLyBgY29uc29sZS53YXJuYC4gRW1pdHNcbiAqIG9uZSBzdHJpbmcgaW4gdGhyZWUgc2VjdGlvbnMgc28gdGhlIG1vc3QgdXNlZnVsIGluZm9ybWF0aW9uIGlzIGF0IHRoZVxuICogdG9wLCBzdGFjayB0cmFjZSBhdCB0aGUgYm90dG9tOlxuICpcbiAqICAgICBbd29ya2Zsb3ctc2RrXSA8ZnJhbWluZyBsaW5lPlxuICogICAgICAgdXNlciBlcnJvciDCtyBGYXRhbEVycm9yXG4gKiAgICAgICBydW4gICAgd3J1bl/igKZcbiAqICAgICAgIHN0ZXAgICBzdGVwX+KApiDCtyBhZGQgKC4vd29ya2Zsb3dzL3gpXG4gKiAgICAgICBoaW50OiAgTW92ZSB0aGUgY2FsbCB0byBhIHN0ZXAgZnVuY3Rpb24uXG4gKiAgICAgRmF0YWxFcnJvcjog4oCmXG4gKiAgICAgICAgIGF0IOKApiAodHJpbW1lZCBzdGFjaywgaW50ZXJuYWxzIGNvbGxhcHNlZClcbiAqXG4gKiBUaGUgc3RhY2sgYm9keSBjb21lcyBmcm9tIHRoZSBtZXNzYWdlIHdoZW4gdGhlIGNhbGxlciBlbWJlZGRlZCBpdCB0aGVyZSxcbiAqIGFuZCBmcm9tIHRoZSBgZXJyb3JTdGFja2AgbWV0YWRhdGEgZmllbGQgb3RoZXJ3aXNlLlxuICpcbiAqIFdpdGhvdXQgdGhpcyBjb21wb3NpdGlvbiwgY2FsbGVycyBwYXNzaW5nIGAke2ZyYW1pbmd9XFxuJHtzdGFja31gIGFzIHRoZVxuICogbWVzc2FnZSBhbmQgc3RydWN0dXJlZCBmaWVsZHMgYXMgdGhlIG1ldGFkYXRhIG9iamVjdCBnb3QgYHV0aWwuaW5zcGVjdGAnc1xuICogZGVmYXVsdCBvYmplY3QgZHVtcCBhcHBlbmRlZCAqYWZ0ZXIqIHRoZSBzdGFjaywgd2hpY2ggYnVyaWVzIHRoZSBydW4gSURcbiAqIGFuZCBhdHRyaWJ1dGlvbiBiYWRnZSB1bmRlciAzMCsgbGluZXMgb2YgYG5vZGVfbW9kdWxlcy8ucG5wbS8uLi5gIGZyYW1lcy5cbiAqXG4gKiBUaGUgc2FtZSBtZXRhZGF0YSBpcyBhbHNvIGVtaXR0ZWQgYXMgc3RydWN0dXJlZCBPVGVsIHNwYW4gZXZlbnRzIGZyb21cbiAqIHRoZSBsb2dnZXIgaXRzZWxmLCBzbyBiYWNrZW5kcyB0aGF0IHdhbnQgSlNPTi1zaGFwZWQgZGF0YSBzdGlsbCBnZXQgaXQuXG4gKiB3ZWIvd2ViLXNoYXJlZCBkbyBub3QgY29uc3VtZSBzdGRlcnIgYXQgYWxsOiB0aGV5IHJlYWQgQ0JPUi9KU09OIGV2ZW50XG4gKiBwYXlsb2FkcyBmcm9tIHRoZSBXb3JsZCBldmVudCBsb2cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlTG9nTGluZShcbiAgcHJlZml4OiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuICBjb25zdCBbZnJhbWluZywgLi4ucmVzdF0gPSBtZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgZW1iZWRkZWRCb2R5ID0gcmVzdC5qb2luKCdcXG4nKTtcbiAgLy8gQ2FsbGVycyBzdXBwbHkgdGhlIHN0YWNrIG9uZSBvZiB0d28gd2F5czogZW1iZWRkZWQgaW4gdGhlIG1lc3NhZ2UgKHN0ZXBcbiAgLy8gZXhlY3V0b3IgLyBjb21iaW5lZCBydW50aW1lIHJlbmRlciBgJHtmcmFtaW5nfVxcbiR7c3RhY2t9YCkgb3IgYXMgYW5cbiAgLy8gYGVycm9yU3RhY2tgIGZpZWxkIG5leHQgdG8gYSBzaW5nbGUtbGluZSBmcmFtaW5nICh0aGUgcnVuLWZhaWx1cmUgbG9nIGluXG4gIC8vIHJ1bnRpbWUudHMpLiBQcm9tb3RlIHRoZSBmaWVsZCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBubyBib2R5IG9mIGl0cyBvd24gc29cbiAgLy8gdGhlIHN0YWNrIHN1cnZpdmVzIGVpdGhlciB3YXksIGFuZCBnZXRzIHRoZSBzYW1lIHRyaW1taW5nIGVpdGhlciB3YXkuXG4gIGNvbnN0IGJvZHkgPSBlbWJlZGRlZEJvZHkudHJpbSgpXG4gICAgPyBlbWJlZGRlZEJvZHlcbiAgICA6IChwaWNrU3RyaW5nKG1ldGFkYXRhID8/IHt9LCAnZXJyb3JTdGFjaycpID8/ICcnKTtcbiAgY29uc3QgZmllbGRzID0gcmVuZGVyU3RydWN0dXJlZEZpZWxkcyhmcmFtaW5nID8/ICcnLCBib2R5LCBtZXRhZGF0YSk7XG4gIGNvbnN0IHRyaW1tZWRCb2R5ID0gdHJpbVN0YWNrQm9keShib2R5KTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbYCR7cHJlZml4fSAke2ZyYW1pbmcgPz8gJyd9YF07XG4gIGlmIChmaWVsZHMpIGxpbmVzLnB1c2goZmllbGRzKTtcbiAgaWYgKHRyaW1tZWRCb2R5KSBsaW5lcy5wdXNoKHRyaW1tZWRCb2R5KTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKFxuICBmcmFtaW5nOiBzdHJpbmcsXG4gIGJvZHk6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBEcm9wIGZpZWxkcyB0aGUgY29tcG9zZWQgbGluZSBhbHJlYWR5IHNob3dzIGVsc2V3aGVyZS4gYGVycm9yU3RhY2tgIGlzXG4gIC8vIGFsd2F5cyByZW5kZXJlZCBhcyB0aGUgYm9keSDigJQgZW1iZWRkZWQgaW4gdGhlIG1lc3NhZ2UgYnkgdGhlIHN0ZXBcbiAgLy8gZXhlY3V0b3IgLyBjb21iaW5lZCBydW50aW1lLCBvciBwcm9tb3RlZCBvdXQgb2YgdGhlIGZpZWxkIGJ5XG4gIC8vIGNvbXBvc2VMb2dMaW5lIOKAlCBzbyByZXBlYXRpbmcgaXQgaGVyZSB3b3VsZCBiZSBwdXJlIG5vaXNlLiBBIG1lc3NhZ2VcbiAgLy8gd2l0aCBuZWl0aGVyIChhIFdBUk4gd2hvc2UgZnJhbWluZyBpcyBhIGZpeGVkIHNlbnRlbmNlIGFuZCB3aG9zZVxuICAvLyBgZXJyb3JNZXNzYWdlYCBpcyB0aGUgb25seSBwbGFjZSB0aGUgdW5kZXJseWluZyBlcnJvcidzIHRleHQgYXBwZWFycylcbiAgLy8ga2VlcHMgYGVycm9yTWVzc2FnZWAgYW5kIHJlbmRlcnMgaXQgYXMgaXRzIG93biByb3cgYmVsb3cuXG4gIGNvbnN0IHJlZHVuZGFudCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZWR1bmRhbnQuYWRkKCdlcnJvclN0YWNrJyk7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdlcnJvck1lc3NhZ2UnKTtcbiAgaWYgKFxuICAgIGVycm9yTWVzc2FnZSAmJlxuICAgIChmcmFtaW5nLmluY2x1ZGVzKGVycm9yTWVzc2FnZSkgfHwgYm9keS5pbmNsdWRlcyhlcnJvck1lc3NhZ2UpKVxuICApIHtcbiAgICByZWR1bmRhbnQuYWRkKCdlcnJvck1lc3NhZ2UnKTtcbiAgfVxuXG4gIGNvbnN0IHdlbGxLbm93biA9IG5ldyBTZXQoW1xuICAgICd3b3JrZmxvd1J1bklkJyxcbiAgICAnd29ya2Zsb3dOYW1lJyxcbiAgICAnc3RlcElkJyxcbiAgICAnc3RlcE5hbWUnLFxuICAgICdlcnJvckF0dHJpYnV0aW9uJyxcbiAgICAnZXJyb3JDb2RlJyxcbiAgICAnZXJyb3JOYW1lJyxcbiAgICAnZXJyb3JNZXNzYWdlJyxcbiAgICAnZXJyb3JTdGFjaycsXG4gICAgJ2hpbnQnLFxuICAgICdhdHRlbXB0JyxcbiAgICAncmV0cnlDb3VudCcsXG4gIF0pO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEhlYWRlcjogZXJyb3IgY2xhc3MgKyBhdHRyaWJ1dGlvbiBiYWRnZS5cbiAgLy9cbiAgLy8gV2l0aG91dCBhIGJhZGdlIHRoZSByb3cgaXMganVzdCB0aGUgY2xhc3MgbmFtZSwgd2hpY2ggdGhlIHN0YWNrIGhlYWRlclxuICAvLyBiZWxvdyAoYE5hbWU6IG1lc3NhZ2VgKSBhbHJlYWR5IHN0YXRlcyDigJQgc28gaXQgb25seSBlYXJucyBpdHMgbGluZSB3aGVuXG4gIC8vIHRoZSBzdGFjayBkb2Vzbid0IG9wZW4gd2l0aCB0aGF0IHNhbWUgbmFtZS4gQSBiYWRnZSBhbHdheXMgZWFybnMgaXRzXG4gIC8vIGxpbmU6IGF0dHJpYnV0aW9uIGlzIHRoZSBvbmUgdGhpbmcgdGhlIHN0YWNrIGNhbm5vdCBleHByZXNzLCBhbmQgdGhlXG4gIC8vIGNsYXNzIHN0YXlzIGF0dGFjaGVkIHRvIGl0IGFzIHRoZSB0aGluZyBiZWluZyBhdHRyaWJ1dGVkLlxuICBjb25zdCBlcnJvck5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JOYW1lJyk7XG4gIGNvbnN0IGF0dHJpYnV0aW9uID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yQXR0cmlidXRpb24nKTtcbiAgY29uc3QgbmFtZUVjaG9lZEJ5U3RhY2sgPVxuICAgIGVycm9yTmFtZSAhPT0gbnVsbCAmJiBzdGFja0hlYWRlck5hbWVzKGJvZHksIGVycm9yTmFtZSk7XG4gIGlmIChhdHRyaWJ1dGlvbiB8fCAoZXJyb3JOYW1lICYmICFuYW1lRWNob2VkQnlTdGFjaykpIHtcbiAgICBjb25zdCBiYWRnZSA9IGF0dHJpYnV0aW9uXG4gICAgICA/IGF0dHJpYnV0aW9uID09PSAnc2RrJ1xuICAgICAgICA/IEFuc2kubWFnZW50YSgnc2RrIGVycm9yJylcbiAgICAgICAgOiBBbnNpLnJlZCgndXNlciBlcnJvcicpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGNscyA9IGVycm9yTmFtZSA/IEFuc2kuYm9sZChlcnJvck5hbWUpIDogJyc7XG4gICAgY29uc3Qgc2VwID0gYmFkZ2UgJiYgY2xzID8gQW5zaS5kaW0oJyDCtyAnKSA6ICcnO1xuICAgIGxpbmVzLnB1c2goYCAgJHtiYWRnZX0ke3NlcH0ke2Nsc31gKTtcbiAgfVxuXG4gIC8vIElEICsgcGFyc2VkIGZyaWVuZGx5LW5hbWUgcm93cy5cbiAgY29uc3QgcnVuSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dSdW5JZCcpO1xuICBjb25zdCB3Zk5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dOYW1lJyk7XG4gIGlmIChydW5JZCkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIHJ1bklkLCB3Zk5hbWUsIGZvcm1hdFdvcmtmbG93TmFtZSkpO1xuICB9IGVsc2UgaWYgKHdmTmFtZSkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIG51bGwsIHdmTmFtZSwgZm9ybWF0V29ya2Zsb3dOYW1lKSk7XG4gIH1cblxuICBjb25zdCBzdGVwSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnc3RlcElkJyk7XG4gIGNvbnN0IHN0ZXBOYW1lID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3N0ZXBOYW1lJyk7XG4gIGlmIChzdGVwSWQgfHwgc3RlcE5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGZvcm1hdElkUm93KCdzdGVwJywgc3RlcElkLCBzdGVwTmFtZSwgZm9ybWF0U3RlcE5hbWUpKTtcbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5hdHRlbXB0ICE9PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEucmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gYGF0dGVtcHRgIGFuZCBgcmV0cnlDb3VudGAgcmVhZCBhbWJpZ3VvdXNseSBuZXh0IHRvIGVhY2ggb3RoZXIgKGlzXG4gICAgLy8gXCIzIHJldHJpZXNcIiB0aGUgbGltaXQgb3Igd2hhdCBhbHJlYWR5IGhhcHBlbmVkPykuIFJlbmRlciB0aGUgbGltaXRcbiAgICAvLyBhcyBcIm1heCByZXRyaWVzXCIgdG8gbWFrZSB0aGUgYm91bmRhcnkgZXhwbGljaXQsIGFuZCBrZWVwIGBhdHRlbXB0YFxuICAgIC8vIGFzIHRoZSBjb3VudCBvZiB0b3RhbCBpbnZvY2F0aW9ucyBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsLlxuICAgIGNvbnN0IGEgPSBtZXRhZGF0YS5hdHRlbXB0O1xuICAgIGNvbnN0IHIgPSBtZXRhZGF0YS5yZXRyeUNvdW50O1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICBgICAke2t2S2V5KCdyZXRyeScpfSAke2F9ICR7QW5zaS5kaW0oJ2F0dGVtcHRzIMK3Jyl9ICR7cn0gJHtBbnNpLmRpbSgnbWF4IHJldHJpZXMnKX1gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ3JldHJ5Jyl9ICR7YX0gJHtBbnNpLmRpbSgnYXR0ZW1wdHMnKX1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBlcnJvckNvZGUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JDb2RlJyk7XG4gIGlmIChlcnJvckNvZGUgJiYgZXJyb3JDb2RlICE9PSBlcnJvck5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ2NvZGUnKX0gJHtBbnNpLmRpbShlcnJvckNvZGUpfWApO1xuICB9XG5cbiAgaWYgKGVycm9yTWVzc2FnZSAmJiAhcmVkdW5kYW50LmhhcygnZXJyb3JNZXNzYWdlJykpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ2Vycm9yJyl9ICR7Zm9ybWF0UGFzc3Rocm91Z2hWYWx1ZShlcnJvck1lc3NhZ2UpfWApO1xuICB9XG5cbiAgY29uc3QgaGludCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdoaW50Jyk7XG4gIGlmIChoaW50KSB7XG4gICAgbGluZXMucHVzaChgICAke0Fuc2kuaGludChoaW50KX1gKTtcbiAgfVxuXG4gIC8vIFNvcnRlZCBwYXNzLXRocm91Z2ggZm9yIHVua25vd24gZmllbGRzLlxuICBjb25zdCBwYXNzVGhyb3VnaCA9IE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKVxuICAgIC5maWx0ZXIoXG4gICAgICAoW2ssIHZdKSA9PlxuICAgICAgICAhd2VsbEtub3duLmhhcyhrKSAmJiAhcmVkdW5kYW50LmhhcyhrKSAmJiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxuICAgIClcbiAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIHBhc3NUaHJvdWdoKSB7XG4gICAgbGluZXMucHVzaChgICAke2t2S2V5KGspfSAke2Zvcm1hdFBhc3N0aHJvdWdoVmFsdWUodil9YCk7XG4gIH1cblxuICByZXR1cm4gbGluZXMubGVuZ3RoID8gbGluZXMuam9pbignXFxuJykgOiBudWxsO1xufVxuXG4vKipcbiAqIFN0cmlwIHRoZSBzdGFjayBkb3duIHRvIGZyYW1lcyB0aGUgdXNlciBjYW4gYWN0IG9uLiBWOCBzdGFja3MgZm9yIG91clxuICogcnVudGltZSBlcnJvcnMgbG9vayBsaWtlOlxuICpcbiAqICAgICBOYW1lOiBtZXNzYWdlXG4gKiAgICAgICAgIGF0IHVzZXJTdGVwICguL3dvcmtmbG93cy9mb28udHM6MTI6MTEpXG4gKiAgICAgICAgIGF0IDx1bmtub3duPiAoLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcnVudGltZS9zdGVwLWV4ZWN1dG9yLnRzOjUzNTozMilcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi4vbm9kZV9tb2R1bGVzLy5wbnBtL25leHRA4oCmL+KApi9iYXNlLXNlcnZlci5qczoxNDU0OjkpXG4gKiAgICAgICAgIGF0IDx1bmtub3duPiAoLi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab3BlbnRlbGVtZXRyeSthcGlA4oCmL+KApi9hcGkuanM6NTQ0MClcbiAqICAgICAgICAgYXQg4oCmICgxNSBtb3JlIGZyYW1lcyBpbnRvIE5leHQuanMgLyBwbnBtIGludGVybmFscylcbiAqXG4gKiBUd28tcGFzcyB0cmltOlxuICpcbiAqICAgMS4gRHJvcCBmcmFtZXdvcmstaW50ZXJuYWwgZnJhbWVzIChgbm9kZV9tb2R1bGVzLy5wbnBtL2AsIGBub2RlOmludGVybmFsL2AsXG4gKiAgICAgIFR1cmJvcGFjay1idW5kbGVkIGBub2RlX21vZHVsZXNfX3BucG1fKmAgLyBgX25leHRfZGlzdF8qYCBjaHVua3MpLlxuICogICAyLiBDYXAgdGhlIHN1cnZpdmluZyBmcmFtZXMgYXQgYE1BWF9WSVNJQkxFX0ZSQU1FU2A6IHBhc3QgdGhhdCwgZXZlblxuICogICAgICBcInVzZXItaXNoXCIgZnJhbWVzIGFyZSB1c3VhbGx5IGRlZXAgYXN5bmMgd3JhcHBpbmcgdGhhdCBkb2Vzbid0IGhlbHBcbiAqICAgICAgcGlucG9pbnQgdGhlIHRocm93LiBUaGUgdXNlciBjYW4gZHJvcCBpbnRvIHRoZSBpbnNwZWN0IENMSSBmb3IgdGhlXG4gKiAgICAgIGZ1bGwgc3RhY2sgb24gZGVtYW5kLlxuICpcbiAqIEVhY2ggc3VwcHJlc3NlZCBydW4gZW1pdHMgb25lIHN1bW1hcnkgbGluZSBzbyBwZW9wbGUga25vdyBob3cgbXVjaCB3YXNcbiAqIHRyaW1tZWQuXG4gKi9cbmNvbnN0IE1BWF9WSVNJQkxFX0ZSQU1FUyA9IDY7XG5cbmZ1bmN0aW9uIHRyaW1TdGFja0JvZHkoYm9keTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghYm9keSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGRyb3BwZWRSdW4gPSAwO1xuICBsZXQgdmlzaWJsZUZyYW1lQ291bnQgPSAwO1xuICBsZXQgY2FwcGVkRnJhbWVzID0gMDtcblxuICBjb25zdCBmbHVzaERyb3BwZWQgPSAoKSA9PiB7XG4gICAgaWYgKGRyb3BwZWRSdW4gPiAwKSB7XG4gICAgICBvdXQucHVzaChcbiAgICAgICAgQW5zaS5kaW0oXG4gICAgICAgICAgYCAgICAgICAg4oCmICR7ZHJvcHBlZFJ1bn0gbW9yZSAke2Ryb3BwZWRSdW4gPT09IDEgPyAnZnJhbWUnIDogJ2ZyYW1lcyd9IGluIGZyYW1ld29yayBpbnRlcm5hbHNgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBkcm9wcGVkUnVuID0gMDtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgY29uc3QgaXNGcmFtZSA9IGxpbmUudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aCgnYXQgJyk7XG4gICAgaWYgKGlzRnJhbWUgJiYgaXNGcmFtZXdvcmtGcmFtZShsaW5lKSkge1xuICAgICAgZHJvcHBlZFJ1bisrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc0ZyYW1lICYmIHZpc2libGVGcmFtZUNvdW50ID49IE1BWF9WSVNJQkxFX0ZSQU1FUykge1xuICAgICAgY2FwcGVkRnJhbWVzKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZmx1c2hEcm9wcGVkKCk7XG4gICAgb3V0LnB1c2gobGluZSk7XG4gICAgaWYgKGlzRnJhbWUpIHZpc2libGVGcmFtZUNvdW50Kys7XG4gIH1cbiAgZmx1c2hEcm9wcGVkKCk7XG4gIGlmIChjYXBwZWRGcmFtZXMgPiAwKSB7XG4gICAgb3V0LnB1c2goXG4gICAgICBBbnNpLmRpbShcbiAgICAgICAgYCAgICAgICAg4oCmICR7Y2FwcGVkRnJhbWVzfSBtb3JlICR7Y2FwcGVkRnJhbWVzID09PSAxID8gJ2ZyYW1lJyA6ICdmcmFtZXMnfSAocnVuIFxcYHBucG0gd2YgaW5zcGVjdCBydW4gPGlkPlxcYCBmb3IgdGhlIGZ1bGwgc3RhY2spYFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG91dC5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gaXNGcmFtZXdvcmtGcmFtZShsaW5lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gT25seSBhdC1mcmFtZXMgYXJlIGNhbmRpZGF0ZXMgZm9yIHN0cmlwcGluZy4gSGVhZGVyIGxpbmVzIChgTmFtZTog4oCmYClcbiAgLy8gYW5kIGFyYml0cmFyeSB0cmFpbGluZyBjb250ZXh0IChlLmcuIGBjb2RlOiAnVVNFUl9FUlJPUidgKSBwYXNzIHRocm91Z2guXG4gIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW1TdGFydCgpO1xuICBpZiAoIXRyaW1tZWQuc3RhcnRzV2l0aCgnYXQgJykpIHJldHVybiBmYWxzZTtcbiAgLy8gbm9kZToqIGludGVybmFscyAodGltZXJzLCBhc3luYyBob29rcywgdm0sIGV0Yy4pIG5ldmVyIGhlbHAgdXNlcnMuXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdub2RlOmludGVybmFsLycpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gcG5wbS1yb290ZWQgZnJhbWV3b3JrcyBpbnN0YWxsZWQgYXMgbm9kZV9tb2R1bGVzIGRlcGVuZGVuY2llcy5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy8ucG5wbS8nKSkgcmV0dXJuIHRydWU7XG4gIC8vIFR1cmJvcGFjay9OZXh0IGJ1bmRsZSB0aGUgc2FtZSBmcmFtZXdvcmsgY29kZSBpbnRvIGNodW5rcyBsaWtlXG4gIC8vIGBub2RlX21vZHVsZXNfX3BucG1fPGhhc2g+Ll8uanNgIGFuZCBgPC4uLj5fbmV4dF9kaXN0XzxoYXNoPi5fLmpzYCxcbiAgLy8gYW5kIGVtaXRzIE5leHQuanMgbG9hZGVyIHJ1bnRpbWUgYXMgYDBkeDZfbmV4dF9kaXN0XzxoYXNoPi5fLmpzYC5cbiAgLy8gVGhlc2UgYXJlIHRoZSBmcmFtZXMgdGhhdCBzaG93IHVwIGFmdGVyIFR1cmJvcGFjayBEQ0UsIHNhbWUgaW50ZW50XG4gIC8vIGFzIHRoZSByYXcgYG5vZGVfbW9kdWxlcy8ucG5wbS9gIGZpbHRlciBhYm92ZS5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlc19fcG5wbV8nKSkgcmV0dXJuIHRydWU7XG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdfbmV4dF9kaXN0XycpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gUGxhaW4gbm9kZV9tb2R1bGVzIChub24tcG5wbSBzZXR1cHMpIGZvciB0aGUgc2FtZSBraW5kcyBvZiBmcmFtZXdvcmtzLlxuICBpZiAoXG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL25leHQvJykgfHxcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvJykgfHxcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvdml0ZXN0LycpIHx8XG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL0B2aXRlc3QvJylcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiB0aGUgc3RhY2sgYm9keSBvcGVucyB3aXRoIGA8ZXJyb3JOYW1lPjpgIChvciB0aGUgYmFyZSBuYW1lKSwgdGhlXG4gKiBzaGFwZSBWOCBnaXZlcyBgRXJyb3Ijc3RhY2tgLiBVc2VkIHRvIGF2b2lkIHJlc3RhdGluZyB0aGUgY2xhc3MgaW4gYVxuICogaGVhZGVyIHJvdyBkaXJlY3RseSBhYm92ZSBpdC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIZWFkZXJOYW1lcyhib2R5OiBzdHJpbmcsIGVycm9yTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGhlYWRlciA9IGJvZHkuc3BsaXQoJ1xcbicsIDEpWzBdPy50cmltKCkgPz8gJyc7XG4gIHJldHVybiBoZWFkZXIgPT09IGVycm9yTmFtZSB8fCBoZWFkZXIuc3RhcnRzV2l0aChgJHtlcnJvck5hbWV9OmApO1xufVxuXG5mdW5jdGlvbiBwaWNrU3RyaW5nKFxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGtleTogc3RyaW5nXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgdiA9IG1ldGFkYXRhW2tleV07XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5sZW5ndGggPiAwID8gdiA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGt2S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIEFuc2kuZGltKGtleS5wYWRFbmQoNikpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRJZFJvdyhcbiAgbGFiZWw6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyB8IG51bGwsXG4gIG5hbWU6IHN0cmluZyB8IG51bGwsXG4gIGZvcm1hdE5hbWU6IChuOiBzdHJpbmcpID0+IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgaWRDZWxsID0gaWQgPyBpZCA6IEFuc2kuZGltKCfigJQnKTtcbiAgY29uc3QgcGFyc2VkID0gbmFtZVxuICAgID8gbGFiZWwgPT09ICdydW4nXG4gICAgICA/IHBhcnNlV29ya2Zsb3dOYW1lKG5hbWUpXG4gICAgICA6IHBhcnNlU3RlcE5hbWUobmFtZSlcbiAgICA6IG51bGw7XG4gIGNvbnN0IG5hbWVDZWxsID0gcGFyc2VkXG4gICAgPyBgJHtBbnNpLmRpbSgnwrcnKX0gJHtmb3JtYXROYW1lKG5hbWUgYXMgc3RyaW5nKX1gXG4gICAgOiAnJztcbiAgcmV0dXJuIGAgICR7a3ZLZXkobGFiZWwpfSAke2lkQ2VsbH0ke25hbWVDZWxsID8gJyAnICsgbmFtZUNlbGwgOiAnJ31gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRQYXNzdGhyb3VnaFZhbHVlKHY6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHYuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgICByZXR1cm4gdlxuICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgIC5tYXAoKGxpbmUsIGkpID0+IChpID09PSAwID8gbGluZSA6IGAgICAgICAgICAke2xpbmV9YCkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cbiAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gU3RyaW5nKHYpO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFN0cmluZyh2KTtcbiAgfVxufVxuIl19
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":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAqBA,OAAO,EAGL,KAAK,KAAK,EAaV,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AA4GzB,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,UAAU,EACV,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,MAAM,EACN,GAAG,EACH,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,gCAAgC,GACtC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,gBAAgB,EACrB,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,SAAS,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,GACN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AA2e5B;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAg+IrC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAqBA,OAAO,EAGL,KAAK,KAAK,EAaV,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAiHzB,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,UAAU,EACV,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,MAAM,EACN,GAAG,EACH,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,gCAAgC,GACtC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,gBAAgB,EACrB,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,SAAS,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,GACN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AA2e5B;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA0+IrC"}