@angular-devkit/build-angular 16.0.0-next.5 → 16.0.0-next.7

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.
Files changed (30) hide show
  1. package/package.json +19 -17
  2. package/src/builders/browser-esbuild/css-plugin.js +3 -3
  3. package/src/builders/browser-esbuild/experimental-warnings.js +1 -3
  4. package/src/builders/browser-esbuild/global-scripts.d.ts +16 -0
  5. package/src/builders/browser-esbuild/global-scripts.js +126 -0
  6. package/src/builders/browser-esbuild/index.d.ts +11 -2
  7. package/src/builders/browser-esbuild/index.js +177 -63
  8. package/src/builders/browser-esbuild/less-plugin.js +39 -5
  9. package/src/builders/browser-esbuild/options.d.ts +7 -0
  10. package/src/builders/browser-esbuild/options.js +13 -12
  11. package/src/builders/browser-esbuild/sass-plugin.js +29 -4
  12. package/src/builders/browser-esbuild/schema.json +1 -2
  13. package/src/builders/browser-esbuild/stylesheets.js +13 -2
  14. package/src/builders/dev-server/builder.d.ts +27 -0
  15. package/src/builders/dev-server/builder.js +89 -0
  16. package/src/builders/dev-server/index.d.ts +4 -2
  17. package/src/builders/dev-server/index.js +6 -5
  18. package/src/builders/dev-server/load-proxy-config.d.ts +8 -0
  19. package/src/builders/dev-server/load-proxy-config.js +113 -0
  20. package/src/builders/dev-server/options.d.ts +45 -0
  21. package/src/builders/dev-server/options.js +61 -0
  22. package/src/builders/dev-server/vite-server.d.ts +11 -0
  23. package/src/builders/dev-server/vite-server.js +260 -0
  24. package/src/builders/dev-server/webpack-server.d.ts +3 -5
  25. package/src/builders/dev-server/webpack-server.js +9 -53
  26. package/src/index.d.ts +1 -1
  27. package/src/index.js +2 -2
  28. package/src/utils/index-file/inline-critical-css.js +90 -1
  29. package/src/webpack/utils/stats.d.ts +1 -0
  30. package/src/webpack/utils/stats.js +3 -2
