@anansi/core 0.20.14 → 0.20.16
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/CHANGELOG.md +20 -0
- package/dist/2.chunk.js +1 -1
- package/dist/client.js +5 -12
- package/dist/server.js +16 -193
- package/lib/scripts/floodSpouts.js +2 -3
- package/lib/scripts/scripts/serve.js +10 -15
- package/lib/scripts/scripts/startDevserver.js +9 -15
- package/lib/scripts/serve.js +10 -15
- package/lib/scripts/spouts/DocumentComponent.js +2 -3
- package/lib/scripts/spouts/antd.server.js +3 -4
- package/lib/scripts/spouts/dataClient.js +2 -2
- package/lib/scripts/spouts/dataClient.server.js +2 -3
- package/lib/scripts/spouts/document.server.js +10 -18
- package/lib/scripts/spouts/json.js +2 -2
- package/lib/scripts/spouts/json.server.js +3 -4
- package/lib/scripts/startDevserver.js +9 -15
- package/lib/spouts/antd.server.js +2 -2
- package/package.json +9 -9
- package/src/spouts/antd.server.tsx +1 -1
package/dist/server.js
CHANGED
|
@@ -14,12 +14,6 @@ module.exports = require("@data-client/react");
|
|
|
14
14
|
|
|
15
15
|
module.exports = require("@data-client/react/ssr");
|
|
16
16
|
|
|
17
|
-
/***/ }),
|
|
18
|
-
/* 4 */
|
|
19
|
-
/***/ ((module) => {
|
|
20
|
-
|
|
21
|
-
module.exports = import("@ant-design/cssinjs");;
|
|
22
|
-
|
|
23
17
|
/***/ })
|
|
24
18
|
/******/ ]);
|
|
25
19
|
/************************************************************************/
|
|
@@ -197,109 +191,9 @@ function laySpouts(spouts, {
|
|
|
197
191
|
};
|
|
198
192
|
return render;
|
|
199
193
|
}
|
|
200
|
-
;// external "core-js/modules/es.error.cause.js"
|
|
201
|
-
const es_error_cause_js_namespaceObject = require("core-js/modules/es.error.cause.js");
|
|
202
|
-
;// external "core-js/modules/es.array.push.js"
|
|
203
|
-
const es_array_push_js_namespaceObject = require("core-js/modules/es.array.push.js");
|
|
204
|
-
;// external "core-js/modules/es.set.difference.v2.js"
|
|
205
|
-
const es_set_difference_v2_js_namespaceObject = require("core-js/modules/es.set.difference.v2.js");
|
|
206
|
-
;// external "core-js/modules/es.set.intersection.v2.js"
|
|
207
|
-
const es_set_intersection_v2_js_namespaceObject = require("core-js/modules/es.set.intersection.v2.js");
|
|
208
|
-
;// external "core-js/modules/es.set.is-disjoint-from.v2.js"
|
|
209
|
-
const es_set_is_disjoint_from_v2_js_namespaceObject = require("core-js/modules/es.set.is-disjoint-from.v2.js");
|
|
210
|
-
;// external "core-js/modules/es.set.is-subset-of.v2.js"
|
|
211
|
-
const es_set_is_subset_of_v2_js_namespaceObject = require("core-js/modules/es.set.is-subset-of.v2.js");
|
|
212
|
-
;// external "core-js/modules/es.set.is-superset-of.v2.js"
|
|
213
|
-
const es_set_is_superset_of_v2_js_namespaceObject = require("core-js/modules/es.set.is-superset-of.v2.js");
|
|
214
|
-
;// external "core-js/modules/es.set.symmetric-difference.v2.js"
|
|
215
|
-
const es_set_symmetric_difference_v2_js_namespaceObject = require("core-js/modules/es.set.symmetric-difference.v2.js");
|
|
216
|
-
;// external "core-js/modules/es.set.union.v2.js"
|
|
217
|
-
const es_set_union_v2_js_namespaceObject = require("core-js/modules/es.set.union.v2.js");
|
|
218
|
-
;// external "core-js/modules/esnext.async-iterator.filter.js"
|
|
219
|
-
const esnext_async_iterator_filter_js_namespaceObject = require("core-js/modules/esnext.async-iterator.filter.js");
|
|
220
|
-
;// external "core-js/modules/esnext.async-iterator.flat-map.js"
|
|
221
|
-
const esnext_async_iterator_flat_map_js_namespaceObject = require("core-js/modules/esnext.async-iterator.flat-map.js");
|
|
222
|
-
;// external "core-js/modules/esnext.async-iterator.for-each.js"
|
|
223
|
-
const esnext_async_iterator_for_each_js_namespaceObject = require("core-js/modules/esnext.async-iterator.for-each.js");
|
|
224
|
-
;// external "core-js/modules/esnext.async-iterator.map.js"
|
|
225
|
-
const esnext_async_iterator_map_js_namespaceObject = require("core-js/modules/esnext.async-iterator.map.js");
|
|
226
|
-
;// external "core-js/modules/esnext.async-iterator.some.js"
|
|
227
|
-
const esnext_async_iterator_some_js_namespaceObject = require("core-js/modules/esnext.async-iterator.some.js");
|
|
228
|
-
;// external "core-js/modules/esnext.iterator.constructor.js"
|
|
229
|
-
const esnext_iterator_constructor_js_namespaceObject = require("core-js/modules/esnext.iterator.constructor.js");
|
|
230
|
-
;// external "core-js/modules/esnext.iterator.filter.js"
|
|
231
|
-
const esnext_iterator_filter_js_namespaceObject = require("core-js/modules/esnext.iterator.filter.js");
|
|
232
|
-
;// external "core-js/modules/esnext.iterator.flat-map.js"
|
|
233
|
-
const esnext_iterator_flat_map_js_namespaceObject = require("core-js/modules/esnext.iterator.flat-map.js");
|
|
234
|
-
;// external "core-js/modules/esnext.iterator.for-each.js"
|
|
235
|
-
const esnext_iterator_for_each_js_namespaceObject = require("core-js/modules/esnext.iterator.for-each.js");
|
|
236
|
-
;// external "core-js/modules/esnext.iterator.map.js"
|
|
237
|
-
const esnext_iterator_map_js_namespaceObject = require("core-js/modules/esnext.iterator.map.js");
|
|
238
|
-
;// external "core-js/modules/esnext.iterator.some.js"
|
|
239
|
-
const esnext_iterator_some_js_namespaceObject = require("core-js/modules/esnext.iterator.some.js");
|
|
240
|
-
;// external "core-js/modules/esnext.set.add-all.js"
|
|
241
|
-
const esnext_set_add_all_js_namespaceObject = require("core-js/modules/esnext.set.add-all.js");
|
|
242
|
-
;// external "core-js/modules/esnext.set.delete-all.js"
|
|
243
|
-
const esnext_set_delete_all_js_namespaceObject = require("core-js/modules/esnext.set.delete-all.js");
|
|
244
|
-
;// external "core-js/modules/esnext.set.difference.js"
|
|
245
|
-
const esnext_set_difference_js_namespaceObject = require("core-js/modules/esnext.set.difference.js");
|
|
246
|
-
;// external "core-js/modules/esnext.set.every.js"
|
|
247
|
-
const esnext_set_every_js_namespaceObject = require("core-js/modules/esnext.set.every.js");
|
|
248
|
-
;// external "core-js/modules/esnext.set.filter.js"
|
|
249
|
-
const esnext_set_filter_js_namespaceObject = require("core-js/modules/esnext.set.filter.js");
|
|
250
|
-
;// external "core-js/modules/esnext.set.find.js"
|
|
251
|
-
const esnext_set_find_js_namespaceObject = require("core-js/modules/esnext.set.find.js");
|
|
252
|
-
;// external "core-js/modules/esnext.set.intersection.js"
|
|
253
|
-
const esnext_set_intersection_js_namespaceObject = require("core-js/modules/esnext.set.intersection.js");
|
|
254
|
-
;// external "core-js/modules/esnext.set.is-disjoint-from.js"
|
|
255
|
-
const esnext_set_is_disjoint_from_js_namespaceObject = require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
256
|
-
;// external "core-js/modules/esnext.set.is-subset-of.js"
|
|
257
|
-
const esnext_set_is_subset_of_js_namespaceObject = require("core-js/modules/esnext.set.is-subset-of.js");
|
|
258
|
-
;// external "core-js/modules/esnext.set.is-superset-of.js"
|
|
259
|
-
const esnext_set_is_superset_of_js_namespaceObject = require("core-js/modules/esnext.set.is-superset-of.js");
|
|
260
|
-
;// external "core-js/modules/esnext.set.join.js"
|
|
261
|
-
const esnext_set_join_js_namespaceObject = require("core-js/modules/esnext.set.join.js");
|
|
262
|
-
;// external "core-js/modules/esnext.set.map.js"
|
|
263
|
-
const esnext_set_map_js_namespaceObject = require("core-js/modules/esnext.set.map.js");
|
|
264
|
-
;// external "core-js/modules/esnext.set.reduce.js"
|
|
265
|
-
const esnext_set_reduce_js_namespaceObject = require("core-js/modules/esnext.set.reduce.js");
|
|
266
|
-
;// external "core-js/modules/esnext.set.some.js"
|
|
267
|
-
const esnext_set_some_js_namespaceObject = require("core-js/modules/esnext.set.some.js");
|
|
268
|
-
;// external "core-js/modules/esnext.set.symmetric-difference.js"
|
|
269
|
-
const esnext_set_symmetric_difference_js_namespaceObject = require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
270
|
-
;// external "core-js/modules/esnext.set.union.js"
|
|
271
|
-
const esnext_set_union_js_namespaceObject = require("core-js/modules/esnext.set.union.js");
|
|
272
194
|
;// external "react"
|
|
273
195
|
const external_react_namespaceObject = require("react");
|
|
274
196
|
;// ./src/spouts/csp.ts
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
197
|
// TODO: memoize this
|
|
304
198
|
function buildPolicy(policyObj) {
|
|
305
199
|
return Object.keys(policyObj).map(key => {
|
|
@@ -329,12 +223,6 @@ function joinNonce(policyObj, nonce) {
|
|
|
329
223
|
;// external "react/jsx-runtime"
|
|
330
224
|
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
|
|
331
225
|
;// ./src/spouts/DocumentComponent.tsx
|
|
332
|
-
var _process$env$WEBPACK_;
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
226
|
|
|
339
227
|
function Document({
|
|
340
228
|
assets,
|
|
@@ -379,7 +267,7 @@ const defaultHead = /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtim
|
|
|
379
267
|
content: "width=device-width, initial-scale=1"
|
|
380
268
|
}), /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("link", {
|
|
381
269
|
rel: "shortcut icon",
|
|
382
|
-
href: `${
|
|
270
|
+
href: `${process.env.WEBPACK_PUBLIC_PATH ?? '/'}favicon.ico`
|
|
383
271
|
})]
|
|
384
272
|
});
|
|
385
273
|
;// ./src/spouts/document.server.tsx
|
|
@@ -387,48 +275,11 @@ const defaultHead = /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtim
|
|
|
387
275
|
|
|
388
276
|
|
|
389
277
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
278
|
function DocumentSpout(options) {
|
|
427
279
|
return next => async props => {
|
|
428
|
-
var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _nextProps$title;
|
|
429
280
|
const nextProps = await next(props);
|
|
430
281
|
const publicPath = props.clientManifest.publicPath;
|
|
431
|
-
if (Object.keys(
|
|
282
|
+
if (Object.keys(props.clientManifest?.entrypoints ?? {}).length < 1 || publicPath === undefined) throw new Error('Manifest missing entries needed');
|
|
432
283
|
|
|
433
284
|
// TODO: consider using this package for build stats in future:
|
|
434
285
|
// https://github.com/facebook/react/tree/main/packages/react-server-dom-webpack
|
|
@@ -436,18 +287,14 @@ function DocumentSpout(options) {
|
|
|
436
287
|
name
|
|
437
288
|
}) => `${publicPath}${name}`);
|
|
438
289
|
const assetList = [];
|
|
439
|
-
Object.values(
|
|
440
|
-
|
|
441
|
-
assetList.push(...assetMap((_entrypoint$assets = entrypoint.assets) != null ? _entrypoint$assets : []));
|
|
290
|
+
Object.values(props.clientManifest?.entrypoints ?? {}).forEach(entrypoint => {
|
|
291
|
+
assetList.push(...assetMap(entrypoint.assets ?? []));
|
|
442
292
|
});
|
|
443
|
-
new Set(assetMap(Object.values(
|
|
293
|
+
new Set(assetMap(Object.values(props.clientManifest.namedChunkGroups ?? {}).filter(({
|
|
444
294
|
name
|
|
445
|
-
}) => nextProps.matchedRoutes.some(route => name
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
// any chunk preloads
|
|
449
|
-
...childrenAssets(chunk)];
|
|
450
|
-
}))).forEach(asset => assetList.push(asset));
|
|
295
|
+
}) => nextProps.matchedRoutes.some(route => name?.includes(route.name))).flatMap(chunk => [...(chunk.assets ?? []),
|
|
296
|
+
// any chunk preloads
|
|
297
|
+
...childrenAssets(chunk)]))).forEach(asset => assetList.push(asset));
|
|
451
298
|
|
|
452
299
|
// find additional assets to preload based on matched route
|
|
453
300
|
const assets = assetList.filter(asset => !asset.endsWith('.hot-update.js')).map(asset => asset.endsWith('.css') ? {
|
|
@@ -468,7 +315,7 @@ function DocumentSpout(options) {
|
|
|
468
315
|
app: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(Document, {
|
|
469
316
|
...options,
|
|
470
317
|
extraStyle: nextProps.extraStyle,
|
|
471
|
-
title:
|
|
318
|
+
title: nextProps.title ?? options.title,
|
|
472
319
|
assets: assets,
|
|
473
320
|
rootId: options.rootId,
|
|
474
321
|
scripts: nextProps.scripts,
|
|
@@ -478,17 +325,13 @@ function DocumentSpout(options) {
|
|
|
478
325
|
};
|
|
479
326
|
}
|
|
480
327
|
function childrenAssets(chunk) {
|
|
481
|
-
return chunk.children ? Object.values(chunk.children).flatMap(preload => preload.flatMap(c =>
|
|
482
|
-
var _c$assets;
|
|
483
|
-
return (_c$assets = c.assets) != null ? _c$assets : [];
|
|
484
|
-
})) : [];
|
|
328
|
+
return chunk.children ? Object.values(chunk.children).flatMap(preload => preload.flatMap(c => c.assets ?? [])) : [];
|
|
485
329
|
}
|
|
486
330
|
;// ./src/spouts/dataClient.server.tsx
|
|
487
331
|
|
|
488
332
|
function dataClientSpout(options = {}) {
|
|
489
333
|
return next => async props => {
|
|
490
|
-
|
|
491
|
-
const managers = (_options$getManagers = options == null || options.getManagers == null ? void 0 : options.getManagers()) != null ? _options$getManagers : [new (await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 2, 23))).NetworkManager()];
|
|
334
|
+
const managers = options?.getManagers?.() ?? [new (await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 2, 23))).NetworkManager()];
|
|
492
335
|
const {
|
|
493
336
|
createPersistedStore
|
|
494
337
|
} = await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 3, 23));
|
|
@@ -516,18 +359,16 @@ function dataClientSpout(options = {}) {
|
|
|
516
359
|
;// ./src/spouts/antd.server.tsx
|
|
517
360
|
|
|
518
361
|
|
|
519
|
-
|
|
520
362
|
function antdSpout() {
|
|
521
363
|
return next => async props => {
|
|
522
|
-
var _nextProps$scripts;
|
|
523
364
|
const {
|
|
524
365
|
createCache,
|
|
525
366
|
extractStyle,
|
|
526
367
|
StyleProvider
|
|
527
|
-
} = await
|
|
368
|
+
} = await import(/* webpackIgnore: true */'@ant-design/cssinjs');
|
|
528
369
|
const cache = createCache();
|
|
529
370
|
const nextProps = await next(props);
|
|
530
|
-
const scripts =
|
|
371
|
+
const scripts = nextProps.scripts ?? [];
|
|
531
372
|
const AntdSheets = () => {
|
|
532
373
|
return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)("script", {
|
|
533
374
|
dangerouslySetInnerHTML: {
|
|
@@ -548,12 +389,6 @@ function antdSpout() {
|
|
|
548
389
|
};
|
|
549
390
|
};
|
|
550
391
|
}
|
|
551
|
-
;// external "core-js/modules/web.url-search-params.delete.js"
|
|
552
|
-
const web_url_search_params_delete_js_namespaceObject = require("core-js/modules/web.url-search-params.delete.js");
|
|
553
|
-
;// external "core-js/modules/web.url-search-params.has.js"
|
|
554
|
-
const web_url_search_params_has_js_namespaceObject = require("core-js/modules/web.url-search-params.has.js");
|
|
555
|
-
;// external "core-js/modules/web.url-search-params.size.js"
|
|
556
|
-
const web_url_search_params_size_js_namespaceObject = require("core-js/modules/web.url-search-params.size.js");
|
|
557
392
|
;// external "@anansi/router"
|
|
558
393
|
const router_namespaceObject = require("@anansi/router");
|
|
559
394
|
;// external "history"
|
|
@@ -563,9 +398,6 @@ const external_history_namespaceObject = require("history");
|
|
|
563
398
|
|
|
564
399
|
|
|
565
400
|
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
401
|
function routerSpout(options) {
|
|
570
402
|
const createRouteComponent = router => function Router({
|
|
571
403
|
children
|
|
@@ -605,10 +437,6 @@ function routerSpout(options) {
|
|
|
605
437
|
};
|
|
606
438
|
}
|
|
607
439
|
;// ./src/spouts/prefetch.server.tsx
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
440
|
function prefetchSpout(field) {
|
|
613
441
|
return function (next) {
|
|
614
442
|
return async props => {
|
|
@@ -631,18 +459,13 @@ function prefetchSpout(field) {
|
|
|
631
459
|
;// ./src/spouts/json.server.tsx
|
|
632
460
|
|
|
633
461
|
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
462
|
function JSONSpout({
|
|
639
463
|
id = 'anansi-json'
|
|
640
464
|
} = {}) {
|
|
641
465
|
return next => async props => {
|
|
642
|
-
var _nextProps$scripts, _nextProps$initData;
|
|
643
466
|
const nextProps = await next(props);
|
|
644
|
-
const scripts =
|
|
645
|
-
Object.entries(
|
|
467
|
+
const scripts = nextProps.scripts ?? [];
|
|
468
|
+
Object.entries(nextProps.initData ?? {}).forEach(([key, useData]) => {
|
|
646
469
|
const globalId = `${id}.${key}`;
|
|
647
470
|
const Script = () => {
|
|
648
471
|
const data = useData();
|
|
@@ -694,4 +517,4 @@ const appSpout = app => props => Promise.resolve({
|
|
|
694
517
|
module.exports = __webpack_exports__;
|
|
695
518
|
/******/ })()
|
|
696
519
|
;
|
|
697
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxtQ0FBQSxDQUFDa0csdUNBQVE7UUFBQTFHLFFBQUEsZUFDUFEsbUNBQUEsQ0FBQ3dHLE1BQU0sSUFBRTtNQUFDLEdBREdELFFBRUwsQ0FDWixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsT0FBTztNQUNMLEdBQUczRSxTQUFTO01BQ1poQztJQUNGLENBQUM7RUFDSCxDQUFDO0FBQ0g7O0FDcERBLE1BQU1rSCxRQUFRLEdBQ1gxSixHQUFnQixJQUNPaUUsS0FBUSxJQUM5QjJFLE9BQU8sQ0FBQ2UsT0FBTyxDQUFDO0VBQUUsR0FBRzFGLEtBQUs7RUFBRWpFO0FBQUksQ0FBQyxDQUFDO0FBRXRDLGlEQUFlMEosUUFBUTs7QUNUK0I7QUFDaUI7QUFDSTtBQUNaO0FBQ0k7QUFDSTtBQUNSO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAZGF0YS1jbGllbnQvcmVhY3RcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAZGF0YS1jbGllbnQvcmVhY3Qvc3NyXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGltcG9ydCBcIkBhbnQtZGVzaWduL2Nzc2luanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvY3JlYXRlIGZha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtZG9tL3NlcnZlclwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9sYXlTcG91dHMudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzLnNldC5kaWZmZXJlbmNlLnYyLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXMuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzLnNldC51bmlvbi52Mi5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IuZmlsdGVyLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci5mbGF0LW1hcC5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IuZm9yLWVhY2guanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLm1hcC5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3Iuc29tZS5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuY29uc3RydWN0b3IuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZpbHRlci5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZmxhdC1tYXAuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZvci1lYWNoLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5tYXAuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLnNvbWUuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5hZGQtYWxsLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGVsZXRlLWFsbC5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmRpZmZlcmVuY2UuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5ldmVyeS5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmZpbHRlci5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmZpbmQuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24uanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5qb2luLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQubWFwLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQucmVkdWNlLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc29tZS5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24uanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdFwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvY3NwLnRzIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0L2pzeC1ydW50aW1lXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9Eb2N1bWVudENvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9kb2N1bWVudC5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvZGF0YUNsaWVudC5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvYW50ZC5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuZGVsZXRlLmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5oYXMuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJjb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLnNpemUuanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAYW5hbnNpL3JvdXRlclwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImhpc3RvcnlcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL3JvdXRlci5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvcHJlZmV0Y2guc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2pzb24uc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FwcC5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9pbmRleC5zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGRhdGEtY2xpZW50L3JlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBkYXRhLWNsaWVudC9yZWFjdC9zc3JcIik7IiwibW9kdWxlLmV4cG9ydHMgPSBpbXBvcnQoXCJAYW50LWRlc2lnbi9jc3NpbmpzXCIpOzsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCJ2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xudmFyIGxlYWZQcm90b3R5cGVzO1xuLy8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLy8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuXHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcblx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcblx0aWYodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cdH1cblx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcblx0dmFyIGRlZiA9IHt9O1xuXHRsZWFmUHJvdG90eXBlcyA9IGxlYWZQcm90b3R5cGVzIHx8IFtudWxsLCBnZXRQcm90byh7fSksIGdldFByb3RvKFtdKSwgZ2V0UHJvdG8oZ2V0UHJvdG8pXTtcblx0Zm9yKHZhciBjdXJyZW50ID0gbW9kZSAmIDIgJiYgdmFsdWU7IHR5cGVvZiBjdXJyZW50ID09ICdvYmplY3QnICYmICF+bGVhZlByb3RvdHlwZXMuaW5kZXhPZihjdXJyZW50KTsgY3VycmVudCA9IGdldFByb3RvKGN1cnJlbnQpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudCkuZm9yRWFjaCgoa2V5KSA9PiAoZGVmW2tleV0gPSAoKSA9PiAodmFsdWVba2V5XSkpKTtcblx0fVxuXHRkZWZbJ2RlZmF1bHQnXSA9ICgpID0+ICh2YWx1ZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChucywgZGVmKTtcblx0cmV0dXJuIG5zO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdC1kb20vc2VydmVyXCIpOyIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyVG9QaXBlYWJsZVN0cmVhbSBhcyByZWFjdFJlbmRlciB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuXG5pbXBvcnQgdHlwZSB7IFJlbmRlciB9IGZyb20gJy4vc2NyaXB0cy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclByb3BzIH0gZnJvbSAnLi9zcG91dHMvdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYXlTcG91dHMoXG4gIHNwb3V0czogKHByb3BzOiBTZXJ2ZXJQcm9wcykgPT4gUHJvbWlzZTx7XG4gICAgYXBwOiBKU1guRWxlbWVudDtcbiAgfT4sXG4gIHtcbiAgICB0aW1lb3V0TVMgPSAxMDAwMCxcbiAgICBvbkVycm9yLFxuICB9OiB7IHRpbWVvdXRNUz86IG51bWJlcjsgb25FcnJvcj86IChlcnJvcjogdW5rbm93bikgPT4gdm9pZCB9ID0ge30sXG4pIHtcbiAgY29uc3QgcmVuZGVyOiBSZW5kZXIgPSBhc3luYyAoY2xpZW50TWFuaWZlc3QsIHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3Qgbm9uY2UgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGFwcCB9ID0gYXdhaXQgc3BvdXRzKHsgY2xpZW50TWFuaWZlc3QsIHJlcSwgcmVzLCBub25jZSB9KTtcblxuICAgICAgbGV0IGRpZEVycm9yID0gZmFsc2U7XG4gICAgICBjb25zdCB7IHBpcGUsIGFib3J0IH0gPSByZWFjdFJlbmRlcihhcHAsIHtcbiAgICAgICAgbm9uY2UsXG4gICAgICAgIC8vYm9vdHN0cmFwU2NyaXB0czogYXNzZXRzLmZpbHRlcihhc3NldCA9PiBhc3NldC5lbmRzV2l0aCgnLmpzJykpLFxuICAgICAgICBvblNoZWxsUmVhZHkoKSB7XG4gICAgICAgICAgLy9tYW5hZ2Vycy5mb3JFYWNoKG1hbmFnZXIgPT4gbWFuYWdlci5jbGVhbnVwKCkpO1xuICAgICAgICAgIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIGJlZm9yZSB3ZSBzdGFydGVkIHN0cmVhbWluZywgd2Ugc2V0IHRoZSBlcnJvciBjb2RlIGFwcHJvcHJpYXRlbHkuXG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSBkaWRFcnJvciA/IDUwMCA6IDIwMDtcbiAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvblNoZWxsRXJyb3IoKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIHBpcGUocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcihlOiBhbnkpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgICAvL3BpcGUocmVzKTsgUmVtb3ZpbmcgdGhpcyBhdm9pZHMsIFwiUmVhY3QgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgcGlwaW5nIHRvIG9uZSB3cml0YWJsZSBzdHJlYW0uXCJcbiAgICAgICAgICBpZiAob25FcnJvcikgb25FcnJvcihlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWJhbmRvbiBhbmQgc3dpdGNoIHRvIGNsaWVudCByZW5kZXJpbmcgaWYgZW5vdWdoIHRpbWUgcGFzc2VzLlxuICAgICAgLy8gVHJ5IGxvd2VyaW5nIHRoaXMgdG8gc2VlIHRoZSBjbGllbnQgcmVjb3Zlci5cbiAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IChhYm9ydCBhcyBhbnkpKGBUaW1lb3V0IG9mICR7dGltZW91dE1TfW1zIGV4Y2VlZGVkYCksXG4gICAgICAgIHRpbWVvdXRNUyxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKG9uRXJyb3IpIG9uRXJyb3IoZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJlbmRlcjtcbn1cbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci5maWx0ZXIuanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLmZsYXQtbWFwLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci5mb3ItZWFjaC5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IubWFwLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci5zb21lLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZmlsdGVyLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5mbGF0LW1hcC5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZm9yLWVhY2guanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLm1hcC5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3Iuc29tZS5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmFkZC1hbGwuanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kZWxldGUtYWxsLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmV2ZXJ5LmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZmlsdGVyLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZmluZC5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20uanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YuanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmpvaW4uanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5tYXAuanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5yZWR1Y2UuanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zb21lLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UuanNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0XCIpOyIsImV4cG9ydCBpbnRlcmZhY2UgUG9saWN5IHtcbiAgW2RpcmVjdGl2ZTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8vIFRPRE86IG1lbW9pemUgdGhpc1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUG9saWN5KHBvbGljeU9iajogUG9saWN5KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwb2xpY3lPYmopXG4gICAgLm1hcChrZXkgPT4ge1xuICAgICAgY29uc3QgdmFsID1cbiAgICAgICAgQXJyYXkuaXNBcnJheShwb2xpY3lPYmpba2V5XSkgP1xuICAgICAgICAgIFsuLi5uZXcgU2V0KHBvbGljeU9ialtrZXldKS52YWx1ZXMoKV0uZmlsdGVyKHYgPT4gdikuam9pbignICcpXG4gICAgICAgIDogcG9saWN5T2JqW2tleV07XG5cbiAgICAgIC8vIG1vdmUgc3RyaWN0IGR5bmFtaWMgdG8gdGhlIGVuZCBvZiB0aGUgcG9saWN5IGlmIGl0IGV4aXN0cyB0byBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGNzcDJcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LVNlY3VyaXR5LVBvbGljeS9zY3JpcHQtc3JjI3N0cmljdC1keW5hbWljXG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLmluY2x1ZGVzKFwiJ3N0cmljdC1keW5hbWljJ1wiKSkge1xuICAgICAgICBjb25zdCBuZXdWYWwgPSBgJHt2YWxcbiAgICAgICAgICAucmVwbGFjZSgvXFxzPydzdHJpY3QtZHluYW1pYydcXHM/L2dpLCAnICcpXG4gICAgICAgICAgLnRyaW0oKX0gJ3N0cmljdC1keW5hbWljJ2A7XG4gICAgICAgIHJldHVybiBgJHtrZXl9ICR7bmV3VmFsfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgJHtrZXl9ICR7dmFsfWA7XG4gICAgfSlcbiAgICAuam9pbignOyAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5Ob25jZShwb2xpY3lPYmo6IFBvbGljeSwgbm9uY2U/OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgaWYgKCFub25jZSkgcmV0dXJuIHBvbGljeU9iajtcbiAgY29uc3QgcG9saWN5ID0ge1xuICAgIC4uLnBvbGljeU9iaixcbiAgfTtcbiAgaWYgKHR5cGVvZiBwb2xpY3lbJ3NjcmlwdC1zcmMnXSA9PT0gJ3N0cmluZycpIHtcbiAgICBwb2xpY3lbJ3NjcmlwdC1zcmMnXSA9IFtwb2xpY3lbJ3NjcmlwdC1zcmMnXSwgYCdub25jZS0ke25vbmNlfSdgXTtcbiAgfSBlbHNlIHtcbiAgICBwb2xpY3lbJ3NjcmlwdC1zcmMnXSA9IFsuLi5wb2xpY3lbJ3NjcmlwdC1zcmMnXSwgYCdub25jZS0ke25vbmNlfSdgXTtcbiAgfVxuICByZXR1cm4gcG9saWN5O1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTsiLCJ0eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhc3NldHM6IHsgaHJlZjogc3RyaW5nOyBhcz86IHN0cmluZzsgcmVsPzogc3RyaW5nIH1bXTtcbiAgaGVhZD86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZXh0cmFTdHlsZTogUmVhY3QuUmVhY3ROb2RlO1xuICBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xuICByb290SWQ/OiBzdHJpbmc7XG4gIGNoYXJTZXQ/OiBzdHJpbmc7XG4gIGxhbmc/OiBzdHJpbmc7XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnQoe1xuICBhc3NldHMsXG4gIGhlYWQgPSBkZWZhdWx0SGVhZCxcbiAgY2hpbGRyZW4sXG4gIHRpdGxlLFxuICByb290SWQgPSAnYW5hbnNpLXJvb3QnLFxuICBjaGFyU2V0ID0gJ3V0Zi04JyxcbiAgc2NyaXB0cyA9IG51bGwsXG4gIGV4dHJhU3R5bGUsXG4gIGxhbmcsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxodG1sIGxhbmc9e2xhbmd9PlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJTZXQ9e2NoYXJTZXR9IC8+XG4gICAgICAgIHtoZWFkfVxuICAgICAgICB7ZXh0cmFTdHlsZX1cbiAgICAgICAge2Fzc2V0cy5tYXAoKGFzc2V0LCBpKSA9PiAoXG4gICAgICAgICAgPGxpbmsga2V5PXtpfSByZWw9XCJwcmVsb2FkXCIgey4uLmFzc2V0fSAvPlxuICAgICAgICApKX1cbiAgICAgICAgPHRpdGxlPnt0aXRsZX08L3RpdGxlPlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDxkaXYgaWQ9e3Jvb3RJZH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICB7c2NyaXB0c31cbiAgICAgICAge2Fzc2V0c1xuICAgICAgICAgIC5maWx0ZXIoKHsgaHJlZiB9KSA9PiBocmVmLmVuZHNXaXRoKCcuanMnKSlcbiAgICAgICAgICAubWFwKCh7IGhyZWYgfSwgaSkgPT4gKFxuICAgICAgICAgICAgPHNjcmlwdCBrZXk9e2l9IHNyYz17aHJlZn0gYXN5bmMgLz5cbiAgICAgICAgICApKX1cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gICk7XG59XG5jb25zdCBkZWZhdWx0SGVhZCA9IChcbiAgPD5cbiAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxuICAgIDxsaW5rXG4gICAgICByZWw9XCJzaG9ydGN1dCBpY29uXCJcbiAgICAgIGhyZWY9e2Ake3Byb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggPz8gJy8nfWZhdmljb24uaWNvYH1cbiAgICAvPlxuICA8Lz5cbik7XG4iLCJpbXBvcnQgdHlwZSB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0YXRzQ2h1bmtHcm91cCB9IGZyb20gJ3dlYnBhY2snO1xuXG5pbXBvcnQgeyBidWlsZFBvbGljeSwgam9pbk5vbmNlLCBQb2xpY3kgfSBmcm9tICcuL2NzcC5qcyc7XG5pbXBvcnQgRG9jdW1lbnQgZnJvbSAnLi9Eb2N1bWVudENvbXBvbmVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgbWF0Y2hlZFJvdXRlczogUm91dGU8YW55PltdO1xuICB0aXRsZT86IHN0cmluZztcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdO1xuICBleHRyYVN0eWxlPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEb2N1bWVudFNwb3V0KG9wdGlvbnM6IHtcbiAgaGVhZD86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgbGFuZz86IHN0cmluZztcbiAgcm9vdElkPzogc3RyaW5nO1xuICBjaGFyU2V0Pzogc3RyaW5nO1xuICBjc1BvbGljeT86IFBvbGljeTtcbn0pOiBTZXJ2ZXJTcG91dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIE5lZWRlZE5leHQ+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgY29uc3QgcHVibGljUGF0aCA9IHByb3BzLmNsaWVudE1hbmlmZXN0LnB1YmxpY1BhdGg7XG5cbiAgICBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhwcm9wcy5jbGllbnRNYW5pZmVzdD8uZW50cnlwb2ludHMgPz8ge30pLmxlbmd0aCA8IDEgfHxcbiAgICAgIHB1YmxpY1BhdGggPT09IHVuZGVmaW5lZFxuICAgIClcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFuaWZlc3QgbWlzc2luZyBlbnRyaWVzIG5lZWRlZCcpO1xuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgdXNpbmcgdGhpcyBwYWNrYWdlIGZvciBidWlsZCBzdGF0cyBpbiBmdXR1cmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2tcbiAgICBjb25zdCBhc3NldE1hcCA9IChhc3NldHM6IHsgbmFtZTogc3RyaW5nOyBzaXplPzogbnVtYmVyIH1bXSkgPT5cbiAgICAgIGFzc2V0cy5tYXAoKHsgbmFtZSB9KSA9PiBgJHtwdWJsaWNQYXRofSR7bmFtZX1gKTtcblxuICAgIGNvbnN0IGFzc2V0TGlzdDogc3RyaW5nW10gPSBbXTtcbiAgICBPYmplY3QudmFsdWVzKHByb3BzLmNsaWVudE1hbmlmZXN0Py5lbnRyeXBvaW50cyA/PyB7fSkuZm9yRWFjaChcbiAgICAgIGVudHJ5cG9pbnQgPT4ge1xuICAgICAgICBhc3NldExpc3QucHVzaCguLi5hc3NldE1hcChlbnRyeXBvaW50LmFzc2V0cyA/PyBbXSkpO1xuICAgICAgfSxcbiAgICApO1xuICAgIG5ldyBTZXQoXG4gICAgICBhc3NldE1hcChcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdC5uYW1lZENodW5rR3JvdXBzID8/IHt9KVxuICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PlxuICAgICAgICAgICAgbmV4dFByb3BzLm1hdGNoZWRSb3V0ZXMuc29tZShyb3V0ZSA9PiBuYW1lPy5pbmNsdWRlcyhyb3V0ZS5uYW1lKSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5mbGF0TWFwKGNodW5rID0+IFtcbiAgICAgICAgICAgIC4uLihjaHVuay5hc3NldHMgPz8gW10pLFxuICAgICAgICAgICAgLy8gYW55IGNodW5rIHByZWxvYWRzXG4gICAgICAgICAgICAuLi5jaGlsZHJlbkFzc2V0cyhjaHVuayksXG4gICAgICAgICAgXSksXG4gICAgICApLFxuICAgICkuZm9yRWFjaChhc3NldCA9PiBhc3NldExpc3QucHVzaChhc3NldCkpO1xuXG4gICAgLy8gZmluZCBhZGRpdGlvbmFsIGFzc2V0cyB0byBwcmVsb2FkIGJhc2VkIG9uIG1hdGNoZWQgcm91dGVcbiAgICBjb25zdCBhc3NldHM6IHtcbiAgICAgIGhyZWY6IHN0cmluZztcbiAgICAgIGFzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgcmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIH1bXSA9IGFzc2V0TGlzdFxuICAgICAgLmZpbHRlcihhc3NldCA9PiAhYXNzZXQuZW5kc1dpdGgoJy5ob3QtdXBkYXRlLmpzJykpXG4gICAgICAubWFwKGFzc2V0ID0+XG4gICAgICAgIGFzc2V0LmVuZHNXaXRoKCcuY3NzJykgPyB7IGhyZWY6IGFzc2V0LCByZWw6ICdzdHlsZXNoZWV0JyB9XG4gICAgICAgIDogYXNzZXQuZW5kc1dpdGgoJy5qcycpID8geyBocmVmOiBhc3NldCwgYXM6ICdzY3JpcHQnIH1cbiAgICAgICAgOiB7IGhyZWY6IGFzc2V0IH0sXG4gICAgICApO1xuXG4gICAgaWYgKG9wdGlvbnMuY3NQb2xpY3kpIHtcbiAgICAgIGNvbnN0IGh0dHBFcXVpdiA9XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgP1xuICAgICAgICAgICdDb250ZW50LVNlY3VyaXR5LVBvbGljeSdcbiAgICAgICAgOiAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3ktUmVwb3J0LU9ubHknO1xuXG4gICAgICBwcm9wcy5yZXMuc2V0SGVhZGVyKFxuICAgICAgICBodHRwRXF1aXYsXG4gICAgICAgIGJ1aWxkUG9saWN5KGpvaW5Ob25jZShvcHRpb25zLmNzUG9saWN5LCBwcm9wcy5ub25jZSkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiAoXG4gICAgICAgIDxEb2N1bWVudFxuICAgICAgICAgIHsuLi5vcHRpb25zfVxuICAgICAgICAgIGV4dHJhU3R5bGU9e25leHRQcm9wcy5leHRyYVN0eWxlfVxuICAgICAgICAgIHRpdGxlPXtuZXh0UHJvcHMudGl0bGUgPz8gb3B0aW9ucy50aXRsZX1cbiAgICAgICAgICBhc3NldHM9e2Fzc2V0c31cbiAgICAgICAgICByb290SWQ9e29wdGlvbnMucm9vdElkfVxuICAgICAgICAgIHNjcmlwdHM9e25leHRQcm9wcy5zY3JpcHRzfVxuICAgICAgICA+XG4gICAgICAgICAge25leHRQcm9wcy5hcHB9XG4gICAgICAgIDwvRG9jdW1lbnQ+XG4gICAgICApLFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuQXNzZXRzKGNodW5rOiBTdGF0c0NodW5rR3JvdXApIHtcbiAgcmV0dXJuIGNodW5rLmNoaWxkcmVuID9cbiAgICAgIE9iamVjdC52YWx1ZXMoY2h1bmsuY2hpbGRyZW4pLmZsYXRNYXAocHJlbG9hZCA9PlxuICAgICAgICBwcmVsb2FkLmZsYXRNYXAoYyA9PiBjLmFzc2V0cyA/PyBbXSksXG4gICAgICApXG4gICAgOiBbXTtcbn1cbiIsImltcG9ydCB7XG4gIHR5cGUgQ29udHJvbGxlcixcbiAgdHlwZSBNYW5hZ2VyLFxuICB0eXBlIFN0YXRlLFxuICB0eXBlIFN0b3JlLFxufSBmcm9tICdAZGF0YS1jbGllbnQvcmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRhdGFDbGllbnRTcG91dChcbiAgb3B0aW9uczoge1xuICAgIGdldE1hbmFnZXJzPzogKCkgPT4gTWFuYWdlcltdO1xuICB9ID0ge30sXG4pOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHsgY29udHJvbGxlcjogQ29udHJvbGxlciB9ICYgeyBzdG9yZTogU3RvcmU8U3RhdGU8dW5rbm93bj4+IH0sXG4gIHsgaW5pdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB1bmtub3duPjsgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdIH1cbj4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgbWFuYWdlcnMgPSBvcHRpb25zPy5nZXRNYW5hZ2Vycz8uKCkgPz8gW1xuICAgICAgbmV3IChhd2FpdCBpbXBvcnQoJ0BkYXRhLWNsaWVudC9yZWFjdCcpKS5OZXR3b3JrTWFuYWdlcigpLFxuICAgIF07XG4gICAgY29uc3QgeyBjcmVhdGVQZXJzaXN0ZWRTdG9yZSB9ID0gYXdhaXQgaW1wb3J0KCdAZGF0YS1jbGllbnQvcmVhY3Qvc3NyJyk7XG4gICAgY29uc3QgW1NlcnZlckRhdGFQcm92aWRlciwgdXNlUmVhZHlDYWNoZVN0YXRlLCBjb250cm9sbGVyLCBzdG9yZV0gPVxuICAgICAgY3JlYXRlUGVyc2lzdGVkU3RvcmUobWFuYWdlcnMpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dCh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGNvbnRyb2xsZXIsXG4gICAgICBzdG9yZSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgaW5pdERhdGE6IHtcbiAgICAgICAgLi4ubmV4dFByb3BzLmluaXREYXRhLFxuICAgICAgICBkYXRhY2xpZW50OiB1c2VSZWFkeUNhY2hlU3RhdGUsXG4gICAgICB9LFxuICAgICAgYXBwOiA8U2VydmVyRGF0YVByb3ZpZGVyPntuZXh0UHJvcHMuYXBwfTwvU2VydmVyRGF0YVByb3ZpZGVyPixcbiAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIG9ubHkgaW5qZWN0IGluIG5leHQgYW5kIG5vdCBoYXZlIHRvIGFsc28gcHV0IGhlcmVcbiAgICAgIGNvbnRyb2xsZXIsXG4gICAgICBzdG9yZSxcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IHR5cGUgSlNYIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgaW5pdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB1bmtub3duPjtcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdO1xuICBleHRyYVN0eWxlPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbnRkU3BvdXQoKTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmVlZGVkTmV4dFxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZUNhY2hlLCBleHRyYWN0U3R5bGUsIFN0eWxlUHJvdmlkZXIgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICdAYW50LWRlc2lnbi9jc3NpbmpzJ1xuICAgICk7XG4gICAgY29uc3QgY2FjaGUgPSBjcmVhdGVDYWNoZSgpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IG5leHRQcm9wcy5zY3JpcHRzID8/IFtdO1xuXG4gICAgY29uc3QgQW50ZFNoZWV0cyA9ICgpOiBKU1guRWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogYDwvc2NyaXB0PiR7ZXh0cmFjdFN0eWxlKGNhY2hlKX08c2NyaXB0PmAsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfTtcbiAgICAvLyB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gaW5qZWN0IHRoaXMgYWZ0ZXIgdGhlIGVudGlyZSBjb250ZW50IGhhcyBzdHJlYW1lZCBpbiBvciBpdCBkb2Vzbid0IGNvcnJlY3RseSBwb3B1bGF0ZVxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vY3NzaW5qcy9pc3N1ZXMvNzlcbiAgICBzY3JpcHRzLnB1c2goPEFudGRTaGVldHMgLz4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGFwcDogPFN0eWxlUHJvdmlkZXIgY2FjaGU9e2NhY2hlfT57bmV4dFByb3BzLmFwcH08L1N0eWxlUHJvdmlkZXI+LFxuICAgICAgc2NyaXB0cyxcbiAgICB9O1xuICB9O1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qc1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuaGFzLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5zaXplLmpzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiQGFuYW5zaS9yb3V0ZXJcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJoaXN0b3J5XCIpOyIsImltcG9ydCB7IFJvdXRlLCBSb3V0ZVByb3ZpZGVyLCBSb3V0ZUNvbnRyb2xsZXIgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5IH0gZnJvbSAnaGlzdG9yeSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJvdXRlciwgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcm91dGVyU3BvdXQ8UmVzb2x2ZVdpdGg+KG9wdGlvbnM6IHtcbiAgcmVzb2x2ZVdpdGg/OiBhbnk7XG4gIHVzZVJlc29sdmVXaXRoOiAoKSA9PiBSZXNvbHZlV2l0aDtcbiAgY3JlYXRlUm91dGVyOiBDcmVhdGVSb3V0ZXI8UmVzb2x2ZVdpdGg+O1xufSk6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAge1xuICAgIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoPltdO1xuICAgIHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zO1xuICB9ICYge1xuICAgIHJvdXRlcjogUm91dGVDb250cm9sbGVyPFJvdXRlPFJlc29sdmVXaXRoLCBhbnk+PjtcbiAgfVxuPiB7XG4gIGNvbnN0IGNyZWF0ZVJvdXRlQ29tcG9uZW50ID0gKFxuICAgIHJvdXRlcjogUm91dGVDb250cm9sbGVyPFJvdXRlPFJlc29sdmVXaXRoLCBhbnk+PixcbiAgKSA9PlxuICAgIGZ1bmN0aW9uIFJvdXRlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gICAgICBjb25zdCByZXNvbHZlV2l0aCA9IG9wdGlvbnMudXNlUmVzb2x2ZVdpdGgoKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJvdXRlUHJvdmlkZXIgcm91dGVyPXtyb3V0ZXJ9IHJlc29sdmVXaXRoPXtyZXNvbHZlV2l0aH0+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1JvdXRlUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH07XG5cbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHVybCA9IHByb3BzLnJlcS51cmwgfHwgJyc7XG4gICAgY29uc3QgcGFydHMgPSB1cmwuc3BsaXQoJz8nLCAyKTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcnRzLmxlbmd0aCA8IDIgPyAnJyA6IHBhcnRzWzFdKTtcbiAgICBjb25zdCByb3V0ZXIgPSBvcHRpb25zLmNyZWF0ZVJvdXRlcihcbiAgICAgIGNyZWF0ZU1lbW9yeUhpc3RvcnkoeyBpbml0aWFsRW50cmllczogW3VybF0gfSksXG4gICAgKTtcbiAgICBjb25zdCBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSZXNvbHZlV2l0aD5bXSA9IHJvdXRlci5nZXRNYXRjaGVkUm91dGVzKHVybCk7XG5cbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IFJvdXRlciA9IGNyZWF0ZVJvdXRlQ29tcG9uZW50KHJvdXRlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiA8Um91dGVyPntuZXh0UHJvcHMuYXBwfTwvUm91dGVyPixcbiAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIG9ubHkgaW5qZWN0IGluIG5leHQgYW5kIG5vdCBoYXZlIHRvIGFsc28gcHV0IGhlcmVcbiAgICAgIG1hdGNoZWRSb3V0ZXMsXG4gICAgICByb3V0ZXIsXG4gICAgICBzZWFyY2hQYXJhbXMsXG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVQcm9wcywgU2VydmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWRQcm9wczxSb3V0ZVdpdGg+ID0ge1xuICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSb3V0ZVdpdGg+W107XG4gIHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zO1xufSAmIFJlc29sdmVQcm9wcztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJlZmV0Y2hTcG91dDxGIGV4dGVuZHMgc3RyaW5nPihmaWVsZDogRikge1xuICByZXR1cm4gZnVuY3Rpb24gPFxuICAgIFJvdXRlV2l0aCxcbiAgICBOIGV4dGVuZHMgTmVlZGVkUHJvcHM8Um91dGVXaXRoPixcbiAgICBJIGV4dGVuZHMgU2VydmVyUHJvcHMsXG4gID4oXG4gICAgbmV4dDogKHByb3BzOiBJKSA9PiBQcm9taXNlPFxuICAgICAge1xuICAgICAgICBbSyBpbiBGXTogUm91dGVXaXRoO1xuICAgICAgfSAmIE5cbiAgICA+LFxuICApIHtcbiAgICByZXR1cm4gYXN5bmMgKHByb3BzOiBJKSA9PiB7XG4gICAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG9GZXRjaDogUHJvbWlzZTx1bmtub3duPltdID0gW107XG4gICAgICAgIG5leHRQcm9wcy5tYXRjaGVkUm91dGVzLmZvckVhY2gocm91dGUgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGUucmVzb2x2ZURhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRvRmV0Y2gucHVzaChcbiAgICAgICAgICAgICAgcm91dGUucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMuc2VhcmNoUGFyYW1zLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0b0ZldGNoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0UHJvcHM7XG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEpTT05TcG91dCh7XG4gIGlkID0gJ2FuYW5zaS1qc29uJyxcbn06IHsgaWQ/OiBzdHJpbmcgfSA9IHt9KTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmVlZGVkTmV4dFxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZVtdID0gbmV4dFByb3BzLnNjcmlwdHMgPz8gW107XG5cbiAgICBPYmplY3QuZW50cmllcyhuZXh0UHJvcHMuaW5pdERhdGEgPz8ge30pLmZvckVhY2goKFtrZXksIHVzZURhdGFdKSA9PiB7XG4gICAgICBjb25zdCBnbG9iYWxJZCA9IGAke2lkfS4ke2tleX1gO1xuICAgICAgY29uc3QgU2NyaXB0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB1c2VEYXRhKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW5jb2RlZCA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICAgIGlkPXtnbG9iYWxJZH1cbiAgICAgICAgICAgICAgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgIF9faHRtbDogZW5jb2RlZCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gVE9ETzogVXNlIHVuaWZpZWQgbG9nZ2luZ1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHNlcmlhbGl6aW5nIGpzb24gZm9yICR7a2V5fWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzY3JpcHRzLnB1c2goXG4gICAgICAgIDxTdXNwZW5zZSBrZXk9e2dsb2JhbElkfT5cbiAgICAgICAgICA8U2NyaXB0IC8+XG4gICAgICAgIDwvU3VzcGVuc2U+LFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBzY3JpcHRzLFxuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgYXBwU3BvdXQgPVxuICAoYXBwOiBKU1guRWxlbWVudCkgPT5cbiAgPFAgZXh0ZW5kcyBTZXJ2ZXJQcm9wcz4ocHJvcHM6IFApID0+XG4gICAgUHJvbWlzZS5yZXNvbHZlKHsgLi4ucHJvcHMsIGFwcCB9KTtcblxuZXhwb3J0IGRlZmF1bHQgYXBwU3BvdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIGxheVNwb3V0cyB9IGZyb20gJy4vbGF5U3BvdXRzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50LnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRhdGFDbGllbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RhdGFDbGllbnQuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYW50ZFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvYW50ZC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByb3V0ZXJTcG91dCB9IGZyb20gJy4vc3BvdXRzL3JvdXRlci5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmVmZXRjaFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcHJlZmV0Y2guc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSlNPTlNwb3V0IH0gZnJvbSAnLi9zcG91dHMvanNvbi5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcHBTcG91dCB9IGZyb20gJy4vc3BvdXRzL2FwcC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vc3BvdXRzL3R5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgYXMgU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjcmlwdHMvdHlwZXMuanMnO1xuIl0sIm5hbWVzIjpbImNyeXB0byIsInJlbmRlclRvUGlwZWFibGVTdHJlYW0iLCJyZWFjdFJlbmRlciIsImxheVNwb3V0cyIsInNwb3V0cyIsInRpbWVvdXRNUyIsIm9uRXJyb3IiLCJyZW5kZXIiLCJjbGllbnRNYW5pZmVzdCIsInJlcSIsInJlcyIsIm5vbmNlIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImFwcCIsImRpZEVycm9yIiwicGlwZSIsImFib3J0Iiwib25TaGVsbFJlYWR5Iiwic3RhdHVzQ29kZSIsInNldEhlYWRlciIsIm9uU2hlbGxFcnJvciIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRUaW1lb3V0IiwiYnVpbGRQb2xpY3kiLCJwb2xpY3lPYmoiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwia2V5IiwidmFsIiwiQXJyYXkiLCJpc0FycmF5IiwiU2V0IiwidmFsdWVzIiwiZmlsdGVyIiwidiIsImpvaW4iLCJpbmNsdWRlcyIsIm5ld1ZhbCIsInJlcGxhY2UiLCJ0cmltIiwiam9pbk5vbmNlIiwicG9saWN5IiwiRG9jdW1lbnQiLCJhc3NldHMiLCJoZWFkIiwiZGVmYXVsdEhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsInNjcmlwdHMiLCJleHRyYVN0eWxlIiwibGFuZyIsIl9qc3hzIiwiX2pzeCIsImFzc2V0IiwiaSIsInJlbCIsImlkIiwiaHJlZiIsImVuZHNXaXRoIiwic3JjIiwiYXN5bmMiLCJfRnJhZ21lbnQiLCJuYW1lIiwiY29udGVudCIsIl9wcm9jZXNzJGVudiRXRUJQQUNLXyIsInByb2Nlc3MiLCJlbnYiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwiUmVhY3QiLCJqc3giLCJEb2N1bWVudFNwb3V0Iiwib3B0aW9ucyIsIm5leHQiLCJwcm9wcyIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdCIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdDIiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3QzIiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0NCIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdDUiLCJfbmV4dFByb3BzJHRpdGxlIiwibmV4dFByb3BzIiwicHVibGljUGF0aCIsImVudHJ5cG9pbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJhc3NldE1hcCIsImFzc2V0TGlzdCIsImZvckVhY2giLCJlbnRyeXBvaW50IiwiX2VudHJ5cG9pbnQkYXNzZXRzIiwicHVzaCIsIm5hbWVkQ2h1bmtHcm91cHMiLCJtYXRjaGVkUm91dGVzIiwic29tZSIsInJvdXRlIiwiZmxhdE1hcCIsImNodW5rIiwiX2NodW5rJGFzc2V0cyIsImNoaWxkcmVuQXNzZXRzIiwiYXMiLCJjc1BvbGljeSIsImh0dHBFcXVpdiIsIk5PREVfRU5WIiwicHJlbG9hZCIsImMiLCJfYyRhc3NldHMiLCJkYXRhQ2xpZW50U3BvdXQiLCJfb3B0aW9ucyRnZXRNYW5hZ2VycyIsIm1hbmFnZXJzIiwiZ2V0TWFuYWdlcnMiLCJOZXR3b3JrTWFuYWdlciIsImNyZWF0ZVBlcnNpc3RlZFN0b3JlIiwiU2VydmVyRGF0YVByb3ZpZGVyIiwidXNlUmVhZHlDYWNoZVN0YXRlIiwiY29udHJvbGxlciIsInN0b3JlIiwiaW5pdERhdGEiLCJkYXRhY2xpZW50IiwiYW50ZFNwb3V0IiwiX25leHRQcm9wcyRzY3JpcHRzIiwiY3JlYXRlQ2FjaGUiLCJleHRyYWN0U3R5bGUiLCJTdHlsZVByb3ZpZGVyIiwiY2FjaGUiLCJBbnRkU2hlZXRzIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJSb3V0ZVByb3ZpZGVyIiwiY3JlYXRlTWVtb3J5SGlzdG9yeSIsInJvdXRlclNwb3V0IiwiY3JlYXRlUm91dGVDb21wb25lbnQiLCJyb3V0ZXIiLCJSb3V0ZXIiLCJyZXNvbHZlV2l0aCIsInVzZVJlc29sdmVXaXRoIiwidXJsIiwicGFydHMiLCJzcGxpdCIsInNlYXJjaFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImNyZWF0ZVJvdXRlciIsImluaXRpYWxFbnRyaWVzIiwiZ2V0TWF0Y2hlZFJvdXRlcyIsInByZWZldGNoU3BvdXQiLCJmaWVsZCIsInRvRmV0Y2giLCJyZXNvbHZlRGF0YSIsIlByb21pc2UiLCJhbGwiLCJTdXNwZW5zZSIsIkpTT05TcG91dCIsIl9uZXh0UHJvcHMkaW5pdERhdGEiLCJlbnRyaWVzIiwidXNlRGF0YSIsImdsb2JhbElkIiwiU2NyaXB0IiwiZGF0YSIsImVuY29kZWQiLCJKU09OIiwic3RyaW5naWZ5IiwidHlwZSIsImFwcFNwb3V0IiwicmVzb2x2ZSIsImRlZmF1bHQiLCJkb2N1bWVudFNwb3V0Il0sInNvdXJjZVJvb3QiOiIifQ==
|
|
520
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LElBQUksQ0FBQ0MsU0FBUyxDQUFDSCxJQUFJLENBQUM7VUFDcEMsb0JBQ0U1RixtQ0FBQTtZQUNFSSxFQUFFLEVBQUVzRixRQUFTO1lBQ2JNLElBQUksRUFBQyxrQkFBa0I7WUFDdkJsQyx1QkFBdUIsRUFBRTtjQUN2QkMsTUFBTSxFQUFFOEI7WUFDVixDQUFFO1lBQ0Y1SSxLQUFLLEVBQUVtRSxLQUFLLENBQUNuRTtVQUFNLENBQ3BCLENBQUM7UUFFTixDQUFDLENBQUMsT0FBT1csQ0FBQyxFQUFFO1VBQ1Y7VUFDQUMsT0FBTyxDQUFDQyxLQUFLLENBQUMsOEJBQThCTyxHQUFHLEVBQUUsQ0FBQztVQUNsRFIsT0FBTyxDQUFDQyxLQUFLLENBQUNGLENBQUMsQ0FBQztVQUNoQixPQUFPLElBQUk7UUFDYjtNQUNGLENBQUM7TUFDRGdDLE9BQU8sQ0FBQ21DLElBQUksY0FDVi9CLG1DQUFBLENBQUNzRix1Q0FBUTtRQUFBOUYsUUFBQSxlQUNQUSxtQ0FBQSxDQUFDMkYsTUFBTSxJQUFFO01BQUMsR0FER0QsUUFFTCxDQUNaLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixPQUFPO01BQ0wsR0FBR3JFLFNBQVM7TUFDWnpCO0lBQ0YsQ0FBQztFQUNILENBQUM7QUFDSDs7QUNwREEsTUFBTXFHLFFBQVEsR0FDWDdJLEdBQWdCLElBQ09nRSxLQUFRLElBQzlCZ0UsT0FBTyxDQUFDYyxPQUFPLENBQUM7RUFBRSxHQUFHOUUsS0FBSztFQUFFaEU7QUFBSSxDQUFDLENBQUM7QUFFdEMsaURBQWU2SSxRQUFROztBQ1QrQjtBQUNpQjtBQUNJO0FBQ1o7QUFDSTtBQUNJO0FBQ1I7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcIkBkYXRhLWNsaWVudC9yZWFjdFwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcIkBkYXRhLWNsaWVudC9yZWFjdC9zc3JcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvY3JlYXRlIGZha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtZG9tL3NlcnZlclwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9sYXlTcG91dHMudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9jc3AudHMiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QvanN4LXJ1bnRpbWVcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL0RvY3VtZW50Q29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2RvY3VtZW50LnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9kYXRhQ2xpZW50LnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9hbnRkLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQGFuYW5zaS9yb3V0ZXJcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJoaXN0b3J5XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9yb3V0ZXIuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL3ByZWZldGNoLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9qc29uLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9hcHAuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvaW5kZXguc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBkYXRhLWNsaWVudC9yZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAZGF0YS1jbGllbnQvcmVhY3Qvc3NyXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsInZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiA/IChvYmopID0+IChPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSkgOiAob2JqKSA9PiAob2JqLl9fcHJvdG9fXyk7XG52YXIgbGVhZlByb3RvdHlwZXM7XG4vLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLy8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8vIG1vZGUgJiAxNjogcmV0dXJuIHZhbHVlIHdoZW4gaXQncyBQcm9taXNlLWxpa2Vcbi8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbl9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG5cdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IHRoaXModmFsdWUpO1xuXHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuXHRpZih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlKSB7XG5cdFx0aWYoKG1vZGUgJiA0KSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYoKG1vZGUgJiAxNikgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiB2YWx1ZTtcblx0fVxuXHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuXHR2YXIgZGVmID0ge307XG5cdGxlYWZQcm90b3R5cGVzID0gbGVhZlByb3RvdHlwZXMgfHwgW251bGwsIGdldFByb3RvKHt9KSwgZ2V0UHJvdG8oW10pLCBnZXRQcm90byhnZXRQcm90byldO1xuXHRmb3IodmFyIGN1cnJlbnQgPSBtb2RlICYgMiAmJiB2YWx1ZTsgdHlwZW9mIGN1cnJlbnQgPT0gJ29iamVjdCcgJiYgIX5sZWFmUHJvdG90eXBlcy5pbmRleE9mKGN1cnJlbnQpOyBjdXJyZW50ID0gZ2V0UHJvdG8oY3VycmVudCkpIHtcblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IChkZWZba2V5XSA9ICgpID0+ICh2YWx1ZVtrZXldKSkpO1xuXHR9XG5cdGRlZlsnZGVmYXVsdCddID0gKCkgPT4gKHZhbHVlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBkZWYpO1xuXHRyZXR1cm4gbnM7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0LWRvbS9zZXJ2ZXJcIik7IiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXJUb1BpcGVhYmxlU3RyZWFtIGFzIHJlYWN0UmVuZGVyIH0gZnJvbSAncmVhY3QtZG9tL3NlcnZlcic7XG5cbmltcG9ydCB0eXBlIHsgUmVuZGVyIH0gZnJvbSAnLi9zY3JpcHRzL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxheVNwb3V0cyhcbiAgc3BvdXRzOiAocHJvcHM6IFNlcnZlclByb3BzKSA9PiBQcm9taXNlPHtcbiAgICBhcHA6IEpTWC5FbGVtZW50O1xuICB9PixcbiAge1xuICAgIHRpbWVvdXRNUyA9IDEwMDAwLFxuICAgIG9uRXJyb3IsXG4gIH06IHsgdGltZW91dE1TPzogbnVtYmVyOyBvbkVycm9yPzogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkIH0gPSB7fSxcbikge1xuICBjb25zdCByZW5kZXI6IFJlbmRlciA9IGFzeW5jIChjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMpID0+IHtcbiAgICBjb25zdCBub25jZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYXBwIH0gPSBhd2FpdCBzcG91dHMoeyBjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMsIG5vbmNlIH0pO1xuXG4gICAgICBsZXQgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHsgcGlwZSwgYWJvcnQgfSA9IHJlYWN0UmVuZGVyKGFwcCwge1xuICAgICAgICBub25jZSxcbiAgICAgICAgLy9ib290c3RyYXBTY3JpcHRzOiBhc3NldHMuZmlsdGVyKGFzc2V0ID0+IGFzc2V0LmVuZHNXaXRoKCcuanMnKSksXG4gICAgICAgIG9uU2hlbGxSZWFkeSgpIHtcbiAgICAgICAgICAvL21hbmFnZXJzLmZvckVhY2gobWFuYWdlciA9PiBtYW5hZ2VyLmNsZWFudXAoKSk7XG4gICAgICAgICAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgYmVmb3JlIHdlIHN0YXJ0ZWQgc3RyZWFtaW5nLCB3ZSBzZXQgdGhlIGVycm9yIGNvZGUgYXBwcm9wcmlhdGVseS5cbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGRpZEVycm9yID8gNTAwIDogMjAwO1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2hlbGxFcnJvcigpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yKGU6IGFueSkge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIC8vcGlwZShyZXMpOyBSZW1vdmluZyB0aGlzIGF2b2lkcywgXCJSZWFjdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBwaXBpbmcgdG8gb25lIHdyaXRhYmxlIHN0cmVhbS5cIlxuICAgICAgICAgIGlmIChvbkVycm9yKSBvbkVycm9yKGUpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICAvLyBBYmFuZG9uIGFuZCBzd2l0Y2ggdG8gY2xpZW50IHJlbmRlcmluZyBpZiBlbm91Z2ggdGltZSBwYXNzZXMuXG4gICAgICAvLyBUcnkgbG93ZXJpbmcgdGhpcyB0byBzZWUgdGhlIGNsaWVudCByZWNvdmVyLlxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4gKGFib3J0IGFzIGFueSkoYFRpbWVvdXQgb2YgJHt0aW1lb3V0TVN9bXMgZXhjZWVkZWRgKSxcbiAgICAgICAgdGltZW91dE1TLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBpZiAob25FcnJvcikgb25FcnJvcihlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xuICByZXR1cm4gcmVuZGVyO1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJleHBvcnQgaW50ZXJmYWNlIFBvbGljeSB7XG4gIFtkaXJlY3RpdmU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG4vLyBUT0RPOiBtZW1vaXplIHRoaXNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbGljeShwb2xpY3lPYmo6IFBvbGljeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocG9saWN5T2JqKVxuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9XG4gICAgICAgIEFycmF5LmlzQXJyYXkocG9saWN5T2JqW2tleV0pID9cbiAgICAgICAgICBbLi4ubmV3IFNldChwb2xpY3lPYmpba2V5XSkudmFsdWVzKCldLmZpbHRlcih2ID0+IHYpLmpvaW4oJyAnKVxuICAgICAgICA6IHBvbGljeU9ialtrZXldO1xuXG4gICAgICAvLyBtb3ZlIHN0cmljdCBkeW5hbWljIHRvIHRoZSBlbmQgb2YgdGhlIHBvbGljeSBpZiBpdCBleGlzdHMgdG8gYmUgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBjc3AyXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1TZWN1cml0eS1Qb2xpY3kvc2NyaXB0LXNyYyNzdHJpY3QtZHluYW1pY1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC5pbmNsdWRlcyhcIidzdHJpY3QtZHluYW1pYydcIikpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsID0gYCR7dmFsXG4gICAgICAgICAgLnJlcGxhY2UoL1xccz8nc3RyaWN0LWR5bmFtaWMnXFxzPy9naSwgJyAnKVxuICAgICAgICAgIC50cmltKCl9ICdzdHJpY3QtZHluYW1pYydgO1xuICAgICAgICByZXR1cm4gYCR7a2V5fSAke25ld1ZhbH1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7a2V5fSAke3ZhbH1gO1xuICAgIH0pXG4gICAgLmpvaW4oJzsgJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luTm9uY2UocG9saWN5T2JqOiBQb2xpY3ksIG5vbmNlPzogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGlmICghbm9uY2UpIHJldHVybiBwb2xpY3lPYmo7XG4gIGNvbnN0IHBvbGljeSA9IHtcbiAgICAuLi5wb2xpY3lPYmosXG4gIH07XG4gIGlmICh0eXBlb2YgcG9saWN5WydzY3JpcHQtc3JjJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgcG9saWN5WydzY3JpcHQtc3JjJ10gPSBbcG9saWN5WydzY3JpcHQtc3JjJ10sIGAnbm9uY2UtJHtub25jZX0nYF07XG4gIH0gZWxzZSB7XG4gICAgcG9saWN5WydzY3JpcHQtc3JjJ10gPSBbLi4ucG9saWN5WydzY3JpcHQtc3JjJ10sIGAnbm9uY2UtJHtub25jZX0nYF07XG4gIH1cbiAgcmV0dXJuIHBvbGljeTtcbn1cbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7IiwidHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYXNzZXRzOiB7IGhyZWY6IHN0cmluZzsgYXM/OiBzdHJpbmc7IHJlbD86IHN0cmluZyB9W107XG4gIGhlYWQ/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGV4dHJhU3R5bGU6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgcm9vdElkPzogc3RyaW5nO1xuICBjaGFyU2V0Pzogc3RyaW5nO1xuICBsYW5nPzogc3RyaW5nO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50KHtcbiAgYXNzZXRzLFxuICBoZWFkID0gZGVmYXVsdEhlYWQsXG4gIGNoaWxkcmVuLFxuICB0aXRsZSxcbiAgcm9vdElkID0gJ2FuYW5zaS1yb290JyxcbiAgY2hhclNldCA9ICd1dGYtOCcsXG4gIHNjcmlwdHMgPSBudWxsLFxuICBleHRyYVN0eWxlLFxuICBsYW5nLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aHRtbCBsYW5nPXtsYW5nfT5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyU2V0PXtjaGFyU2V0fSAvPlxuICAgICAgICB7aGVhZH1cbiAgICAgICAge2V4dHJhU3R5bGV9XG4gICAgICAgIHthc3NldHMubWFwKChhc3NldCwgaSkgPT4gKFxuICAgICAgICAgIDxsaW5rIGtleT17aX0gcmVsPVwicHJlbG9hZFwiIHsuLi5hc3NldH0gLz5cbiAgICAgICAgKSl9XG4gICAgICAgIDx0aXRsZT57dGl0bGV9PC90aXRsZT5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPXtyb290SWR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAge3NjcmlwdHN9XG4gICAgICAgIHthc3NldHNcbiAgICAgICAgICAuZmlsdGVyKCh7IGhyZWYgfSkgPT4gaHJlZi5lbmRzV2l0aCgnLmpzJykpXG4gICAgICAgICAgLm1hcCgoeyBocmVmIH0sIGkpID0+IChcbiAgICAgICAgICAgIDxzY3JpcHQga2V5PXtpfSBzcmM9e2hyZWZ9IGFzeW5jIC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuY29uc3QgZGVmYXVsdEhlYWQgPSAoXG4gIDw+XG4gICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCIgLz5cbiAgICA8bGlua1xuICAgICAgcmVsPVwic2hvcnRjdXQgaWNvblwiXG4gICAgICBocmVmPXtgJHtwcm9jZXNzLmVudi5XRUJQQUNLX1BVQkxJQ19QQVRIID8/ICcvJ31mYXZpY29uLmljb2B9XG4gICAgLz5cbiAgPC8+XG4pO1xuIiwiaW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gJ0BhbmFuc2kvcm91dGVyJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTdGF0c0NodW5rR3JvdXAgfSBmcm9tICd3ZWJwYWNrJztcblxuaW1wb3J0IHsgYnVpbGRQb2xpY3ksIGpvaW5Ob25jZSwgUG9saWN5IH0gZnJvbSAnLi9jc3AuanMnO1xuaW1wb3J0IERvY3VtZW50IGZyb20gJy4vRG9jdW1lbnRDb21wb25lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPGFueT5bXTtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbiAgZXh0cmFTdHlsZT86IFJlYWN0LlJlYWN0Tm9kZVtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnRTcG91dChvcHRpb25zOiB7XG4gIGhlYWQ/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGxhbmc/OiBzdHJpbmc7XG4gIHJvb3RJZD86IHN0cmluZztcbiAgY2hhclNldD86IHN0cmluZztcbiAgY3NQb2xpY3k/OiBQb2xpY3k7XG59KTogU2VydmVyU3BvdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBOZWVkZWROZXh0PiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHB1YmxpY1BhdGggPSBwcm9wcy5jbGllbnRNYW5pZmVzdC5wdWJsaWNQYXRoO1xuXG4gICAgaWYgKFxuICAgICAgT2JqZWN0LmtleXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5sZW5ndGggPCAxIHx8XG4gICAgICBwdWJsaWNQYXRoID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbmlmZXN0IG1pc3NpbmcgZW50cmllcyBuZWVkZWQnKTtcblxuICAgIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIHRoaXMgcGFja2FnZSBmb3IgYnVpbGQgc3RhdHMgaW4gZnV0dXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC90cmVlL21haW4vcGFja2FnZXMvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrXG4gICAgY29uc3QgYXNzZXRNYXAgPSAoYXNzZXRzOiB7IG5hbWU6IHN0cmluZzsgc2l6ZT86IG51bWJlciB9W10pID0+XG4gICAgICBhc3NldHMubWFwKCh7IG5hbWUgfSkgPT4gYCR7cHVibGljUGF0aH0ke25hbWV9YCk7XG5cbiAgICBjb25zdCBhc3NldExpc3Q6IHN0cmluZ1tdID0gW107XG4gICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdD8uZW50cnlwb2ludHMgPz8ge30pLmZvckVhY2goXG4gICAgICBlbnRyeXBvaW50ID0+IHtcbiAgICAgICAgYXNzZXRMaXN0LnB1c2goLi4uYXNzZXRNYXAoZW50cnlwb2ludC5hc3NldHMgPz8gW10pKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICBuZXcgU2V0KFxuICAgICAgYXNzZXRNYXAoXG4gICAgICAgIE9iamVjdC52YWx1ZXMocHJvcHMuY2xpZW50TWFuaWZlc3QubmFtZWRDaHVua0dyb3VwcyA/PyB7fSlcbiAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT5cbiAgICAgICAgICAgIG5leHRQcm9wcy5tYXRjaGVkUm91dGVzLnNvbWUocm91dGUgPT4gbmFtZT8uaW5jbHVkZXMocm91dGUubmFtZSkpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuZmxhdE1hcChjaHVuayA9PiBbXG4gICAgICAgICAgICAuLi4oY2h1bmsuYXNzZXRzID8/IFtdKSxcbiAgICAgICAgICAgIC8vIGFueSBjaHVuayBwcmVsb2Fkc1xuICAgICAgICAgICAgLi4uY2hpbGRyZW5Bc3NldHMoY2h1bmspLFxuICAgICAgICAgIF0pLFxuICAgICAgKSxcbiAgICApLmZvckVhY2goYXNzZXQgPT4gYXNzZXRMaXN0LnB1c2goYXNzZXQpKTtcblxuICAgIC8vIGZpbmQgYWRkaXRpb25hbCBhc3NldHMgdG8gcHJlbG9hZCBiYXNlZCBvbiBtYXRjaGVkIHJvdXRlXG4gICAgY29uc3QgYXNzZXRzOiB7XG4gICAgICBocmVmOiBzdHJpbmc7XG4gICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB9W10gPSBhc3NldExpc3RcbiAgICAgIC5maWx0ZXIoYXNzZXQgPT4gIWFzc2V0LmVuZHNXaXRoKCcuaG90LXVwZGF0ZS5qcycpKVxuICAgICAgLm1hcChhc3NldCA9PlxuICAgICAgICBhc3NldC5lbmRzV2l0aCgnLmNzcycpID8geyBocmVmOiBhc3NldCwgcmVsOiAnc3R5bGVzaGVldCcgfVxuICAgICAgICA6IGFzc2V0LmVuZHNXaXRoKCcuanMnKSA/IHsgaHJlZjogYXNzZXQsIGFzOiAnc2NyaXB0JyB9XG4gICAgICAgIDogeyBocmVmOiBhc3NldCB9LFxuICAgICAgKTtcblxuICAgIGlmIChvcHRpb25zLmNzUG9saWN5KSB7XG4gICAgICBjb25zdCBodHRwRXF1aXYgPVxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID9cbiAgICAgICAgICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3knXG4gICAgICAgIDogJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JztcblxuICAgICAgcHJvcHMucmVzLnNldEhlYWRlcihcbiAgICAgICAgaHR0cEVxdWl2LFxuICAgICAgICBidWlsZFBvbGljeShqb2luTm9uY2Uob3B0aW9ucy5jc1BvbGljeSwgcHJvcHMubm9uY2UpKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGFwcDogKFxuICAgICAgICA8RG9jdW1lbnRcbiAgICAgICAgICB7Li4ub3B0aW9uc31cbiAgICAgICAgICBleHRyYVN0eWxlPXtuZXh0UHJvcHMuZXh0cmFTdHlsZX1cbiAgICAgICAgICB0aXRsZT17bmV4dFByb3BzLnRpdGxlID8/IG9wdGlvbnMudGl0bGV9XG4gICAgICAgICAgYXNzZXRzPXthc3NldHN9XG4gICAgICAgICAgcm9vdElkPXtvcHRpb25zLnJvb3RJZH1cbiAgICAgICAgICBzY3JpcHRzPXtuZXh0UHJvcHMuc2NyaXB0c31cbiAgICAgICAgPlxuICAgICAgICAgIHtuZXh0UHJvcHMuYXBwfVxuICAgICAgICA8L0RvY3VtZW50PlxuICAgICAgKSxcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbkFzc2V0cyhjaHVuazogU3RhdHNDaHVua0dyb3VwKSB7XG4gIHJldHVybiBjaHVuay5jaGlsZHJlbiA/XG4gICAgICBPYmplY3QudmFsdWVzKGNodW5rLmNoaWxkcmVuKS5mbGF0TWFwKHByZWxvYWQgPT5cbiAgICAgICAgcHJlbG9hZC5mbGF0TWFwKGMgPT4gYy5hc3NldHMgPz8gW10pLFxuICAgICAgKVxuICAgIDogW107XG59XG4iLCJpbXBvcnQge1xuICB0eXBlIENvbnRyb2xsZXIsXG4gIHR5cGUgTWFuYWdlcixcbiAgdHlwZSBTdGF0ZSxcbiAgdHlwZSBTdG9yZSxcbn0gZnJvbSAnQGRhdGEtY2xpZW50L3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkYXRhQ2xpZW50U3BvdXQoXG4gIG9wdGlvbnM6IHtcbiAgICBnZXRNYW5hZ2Vycz86ICgpID0+IE1hbmFnZXJbXTtcbiAgfSA9IHt9LFxuKTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB7IGNvbnRyb2xsZXI6IENvbnRyb2xsZXIgfSAmIHsgc3RvcmU6IFN0b3JlPFN0YXRlPHVua25vd24+PiB9LFxuICB7IGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47IHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXSB9XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG1hbmFnZXJzID0gb3B0aW9ucz8uZ2V0TWFuYWdlcnM/LigpID8/IFtcbiAgICAgIG5ldyAoYXdhaXQgaW1wb3J0KCdAZGF0YS1jbGllbnQvcmVhY3QnKSkuTmV0d29ya01hbmFnZXIoKSxcbiAgICBdO1xuICAgIGNvbnN0IHsgY3JlYXRlUGVyc2lzdGVkU3RvcmUgfSA9IGF3YWl0IGltcG9ydCgnQGRhdGEtY2xpZW50L3JlYWN0L3NzcicpO1xuICAgIGNvbnN0IFtTZXJ2ZXJEYXRhUHJvdmlkZXIsIHVzZVJlYWR5Q2FjaGVTdGF0ZSwgY29udHJvbGxlciwgc3RvcmVdID1cbiAgICAgIGNyZWF0ZVBlcnNpc3RlZFN0b3JlKG1hbmFnZXJzKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgc3RvcmUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGluaXREYXRhOiB7XG4gICAgICAgIC4uLm5leHRQcm9wcy5pbml0RGF0YSxcbiAgICAgICAgZGF0YWNsaWVudDogdXNlUmVhZHlDYWNoZVN0YXRlLFxuICAgICAgfSxcbiAgICAgIGFwcDogPFNlcnZlckRhdGFQcm92aWRlcj57bmV4dFByb3BzLmFwcH08L1NlcnZlckRhdGFQcm92aWRlcj4sXG4gICAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byBvbmx5IGluamVjdCBpbiBuZXh0IGFuZCBub3QgaGF2ZSB0byBhbHNvIHB1dCBoZXJlXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgc3RvcmUsXG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbiAgZXh0cmFTdHlsZT86IFJlYWN0LlJlYWN0Tm9kZVtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYW50ZFNwb3V0KCk6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIE5lZWRlZE5leHRcbj4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBjcmVhdGVDYWNoZSwgZXh0cmFjdFN0eWxlLCBTdHlsZVByb3ZpZGVyIH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgICAvKiB3ZWJwYWNrSWdub3JlOiB0cnVlICovICdAYW50LWRlc2lnbi9jc3NpbmpzJ1xuICAgICk7XG4gICAgY29uc3QgY2FjaGUgPSBjcmVhdGVDYWNoZSgpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IG5leHRQcm9wcy5zY3JpcHRzID8/IFtdO1xuXG4gICAgY29uc3QgQW50ZFNoZWV0cyA9ICgpOiBKU1guRWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogYDwvc2NyaXB0PiR7ZXh0cmFjdFN0eWxlKGNhY2hlKX08c2NyaXB0PmAsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfTtcbiAgICAvLyB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gaW5qZWN0IHRoaXMgYWZ0ZXIgdGhlIGVudGlyZSBjb250ZW50IGhhcyBzdHJlYW1lZCBpbiBvciBpdCBkb2Vzbid0IGNvcnJlY3RseSBwb3B1bGF0ZVxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vY3NzaW5qcy9pc3N1ZXMvNzlcbiAgICBzY3JpcHRzLnB1c2goPEFudGRTaGVldHMgLz4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGFwcDogPFN0eWxlUHJvdmlkZXIgY2FjaGU9e2NhY2hlfT57bmV4dFByb3BzLmFwcH08L1N0eWxlUHJvdmlkZXI+LFxuICAgICAgc2NyaXB0cyxcbiAgICB9O1xuICB9O1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJAYW5hbnNpL3JvdXRlclwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImhpc3RvcnlcIik7IiwiaW1wb3J0IHsgUm91dGUsIFJvdXRlUHJvdmlkZXIsIFJvdXRlQ29udHJvbGxlciB9IGZyb20gJ0BhbmFuc2kvcm91dGVyJztcbmltcG9ydCB7IGNyZWF0ZU1lbW9yeUhpc3RvcnkgfSBmcm9tICdoaXN0b3J5JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgQ3JlYXRlUm91dGVyLCBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByb3V0ZXJTcG91dDxSZXNvbHZlV2l0aD4ob3B0aW9uczoge1xuICByZXNvbHZlV2l0aD86IGFueTtcbiAgdXNlUmVzb2x2ZVdpdGg6ICgpID0+IFJlc29sdmVXaXRoO1xuICBjcmVhdGVSb3V0ZXI6IENyZWF0ZVJvdXRlcjxSZXNvbHZlV2l0aD47XG59KTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB7XG4gICAgbWF0Y2hlZFJvdXRlczogUm91dGU8UmVzb2x2ZVdpdGg+W107XG4gICAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG4gIH0gJiB7XG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+O1xuICB9XG4+IHtcbiAgY29uc3QgY3JlYXRlUm91dGVDb21wb25lbnQgPSAoXG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+LFxuICApID0+XG4gICAgZnVuY3Rpb24gUm91dGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0pIHtcbiAgICAgIGNvbnN0IHJlc29sdmVXaXRoID0gb3B0aW9ucy51c2VSZXNvbHZlV2l0aCgpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Um91dGVQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gcmVzb2x2ZVdpdGg9e3Jlc29sdmVXaXRofT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvUm91dGVQcm92aWRlcj5cbiAgICAgICk7XG4gICAgfTtcblxuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgdXJsID0gcHJvcHMucmVxLnVybCB8fCAnJztcbiAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnPycsIDIpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFydHMubGVuZ3RoIDwgMiA/ICcnIDogcGFydHNbMV0pO1xuICAgIGNvbnN0IHJvdXRlciA9IG9wdGlvbnMuY3JlYXRlUm91dGVyKFxuICAgICAgY3JlYXRlTWVtb3J5SGlzdG9yeSh7IGluaXRpYWxFbnRyaWVzOiBbdXJsXSB9KSxcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoPltdID0gcm91dGVyLmdldE1hdGNoZWRSb3V0ZXModXJsKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBtYXRjaGVkUm91dGVzLFxuICAgICAgcm91dGVyLFxuICAgICAgc2VhcmNoUGFyYW1zLFxuICAgIH0pO1xuXG4gICAgY29uc3QgUm91dGVyID0gY3JlYXRlUm91dGVDb21wb25lbnQocm91dGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IDxSb3V0ZXI+e25leHRQcm9wcy5hcHB9PC9Sb3V0ZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5cbmltcG9ydCB0eXBlIHsgUmVzb2x2ZVByb3BzLCBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZFByb3BzPFJvdXRlV2l0aD4gPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJvdXRlV2l0aD5bXTtcbiAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG59ICYgUmVzb2x2ZVByb3BzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcmVmZXRjaFNwb3V0PEYgZXh0ZW5kcyBzdHJpbmc+KGZpZWxkOiBGKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8XG4gICAgUm91dGVXaXRoLFxuICAgIE4gZXh0ZW5kcyBOZWVkZWRQcm9wczxSb3V0ZVdpdGg+LFxuICAgIEkgZXh0ZW5kcyBTZXJ2ZXJQcm9wcyxcbiAgPihcbiAgICBuZXh0OiAocHJvcHM6IEkpID0+IFByb21pc2U8XG4gICAgICB7XG4gICAgICAgIFtLIGluIEZdOiBSb3V0ZVdpdGg7XG4gICAgICB9ICYgTlxuICAgID4sXG4gICkge1xuICAgIHJldHVybiBhc3luYyAocHJvcHM6IEkpID0+IHtcbiAgICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b0ZldGNoOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcbiAgICAgICAgbmV4dFByb3BzLm1hdGNoZWRSb3V0ZXMuZm9yRWFjaChyb3V0ZSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5yZXNvbHZlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdG9GZXRjaC5wdXNoKFxuICAgICAgICAgICAgICByb3V0ZS5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHNbZmllbGRdLFxuICAgICAgICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcy5zZWFyY2hQYXJhbXMsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRvRmV0Y2gpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHRQcm9wcztcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFN1c3BlbnNlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgaW5pdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB1bmtub3duPjtcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSlNPTlNwb3V0KHtcbiAgaWQgPSAnYW5hbnNpLWpzb24nLFxufTogeyBpZD86IHN0cmluZyB9ID0ge30pOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBOZWVkZWROZXh0XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgY29uc3Qgc2NyaXB0czogUmVhY3QuUmVhY3ROb2RlW10gPSBuZXh0UHJvcHMuc2NyaXB0cyA/PyBbXTtcblxuICAgIE9iamVjdC5lbnRyaWVzKG5leHRQcm9wcy5pbml0RGF0YSA/PyB7fSkuZm9yRWFjaCgoW2tleSwgdXNlRGF0YV0pID0+IHtcbiAgICAgIGNvbnN0IGdsb2JhbElkID0gYCR7aWR9LiR7a2V5fWA7XG4gICAgICBjb25zdCBTY3JpcHQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHVzZURhdGEoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBlbmNvZGVkID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzY3JpcHRcbiAgICAgICAgICAgICAgaWQ9e2dsb2JhbElkfVxuICAgICAgICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgICAgX19odG1sOiBlbmNvZGVkLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBub25jZT17cHJvcHMubm9uY2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgdW5pZmllZCBsb2dnaW5nXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igc2VyaWFsaXppbmcganNvbiBmb3IgJHtrZXl9YCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNjcmlwdHMucHVzaChcbiAgICAgICAgPFN1c3BlbnNlIGtleT17Z2xvYmFsSWR9PlxuICAgICAgICAgIDxTY3JpcHQgLz5cbiAgICAgICAgPC9TdXNwZW5zZT4sXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIHNjcmlwdHMsXG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jb25zdCBhcHBTcG91dCA9XG4gIChhcHA6IEpTWC5FbGVtZW50KSA9PlxuICA8UCBleHRlbmRzIFNlcnZlclByb3BzPihwcm9wczogUCkgPT5cbiAgICBQcm9taXNlLnJlc29sdmUoeyAuLi5wcm9wcywgYXBwIH0pO1xuXG5leHBvcnQgZGVmYXVsdCBhcHBTcG91dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgbGF5U3BvdXRzIH0gZnJvbSAnLi9sYXlTcG91dHMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvZG9jdW1lbnQuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGF0YUNsaWVudFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvZGF0YUNsaWVudC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhbnRkU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9hbnRkLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJvdXRlclNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcm91dGVyLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByZWZldGNoU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9wcmVmZXRjaC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBKU09OU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9qc29uLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFwcFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvYXBwLnNlcnZlci5qcyc7XG5leHBvcnQgdHlwZSB7IFNlcnZlclByb3BzIH0gZnJvbSAnLi9zcG91dHMvdHlwZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCBhcyBTcG91dCB9IGZyb20gJy4vc3BvdXRzL3R5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NyaXB0cy90eXBlcy5qcyc7XG4iXSwibmFtZXMiOlsiY3J5cHRvIiwicmVuZGVyVG9QaXBlYWJsZVN0cmVhbSIsInJlYWN0UmVuZGVyIiwibGF5U3BvdXRzIiwic3BvdXRzIiwidGltZW91dE1TIiwib25FcnJvciIsInJlbmRlciIsImNsaWVudE1hbmlmZXN0IiwicmVxIiwicmVzIiwibm9uY2UiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiYXBwIiwiZGlkRXJyb3IiLCJwaXBlIiwiYWJvcnQiLCJvblNoZWxsUmVhZHkiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwib25TaGVsbEVycm9yIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsInNldFRpbWVvdXQiLCJidWlsZFBvbGljeSIsInBvbGljeU9iaiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJTZXQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJ2Iiwiam9pbiIsImluY2x1ZGVzIiwibmV3VmFsIiwicmVwbGFjZSIsInRyaW0iLCJqb2luTm9uY2UiLCJwb2xpY3kiLCJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJkZWZhdWx0SGVhZCIsImNoaWxkcmVuIiwidGl0bGUiLCJyb290SWQiLCJjaGFyU2V0Iiwic2NyaXB0cyIsImV4dHJhU3R5bGUiLCJsYW5nIiwiX2pzeHMiLCJfanN4IiwiYXNzZXQiLCJpIiwicmVsIiwiaWQiLCJocmVmIiwiZW5kc1dpdGgiLCJzcmMiLCJhc3luYyIsIl9GcmFnbWVudCIsIm5hbWUiLCJjb250ZW50IiwicHJvY2VzcyIsImVudiIsIldFQlBBQ0tfUFVCTElDX1BBVEgiLCJSZWFjdCIsImpzeCIsIkRvY3VtZW50U3BvdXQiLCJvcHRpb25zIiwibmV4dCIsInByb3BzIiwibmV4dFByb3BzIiwicHVibGljUGF0aCIsImVudHJ5cG9pbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJhc3NldE1hcCIsImFzc2V0TGlzdCIsImZvckVhY2giLCJlbnRyeXBvaW50IiwicHVzaCIsIm5hbWVkQ2h1bmtHcm91cHMiLCJtYXRjaGVkUm91dGVzIiwic29tZSIsInJvdXRlIiwiZmxhdE1hcCIsImNodW5rIiwiY2hpbGRyZW5Bc3NldHMiLCJhcyIsImNzUG9saWN5IiwiaHR0cEVxdWl2IiwiTk9ERV9FTlYiLCJwcmVsb2FkIiwiYyIsImRhdGFDbGllbnRTcG91dCIsIm1hbmFnZXJzIiwiZ2V0TWFuYWdlcnMiLCJOZXR3b3JrTWFuYWdlciIsImNyZWF0ZVBlcnNpc3RlZFN0b3JlIiwiU2VydmVyRGF0YVByb3ZpZGVyIiwidXNlUmVhZHlDYWNoZVN0YXRlIiwiY29udHJvbGxlciIsInN0b3JlIiwiaW5pdERhdGEiLCJkYXRhY2xpZW50IiwiYW50ZFNwb3V0IiwiY3JlYXRlQ2FjaGUiLCJleHRyYWN0U3R5bGUiLCJTdHlsZVByb3ZpZGVyIiwiY2FjaGUiLCJBbnRkU2hlZXRzIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJSb3V0ZVByb3ZpZGVyIiwiY3JlYXRlTWVtb3J5SGlzdG9yeSIsInJvdXRlclNwb3V0IiwiY3JlYXRlUm91dGVDb21wb25lbnQiLCJyb3V0ZXIiLCJSb3V0ZXIiLCJyZXNvbHZlV2l0aCIsInVzZVJlc29sdmVXaXRoIiwidXJsIiwicGFydHMiLCJzcGxpdCIsInNlYXJjaFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImNyZWF0ZVJvdXRlciIsImluaXRpYWxFbnRyaWVzIiwiZ2V0TWF0Y2hlZFJvdXRlcyIsInByZWZldGNoU3BvdXQiLCJmaWVsZCIsInRvRmV0Y2giLCJyZXNvbHZlRGF0YSIsIlByb21pc2UiLCJhbGwiLCJTdXNwZW5zZSIsIkpTT05TcG91dCIsImVudHJpZXMiLCJ1c2VEYXRhIiwiZ2xvYmFsSWQiLCJTY3JpcHQiLCJkYXRhIiwiZW5jb2RlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0eXBlIiwiYXBwU3BvdXQiLCJyZXNvbHZlIiwiZGVmYXVsdCIsImRvY3VtZW50U3BvdXQiXSwic291cmNlUm9vdCI6IiJ9
|
|
@@ -2,10 +2,9 @@ import { hydrateRoot } from 'react-dom/client';
|
|
|
2
2
|
export default async function floodSpouts(spouts, {
|
|
3
3
|
rootId = 'anansi-root'
|
|
4
4
|
} = {}) {
|
|
5
|
-
var _document$getElementB;
|
|
6
5
|
const {
|
|
7
6
|
app
|
|
8
7
|
} = await spouts({});
|
|
9
|
-
hydrateRoot(
|
|
8
|
+
hydrateRoot(document.getElementById(rootId) ?? document, app);
|
|
10
9
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoeWRyYXRlUm9vdCIsImZsb29kU3BvdXRzIiwic3BvdXRzIiwicm9vdElkIiwiYXBwIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mbG9vZFNwb3V0cy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBoeWRyYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBmbG9vZFNwb3V0cyhcbiAgc3BvdXRzOiAocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBQcm9taXNlPHtcbiAgICBhcHA6IEpTWC5FbGVtZW50O1xuICB9PixcbiAgeyByb290SWQgPSAnYW5hbnNpLXJvb3QnIH06IHsgcm9vdElkPzogc3RyaW5nIH0gPSB7fSxcbikge1xuICBjb25zdCB7IGFwcCB9ID0gYXdhaXQgc3BvdXRzKHt9KTtcblxuICBoeWRyYXRlUm9vdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyb290SWQpID8/IGRvY3VtZW50LCBhcHApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxXQUFXLFFBQVEsa0JBQWtCO0FBRTlDLGVBQWUsZUFBZUMsV0FBV0EsQ0FDdkNDLE1BRUUsRUFDRjtFQUFFQyxNQUFNLEdBQUc7QUFBbUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNwRDtFQUNBLE1BQU07SUFBRUM7RUFBSSxDQUFDLEdBQUcsTUFBTUYsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRWhDRixXQUFXLENBQUNLLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDSCxNQUFNLENBQUMsSUFBSUUsUUFBUSxFQUFFRCxHQUFHLENBQUM7QUFDL0QiLCJpZ25vcmVMaXN0IjpbXX0=
|