package/src/index.js CHANGED
@@ -30,7 +30,7 @@ Object.defineProperty(exports, "Type", { enumerable: true, get: function () { re
30
30
  var browser_1 = require("./builders/browser");
31
31
  Object.defineProperty(exports, "executeBrowserBuilder", { enumerable: true, get: function () { return browser_1.buildWebpackBrowser; } });
32
32
  var dev_server_1 = require("./builders/dev-server");
33
- Object.defineProperty(exports, "executeDevServerBuilder", { enumerable: true, get: function () { return dev_server_1.serveWebpackBrowser; } });
33
+ Object.defineProperty(exports, "executeDevServerBuilder", { enumerable: true, get: function () { return dev_server_1.executeDevServerBuilder; } });
34
34
  var extract_i18n_1 = require("./builders/extract-i18n");
35
35
  Object.defineProperty(exports, "executeExtractI18nBuilder", { enumerable: true, get: function () { return extract_i18n_1.execute; } });
36
36
  var karma_1 = require("./builders/karma");
@@ -41,4 +41,4 @@ var server_1 = require("./builders/server");
41
41
  Object.defineProperty(exports, "executeServerBuilder", { enumerable: true, get: function () { return server_1.execute; } });
42
42
  var ng_packagr_1 = require("./builders/ng-packagr");
43
43
  Object.defineProperty(exports, "executeNgPackagrBuilder", { enumerable: true, get: function () { return ng_packagr_1.execute; } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILCtDQUE2QjtBQUU3QixvREFjbUM7QUFWakMscUdBQUEsV0FBVyxPQUFBO0FBSVgsdUdBQUEsYUFBYSxPQUFBO0FBS2IsOEZBQUEsSUFBSSxPQUFBO0FBR04sOENBRzRCO0FBRjFCLGdIQUFBLG1CQUFtQixPQUF5QjtBQUk5QyxvREFJK0I7QUFIN0IscUhBQUEsbUJBQW1CLE9BQTJCO0FBS2hELHdEQUdpQztBQUYvQix5SEFBQSxPQUFPLE9BQTZCO0FBSXRDLDBDQUkwQjtBQUh4Qiw0R0FBQSxPQUFPLE9BQXVCO0FBS2hDLG9EQUcrQjtBQUY3QixzSEFBQSxPQUFPLE9BQTRCO0FBSXJDLDRDQUkyQjtBQUh6Qiw4R0FBQSxPQUFPLE9BQXdCO0FBS2pDLG9EQUFvRztBQUEzRixxSEFBQSxPQUFPLE9BQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5cbmV4cG9ydCB7XG4gIEFzc2V0UGF0dGVybixcbiAgQXNzZXRQYXR0ZXJuQ2xhc3MgYXMgQXNzZXRQYXR0ZXJuT2JqZWN0LFxuICBCdWRnZXQsXG4gIENyb3NzT3JpZ2luLFxuICBGaWxlUmVwbGFjZW1lbnQsXG4gIE9wdGltaXphdGlvbkNsYXNzIGFzIE9wdGltaXphdGlvbk9iamVjdCxcbiAgT3B0aW1pemF0aW9uVW5pb24sXG4gIE91dHB1dEhhc2hpbmcsXG4gIFNjaGVtYSBhcyBCcm93c2VyQnVpbGRlck9wdGlvbnMsXG4gIFNvdXJjZU1hcENsYXNzIGFzIFNvdXJjZU1hcE9iamVjdCxcbiAgU291cmNlTWFwVW5pb24sXG4gIFN0eWxlUHJlcHJvY2Vzc29yT3B0aW9ucyxcbiAgVHlwZSxcbn0gZnJvbSAnLi9idWlsZGVycy9icm93c2VyL3NjaGVtYSc7XG5cbmV4cG9ydCB7XG4gIGJ1aWxkV2VicGFja0Jyb3dzZXIgYXMgZXhlY3V0ZUJyb3dzZXJCdWlsZGVyLFxuICBCcm93c2VyQnVpbGRlck91dHB1dCxcbn0gZnJvbSAnLi9idWlsZGVycy9icm93c2VyJztcblxuZXhwb3J0IHtcbiAgc2VydmVXZWJwYWNrQnJvd3NlciBhcyBleGVjdXRlRGV2U2VydmVyQnVpbGRlcixcbiAgRGV2U2VydmVyQnVpbGRlck9wdGlvbnMsXG4gIERldlNlcnZlckJ1aWxkZXJPdXRwdXQsXG59IGZyb20gJy4vYnVpbGRlcnMvZGV2LXNlcnZlcic7XG5cbmV4cG9ydCB7XG4gIGV4ZWN1dGUgYXMgZXhlY3V0ZUV4dHJhY3RJMThuQnVpbGRlcixcbiAgRXh0cmFjdEkxOG5CdWlsZGVyT3B0aW9ucyxcbn0gZnJvbSAnLi9idWlsZGVycy9leHRyYWN0LWkxOG4nO1xuXG5leHBvcnQge1xuICBleGVjdXRlIGFzIGV4ZWN1dGVLYXJtYUJ1aWxkZXIsXG4gIEthcm1hQnVpbGRlck9wdGlvbnMsXG4gIEthcm1hQ29uZmlnT3B0aW9ucyxcbn0gZnJvbSAnLi9idWlsZGVycy9rYXJtYSc7XG5cbmV4cG9ydCB7XG4gIGV4ZWN1dGUgYXMgZXhlY3V0ZVByb3RyYWN0b3JCdWlsZGVyLFxuICBQcm90cmFjdG9yQnVpbGRlck9wdGlvbnMsXG59IGZyb20gJy4vYnVpbGRlcnMvcHJvdHJhY3Rvcic7XG5cbmV4cG9ydCB7XG4gIGV4ZWN1dGUgYXMgZXhlY3V0ZVNlcnZlckJ1aWxkZXIsXG4gIFNlcnZlckJ1aWxkZXJPcHRpb25zLFxuICBTZXJ2ZXJCdWlsZGVyT3V0cHV0LFxufSBmcm9tICcuL2J1aWxkZXJzL3NlcnZlcic7XG5cbmV4cG9ydCB7IGV4ZWN1dGUgYXMgZXhlY3V0ZU5nUGFja2FnckJ1aWxkZXIsIE5nUGFja2FnckJ1aWxkZXJPcHRpb25zIH0gZnJvbSAnLi9idWlsZGVycy9uZy1wYWNrYWdyJztcbiJdfQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILCtDQUE2QjtBQUU3QixvREFjbUM7QUFWakMscUdBQUEsV0FBVyxPQUFBO0FBSVgsdUdBQUEsYUFBYSxPQUFBO0FBS2IsOEZBQUEsSUFBSSxPQUFBO0FBR04sOENBRzRCO0FBRjFCLGdIQUFBLG1CQUFtQixPQUF5QjtBQUk5QyxvREFJK0I7QUFIN0IscUhBQUEsdUJBQXVCLE9BQUE7QUFLekIsd0RBR2lDO0FBRi9CLHlIQUFBLE9BQU8sT0FBNkI7QUFJdEMsMENBSTBCO0FBSHhCLDRHQUFBLE9BQU8sT0FBdUI7QUFLaEMsb0RBRytCO0FBRjdCLHNIQUFBLE9BQU8sT0FBNEI7QUFJckMsNENBSTJCO0FBSHpCLDhHQUFBLE9BQU8sT0FBd0I7QUFLakMsb0RBQW9HO0FBQTNGLHFIQUFBLE9BQU8sT0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi90cmFuc2Zvcm1zJztcblxuZXhwb3J0IHtcbiAgQXNzZXRQYXR0ZXJuLFxuICBBc3NldFBhdHRlcm5DbGFzcyBhcyBBc3NldFBhdHRlcm5PYmplY3QsXG4gIEJ1ZGdldCxcbiAgQ3Jvc3NPcmlnaW4sXG4gIEZpbGVSZXBsYWNlbWVudCxcbiAgT3B0aW1pemF0aW9uQ2xhc3MgYXMgT3B0aW1pemF0aW9uT2JqZWN0LFxuICBPcHRpbWl6YXRpb25VbmlvbixcbiAgT3V0cHV0SGFzaGluZyxcbiAgU2NoZW1hIGFzIEJyb3dzZXJCdWlsZGVyT3B0aW9ucyxcbiAgU291cmNlTWFwQ2xhc3MgYXMgU291cmNlTWFwT2JqZWN0LFxuICBTb3VyY2VNYXBVbmlvbixcbiAgU3R5bGVQcmVwcm9jZXNzb3JPcHRpb25zLFxuICBUeXBlLFxufSBmcm9tICcuL2J1aWxkZXJzL2Jyb3dzZXIvc2NoZW1hJztcblxuZXhwb3J0IHtcbiAgYnVpbGRXZWJwYWNrQnJvd3NlciBhcyBleGVjdXRlQnJvd3NlckJ1aWxkZXIsXG4gIEJyb3dzZXJCdWlsZGVyT3V0cHV0LFxufSBmcm9tICcuL2J1aWxkZXJzL2Jyb3dzZXInO1xuXG5leHBvcnQge1xuICBleGVjdXRlRGV2U2VydmVyQnVpbGRlcixcbiAgRGV2U2VydmVyQnVpbGRlck9wdGlvbnMsXG4gIERldlNlcnZlckJ1aWxkZXJPdXRwdXQsXG59IGZyb20gJy4vYnVpbGRlcnMvZGV2LXNlcnZlcic7XG5cbmV4cG9ydCB7XG4gIGV4ZWN1dGUgYXMgZXhlY3V0ZUV4dHJhY3RJMThuQnVpbGRlcixcbiAgRXh0cmFjdEkxOG5CdWlsZGVyT3B0aW9ucyxcbn0gZnJvbSAnLi9idWlsZGVycy9leHRyYWN0LWkxOG4nO1xuXG5leHBvcnQge1xuICBleGVjdXRlIGFzIGV4ZWN1dGVLYXJtYUJ1aWxkZXIsXG4gIEthcm1hQnVpbGRlck9wdGlvbnMsXG4gIEthcm1hQ29uZmlnT3B0aW9ucyxcbn0gZnJvbSAnLi9idWlsZGVycy9rYXJtYSc7XG5cbmV4cG9ydCB7XG4gIGV4ZWN1dGUgYXMgZXhlY3V0ZVByb3RyYWN0b3JCdWlsZGVyLFxuICBQcm90cmFjdG9yQnVpbGRlck9wdGlvbnMsXG59IGZyb20gJy4vYnVpbGRlcnMvcHJvdHJhY3Rvcic7XG5cbmV4cG9ydCB7XG4gIGV4ZWN1dGUgYXMgZXhlY3V0ZVNlcnZlckJ1aWxkZXIsXG4gIFNlcnZlckJ1aWxkZXJPcHRpb25zLFxuICBTZXJ2ZXJCdWlsZGVyT3V0cHV0LFxufSBmcm9tICcuL2J1aWxkZXJzL3NlcnZlcic7XG5cbmV4cG9ydCB7IGV4ZWN1dGUgYXMgZXhlY3V0ZU5nUGFja2FnckJ1aWxkZXIsIE5nUGFja2FnckJ1aWxkZXJPcHRpb25zIH0gZnJvbSAnLi9idWlsZGVycy9uZy1wYWNrYWdyJztcbiJdfQ==
@@ -33,6 +33,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
33
33
  exports.InlineCriticalCssProcessor = void 0;
34
34
  const fs = __importStar(require("fs"));
35
35
  const Critters = require('critters');
36
+ /**
37
+ * Pattern used to extract the media query set by Critters in an `onload` handler.
38
+ */
39
+ const MEDIA_SET_HANDLER_PATTERN = /^this\.media=["'](.*)["'];?$/;
40
+ /**
41
+ * Name of the attribute used to save the Critters media query so it can be re-assigned on load.
42
+ */
43
+ const CSP_MEDIA_ATTR = 'ngCspMedia';
44
+ /**
45
+ * Script text used to change the media value of the link tags.
46
+ */
47
+ const LINK_LOAD_SCRIPT_CONTENT = [
48
+ `(() => {`,
49
+ // Save the `children` in a variable since they're a live DOM node collection.
50
+ // We iterate over the direct descendants, instead of going through a `querySelectorAll`,
51
+ // because we know that the tags will be directly inside the `head`.
52
+ ` const children = document.head.children;`,
53
+ // Declare `onLoad` outside the loop to avoid leaking memory.
54
+ // Can't be an arrow function, because we need `this` to refer to the DOM node.
55
+ ` function onLoad() {this.media = this.getAttribute('${CSP_MEDIA_ATTR}');}`,
56
+ // Has to use a plain for loop, because some browsers don't support
57
+ // `forEach` on `children` which is a `HTMLCollection`.
58
+ ` for (let i = 0; i < children.length; i++) {`,
59
+ ` const child = children[i];`,
60
+ ` child.hasAttribute('${CSP_MEDIA_ATTR}') && child.addEventListener('load', onLoad);`,
61
+ ` }`,
62
+ `})();`,
63
+ ].join('\n');
36
64
  class CrittersExtended extends Critters {
37
65
  constructor(optionsExtended) {
38
66
  super({
@@ -48,6 +76,8 @@ class CrittersExtended extends Critters {
48
76
  pruneSource: false,
49
77
  reduceInlineStyles: false,
50
78
  mergeStylesheets: false,
79
+ // Note: if `preload` changes to anything other than `media`, the logic in
80
+ // `embedLinkedStylesheetOverride` will have to be updated.
51
81
  preload: 'media',
52
82
  noscriptFallback: true,
53
83
  inlineFonts: true,
@@ -55,11 +85,70 @@ class CrittersExtended extends Critters {
55
85
  this.optionsExtended = optionsExtended;
56
86
  this.warnings = [];
57
87
  this.errors = [];
88
+ this.addedCspScriptsDocuments = new WeakSet();
89
+ this.documentNonces = new WeakMap();
90
+ /**
91
+ * Override of the Critters `embedLinkedStylesheet` method
92
+ * that makes it work with Angular's CSP APIs.
93
+ */
94
+ this.embedLinkedStylesheetOverride = async (link, document) => {
95
+ const returnValue = await this.initialEmbedLinkedStylesheet(link, document);
96
+ const cspNonce = this.findCspNonce(document);
97
+ if (cspNonce) {
98
+ const crittersMedia = link.getAttribute('onload')?.match(MEDIA_SET_HANDLER_PATTERN);
99
+ if (crittersMedia) {
100
+ // If there's a Critters-generated `onload` handler and the file has an Angular CSP nonce,
101
+ // we have to remove the handler, because it's incompatible with CSP. We save the value
102
+ // in a different attribute and we generate a script tag with the nonce that uses
103
+ // `addEventListener` to apply the media query instead.
104
+ link.removeAttribute('onload');
105
+ link.setAttribute(CSP_MEDIA_ATTR, crittersMedia[1]);
106
+ this.conditionallyInsertCspLoadingScript(document, cspNonce);
107
+ }
108
+ link.prev?.setAttribute('nonce', cspNonce);
109
+ }
110
+ return returnValue;
111
+ };
112
+ // We can't use inheritance to override `embedLinkedStylesheet`, because it's not declared in
113
+ // the `Critters` .d.ts which means that we can't call the `super` implementation. TS doesn't
114
+ // allow for `super` to be cast to a different type.
115
+ this.initialEmbedLinkedStylesheet = this.embedLinkedStylesheet;
116
+ this.embedLinkedStylesheet = this.embedLinkedStylesheetOverride;
58
117
  }
59
118
  readFile(path) {
60
119
  const readAsset = this.optionsExtended.readAsset;
61
120
  return readAsset ? readAsset(path) : fs.promises.readFile(path, 'utf-8');
62
121
  }
122
+ /**
123
+ * Finds the CSP nonce for a specific document.
124
+ */
125
+ findCspNonce(document) {
126
+ if (this.documentNonces.has(document)) {
127
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
128
+ return this.documentNonces.get(document);
129
+ }
130
+ // HTML attribute are case-insensitive, but the parser used by Critters is case-sensitive.
131
+ const nonceElement = document.querySelector('[ngCspNonce], [ngcspnonce]');
132
+ const cspNonce = nonceElement?.getAttribute('ngCspNonce') || nonceElement?.getAttribute('ngcspnonce') || null;
133
+ this.documentNonces.set(document, cspNonce);
134
+ return cspNonce;
135
+ }
136
+ /**
137
+ * Inserts the `script` tag that swaps the critical CSS at runtime,
138
+ * if one hasn't been inserted into the document already.
139
+ */
140
+ conditionallyInsertCspLoadingScript(document, nonce) {
141
+ if (this.addedCspScriptsDocuments.has(document)) {
142
+ return;
143
+ }
144
+ const script = document.createElement('script');
145
+ script.setAttribute('nonce', nonce);
146
+ script.textContent = LINK_LOAD_SCRIPT_CONTENT;
147
+ // Append the script to the head since it needs to
148
+ // run as early as possible, after the `link` tags.
149
+ document.head.appendChild(script);
150
+ this.addedCspScriptsDocuments.add(document);
151
+ }
63
152
  }
64
153
  class InlineCriticalCssProcessor {
65
154
  constructor(options) {
@@ -79,4 +168,4 @@ class InlineCriticalCssProcessor {
79
168
  }
80
169
  }
81
170
  exports.InlineCriticalCssProcessor = InlineCriticalCssProcessor;
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWNyaXRpY2FsLWNzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3V0aWxzL2luZGV4LWZpbGUvaW5saW5lLWNyaXRpY2FsLWNzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUV6QixNQUFNLFFBQVEsR0FBc0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBWXhFLE1BQU0sZ0JBQWlCLFNBQVEsUUFBUTtJQUlyQyxZQUNtQixlQUNnQjtRQUVqQyxLQUFLLENBQUM7WUFDSixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLEtBQUssRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQzthQUNmO1lBQ0QsUUFBUSxFQUFFLE1BQU07WUFDaEIsSUFBSSxFQUFFLGVBQWUsQ0FBQyxVQUFVO1lBQ2hDLFVBQVUsRUFBRSxlQUFlLENBQUMsU0FBUztZQUNyQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNO1lBQ2xDLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixPQUFPLEVBQUUsT0FBTztZQUNoQixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQW5CYyxvQkFBZSxHQUFmLGVBQWUsQ0FDQztRQUwxQixhQUFRLEdBQWEsRUFBRSxDQUFDO1FBQ3hCLFdBQU0sR0FBYSxFQUFFLENBQUM7SUF1Qi9CLENBQUM7SUFFZSxRQUFRLENBQUMsSUFBWTtRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztRQUVqRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0UsQ0FBQztDQUNGO0FBRUQsTUFBYSwwQkFBMEI7SUFDckMsWUFBK0IsT0FBMEM7UUFBMUMsWUFBTyxHQUFQLE9BQU8sQ0FBbUM7SUFBRyxDQUFDO0lBRTdFLEtBQUssQ0FBQyxPQUFPLENBQ1gsSUFBWSxFQUNaLE9BQXdDO1FBRXhDLE1BQU0sUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QyxPQUFPO1lBQ0wsNkNBQTZDO1lBQzdDLG1GQUFtRjtZQUNuRiwwQ0FBMEM7WUFDMUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDO1lBQzVELE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtZQUN2QixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7U0FDNUIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5CRCxnRUFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuXG5jb25zdCBDcml0dGVyczogdHlwZW9mIGltcG9ydCgnY3JpdHRlcnMnKS5kZWZhdWx0ID0gcmVxdWlyZSgnY3JpdHRlcnMnKTtcblxuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVDcml0aWNhbENzc1Byb2Nlc3NPcHRpb25zIHtcbiAgb3V0cHV0UGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElubGluZUNyaXRpY2FsQ3NzUHJvY2Vzc29yT3B0aW9ucyB7XG4gIG1pbmlmeT86IGJvb2xlYW47XG4gIGRlcGxveVVybD86IHN0cmluZztcbiAgcmVhZEFzc2V0PzogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5jbGFzcyBDcml0dGVyc0V4dGVuZGVkIGV4dGVuZHMgQ3JpdHRlcnMge1xuICByZWFkb25seSB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgcmVhZG9ubHkgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uc0V4dGVuZGVkOiBJbmxpbmVDcml0aWNhbENzc1Byb2Nlc3Nvck9wdGlvbnMgJlxuICAgICAgSW5saW5lQ3JpdGljYWxDc3NQcm9jZXNzT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoe1xuICAgICAgbG9nZ2VyOiB7XG4gICAgICAgIHdhcm46IChzOiBzdHJpbmcpID0+IHRoaXMud2FybmluZ3MucHVzaChzKSxcbiAgICAgICAgZXJyb3I6IChzOiBzdHJpbmcpID0+IHRoaXMuZXJyb3JzLnB1c2gocyksXG4gICAgICAgIGluZm86ICgpID0+IHt9LFxuICAgICAgfSxcbiAgICAgIGxvZ0xldmVsOiAnd2FybicsXG4gICAgICBwYXRoOiBvcHRpb25zRXh0ZW5kZWQub3V0cHV0UGF0aCxcbiAgICAgIHB1YmxpY1BhdGg6IG9wdGlvbnNFeHRlbmRlZC5kZXBsb3lVcmwsXG4gICAgICBjb21wcmVzczogISFvcHRpb25zRXh0ZW5kZWQubWluaWZ5LFxuICAgICAgcHJ1bmVTb3VyY2U6IGZhbHNlLFxuICAgICAgcmVkdWNlSW5saW5lU3R5bGVzOiBmYWxzZSxcbiAgICAgIG1lcmdlU3R5bGVzaGVldHM6IGZhbHNlLFxuICAgICAgcHJlbG9hZDogJ21lZGlhJyxcbiAgICAgIG5vc2NyaXB0RmFsbGJhY2s6IHRydWUsXG4gICAgICBpbmxpbmVGb250czogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSByZWFkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlYWRBc3NldCA9IHRoaXMub3B0aW9uc0V4dGVuZGVkLnJlYWRBc3NldDtcblxuICAgIHJldHVybiByZWFkQXNzZXQgPyByZWFkQXNzZXQocGF0aCkgOiBmcy5wcm9taXNlcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5saW5lQ3JpdGljYWxDc3NQcm9jZXNzb3Ige1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9uczogSW5saW5lQ3JpdGljYWxDc3NQcm9jZXNzb3JPcHRpb25zKSB7fVxuXG4gIGFzeW5jIHByb2Nlc3MoXG4gICAgaHRtbDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IElubGluZUNyaXRpY2FsQ3NzUHJvY2Vzc09wdGlvbnMsXG4gICk6IFByb21pc2U8eyBjb250ZW50OiBzdHJpbmc7IHdhcm5pbmdzOiBzdHJpbmdbXTsgZXJyb3JzOiBzdHJpbmdbXSB9PiB7XG4gICAgY29uc3QgY3JpdHRlcnMgPSBuZXcgQ3JpdHRlcnNFeHRlbmRlZCh7IC4uLnRoaXMub3B0aW9ucywgLi4ub3B0aW9ucyB9KTtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgY3JpdHRlcnMucHJvY2VzcyhodG1sKTtcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBDbGVhbiB1cCB2YWx1ZSBmcm9tIHZhbHVlIGxlc3MgYXR0cmlidXRlcy5cbiAgICAgIC8vIFRoaXMgaXMgY2F1c2VkIGJlY2F1c2UgcGFyc2U1IGFsd2F5cyByZXF1aXJlcyBhdHRyaWJ1dGVzIHRvIGhhdmUgYSBzdHJpbmcgdmFsdWUuXG4gICAgICAvLyBub21vZHVsZT1cIlwiIGRlZmVyPVwiXCIgLT4gbm9tb2R1bGUgZGVmZXIuXG4gICAgICBjb250ZW50OiBjb250ZW50LnJlcGxhY2UoLyhcXHMoPzpkZWZlcnxub21vZHVsZSkpPVwiXCIvZywgJyQxJyksXG4gICAgICBlcnJvcnM6IGNyaXR0ZXJzLmVycm9ycyxcbiAgICAgIHdhcm5pbmdzOiBjcml0dGVycy53YXJuaW5ncyxcbiAgICB9O1xuICB9XG59XG4iXX0=
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWNyaXRpY2FsLWNzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3V0aWxzL2luZGV4LWZpbGUvaW5saW5lLWNyaXRpY2FsLWNzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUV6QixNQUFNLFFBQVEsR0FBc0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXhFOztHQUVHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyw4QkFBOEIsQ0FBQztBQUVqRTs7R0FFRztBQUNILE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUVwQzs7R0FFRztBQUNILE1BQU0sd0JBQXdCLEdBQUc7SUFDL0IsVUFBVTtJQUNWLDhFQUE4RTtJQUM5RSx5RkFBeUY7SUFDekYsb0VBQW9FO0lBQ3BFLDRDQUE0QztJQUM1Qyw2REFBNkQ7SUFDN0QsK0VBQStFO0lBQy9FLHdEQUF3RCxjQUFjLE1BQU07SUFDNUUsbUVBQW1FO0lBQ25FLHVEQUF1RDtJQUN2RCwrQ0FBK0M7SUFDL0MsZ0NBQWdDO0lBQ2hDLDJCQUEyQixjQUFjLCtDQUErQztJQUN4RixLQUFLO0lBQ0wsT0FBTztDQUNSLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBdUNiLE1BQU0sZ0JBQWlCLFNBQVEsUUFBUTtJQVVyQyxZQUNtQixlQUNnQjtRQUVqQyxLQUFLLENBQUM7WUFDSixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLEtBQUssRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENB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Qyw0QkFBNEIsRUFBRSxJQUFJLENBQUM7WUFDNUQsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3ZCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtTQUM1QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbkJELGdFQW1CQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5cbmNvbnN0IENyaXR0ZXJzOiB0eXBlb2YgaW1wb3J0KCdjcml0dGVycycpLmRlZmF1bHQgPSByZXF1aXJlKCdjcml0dGVycycpO1xuXG4vKipcbiAqIFBhdHRlcm4gdXNlZCB0byBleHRyYWN0IHRoZSBtZWRpYSBxdWVyeSBzZXQgYnkgQ3JpdHRlcnMgaW4gYW4gYG9ubG9hZGAgaGFuZGxlci5cbiAqL1xuY29uc3QgTUVESUFfU0VUX0hBTkRMRVJfUEFUVEVSTiA9IC9edGhpc1xcLm1lZGlhPVtcIiddKC4qKVtcIiddOz8kLztcblxuLyoqXG4gKiBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdXNlZCB0byBzYXZlIHRoZSBDcml0dGVycyBtZWRpYSBxdWVyeSBzbyBpdCBjYW4gYmUgcmUtYXNzaWduZWQgb24gbG9hZC5cbiAqL1xuY29uc3QgQ1NQX01FRElBX0FUVFIgPSAnbmdDc3BNZWRpYSc7XG5cbi8qKlxuICogU2NyaXB0IHRleHQgdXNlZCB0byBjaGFuZ2UgdGhlIG1lZGlhIHZhbHVlIG9mIHRoZSBsaW5rIHRhZ3MuXG4gKi9cbmNvbnN0IExJTktfTE9BRF9TQ1JJUFRfQ09OVEVOVCA9IFtcbiAgYCgoKSA9PiB7YCxcbiAgLy8gU2F2ZSB0aGUgYGNoaWxkcmVuYCBpbiBhIHZhcmlhYmxlIHNpbmNlIHRoZXkncmUgYSBsaXZlIERPTSBub2RlIGNvbGxlY3Rpb24uXG4gIC8vIFdlIGl0ZXJhdGUgb3ZlciB0aGUgZGlyZWN0IGRlc2NlbmRhbnRzLCBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggYSBgcXVlcnlTZWxlY3RvckFsbGAsXG4gIC8vIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSB0YWdzIHdpbGwgYmUgZGlyZWN0bHkgaW5zaWRlIHRoZSBgaGVhZGAuXG4gIGAgIGNvbnN0IGNoaWxkcmVuID0gZG9jdW1lbnQuaGVhZC5jaGlsZHJlbjtgLFxuICAvLyBEZWNsYXJlIGBvbkxvYWRgIG91dHNpZGUgdGhlIGxvb3AgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkuXG4gIC8vIENhbid0IGJlIGFuIGFycm93IGZ1bmN0aW9uLCBiZWNhdXNlIHdlIG5lZWQgYHRoaXNgIHRvIHJlZmVyIHRvIHRoZSBET00gbm9kZS5cbiAgYCAgZnVuY3Rpb24gb25Mb2FkKCkge3RoaXMubWVkaWEgPSB0aGlzLmdldEF0dHJpYnV0ZSgnJHtDU1BfTUVESUFfQVRUUn0nKTt9YCxcbiAgLy8gSGFzIHRvIHVzZSBhIHBsYWluIGZvciBsb29wLCBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydFxuICAvLyBgZm9yRWFjaGAgb24gYGNoaWxkcmVuYCB3aGljaCBpcyBhIGBIVE1MQ29sbGVjdGlvbmAuXG4gIGAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtgLFxuICBgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07YCxcbiAgYCAgICBjaGlsZC5oYXNBdHRyaWJ1dGUoJyR7Q1NQX01FRElBX0FUVFJ9JykgJiYgY2hpbGQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7YCxcbiAgYCAgfWAsXG4gIGB9KSgpO2AsXG5dLmpvaW4oJ1xcbicpO1xuXG5leHBvcnQgaW50ZXJmYWNlIElubGluZUNyaXRpY2FsQ3NzUHJvY2Vzc09wdGlvbnMge1xuICBvdXRwdXRQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lQ3JpdGljYWxDc3NQcm9jZXNzb3JPcHRpb25zIHtcbiAgbWluaWZ5PzogYm9vbGVhbjtcbiAgZGVwbG95VXJsPzogc3RyaW5nO1xuICByZWFkQXNzZXQ/OiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59XG5cbi8qKiBQYXJ0aWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGBIVE1MRWxlbWVudGAuICovXG5pbnRlcmZhY2UgUGFydGlhbEhUTUxFbGVtZW50IHtcbiAgZ2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGw7XG4gIHNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICBoYXNBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgcmVtb3ZlQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IHZvaWQ7XG4gIGFwcGVuZENoaWxkKGNoaWxkOiBQYXJ0aWFsSFRNTEVsZW1lbnQpOiB2b2lkO1xuICB0ZXh0Q29udGVudDogc3RyaW5nO1xuICB0YWdOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBjaGlsZHJlbjogUGFydGlhbEhUTUxFbGVtZW50W107XG4gIG5leHQ6IFBhcnRpYWxIVE1MRWxlbWVudCB8IG51bGw7XG4gIHByZXY6IFBhcnRpYWxIVE1MRWxlbWVudCB8IG51bGw7XG59XG5cbi8qKiBQYXJ0aWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIEhUTUwgYERvY3VtZW50YC4gKi9cbmludGVyZmFjZSBQYXJ0aWFsRG9jdW1lbnQge1xuICBoZWFkOiBQYXJ0aWFsSFRNTEVsZW1lbnQ7XG4gIGNyZWF0ZUVsZW1lbnQodGFnTmFtZTogc3RyaW5nKTogUGFydGlhbEhUTUxFbGVtZW50O1xuICBxdWVyeVNlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBQYXJ0aWFsSFRNTEVsZW1lbnQgfCBudWxsO1xufVxuXG4vKiogU2lnbmF0dXJlIG9mIHRoZSBgQ3JpdHRlcnMuZW1iZWRMaW5rZWRTdHlsZXNoZWV0YCBtZXRob2QuICovXG50eXBlIEVtYmVkTGlua2VkU3R5bGVzaGVldEZuID0gKFxuICBsaW5rOiBQYXJ0aWFsSFRNTEVsZW1lbnQsXG4gIGRvY3VtZW50OiBQYXJ0aWFsRG9jdW1lbnQsXG4pID0+IFByb21pc2U8dW5rbm93bj47XG5cbmNsYXNzIENyaXR0ZXJzRXh0ZW5kZWQgZXh0ZW5kcyBDcml0dGVycyB7XG4gIHJlYWRvbmx5IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICByZWFkb25seSBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgaW5pdGlhbEVtYmVkTGlua2VkU3R5bGVzaGVldDogRW1iZWRMaW5rZWRTdHlsZXNoZWV0Rm47XG4gIHByaXZhdGUgYWRkZWRDc3BTY3JpcHRzRG9jdW1lbnRzID0gbmV3IFdlYWtTZXQ8UGFydGlhbERvY3VtZW50PigpO1xuICBwcml2YXRlIGRvY3VtZW50Tm9uY2VzID0gbmV3IFdlYWtNYXA8UGFydGlhbERvY3VtZW50LCBzdHJpbmcgfCBudWxsPigpO1xuXG4gIC8vIEluaGVyaXRlZCBmcm9tIGBDcml0dGVyc2AsIGJ1dCBub3QgZXhwb3NlZCBpbiB0aGUgdHlwaW5ncy5cbiAgcHJvdGVjdGVkIGVtYmVkTGlua2VkU3R5bGVzaGVldCE6IEVtYmVkTGlua2VkU3R5bGVzaGVldEZuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uc0V4dGVuZGVkOiBJbmxpbmVDcml0aWNhbENzc1Byb2Nlc3Nvck9wdGlvbnMgJlxuICAgICAgSW5saW5lQ3JpdGljYWxDc3NQcm9jZXNzT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoe1xuICAgICAgbG9nZ2VyOiB7XG4gICAgICAgIHdhcm46IChzOiBzdHJpbmcpID0+IHRoaXMud2FybmluZ3MucHVzaChzKSxcbiAgICAgICAgZXJyb3I6IChzOiBzdHJpbmcpID0+IHRoaXMuZXJyb3JzLnB1c2gocyksXG4gICAgICAgIGluZm86ICgpID0+IHt9LFxuICAgICAgfSxcbiAgICAgIGxvZ0xldmVsOiAnd2FybicsXG4gICAgICBwYXRoOiBvcHRpb25zRXh0ZW5kZWQub3V0cHV0UGF0aCxcbiAgICAgIHB1YmxpY1BhdGg6IG9wdGlvbnNFeHRlbmRlZC5kZXBsb3lVcmwsXG4gICAgICBjb21wcmVzczogISFvcHRpb25zRXh0ZW5kZWQubWluaWZ5LFxuICAgICAgcHJ1bmVTb3VyY2U6IGZhbHNlLFxuICAgICAgcmVkdWNlSW5saW5lU3R5bGVzOiBmYWxzZSxcbiAgICAgIG1lcmdlU3R5bGVzaGVldHM6IGZhbHNlLFxuICAgICAgLy8gTm90ZTogaWYgYHByZWxvYWRgIGNoYW5nZXMgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBgbWVkaWFgLCB0aGUgbG9naWMgaW5cbiAgICAgIC8vIGBlbWJlZExpbmtlZFN0eWxlc2hlZXRPdmVycmlkZWAgd2lsbCBoYXZlIHRvIGJlIHVwZGF0ZWQuXG4gICAgICBwcmVsb2FkOiAnbWVkaWEnLFxuICAgICAgbm9zY3JpcHRGYWxsYmFjazogdHJ1ZSxcbiAgICAgIGlubGluZUZvbnRzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gV2UgY2FuJ3QgdXNlIGluaGVyaXRhbmNlIHRvIG92ZXJyaWRlIGBlbWJlZExpbmtlZFN0eWxlc2hlZXRgLCBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluXG4gICAgLy8gdGhlIGBDcml0dGVyc2AgLmQudHMgd2hpY2ggbWVhbnMgdGhhdCB3ZSBjYW4ndCBjYWxsIHRoZSBgc3VwZXJgIGltcGxlbWVudGF0aW9uLiBUUyBkb2Vzbid0XG4gICAgLy8gYWxsb3cgZm9yIGBzdXBlcmAgdG8gYmUgY2FzdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICAgIHRoaXMuaW5pdGlhbEVtYmVkTGlua2VkU3R5bGVzaGVldCA9IHRoaXMuZW1iZWRMaW5rZWRTdHlsZXNoZWV0O1xuICAgIHRoaXMuZW1iZWRMaW5rZWRTdHlsZXNoZWV0ID0gdGhpcy5lbWJlZExpbmtlZFN0eWxlc2hlZXRPdmVycmlkZTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSByZWFkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlYWRBc3NldCA9IHRoaXMub3B0aW9uc0V4dGVuZGVkLnJlYWRBc3NldDtcblxuICAgIHJldHVybiByZWFkQXNzZXQgPyByZWFkQXNzZXQocGF0aCkgOiBmcy5wcm9taXNlcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvZiB0aGUgQ3JpdHRlcnMgYGVtYmVkTGlua2VkU3R5bGVzaGVldGAgbWV0aG9kXG4gICAqIHRoYXQgbWFrZXMgaXQgd29yayB3aXRoIEFuZ3VsYXIncyBDU1AgQVBJcy5cbiAgICovXG4gIHByaXZhdGUgZW1iZWRMaW5rZWRTdHlsZXNoZWV0T3ZlcnJpZGU6IEVtYmVkTGlua2VkU3R5bGVzaGVldEZuID0gYXN5bmMgKGxpbmssIGRvY3VtZW50KSA9PiB7XG4gICAgY29uc3QgcmV0dXJuVmFsdWUgPSBhd2FpdCB0aGlzLmluaXRpYWxFbWJlZExpbmtlZFN0eWxlc2hlZXQobGluaywgZG9jdW1lbnQpO1xuICAgIGNvbnN0IGNzcE5vbmNlID0gdGhpcy5maW5kQ3NwTm9uY2UoZG9jdW1lbnQpO1xuXG4gICAgaWYgKGNzcE5vbmNlKSB7XG4gICAgICBjb25zdCBjcml0dGVyc01lZGlhID0gbGluay5nZXRBdHRyaWJ1dGUoJ29ubG9hZCcpPy5tYXRjaChNRURJQV9TRVRfSEFORExFUl9QQVRURVJOKTtcblxuICAgICAgaWYgKGNyaXR0ZXJzTWVkaWEpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBhIENyaXR0ZXJzLWdlbmVyYXRlZCBgb25sb2FkYCBoYW5kbGVyIGFuZCB0aGUgZmlsZSBoYXMgYW4gQW5ndWxhciBDU1Agbm9uY2UsXG4gICAgICAgIC8vIHdlIGhhdmUgdG8gcmVtb3ZlIHRoZSBoYW5kbGVyLCBiZWNhdXNlIGl0J3MgaW5jb21wYXRpYmxlIHdpdGggQ1NQLiBXZSBzYXZlIHRoZSB2YWx1ZVxuICAgICAgICAvLyBpbiBhIGRpZmZlcmVudCBhdHRyaWJ1dGUgYW5kIHdlIGdlbmVyYXRlIGEgc2NyaXB0IHRhZyB3aXRoIHRoZSBub25jZSB0aGF0IHVzZXNcbiAgICAgICAgLy8gYGFkZEV2ZW50TGlzdGVuZXJgIHRvIGFwcGx5IHRoZSBtZWRpYSBxdWVyeSBpbnN0ZWFkLlxuICAgICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgnb25sb2FkJyk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKENTUF9NRURJQV9BVFRSLCBjcml0dGVyc01lZGlhWzFdKTtcbiAgICAgICAgdGhpcy5jb25kaXRpb25hbGx5SW5zZXJ0Q3NwTG9hZGluZ1NjcmlwdChkb2N1bWVudCwgY3NwTm9uY2UpO1xuICAgICAgfVxuXG4gICAgICBsaW5rLnByZXY/LnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBjc3BOb25jZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgQ1NQIG5vbmNlIGZvciBhIHNwZWNpZmljIGRvY3VtZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kQ3NwTm9uY2UoZG9jdW1lbnQ6IFBhcnRpYWxEb2N1bWVudCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmRvY3VtZW50Tm9uY2VzLmhhcyhkb2N1bWVudCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICByZXR1cm4gdGhpcy5kb2N1bWVudE5vbmNlcy5nZXQoZG9jdW1lbnQpITtcbiAgICB9XG5cbiAgICAvLyBIVE1MIGF0dHJpYnV0ZSBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgYnV0IHRoZSBwYXJzZXIgdXNlZCBieSBDcml0dGVycyBpcyBjYXNlLXNlbnNpdGl2ZS5cbiAgICBjb25zdCBub25jZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbmdDc3BOb25jZV0sIFtuZ2NzcG5vbmNlXScpO1xuICAgIGNvbnN0IGNzcE5vbmNlID1cbiAgICAgIG5vbmNlRWxlbWVudD8uZ2V0QXR0cmlidXRlKCduZ0NzcE5vbmNlJykgfHwgbm9uY2VFbGVtZW50Py5nZXRBdHRyaWJ1dGUoJ25nY3Nwbm9uY2UnKSB8fCBudWxsO1xuXG4gICAgdGhpcy5kb2N1bWVudE5vbmNlcy5zZXQoZG9jdW1lbnQsIGNzcE5vbmNlKTtcblxuICAgIHJldHVybiBjc3BOb25jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnRzIHRoZSBgc2NyaXB0YCB0YWcgdGhhdCBzd2FwcyB0aGUgY3JpdGljYWwgQ1NTIGF0IHJ1bnRpbWUsXG4gICAqIGlmIG9uZSBoYXNuJ3QgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBkb2N1bWVudCBhbHJlYWR5LlxuICAgKi9cbiAgcHJpdmF0ZSBjb25kaXRpb25hbGx5SW5zZXJ0Q3NwTG9hZGluZ1NjcmlwdChkb2N1bWVudDogUGFydGlhbERvY3VtZW50LCBub25jZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWRkZWRDc3BTY3JpcHRzRG9jdW1lbnRzLmhhcyhkb2N1bWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCdub25jZScsIG5vbmNlKTtcbiAgICBzY3JpcHQudGV4dENvbnRlbnQgPSBMSU5LX0xPQURfU0NSSVBUX0NPTlRFTlQ7XG4gICAgLy8gQXBwZW5kIHRoZSBzY3JpcHQgdG8gdGhlIGhlYWQgc2luY2UgaXQgbmVlZHMgdG9cbiAgICAvLyBydW4gYXMgZWFybHkgYXMgcG9zc2libGUsIGFmdGVyIHRoZSBgbGlua2AgdGFncy5cbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgdGhpcy5hZGRlZENzcFNjcmlwdHNEb2N1bWVudHMuYWRkKGRvY3VtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5saW5lQ3JpdGljYWxDc3NQcm9jZXNzb3Ige1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9uczogSW5saW5lQ3JpdGljYWxDc3NQcm9jZXNzb3JPcHRpb25zKSB7fVxuXG4gIGFzeW5jIHByb2Nlc3MoXG4gICAgaHRtbDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IElubGluZUNyaXRpY2FsQ3NzUHJvY2Vzc09wdGlvbnMsXG4gICk6IFByb21pc2U8eyBjb250ZW50OiBzdHJpbmc7IHdhcm5pbmdzOiBzdHJpbmdbXTsgZXJyb3JzOiBzdHJpbmdbXSB9PiB7XG4gICAgY29uc3QgY3JpdHRlcnMgPSBuZXcgQ3JpdHRlcnNFeHRlbmRlZCh7IC4uLnRoaXMub3B0aW9ucywgLi4ub3B0aW9ucyB9KTtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgY3JpdHRlcnMucHJvY2VzcyhodG1sKTtcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBDbGVhbiB1cCB2YWx1ZSBmcm9tIHZhbHVlIGxlc3MgYXR0cmlidXRlcy5cbiAgICAgIC8vIFRoaXMgaXMgY2F1c2VkIGJlY2F1c2UgcGFyc2U1IGFsd2F5cyByZXF1aXJlcyBhdHRyaWJ1dGVzIHRvIGhhdmUgYSBzdHJpbmcgdmFsdWUuXG4gICAgICAvLyBub21vZHVsZT1cIlwiIGRlZmVyPVwiXCIgLT4gbm9tb2R1bGUgZGVmZXIuXG4gICAgICBjb250ZW50OiBjb250ZW50LnJlcGxhY2UoLyhcXHMoPzpkZWZlcnxub21vZHVsZSkpPVwiXCIvZywgJyQxJyksXG4gICAgICBlcnJvcnM6IGNyaXR0ZXJzLmVycm9ycyxcbiAgICAgIHdhcm5pbmdzOiBjcml0dGVycy53YXJuaW5ncyxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -22,6 +22,7 @@ export interface BundleStats {
22
22
  initial: boolean;
23
23
  stats: BundleStatsData;
24
24
  }
25
+ export declare function generateBuildStatsTable(data: BundleStats[], colors: boolean, showTotalSize: boolean, showEstimatedTransferSize: boolean, budgetFailures?: BudgetCalculatorResult[]): string;
25
26
  export declare function statsWarningsToString(json: StatsCompilation, statsConfig: WebpackStatsOptions): string;
26
27
  export declare function statsErrorsToString(json: StatsCompilation, statsConfig: WebpackStatsOptions): string;
27
28
  export declare function statsHasErrors(json: StatsCompilation): boolean;
@@ -33,7 +33,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
33
33
  return (mod && mod.__esModule) ? mod : { "default": mod };
34
34
  };
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.webpackStatsLogger = exports.generateBuildEventStats = exports.createWebpackLoggingCallback = exports.statsHasWarnings = exports.statsHasErrors = exports.statsErrorsToString = exports.statsWarningsToString = exports.formatSize = void 0;
36
+ exports.webpackStatsLogger = exports.generateBuildEventStats = exports.createWebpackLoggingCallback = exports.statsHasWarnings = exports.statsHasErrors = exports.statsErrorsToString = exports.statsWarningsToString = exports.generateBuildStatsTable = exports.formatSize = void 0;
37
37
  const core_1 = require("@angular-devkit/core");
38
38
  const assert_1 = __importDefault(require("assert"));
39
39
  const path = __importStar(require("path"));
@@ -183,6 +183,7 @@ function generateBuildStatsTable(data, colors, showTotalSize, showEstimatedTrans
183
183
  align: tableAlign,
184
184
  });
185
185
  }
186
+ exports.generateBuildStatsTable = generateBuildStatsTable;
186
187
  function generateBuildStats(hash, time, colors) {
187
188
  const w = (x) => (colors ? color_1.colors.bold.white(x) : x);
188
189
  return `Build at: ${w(new Date().toISOString())} - Hash: ${w(hash)} - Time: ${w('' + time)}ms`;
@@ -439,4 +440,4 @@ function webpackStatsLogger(logger, json, config, budgetFailures) {
439
440
  }
440
441
  }
441
442
  exports.webpackStatsLogger = webpackStatsLogger;
442
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy93ZWJwYWNrL3V0aWxzL3N0YXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0gsK0NBQXFEO0FBQ3JELG9EQUE0QjtBQUM1QiwyQ0FBNkI7QUFDN0IsNERBQW1DO0FBR25DLHVDQUFvRDtBQUVwRCw2Q0FBc0U7QUFDdEUsaURBQTJEO0FBQzNELHVDQUE0RjtBQUU1RixTQUFnQixVQUFVLENBQUMsSUFBWTtJQUNyQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7UUFDYixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsOEJBQThCO0lBQzlCLE1BQU0sY0FBYyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzFFLENBQUM7QUFaRCxnQ0FZQztBQWFELFNBQVMsZ0JBQWdCLENBQUMsWUFBOEI7SUFDdEQs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RTtRQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUN4RDtJQUVELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ3ZEO0FBQ0gsQ0FBQztBQW5CRCxnREFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgV2VicGFja0xvZ2dpbmdDYWxsYmFjayB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9idWlsZC13ZWJwYWNrJztcbmltcG9ydCB7IGxvZ2dpbmcsIHRhZ3MgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHRleHRUYWJsZSBmcm9tICd0ZXh0LXRhYmxlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24sIFN0YXRzQ29tcGlsYXRpb24gfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCB7IFNjaGVtYSBhcyBCcm93c2VyQnVpbGRlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9idWlsZGVycy9icm93c2VyL3NjaGVtYSc7XG5pbXBvcnQgeyBub3JtYWxpemVPcHRpbWl6YXRpb24gfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBCdWRnZXRDYWxjdWxhdG9yUmVzdWx0IH0gZnJvbSAnLi4vLi4vdXRpbHMvYnVuZGxlLWNhbGN1bGF0b3InO1xuaW1wb3J0IHsgY29sb3JzIGFzIGFuc2lDb2xvcnMsIHJlbW92ZUNvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sb3InO1xuaW1wb3J0IHsgbWFya0FzeW5jQ2h1bmtzTm9uSW5pdGlhbCB9IGZyb20gJy4vYXN5bmMtY2h1bmtzJztcbmltcG9ydCB7IFdlYnBhY2tTdGF0c09wdGlvbnMsIGdldFN0YXRzT3B0aW9ucywgbm9ybWFsaXplRXh0cmFFbnRyeVBvaW50cyB9IGZyb20gJy4vaGVscGVycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTaXplKHNpemU6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gJzAgYnl0ZXMnO1xuICB9XG5cbiAgY29uc3QgYWJicmV2aWF0aW9ucyA9IFsnYnl0ZXMnLCAna0InLCAnTUInLCAnR0InXTtcbiAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgubG9nKHNpemUpIC8gTWF0aC5sb2coMTAyNCkpO1xuICBjb25zdCByb3VuZGVkU2l6ZSA9IHNpemUgLyBNYXRoLnBvdygxMDI0LCBpbmRleCk7XG4gIC8vIGJ5dGVzIGRvbid0IGhhdmUgYSBmcmFjdGlvblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IGluZGV4ID09PSAwID8gMCA6IDI7XG5cbiAgcmV0dXJuIGAke3JvdW5kZWRTaXplLnRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpfSAke2FiYnJldmlhdGlvbnNbaW5kZXhdfWA7XG59XG5cbmV4cG9ydCB0eXBlIEJ1bmRsZVN0YXRzRGF0YSA9IFtcbiAgZmlsZXM6IHN0cmluZyxcbiAgbmFtZXM6IHN0cmluZyxcbiAgcmF3U2l6ZTogbnVtYmVyIHwgc3RyaW5nLFxuICBlc3RpbWF0ZWRUcmFuc2ZlclNpemU6IG51bWJlciB8IHN0cmluZyxcbl07XG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZVN0YXRzIHtcbiAgaW5pdGlhbDogYm9vbGVhbjtcbiAgc3RhdHM6IEJ1bmRsZVN0YXRzRGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0QnVpbGREdXJhdGlvbih3ZWJwYWNrU3RhdHM6IFN0YXRzQ29tcGlsYXRpb24pOiBudW1iZXIge1xuICBhc3NlcnQod2VicGFja1N0YXRzLmJ1aWx0QXQsICdidWlsZEF0IGNhbm5vdCBiZSB1bmRlZmluZWQnKTtcbiAgYXNzZXJ0KHdlYnBhY2tTdGF0cy50aW1lLCAndGltZSBjYW5ub3QgYmUgdW5kZWZpbmVkJyk7XG5cbiAgcmV0dXJuIERhdGUubm93KCkgLSB3ZWJwYWNrU3RhdHMuYnVpbHRBdCArIHdlYnBhY2tTdGF0cy50aW1lO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJ1bmRsZVN0YXRzKGluZm86IHtcbiAgcmF3U2l6ZT86IG51bWJlcjtcbiAgZXN0aW1hdGVkVHJhbnNmZXJTaXplPzogbnVtYmVyO1xuICBmaWxlcz86IHN0cmluZ1tdO1xuICBuYW1lcz86IHN0cmluZ1tdO1xuICBpbml0aWFsPzogYm9vbGVhbjtcbiAgcmVuZGVyZWQ/OiBib29sZWFuO1xufSk6IEJ1bmRsZVN0YXRzIHtcbiAgY29uc3QgcmF3U2l6ZSA9IHR5cGVvZiBpbmZvLnJhd1NpemUgPT09ICdudW1iZXInID8gaW5mby5yYXdTaXplIDogJy0nO1xuICBjb25zdCBlc3RpbWF0ZWRUcmFuc2ZlclNpemUgPVxuICAgIHR5cGVvZiBpbmZvLmVzdGltYXRlZFRyYW5zZmVyU2l6ZSA9PT0gJ251bWJlcicgPyBpbmZvLmVzdGltYXRlZFRyYW5zZmVyU2l6ZSA6ICctJztcbiAgY29uc3QgZmlsZXMgPVxuICAgIGluZm8uZmlsZXNcbiAgICAgID8uZmlsdGVyKChmKSA9PiAhZi5lbmRzV2l0aCgnLm1hcCcpKVxuICAgICAgLm1hcCgoZikgPT4gcGF0aC5iYXNlbmFtZShmKSlcbiAgICAgIC5qb2luKCcsICcpID8/ICcnO1xuICBjb25zdCBuYW1lcyA9IGluZm8ubmFtZXM/Lmxlbmd0aCA/IGluZm8ubmFtZXMuam9pbignLCAnKSA6ICctJztcbiAgY29uc3QgaW5pdGlhbCA9ICEhaW5mby5pbml0aWFsO1xuXG4gIHJldHVybiB7XG4gICAgaW5pdGlhbCxcbiAgICBzdGF0czogW2ZpbGVzLCBuYW1lcywgcmF3U2l6ZSwgZXN0aW1hdGVkVHJhbnNmZXJTaXplXSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCdWlsZFN0YXRzVGFibGUoXG4gIGRhdGE6IEJ1bmRsZVN0YXRzW10sXG4gIGNvbG9yczogYm9vbGVhbixcbiAgc2hvd1RvdGFsU2l6ZTogYm9vbGVhbixcbiAgc2hvd0VzdGltYXRlZFRyYW5zZmVyU2l6ZTogYm9vbGVhbixcbiAgYnVkZ2V0RmFpbHVyZXM/OiBCdWRnZXRDYWxjdWxhdG9yUmVzdWx0W10sXG4pOiBzdHJpbmcge1xuICBjb25zdCBnID0gKHg6IHN0cmluZykgPT4gKGNvbG9ycyA/IGFuc2lDb2xvcnMuZ3JlZW5CcmlnaHQoeCkgOiB4KTtcbiAgY29uc3QgYyA9ICh4OiBzdHJpbmcpID0+IChjb2xvcnMgPyBhbnNpQ29sb3JzLmN5YW5CcmlnaHQoeCkgOiB4KTtcbiAgY29uc3QgciA9ICh4OiBzdHJpbmcpID0+IChjb2xvcnMgPyBhbnNpQ29sb3JzLnJlZEJyaWdodCh4KSA6IHgpO1xuICBjb25zdCB5ID0gKHg6IHN0cmluZykgPT4gKGNvbG9ycyA/IGFuc2lDb2xvcnMueWVsbG93QnJpZ2h0KHgpIDogeCk7XG4gIGNvbnN0IGJvbGQgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5ib2xkKHgpIDogeCk7XG4gIGNvbnN0IGRpbSA9ICh4OiBzdHJpbmcpID0+IChjb2xvcnMgPyBhbnNpQ29sb3JzLmRpbSh4KSA6IHgpO1xuXG4gIGNvbnN0IGdldFNpemVDb2xvciA9IChuYW1lOiBzdHJpbmcsIGZpbGU/OiBzdHJpbmcsIGRlZmF1bHRDb2xvciA9IGMpID0+IHtcbiAgICBjb25zdCBzZXZlcml0eSA9IGJ1ZGdldHMuZ2V0KG5hbWUpIHx8IChmaWxlICYmIGJ1ZGdldHMuZ2V0KGZpbGUpKTtcbiAgICBzd2l0Y2ggKHNldmVyaXR5KSB7XG4gICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgcmV0dXJuIHk7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiByO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDb2xvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hhbmdlZEVudHJ5Q2h1bmtzU3RhdHM6IEJ1bmRsZVN0YXRzRGF0YVtdID0gW107XG4gIGNvbnN0IGNoYW5nZWRMYXp5Q2h1bmtzU3RhdHM6IEJ1bmRsZVN0YXRzRGF0YVtdID0gW107XG5cbiAgbGV0IGluaXRpYWxUb3RhbFJhd1NpemUgPSAwO1xuICBsZXQgaW5pdGlhbFRvdGFsRXN0aW1hdGVkVHJhbnNmZXJTaXplO1xuXG4gIGNvbnN0IGJ1ZGdldHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBpZiAoYnVkZ2V0RmFpbHVyZXMpIHtcbiAgICBmb3IgKGNvbnN0IHsgbGFiZWwsIHNldmVyaXR5IH0gb2YgYnVkZ2V0RmFpbHVyZXMpIHtcbiAgICAgIC8vIEluIHNvbWUgY2FzZXMgYSBmaWxlIGNhbiBoYXZlIG11bHRpcGxlIGJ1ZGdldCBmYWlsdXJlcy5cbiAgICAgIC8vIEZhdm9yIGVycm9yLlxuICAgICAgaWYgKGxhYmVsICYmICghYnVkZ2V0cy5oYXMobGFiZWwpIHx8IGJ1ZGdldHMuZ2V0KGxhYmVsKSA9PT0gJ3dhcm5pbmcnKSkge1xuICAgICAgICBidWRnZXRzLnNldChsYWJlbCwgc2V2ZXJpdHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgeyBpbml0aWFsLCBzdGF0cyB9IG9mIGRhdGEpIHtcbiAgICBjb25zdCBbZmlsZXMsIG5hbWVzLCByYXdTaXplLCBlc3RpbWF0ZWRUcmFuc2ZlclNpemVdID0gc3RhdHM7XG4gICAgY29uc3QgZ2V0UmF3U2l6ZUNvbG9yID0gZ2V0U2l6ZUNvbG9yKG5hbWVzLCBmaWxlcyk7XG4gICAgbGV0IGRhdGE6IEJ1bmRsZVN0YXRzRGF0YTtcblxuICAgIGlmIChzaG93RXN0aW1hdGVkVHJhbnNmZXJTaXplKSB7XG4gICAgICBkYXRhID0gW1xuICAgICAgICBnKGZpbGVzKSxcbiAgICAgICAgbmFtZXMsXG4gICAgICAgIGdldFJhd1NpemVDb2xvcih0eXBlb2YgcmF3U2l6ZSA9PT0gJ251bWJlcicgPyBmb3JtYXRTaXplKHJhd1NpemUpIDogcmF3U2l6ZSksXG4gICAgICAgIGMoXG4gICAgICAgICAgdHlwZW9mIGVzdGltYXRlZFRyYW5zZmVyU2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gZm9ybWF0U2l6ZShlc3RpbWF0ZWRUcmFuc2ZlclNpemUpXG4gICAgICAgICAgICA6IGVzdGltYXRlZFRyYW5zZmVyU2l6ZSxcbiAgICAgICAgKSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBbXG4gICAgICAgIGcoZmlsZXMpLFxuICAgICAgICBuYW1lcyxcbiAgICAgICAgZ2V0UmF3U2l6ZUNvbG9yKHR5cGVvZiByYXdTaXplID09PSAnbnVtYmVyJyA/IGZvcm1hdFNpemUocmF3U2l6ZSkgOiByYXdTaXplKSxcbiAgICAgICAgJycsXG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmIChpbml0aWFsKSB7XG4gICAgICBjaGFuZ2VkRW50cnlDaHVua3NTdGF0cy5wdXNoKGRhdGEpO1xuICAgICAgaWYgKHR5cGVvZiByYXdTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbml0aWFsVG90YWxSYXdTaXplICs9IHJhd1NpemU7XG4gICAgICB9XG4gICAgICBpZiAoc2hvd0VzdGltYXRlZFRyYW5zZmVyU2l6ZSAmJiB0eXBlb2YgZXN0aW1hdGVkVHJhbnNmZXJTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoaW5pdGlhbFRvdGFsRXN0aW1hdGVkVHJhbnNmZXJTaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbml0aWFsVG90YWxFc3RpbWF0ZWRUcmFuc2ZlclNpemUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGluaXRpYWxUb3RhbEVzdGltYXRlZFRyYW5zZmVyU2l6ZSArPSBlc3RpbWF0ZWRUcmFuc2ZlclNpemU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZWRMYXp5Q2h1bmtzU3RhdHMucHVzaChkYXRhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBidW5kbGVJbmZvOiAoc3RyaW5nIHwgbnVtYmVyKVtdW10gPSBbXTtcbiAgY29uc3QgYmFzZVRpdGxlcyA9IFsnTmFtZXMnLCAnUmF3IFNpemUnXTtcbiAgY29uc3QgdGFibGVBbGlnbjogKCdsJyB8ICdyJylbXSA9IFsnbCcsICdsJywgJ3InXTtcblxuICBpZiAoc2hvd0VzdGltYXRlZFRyYW5zZmVyU2l6ZSkge1xuICAgIGJhc2VUaXRsZXMucHVzaCgnRXN0aW1hdGVkIFRyYW5zZmVyIFNpemUnKTtcbiAgICB0YWJsZUFsaWduLnB1c2goJ3InKTtcbiAgfVxuXG4gIC8vIEVudHJ5IGNodW5rc1xuICBpZiAoY2hhbmdlZEVudHJ5Q2h1bmtzU3RhdHMubGVuZ3RoKSB7XG4gICAgYnVuZGxlSW5mby5wdXNoKFsnSW5pdGlhbCBDaHVuayBGaWxlcycsIC4uLmJhc2VUaXRsZXNdLm1hcChib2xkKSwgLi4uY2hhbmdlZEVudHJ5Q2h1bmtzU3RhdHMpO1xuXG4gICAgaWYgKHNob3dUb3RhbFNpemUpIHtcbiAgICAgIGJ1bmRsZUluZm8ucHVzaChbXSk7XG5cbiAgICAgIGNvbnN0IGluaXRpYWxTaXplVG90YWxDb2xvciA9IGdldFNpemVDb2xvcignYnVuZGxlIGluaXRpYWwnLCB1bmRlZmluZWQsICh4KSA9PiB4KTtcbiAgICAgIGNvbnN0IHRvdGFsU2l6ZUVsZW1lbnRzID0gW1xuICAgICAgICAnICcsXG4gICAgICAgICdJbml0aWFsIFRvdGFsJyxcbiAgICAgICAgaW5pdGlhbFNpemVUb3RhbENvbG9yKGZvcm1hdFNpemUoaW5pdGlhbFRvdGFsUmF3U2l6ZSkpLFxuICAgICAgXTtcbiAgICAgIGlmIChzaG93RXN0aW1hdGVkVHJhbnNmZXJTaXplKSB7XG4gICAgICAgIHRvdGFsU2l6ZUVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgdHlwZW9mIGluaXRpYWxUb3RhbEVzdGltYXRlZFRyYW5zZmVyU2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gZm9ybWF0U2l6ZShpbml0aWFsVG90YWxFc3RpbWF0ZWRUcmFuc2ZlclNpemUpXG4gICAgICAgICAgICA6ICctJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJ1bmRsZUluZm8ucHVzaCh0b3RhbFNpemVFbGVtZW50cy5tYXAoYm9sZCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlcGVyYXRvclxuICBpZiAoY2hhbmdlZEVudHJ5Q2h1bmtzU3RhdHMubGVuZ3RoICYmIGNoYW5nZWRMYXp5Q2h1bmtzU3RhdHMubGVuZ3RoKSB7XG4gICAgYnVuZGxlSW5mby5wdXNoKFtdKTtcbiAgfVxuXG4gIC8vIExhenkgY2h1bmtzXG4gIGlmIChjaGFuZ2VkTGF6eUNodW5rc1N0YXRzLmxlbmd0aCkge1xuICAgIGJ1bmRsZUluZm8ucHVzaChbJ0xhenkgQ2h1bmsgRmlsZXMnLCAuLi5iYXNlVGl0bGVzXS5tYXAoYm9sZCksIC4uLmNoYW5nZWRMYXp5Q2h1bmtzU3RhdHMpO1xuICB9XG5cbiAgcmV0dXJuIHRleHRUYWJsZShidW5kbGVJbmZvLCB7XG4gICAgaHNlcDogZGltKCcgfCAnKSxcbiAgICBzdHJpbmdMZW5ndGg6IChzKSA9PiByZW1vdmVDb2xvcihzKS5sZW5ndGgsXG4gICAgYWxpZ246IHRhYmxlQWxpZ24sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJ1aWxkU3RhdHMoaGFzaDogc3RyaW5nLCB0aW1lOiBudW1iZXIsIGNvbG9yczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHcgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5ib2xkLndoaXRlKHgpIDogeCk7XG5cbiAgcmV0dXJuIGBCdWlsZCBhdDogJHt3KG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSl9IC0gSGFzaDogJHt3KGhhc2gpfSAtIFRpbWU6ICR7dygnJyArIHRpbWUpfW1zYDtcbn1cblxuLy8gV2UgdXNlIHRoaXMgY2FjaGUgYmVjYXVzZSB3ZSBjYW4gaGF2ZSBtdWx0aXBsZSBidWlsZGVycyBydW5uaW5nIGluIHRoZSBzYW1lIHByb2Nlc3MsXG4vLyB3aGVyZSBlYWNoIGJ1aWxkZXIgaGFzIGRpZmZlcmVudCBvdXRwdXQgcGF0aC5cblxuLy8gSWRlYWxseSwgd2Ugc2hvdWxkIGNyZWF0ZSB0aGUgbG9nZ2luZyBjYWxsYmFjayBhcyBhIGZhY3RvcnksIGJ1dCB0aGF0IHdvdWxkIG5lZWQgYSByZWZhY3RvcmluZy5cbmNvbnN0IHJ1bnNDYWNoZSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5mdW5jdGlvbiBzdGF0c1RvU3RyaW5nKFxuICBqc29uOiBTdGF0c0NvbXBpbGF0aW9uLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdGF0c0NvbmZpZzogYW55LFxuICBidWRnZXRGYWlsdXJlcz86IEJ1ZGdldENhbGN1bGF0b3JSZXN1bHRbXSxcbik6IHN0cmluZyB7XG4gIGlmICghanNvbi5jaHVua3M/Lmxlbmd0aCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNvbG9ycyA9IHN0YXRzQ29uZmlnLmNvbG9ycztcbiAgY29uc3QgcnMgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5yZXNldCh4KSA6IHgpO1xuXG4gIGNvbnN0IGNoYW5nZWRDaHVua3NTdGF0czogQnVuZGxlU3RhdHNbXSA9IFtdO1xuICBsZXQgdW5jaGFuZ2VkQ2h1bmtOdW1iZXIgPSAwO1xuICBsZXQgaGFzRXN0aW1hdGVkVHJhbnNmZXJTaXplcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGlzRmlyc3RSdW4gPSAhcnVuc0NhY2hlLmhhcyhqc29uLm91dHB1dFBhdGggfHwgJycpO1xuXG4gIGZvciAoY29uc3QgY2h1bmsgb2YganNvbi5jaHVua3MpIHtcbiAgICAvLyBEdXJpbmcgZmlyc3QgYnVpbGQgd2Ugd2FudCB0byBkaXNwbGF5IHVuY2hhbmdlZCBjaHVua3NcbiAgICAvLyBidXQgdW5jaGFuZ2VkIGNhY2hlZCBjaHVua3MgYXJlIGFsd2F5cyBtYXJrZWQgYXMgbm90IHJlbmRlcmVkLlxuICAgIGlmICghaXNGaXJzdFJ1biAmJiAhY2h1bmsucmVuZGVyZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2V0cyA9IGpzb24uYXNzZXRzPy5maWx0ZXIoKGFzc2V0KSA9PiBjaHVuay5maWxlcz8uaW5jbHVkZXMoYXNzZXQubmFtZSkpO1xuICAgIGxldCByYXdTaXplID0gMDtcbiAgICBsZXQgZXN0aW1hdGVkVHJhbnNmZXJTaXplO1xuICAgIGlmIChhc3NldHMpIHtcbiAgICAgIGZvciAoY29uc3QgYXNzZXQgb2YgYXNzZXRzKSB7XG4gICAgICAgIGlmIChhc3NldC5uYW1lLmVuZHNXaXRoKCcubWFwJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhd1NpemUgKz0gYXNzZXQuc2l6ZTtcblxuICAgICAgICBpZiAodHlwZW9mIGFzc2V0LmluZm8uZXN0aW1hdGVkVHJhbnNmZXJTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGlmIChlc3RpbWF0ZWRUcmFuc2ZlclNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXN0aW1hdGVkVHJhbnNmZXJTaXplID0gMDtcbiAgICAgICAgICAgIGhhc0VzdGltYXRlZFRyYW5zZmVyU2l6ZXMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlc3RpbWF0ZWRUcmFuc2ZlclNpemUgKz0gYXNzZXQuaW5mby5lc3RpbWF0ZWRUcmFuc2ZlclNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2hhbmdlZENodW5rc1N0YXRzLnB1c2goZ2VuZXJhdGVCdW5kbGVTdGF0cyh7IC4uLmNodW5rLCByYXdTaXplLCBlc3RpbWF0ZWRUcmFuc2ZlclNpemUgfSkpO1xuICB9XG4gIHVuY2hhbmdlZENodW5rTnVtYmVyID0ganNvbi5jaHVua3MubGVuZ3RoIC0gY2hhbmdlZENodW5rc1N0YXRzLmxlbmd0aDtcblxuICBydW5zQ2FjaGUuYWRkKGpzb24ub3V0cHV0UGF0aCB8fCAnJyk7XG5cbiAgLy8gU29ydCBjaHVua3MgYnkgc2l6ZSBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gIGNoYW5nZWRDaHVua3NTdGF0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGEuc3RhdHNbMl0gPiBiLnN0YXRzWzJdKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgaWYgKGEuc3RhdHNbMl0gPCBiLnN0YXRzWzJdKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgY29uc3Qgc3RhdHNUYWJsZSA9IGdlbmVyYXRlQnVpbGRTdGF0c1RhYmxlKFxuICAgIGNoYW5nZWRDaHVua3NTdGF0cyxcbiAgICBjb2xvcnMsXG4gICAgdW5jaGFuZ2VkQ2h1bmtOdW1iZXIgPT09IDAsXG4gICAgaGFzRXN0aW1hdGVkVHJhbnNmZXJTaXplcyxcbiAgICBidWRnZXRGYWlsdXJlcyxcbiAgKTtcblxuICAvLyBJbiBzb21lIGNhc2VzIHdlIGRvIHRoaW5ncyBvdXRzaWRlIG9mIHdlYnBhY2sgY29udGV4dFxuICAvLyBTdWNoIHVzIGluZGV4IGdlbmVyYXRpb24sIHNlcnZpY2Ugd29ya2VyIGF1Z21lbnRhdGlvbiBldGMuLi5cbiAgLy8gVGhpcyB3aWxsIGNvcnJlY3QgdGhlIHRpbWUgYW5kIGluY2x1ZGUgdGhlc2UuXG5cbiAgY29uc3QgdGltZSA9IGdldEJ1aWxkRHVyYXRpb24oanNvbik7XG5cbiAgaWYgKHVuY2hhbmdlZENodW5rTnVtYmVyID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICAnXFxuJyArXG4gICAgICBycyh0YWdzLnN0cmlwSW5kZW50c2BcbiAgICAgICR7c3RhdHNUYWJsZX1cblxuICAgICAgJHt1bmNoYW5nZWRDaHVua051bWJlcn0gdW5jaGFuZ2VkIGNodW5rc1xuXG4gICAgICAke2dlbmVyYXRlQnVpbGRTdGF0cyhqc29uLmhhc2ggfHwgJycsIHRpbWUsIGNvbG9ycyl9XG4gICAgICBgKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgICdcXG4nICtcbiAgICAgIHJzKHRhZ3Muc3RyaXBJbmRlbnRzYFxuICAgICAgJHtzdGF0c1RhYmxlfVxuXG4gICAgICAke2dlbmVyYXRlQnVpbGRTdGF0cyhqc29uLmhhc2ggfHwgJycsIHRpbWUsIGNvbG9ycyl9XG4gICAgICBgKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRzV2FybmluZ3NUb1N0cmluZyhcbiAganNvbjogU3RhdHNDb21waWxhdGlvbixcbiAgc3RhdHNDb25maWc6IFdlYnBhY2tTdGF0c09wdGlvbnMsXG4pOiBzdHJpbmcge1xuICBjb25zdCBjb2xvcnMgPSBzdGF0c0NvbmZpZy5jb2xvcnM7XG4gIGNvbnN0IGMgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5yZXNldC5jeWFuKHgpIDogeCk7XG4gIGNvbnN0IHkgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5yZXNldC55ZWxsb3coeCkgOiB4KTtcbiAgY29uc3QgeWIgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5yZXNldC55ZWxsb3dCcmlnaHQoeCkgOiB4KTtcblxuICBjb25zdCB3YXJuaW5ncyA9IGpzb24ud2FybmluZ3MgPyBbLi4uanNvbi53YXJuaW5nc10gOiBbXTtcbiAgaWYgKGpzb24uY2hpbGRyZW4pIHtcbiAgICB3YXJuaW5ncy5wdXNoKC4uLmpzb24uY2hpbGRyZW4ubWFwKChjKSA9PiBjLndhcm5pbmdzID8/IFtdKS5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pKTtcbiAgfVxuXG4gIGxldCBvdXRwdXQgPSAnJztcbiAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgaWYgKHR5cGVvZiB3YXJuaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgb3V0cHV0ICs9IHliKGBXYXJuaW5nOiAke3dhcm5pbmd9XFxuXFxuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaWxlID0gd2FybmluZy5maWxlIHx8IHdhcm5pbmcubW9kdWxlTmFtZTtcbiAgICAgIC8vIENsZWFuIHVwIHdhcm5pbmcgcGF0aHNcbiAgICAgIC8vIEV4OiAuL3NyYy9hcHAvc3R5bGVzLnNjc3Mud2VicGFja1tqYXZhc2NyaXB0L2F1dG9dIT0hLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcy4uLi5cbiAgICAgIC8vIHRvIC4vc3JjL2FwcC9zdHlsZXMuc2Nzcy53ZWJwYWNrXG4gICAgICBpZiAoZmlsZSAmJiAhc3RhdHNDb25maWcuZXJyb3JEZXRhaWxzKSB7XG4gICAgICAgIGNvbnN0IHdlYnBhY2tQYXRoSW5kZXggPSBmaWxlLmluZGV4T2YoJy53ZWJwYWNrWycpO1xuICAgICAgICBpZiAod2VicGFja1BhdGhJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBmaWxlID0gZmlsZS5zdWJzdHJpbmcoMCwgd2VicGFja1BhdGhJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgb3V0cHV0ICs9IGMoZmlsZSk7XG4gICAgICAgIGlmICh3YXJuaW5nLmxvYykge1xuICAgICAgICAgIG91dHB1dCArPSAnOicgKyB5Yih3YXJuaW5nLmxvYyk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0ICs9ICcgLSAnO1xuICAgICAgfVxuICAgICAgaWYgKCEvXndhcm5pbmcvaS50ZXN0KHdhcm5pbmcubWVzc2FnZSkpIHtcbiAgICAgICAgb3V0cHV0ICs9IHkoJ1dhcm5pbmc6ICcpO1xuICAgICAgfVxuICAgICAgb3V0cHV0ICs9IGAke3dhcm5pbmcubWVzc2FnZX1cXG5cXG5gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQgPyAnXFxuJyArIG91dHB1dCA6IG91dHB1dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRzRXJyb3JzVG9TdHJpbmcoXG4gIGpzb246IFN0YXRzQ29tcGlsYXRpb24sXG4gIHN0YXRzQ29uZmlnOiBXZWJwYWNrU3RhdHNPcHRpb25zLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgY29sb3JzID0gc3RhdHNDb25maWcuY29sb3JzO1xuICBjb25zdCBjID0gKHg6IHN0cmluZykgPT4gKGNvbG9ycyA/IGFuc2lDb2xvcnMucmVzZXQuY3lhbih4KSA6IHgpO1xuICBjb25zdCB5YiA9ICh4OiBzdHJpbmcpID0+IChjb2xvcnMgPyBhbnNpQ29sb3JzLnJlc2V0LnllbGxvd0JyaWdodCh4KSA6IHgpO1xuICBjb25zdCByID0gKHg6IHN0cmluZykgPT4gKGNvbG9ycyA/IGFuc2lDb2xvcnMucmVzZXQucmVkQnJpZ2h0KHgpIDogeCk7XG5cbiAgY29uc3QgZXJyb3JzID0ganNvbi5lcnJvcnMgPyBbLi4uanNvbi5lcnJvcnNdIDogW107XG4gIGlmIChqc29uLmNoaWxkcmVuKSB7XG4gICAgZXJyb3JzLnB1c2goLi4uanNvbi5jaGlsZHJlbi5tYXAoKGMpID0+IGM/LmVycm9ycyB8fCBbXSkucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKSk7XG4gIH1cblxuICBsZXQgb3V0cHV0ID0gJyc7XG4gIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG91dHB1dCArPSByKGBFcnJvcjogJHtlcnJvcn1cXG5cXG5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZpbGUgPSBlcnJvci5maWxlIHx8IGVycm9yLm1vZHVsZU5hbWU7XG4gICAgICAvLyBDbGVhbiB1cCBlcnJvciBwYXRoc1xuICAgICAgLy8gRXg6IC4vc3JjL2FwcC9zdHlsZXMuc2Nzcy53ZWJwYWNrW2phdmFzY3JpcHQvYXV0b10hPSEuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzLi4uLlxuICAgICAgLy8gdG8gLi9zcmMvYXBwL3N0eWxlcy5zY3NzLndlYnBhY2tcbiAgICAgIGlmIChmaWxlICYmICFzdGF0c0NvbmZpZy5lcnJvckRldGFpbHMpIHtcbiAgICAgICAgY29uc3Qgd2VicGFja1BhdGhJbmRleCA9IGZpbGUuaW5kZXhPZignLndlYnBhY2tbJyk7XG4gICAgICAgIGlmICh3ZWJwYWNrUGF0aEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGZpbGUgPSBmaWxlLnN1YnN0cmluZygwLCB3ZWJwYWNrUGF0aEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBvdXRwdXQgKz0gYyhmaWxlKTtcbiAgICAgICAgaWYgKGVycm9yLmxvYykge1xuICAgICAgICAgIG91dHB1dCArPSAnOicgKyB5YihlcnJvci5sb2MpO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dCArPSAnIC0gJztcbiAgICAgIH1cblxuICAgICAgLy8gSW4gbW9zdCBjYXNlcyB3ZWJwYWNrIHdpbGwgYWRkIHN0YWNrIHRyYWNlcyB0byBlcnJvciBtZXNzYWdlcy5cbiAgICAgIC8vIFRoaXMgYmVsb3cgY2xlYW5zIHVwIHRoZSBlcnJvciBmcm9tIHN0YWNrcy5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9pc3N1ZXMvMTU5ODBcbiAgICAgIGNvbnN0IGluZGV4ID0gZXJyb3IubWVzc2FnZS5zZWFyY2goL1tcXG5cXHNdK2F0IC8pO1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHN0YXRzQ29uZmlnLmVycm9yU3RhY2sgfHwgaW5kZXggPT09IC0xID8gZXJyb3IubWVzc2FnZSA6IGVycm9yLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluZGV4KTtcblxuICAgICAgaWYgKCEvXmVycm9yL2kudGVzdChtZXNzYWdlKSkge1xuICAgICAgICBvdXRwdXQgKz0gcignRXJyb3I6ICcpO1xuICAgICAgfVxuICAgICAgb3V0cHV0ICs9IGAke21lc3NhZ2V9XFxuXFxuYDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0ID8gJ1xcbicgKyBvdXRwdXQgOiBvdXRwdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0c0hhc0Vycm9ycyhqc29uOiBTdGF0c0NvbXBpbGF0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShqc29uLmVycm9ycz8ubGVuZ3RoIHx8IGpzb24uY2hpbGRyZW4/LnNvbWUoKGMpID0+IGMuZXJyb3JzPy5sZW5ndGgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRzSGFzV2FybmluZ3MoanNvbjogU3RhdHNDb21waWxhdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoanNvbi53YXJuaW5ncz8ubGVuZ3RoIHx8IGpzb24uY2hpbGRyZW4/LnNvbWUoKGMpID0+IGMud2FybmluZ3M/Lmxlbmd0aCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2VicGFja0xvZ2dpbmdDYWxsYmFjayhcbiAgb3B0aW9uczogQnJvd3NlckJ1aWxkZXJPcHRpb25zLFxuICBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpLFxuKTogV2VicGFja0xvZ2dpbmdDYWxsYmFjayB7XG4gIGNvbnN0IHsgdmVyYm9zZSA9IGZhbHNlLCBzY3JpcHRzID0gW10sIHN0eWxlcyA9IFtdIH0gPSBvcHRpb25zO1xuICBjb25zdCBleHRyYUVudHJ5UG9pbnRzID0gW1xuICAgIC4uLm5vcm1hbGl6ZUV4dHJhRW50cnlQb2ludHMoc3R5bGVzLCAnc3R5bGVzJyksXG4gICAgLi4ubm9ybWFsaXplRXh0cmFFbnRyeVBvaW50cyhzY3JpcHRzLCAnc2NyaXB0cycpLFxuICBdO1xuXG4gIHJldHVybiAoc3RhdHMsIGNvbmZpZykgPT4ge1xuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhzdGF0cy50b1N0cmluZyhjb25maWcuc3RhdHMpKTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTdGF0cyA9IHN0YXRzLnRvSnNvbihnZXRTdGF0c09wdGlvbnMoZmFsc2UpKTtcbiAgICBjb25zdCB3ZWJwYWNrU3RhdHMgPSB7XG4gICAgICAuLi5yYXdTdGF0cyxcbiAgICAgIGNodW5rczogbWFya0FzeW5jQ2h1bmtzTm9uSW5pdGlhbChyYXdTdGF0cywgZXh0cmFFbnRyeVBvaW50cyksXG4gICAgfTtcblxuICAgIHdlYnBhY2tTdGF0c0xvZ2dlcihsb2dnZXIsIHdlYnBhY2tTdGF0cywgY29uZmlnKTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZEV2ZW50U3RhdHMge1xuICBhb3Q6IGJvb2xlYW47XG4gIG9wdGltaXphdGlvbjogYm9vbGVhbjtcbiAgYWxsQ2h1bmtzQ291bnQ6IG51bWJlcjtcbiAgbGF6eUNodW5rc0NvdW50OiBudW1iZXI7XG4gIGluaXRpYWxDaHVua3NDb3VudDogbnVtYmVyO1xuICBjaGFuZ2VkQ2h1bmtzQ291bnQ/OiBudW1iZXI7XG4gIGR1cmF0aW9uSW5NczogbnVtYmVyO1xuICBjc3NTaXplSW5CeXRlczogbnVtYmVyO1xuICBqc1NpemVJbkJ5dGVzOiBudW1iZXI7XG4gIG5nQ29tcG9uZW50Q291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQnVpbGRFdmVudFN0YXRzKFxuICB3ZWJwYWNrU3RhdHM6IFN0YXRzQ29tcGlsYXRpb24sXG4gIGJyb3dzZXJCdWlsZGVyT3B0aW9uczogQnJvd3NlckJ1aWxkZXJPcHRpb25zLFxuKTogQnVpbGRFdmVudFN0YXRzIHtcbiAgY29uc3QgeyBjaHVua3MgPSBbXSwgYXNzZXRzID0gW10gfSA9IHdlYnBhY2tTdGF0cztcblxuICBsZXQganNTaXplSW5CeXRlcyA9IDA7XG4gIGxldCBjc3NTaXplSW5CeXRlcyA9IDA7XG4gIGxldCBpbml0aWFsQ2h1bmtzQ291bnQgPSAwO1xuICBsZXQgbmdDb21wb25lbnRDb3VudCA9IDA7XG4gIGxldCBjaGFuZ2VkQ2h1bmtzQ291bnQgPSAwO1xuXG4gIGNvbnN0IGFsbENodW5rc0NvdW50ID0gY2h1bmtzLmxlbmd0aDtcbiAgY29uc3QgaXNGaXJzdFJ1biA9ICFydW5zQ2FjaGUuaGFzKHdlYnBhY2tTdGF0cy5vdXRwdXRQYXRoIHx8ICcnKTtcblxuICBjb25zdCBjaHVua0ZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgaWYgKCFpc0ZpcnN0UnVuICYmIGNodW5rLnJlbmRlcmVkKSB7XG4gICAgICBjaGFuZ2VkQ2h1bmtzQ291bnQrKztcbiAgICB9XG5cbiAgICBpZiAoY2h1bmsuaW5pdGlhbCkge1xuICAgICAgaW5pdGlhbENodW5rc0NvdW50Kys7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGNodW5rLmZpbGVzID8/IFtdKSB7XG4gICAgICBjaHVua0ZpbGVzLmFkZChmaWxlKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGFzc2V0IG9mIGFzc2V0cykge1xuICAgIGlmIChhc3NldC5uYW1lLmVuZHNXaXRoKCcubWFwJykgfHwgIWNodW5rRmlsZXMuaGFzKGFzc2V0Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoYXNzZXQubmFtZS5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgIGpzU2l6ZUluQnl0ZXMgKz0gYXNzZXQuc2l6ZTtcbiAgICAgIG5nQ29tcG9uZW50Q291bnQgKz0gYXNzZXQuaW5mby5uZ0NvbXBvbmVudENvdW50ID8/IDA7XG4gICAgfSBlbHNlIGlmIChhc3NldC5uYW1lLmVuZHNXaXRoKCcuY3NzJykpIHtcbiAgICAgIGNzc1NpemVJbkJ5dGVzICs9IGFzc2V0LnNpemU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpbWl6YXRpb246ICEhbm9ybWFsaXplT3B0aW1pemF0aW9uKGJyb3dzZXJCdWlsZGVyT3B0aW9ucy5vcHRpbWl6YXRpb24pLnNjcmlwdHMsXG4gICAgYW90OiBicm93c2VyQnVpbGRlck9wdGlvbnMuYW90ICE9PSBmYWxzZSxcbiAgICBhbGxDaHVua3NDb3VudCxcbiAgICBsYXp5Q2h1bmtzQ291bnQ6IGFsbENodW5rc0NvdW50IC0gaW5pdGlhbENodW5rc0NvdW50LFxuICAgIGluaXRpYWxDaHVua3NDb3VudCxcbiAgICBjaGFuZ2VkQ2h1bmtzQ291bnQsXG4gICAgZHVyYXRpb25Jbk1zOiBnZXRCdWlsZER1cmF0aW9uKHdlYnBhY2tTdGF0cyksXG4gICAgY3NzU2l6ZUluQnl0ZXMsXG4gICAganNTaXplSW5CeXRlcyxcbiAgICBuZ0NvbXBvbmVudENvdW50LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2VicGFja1N0YXRzTG9nZ2VyKFxuICBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpLFxuICBqc29uOiBTdGF0c0NvbXBpbGF0aW9uLFxuICBjb25maWc6IENvbmZpZ3VyYXRpb24sXG4gIGJ1ZGdldEZhaWx1cmVzPzogQnVkZ2V0Q2FsY3VsYXRvclJlc3VsdFtdLFxuKTogdm9pZCB7XG4gIGxvZ2dlci5pbmZvKHN0YXRzVG9TdHJpbmcoanNvbiwgY29uZmlnLnN0YXRzLCBidWRnZXRGYWlsdXJlcykpO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnLnN0YXRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBXZWJwYWNrIHN0YXRzIGNvbmZpZ3VyYXRpb24uJyk7XG4gIH1cblxuICBpZiAoc3RhdHNIYXNXYXJuaW5ncyhqc29uKSkge1xuICAgIGxvZ2dlci53YXJuKHN0YXRzV2FybmluZ3NUb1N0cmluZyhqc29uLCBjb25maWcuc3RhdHMpKTtcbiAgfVxuXG4gIGlmIChzdGF0c0hhc0Vycm9ycyhqc29uKSkge1xuICAgIGxvZ2dlci5lcnJvcihzdGF0c0Vycm9yc1RvU3RyaW5nKGpzb24sIGNvbmZpZy5zdGF0cykpO1xuICB9XG59XG4iXX0=
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy93ZWJwYWNrL3V0aWxzL3N0YXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0gsK0NBQXFEO0FBQ3JELG9EQUE0QjtBQUM1QiwyQ0FBNkI7QUFDN0IsNERBQW1DO0FBR25DLHVDQUFvRDtBQUVwRCw2Q0FBc0U7QUFDdEUsaURBQTJEO0FBQzNELHVDQUE0RjtBQUU1RixTQUFnQixVQUFVLENBQUMsSUFBWTtJQUNyQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7UUFDYixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsOEJBQThCO0lBQzlCLE1BQU0sY0FBYyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzFFLENBQUM7QUFaRCxnQ0FZQztBQWFELFNBQVMsZ0JBQWdCLENBQUMsWUFBOEI7SUFDdEQs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LElBQUksQ0FBQyxFQUFFO1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ3hEO0lBRUQsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDdkQ7QUFDSCxDQUFDO0FBbkJELGdEQW1CQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBXZWJwYWNrTG9nZ2luZ0NhbGxiYWNrIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2J1aWxkLXdlYnBhY2snO1xuaW1wb3J0IHsgbG9nZ2luZywgdGFncyB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdGV4dFRhYmxlIGZyb20gJ3RleHQtdGFibGUnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiwgU3RhdHNDb21waWxhdGlvbiB9IGZyb20gJ3dlYnBhY2snO1xuaW1wb3J0IHsgU2NoZW1hIGFzIEJyb3dzZXJCdWlsZGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2J1aWxkZXJzL2Jyb3dzZXIvc2NoZW1hJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGltaXphdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEJ1ZGdldENhbGN1bGF0b3JSZXN1bHQgfSBmcm9tICcuLi8uLi91dGlscy9idW5kbGUtY2FsY3VsYXRvcic7XG5pbXBvcnQgeyBjb2xvcnMgYXMgYW5zaUNvbG9ycywgcmVtb3ZlQ29sb3IgfSBmcm9tICcuLi8uLi91dGlscy9jb2xvcic7XG5pbXBvcnQgeyBtYXJrQXN5bmNDaHVua3NOb25Jbml0aWFsIH0gZnJvbSAnLi9hc3luYy1jaHVua3MnO1xuaW1wb3J0IHsgV2VicGFja1N0YXRzT3B0aW9ucywgZ2V0U3RhdHNPcHRpb25zLCBub3JtYWxpemVFeHRyYUVudHJ5UG9pbnRzIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFNpemUoc2l6ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiAnMCBieXRlcyc7XG4gIH1cblxuICBjb25zdCBhYmJyZXZpYXRpb25zID0gWydieXRlcycsICdrQicsICdNQicsICdHQiddO1xuICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZygxMDI0KSk7XG4gIGNvbnN0IHJvdW5kZWRTaXplID0gc2l6ZSAvIE1hdGgucG93KDEwMjQsIGluZGV4KTtcbiAgLy8gYnl0ZXMgZG9uJ3QgaGF2ZSBhIGZyYWN0aW9uXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzID0gaW5kZXggPT09IDAgPyAwIDogMjtcblxuICByZXR1cm4gYCR7cm91bmRlZFNpemUudG9GaXhlZChmcmFjdGlvbkRpZ2l0cyl9ICR7YWJicmV2aWF0aW9uc1tpbmRleF19YDtcbn1cblxuZXhwb3J0IHR5cGUgQnVuZGxlU3RhdHNEYXRhID0gW1xuICBmaWxlczogc3RyaW5nLFxuICBuYW1lczogc3RyaW5nLFxuICByYXdTaXplOiBudW1iZXIgfCBzdHJpbmcsXG4gIGVzdGltYXRlZFRyYW5zZmVyU2l6ZTogbnVtYmVyIHwgc3RyaW5nLFxuXTtcbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlU3RhdHMge1xuICBpbml0aWFsOiBib29sZWFuO1xuICBzdGF0czogQnVuZGxlU3RhdHNEYXRhO1xufVxuXG5mdW5jdGlvbiBnZXRCdWlsZER1cmF0aW9uKHdlYnBhY2tTdGF0czogU3RhdHNDb21waWxhdGlvbik6IG51bWJlciB7XG4gIGFzc2VydCh3ZWJwYWNrU3RhdHMuYnVpbHRBdCwgJ2J1aWxkQXQgY2Fubm90IGJlIHVuZGVmaW5lZCcpO1xuICBhc3NlcnQod2VicGFja1N0YXRzLnRpbWUsICd0aW1lIGNhbm5vdCBiZSB1bmRlZmluZWQnKTtcblxuICByZXR1cm4gRGF0ZS5ub3coKSAtIHdlYnBhY2tTdGF0cy5idWlsdEF0ICsgd2VicGFja1N0YXRzLnRpbWU7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQnVuZGxlU3RhdHMoaW5mbzoge1xuICByYXdTaXplPzogbnVtYmVyO1xuICBlc3RpbWF0ZWRUcmFuc2ZlclNpemU/OiBudW1iZXI7XG4gIGZpbGVzPzogc3RyaW5nW107XG4gIG5hbWVzPzogc3RyaW5nW107XG4gIGluaXRpYWw/OiBib29sZWFuO1xuICByZW5kZXJlZD86IGJvb2xlYW47XG59KTogQnVuZGxlU3RhdHMge1xuICBjb25zdCByYXdTaXplID0gdHlwZW9mIGluZm8ucmF3U2l6ZSA9PT0gJ251bWJlcicgPyBpbmZvLnJhd1NpemUgOiAnLSc7XG4gIGNvbnN0IGVzdGltYXRlZFRyYW5zZmVyU2l6ZSA9XG4gICAgdHlwZW9mIGluZm8uZXN0aW1hdGVkVHJhbnNmZXJTaXplID09PSAnbnVtYmVyJyA/IGluZm8uZXN0aW1hdGVkVHJhbnNmZXJTaXplIDogJy0nO1xuICBjb25zdCBmaWxlcyA9XG4gICAgaW5mby5maWxlc1xuICAgICAgPy5maWx0ZXIoKGYpID0+ICFmLmVuZHNXaXRoKCcubWFwJykpXG4gICAgICAubWFwKChmKSA9PiBwYXRoLmJhc2VuYW1lKGYpKVxuICAgICAgLmpvaW4oJywgJykgPz8gJyc7XG4gIGNvbnN0IG5hbWVzID0gaW5mby5uYW1lcz8ubGVuZ3RoID8gaW5mby5uYW1lcy5qb2luKCcsICcpIDogJy0nO1xuICBjb25zdCBpbml0aWFsID0gISFpbmZvLmluaXRpYWw7XG5cbiAgcmV0dXJuIHtcbiAgICBpbml0aWFsLFxuICAgIHN0YXRzOiBbZmlsZXMsIG5hbWVzLCByYXdTaXplLCBlc3RpbWF0ZWRUcmFuc2ZlclNpemVdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVCdWlsZFN0YXRzVGFibGUoXG4gIGRhdGE6IEJ1bmRsZVN0YXRzW10sXG4gIGNvbG9yczogYm9vbGVhbixcbiAgc2hvd1RvdGFsU2l6ZTogYm9vbGVhbixcbiAgc2hvd0VzdGltYXRlZFRyYW5zZmVyU2l6ZTogYm9vbGVhbixcbiAgYnVkZ2V0RmFpbHVyZXM/OiBCdWRnZXRDYWxjdWxhdG9yUmVzdWx0W10sXG4pOiBzdHJpbmcge1xuICBjb25zdCBnID0gKHg6IHN0cmluZykgPT4gKGNvbG9ycyA/IGFuc2lDb2xvcnMuZ3JlZW5CcmlnaHQoeCkgOiB4KTtcbiAgY29uc3QgYyA9ICh4OiBzdHJpbmcpID0+IChjb2xvcnMgPyBhbnNpQ29sb3JzLmN5YW5CcmlnaHQoeCkgOiB4KTtcbiAgY29uc3QgciA9ICh4OiBzdHJpbmcpID0+IChjb2xvcnMgPyBhbnNpQ29sb3JzLnJlZEJyaWdodCh4KSA6IHgpO1xuICBjb25zdCB5ID0gKHg6IHN0cmluZykgPT4gKGNvbG9ycyA/IGFuc2lDb2xvcnMueWVsbG93QnJpZ2h0KHgpIDogeCk7XG4gIGNvbnN0IGJvbGQgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5ib2xkKHgpIDogeCk7XG4gIGNvbnN0IGRpbSA9ICh4OiBzdHJpbmcpID0+IChjb2xvcnMgPyBhbnNpQ29sb3JzLmRpbSh4KSA6IHgpO1xuXG4gIGNvbnN0IGdldFNpemVDb2xvciA9IChuYW1lOiBzdHJpbmcsIGZpbGU/OiBzdHJpbmcsIGRlZmF1bHRDb2xvciA9IGMpID0+IHtcbiAgICBjb25zdCBzZXZlcml0eSA9IGJ1ZGdldHMuZ2V0KG5hbWUpIHx8IChmaWxlICYmIGJ1ZGdldHMuZ2V0KGZpbGUpKTtcbiAgICBzd2l0Y2ggKHNldmVyaXR5KSB7XG4gICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgcmV0dXJuIHk7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiByO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDb2xvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hhbmdlZEVudHJ5Q2h1bmtzU3RhdHM6IEJ1bmRsZVN0YXRzRGF0YVtdID0gW107XG4gIGNvbnN0IGNoYW5nZWRMYXp5Q2h1bmtzU3RhdHM6IEJ1bmRsZVN0YXRzRGF0YVtdID0gW107XG5cbiAgbGV0IGluaXRpYWxUb3RhbFJhd1NpemUgPSAwO1xuICBsZXQgaW5pdGlhbFRvdGFsRXN0aW1hdGVkVHJhbnNmZXJTaXplO1xuXG4gIGNvbnN0IGJ1ZGdldHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBpZiAoYnVkZ2V0RmFpbHVyZXMpIHtcbiAgICBmb3IgKGNvbnN0IHsgbGFiZWwsIHNldmVyaXR5IH0gb2YgYnVkZ2V0RmFpbHVyZXMpIHtcbiAgICAgIC8vIEluIHNvbWUgY2FzZXMgYSBmaWxlIGNhbiBoYXZlIG11bHRpcGxlIGJ1ZGdldCBmYWlsdXJlcy5cbiAgICAgIC8vIEZhdm9yIGVycm9yLlxuICAgICAgaWYgKGxhYmVsICYmICghYnVkZ2V0cy5oYXMobGFiZWwpIHx8IGJ1ZGdldHMuZ2V0KGxhYmVsKSA9PT0gJ3dhcm5pbmcnKSkge1xuICAgICAgICBidWRnZXRzLnNldChsYWJlbCwgc2V2ZXJpdHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgeyBpbml0aWFsLCBzdGF0cyB9IG9mIGRhdGEpIHtcbiAgICBjb25zdCBbZmlsZXMsIG5hbWVzLCByYXdTaXplLCBlc3RpbWF0ZWRUcmFuc2ZlclNpemVdID0gc3RhdHM7XG4gICAgY29uc3QgZ2V0UmF3U2l6ZUNvbG9yID0gZ2V0U2l6ZUNvbG9yKG5hbWVzLCBmaWxlcyk7XG4gICAgbGV0IGRhdGE6IEJ1bmRsZVN0YXRzRGF0YTtcblxuICAgIGlmIChzaG93RXN0aW1hdGVkVHJhbnNmZXJTaXplKSB7XG4gICAgICBkYXRhID0gW1xuICAgICAgICBnKGZpbGVzKSxcbiAgICAgICAgbmFtZXMsXG4gICAgICAgIGdldFJhd1NpemVDb2xvcih0eXBlb2YgcmF3U2l6ZSA9PT0gJ251bWJlcicgPyBmb3JtYXRTaXplKHJhd1NpemUpIDogcmF3U2l6ZSksXG4gICAgICAgIGMoXG4gICAgICAgICAgdHlwZW9mIGVzdGltYXRlZFRyYW5zZmVyU2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gZm9ybWF0U2l6ZShlc3RpbWF0ZWRUcmFuc2ZlclNpemUpXG4gICAgICAgICAgICA6IGVzdGltYXRlZFRyYW5zZmVyU2l6ZSxcbiAgICAgICAgKSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBbXG4gICAgICAgIGcoZmlsZXMpLFxuICAgICAgICBuYW1lcyxcbiAgICAgICAgZ2V0UmF3U2l6ZUNvbG9yKHR5cGVvZiByYXdTaXplID09PSAnbnVtYmVyJyA/IGZvcm1hdFNpemUocmF3U2l6ZSkgOiByYXdTaXplKSxcbiAgICAgICAgJycsXG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmIChpbml0aWFsKSB7XG4gICAgICBjaGFuZ2VkRW50cnlDaHVua3NTdGF0cy5wdXNoKGRhdGEpO1xuICAgICAgaWYgKHR5cGVvZiByYXdTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbml0aWFsVG90YWxSYXdTaXplICs9IHJhd1NpemU7XG4gICAgICB9XG4gICAgICBpZiAoc2hvd0VzdGltYXRlZFRyYW5zZmVyU2l6ZSAmJiB0eXBlb2YgZXN0aW1hdGVkVHJhbnNmZXJTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoaW5pdGlhbFRvdGFsRXN0aW1hdGVkVHJhbnNmZXJTaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbml0aWFsVG90YWxFc3RpbWF0ZWRUcmFuc2ZlclNpemUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGluaXRpYWxUb3RhbEVzdGltYXRlZFRyYW5zZmVyU2l6ZSArPSBlc3RpbWF0ZWRUcmFuc2ZlclNpemU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZWRMYXp5Q2h1bmtzU3RhdHMucHVzaChkYXRhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBidW5kbGVJbmZvOiAoc3RyaW5nIHwgbnVtYmVyKVtdW10gPSBbXTtcbiAgY29uc3QgYmFzZVRpdGxlcyA9IFsnTmFtZXMnLCAnUmF3IFNpemUnXTtcbiAgY29uc3QgdGFibGVBbGlnbjogKCdsJyB8ICdyJylbXSA9IFsnbCcsICdsJywgJ3InXTtcblxuICBpZiAoc2hvd0VzdGltYXRlZFRyYW5zZmVyU2l6ZSkge1xuICAgIGJhc2VUaXRsZXMucHVzaCgnRXN0aW1hdGVkIFRyYW5zZmVyIFNpemUnKTtcbiAgICB0YWJsZUFsaWduLnB1c2goJ3InKTtcbiAgfVxuXG4gIC8vIEVudHJ5IGNodW5rc1xuICBpZiAoY2hhbmdlZEVudHJ5Q2h1bmtzU3RhdHMubGVuZ3RoKSB7XG4gICAgYnVuZGxlSW5mby5wdXNoKFsnSW5pdGlhbCBDaHVuayBGaWxlcycsIC4uLmJhc2VUaXRsZXNdLm1hcChib2xkKSwgLi4uY2hhbmdlZEVudHJ5Q2h1bmtzU3RhdHMpO1xuXG4gICAgaWYgKHNob3dUb3RhbFNpemUpIHtcbiAgICAgIGJ1bmRsZUluZm8ucHVzaChbXSk7XG5cbiAgICAgIGNvbnN0IGluaXRpYWxTaXplVG90YWxDb2xvciA9IGdldFNpemVDb2xvcignYnVuZGxlIGluaXRpYWwnLCB1bmRlZmluZWQsICh4KSA9PiB4KTtcbiAgICAgIGNvbnN0IHRvdGFsU2l6ZUVsZW1lbnRzID0gW1xuICAgICAgICAnICcsXG4gICAgICAgICdJbml0aWFsIFRvdGFsJyxcbiAgICAgICAgaW5pdGlhbFNpemVUb3RhbENvbG9yKGZvcm1hdFNpemUoaW5pdGlhbFRvdGFsUmF3U2l6ZSkpLFxuICAgICAgXTtcbiAgICAgIGlmIChzaG93RXN0aW1hdGVkVHJhbnNmZXJTaXplKSB7XG4gICAgICAgIHRvdGFsU2l6ZUVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgdHlwZW9mIGluaXRpYWxUb3RhbEVzdGltYXRlZFRyYW5zZmVyU2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gZm9ybWF0U2l6ZShpbml0aWFsVG90YWxFc3RpbWF0ZWRUcmFuc2ZlclNpemUpXG4gICAgICAgICAgICA6ICctJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJ1bmRsZUluZm8ucHVzaCh0b3RhbFNpemVFbGVtZW50cy5tYXAoYm9sZCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlcGVyYXRvclxuICBpZiAoY2hhbmdlZEVudHJ5Q2h1bmtzU3RhdHMubGVuZ3RoICYmIGNoYW5nZWRMYXp5Q2h1bmtzU3RhdHMubGVuZ3RoKSB7XG4gICAgYnVuZGxlSW5mby5wdXNoKFtdKTtcbiAgfVxuXG4gIC8vIExhenkgY2h1bmtzXG4gIGlmIChjaGFuZ2VkTGF6eUNodW5rc1N0YXRzLmxlbmd0aCkge1xuICAgIGJ1bmRsZUluZm8ucHVzaChbJ0xhenkgQ2h1bmsgRmlsZXMnLCAuLi5iYXNlVGl0bGVzXS5tYXAoYm9sZCksIC4uLmNoYW5nZWRMYXp5Q2h1bmtzU3RhdHMpO1xuICB9XG5cbiAgcmV0dXJuIHRleHRUYWJsZShidW5kbGVJbmZvLCB7XG4gICAgaHNlcDogZGltKCcgfCAnKSxcbiAgICBzdHJpbmdMZW5ndGg6IChzKSA9PiByZW1vdmVDb2xvcihzKS5sZW5ndGgsXG4gICAgYWxpZ246IHRhYmxlQWxpZ24sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJ1aWxkU3RhdHMoaGFzaDogc3RyaW5nLCB0aW1lOiBudW1iZXIsIGNvbG9yczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHcgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5ib2xkLndoaXRlKHgpIDogeCk7XG5cbiAgcmV0dXJuIGBCdWlsZCBhdDogJHt3KG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSl9IC0gSGFzaDogJHt3KGhhc2gpfSAtIFRpbWU6ICR7dygnJyArIHRpbWUpfW1zYDtcbn1cblxuLy8gV2UgdXNlIHRoaXMgY2FjaGUgYmVjYXVzZSB3ZSBjYW4gaGF2ZSBtdWx0aXBsZSBidWlsZGVycyBydW5uaW5nIGluIHRoZSBzYW1lIHByb2Nlc3MsXG4vLyB3aGVyZSBlYWNoIGJ1aWxkZXIgaGFzIGRpZmZlcmVudCBvdXRwdXQgcGF0aC5cblxuLy8gSWRlYWxseSwgd2Ugc2hvdWxkIGNyZWF0ZSB0aGUgbG9nZ2luZyBjYWxsYmFjayBhcyBhIGZhY3RvcnksIGJ1dCB0aGF0IHdvdWxkIG5lZWQgYSByZWZhY3RvcmluZy5cbmNvbnN0IHJ1bnNDYWNoZSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5mdW5jdGlvbiBzdGF0c1RvU3RyaW5nKFxuICBqc29uOiBTdGF0c0NvbXBpbGF0aW9uLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdGF0c0NvbmZpZzogYW55LFxuICBidWRnZXRGYWlsdXJlcz86IEJ1ZGdldENhbGN1bGF0b3JSZXN1bHRbXSxcbik6IHN0cmluZyB7XG4gIGlmICghanNvbi5jaHVua3M/Lmxlbmd0aCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNvbG9ycyA9IHN0YXRzQ29uZmlnLmNvbG9ycztcbiAgY29uc3QgcnMgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5yZXNldCh4KSA6IHgpO1xuXG4gIGNvbnN0IGNoYW5nZWRDaHVua3NTdGF0czogQnVuZGxlU3RhdHNbXSA9IFtdO1xuICBsZXQgdW5jaGFuZ2VkQ2h1bmtOdW1iZXIgPSAwO1xuICBsZXQgaGFzRXN0aW1hdGVkVHJhbnNmZXJTaXplcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGlzRmlyc3RSdW4gPSAhcnVuc0NhY2hlLmhhcyhqc29uLm91dHB1dFBhdGggfHwgJycpO1xuXG4gIGZvciAoY29uc3QgY2h1bmsgb2YganNvbi5jaHVua3MpIHtcbiAgICAvLyBEdXJpbmcgZmlyc3QgYnVpbGQgd2Ugd2FudCB0byBkaXNwbGF5IHVuY2hhbmdlZCBjaHVua3NcbiAgICAvLyBidXQgdW5jaGFuZ2VkIGNhY2hlZCBjaHVua3MgYXJlIGFsd2F5cyBtYXJrZWQgYXMgbm90IHJlbmRlcmVkLlxuICAgIGlmICghaXNGaXJzdFJ1biAmJiAhY2h1bmsucmVuZGVyZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2V0cyA9IGpzb24uYXNzZXRzPy5maWx0ZXIoKGFzc2V0KSA9PiBjaHVuay5maWxlcz8uaW5jbHVkZXMoYXNzZXQubmFtZSkpO1xuICAgIGxldCByYXdTaXplID0gMDtcbiAgICBsZXQgZXN0aW1hdGVkVHJhbnNmZXJTaXplO1xuICAgIGlmIChhc3NldHMpIHtcbiAgICAgIGZvciAoY29uc3QgYXNzZXQgb2YgYXNzZXRzKSB7XG4gICAgICAgIGlmIChhc3NldC5uYW1lLmVuZHNXaXRoKCcubWFwJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhd1NpemUgKz0gYXNzZXQuc2l6ZTtcblxuICAgICAgICBpZiAodHlwZW9mIGFzc2V0LmluZm8uZXN0aW1hdGVkVHJhbnNmZXJTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGlmIChlc3RpbWF0ZWRUcmFuc2ZlclNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXN0aW1hdGVkVHJhbnNmZXJTaXplID0gMDtcbiAgICAgICAgICAgIGhhc0VzdGltYXRlZFRyYW5zZmVyU2l6ZXMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlc3RpbWF0ZWRUcmFuc2ZlclNpemUgKz0gYXNzZXQuaW5mby5lc3RpbWF0ZWRUcmFuc2ZlclNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2hhbmdlZENodW5rc1N0YXRzLnB1c2goZ2VuZXJhdGVCdW5kbGVTdGF0cyh7IC4uLmNodW5rLCByYXdTaXplLCBlc3RpbWF0ZWRUcmFuc2ZlclNpemUgfSkpO1xuICB9XG4gIHVuY2hhbmdlZENodW5rTnVtYmVyID0ganNvbi5jaHVua3MubGVuZ3RoIC0gY2hhbmdlZENodW5rc1N0YXRzLmxlbmd0aDtcblxuICBydW5zQ2FjaGUuYWRkKGpzb24ub3V0cHV0UGF0aCB8fCAnJyk7XG5cbiAgLy8gU29ydCBjaHVua3MgYnkgc2l6ZSBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gIGNoYW5nZWRDaHVua3NTdGF0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGEuc3RhdHNbMl0gPiBiLnN0YXRzWzJdKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgaWYgKGEuc3RhdHNbMl0gPCBiLnN0YXRzWzJdKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgY29uc3Qgc3RhdHNUYWJsZSA9IGdlbmVyYXRlQnVpbGRTdGF0c1RhYmxlKFxuICAgIGNoYW5nZWRDaHVua3NTdGF0cyxcbiAgICBjb2xvcnMsXG4gICAgdW5jaGFuZ2VkQ2h1bmtOdW1iZXIgPT09IDAsXG4gICAgaGFzRXN0aW1hdGVkVHJhbnNmZXJTaXplcyxcbiAgICBidWRnZXRGYWlsdXJlcyxcbiAgKTtcblxuICAvLyBJbiBzb21lIGNhc2VzIHdlIGRvIHRoaW5ncyBvdXRzaWRlIG9mIHdlYnBhY2sgY29udGV4dFxuICAvLyBTdWNoIHVzIGluZGV4IGdlbmVyYXRpb24sIHNlcnZpY2Ugd29ya2VyIGF1Z21lbnRhdGlvbiBldGMuLi5cbiAgLy8gVGhpcyB3aWxsIGNvcnJlY3QgdGhlIHRpbWUgYW5kIGluY2x1ZGUgdGhlc2UuXG5cbiAgY29uc3QgdGltZSA9IGdldEJ1aWxkRHVyYXRpb24oanNvbik7XG5cbiAgaWYgKHVuY2hhbmdlZENodW5rTnVtYmVyID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICAnXFxuJyArXG4gICAgICBycyh0YWdzLnN0cmlwSW5kZW50c2BcbiAgICAgICR7c3RhdHNUYWJsZX1cblxuICAgICAgJHt1bmNoYW5nZWRDaHVua051bWJlcn0gdW5jaGFuZ2VkIGNodW5rc1xuXG4gICAgICAke2dlbmVyYXRlQnVpbGRTdGF0cyhqc29uLmhhc2ggfHwgJycsIHRpbWUsIGNvbG9ycyl9XG4gICAgICBgKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgICdcXG4nICtcbiAgICAgIHJzKHRhZ3Muc3RyaXBJbmRlbnRzYFxuICAgICAgJHtzdGF0c1RhYmxlfVxuXG4gICAgICAke2dlbmVyYXRlQnVpbGRTdGF0cyhqc29uLmhhc2ggfHwgJycsIHRpbWUsIGNvbG9ycyl9XG4gICAgICBgKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRzV2FybmluZ3NUb1N0cmluZyhcbiAganNvbjogU3RhdHNDb21waWxhdGlvbixcbiAgc3RhdHNDb25maWc6IFdlYnBhY2tTdGF0c09wdGlvbnMsXG4pOiBzdHJpbmcge1xuICBjb25zdCBjb2xvcnMgPSBzdGF0c0NvbmZpZy5jb2xvcnM7XG4gIGNvbnN0IGMgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5yZXNldC5jeWFuKHgpIDogeCk7XG4gIGNvbnN0IHkgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5yZXNldC55ZWxsb3coeCkgOiB4KTtcbiAgY29uc3QgeWIgPSAoeDogc3RyaW5nKSA9PiAoY29sb3JzID8gYW5zaUNvbG9ycy5yZXNldC55ZWxsb3dCcmlnaHQoeCkgOiB4KTtcblxuICBjb25zdCB3YXJuaW5ncyA9IGpzb24ud2FybmluZ3MgPyBbLi4uanNvbi53YXJuaW5nc10gOiBbXTtcbiAgaWYgKGpzb24uY2hpbGRyZW4pIHtcbiAgICB3YXJuaW5ncy5wdXNoKC4uLmpzb24uY2hpbGRyZW4ubWFwKChjKSA9PiBjLndhcm5pbmdzID8/IFtdKS5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pKTtcbiAgfVxuXG4gIGxldCBvdXRwdXQgPSAnJztcbiAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgaWYgKHR5cGVvZiB3YXJuaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgb3V0cHV0ICs9IHliKGBXYXJuaW5nOiAke3dhcm5pbmd9XFxuXFxuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaWxlID0gd2FybmluZy5maWxlIHx8IHdhcm5pbmcubW9kdWxlTmFtZTtcbiAgICAgIC8vIENsZWFuIHVwIHdhcm5pbmcgcGF0aHNcbiAgICAgIC8vIEV4OiAuL3NyYy9hcHAvc3R5bGVzLnNjc3Mud2VicGFja1tqYXZhc2NyaXB0L2F1dG9dIT0hLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcy4uLi5cbiAgICAgIC8vIHRvIC4vc3JjL2FwcC9zdHlsZXMuc2Nzcy53ZWJwYWNrXG4gICAgICBpZiAoZmlsZSAmJiAhc3RhdHNDb25maWcuZXJyb3JEZXRhaWxzKSB7XG4gICAgICAgIGNvbnN0IHdlYnBhY2tQYXRoSW5kZXggPSBmaWxlLmluZGV4T2YoJy53ZWJwYWNrWycpO1xuICAgICAgICBpZiAod2VicGFja1BhdGhJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBmaWxlID0gZmlsZS5zdWJzdHJpbmcoMCwgd2VicGFja1BhdGhJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgb3V0cHV0ICs9IGMoZmlsZSk7XG4gICAgICAgIGlmICh3YXJuaW5nLmxvYykge1xuICAgICAgICAgIG91dHB1dCArPSAnOicgKyB5Yih3YXJuaW5nLmxvYyk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0ICs9ICcgLSAnO1xuICAgICAgfVxuICAgICAgaWYgKCEvXndhcm5pbmcvaS50ZXN0KHdhcm5pbmcubWVzc2FnZSkpIHtcbiAgICAgICAgb3V0cHV0ICs9IHkoJ1dhcm5pbmc6ICcpO1xuICAgICAgfVxuICAgICAgb3V0cHV0ICs9IGAke3dhcm5pbmcubWVzc2FnZX1cXG5cXG5gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQgPyAnXFxuJyArIG91dHB1dCA6IG91dHB1dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRzRXJyb3JzVG9TdHJpbmcoXG4gIGpzb246IFN0YXRzQ29tcGlsYXRpb24sXG4gIHN0YXRzQ29uZmlnOiBXZWJwYWNrU3RhdHNPcHRpb25zLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgY29sb3JzID0gc3RhdHNDb25maWcuY29sb3JzO1xuICBjb25zdCBjID0gKHg6IHN0cmluZykgPT4gKGNvbG9ycyA/IGFuc2lDb2xvcnMucmVzZXQuY3lhbih4KSA6IHgpO1xuICBjb25zdCB5YiA9ICh4OiBzdHJpbmcpID0+IChjb2xvcnMgPyBhbnNpQ29sb3JzLnJlc2V0LnllbGxvd0JyaWdodCh4KSA6IHgpO1xuICBjb25zdCByID0gKHg6IHN0cmluZykgPT4gKGNvbG9ycyA/IGFuc2lDb2xvcnMucmVzZXQucmVkQnJpZ2h0KHgpIDogeCk7XG5cbiAgY29uc3QgZXJyb3JzID0ganNvbi5lcnJvcnMgPyBbLi4uanNvbi5lcnJvcnNdIDogW107XG4gIGlmIChqc29uLmNoaWxkcmVuKSB7XG4gICAgZXJyb3JzLnB1c2goLi4uanNvbi5jaGlsZHJlbi5tYXAoKGMpID0+IGM/LmVycm9ycyB8fCBbXSkucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKSk7XG4gIH1cblxuICBsZXQgb3V0cHV0ID0gJyc7XG4gIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG91dHB1dCArPSByKGBFcnJvcjogJHtlcnJvcn1cXG5cXG5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZpbGUgPSBlcnJvci5maWxlIHx8IGVycm9yLm1vZHVsZU5hbWU7XG4gICAgICAvLyBDbGVhbiB1cCBlcnJvciBwYXRoc1xuICAgICAgLy8gRXg6IC4vc3JjL2FwcC9zdHlsZXMuc2Nzcy53ZWJwYWNrW2phdmFzY3JpcHQvYXV0b10hPSEuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzLi4uLlxuICAgICAgLy8gdG8gLi9zcmMvYXBwL3N0eWxlcy5zY3NzLndlYnBhY2tcbiAgICAgIGlmIChmaWxlICYmICFzdGF0c0NvbmZpZy5lcnJvckRldGFpbHMpIHtcbiAgICAgICAgY29uc3Qgd2VicGFja1BhdGhJbmRleCA9IGZpbGUuaW5kZXhPZignLndlYnBhY2tbJyk7XG4gICAgICAgIGlmICh3ZWJwYWNrUGF0aEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGZpbGUgPSBmaWxlLnN1YnN0cmluZygwLCB3ZWJwYWNrUGF0aEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBvdXRwdXQgKz0gYyhmaWxlKTtcbiAgICAgICAgaWYgKGVycm9yLmxvYykge1xuICAgICAgICAgIG91dHB1dCArPSAnOicgKyB5YihlcnJvci5sb2MpO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dCArPSAnIC0gJztcbiAgICAgIH1cblxuICAgICAgLy8gSW4gbW9zdCBjYXNlcyB3ZWJwYWNrIHdpbGwgYWRkIHN0YWNrIHRyYWNlcyB0byBlcnJvciBtZXNzYWdlcy5cbiAgICAgIC8vIFRoaXMgYmVsb3cgY2xlYW5zIHVwIHRoZSBlcnJvciBmcm9tIHN0YWNrcy5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9pc3N1ZXMvMTU5ODBcbiAgICAgIGNvbnN0IGluZGV4ID0gZXJyb3IubWVzc2FnZS5zZWFyY2goL1tcXG5cXHNdK2F0IC8pO1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHN0YXRzQ29uZmlnLmVycm9yU3RhY2sgfHwgaW5kZXggPT09IC0xID8gZXJyb3IubWVzc2FnZSA6IGVycm9yLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluZGV4KTtcblxuICAgICAgaWYgKCEvXmVycm9yL2kudGVzdChtZXNzYWdlKSkge1xuICAgICAgICBvdXRwdXQgKz0gcignRXJyb3I6ICcpO1xuICAgICAgfVxuICAgICAgb3V0cHV0ICs9IGAke21lc3NhZ2V9XFxuXFxuYDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0ID8gJ1xcbicgKyBvdXRwdXQgOiBvdXRwdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0c0hhc0Vycm9ycyhqc29uOiBTdGF0c0NvbXBpbGF0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShqc29uLmVycm9ycz8ubGVuZ3RoIHx8IGpzb24uY2hpbGRyZW4/LnNvbWUoKGMpID0+IGMuZXJyb3JzPy5sZW5ndGgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRzSGFzV2FybmluZ3MoanNvbjogU3RhdHNDb21waWxhdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoanNvbi53YXJuaW5ncz8ubGVuZ3RoIHx8IGpzb24uY2hpbGRyZW4/LnNvbWUoKGMpID0+IGMud2FybmluZ3M/Lmxlbmd0aCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2VicGFja0xvZ2dpbmdDYWxsYmFjayhcbiAgb3B0aW9uczogQnJvd3NlckJ1aWxkZXJPcHRpb25zLFxuICBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpLFxuKTogV2VicGFja0xvZ2dpbmdDYWxsYmFjayB7XG4gIGNvbnN0IHsgdmVyYm9zZSA9IGZhbHNlLCBzY3JpcHRzID0gW10sIHN0eWxlcyA9IFtdIH0gPSBvcHRpb25zO1xuICBjb25zdCBleHRyYUVudHJ5UG9pbnRzID0gW1xuICAgIC4uLm5vcm1hbGl6ZUV4dHJhRW50cnlQb2ludHMoc3R5bGVzLCAnc3R5bGVzJyksXG4gICAgLi4ubm9ybWFsaXplRXh0cmFFbnRyeVBvaW50cyhzY3JpcHRzLCAnc2NyaXB0cycpLFxuICBdO1xuXG4gIHJldHVybiAoc3RhdHMsIGNvbmZpZykgPT4ge1xuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhzdGF0cy50b1N0cmluZyhjb25maWcuc3RhdHMpKTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTdGF0cyA9IHN0YXRzLnRvSnNvbihnZXRTdGF0c09wdGlvbnMoZmFsc2UpKTtcbiAgICBjb25zdCB3ZWJwYWNrU3RhdHMgPSB7XG4gICAgICAuLi5yYXdTdGF0cyxcbiAgICAgIGNodW5rczogbWFya0FzeW5jQ2h1bmtzTm9uSW5pdGlhbChyYXdTdGF0cywgZXh0cmFFbnRyeVBvaW50cyksXG4gICAgfTtcblxuICAgIHdlYnBhY2tTdGF0c0xvZ2dlcihsb2dnZXIsIHdlYnBhY2tTdGF0cywgY29uZmlnKTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZEV2ZW50U3RhdHMge1xuICBhb3Q6IGJvb2xlYW47XG4gIG9wdGltaXphdGlvbjogYm9vbGVhbjtcbiAgYWxsQ2h1bmtzQ291bnQ6IG51bWJlcjtcbiAgbGF6eUNodW5rc0NvdW50OiBudW1iZXI7XG4gIGluaXRpYWxDaHVua3NDb3VudDogbnVtYmVyO1xuICBjaGFuZ2VkQ2h1bmtzQ291bnQ/OiBudW1iZXI7XG4gIGR1cmF0aW9uSW5NczogbnVtYmVyO1xuICBjc3NTaXplSW5CeXRlczogbnVtYmVyO1xuICBqc1NpemVJbkJ5dGVzOiBudW1iZXI7XG4gIG5nQ29tcG9uZW50Q291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQnVpbGRFdmVudFN0YXRzKFxuICB3ZWJwYWNrU3RhdHM6IFN0YXRzQ29tcGlsYXRpb24sXG4gIGJyb3dzZXJCdWlsZGVyT3B0aW9uczogQnJvd3NlckJ1aWxkZXJPcHRpb25zLFxuKTogQnVpbGRFdmVudFN0YXRzIHtcbiAgY29uc3QgeyBjaHVua3MgPSBbXSwgYXNzZXRzID0gW10gfSA9IHdlYnBhY2tTdGF0cztcblxuICBsZXQganNTaXplSW5CeXRlcyA9IDA7XG4gIGxldCBjc3NTaXplSW5CeXRlcyA9IDA7XG4gIGxldCBpbml0aWFsQ2h1bmtzQ291bnQgPSAwO1xuICBsZXQgbmdDb21wb25lbnRDb3VudCA9IDA7XG4gIGxldCBjaGFuZ2VkQ2h1bmtzQ291bnQgPSAwO1xuXG4gIGNvbnN0IGFsbENodW5rc0NvdW50ID0gY2h1bmtzLmxlbmd0aDtcbiAgY29uc3QgaXNGaXJzdFJ1biA9ICFydW5zQ2FjaGUuaGFzKHdlYnBhY2tTdGF0cy5vdXRwdXRQYXRoIHx8ICcnKTtcblxuICBjb25zdCBjaHVua0ZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgaWYgKCFpc0ZpcnN0UnVuICYmIGNodW5rLnJlbmRlcmVkKSB7XG4gICAgICBjaGFuZ2VkQ2h1bmtzQ291bnQrKztcbiAgICB9XG5cbiAgICBpZiAoY2h1bmsuaW5pdGlhbCkge1xuICAgICAgaW5pdGlhbENodW5rc0NvdW50Kys7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGNodW5rLmZpbGVzID8/IFtdKSB7XG4gICAgICBjaHVua0ZpbGVzLmFkZChmaWxlKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGFzc2V0IG9mIGFzc2V0cykge1xuICAgIGlmIChhc3NldC5uYW1lLmVuZHNXaXRoKCcubWFwJykgfHwgIWNodW5rRmlsZXMuaGFzKGFzc2V0Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoYXNzZXQubmFtZS5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgIGpzU2l6ZUluQnl0ZXMgKz0gYXNzZXQuc2l6ZTtcbiAgICAgIG5nQ29tcG9uZW50Q291bnQgKz0gYXNzZXQuaW5mby5uZ0NvbXBvbmVudENvdW50ID8/IDA7XG4gICAgfSBlbHNlIGlmIChhc3NldC5uYW1lLmVuZHNXaXRoKCcuY3NzJykpIHtcbiAgICAgIGNzc1NpemVJbkJ5dGVzICs9IGFzc2V0LnNpemU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpbWl6YXRpb246ICEhbm9ybWFsaXplT3B0aW1pemF0aW9uKGJyb3dzZXJCdWlsZGVyT3B0aW9ucy5vcHRpbWl6YXRpb24pLnNjcmlwdHMsXG4gICAgYW90OiBicm93c2VyQnVpbGRlck9wdGlvbnMuYW90ICE9PSBmYWxzZSxcbiAgICBhbGxDaHVua3NDb3VudCxcbiAgICBsYXp5Q2h1bmtzQ291bnQ6IGFsbENodW5rc0NvdW50IC0gaW5pdGlhbENodW5rc0NvdW50LFxuICAgIGluaXRpYWxDaHVua3NDb3VudCxcbiAgICBjaGFuZ2VkQ2h1bmtzQ291bnQsXG4gICAgZHVyYXRpb25Jbk1zOiBnZXRCdWlsZER1cmF0aW9uKHdlYnBhY2tTdGF0cyksXG4gICAgY3NzU2l6ZUluQnl0ZXMsXG4gICAganNTaXplSW5CeXRlcyxcbiAgICBuZ0NvbXBvbmVudENvdW50LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2VicGFja1N0YXRzTG9nZ2VyKFxuICBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpLFxuICBqc29uOiBTdGF0c0NvbXBpbGF0aW9uLFxuICBjb25maWc6IENvbmZpZ3VyYXRpb24sXG4gIGJ1ZGdldEZhaWx1cmVzPzogQnVkZ2V0Q2FsY3VsYXRvclJlc3VsdFtdLFxuKTogdm9pZCB7XG4gIGxvZ2dlci5pbmZvKHN0YXRzVG9TdHJpbmcoanNvbiwgY29uZmlnLnN0YXRzLCBidWRnZXRGYWlsdXJlcykpO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnLnN0YXRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBXZWJwYWNrIHN0YXRzIGNvbmZpZ3VyYXRpb24uJyk7XG4gIH1cblxuICBpZiAoc3RhdHNIYXNXYXJuaW5ncyhqc29uKSkge1xuICAgIGxvZ2dlci53YXJuKHN0YXRzV2FybmluZ3NUb1N0cmluZyhqc29uLCBjb25maWcuc3RhdHMpKTtcbiAgfVxuXG4gIGlmIChzdGF0c0hhc0Vycm9ycyhqc29uKSkge1xuICAgIGxvZ2dlci5lcnJvcihzdGF0c0Vycm9yc1RvU3RyaW5nKGpzb24sIGNvbmZpZy5zdGF0cykpO1xuICB9XG59XG4iXX0=