@rentman/rm-core 1.1.3 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/rm-core.js CHANGED
@@ -1799,7 +1799,7 @@ var CollectionHandler_CollectionHandler = /** @class */ (function () {
1799
1799
  }
1800
1800
  };
1801
1801
  CollectionHandler.prototype.getCollectionMatcher = function () {
1802
- return this.collectionMatcherFactory.construct([this.entries], true);
1802
+ return this.collectionMatcherFactory.construct([this.entries], true, true);
1803
1803
  };
1804
1804
  /**
1805
1805
  * @deprecated, use collectionMatcherFactory
@@ -2081,10 +2081,11 @@ var CollectionHandler_CollectionHandler = /** @class */ (function () {
2081
2081
  // CONCATENATED MODULE: ./src/classes/CollectionMatcher.ts
2082
2082
 
2083
2083
  var CollectionMatcher_CollectionMatcher = /** @class */ (function () {
2084
- function CollectionMatcher(queryMatcherFactory, collectionCaches, updateInitial) {
2084
+ function CollectionMatcher(queryMatcherFactory, collectionCaches, updateInitial, callOnActivate) {
2085
2085
  this.queryMatcherFactory = queryMatcherFactory;
2086
2086
  this.collectionCaches = collectionCaches;
2087
2087
  this.updateInitial = updateInitial;
2088
+ this.callOnActivate = callOnActivate;
2088
2089
  this.map = {};
2089
2090
  }
2090
2091
  CollectionMatcher.prototype.expand = function (itemEntry) {
@@ -2129,10 +2130,12 @@ var CollectionMatcher_CollectionMatcher = /** @class */ (function () {
2129
2130
  var fittingItemEntries = groupedItemEntries.fitting;
2130
2131
  if (collectionEntry.isDeferred())
2131
2132
  continue;
2132
- if (resultResource !== null && collectionEntry === resultResource.entry)
2133
- result = collectionEntry.addItems(fittingItemEntries, resultResource, this.updateInitial);
2134
- else
2135
- collectionEntry.addItems(fittingItemEntries, null, this.updateInitial);
2133
+ if (resultResource !== null && collectionEntry === resultResource.entry) {
2134
+ result = collectionEntry.addItems(fittingItemEntries, resultResource, this.updateInitial, true, this.callOnActivate);
2135
+ }
2136
+ else {
2137
+ collectionEntry.addItems(fittingItemEntries, null, this.updateInitial, true, this.callOnActivate);
2138
+ }
2136
2139
  if (this.updateInitial && groupedItemEntries.maybe.length > 0)
2137
2140
  collectionEntry.extend(identity, null, true, this.updateInitial);
2138
2141
  }
@@ -2157,9 +2160,9 @@ var CollectionMatcher_CollectionMatcher = /** @class */ (function () {
2157
2160
  var mapEntry = this.map[collectionId];
2158
2161
  var collectionEntry = mapEntry.collection;
2159
2162
  var groupedItemEntries = this.groupItemEntries(mapEntry.matches);
2160
- collectionEntry.removeItems(groupedItemEntries.notFitting, null, true);
2163
+ collectionEntry.removeItems(groupedItemEntries.notFitting, null, this.updateInitial);
2161
2164
  // doesn't do anything with initial
2162
- collectionEntry.addItems(groupedItemEntries.fitting, null, true);
2165
+ collectionEntry.addItems(groupedItemEntries.fitting, null, this.updateInitial);
2163
2166
  if (groupedItemEntries.maybe.length > 0)
2164
2167
  collectionEntry.extend(identity, null, true, this.updateInitial);
2165
2168
  }
@@ -3153,7 +3156,7 @@ var CreateRequest_CreateRequest = /** @class */ (function () {
3153
3156
  },
3154
3157
  columns: this.requestColumnExpansionFactory.construct(),
3155
3158
  items: {},
3156
- collections: this.collectionMatcherFactory.construct([this.localCollectionCache, this.collectionHandler.entries], true)
3159
+ collections: this.collectionMatcherFactory.construct([this.localCollectionCache, this.collectionHandler.entries], true, false)
3157
3160
  };
3158
3161
  };
3159
3162
  CreateRequest.prototype.extendRequest = function (itemEntries, requestParentId, destination) {
@@ -3244,7 +3247,7 @@ var ItemAdministrator_ItemAdministrator = /** @class */ (function () {
3244
3247
  };
3245
3248
  ItemAdministrator.prototype.getCollectionMatcher = function (itemEntries, addToTab) {
3246
3249
  var localCache = this.getLocalCache();
3247
- var collectionMatcher = this.collectionMatcherFactory.construct([localCache.collections], false);
3250
+ var collectionMatcher = this.collectionMatcherFactory.construct([localCache.collections], false, true);
3248
3251
  for (var _i = 0, itemEntries_1 = itemEntries; _i < itemEntries_1.length; _i++) {
3249
3252
  var itemEntry = itemEntries_1[_i];
3250
3253
  // this is only relevant if there are no collections to add the item to, but we still want to save the item
@@ -3450,7 +3453,7 @@ var ItemAdministrator_ItemAdministrator = /** @class */ (function () {
3450
3453
  var itemEntries = entry.itemEntries;
3451
3454
  var collectionMatcher = void 0;
3452
3455
  if (addToCollections)
3453
- collectionMatcher = this.collectionMatcherFactory.construct([localCache.collections], false);
3456
+ collectionMatcher = this.collectionMatcherFactory.construct([localCache.collections], false, false);
3454
3457
  itemResources[itemType] = [];
3455
3458
  for (var _a = 0, itemEntries_3 = itemEntries; _a < itemEntries_3.length; _a++) {
3456
3459
  var itemEntry = itemEntries_3[_a];
@@ -3523,6 +3526,7 @@ var ItemAdministrator_ItemAdministrator = /** @class */ (function () {
3523
3526
 
3524
3527
  // CONCATENATED MODULE: ./src/models/CollectionEntry.ts
3525
3528
 
3529
+
3526
3530
  var CollectionEntry_currentId = 0;
3527
3531
  var CollectionEntry_CollectionEntry = /** @class */ (function () {
3528
3532
  function CollectionEntry(collectionEntryFactory, collectionEntryService, errorHandler, itemEntryService, itemRequestService, keyService, promiseService, queryService, itemType, options) {
@@ -3595,9 +3599,10 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
3595
3599
  if (accumulator === void 0) { accumulator = []; }
3596
3600
  return this.collectionEntryService.getIdArray(this.items, accumulator);
3597
3601
  };
3598
- CollectionEntry.prototype.addItems = function (itemEntries, resultResource, updateInitial, enableCallback) {
3602
+ CollectionEntry.prototype.addItems = function (itemEntries, resultResource, updateInitial, callOnAdd, callOnActivate) {
3599
3603
  if (updateInitial === void 0) { updateInitial = false; }
3600
- if (enableCallback === void 0) { enableCallback = true; }
3604
+ if (callOnAdd === void 0) { callOnAdd = true; }
3605
+ if (callOnActivate === void 0) { callOnActivate = true; }
3601
3606
  // local entry might be added multiple times (extend?)
3602
3607
  if (itemEntries.length === 0)
3603
3608
  return [];
@@ -3624,6 +3629,9 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
3624
3629
  }
3625
3630
  var modified = this.items;
3626
3631
  var entriesAddedToModified = [];
3632
+ var onActivateItem = callOnActivate && collectionResources.length > 0 ?
3633
+ collectionResources[0].options.onActivateItem :
3634
+ noop;
3627
3635
  for (var _b = 0, itemEntries_2 = itemEntries; _b < itemEntries_2.length; _b++) {
3628
3636
  var itemEntry = itemEntries_2[_b];
3629
3637
  if (modified.indexOf(itemEntry) === -1) {
@@ -3634,6 +3642,7 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
3634
3642
  }
3635
3643
  modified.push(itemEntry);
3636
3644
  entriesAddedToModified.push(itemEntry);
3645
+ onActivateItem(itemEntry);
3637
3646
  }
3638
3647
  }
3639
3648
  if (entriesAddedToModified.length > 0) {
@@ -3643,7 +3652,7 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
3643
3652
  var addedResources = collectionResource.addItemResources(entriesAddedToModified);
3644
3653
  if (collectionResource === resultResource) {
3645
3654
  result = addedResources;
3646
- if (enableCallback)
3655
+ if (callOnAdd)
3647
3656
  collectionResource.callOnAdd(addedResources);
3648
3657
  }
3649
3658
  else
@@ -3721,7 +3730,7 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
3721
3730
  options.queryParams = callback(options.queryParams);
3722
3731
  return this.query = this.collectionEntryService.createQuery(options);
3723
3732
  };
3724
- CollectionEntry.prototype.extend = function (queryCallback, collectionResource, enableCallback, updateInitial) {
3733
+ CollectionEntry.prototype.extend = function (queryCallback, collectionResource, callOnAdd, updateInitial) {
3725
3734
  var _this = this;
3726
3735
  var extendedQuery = this.extendQuery(queryCallback).object;
3727
3736
  var fullQuery = this.queryService.addAndCondition(extendedQuery, this.queryService.createNotIn(this.getIdArray()));
@@ -3735,7 +3744,7 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
3735
3744
  return _this.itemRequestService.processResponse(response, response.links[_this.itemType], _this.parent, _this.columns);
3736
3745
  }, this.errorHandler.reject).then(function (itemEntries) {
3737
3746
  delete _this.promise;
3738
- return _this.addItems(itemEntries, collectionResource, updateInitial, enableCallback);
3747
+ return _this.addItems(itemEntries, collectionResource, updateInitial, callOnAdd, false);
3739
3748
  }, this.errorHandler.reject);
3740
3749
  this.promise = promise.then(function () {
3741
3750
  return _this;
@@ -5495,6 +5504,44 @@ var LocalCache_LocalCache = /** @class */ (function () {
5495
5504
  this.deferredCollections = this.collectionCacheFactory.construct();
5496
5505
  this.items = this.itemCacheFactory.construct();
5497
5506
  }
5507
+ LocalCache.prototype.createItemResource = function (itemEntry, options, isRoot) {
5508
+ var _this = this;
5509
+ if (isRoot === void 0) { isRoot = false; }
5510
+ if (isRoot)
5511
+ this.rootItem = itemEntry;
5512
+ options = this.itemResourceService.processOptions(options);
5513
+ options.onDeactivate = function (_itemEntry) { return _this.onDeactivateItem(_itemEntry); };
5514
+ return this.itemResourceFactory.construct(itemEntry, options);
5515
+ };
5516
+ LocalCache.prototype.createItemResources = function (itemEntries, options) {
5517
+ var result = [];
5518
+ for (var _i = 0, itemEntries_1 = itemEntries; _i < itemEntries_1.length; _i++) {
5519
+ var itemEntry = itemEntries_1[_i];
5520
+ result.push(this.createItemResource(itemEntry, options, false));
5521
+ }
5522
+ return result;
5523
+ };
5524
+ LocalCache.prototype.createCollectionResource = function (collectionEntry, resourceOptions) {
5525
+ var _this = this;
5526
+ resourceOptions.onActivateItem = function (itemEntry) { return _this.onActivateItem(itemEntry); };
5527
+ resourceOptions.onDeactivateItem = function (itemEntry) { return _this.onDeactivateItem(itemEntry); };
5528
+ resourceOptions.onDeactivateCollection =
5529
+ function (_collectionResource) { return _this.clearCollection(_collectionResource); };
5530
+ return this.collectionResourceFactory.construct(collectionEntry, resourceOptions);
5531
+ };
5532
+ LocalCache.prototype.createCollectionResources = function (collectionEntries, resourceOptions) {
5533
+ var result = {};
5534
+ for (var parentId in collectionEntries)
5535
+ result[parentId] = this.createCollectionResource(collectionEntries[parentId], resourceOptions);
5536
+ return result;
5537
+ };
5538
+ LocalCache.prototype.clearItem = function (itemResource) {
5539
+ this.clearItemEntry(itemResource.entry);
5540
+ };
5541
+ LocalCache.prototype.clearItemEntry = function (itemEntry) {
5542
+ this.items.clear(itemEntry);
5543
+ itemEntry.clearResources();
5544
+ };
5498
5545
  LocalCache.prototype.clearCollection = function (collectionResource) {
5499
5546
  var collectionEntry = collectionResource.entry;
5500
5547
  this.collections.clear(collectionEntry);
@@ -5612,40 +5659,8 @@ var LocalCache_LocalCache = /** @class */ (function () {
5612
5659
  this.callbacks[event][key] = callback;
5613
5660
  return function () { return delete _this.callbacks[event][key]; };
5614
5661
  };
5615
- LocalCache.prototype.createItemResource = function (itemEntry, options, isRoot) {
5616
- var _this = this;
5617
- if (isRoot === void 0) { isRoot = false; }
5618
- if (isRoot)
5619
- this.rootItem = itemEntry;
5620
- options = this.itemResourceService.processOptions(options);
5621
- options.onDeactivate = function (_itemEntry) { return _this.onDeactivateItem(_itemEntry); };
5622
- return this.itemResourceFactory.construct(itemEntry, options);
5623
- };
5624
- LocalCache.prototype.createItemResources = function (itemEntries, options) {
5625
- var result = [];
5626
- for (var _i = 0, itemEntries_1 = itemEntries; _i < itemEntries_1.length; _i++) {
5627
- var itemEntry = itemEntries_1[_i];
5628
- result.push(this.createItemResource(itemEntry, options, false));
5629
- }
5630
- return result;
5631
- };
5632
- LocalCache.prototype.createCollectionResource = function (collectionEntry, resourceOptions) {
5633
- var _this = this;
5634
- resourceOptions.onActivateItem = function (itemEntry) { return _this.onActivateItem(itemEntry); };
5635
- resourceOptions.onDeactivateItem = function (itemEntry) { return _this.onDeactivateItem(itemEntry); };
5636
- resourceOptions.onDeactivateCollection =
5637
- function (_collectionResource) { return _this.clearCollection(_collectionResource); };
5638
- return this.collectionResourceFactory.construct(collectionEntry, resourceOptions);
5639
- };
5640
- LocalCache.prototype.createCollectionResources = function (collectionEntries, resourceOptions) {
5641
- var result = {};
5642
- for (var parentId in collectionEntries)
5643
- result[parentId] = this.createCollectionResource(collectionEntries[parentId], resourceOptions);
5644
- return result;
5645
- };
5646
5662
  LocalCache.prototype.onDeactivateItem = function (itemEntry) {
5647
- this.items.clear(itemEntry);
5648
- itemEntry.clearResources();
5663
+ this.clearItemEntry(itemEntry);
5649
5664
  // this.hasChanges = true;
5650
5665
  };
5651
5666
  LocalCache.prototype.onActivateItem = function (itemEntry) {
@@ -6535,8 +6550,8 @@ var CollectionMatcherFactory_CollectionMatcherFactory = /** @class */ (function
6535
6550
  function CollectionMatcherFactory(queryMatcherFactory) {
6536
6551
  this.queryMatcherFactory = queryMatcherFactory;
6537
6552
  }
6538
- CollectionMatcherFactory.prototype.construct = function (collectionCaches, updateInitial) {
6539
- return new CollectionMatcher_CollectionMatcher(this.queryMatcherFactory, collectionCaches, updateInitial);
6553
+ CollectionMatcherFactory.prototype.construct = function (collectionCaches, updateInitial, callOnActivate) {
6554
+ return new CollectionMatcher_CollectionMatcher(this.queryMatcherFactory, collectionCaches, updateInitial, callOnActivate);
6540
6555
  };
6541
6556
  return CollectionMatcherFactory;
6542
6557
  }());
@@ -6818,7 +6833,7 @@ var RequestColumnExpansionFactory_RequestColumnExpansionFactory = /** @class */
6818
6833
  var main_RmCore = /** @class */ (function () {
6819
6834
  /* tslint:disable:max-line-length*/
6820
6835
  function RmCore(externalApiRequestService, localCacheManager, authInterface, errorHandlerInterface, promiseInterface) {
6821
- this.version = '1.1.3';
6836
+ this.version = '1.1.5';
6822
6837
  this.apiFormatter = new ApiFormatter_ApiFormatter();
6823
6838
  this.keyService = new KeyService_KeyService();
6824
6839
  this.queryService = new QueryService();
@@ -6974,4 +6989,4 @@ function identity(value) {
6974
6989
  /***/ })
6975
6990
  /******/ ]);
6976
6991
  });
6977
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7OztBQ2xGQSxnRDs7Ozs7Ozs7Ozs7OztBQ0FNLHNCQUF3QixNQUFNLEVBQUUsUUFBUTtJQUM3QyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFFakIsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRWxCLEdBQUcsQ0FBQyxDQUFDLElBQU0sR0FB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QU0sQ0FBQyxLQUFLLENBQUM7QUFDZCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcFNzQjtBQUNLO0FBQ0g7QUFFQztBQUNFIiwiZmlsZSI6InJtLWNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibW9tZW50XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJtQ29yZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUm1Db3JlXCJdID0gZmFjdG9yeShyb290W1wibW9tZW50XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX187IiwiZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dNZXJnZSAob2JqZWN0LCBkZWZhdWx0cykge1xyXG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcclxuXHRcdHJldHVybiBkZWZhdWx0cztcclxuXHJcblx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XHJcblx0XHRyZXN1bHRba2V5XSA9IG9iamVjdFtrZXldID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRkZWZhdWx0c1trZXldIDogb2JqZWN0W2tleV07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydGllcyAob2JqZWN0KSB7XHJcblx0Ly8gQHRzLWlnbm9yZVxyXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcclxuXHRpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxyXG5cdFx0cmV0dXJuIGtleTtcclxuXHJcblx0cmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbkFycmF5IChuZWVkbGUsIGhheXN0YWNrKSB7XHJcblx0Zm9yIChjb25zdCBoYXkgb2YgaGF5c3RhY2spIHtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRpZiAobmVlZGxlID09IGhheSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheTxUPiAoc291cmNlOiBUW10sIGNhbGxiYWNrOiAoVCkgPT4gYm9vbGVhbikge1xyXG5cdGNvbnN0IGZpbHRlcmVkOiBUW10gPSBbXTtcclxuXHJcblx0Zm9yIChjb25zdCBzcmMgb2Ygc291cmNlKSB7XHJcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcclxuXHRcdFx0ZmlsdGVyZWQucHVzaChzcmMpO1xyXG5cdH1cclxuXHJcblx0aWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gc291cmNlLmxlbmd0aClcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0ZW1wdHlBcnJheShzb3VyY2UpO1xyXG5cclxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcclxuXHRcdHNvdXJjZS5wdXNoKGZpbHRlcik7XHJcblxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpIHtcclxuXHRhcnJheS5zcGxpY2UoMCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXRoRXhpc3RzIChzb3VyY2UsIHBhdGgpIHtcclxuXHRpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XHJcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdCwgcGF0aCwgZGVmYXVsdHMpIHtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IHZhbHVlID0gcGF0aFtpXTtcclxuXHJcblx0XHRpZiAob2JqZWN0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvYmplY3RbdmFsdWVdID0gZGVmYXVsdHNbaV07XHJcblxyXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3ZhbHVlXTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBvYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoIChvYmplY3QsIHBhdGgsIGNyZWF0ZSA9IGZhbHNlKSB7XHJcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcclxuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxyXG5cclxuXHRcdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCAmJiAhY3JlYXRlKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlMsIGFkZGVkIGNvbW1lbnRzIHRvIGlnbm9yZSBUeXBlU2NyaXB0IGVycm9yc1xyXG5mdW5jdGlvbiBiYXNlRXh0ZW5kIChkc3QsIG9ianMsIGRlZXApIHtcclxuXHRmb3IgKGxldCBpID0gMCwgaWkgPSBvYmpzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuXHRcdGNvbnN0IG9iaiA9IG9ianNbaV07XHJcblxyXG5cdFx0aWYgKCFpc09iamVjdChvYmopICYmICFpc0Z1bmN0aW9uKG9iaikpXHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG5cclxuXHRcdGZvciAobGV0IGogPSAwLCBqaiA9IGtleXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2pdO1xyXG5cdFx0XHRjb25zdCBzcmMgPSBvYmpba2V5XTtcclxuXHJcblx0XHRcdGlmIChkZWVwICYmIGlzT2JqZWN0KHNyYykpIHtcclxuXHRcdFx0XHRpZiAoaXNEYXRlKHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IERhdGUoc3JjLnZhbHVlT2YoKSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChzcmMpKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBSZWdFeHAoc3JjKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHNyYy5ub2RlTmFtZSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmVOb2RlKHRydWUpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbGVtZW50KHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lKCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmICghaXNPYmplY3QoZHN0W2tleV0pKVxyXG5cdFx0XHRcdFx0XHRkc3Rba2V5XSA9IGlzQXJyYXkoc3JjKSA/IFtdIDoge307XHJcblxyXG5cdFx0XHRcdFx0YmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkc3Rba2V5XSA9IHNyYztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGRzdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAoZHN0LCAuLi5hcmdzKSB7XHJcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCBmYWxzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAoZHN0LCAuLi5hcmdzKSB7XHJcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCB0cnVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0ICh2YWx1ZSkge1xyXG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL2lzb2JqZWN0NFxyXG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua09iamVjdCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlZ0V4cCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudCAobm9kZSkge1xyXG5cdHJldHVybiAhIShub2RlICYmXHJcblx0XHQoXHJcblx0XHRcdG5vZGUubm9kZU5hbWUgIC8vIFdlIGFyZSBhIGRpcmVjdCBlbGVtZW50LlxyXG5cdFx0XHR8fCAobm9kZS5wcm9wICYmIG5vZGUuYXR0ciAmJiBub2RlLmZpbmQpXHJcblx0XHQpXHJcblx0KTsgIC8vIFdlIGhhdmUgYW4gb24gYW5kIGZpbmQgbWV0aG9kIHBhcnQgb2YgalF1ZXJ5IEFQSS5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93IChvYmopIHtcclxuXHRyZXR1cm4gb2JqICYmIG9iai53aW5kb3cgPT09IG9iajtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyAobzEsIG8yKSB7XHJcblx0aWYgKG8xID09PSBvMilcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcclxuXHRpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMilcclxuXHRcdHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxyXG5cclxuXHRjb25zdCB0MSA9IHR5cGVvZiBvMTtcclxuXHRjb25zdCB0MiA9IHR5cGVvZiBvMjtcclxuXHJcblx0bGV0IGxlbmd0aDtcclxuXHRsZXQga2V5O1xyXG5cdGxldCBrZXlTZXQ7XHJcblxyXG5cdGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XHJcblx0XHRpZiAoaXNBcnJheShvMSkpIHtcclxuXHRcdFx0aWYgKCFpc0FycmF5KG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRsZW5ndGggPSBvMS5sZW5ndGg7XHJcblxyXG5cdFx0XHRpZiAobzEubGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcclxuXHRcdFx0XHRmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcclxuXHRcdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChpc0RhdGUobzEpKSB7XHJcblx0XHRcdGlmICghaXNEYXRlKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gc2ltcGxlQ29tcGFyZShvMS5nZXRUaW1lKCksIG8yLmdldFRpbWUoKSk7XHJcblx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzUmVnRXhwKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gbzEudG9TdHJpbmcoKSA9PT0gbzIudG9TdHJpbmcoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChpc1dpbmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8IGlzQXJyYXkobzIpIHx8IGlzRGF0ZShvMikgfHwgaXNSZWdFeHAobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGtleVNldCA9IGNyZWF0ZU1hcCgpO1xyXG5cdFx0XHRmb3IgKGtleSBpbiBvMSkge1xyXG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKG8xW2tleV0pKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0XHRrZXlTZXRba2V5XSA9IHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoa2V5IGluIG8yKSB7XHJcblx0XHRcdFx0aWYgKCEoa2V5IGluIGtleVNldCkgJiYgaXNEZWZpbmVkKG8yW2tleV0pICYmICFpc0Z1bmN0aW9uKG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTWFwICgpIHtcclxuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxufVxyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxyXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJlIChhLCBiKSB7XHJcblx0cmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYgYiAhPT0gYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRPYmplY3RNYXhEZXB0aCAobWF4RGVwdGgpIHtcclxuXHRyZXR1cm4gaXNOdW1iZXIobWF4RGVwdGgpICYmIG1heERlcHRoID4gMDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHNvdXJjZSwgZGVzdGluYXRpb24/LCBtYXhEZXB0aD8pIHtcclxuXHRjb25zdCBzdGFja1NvdXJjZSA9IFtdO1xyXG5cdGNvbnN0IHN0YWNrRGVzdCA9IFtdO1xyXG5cclxuXHRtYXhEZXB0aCA9IGlzVmFsaWRPYmplY3RNYXhEZXB0aChtYXhEZXB0aCkgPyBtYXhEZXB0aCA6IE5hTjtcclxuXHJcblx0aWYgKGRlc3RpbmF0aW9uKSB7XHJcblx0XHRpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVtcHR5IHRoZSBkZXN0aW5hdGlvbiBvYmplY3RcclxuXHRcdGlmIChpc0FycmF5KGRlc3RpbmF0aW9uKSkge1xyXG5cdFx0XHRkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gZGVzdGluYXRpb24pXHJcblx0XHRcdFx0ZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tEZXN0LnB1c2goZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlSZWN1cnNlIChfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aCkge1xyXG5cdFx0X21heERlcHRoLS07XHJcblxyXG5cdFx0aWYgKF9tYXhEZXB0aCA8IDApXHJcblx0XHRcdHJldHVybiAnLi4uJztcclxuXHJcblx0XHRpZiAoaXNBcnJheShfc291cmNlKSkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuXHRcdFx0XHRfZGVzdGluYXRpb24ucHVzaChjb3B5RWxlbWVudChfc291cmNlW2ldLCBfbWF4RGVwdGgpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XHJcblx0XHRcdC8vIGNyZWF0ZU1hcCgpIGZhc3QgcGF0aCAtLS0gU2FmZSB0byBhdm9pZCBoYXNPd25Qcm9wZXJ0eSBjaGVjayBiZWNhdXNlIHByb3RvdHlwZSBjaGFpbiBpcyBlbXB0eVxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoX3NvdXJjZSAmJiB0eXBlb2YgX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0aWYgKF9zb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBTbG93ZXN0IHBhdGggLS0tIGhhc093blByb3BlcnR5IGNhbid0IGJlIGNhbGxlZCBhcyBhIG1ldGhvZFxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XHJcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcclxuXHRcdC8vIFNpbXBsZSB2YWx1ZXNcclxuXHRcdGlmICghaXNPYmplY3QoX3NvdXJjZSkpXHJcblx0XHRcdHJldHVybiBfc291cmNlO1xyXG5cclxuXHRcdC8vIEFscmVhZHkgY29waWVkIHZhbHVlc1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Y29uc3QgaW5kZXggPSBzdGFja1NvdXJjZS5pbmRleE9mKF9zb3VyY2UpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdHJldHVybiBzdGFja0Rlc3RbaW5kZXhdO1xyXG5cclxuXHRcdGlmIChpc1dpbmRvdyhfc291cmNlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgTWFraW5nIGNvcGllcyBvZiBXaW5kb3cgaW5zdGFuY2VzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG5lZWRzUmVjdXJzZSA9IGZhbHNlO1xyXG5cdFx0bGV0IF9kZXN0aW5hdGlvbiA9IGNvcHlUeXBlKF9zb3VyY2UpO1xyXG5cclxuXHRcdGlmIChfZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRfZGVzdGluYXRpb24gPSBpc0FycmF5KF9zb3VyY2UpID8gW10gOiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfc291cmNlKSk7XHJcblx0XHRcdG5lZWRzUmVjdXJzZSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tTb3VyY2UucHVzaChfc291cmNlKTtcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0cmV0dXJuIG5lZWRzUmVjdXJzZVxyXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxyXG5cdFx0XHQ6IF9kZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlUeXBlIChfc291cmNlKSB7XHJcblx0XHRzd2l0Y2ggKHRvU3RyaW5nLmNhbGwoX3NvdXJjZSkpIHtcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQxNkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MzJBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQxNkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDMyQXJyYXldJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXHJcblx0XHRcdFx0aWYgKCFfc291cmNlLnNsaWNlKSB7XHJcblx0XHRcdFx0XHQvLyBJZiB3ZSdyZSBpbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgZW52aXJvbm1lbnQgc3VwcG9ydHMgQXJyYXlCdWZmZXJcclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXHJcblx0XHRcdFx0XHRjb25zdCBjb3BpZWQgPSBuZXcgQXJyYXlCdWZmZXIoX3NvdXJjZS5ieXRlTGVuZ3RoKTtcclxuXHRcdFx0XHRcdG5ldyBVaW50OEFycmF5KGNvcGllZCkuc2V0KG5ldyBVaW50OEFycmF5KF9zb3VyY2UpKTtcclxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHRcdFx0XHRcdHJldHVybiBjb3BpZWQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBCb29sZWFuXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxyXG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xyXG5cclxuXHRcdFx0XHRyZS5sYXN0SW5kZXggPSBfc291cmNlLmxhc3RJbmRleDtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKFtfc291cmNlXSwge3R5cGU6IF9zb3VyY2UudHlwZX0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc0Z1bmN0aW9uKF9zb3VyY2UuY2xvbmVOb2RlKSkge1xyXG5cdFx0XHRyZXR1cm4gX3NvdXJjZS5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlGb3JtYXR0ZXIge1xyXG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XHJcblx0U0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREW1RdSEg6bW06c3NaJztcclxuXHRTRVJWRVJfVElNRV9GT1JNQVQgPSAnSEg6bW06c3MnO1xyXG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcclxuXHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHMsIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0ZmllbGRzW2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW4ucGF0aF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQsIGV4cGFuZGVkLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGN1cnJlbnRbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZXhwYW5kZWRbY29sdW1uLnBhdGhdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBtb2RpZmllZFtjb2x1bW5JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRoYXNDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2hhbmdlcyAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogb2JqZWN0W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSkge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogaW5pdGlhbFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdGNvbHVtbjogY29sdW1uLmFwaUNvbHVtblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29weUZpZWxkcyAoc291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XHJcblxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBzb3VyY2VbY29sdW1uUGF0aF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdHNoYWxsb3dDb3B5RmllbGRzIChzaGFsbG93U291cmNlLCBkZWVwU291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XHJcblxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0c2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSA6XHJcblx0XHRcdFx0dGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGRlZXBTb3VyY2VbY29sdW1uUGF0aF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdHNldERlZmF1bHRWYWx1ZXMgKGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbi5pZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVGaWVsZHMgKGNvbHVtblR5cGUsIGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gc2Vjb25kID09PSB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKHNlY29uZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVNb21lbnRPYmplY3RzKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUR1cmF0aW9ucyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnaWQnOiAvLyBpZCB0eXBlc1xyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT0gc2Vjb25kOyAvLyB1c2Ugbm9uLXN0cmljdCBjb21wYXJpc29uXHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAncG93ZXInOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVGbG9hdHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcclxuXHRcdFx0Y2FzZSAnYm9vbCc6IC8vIGJvb2xlYW4gdHlwZXNcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzogLy8gc3RyaW5nIHR5cGVzXHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PT0gc2Vjb25kO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBlcXVhbHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb21wYXJlRmxvYXRzIChhLCBiKSB7XHJcblx0XHRjb25zdCBhYnNBID0gTWF0aC5hYnMoYSk7XHJcblx0XHRjb25zdCBhYnNCID0gTWF0aC5hYnMoYik7XHJcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xyXG5cclxuXHRcdGNvbnN0IEVQU0lMT04gPSAxLjE5ZS0wNztcclxuXHJcblx0XHQvLyBzaG9ydGN1dCwgaGFuZGxlcyBpbmZpbml0aWVzXHJcblx0XHRpZiAoYSA9PT0gYikge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSBpZiAoYSA9PT0gMCB8fCBiID09PSAwIHx8IGRpZmYgPCBOdW1iZXIuTUlOX1ZBTFVFKSB7XHJcblx0XHRcdC8vIGEgb3IgYiBpcyB6ZXJvIG9yIGJvdGggYXJlIGV4dHJlbWVseSBjbG9zZSB0byBpdFxyXG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxyXG5cdFx0XHRyZXR1cm4gZGlmZiA8IChFUFNJTE9OICogTnVtYmVyLk1JTl9WQUxVRSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3JcclxuXHRcdFx0cmV0dXJuIGRpZmYgLyBNYXRoLm1pbigoYWJzQSArIGFic0IpLCBOdW1iZXIuTUFYX1ZBTFVFKSA8IEVQU0lMT047XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb21wYXJlTW9tZW50T2JqZWN0cyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXHJcblx0XHRcdHJldHVybiAhc2Vjb25kLmlzVmFsaWQoKTtcclxuXHJcblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXHJcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gZmlyc3QgSVMgdmFsaWRcclxuXHJcblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XHJcblx0fVxyXG5cclxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRyZXR1cm4gZmlyc3QuYXNNaWxsaXNlY29uZHMoKSA9PT0gc2Vjb25kLmFzTWlsbGlzZWNvbmRzKCk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZVZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEYXRlKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlQ29sb3IodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnJyA/IEpTT04ucGFyc2UodmFsdWUpIDogdmFsdWU7XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xyXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8gMTAwMDAwMDtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3RDb2xvcih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZURhdGUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlID09PSBudWxsID8gMCA6IHZhbHVlLCAnc2Vjb25kcycpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VDb2xvciAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlIDogJyMnICsgdmFsdWU7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RGF0ZVRpbWUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVfRk9STUFUKSA6IG51bGw7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RHVyYXRpb24gKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuYXNTZWNvbmRzKCk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0Q29sb3IgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldERlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0XHRyZXR1cm4gJzAnO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmludmFsaWQoKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gJyMwMDAwMDAnO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGVtYWlsXHJcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGh0bWxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGpzb25cclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSkpO1xyXG5cdH1cclxuXHJcblx0Y2xvbmUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0XHRyZXR1cm4gY29weSh2YWx1ZSk7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q2xvbmVGdW5jdGlvbiAoY29sdW1uVHlwZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRGF0ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNsb25lRHVyYXRpb24gKGR1cmF0aW9uKSB7XHJcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKGR1cmF0aW9uKTtcclxuXHR9XHJcblxyXG5cdGNsb25lRGF0ZSAoZGF0ZSkge1xyXG5cdFx0cmV0dXJuIGRhdGUuY2xvbmUoKTtcclxuXHR9XHJcblxyXG5cdGlkZW50aXR5IChpbnB1dCkge1xyXG5cdFx0cmV0dXJuIGlucHV0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHRlbXBsYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIHBhcmFtczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogSXRlbVR5cGUsIHBhcmVudElkPzogSXRlbUlkKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoaXRlbVR5cGUsIGl0ZW1JZCwgdmFsdWVzLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGl0ZW1JZHMpKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1zOiBvYmplY3QsIGNvbHVtbnM6IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMsIHJlcXVlc3RDYW5jZWxlcikpO1xyXG5cdH1cclxuXHJcblx0bW92ZUl0ZW1zIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbXM6IG9iamVjdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtcykpO1xyXG5cdH1cclxuXHJcblx0Y29sdW1ucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5zOiBvYmplY3QsIHBhcmFtcz86IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRxdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogb2JqZWN0LCBjb2x1bW5zOiBvYmplY3QsIGxpbWl0Pzogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMsIGxpbWl0KSk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzUmVzcG9uc2UgKHJlcXVlc3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gcmVxdWVzdC50aGVuKHJlc3BvbnNlID0+IHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZSkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbVR5cGVNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yIHtcclxuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcclxuXHRpdGVtczogSXRlbVR5cGVNYXA7XHJcblx0bGlua3M6IEl0ZW1UeXBlTWFwO1xyXG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcclxuXHRtYXA6IGFueTtcclxuXHJcblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xyXG5cdGNvbHVtbk1hcDogYW55ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyByZXNwb25zZTogYW55XHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSByZXNwb25zZS5jb2x1bW5zO1xyXG5cdFx0dGhpcy5pdGVtcyA9IHJlc3BvbnNlLml0ZW1zO1xyXG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xyXG5cdFx0dGhpcy5jYWNoZWFibGUgPSByZXNwb25zZS5jYWNoZWFibGU7XHJcblx0XHR0aGlzLm1hcCA9IHJlc3BvbnNlLm1hcDtcclxuXHJcblx0XHR0aGlzLmNyZWF0ZUNvbHVtbk1hcHMoKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbHVtbk1hcHMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5UeXBlIGluIHRoaXMuY29sdW1ucykge1xyXG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XHJcblx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXVtpXTtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBpO1xyXG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZldGNoVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbklkKSB7XHJcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcclxuXHR9XHJcblxyXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKFxyXG5cdFx0XHRcdHRoaXMuZmV0Y2hWYWx1ZShpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW4uaWQpLFxyXG5cdFx0XHRcdGNvbHVtbixcclxuXHRcdFx0XHRyZXN1bHRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hEZXJpdmVkVmFsdWVzICh2YWx1ZSwgY29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcclxuXHRcdFx0bGV0IGNoaWxkVmFsdWU7XHJcblxyXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcclxuXHRcdFx0XHRjaGlsZFZhbHVlID0gbnVsbDtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjaGlsZENvbHVtbi5hcGlDb2x1bW4udHlwZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IHRoaXMuZmV0Y2hWYWx1ZShjb2x1bW4uaXRlbVR5cGUsIHZhbHVlLCBjaGlsZENvbHVtbi5pZCk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSBjaGlsZFZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRDb2x1bW4uaXNMZWFmKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoY2hpbGRWYWx1ZSwgY2hpbGRDb2x1bW4sIGRlc3RpbmF0aW9uKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XHJcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRyZXN1bHRbdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXVtpXS5pZF0gPSBkYXRhW2ldO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbmNsdWRlTGlua3MpIHtcclxuXHRcdFx0Y29uc3QgbGlua3MgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmxpbmtzO1xyXG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBsaW5rVHlwZSBpbiBsaW5rcylcclxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxyXG5cdFx0XHRcdFx0dGhpcy5mZXRjaE9iamVjdEFycmF5KGxpbmtUeXBlLCBpbmNsdWRlTGlua3MsIGxpbmtzW2xpbmtUeXBlXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0QXJyYXkgKGl0ZW1UeXBlLCBpbmNsdWRlTGlua3MsIGlkQXJyYXkpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0gW107XHJcblxyXG5cdFx0aWYgKGlkQXJyYXkgPT09IG51bGwpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlkQXJyYXkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0TWFwIChpdGVtVHlwZSwgY29sdW1uSWQsIGluY2x1ZGVMaW5rcywgcmV0dXJuS2V5cykge1xyXG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XHJcblx0XHRjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbY29sdW1uSW5kZXhdO1xyXG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcclxuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCwgaW5jbHVkZUxpbmtzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmV0dXJuS2V5cylcclxuXHRcdFx0cmV0dXJuIHtyZXN1bHQ6IHJlc3VsdCwga2V5czoga2V5c307XHJcblx0XHRlbHNlXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaEZpZWxkTWFwIChpdGVtVHlwZSwgY29sdW1uSWQpIHtcclxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmVzdWx0W2lkXSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2luZGV4XTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5BcnJheSAoaXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgYXBpQ29sdW1uIG9mIHRoaXMuY29sdW1uc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJlc3VsdC5wdXNoKGFwaUNvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uT2JqZWN0IChpdGVtVHlwZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwW2l0ZW1UeXBlXTtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uc09iamVjdCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXA7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVSZXNvdXJjZSAoaXRlbVR5cGUsIGlkKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRvYmplY3Q6IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkKSxcclxuXHRcdFx0bGlua3M6IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5saW5rc1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGhhc0l0ZW1zIChpdGVtVHlwZSkge1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgZW51bSBFTlRSWV9TVEFUVVMge1xyXG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxyXG5cdFBST01JU0VEID0gJ3Byb21pc2VkJyxcclxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcclxuXHRQUk9NSVNFRF9FWFBBTkQgPSAncHJvbWlzZWQtZXhwYW5kJyxcclxuXHRSRVNPTFZFID0gJ3Jlc29sdmUnLFxyXG5cdExPQ0FMID0gJ2xvY2FsJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQUxMX1BFUk1JU1NJT05TID0gJzcnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTFVNTl9TRVBFUkFUT1IgPSAnPic7XHJcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19LRVlXT1JEOiBzdHJpbmcgPSAnbmV3LSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xyXG4iLCJpbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5U3RhdHVzLCBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzIHtcclxuXHRlbnRyaWVzOiBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtSWQsXHJcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBQcm9taXNlPEl0ZW1FbnRyeT4gLy8gdG9kbzogcHJvbWlzZSByZXR1cm4gdHlwZVxyXG5cdCkge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gRU5UUllfU1RBVFVTKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XHJcblx0fVxyXG5cclxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+KTogdm9pZCB7XHJcblx0XHRjb25zdCBzdGF0dXMgPSBlbnRyeVN0YXR1cy5zdGF0dXM7XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZW50cmllc1tzdGF0dXNdID0gW107XHJcblxyXG5cdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10ucHVzaChlbnRyeVN0YXR1cy5lbnRyeSk7XHJcblx0fVxyXG5cclxuXHRoYXNFbnRyaWVzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBib29sZWFuIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XHJcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGhhc1JlcXVlc3RzICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5SRVNPTFZFLCBFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSk7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoRW50cnkgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldFByb21pc2VzICgpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxJdGVtRW50cnk+PiA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcclxuXHRcdFx0ZW50cnkgPT4ge1xyXG5cdFx0XHRcdHByb21pc2VzLnB1c2godGhpcy5nZXRQcm9taXNlKGVudHJ5KSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKTtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RJZHMgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdLFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5nZXRJdGVtSWQoZW50cnkpKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QXJyYXkgKCk6IEl0ZW1FbnRyeVtdIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHN0YXR1c0VudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdGNvbXBpbGF0aW9uID0ge1xyXG5cdFx0Y3JlYXRlOiB7fSxcclxuXHRcdGRlbGV0ZToge30sXHJcblx0XHR1cGRhdGU6IHt9LFxyXG5cdFx0bW92ZToge31cclxuXHR9O1xyXG5cclxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cclxuXHRwcml2YXRlIG1vdmVBcnJheTogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRwcml2YXRlIGRlbGV0ZU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwdWJsaWMgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdXHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc1NpbmdsZUl0ZW1zKCk7XHJcblx0XHR0aGlzLnByb2Nlc3NDb2xsZWN0aW9ucyhjb2xsZWN0aW9uRW50cmllcyk7XHJcblx0XHR0aGlzLnBvc3RQcm9jZXNzKCk7XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0UGFyZW50ICgpOiBFbnRyeVBhcmVudCB7XHJcblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XHJcblx0fVxyXG5cclxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5tb3ZlQXJyYXkucHVzaChpdGVtRW50cnkpO1xyXG5cdH1cclxuXHJcblx0YWRkRGVsZXRlRW50cnkgKGl0ZW1FbnRyeSwgcGFyZW50SWQsIHBhcmVudFR5cGUpIHtcclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB7cGFyZW50SWQ6IHBhcmVudElkLCBpdGVtOiBpdGVtRW50cnksIHBhcmVudFR5cGU6IHBhcmVudFR5cGV9XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnkpIHtcclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuY29tcGlsYXRpb24udXBkYXRlLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCBpdGVtRW50cnldXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkQ3JlYXRlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0bGV0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XHJcblxyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi5jcmVhdGUsXHJcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwge30sIHt9LCBpdGVtRW50cnldXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cG9zdFByb2Nlc3MgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdFx0Y29uc3QgZGVsZXRlRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKGRlbGV0ZUVudHJ5ID09PSB1bmRlZmluZWQgfHwgZGVsZXRlRW50cnlbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Ly8gYXNzdW1lIHRoZSBpdGVtRW50cnkgaGFzIGEgcGFyZW50IChvciBzb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3JvbmcpXHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gY3JlYXRlUGF0aChcclxuXHRcdFx0XHR0aGlzLmNvbXBpbGF0aW9uLm1vdmUsXHJcblx0XHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZF0sXHJcblx0XHRcdFx0W3t9LCBbXV1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZGVsZXRlRW50cnlbaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRkZWxldGUgZGVsZXRlRW50cnlbaXRlbUlkXTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZGVsZXRlTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdW2l0ZW1JZF0uaXRlbTtcclxuXHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuY29tcGlsYXRpb24uZGVsZXRlO1xyXG5cclxuXHRcdFx0XHRpZiAoZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0ZGVzdGluYXRpb25baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzU2luZ2xlSXRlbXMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5zaW5nbGVJdGVtcykge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGl0ZW1FbnRyeSk7XHJcblx0XHRcdGVsc2UgaWYgKGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeShpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHQvLyBhZGQgdGhlIGNvbGxlY3Rpb24gcGFyZW50IGlkIHRvIHRoZSBkZWxldGUgZW50cnkgKGluIGNhc2UgdGhlIGl0ZW0gaGFzIGJlZW4gbW92ZWQpXHJcblx0XHRcdGxldCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcygpKSB7XHJcblx0XHRcdFx0bGV0IGFkZGVkSXRlbXM7XHJcblx0XHRcdFx0bGV0IHJlbW92ZWRJdGVtcztcclxuXHJcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpIHtcclxuXHRcdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuaXRlbXM7XHJcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRBZGRlZEl0ZW1zKCk7XHJcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7XHJcblx0XHRcdFx0XHRpZiAoYWRkZWRJdGVtLmlzTG9jYWwoKSlcclxuXHRcdFx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShhZGRlZEl0ZW0pO1xyXG5cdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHR0aGlzLmFkZE1vdmVFbnRyeShhZGRlZEl0ZW0pO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbSBvZiByZW1vdmVkSXRlbXMpXHJcblx0XHRcdFx0XHR0aGlzLmFkZERlbGV0ZUVudHJ5KHJlbW92ZWRJdGVtLCBwYXJlbnQuaXRlbUlkLCBwYXJlbnQuaXRlbVR5cGUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKCkpIHtcclxuXHRcdFx0XHRjb25zdCB1cGRhdGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1zKCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEl0ZW0gb2YgdXBkYXRlZEl0ZW1zKVxyXG5cdFx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeSh1cGRhdGVkSXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRBcGlGb3JtYXR0ZXIsXHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0Q29sdW1uSW5mbyxcclxuXHRJdGVtSGFuZGxlclxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgRW50cnlQYXJlbnQsIEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGgsIGhhc1Byb3BlcnRpZXMsIGluQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3Ige1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIHRoZSBkb2N1bWVudCBjcmVhdGlvbiBoYXMgYmVlbiB1cGRhdGVkXHJcblx0Z2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eSAoaXRlbVR5cGUpIHtcclxuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cnJlZ2VsYmVkcmFnJzpcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cnJlZ2VsJzpcclxuXHRcdFx0Y2FzZSAnTWluZmFjdHV1cic6XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRidWlsZE1vdmVSZXF1ZXN0IChjb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xyXG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRNYXBWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XHJcblx0XHRpZiAobWFwID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0ZXhlY3V0ZSAoc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zLCBicmVha3VwQnlQYXJlbnQgPSBmYWxzZSwgcGFyYW1ldGVycz8sIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz8pIHtcclxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0cyhcclxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpLFxyXG5cdFx0XHRwYXJhbWV0ZXJzLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnQsXHJcblx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzIChjaGFuZ2VzQ29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbiwgcGFyYW1ldGVycywgY29udmVyc2lvbk1hcCwgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RzID0gdGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbi5jcmVhdGUsXHJcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb2xsZWN0aW9ucyxcclxuXHRcdFx0cGFyYW1ldGVycyxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XHJcblx0XHQpLnJ1bigpO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VzOiBBcnJheTxQcm9taXNlPGFueT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKVxyXG5cdFx0XHRyZXNwb25zZXMucHVzaCh0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0KHJlcXVlc3QsIGNvbnZlcnNpb25NYXApLnRoZW4obm90aWZ5KSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3BvbnNlcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gbm90aWZ5IChyZXN1bHQpIHtcclxuXHRcdFx0aWYgKGlzRnVuY3Rpb24ob25BZnRlckNyZWF0ZUNhbGxiYWNrKSlcclxuXHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2soY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdCAocmVxdWVzdFJlc291cmNlLCBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocmVxdWVzdFJlc291cmNlLnJlcXVlc3QpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZU1hcCA9IHJlc3BvbnNlLm1hcDtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnNbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIHJlc3BvbnNlTWFwKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQ3JlYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcclxuXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQgPSBuZXdJdGVtSWQ7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoZmllbGRzKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHJcblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZU1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gcmVzcG9uc2VNYXBbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IHByaW9yaXRpemVkSXRlbVR5cGVzOiBzdHJpbmdbXVtdID0gW1tdLCBbXSwgW11dO1xyXG5cdFx0bGV0IHJlcXVlc3RDaGFpbiA9IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pXHJcblx0XHRcdHByaW9yaXRpemVkSXRlbVR5cGVzW3RoaXMuZ2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eShpdGVtVHlwZSldLnB1c2goaXRlbVR5cGUpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGVzIG9mIHByaW9yaXRpemVkSXRlbVR5cGVzKSB7XHJcblx0XHRcdGlmIChpdGVtVHlwZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0cmVxdWVzdENoYWluID0gcmVxdWVzdENoYWluLnRoZW4oXHJcblx0XHRcdFx0dGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoaXRlbVR5cGVzLCBjb21waWxhdGlvbiwgcGFyYW1ldGVycyksXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3RDaGFpbjtcclxuXHR9XHJcblxyXG5cdC8vIGNvbnN0cnVjdCBhIGNhbGxiYWNrIGZ1bmN0aW9uXHJcblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdHMgKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcclxuXHRcdHJldHVybiAoKSA9PiB7XHJcblx0XHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxyXG5cdFx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdLCBwYXJhbWV0ZXJzKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgcGFyYW1ldGVyTWFwKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0ge307XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcclxuXHJcblx0XHRyZXF1ZXN0W2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhlIGZvcm1hdFJlcXVlc3QgY2FsbCBoZXJlIChmaWVsZHMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQpXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHQvLyBSTUNvcmUgdG9kbzogdHlwZVxyXG5cdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdFtpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xyXG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aChwYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cclxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyA9IGNvbGxlY3Rpb25NYXRjaGVyLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMpXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChjb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCByZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucy5nZXQoKSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLmdldCgpLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1VwZGF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHRcdC5zZXREZXJpdmVkKHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KSlcclxuXHRcdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMpXHJcblx0XHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucywgdHJ1ZSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbikge1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3NhcnlcclxuXHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0pKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xyXG5cdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0aWRBcnJheS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaWRBcnJheSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRBcnJheSA9IHJlc3BvbnNlLml0ZW1zO1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignRGVsZXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKVxyXG5cdFx0XHRcdGV4ZWN1dGVNb3ZlUmVxdWVzdChwYXJlbnRUeXBlLCBwYXJlbnRJZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcclxuXHJcblx0XHRmdW5jdGlvbiBleGVjdXRlTW92ZVJlcXVlc3QgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XHJcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxyXG5cdFx0XHRjb25zdCBjb21waWxhdGlvbkVudHJpZXMgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF07XHJcblx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gc2VsZi5nZXRNYXBWYWx1ZShwYXJlbnRUeXBlLCBwYXJlbnRJZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKFxyXG5cdFx0XHRcdHNlbGYuYXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKFxyXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQgPyBuZXdQYXJlbnRJZCA6IHBhcmVudElkLFxyXG5cdFx0XHRcdFx0c2VsZi5idWlsZE1vdmVSZXF1ZXN0KGNvbXBpbGF0aW9uRW50cmllcylcclxuXHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHNlbGYucHJvY2Vzc01vdmVSZXNwb25zZSgvKiByZXNwb25zZSwgKi9jb21waWxhdGlvbkVudHJpZXMpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHNlbGYuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc01vdmVSZXNwb25zZSAoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHQvLyBUT0RPOiBwcm9jZXNzIHJlc3BvbnNlXHJcblxyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZW1vdmVDb2xsZWN0aW9uTWFwID0ge307XHJcblx0XHRjb25zdCBhZGRDb2xsZWN0aW9uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcclxuXHJcblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxyXG5cdFx0XHRcdHJlbW92ZUNvbGxlY3Rpb25NYXAsXHJcblx0XHRcdFx0Y29tcGlsYXRpb25FbnRyeS5wYXJlbnRJZCxcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXHJcblx0XHRcdFx0YWRkQ29sbGVjdGlvbk1hcCxcclxuXHRcdFx0XHQoPEVudHJ5UGFyZW50PiBpdGVtRW50cnkucGFyZW50KS5pdGVtSWQsXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24ocmVtb3ZlQ29sbGVjdGlvbk1hcCwgJ3JlbW92ZUl0ZW1zJyk7XHJcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKGFkZENvbGxlY3Rpb25NYXAsICdhZGRJdGVtcycpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnkgKGNvbGxlY3Rpb25NYXAsIHBhcmVudElkLCBpdGVtRW50cnksIHZhbHVlKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5LnBhcmVudC5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXHJcblx0XHRcdFt7fSwge30sIFtdXVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uIChjb2xsZWN0aW9uTWFwLCBtZXRob2QpIHtcclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXSkge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0pIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeVttZXRob2RdKFxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdHRydWVcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBub3RlOiB3aXRoIHRoZSBuZXcgaXRlbSBzdHJ1Y3R1cmUsICphbGwqIGxvY2FsIGl0ZW1zIGFyZSBpbiB0aGUgc2luZ2xlIGl0ZW0gY2FjaGVcclxuXHRwcml2YXRlIG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSkge1xyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHRcdFx0Y29uc3QgdXBkYXRlZENvbHVtbnM6IHtbY29sdW1uSWQ6IHN0cmluZ106IENvbHVtbkluZm99ID1cclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1Db2x1bW5zKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zKTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIWhhc1Byb3BlcnRpZXModXBkYXRlZENvbHVtbnMpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHVwZGF0ZWRDb2x1bW5zLmlkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXBbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc2luZ2xlSXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gcHJvcGVyIG9yZGVyOiBjcmVhdGUgLSBtb3ZlIC0gZGVsZXRlIC0gdXBkYXRlXHJcblx0cHJpdmF0ZSBleGVjdXRlUmVxdWVzdHMgKGNoYW5nZXNDb21waWxhdGlvbjogQ2hhbmdlc0NvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykge1xyXG5cdFx0Y29uc3QgY29tcGlsYXRpb24gPSBjaGFuZ2VzQ29tcGlsYXRpb24uY29tcGlsYXRpb247XHJcblx0XHRjb25zdCBzaW5nbGVJdGVtcyA9IGNoYW5nZXNDb21waWxhdGlvbi5zaW5nbGVJdGVtcztcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbGxlY3Rpb25zLnRvQXJyYXkoKTtcclxuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXAgPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdHMoY2hhbmdlc0NvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzLCBjb252ZXJzaW9uTWFwLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0cyhjb21waWxhdGlvbi5kZWxldGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyhjb21waWxhdGlvbi51cGRhdGUsIHBhcmFtZXRlcnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdFx0XHR9LCAvLyBpdGVtIGlkIGNvbnZlcnNpb24gbWFwXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5SXRlbVR5cGVNYXAsIENvbGxlY3Rpb25NYXRjaFJlc3VsdCwgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5lbnVtIENPTlNUQU5UUyB7XHJcblx0TUFZQkUgPSAnbWF5YmUnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGUge1xyXG5cdGVudHJpZXM6IENvbGxlY3Rpb25FbnRyeUl0ZW1UeXBlTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gZW50cnkpXHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCk6IGJvb2xlYW4ge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJ5KSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCBpbiB1c2VcclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRjYWxsYmFjayhlbnRyeSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0b0FycmF5ICgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRhZGQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoY29sbGVjdGlvbkVudHJ5PzogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdLmluZGV4T2YoY29sbGVjdGlvbkVudHJ5KTtcclxuXHJcblx0XHRpZiAoaW5kZXggPT09IC0xKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IHN0cmluZyk6IENvbGxlY3Rpb25FbnRyeVtdIHtcclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zbGljZSgpO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hQYXJlbnQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcclxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTogQ29sbGVjdGlvbkVudHJ5IHwgbnVsbCB7XHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50VHlwZSwgcGFyZW50SWQpKVxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXRSZXNvdXJjZUJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmdldEN1cnJlbnRSZXNvdXJjZSgpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXHJcblx0XHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9ubHkgcmVzb3VyY2VzXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIHtTdHJpbmd8SW50ZWdlcn0gaXRlbUlkXHJcblx0ICogQHJldHVybnMge09iamVjdH0gQXJyYXkgb2YgY29sbGVjdGlvbnMuXHJcblx0ICovXHJcblx0Z2V0QnlDb250YWluaW5nSXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmdldEl0ZW1CeUlkKGl0ZW1JZCkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbGxlY3Rpb25zIHRoZSBpdGVtICdiZWxvbmdzJyBpbi5cclxuXHQgKi9cclxuXHRnZXRCeUZpdHRpbmdJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHtmaXR0aW5nOiBbXSwgbm90Zml0dGluZzogW10sIG1heWJlOiBbXX07XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHQvLyBjb25zb2xlLnRpbWUoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcclxuXHJcblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBmaWVsZHMsIHBhcmVudCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRjb25zdCBtYXRjaFJlc3VsdCA9IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpO1xyXG5cclxuXHRcdFx0Ly8gVE9ETzogbWF5YmU/XHJcblx0XHRcdGlmIChtYXRjaFJlc3VsdCA9PT0gdHJ1ZSkgLy8gbWlnaHQgYWxzbyByZXR1cm4gJ21heWJlJ1xyXG5cdFx0XHRcdHJlc3VsdC5maXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAobWF0Y2hSZXN1bHQgPT09IENPTlNUQU5UUy5NQVlCRSlcclxuXHRcdFx0XHRyZXN1bHQubWF5YmUucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0cmVzdWx0Lm5vdGZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGNvbnNvbGUudGltZUVuZCgnZ2V0QnlGaXR0aW5nSXRlbScpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRCeVF1ZXJ5IChpdGVtVHlwZSwgcXVlcnkpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlLZXkgKGl0ZW1UeXBlLCBlbnRyeUtleSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGlmIChlbnRyeS5vcHRpb25zLmVudHJ5S2V5ID09PSBlbnRyeUtleSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlc291cmNlQnlLZXkgKGl0ZW1UeXBlLCByZXNvdXJjZUtleSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZW50cnkucmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0aWYgKHJlc291cmNlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLnJlc291cmNlS2V5ID09PSByZXNvdXJjZUtleSlcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKHJlc291cmNlKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeVBhcnNlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeVNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXHJcblx0Y2xvbmVPcHRpb25zIChvcHRpb25zLCBwYXJlbnQpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7IC8vIGRvZXMgYSBzaGFsbG93IGNvcHlcclxuXHJcblx0XHRyZXN1bHQucXVlcnlQYXJhbXMgPSB0aGlzLmNsb25lUXVlcnlQYXJhbXMob3B0aW9ucy5xdWVyeVBhcmFtcyk7XHJcblx0XHRyZXN1bHQucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbG9uZVF1ZXJ5UGFyYW1zIChwYXJhbWV0ZXJzKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XHJcblx0XHRcdGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyc1trZXldO1xyXG5cdFx0XHRsZXQgY2xvbmU7XHJcblxyXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5zbGljZSgpOyAvLyB3ZSdyZSBvbmx5IHVzaW5nIHByaW1pdGl2ZSBhcnJheXNcclxuXHRcdFx0ZWxzZSBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLmNsb25lKCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlO1xyXG5cclxuXHRcdFx0cmVzdWx0W2tleV0gPSBjbG9uZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb2x1bW5zOiBbXSxcclxuXHRcdFx0XHRxdWVyeTogbnVsbCxcclxuXHRcdFx0XHRxdWVyeUl0ZW1UeXBlOiBudWxsLFxyXG5cdFx0XHRcdHF1ZXJ5UGFyYW1zOiB7fSxcclxuXHRcdFx0XHRwYXJlbnQ6IG51bGwsXHJcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZSxcclxuXHRcdFx0XHRsaW1pdDogbnVsbCxcclxuXHRcdFx0XHRlbnRyeUtleTogJydcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVF1ZXJ5IChvcHRpb25zKSB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHJcblx0XHRsZXQgcXVlcnk7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGNvbnN0IGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHtpZDogJyZwYXJlbnRJZCd9fTtcclxuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XHJcblxyXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxyXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihvcHRpb25zLnF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChxdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKTtcclxuXHJcblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhY2N1bXVsYXRvcik6IEl0ZW1JZFtdIHtcclxuXHRcdGlmIChhY2N1bXVsYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRhY2N1bXVsYXRvciA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRhY2N1bXVsYXRvci5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiBhY2N1bXVsYXRvcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSB7SXRlbUVudHJ5W119IGl0ZW1FbnRyaWVzXHJcblx0ICogQHBhcmFtIHsoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW59IGNhbGxiYWNrXHJcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxyXG5cdCAqXHJcblx0ICogZmlsdGVyIGFuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFJldHVybiB0aGUgZW50cmllcyB0aGF0IGZhaWxlZCB0aGUgY29uZGl0aW9uXHJcblx0ICogUmVwbGFjZSB0aGUgZ2l2ZW4gYXJyYXkgd2l0aCB0aGUgZW50cmllcyB0aGF0IGRpZG4ndCBmYWlsIHRoZSBjb25kaXRpb24uXHJcblx0ICovXHJcblx0ZmlsdGVyQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbikge1xyXG5cdFx0Y29uc3QgZmlsdGVyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1FbnRyeSkpXHJcblx0XHRcdFx0ZmlsdGVyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdHJlbW92ZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVtb3ZlZEVudHJpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XHJcblxyXG5cdFx0aXRlbUVudHJpZXMubGVuZ3RoID0gZmlsdGVyZWRFbnRyaWVzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1FbnRyaWVzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpdGVtRW50cmllc1tpXSA9IGZpbHRlcmVkRW50cmllc1tpXTtcclxuXHJcblx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uQ2FjaGUsXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcclxuXHRDb2x1bW5IYW5kbGVyLFxyXG5cdENvbHVtblV0aWwsXHJcblx0SXRlbUNhY2hlLFxyXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlLFxyXG5cdFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksIENvbGxlY3Rpb25FbnRyeUZhY3RvcnksIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRRdWVyeVBhcnNlckZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCxcclxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcclxuXHRFbnRyeVBhcmVudCxcclxuXHRFbnRyeVN0YXR1cyxcclxuXHRJdGVtSWQsXHJcblx0SXRlbVJlc291cmNlSXRlbUlkTWFwXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkhhbmRsZXIge1xyXG5cdGVudHJpZXM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0fVxyXG5cclxuXHRnZXRQcm9taXNlcyAoc3RhdHVzUmVzb3VyY2U6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwKSB7XHJcblx0XHRjb25zdCBwcm9taXNlZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF07XHJcblx0XHRjb25zdCBwcm9taXNlZEV4cGFuZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcHJvbWlzZWQpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkW3BhcmVudElkXSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZEV4cGFuZClcclxuXHRcdFx0cmVzdWx0LnB1c2gocHJvbWlzZWRFeHBhbmRbcGFyZW50SWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdElkcyAoc3RhdHVzUmVzb3VyY2UpIHtcclxuXHRcdGNvbnN0IHJlc29sdmUgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XHJcblx0XHRjb25zdCBleHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuRVhQQU5EXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHJlc29sdmUpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHJlc29sdmVbcGFyZW50SWRdLnBhcmVudC5pdGVtSWQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gZXhwYW5kKVxyXG5cdFx0XHRyZXN1bHQucHVzaChleHBhbmRbcGFyZW50SWRdLnBhcmVudC5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5ID0gZW50cnkuY29sbGVjdGlvbjtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XHJcblx0XHRcdGNvbGxlY3Rpb24uYWRkSXRlbXMoZW50cnkuZml0dGluZywgbnVsbCwgdHJ1ZSk7IC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXHJcblxyXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uTWF0Y2hlciAoKTogQ29sbGVjdGlvbk1hdGNoZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbdGhpcy5lbnRyaWVzXSwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nID0gbWFwRW50cnkuZml0dGluZztcclxuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxyXG5cdFx0XHRcdGlkQXJyYXkucHVzaChmaXR0aW5nSXRlbS5pdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXHJcblx0XHRcdFx0aWRBcnJheS5wdXNoKG1heWJlSXRlbSk7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2VcclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdGFkZFRvQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXAsIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCk6IEl0ZW1SZXNvdXJjZVtdIHtcclxuXHRcdGxldCByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcclxuXHJcblx0XHRcdGlmICh1cGRhdGVJbml0aWFsICYmIG1hcEVudHJ5Lm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGJhdGNoRXhwYW5kIChwYXJlbnRUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSwgbmV3Q29sdW1ucyk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlW10+IHtcclxuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2xsZWN0aW9ucyk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHRcdGxldCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHQvLyBUT0RPOiBmaWx0ZXIgbG9jYWwgaXRlbXM/XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XHJcblxyXG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2goKDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudCkuaXRlbUlkKTtcclxuXHJcblx0XHRcdGl0ZW1FbnRyaWVzID0gaXRlbUVudHJpZXMuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5pdGVtcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXHJcblx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRudWxsLFxyXG5cdFx0XHRuZXdDb2x1bW5zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxyXG5cdFx0XHRcdFx0bmV3Q29sdW1ucyxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRpdGVtRW50cmllc1xyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSlcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeS51cGRhdGVDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XHJcblxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9ucztcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGJhdGNoRXh0ZW5kIChcclxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcclxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0cXVlcnlDYWxsYmFjayxcclxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSxcclxuXHRcdHJldHVybkFsbEl0ZW1zID0gZmFsc2VcclxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbGxlY3Rpb25zKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih7fSk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHRcdGxldCBpdGVtSWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gcXVlcnlDYWxsYmFjayhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcclxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKCg8RW50cnlQYXJlbnQ+IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpLml0ZW1JZCk7XHJcblxyXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcclxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucykub2JqZWN0LFxyXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRvcHRpb25zLmNvbHVtbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlID0gY29sbGVjdGlvbnNbcGFyZW50SWRdO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5hZGRJdGVtcyggLy8gc2hvdWxkIGdvIGZpcnN0XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSByZXR1cm5BbGxJdGVtcyA/IGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRiYXRjaEZldGNoIChcclxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcclxuXHRcdHBhcmVudElkQXJyYXk6IG51bWJlcltdLFxyXG5cdFx0aXRlbVR5cGU6IHN0cmluZyxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcclxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2UgPSB0aGlzLmNyZWF0ZVN0YXR1c1Jlc291cmNlKHBhcmVudFR5cGUsIHBhcmVudElkQXJyYXksIGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbCh0aGlzLmdldFByb21pc2VzKHJlc291cmNlKSkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLmdldFJlcXVlc3RJZHMocmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHRcdFx0XHRcdG51bGwgOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLnF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpWzBdLFxyXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcclxuXHRcdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShyZXNvdXJjZSwgaXRlbUVudHJ5UmVzb3VyY2UsIGl0ZW1DYWNoZSk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChoYXNQcm9wZXJ0aWVzKHJlc291cmNlW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpLnRoZW4oXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcclxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1ucyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1DYWNoZVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiByZXNvdXJjZVtFTlRSWV9TVEFUVVMuQ0FDSEVEXTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVN0YXR1c1Jlc291cmNlIChcclxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcclxuXHRcdHBhcmVudElkQXJyYXk6IG51bWJlcltdLFxyXG5cdFx0aXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucyxcclxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXNJZCBpbiBFTlRSWV9TVEFUVVMpXHJcblx0XHRcdHJlc3VsdFtFTlRSWV9TVEFUVVNbc3RhdHVzSWRdXSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xyXG5cdFx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7IC8vIHVzZSBwcm9jZXNzRW50cnlPcHRpb25zIHRvIGNsb25lXHJcblxyXG5cdFx0XHRsZXQgc3RhdHVzUmVzb3VyY2U7XHJcblxyXG5cdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfTtcclxuXHJcblx0XHRcdHN0YXR1c1Jlc291cmNlID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgZW50cnlPcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xyXG5cclxuXHRcdFx0cmVzdWx0W3N0YXR1c1Jlc291cmNlLnN0YXR1c11bcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoIChcclxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XHJcblx0XHRjb25zdCBlbnRyeSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xyXG5cclxuXHRcdHN3aXRjaCAoc3RhdHVzUmVzb3VyY2Uuc3RhdHVzKSB7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGVudHJ5KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2U7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlUmVtb3RlKGVudHJ5LCBpdGVtQ2FjaGUpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5MT0NBTDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoZW50cnksIGl0ZW1DYWNoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXREZWZlcnJlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Ly8gYmVjYXVzZSB0aGUgY29sbGVjdGlvbiBlbnRyeSBpcyBub3QgZnVsbHkgbG9hZGVkIHlldCwgd2UnbGwgaGF2ZSB0byByZWx5IG9uIHRoZSBvcHRpb25zXHJcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucztcclxuXHRcdGNvbnN0IGVudHJ5Q29sdW1ucyA9IGVudHJ5T3B0aW9ucy5jb2x1bW5zO1xyXG5cclxuXHRcdGxldCBpc0NvbHVtblN1YnNldCA9IGZhbHNlO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcclxuXHRcdFx0ZW50cnlPcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhvcHRpb25zLmNvbHVtbnMsIGVudHJ5Q29sdW1ucykubWVyZ2VkO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRlbnRyeTogY29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0XHRcdHN0YXR1czogY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSA/IEVOVFJZX1NUQVRVUy5MT0NBTCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGVudHJ5Q29sdW1ucyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ0NvbHVtbnM6IHRydWUgZm9yIGNvbGxlY3Rpb25zIGlzIGRlcHJlY2F0ZWQhJyk7XHJcblx0XHRcdGlzQ29sdW1uU3Vic2V0ID0gdHJ1ZTtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHRpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChvcHRpb25zLmNvbHVtbnMsIGVudHJ5Q29sdW1ucywgZmFsc2UpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGVudHJ5OiBjb2xsZWN0aW9uRW50cnksXHJcblx0XHRcdHN0YXR1czogaXNDb2x1bW5TdWJzZXQgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0Z2V0RW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMsIGxvY2FsRW50cmllczogQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgcXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XHJcblx0XHRjb25zdCBjYWNoZWRFbnRyeSA9ICh0aGlzLmlzTG9jYWwob3B0aW9ucykgPyBsb2NhbEVudHJpZXMgOiB0aGlzLmVudHJpZXMpLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoY2FjaGVkRW50cnkgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiB0aGlzLmdldE5ld0VudHJ5U3RhdHVzKGl0ZW1UeXBlLCBxdWVyeSwgb3B0aW9ucywgbG9jYWxFbnRyaWVzLCBkZWZlcnJlZEVudHJpZXMpO1xyXG5cclxuXHRcdGlmIChjYWNoZWRFbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdHJldHVybiB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoY2FjaGVkRW50cnksIG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGVudHJ5OiBjYWNoZWRFbnRyeSxcclxuXHRcdFx0c3RhdHVzOiB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQob3B0aW9ucy5jb2x1bW5zLCBjYWNoZWRFbnRyeS5jb2x1bW5zLnJlcXVlc3QsIGNhY2hlZEVudHJ5LmNvbHVtbnMucmVxdWVzdENvbHVtbnNUcnVlKSA/XHJcblx0XHRcdFx0RU5UUllfU1RBVFVTLkNBQ0hFRCA6IEVOVFJZX1NUQVRVUy5FWFBBTkRcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRnZXROZXdFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnksIG9wdGlvbnMsIGxvY2FsRW50cmllczogQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdGxldCBkZWZlcnJlZE9wdGlvbnM7XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IGRlZmVycmVkRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKSB7XHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdGVudHJ5OiBkZWZlcnJlZEVudHJpZXMuYWRkKHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpKSxcclxuXHRcdFx0XHRcdHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZGVmZXJyZWRPcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XHJcblx0XHRcdGRlZmVycmVkT3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMoZGVmZXJyZWRPcHRpb25zLmNvbHVtbnMsIG9wdGlvbnMuY29sdW1ucykubWVyZ2VkO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUx9O1xyXG5cclxuXHRcdGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdC8vIHdpbGwgYWxzbyBhZGQgdGhlIGRlZmVycmVkIGVudHJ5XHJcblx0XHR0aGlzLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5SRVNPTFZFfTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUJhdGNoUmVzcG9uc2UgKHN0YXR1c1Jlc291cmNlLCBpdGVtRW50cnlSZXNvdXJjZSwgaXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmNhY2hlZClcclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmNhY2hlZFtwYXJlbnRJZF07XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5yZXNvbHZlKSB7XHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5yZXNvbHZlW3BhcmVudElkXS5yZXNvbHZlKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGl0ZW1zOiBpdGVtRW50cnlSZXNvdXJjZS5pdGVtc1twYXJlbnRJZF0sXHJcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlSZXNvdXJjZS5jb2x1bW5zXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuZXhwYW5kKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZXhwYW5kW3BhcmVudElkXTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS51cGRhdGVDb2x1bW5zKGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbkV4cGFuc2lvbik7XHJcblxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UubG9jYWwpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBzdGF0dXNSZXNvdXJjZS5sb2NhbFtwYXJlbnRJZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UGFyZW50KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQuaXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHBhcmVudC5pdGVtSWQsXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbnNcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVMb2NhbCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucztcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGl0ZW1zOiBpdGVtQ2FjaGUuZ2V0QnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucywgZmFsc2UpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZSAoY29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGUpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBvcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XHJcblxyXG5cdFx0bGV0IGNvbHVtbkluZm87XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQsXHJcblx0XHRcdFx0XHRjb2x1bW5JbmZvXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oaXRlbUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZSh7XHJcblx0XHRcdFx0XHRpdGVtczogaXRlbUVudHJpZXMuY29uY2F0KGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSkpLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uSW5mb1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsIChvcHRpb25zKSB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGlkZW50aXR5LCBJdGVtSWQgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcy8nO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyIHtcclxuXHRtYXA6IHtcclxuXHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXToge1xyXG5cdFx0XHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnlcclxuXHRcdFx0bWF0Y2hlczoge1xyXG5cdFx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IHsgaXRlbTogSXRlbUVudHJ5LCBpc01hdGNoOiBib29sZWFuIH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0gPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSxcclxuXHRcdHByaXZhdGUgdXBkYXRlSW5pdGlhbDogYm9vbGVhblxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGV4cGFuZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25DYWNoZSBvZiB0aGlzLmNvbGxlY3Rpb25DYWNoZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlJdGVtVHlwZShpdGVtRW50cnkuaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgIG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5SWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XHJcblx0XHRcdFx0bGV0IG1hdGNoZXM7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9IHtjb2xsZWN0aW9uOiBjb2xsZWN0aW9uRW50cnksIG1hdGNoZXM6IHt9fTtcclxuXHJcblx0XHRcdFx0bWF0Y2hlcyA9IHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXS5tYXRjaGVzO1xyXG5cclxuXHRcdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0bWF0Y2hlc1tpdGVtSWRdID0ge1xyXG5cdFx0XHRcdFx0aXRlbTogaXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0aXNNYXRjaDogcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdClcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHNlbGY7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHJcblx0XHRcdGlmICh0aGlzLmhhc0ZpdHRpbmdJdGVtcyhtYXBFbnRyeS5tYXRjaGVzKSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChtYXBFbnRyeS5jb2xsZWN0aW9uKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkVG9Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUVudHJpZXMgPSBncm91cGVkSXRlbUVudHJpZXMuZml0dGluZztcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKGZpdHRpbmdJdGVtRW50cmllcywgcmVzdWx0UmVzb3VyY2UsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoZml0dGluZ0l0ZW1FbnRyaWVzLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdJdGVtSWRzID0gdGhpcy5ncm91cEl0ZW1JZHMobWFwRW50cnkubWF0Y2hlcykuZml0dGluZztcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCB8fCBjb2xsZWN0aW9uRW50cnkgIT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhmaXR0aW5nSXRlbUlkcywgcmVzdWx0UmVzb3VyY2UsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zICgpIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5ub3RGaXR0aW5nLCBudWxsLCB0cnVlKTtcclxuXHJcblx0XHRcdC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhncm91cGVkSXRlbUVudHJpZXMuZml0dGluZywgbnVsbCwgdHJ1ZSk7XHJcblxyXG5cdFx0XHRpZiAoZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ3JvdXBJdGVtRW50cmllcyAobWF0Y2hlcykge1xyXG5cdFx0Y29uc3QgZml0dGluZzogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblx0XHRjb25zdCBtYXliZTogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBtYXRjaC5pdGVtO1xyXG5cdFx0XHRjb25zdCBpc01hdGNoID0gbWF0Y2guaXNNYXRjaDtcclxuXHJcblx0XHRcdGlmIChpc01hdGNoID09PSB0cnVlKVxyXG5cdFx0XHRcdGZpdHRpbmcucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRlbHNlIGlmIChpc01hdGNoID09PSBmYWxzZSlcclxuXHRcdFx0XHRub3RGaXR0aW5nLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRtYXliZS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nLCBtYXliZTogbWF5YmV9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBncm91cEl0ZW1JZHMgKG1hdGNoZXMpIHtcclxuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcclxuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBtYXRjaGVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHQobWF0Y2guaXNNYXRjaCA9PT0gZmFsc2UgPyBub3RGaXR0aW5nIDogZml0dGluZykucHVzaChtYXRjaC5pdGVtLml0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nfTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFzRml0dGluZ0l0ZW1zIChtYXRjaGVzKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0uaXNNYXRjaCA9PT0gdHJ1ZSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Uge1xyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdEl0ZW1zOiBmYWxzZSxcclxuXHRcdFx0XHRlZGl0Q29sbGVjdGlvbjogZmFsc2UsXHJcblx0XHRcdFx0bW9kSW5zdGFudDogZmFsc2UsXHJcblx0XHRcdFx0ZW5hYmxlU2F2ZTogdHJ1ZSxcclxuXHRcdFx0XHRvbkl0ZW1zQ3JlYXRlZDogbm9vcCxcclxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCwgLy8gbmVlZGVkIGZvciBjb21wYXJpc29uXHJcblx0XHRcdFx0b25BZGQ6IG5vb3AsXHJcblx0XHRcdFx0b25SZW1vdmU6IG5vb3AsXHJcblx0XHRcdFx0b25BZGRJbml0aWFsOiBub29wLFxyXG5cdFx0XHRcdG9uUmVtb3ZlSW5pdGlhbDogbm9vcCxcclxuXHRcdFx0XHRvbkFjdGl2YXRlSXRlbTogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlSXRlbTogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlQ29sbGVjdGlvbjogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXHJcblx0XHRcdFx0cmVzb3VyY2VLZXk6IG51bGwsIC8vIFRPRE86IHJlbW92ZVxyXG5cdFx0XHRcdGNsZWFyT25UYWJDaGFuZ2U6IHRydWUsXHJcblx0XHRcdFx0Y2xlYXJPblN1YlRhYkNoYW5nZTogdHJ1ZSxcclxuXHRcdFx0XHRjdXN0b206IG51bGxcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uQ2FjaGUge1xyXG5cdGNhY2hlID0ge307XHJcblx0YWxsQ29sdW1ucyA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNldENvbHVtbiAoaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKSB7XHJcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5jYWNoZVtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcclxuXHJcblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVudHJ5W2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW5zIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNwb25zZVR5cGUgaW4gcmVzcG9uc2VDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSByZXNwb25zZUNvbHVtbnNbcmVzcG9uc2VUeXBlXTtcclxuXHJcblx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXHJcblx0XHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV1bY29sdW1uSWRdID0gdGhpcy5zZXRDb2x1bW4ocmVzcG9uc2VUeXBlLCBjb2x1bW5zW2NvbHVtbklkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxyXG5cdFx0XHR0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmV0cmlldmUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk6IHsgbWlzc2luZzogYW55W10gfCB0cnVlLCBjYWNoZWQ6IG9iamVjdCB9IHtcclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRpZiAodGhpcy5jb250YWluc0FsbChpdGVtVHlwZSkpXHJcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcclxuXHJcblx0XHRcdHJldHVybiB7Y2FjaGVkOiB7fSwgbWlzc2luZzogdHJ1ZX07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcmVwb25zZUFjY3VtdWxhdG9yID0ge307XHJcblx0XHRjb25zdCByZXF1ZXN0QWNjdW11bGF0b3IgPSBbXTtcclxuXHJcblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVwb25zZUFjY3VtdWxhdG9yKTtcclxuXHJcblx0XHRyZXR1cm4ge21pc3Npbmc6IHJlcXVlc3RBY2N1bXVsYXRvciwgY2FjaGVkOiByZXBvbnNlQWNjdW11bGF0b3J9O1xyXG5cdH1cclxuXHJcblx0Y29udGFpbnNBbGwgKGl0ZW1UeXBlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGdldENvbHVtbnMgKGl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IFtdIDogdGhpcy5jYWNoZVtpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRyZXN1bHRbaXRlbVR5cGVdID0gY29sdW1ucztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1ucyAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpIHtcclxuXHRcdC8vIGFsd2F5cyByZXRyaWV2ZSB0aGUgaWQgY29sdW1uXHJcblx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCAnaWQnLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucylcclxuXHRcdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW4gKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpIHtcclxuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uKGl0ZW1UeXBlLCBjb2x1bW4uaWQpO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV1bY29sdW1uLmlkXSA9IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgbWlzc2luZ0Rlcml2ZWQgPSBbXTtcclxuXHJcblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY29sdW1uLmNoaWxkcmVuLCBtaXNzaW5nRGVyaXZlZCwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XHJcblxyXG5cdFx0aWYgKG1pc3NpbmdEZXJpdmVkLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG1pc3NpbmdSZXF1ZXN0ID0ge307XHJcblx0XHRtaXNzaW5nUmVxdWVzdFtjb2x1bW4uaWRdID0gbWlzc2luZ0Rlcml2ZWQ7XHJcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaChtaXNzaW5nUmVxdWVzdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENvbHVtbiAoaXRlbVR5cGUsIGNvbHVtbklkKSB7XHJcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNhY2hlW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb24ge1xyXG5cdGV4cGFuc2lvbk1hcDogYW55ID0ge307XHJcblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IHN0cmluZyxcclxuXHRcdHB1YmxpYyByZXF1ZXN0Q29sdW1uczogYW55IHwgYm9vbGVhbixcclxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IGFueVxyXG5cdCkge1xyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XHJcblx0XHRcdC8vIHJlcXVlc3RDb2x1bW5zIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXksIHdoZW4gaXQgaXMgdHJ1ZSBkZXJpdmVkIGNvbHVtbiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3RcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucy5wdXNoKGNvbHVtbklkKTtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cnVuIChjb2x1bW5JbmZvOiBhbnksIHJldHVybkV4cGFuc2lvblJlc3VsdDogYm9vbGVhbikge1xyXG5cdFx0Y29uc3QgY29sdW1uSW5mb0lkID0gY29sdW1uSW5mby5pZDtcclxuXHJcblx0XHRpZiAodGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmV0dXJuRXhwYW5zaW9uUmVzdWx0ID8gdGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXSA6XHJcblx0XHRcdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXS5tZXJnZWQ7XHJcblxyXG5cdFx0Y29uc3QgaXNDb2x1bW5TdWJzZXQgPSB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQoXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdGNvbHVtbkluZm8ucmVxdWVzdCxcclxuXHRcdFx0Y29sdW1uSW5mby5yZXF1ZXN0Q29sdW1uc1RydWVcclxuXHRcdCk7XHJcblxyXG5cdFx0aWYgKGlzQ29sdW1uU3Vic2V0KVxyXG5cdFx0XHRyZXR1cm4gcmV0dXJuRXhwYW5zaW9uUmVzdWx0ID8gbnVsbCA6IGNvbHVtbkluZm87XHJcblxyXG5cdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXSA9IHRoaXMuZXhwYW5kQ29sdW1uSW5mbyhjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRyZXR1cm4gcmV0dXJuRXhwYW5zaW9uUmVzdWx0ID8gdGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXSA6XHJcblx0XHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0ubWVyZ2VkO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHBhbmRDb2x1bW5JbmZvIChjb2x1bW5TZXQ6IENvbHVtblNldCkge1xyXG5cdFx0Y29uc3QgcmVxdWVzdE1lcmdlUmVzdWx0ID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1uU2V0LnJlcXVlc3QsIHRoaXMucmVxdWVzdENvbHVtbnMpO1xyXG5cdFx0Y29uc3QgbWVyZ2VkUmVzcG9uc2VDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsXHJcblx0XHRcdC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhjb2x1bW5TZXQucmVzcG9uc2UsIHRoaXMucmVzcG9uc2VDb2x1bW5zKVxyXG5cdFx0XHQubWVyZ2VkO1xyXG5cclxuXHRcdGNvbnN0IG1lcmdlZCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RNZXJnZVJlc3VsdC5tZXJnZWQsXHJcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdE1lcmdlUmVzdWx0LmRpZmZlcmVuY2UsXHJcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcclxuXHRcdFx0ZmFsc2UsXHJcblx0XHRcdGZhbHNlXHJcblx0XHQpO1xyXG5cclxuXHRcdG1lcmdlZC5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSB8fCBjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlO1xyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5DYWNoZSwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSGFuZGxlciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY2FjaGU6IENvbHVtbkNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbikge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW5zIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucykge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHRmZXRjaEl0ZW1UeXBlVHJhbnNsYXRpb25zIChpdGVtVHlwZXMpOiBQcm9taXNlPGFueT4ge1xyXG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxyXG5cdFx0XHRwcm9taXNlc1tpdGVtVHlwZV0gPSB0aGlzLmZldGNoKGl0ZW1UeXBlLCBbJ2lkJ10pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcclxuXHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiByZXNwb25zZSlcclxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0IChpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XHJcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHBhcmFtcykudGhlbihcclxuXHRcdFx0Y29sdW1uUmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGNvbHVtbnMsXHJcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGZldGNoIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHBhcmFtcyA9IHt9KTogUHJvbWlzZTxhbnk+IHtcclxuXHRcdGNvbnN0IGNvbHVtblJlc291cmNlID0gdGhpcy5jYWNoZS5yZXRyaWV2ZShpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdGlmIChjb2x1bW5SZXNvdXJjZS5taXNzaW5nICE9PSB0cnVlICYmIGNvbHVtblJlc291cmNlLm1pc3NpbmcubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbHVtblJlc291cmNlLmNhY2hlZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgY29sdW1uUmVzb3VyY2UubWlzc2luZywgcGFyYW1zKS50aGVuKHJlc3BvbnNlQ29sdW1ucyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcclxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcclxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmNhY2hlZFxyXG5cdFx0XHRcdCkubWVyZ2VkO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hBbGwgKGl0ZW1UeXBlKTogUHJvbWlzZTxhbnk+IHtcclxuXHRcdGlmICh0aGlzLmNhY2hlLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmNhY2hlLmdldENvbHVtbnMoaXRlbVR5cGUpKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCB0cnVlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mbyB7XHJcblx0aWQ6IHN0cmluZztcclxuXHRsZXZlbDogbnVtYmVyO1xyXG5cdHBhdGg6IHN0cmluZztcclxuXHR0YWlsUGF0aDogc3RyaW5nO1xyXG5cdGl0ZW1UeXBlOiBzdHJpbmcgPSAnJztcclxuXHRjaGlsZHJlbjogQ29sdW1uSW5mb1tdID0gW107XHJcblx0aXNMZWFmOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKHJlYWRvbmx5IGFwaUNvbHVtbjogYW55LCByZWFkb25seSBwYXJlbnQ6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbCkge1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XHJcblxyXG5cdFx0dGhpcy5pZCA9IGNvbHVtbklkO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcclxuXHRcdFx0dGhpcy5sZXZlbCA9IDA7XHJcblx0XHRcdHRoaXMucGF0aCA9IGNvbHVtbklkO1xyXG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gJyc7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmxldmVsID0gcGFyZW50LmxldmVsICsgMTtcclxuXHRcdFx0dGhpcy5wYXRoID0gcGFyZW50LnBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XHJcblx0XHRcdHRoaXMudGFpbFBhdGggPSBwYXJlbnQubGV2ZWwgPT09IDAgP1xyXG5cdFx0XHRcdGNvbHVtbklkIDpcclxuXHRcdFx0XHRwYXJlbnQudGFpbFBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7UmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwfSBmcm9tICcuLi90eXBlcyc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0IHtcblx0aWQgPSArK2N1cnJlbnRJZDtcblxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XG5cdHJlc3BvbnNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXG5cdGxpbms6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbDtcblx0bWFpbjogQ29sdW1uSW5mb1tdID0gW107XG5cdGRlcml2ZWQ6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRyb290OiBDb2x1bW5JbmZvW10gPSBbXTtcblx0bGVhZjogQ29sdW1uSW5mb1tdID0gW107XG5cdGZvcm1hdHRlZDoge21haW46IENvbHVtbkluZm9bXSwgZGVyaXZlZDogQ29sdW1uSW5mb1tdfSA9IHttYWluOiBbXSwgZGVyaXZlZDogW119O1xuXHRmaWx0ZXJlZDogQ29sdW1uSW5mb1tdID0gW107XG5cdGN1c3RvbTogQ29sdW1uSW5mb1tdID0gW107XG5cdHNlYXJjaGFibGU6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRpdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0bm90SXRlbTogQ29sdW1uSW5mb1tdID0gW107XG5cblx0ZW5hYmxlQ2FjaGluZzogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGUsXG5cdFx0cHVibGljIHJlcXVlc3Q6IFJlcXVlc3RDb2x1bW5zLFxuXHQpIHtcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdCA9PT0gdHJ1ZTtcblx0fVxuXG5cdHJlc29sdmUgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0dGhpcy5lbmFibGVDYWNoaW5nID0gZW5hYmxlQ2FjaGluZztcblxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSlcblx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyhyZXNwb25zZUNvbHVtbnMpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMucHJvY2Vzc1JlcXVlc3RDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzUmVzcG9uc2VDb2x1bW5zIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0dGhpcy5yZXF1ZXN0ID0gW107XG5cdFx0dGhpcy5yZXNwb25zZSA9IHRoaXMuZW5hYmxlQ2FjaGluZyA/XG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1ucyh0aGlzLml0ZW1UeXBlLCB0cnVlLCByZXNwb25zZUNvbHVtbnMpIDpcblx0XHRcdHJlc3BvbnNlQ29sdW1ucztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSkge1xuXHRcdFx0dGhpcy5tYWluLnB1c2godGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgW10sIG51bGwsIHJlc3BvbnNlQ29sdW1ucykpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0LnB1c2goY29sdW1uSWQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1JlcXVlc3RDb2x1bW5zIChyZXNwb25zZUNvbHVtbnMsIGluY2x1ZGVJZENvbHVtbikge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IDxvYmplY3RbXT4gdGhpcy5yZXF1ZXN0OyAvLyB3ZSBjYW4gYXNzdW1lIHJlcXVlc3RDb2x1bW5zIGlzIGFuIGFycmF5IGhlcmVcblxuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcblxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoY29sdW1uSW5mbyA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAoIWNvbHVtbkluZm8uaXNMZWFmKVxuXHRcdFx0XHR0aGlzLnJvb3QucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cblx0XHRpZiAoaW5jbHVkZUlkQ29sdW1uICYmIHRoaXMucmVzcG9uc2VbaXRlbVR5cGVdLmlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKCdpZCcsIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoY29sdW1uSW5mbyAhPT0gbnVsbClcblx0XHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZXF1ZXN0Q29sdW1uSW5mbyAocmVxdWVzdENvbHVtbiwgaXRlbVR5cGUsIHBhcmVudCwgcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbHVtbi5pZDtcblxuXHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV1bY29sdW1uSWRdO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignTm8gYXBpIGNvbHVtbiBmb3IgcmVxdWVzdCBjb2x1bW4nLCBjb2x1bW5JZCwgJ2ZvciBpdGVtVHlwZScsIGl0ZW1UeXBlKTtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW5hYmxlQ2FjaGluZylcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xuXG5cdFx0Y29uc3QgcmVzdWx0UmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xuXG5cdFx0aWYgKHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdID0ge307XG5cblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdW2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIHBhcnNlZENvbHVtbi5jaGlsZHJlbiwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW5JbmZvIChjb2x1bW5JZCwgaXRlbVR5cGUsIGNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk6IENvbHVtbkluZm8ge1xuXHRcdGNvbnN0IGNvbHVtblV0aWwgPSB0aGlzLmNvbHVtblV0aWw7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2VDb2x1bW4sIHBhcmVudCk7XG5cdFx0Y29uc3QgaXNEZXJpdmVkID0gcGFyZW50ICE9PSBudWxsO1xuXG5cdFx0aWYgKGlzRGVyaXZlZClcblx0XHRcdHRoaXMuZGVyaXZlZC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdGVsc2UgLy8gd2UgY291bGQgcG9zc2libHkgYWRkIGRlcml2ZWQgY29sdW1ucyB0byAnbm90SXRlbSdcblx0XHRcdHRoaXNbY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGb3JtYXR0ZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5mb3JtYXR0ZWRbaXNEZXJpdmVkID8gJ2Rlcml2ZWQnIDogJ21haW4nXS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGaWx0ZXJlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmZpbHRlcmVkLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAoY29sdW1uVXRpbC5pc1NlYXJjaGFibGVDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5zZWFyY2hhYmxlLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAoY29sdW1uVXRpbC5pc0N1c3RvbUNvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmN1c3RvbS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uLnR5cGUgPT09ICdsaW5rJylcblx0XHRcdHRoaXMubGluayA9IGNvbHVtbkluZm87XG5cblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmxlYWYucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0cmV0dXJuIGNvbHVtbkluZm87XG5cdFx0fVxuXG5cdFx0Y29sdW1uSW5mby5pdGVtVHlwZSA9IHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlO1xuXHRcdGNvbHVtbkluZm8uY2hpbGRyZW4gPSBbXTtcblx0XHRjb2x1bW5JbmZvLmlzTGVhZiA9IGZhbHNlO1xuXG5cdFx0Ly8gY29sdW1ucyBpcyAqbm90KiB0cnVlXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbklkIG9mIGNoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCBjaGlsZEluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKFxuXHRcdFx0XHRjaGlsZENvbHVtbklkLFxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSxcblx0XHRcdFx0Y29sdW1uSW5mbyxcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoY2hpbGRJbmZvID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29sdW1uSW5mby5jaGlsZHJlbi5wdXNoKGNoaWxkSW5mbyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkluZm87XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiwgUkVOREVSX0FTX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IExvY2FsQ29sdW1uLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNvcHksIGV4dGVuZCwgZ2V0Rmlyc3RQcm9wZXJ0eSwgaXNEZWZpbmVkIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5VdGlsIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRnZXRDb2x1bW5QYXRoIChjb2x1bW5zLCByZW5kZXJBcykge1xyXG5cdFx0bGV0IHNlcGVyYXRvciA9ICcnO1xyXG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0cmVzdWx0ICs9IHNlcGVyYXRvciArIGNvbHVtbi5pZDtcclxuXHRcdFx0c2VwZXJhdG9yID0gQ09MVU1OX1NFUEVSQVRPUjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVuZGVyQXMgIT09IG51bGwpXHJcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldERhdGVGb3JtYXRPcHRpb25zIChjb2x1bW5UeXBlKSB7XHJcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcclxuXHJcblx0XHRjb25zdCBmb3JtYXRzID0ge1xyXG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXHJcblx0XHRcdCdKLU0nOiBub3cuZm9ybWF0KCdERC1NTScpLFxyXG5cdFx0XHQnaitGK1knOiBub3cuZm9ybWF0KCdEIE1NTSBZWVlZJyksXHJcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXHJcblx0XHRcdCdGJzogbm93LmZvcm1hdCgnTU1NJyksXHJcblx0XHRcdCdmJzogbm93LmZvcm1hdCgnTU1NTScpLFxyXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcclxuXHRcdFx0J2QnOiBub3cuZm9ybWF0KCdkZGQnKVxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoY29sdW1uVHlwZSA9PT0gJ2RhdGV0aW1lJylcclxuXHRcdFx0ZXh0ZW5kKGZvcm1hdHMsIHtcclxuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxyXG5cdFx0XHRcdCdKLU0rSDppJzogbm93LmZvcm1hdCgnREQtTU0gSEg6bW0nKSxcclxuXHRcdFx0XHQnaitGK1krSDppJzogbm93LmZvcm1hdCgnREQgTU1NTSBZIEhIOm1tJyksXHJcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxyXG5cdFx0XHRcdCdIOmknOiBub3cuZm9ybWF0KCdISDptbScpLFxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gZm9ybWF0cztcclxuXHR9XHJcblxyXG5cdGlzU3RyaW5nQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICdwaG9uZSc6XHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxyXG5cdFx0XHRcdC8vIGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRmxvYXRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xyXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNJbnRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pc0Zsb2F0Q29sdW1uKGNvbHVtbikgfHwgdGhpcy5pc0ludENvbHVtbihjb2x1bW4pO1xyXG5cdH1cclxuXHJcblx0aXNDdXN0b21Db2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIGNvbHVtbi5maWVsZHR5cGUgPT09ICdjdXN0b21maWVsZCc7XHJcblx0fVxyXG5cclxuXHRpc0l0ZW1Db2x1bW4gKGNvbHVtbiwgaW5jbHVkZUlkID0gdHJ1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdpZCc6XHJcblx0XHRcdFx0cmV0dXJuIGluY2x1ZGVJZDtcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRGF0ZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNSZW5kZXJlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0ZpbHRlcmVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdC8vIHVnbHkgaGFjayA6LShcclxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0Zvcm1hdHRlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1NlbGVjdGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdibG9iJzpcclxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XHJcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcclxuXHRcdFx0Y2FzZSAnaWQnOlxyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0Y2FzZSAnb3JkZXInOlxyXG5cdFx0XHRjYXNlICdwYXJlbnRpZCc6XHJcblx0XHRcdGNhc2UgJ3BhcmVudHR5cGUnOlxyXG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XHJcblx0XHRcdGNhc2UgJ3Rva2VuJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRoYXNMb2NhdGlvblByb3BlcnR5IChjb2x1bW4sIGxvY2F0aW9uKSB7XHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG5cdFx0cmV0dXJuIChsb2NhdGlvbiAmIGNvbHVtbi5sb2NhdGlvbikgIT09IDA7XHJcblx0fVxyXG5cclxuXHRpc0VkaXRhYmxlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdGlmIChjb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRpc1NlYXJjaGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uKSB7XHJcblx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZygnZ2V0RGVmYXVsdFdlaWdodCcsIGNvbHVtbik7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkb3VibGUnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRjYXNlICdpbnQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRcdHJldHVybiAwLjU7XHJcblxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRcdHJldHVybiAxLjU7XHJcblxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2h0bWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdFx0cmV0dXJuIFsnPScsICc+JywgJzwnXTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZXR1cm5zIHdoZXRoZXIgdGhlIGZpcnN0IGNvbHVtbiBzZXQgaXMgYSBzdWJzZXQgb2YgdGhlIHNlY29uZFxyXG5cdGlzQ29sdW1uU3Vic2V0IChmaXJzdCwgc2Vjb25kLCBzZWNvbmRUcnVlKSB7XHJcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxyXG5cdFx0XHRyZXR1cm4gc2Vjb25kVHJ1ZTtcclxuXHJcblx0XHQvLyB3aGVuIHNlY29uZFRydWUgaXMgdGhlIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBmb3IgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnNDb2x1bW4oY29sdW1uLCBzZWNvbmQpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQ29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQhdGhpcy5jb250YWluc0NvbHVtbihcclxuXHRcdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0XHQpXHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXNwb25zZUNvbHVtbnNBdmFpbGFibGUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBwYXJzZWRDb2x1bW4uY2hpbGRyZW47XHJcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcclxuXHRcdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XHJcblxyXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhdGhpcy5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkcmVuLCByZXNwb25zZUNvbHVtbk1hcCkpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlmZmVyZW5jZTogY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nICdtZXJnZWQnIGFuZCAnZGlmZmVyZW5jZScgcHJvcGVydGllc1xyXG5cdCAqL1xyXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0LCBzZWNvbmQpOiB7bWVyZ2VkOiBSZXF1ZXN0Q29sdW1ucywgZGlmZmVyZW5jZTogUmVxdWVzdENvbHVtbnN9IHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXHJcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiBbXX07XHJcblxyXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcclxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IHRydWV9O1xyXG5cclxuXHRcdGNvbnN0IG1lcmdlZDogUmVxdWVzdENvbHVtbnMgPSBjb3B5KGZpcnN0KTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IFJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygc2Vjb25kKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oY29sdW1uLCBtZXJnZWQpO1xyXG5cclxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxyXG5cdFx0XHRcdGRpZmZlcmVuY2UucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcclxuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XHJcblx0XHRcdFx0W2NvbHVtbi5pZF06IFtdXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWRkZWRDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oXHJcblx0XHRcdFx0Y2hpbGRDb2x1bW4sXHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRhZGRlZENvbHVtbnMucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFkZGVkQ29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdFtjb2x1bW4uaWRdOiBhZGRlZENvbHVtbnNcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwYXJzZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4pIHtcclxuXHRcdGNvbnN0IGlzTGVhZiA9IHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJztcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gaXNMZWFmID8gcmVxdWVzdENvbHVtbiA6IGdldEZpcnN0UHJvcGVydHkocmVxdWVzdENvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aWQ6IGNvbHVtbklkLFxyXG5cdFx0XHRjaGlsZHJlbjogaXNMZWFmID8gW10gOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkXVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlcyB0d28gc2V0cyBvZiByZXNwb25zZSBjb2x1bW5zLlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBhICdtZXJnZWQnIGFuZCBhICdkaWZmZXJlbmNlJyBwcm9wZXJ0eS5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1ucyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IGZpcnN0W2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxyXG5cdFx0XHRcdGZpcnN0W2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRzZWNvbmRbaXRlbVR5cGVdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQubWVyZ2VkO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcclxuXHRcdFx0aWYgKGZpcnN0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XHJcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGRpZmZlcmVuY2U6IHRoZSBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdC5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGZpcnN0KVxyXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gZmlyc3RbY29sdW1uSWRdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gc2Vjb25kKSB7XHJcblx0XHRcdGlmIChpc0RlZmluZWQoZmlyc3RbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uSWQuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbnMgKGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGlmICh0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW4pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHRoaXMucGFyc2VDb25maWdDb2x1bW4oY29sdW1uKSwgcmVxdWVzdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTG9jYWxDb25maWdDb2x1bW5zIChjb25maWdDb2x1bW5zLCBsb2NhbENvbHVtbnMsIHJlbW90ZUNvbHVtbkNhbGxiYWNrLCBsb2NhbENvbHVtbkNhbGxiYWNrKSB7XHJcblx0XHRjb25zdCBsb2NhbENvbHVtbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgbG9jYWxDb2x1bW4gb2YgbG9jYWxDb2x1bW5zKVxyXG5cdFx0XHRsb2NhbENvbHVtbk1hcFtsb2NhbENvbHVtbi5pZF0gPSBsb2NhbENvbHVtbjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmZpZ0lkIG9mIGNvbmZpZ0NvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyc2VkQ29uZmlnSWQgPSBjb25maWdJZC5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKTtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb25maWdJZFswXTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uSWQpKSB7XHJcblx0XHRcdFx0cmVtb3RlQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGNvbHVtbklkLCBwYXJzZWRDb25maWdJZFsxXSk7XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBjb2x1bW4gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBsb2NhbENvbHVtbnNcclxuXHRcdFx0aWYgKGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bG9jYWxDb2x1bW5DYWxsYmFjayhjb25maWdJZCwgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdKTtcclxuXHRcdFx0ZGVsZXRlIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbnNvbGlkYXRlQ29sdW1ucyAoY29uZmlnQ29sdW1ucywgbG9jYWxDb2x1bW5zLCBhZGRSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgZmlsdGVyZWRMb2NhbENvbHVtbnM6IExvY2FsQ29sdW1uW10gPSBbXTtcclxuXHRcdGxldCByZXF1ZXN0Q29sdW1ucyA9IGNvcHkoYWRkUmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyhcclxuXHRcdFx0Y29uZmlnQ29sdW1ucyxcclxuXHRcdFx0bG9jYWxDb2x1bW5zLFxyXG5cdFx0XHQoXywgY29sdW1uSWQpID0+IHtcclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oY29sdW1uSWQuc3BsaXQoQ09MVU1OX1NFUEVSQVRPUiksIHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KF8sIGxvY2FsQ29sdW1uKSA9PiB7XHJcblx0XHRcdFx0ZmlsdGVyZWRMb2NhbENvbHVtbnMucHVzaChsb2NhbENvbHVtbik7XHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMoXHJcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0XHRcdGxvY2FsQ29sdW1uLnZhbHVlT3B0aW9ucy5yZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHRcdCkubWVyZ2VkO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB7cmVxdWVzdDogcmVxdWVzdENvbHVtbnMsIGxvY2FsOiBmaWx0ZXJlZExvY2FsQ29sdW1uc307XHJcblx0fVxyXG5cclxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpWzBdLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbiAoY29sdW1uQXJyYXksIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbkFycmF5WzBdO1xyXG5cdFx0Y29uc3QgaXNMZWFmID0gY29sdW1uQXJyYXkubGVuZ3RoID09PSAxO1xyXG5cclxuXHRcdGlmIChpc0xlYWYpIHtcclxuXHRcdFx0aWYgKGRlc3RpbmF0aW9uLmluZGV4T2YoY29sdW1uSWQpID09PSAtMSlcclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGNvbHVtbklkKTtcclxuXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW5PYmplY3QoY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7XHJcblx0XHRcdFx0W2NvbHVtbklkXTogW11cclxuXHRcdFx0fSkgLSAxO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihcclxuXHRcdFx0Y29sdW1uQXJyYXkuc2xpY2UoMSksXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW5JZF1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uT2JqZWN0IChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoYXJyYXlbaV0pID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gLTE7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uIChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uID0gYXJyYXlbaV07XHJcblxyXG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRpZiAoY29sdW1uID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRcdHJldHVybiBpO1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoY29sdW1uKSA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25IYW5kbGVyLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDcmVhdGVSZXF1ZXN0RW50cnkgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0IHtcclxuXHRyZXF1ZXN0czogQ3JlYXRlUmVxdWVzdEVudHJ5W10gPSBbXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbXBpbGF0aW9uLFxyXG5cdFx0cHJpdmF0ZSBsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBwYXJhbWV0ZXJNYXAsXHJcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRmaW5hbGl6ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucy5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKVxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XHJcblx0fVxyXG5cclxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UmVzb3VyY2UucmVxdWVzdDtcclxuXHJcblx0XHRpZiAocGFyZW50VHlwZSA9PT0gJ1ZvaWQnKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmVxdWVzdC5wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcclxuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJ1biAoKSB7XHJcblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHR0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSA/IHBhcmVudElkIDogbnVsbCxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcclxuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XHJcblx0XHRcdFx0Y29uc3QgaGFzUGFyZW50ID0gdGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHRoYXNQYXJlbnQgPyBwYXJlbnRJZCA6IG51bGwsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHR2YWxpZFJlcXVlc3QgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHZhbGlkUmVxdWVzdClcclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xyXG5cdH1cclxuXHJcblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IENyZWF0ZVJlcXVlc3RFbnRyeSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRyZXF1ZXN0OiB7XHJcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxyXG5cdFx0XHRcdGl0ZW1zOiB7fSxcclxuXHRcdFx0XHRjb2x1bW5zOiB7fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxyXG5cdFx0XHRpdGVtczoge30sXHJcblx0XHRcdGNvbGxlY3Rpb25zOiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0W3RoaXMubG9jYWxDb2xsZWN0aW9uQ2FjaGUsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllc10sXHJcblx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHQpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllcywgcmVxdWVzdFBhcmVudElkLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IGRlc3RpbmF0aW9uLnJlcXVlc3Q7XHJcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVxdWVzdC5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdFx0XHRyZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXSA9IHt9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcclxuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcclxuXHJcblx0XHRcdFx0bGV0IGxpbmtzO1xyXG5cclxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0cmVxdWVzdC5wYXJlbnRJZFtpdGVtSWRdID0gcmVxdWVzdFBhcmVudElkO1xyXG5cclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb24uY29sbGVjdGlvbnMuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV1baXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHJcblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcclxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHJcblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGxpbmtzID0gaXRlbVJlcXVlc3QubGlua3MgPSB7fTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRFbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdID0gW107XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZElkIGluIGNoaWxkRW50cmllc1tjaGlsZFR5cGVdKVxyXG5cdFx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdLnB1c2goY2hpbGRJZCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoY2hpbGRFbnRyaWVzLCBudWxsLCBkZXN0aW5hdGlvbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvbk1hdGNoZXIsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdEl0ZW1DYWNoZSxcblx0SXRlbUVudHJ5U2VydmljZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0TG9jYWxDYWNoZSxcblx0UXVlcnlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBMb2NhbENhY2hlRmFjdG9yeSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLCBJdGVtSWQsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1UeXBlTWFwLCBJdGVtVHlwZSxcblx0VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCxcblx0VGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUFkbWluaXN0cmF0b3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHQvLyBpZCBjYW4gYmUgYSBrZXl3b3JkIG9yIGEgbG9jYWwgaWQgKGluIGNhc2Ugb2YgYSByZWZyZXNoKVxuXHRnZXRJdGVtRGVmaW5pdGlvbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IGFueSwgb3B0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgc3RhdGVLZXk6IGFueSA9IHRoaXMua2V5U2VydmljZS5wYXJzZVN0YXRlS2V5KGl0ZW1JZCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge2l0ZW1UeXBlOiBpdGVtVHlwZSwgb3B0aW9uczogb3B0aW9ucywgaXRlbUlkOiBpdGVtSWR9O1xuXG5cdFx0aWYgKHN0YXRlS2V5ICE9PSBudWxsKSB7XG5cdFx0XHRzd2l0Y2ggKHN0YXRlS2V5LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnbmV3Jzpcblx0XHRcdFx0XHQvLyBpZiAoc3RhdGVLZXkudGVtcGxhdGUubGVuZ3RoID4gMClcblx0XHRcdFx0XHQvLyBcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge3R5cGU6IHN0YXRlS2V5LnRlbXBsYXRlfTtcblxuXHRcdFx0XHRcdHJlc3VsdC5pdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkdXBsaWNhdGUnOlxuXHRcdFx0XHRcdG9wdGlvbnMuZHVwbGljYXRlID0gc3RhdGVLZXkuaXRlbUlkO1xuXG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQpIC8vIHRvZG86IHJlZmFjdG9yIHRoaXNcblx0XHRcdFx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge307XG5cblx0XHRcdFx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9IHN0YXRlS2V5Lml0ZW1JZDtcblxuXHRcdFx0XHRcdHJlc3VsdC5pdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxEdXBsaWNhdGVJZCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblxuXHRcdHJlc3VsdC5pdGVtSWQgPSBpdGVtSWQ7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFkZFRvVGFiOiBib29sZWFuKTogQ29sbGVjdGlvbk1hdGNoZXIge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sIGZhbHNlKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHQvLyB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgaWYgdGhlcmUgYXJlIG5vIGNvbGxlY3Rpb25zIHRvIGFkZCB0aGUgaXRlbSB0bywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2F2ZSB0aGUgaXRlbVxuXHRcdFx0aWYgKGFkZFRvVGFiKVxuXHRcdFx0XHRsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sbGVjdGlvbk1hdGNoZXI7XG5cdH1cblxuXHRmZXRjaFRpdGxlIChpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaFRpdGxlKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCwgdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXMpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0Ly8gdG9kbyB0eXBlIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAgfCBJdGVtRW50cnlcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShcblx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5tYWluIDpcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLFxuXHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeUlkIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWRzOiBudW1iZXJbXSwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VbXT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbXMoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZHMsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2VzKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeVF1ZXJ5IChpdGVtVHlwZTogc3RyaW5nLCBxdWVyeTogYW55LCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHt9O1xuXG5cdFx0cmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdID0gZW50cnlPcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkUGFyZW50Q29uZGl0aW9uKHF1ZXJ5LCBlbnRyeU9wdGlvbnMucGFyZW50KSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSlcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVCeUlkIChpdGVtVHlwZTogc3RyaW5nLCBkdXBsaWNhdGVJZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpIHtcblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmdldEl0ZW1EZWZpbml0aW9uKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0RHVwbGljYXRlU3RhdGVLZXkoZHVwbGljYXRlSWQpLFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRJdGVtQnlEZWYoZGVmaW5pdGlvbiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSByZXR1cm4gdmFsdWUgaXMgZGVwZW5kZWQgb24gdGhlIHJldHVybiBsaW5rcyBib29sZWFuLiB0cnVlIHJldHVybnMgdGhlIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAuXG5cdCAqIFRoZSB0eXBlIGhhcyB0byBiZSBhc3NlcnRlZCBhdCB1c2Ugc2luY2UgeW91IG9ubHkga25vdyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaXRlbVR5cGVcblx0ICogQHBhcmFtIG9wdGlvbnNcblx0ICogQHBhcmFtIHtib29sZWFufSByZXR1cm5MaW5rc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUm9vdFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtUmVzb3VyY2U+IHwgUHJvbWlzZTxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPn1cblx0ICovXG5cdGdldE5ld1Jlc291cmNlIChcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxuXHRcdG9wdGlvbnM6IGFueSA9IHt9LFxuXHRcdHJldHVybkxpbmtzOiBib29sZWFuID0gZmFsc2UsXG5cdFx0aXNSb290OiBib29sZWFuID0gZmFsc2Vcblx0KTogUHJvbWlzZTxJdGVtUmVzb3VyY2U+IHwgUHJvbWlzZTxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJ5UmVzb3VyY2U6IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXApID0+IHtcblx0XHRcdFx0Y29uc3QgbWFpbiA9IGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeVJlc291cmNlLm1haW4sIG9wdGlvbnMsIGlzUm9vdCk7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZCA9IHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCwgb3B0aW9ucywgdHJ1ZSk7IC8vIGRvIHRoaXMgYmVmb3JlaGFuZFxuXG5cdFx0XHRcdHJldHVybiByZXR1cm5MaW5rcyA/IHttYWluOiBtYWluLCBsaW5rZWQ6IGxpbmtlZH0gOiBtYWluO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRGVmIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLCAvLyB3ZSBuZWVkIHRoZSBkZWZhdWx0IGNvbHVtbiB2YWx1ZVxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0RlZiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBsaW5rRmllbGQ6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdGxpbmtUeXBlOiBsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5OiBsaW5rSWRBcnJheSxcblx0XHRcdGxpbmtGaWVsZDogbGlua0ZpZWxkLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb24gKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXG5cdFx0XHRcdFx0ZW50cnksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25Gcm9tRGVmIChkZWZpbml0aW9uOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoZW50cnksIGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZSk7XG5cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgYHBhcmVudGAgaW4gb3B0aW9uc1xuXHQgKi9cblx0Z2V0TGlua0NvbGxlY3Rpb24gKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZDogbnVtYmVyLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBsaW5rVHlwZSwgaXRlbUlkOiBsaW5rSWR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGVudHJ5T3B0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxuXHRcdFx0XHRcdGVudHJ5LFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0bGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0Zyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rVHlwZSxcblx0XHRcdGRlZmluaXRpb24ubGlua0lkQXJyYXksXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGxpbmtUeXBlLCB7fSwge30pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmdldExpbmtDb2xsZWN0aW9ucyhcblx0XHRcdFx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbbGlua1R5cGVdLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5RGVmIChkZWZpbml0aW9uOiBhbnksIGlzUm9vdDogYm9vbGVhbikge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1JZCxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhkZWZpbml0aW9uLm9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcblx0XHRcdFx0bGV0IG1haW5FbnRyeTogSXRlbUVudHJ5O1xuXG5cdFx0XHRcdGlmICgoPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IGl0ZW1FbnRyeVJlc291cmNlKS5saW5rZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKCg8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4gaXRlbUVudHJ5UmVzb3VyY2UpLmxpbmtlZCwgZGVmaW5pdGlvbi5vcHRpb25zLCBmYWxzZSk7XG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gKDxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiBpdGVtRW50cnlSZXNvdXJjZSkubWFpbjtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gPEl0ZW1FbnRyeT4gaXRlbUVudHJ5UmVzb3VyY2U7XG5cblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKG1haW5FbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLCBpc1Jvb3QpOyAvLyBpc1Jvb3Rcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xvbmVJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgb3B0aW9uczogYW55KTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1SZXNvdXJjZS5lbnRyeS5jbG9uZSgpLCBvcHRpb25zLCBmYWxzZSk7XG5cdH1cblxuXHRjbG9uZUNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLCBvcHRpb25zOiBhbnksIGNvbnZlcnNpb25NYXA6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0bGV0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cGFyZW50ID0gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuY2xvbmUocGFyZW50LCBjb252ZXJzaW9uTWFwKSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0c2F2ZUN1cnJlbnRMb2NhbENhY2hlIChjbG9zZVRhYjogYm9vbGVhbiwgcGFyYW1ldGVyczogYW55LCBicmVha3VwQnlQYXJlbnQgPSBmYWxzZSwgb25BZnRlckNyZWF0ZUNhbGxiYWNrOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuc2F2ZShjbG9zZVRhYiwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spO1xuXHR9XG5cblx0Z2V0Q3VycmVudENvbGxlY3Rpb25zICgpOiBDb2xsZWN0aW9uQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5jb2xsZWN0aW9ucztcblx0fVxuXG5cdGdldEN1cnJlbnRJdGVtcyAoKTogSXRlbUNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXM7XG5cdH1cblxuXHRnZXRDdXJyZW50Q2hhbmdlcyAoKSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0aWYgKGxvY2FsQ2FjaGUucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRocm93IG5ldyBFcnJvcignaXRlbUFkbWluaXN0cmF0b3I6IE5vIHJvb3QgaXRlbSEnKTtcblxuXHRcdHJldHVybiB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0bG9jYWxDYWNoZS5yb290SXRlbSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zXG5cdFx0KS5wcm9jZXNzKCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBhbnksXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KTogSXRlbVJlc291cmNlIHtcblx0XHRsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW1zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IGFueSkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlLCBsb2NhbENhY2hlKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnM6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25DYWNoZSA9IGxvY2FsQ2FjaGUuY29sbGVjdGlvbnM7XG5cblx0XHRpZiAoIWNvbGxlY3Rpb25DYWNoZS5jb250YWlucyhjb2xsZWN0aW9uRW50cnkpKVxuXHRcdFx0Y29sbGVjdGlvbkNhY2hlLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAobGlua2VkRW50cmllczogVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFtdLCBvcHRpb25zOiBhbnksIGFkZFRvQ29sbGVjdGlvbnM6IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gZW50cnkuaXRlbUVudHJpZXM7XG5cdFx0XHRsZXQgY29sbGVjdGlvbk1hdGNoZXI7XG5cblx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sIGZhbHNlKTtcblxuXHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0ucHVzaChsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlKSk7XG5cblx0XHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0aWYgKGl0ZW1UeXBlID09PSAnUHJvamVjdG5vdGl0aWUnKSB7XG5cdFx0XHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0XHRcdFt7fSwge25vX25vdGlmaWNhdGlvbjogdHJ1ZX1dXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XG5cdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuYWRkVG9Db2xsZWN0aW9ucygpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHR9XG5cblx0Z2V0TG9jYWxDYWNoZSAoKTogTG9jYWxDYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuZ2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpKTtcblx0fVxuXG5cdHJlc2V0TG9jYWxDYWNoZSAoKSB7XG5cdFx0Y29uc3Qgb2xkTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0b2xkTG9jYWxDYWNoZS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlTWFuYWdlci5zZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCksIGxvY2FsQ2FjaGUpO1xuXHR9XG5cblx0YWRkVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgdHJ1ZSlcblx0XHRcdC5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdH1cblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIGZhbHNlKVxuXHRcdFx0LnJlbW92ZUZyb21Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xuXHR9XG5cblx0c2F2ZUxvY2FsIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5zZXREaXNwbGF5TmFtZSgpO1xuXHRcdHRoaXMuYWRkVG9Db2xsZWN0aW9ucyhbaXRlbUVudHJ5XSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oaXRlbVJlc291cmNlKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBhbnksIHJlc291cmNlT3B0aW9uczogYW55LCBwcm9jZXNzT3B0aW9ucyA9IHRydWUpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRwcm9jZXNzT3B0aW9ucyA/IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhyZXNvdXJjZU9wdGlvbnMpIDogcmVzb3VyY2VPcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBhbnksIG9wdGlvbnM6IGFueSwgaXNSb290OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvbkJlZm9yZVNhdmUnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxuXG5cdG9uU2F2ZVN1Y2Nlc3MgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvblNhdmVTdWNjZXNzJywga2V5LCBjYWxsYmFjayk7XG5cdH1cblxuXHRvblNhdmVXaXRob3V0Q2xvc2luZyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uU2F2ZVdpdGhvdXRDbG9zaW5nJywga2V5LCBjYWxsYmFjayk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUVudHJ5U2VydmljZSwgSXRlbVJlcXVlc3RTZXJ2aWNlLCBLZXlTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5IHtcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xuXHRxdWVyeTogYW55O1xuXHRjb2x1bW5zOiBDb2x1bW5TZXQ7XG5cblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXG5cdGluaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XG5cdGl0ZW1zOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdHJlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcblx0ZGVmZXJyZWQ6IGFueTtcblx0cHJvbWlzZTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+O1xuXHRyZWxvYWRRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRwdWJsaWMgb3B0aW9uczogYW55XG5cdCkge1xuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xuXG5cdFx0dGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cdFx0dGhpcy5xdWVyeSA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdH1cblxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXNvbHZlIChpdGVtRW50cnlDb21wb3VuZCk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucztcblx0XHR0aGlzLmluaXRpYWwgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcztcblx0XHR0aGlzLml0ZW1zID0gaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMuc2xpY2UoKTtcblxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpc0xvY2FsICgpOiBib29sZWFuIHtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcblx0fVxuXG5cdG1hdGNoUGFyZW50IChpdGVtVHlwZSwgaXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZClcblx0XHRcdGNhbGxiYWNrKG1vZCk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkKTogSXRlbUVudHJ5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pdGVtSWQgPT09IGl0ZW1JZClcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoYWNjdW11bGF0b3IgPSBbXSk6IEl0ZW1JZFtdIHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmdldElkQXJyYXkodGhpcy5pdGVtcywgYWNjdW11bGF0b3IpO1xuXHR9XG5cblx0YWRkSXRlbXMgKGl0ZW1FbnRyaWVzLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCA9IGZhbHNlLCBlbmFibGVDYWxsYmFjayA9IHRydWUpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XG5cblx0XHRpZiAodXBkYXRlSW5pdGlhbCkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0Ly8gd2hlbiBzYXZpbmcsIGl0ZW1zIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBpbiBtb2RpZmllZCBhcmUgYWRkZWQgdG8gaW5pdGlhbFxuXHRcdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0aW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZW50cmllc0FkZGVkVG9Jbml0aWFsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9ucy5vbkFkZEluaXRpYWwoZW50cmllc0FkZGVkVG9Jbml0aWFsLCB0aGlzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdFx0XHRcdGlmIChwYXJlbnRDb2x1bW4gIT09IG51bGwgJiYgaXRlbUVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkubW9kaWZpZWRbcGFyZW50Q29sdW1uLmlkXSA9IHBhcmVudC5pdGVtSWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb01vZGlmaWVkLmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCByZXN1bHQ7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgYWRkZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhlbnRyaWVzQWRkZWRUb01vZGlmaWVkKTtcblxuXHRcdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IGFkZGVkUmVzb3VyY2VzO1xuXG5cdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXHR9XG5cblx0cmVtb3ZlSXRlbXMgKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pIHtcblx0XHRpZiAoaWRBcnJheS5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgaWRBcnJheSk7XG5cdFx0XHR9LFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXIgKHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pIHtcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRlbmFibGVDYWxsYmFja1xuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVSZW1vdmVkSXRlbXMgKGZpbHRlckZ1bmN0aW9uLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pdGVtcywgZmlsdGVyRnVuY3Rpb24pO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tSW5pdGlhbCA9IHVwZGF0ZUluaXRpYWwgPyB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pbml0aWFsLCBmaWx0ZXJGdW5jdGlvbikgOiBbXTtcblxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25SZW1vdmVJbml0aWFsKHJlbW92ZWRGcm9tSW5pdGlhbCwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEZyb21Nb2Qgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZClcblx0XHRcdHJlbW92ZWRGcm9tTW9kLmRlYWN0aXZhdGVSZXNvdXJjZXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2spXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmQgKG5ld0NvbHVtbnMpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xuXG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKHRoaXMsIHVuZGVmaW5lZCwgbmV3Q29sdW1ucykudGhlbihyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSXRlbXMgPSByZXNwb25zZS5pdGVtc1tpdGVtVHlwZV07XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24obmV3Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlLCB0aGlzLml0ZW1zKTtcblxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcy5jYWxsKFxuXHRcdFx0XHRcdHRoaXMsIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2VJdGVtc1tpdGVtRW50cnkuaXRlbUlkXSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW1FbnRyeS5pc0xvY2FsKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHRoaXMudXBkYXRlQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlO1xuXHR9XG5cblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XG5cblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0fVxuXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgY29sbGVjdGlvblJlc291cmNlLCBlbmFibGVDYWxsYmFjaz8sIHVwZGF0ZUluaXRpYWw/KSB7XG5cdFx0Y29uc3QgZXh0ZW5kZWRRdWVyeSA9IHRoaXMuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjaykub2JqZWN0O1xuXHRcdGNvbnN0IGZ1bGxRdWVyeSA9IHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdGV4dGVuZGVkUXVlcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbih0aGlzLmdldElkQXJyYXkoKSlcblx0XHQpO1xuXG5cdFx0Ly8gdG9kbzogYWxzbyBkbyB0aGUgbGltaXQgY2hlY2sgaW4gYmF0Y2hFeHRlbmRcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKFxuXHRcdFx0dGhpcyxcblx0XHRcdC8vIFdoZW4gdGhlcmUncyBhIGxpbWl0IHdlIHdhbnQgdG8gZmV0Y2ggYWxsIGl0ZW1zIGJlY2F1c2Ugd2Ugd2lsbCBkbyBzb3J0aW5nIGFuZCBzcGxpY2luZyBvZiB0aGUgZXhjZXNzIGl0ZW1zXG5cdFx0XHR0aGlzLm9wdGlvbnMubGltaXQgIT09IG51bGwgP1xuXHRcdFx0XHRleHRlbmRlZFF1ZXJ5IDpcblx0XHRcdFx0ZnVsbFF1ZXJ5XG5cdFx0KS50aGVuKHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Ly8gcmVtb3ZlQWJzZW50SXRlbXMocmVzcG9uc2UpOyBUT0RPOiB3ZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gd2UgcmVxdWVzdCAqYWxsKiB0aGUgaXRlbXNcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1t0aGlzLml0ZW1UeXBlXSxcblx0XHRcdFx0XHR0aGlzLnBhcmVudCxcblx0XHRcdFx0XHR0aGlzLmNvbHVtbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oaXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBjb2xsZWN0aW9uUmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGVuYWJsZUNhbGxiYWNrKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRxdWV1ZVJlbG9hZCAoKSB7XG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0dXBkYXRlQ29sdW1ucyAoY29sdW1uRXhwYW5zaW9uKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IGNvbHVtbkV4cGFuc2lvbi5ydW4odGhpcy5jb2x1bW5zLCBmYWxzZSk7XG5cblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IGNvbHVtbkluZm8ucmVxdWVzdDtcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5JbmZvO1xuXHR9XG5cblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSAmJiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNBZGRlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xuXHR9XG5cblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0aGFzVXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZGlmaWVkSXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAobW9kaWZpZWRJdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRDdXJyZW50UmVzb3VyY2UgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0cmV0dXJuIHJlc291cmNlc1tyZXNvdXJjZXMubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJ0YWJDaGFuZ2UgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gdGhpcy5pdGVtczsgLy8gVE9ETzogaW5pdGlhbFxuXHRcdGNvbnN0IGN1cnJlbnRSZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCBuZXdSZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cblx0XHQvLyB3ZSdsbCBhZGQgdGhlIGl0ZW0gcmVzb3VyY2VzIGJhY2sgaW4gbGF0ZXJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zW2lzU3VidGFiQ2hhbmdlID8gJ2NsZWFyT25TdWJUYWJDaGFuZ2UnIDogJ2NsZWFyT25UYWJDaGFuZ2UnXSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdG5ld1Jlc291cmNlcy5wdXNoKGNvbGxlY3Rpb25SZXNvdXJjZSk7XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcylcblx0XHRcdFx0aXRlbVJlc291cmNlLmVudHJ5LnJlc291cmNlcy5wdXNoKGl0ZW1SZXNvdXJjZSk7IC8vIHJlc291cmNlcyBzaG91bGQgYmUgZW1wdHkgYnkgbm93IDotKVxuXHRcdH1cblxuXHRcdHRoaXMucmVzb3VyY2VzID0gbmV3UmVzb3VyY2VzO1xuXHR9XG5cblx0Ly8gdGhpcyBkb2Vzbid0IHJldmVydCB1cGRhdGVzXG5cdHJldmVydENoYW5nZXMgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IHJlbW92ZWRJdGVtcyA9IDxJdGVtRW50cnlbXT4gdGhpcy5nZXRSZW1vdmVkSXRlbXMoKTtcblx0XHRjb25zdCBhZGRlZEl0ZW1zID0gPEl0ZW1FbnRyeVtdPiB0aGlzLmdldEFkZGVkSXRlbXMoKTtcblxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRyZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKHJlbW92ZWRJdGVtcyk7XG5cdFx0XHRyZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKGFkZGVkSXRlbXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLmluaXRpYWwuc2xpY2UoKTtcblx0fVxuXG5cdG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0cmVzb3VyY2UucmVidWlsZE1hcCgpO1xuXHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwKTtcblx0XHR9XG5cdH1cblxuXHRnZXRVcGRhdGVkSXRlbUNvbHVtbnMgKGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xvbmUgKHBhcmVudCwgY29udmVyc2lvbk1hcD86IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBjbG9uZWRJdGVtRW50cmllcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5iYXRjaENsb25lKHRoaXMuaXRlbXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Zm9yIChjb25zdCBjbG9uZWRJdGVtRW50cnkgb2YgY2xvbmVkSXRlbUVudHJpZXMpXG5cdFx0XHRjbG9uZWRJdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyh0aGlzLm9wdGlvbnMsIHBhcmVudClcblx0XHQpXG5cdFx0XHQucmVzb2x2ZShcblx0XHRcdFx0e2NvbHVtbnM6IHRoaXMuY29sdW1ucywgaXRlbXM6IGNsb25lZEl0ZW1FbnRyaWVzfVxuXHRcdFx0KTtcblx0fVxuXG5cdGhhc0VkaXRSZXNvdXJjZXMgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLmVkaXRDb2xsZWN0aW9uKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRoYXNJdGVtRWRpdFJlc291cmNlcyAoKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMuZWRpdEl0ZW1zKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsImltcG9ydCB7IGZpbHRlckFycmF5IH0gZnJvbSAnLi4vY2xhc3Nlcy9VdGlsJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlSXRlbUlkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0aXRlbXM6IEl0ZW1SZXNvdXJjZVtdO1xyXG5cdGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwID0ge307XHJcblx0Y29sdW1ucztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHVibGljIGVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZTtcclxuXHRcdHRoaXMuaXRlbUlkTWFwID0ge307XHJcblx0XHR0aGlzLml0ZW1zID0gW107XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblxyXG5cdFx0dGhpcy5hZGRJdGVtUmVzb3VyY2VzKGVudHJ5Lml0ZW1zKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQ6IG51bWJlcik6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSWRNYXBbaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHJlYnVpbGRNYXAgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGl0ZW1JZE1hcFtpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLml0ZW1JZE1hcCA9IGl0ZW1JZE1hcDtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHsgLy8gc2hvdWxkIGJlIGZhc3RcclxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaXRlbUlkTWFwID0gdGhpcy5pdGVtSWRNYXA7XHJcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcihcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXQ6IG9wdGlvbnMuZWRpdEl0ZW1zLFxyXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogb3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRcdGxldCBpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTtcclxuXHJcblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aXRlbVJlc291cmNlID0gY29uc3RydWN0b3IoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRpdGVtcy5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGl0ZW1JZE1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIGl0ZW1FbnRyaWVzXHJcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxyXG5cdCAqXHJcblx0ICogUmV0dXJucyB0aGUgSXRlbXJlc291cmNlcyB0aGF0IHdoZXJlIHJlbW92ZWQgQ29sbGVjdGlvbi5cclxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XHJcblx0ICovXHJcblx0cmVtb3ZlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZpbHRlckFycmF5KFxyXG5cdFx0XHR0aGlzLml0ZW1zLFxyXG5cdFx0XHRpdGVtUmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbVJlc291cmNlLmVudHJ5ID09PSBpdGVtRW50cnkpIHtcclxuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNhbGxPbkFkZCAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkFkZChpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGNhbGxPblJlbW92ZSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vblJlbW92ZShpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHZvaWQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Zmlyc3QgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmZpcnN0KGNhbGxiYWNrKSAhPT0gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnkgKGFyZ3VtZW50KSB7XHJcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaXRlbVJlc291cmNlLmZpZWxkc1thcmd1bWVudF07XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJndW1lbnQoaXRlbVJlc291cmNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdG1hcCAoYXJndW1lbnQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobGVuZ3RoKTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXHJcblx0XHRcdFx0cmVzdWx0W2ldID0gYXJndW1lbnQoaXRlbVJlc291cmNlc1tpXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlZHVjZTxUPiAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgdmFsdWU6IFQpID0+IFQsIHZhbHVlOiBUKTogVCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSwgdmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXMsIGVuYWJsZUNhbGxiYWNrcyk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5leHRlbmQocXVlcnlDYWxsYmFjaywgdGhpcywgZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHQudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuQWxsSXRlbXMgPyB0aGlzLml0ZW1zIDogaXRlbVJlc291cmNlcztcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uKHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZSAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGluZGV4ID0gY29sbGVjdGlvblJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRpdGVtUmVzb3VyY2UuY2xlYXJSZXNvdXJjZSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1IYW5kbGVyLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeSc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi9JdGVtRW50cnknO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHRzYXZlICgpIHtcclxuXHRcdGlmICghdGhpcy5vcHRpb25zLmVuYWJsZVNhdmUpXHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogU2F2aW5nIGRpc2FibGVkJyk7XHJcblxyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXHJcblx0bW92ZUl0ZW1zIChpZEFycmF5LCBkZXN0aW5hdGlvbiwgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lbmFibGVTYXZlIHx8IG9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlICE9PSBkZXN0aW5hdGlvbi5lbnRyeS5pdGVtVHlwZSlcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcclxuXHJcblx0XHRjb25zdCByZW1vdmVkSXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW1SZXNvdXJjZSBvZiByZW1vdmVkSXRlbVJlc291cmNlcylcclxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChyZW1vdmVkSXRlbVJlc291cmNlLmVudHJ5KTtcclxuXHJcblx0XHRkZXN0aW5hdGlvbi5lbnRyeS5hZGRJdGVtcyhpdGVtRW50cmllcywgZGVzdGluYXRpb24sIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xyXG5cclxuXHRcdHJldHVybiByZW1vdmVkSXRlbVJlc291cmNlcztcclxuXHR9XHJcblxyXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5LCBlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcclxuXHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtIChpdGVtSWQsIGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbXMgKHZhbHVlc0FycmF5LCBlbmFibGVDYWxsYmFja3MgPSB0cnVlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaFRlbXBsYXRlKHRoaXMuZW50cnkuaXRlbVR5cGUpLnRoZW4odGVtcGxhdGUgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0XHRcdGxldCBpdGVtUmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlc0FycmF5KSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWwoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5maWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWUuZGVyaXZlZFxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIHRoaXMsIGZhbHNlLCBmYWxzZSk7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW0gKHZhbHVlcywgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhbdmFsdWVzXSwgZW5hYmxlQ2FsbGJhY2tzKS50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtbkluZm8sIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBTExfUEVSTUlTU0lPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xyXG5cdGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcclxuXHJcblx0ZGVmZXJSZXF1ZXN0ID0gZmFsc2U7XHJcblx0ZGVmZXJyZWQ7XHJcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xyXG5cclxuXHRpbml0aWFsOiBGaWVsZE1hcDtcclxuXHRtb2RpZmllZDogRmllbGRNYXA7XHJcblx0ZGVyaXZlZDogRmllbGRNYXA7XHJcblxyXG5cdHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IHN0cmluZyxcclxuXHRcdHB1YmxpYyBpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5TZXRcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGRlZmVyIChkZWZlclJlcXVlc3QpOiB0aGlzIHtcclxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xyXG5cclxuXHRcdC8vIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG1pZ2h0IGRlZmVyIHRoZSBpdGVtIGFnYWluLCBzbyBkZWxldGUgdGhlIHByb3BlcnRpZXMgZmlyc3RcclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRGVmZXJyZWQgKGluaXRpYWwsIGRlcml2ZWQsIGNvbHVtbnMpOiB0aGlzIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcblx0XHR0aGlzLnByb2Nlc3MoaW5pdGlhbCwgZGVyaXZlZCk7XHJcblx0XHR0aGlzLnJlc29sdmUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGVmZXJyZWQgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHJlamVjdCAoZXJyb3I/KTogdGhpcyB7XHJcblx0XHQvLyB0b2RvOiB0cmFuc2xhdGVkIGVycm9yXHJcblx0XHR0aGlzLmRlZmVycmVkLnJlamVjdChlcnJvcik7XHJcblxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzIChpbml0aWFsLCBkZXJpdmVkKTogdGhpcyB7XHJcblx0XHR0aGlzLmluaXRpYWwgPSBpbml0aWFsO1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcclxuXHJcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZvcm1hdHRlZDtcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMubWFpbik7XHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmRlcml2ZWQsIGZvcm1hdHRlZENvbHVtbnMuZGVyaXZlZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTG9jYWwgKGluaXRpYWwsIG1vZGlmaWVkLCBkZXJpdmVkLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHR0aGlzLmluaXRpYWwgPSB7cGVybWlzc2lvbnM6IEFMTF9QRVJNSVNTSU9OU307XHJcblxyXG5cdFx0dGhpcy51cGRhdGVGaWVsZHMoaW5pdGlhbCk7XHJcblx0XHR0aGlzLnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblx0XHR0aGlzLnNldE1vZGlmaWVkKG1vZGlmaWVkKTtcclxuXHJcblx0XHR0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xyXG5cdFx0dGhpcy5zZXRDcmVhdG9yKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRDcmVhdG9yICgpOiB0aGlzIHtcclxuXHRcdHRoaXMubW9kaWZpZWQuY3JlYXRvciA9IHRoaXMuYXV0aEludGVyZmFjZS5nZXRVc2VySWQoKTtcclxuXHRcdHRoaXMubW9kaWZpZWQuY3JlYXRlZCA9IG1vbWVudCgpO1xyXG5cdFx0dGhpcy5kZXJpdmVkWydjcmVhdG9yPmRpc3BsYXluYW1lJ10gPSB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmRDb252ZXJzaW9uTWFwKHRoaXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdC8vIHdlJ2xsIGNvcHkgbW9kaWZpZWQgdG8gcmVzdWx0LmluaXRpYWwgKGluaXRpYWwgbWF5IGJlIGEgdGVtcGxhdGUpXHJcblx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdG5ld0l0ZW1JZCxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmdldEZpZWxkcygpLCB7fSwgY29sdW1ucy5tYWluKSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmRlcml2ZWQsIHt9LCBjb2x1bW5zLmRlcml2ZWQpLFxyXG5cdFx0XHRjb2x1bW5zXHJcblx0XHQpO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkubW9kaWZpZWQgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGNsb25lZEVudHJ5LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBjbG9uZWRFbnRyeTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUodGhpcy5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkuc2V0UGFyZW50KFxyXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXHJcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xyXG5cdH1cclxuXHJcblx0cmVzZXREZXJpdmVkIChjb2x1bW5JZHMpOiB0aGlzIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJvb3Q7XHJcblx0XHRjb25zdCBmaWx0ZXJlZENvbHVtbnM6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRcdGlmIChjb2x1bW5JZHMuaW5kZXhPZihjb2x1bW4uaWQpICE9PSAtMSlcclxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRcdGlmICghY29sdW1uLmlzTGVhZilcclxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSBzZWxmLmRlcml2ZWRbY29sdW1uLnBhdGhdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHR0aGlzLnJlc291cmNlcyA9IFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZVJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlczsgLy8gb24gb2YgdGhlIGRlYWN0aXZhdGUgY2FsbGJhY2tzIG1pZ2h0IGNhbGwgY2xlYXJSZXNvdXJjZXNcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0cmVzb3VyY2UuZGVhY3RpdmF0ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0RmllbGRzICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdFxyXG5cdC8vIHRvZG86IHR5cGUgY29sdW1uRXhwYW5zaW9uUmVzdWx0XHJcblx0ZXhwYW5kIChtYWluLCBkZXJpdmVkLCBjb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxyXG5cdFx0XHR0aGlzLmRlcml2ZWQsXHJcblx0XHRcdGRlcml2ZWQsXHJcblx0XHRcdGRpZmZlcmVuY2UuZGVyaXZlZFxyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Ly8ga2V5OiBpbml0aWFsIC8gbW9kaWZpZWRcclxuXHQvLyBmaWVsZHMgKmhhdmVuJ3QqIGJlZW4gZm9ybWF0dGVkIHlldFxyXG5cdHVwZGF0ZUZpZWxkcyAoc291cmNlLCBvdmVyd3JpdGUgPSB0cnVlKTogdGhpcyB7XHJcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xyXG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQubWFpbjtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0aWYgKG1vZGlmaWVkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSBzb3VyY2VbY29sdW1uSWRdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShtb2RpZmllZCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblxyXG5cdFx0XHRpbml0aWFsW2NvbHVtbklkXSA9IHNvdXJjZVtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtVmFsdWUgKGZpZWxkcywgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcclxuXHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGZpZWxkc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0bGV0IG5ld1ZhbHVlO1xyXG5cclxuXHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRuZXdWYWx1ZSA9IHRoaXMucGFyZW50Lml0ZW1JZDtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHRuZXdWYWx1ZSA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtRmllbGRzIChjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoaW5pdGlhbCwgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUobW9kaWZpZWQsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0ICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdChcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCkgPyB7fSA6IHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzZXREaXNwbGF5TmFtZSAoKTogdGhpcyB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKCk7XHJcblxyXG5cdFx0aWYgKHJlc3VsdClcclxuXHRcdFx0dGhpcy5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGdldERpc3BsYXlOYW1lICgpIHtcclxuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XHJcblxyXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRcdHJldHVybiBmaWVsZHMudHlwZSA9PT0gJ2JlZHJpamYnID9cclxuXHRcdFx0XHRcdGZpZWxkcy5iZWRyaWpmIDogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXHJcblx0XHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcclxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcclxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0ZmllbGRzLmFjaHRlcm5hYW1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmRlcml2ZWRbJ21hdGVyaWFhbD5uYWFtJ107IC8vIFRPRE8hXHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZpZWxkc1t0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZCh0aGlzLml0ZW1UeXBlKV07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IHJldHVybkFsbCBSZXR1cm5zIGFsbCBpbml0aWFsIHZhbHVlcyBpZiB0cnVlXHJcblx0ICogQHJldHVybnMge09iamVjdH1cclxuXHQgKi9cclxuXHRnZXRDaGFuZ2VzIChyZXR1cm5BbGwgPSBmYWxzZSkge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCAmJiAhcmV0dXJuQWxsKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmdldENoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQodGhpcy5pdGVtSWQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NrYWJsZSAoKSB7XHJcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XHJcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxyXG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aGFzQ2hhbmdlcyAoKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNldE1vZGlmaWVkICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmNsb25lKFxyXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcclxuXHRcdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uLmlkXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0SW5pdGlhbCAodmFsdWVzLCBlbmFibGVDYWxsYmFja3M/KTogdGhpcyB7XHJcblx0XHRsZXQgcHJldmlvdXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMuaW5pdGlhbFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxyXG5cdCAqL1xyXG5cdHNldE1vZGlmaWVkICh2YWx1ZXM/KTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gY29sdW1ucy5yZXNwb25zZVt0aGlzLml0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB7fTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxyXG5cdFx0XHRcdFx0XHQvLyBpZiAoREVWX01PREUpXHJcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHJcblx0XHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0XHRyZXNvdXJjZS5maWVsZHMgPSBtb2RpZmllZDtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldERlcml2ZWQgKHZhbHVlcyk6IHRoaXMge1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLmRlcml2ZWRba2V5XSA9IHZhbHVlc1trZXldO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCk6IHRoaXMge1xyXG5cdFx0dGhpcy5wYXJlbnQgPSB7XHJcblx0XHRcdGl0ZW1UeXBlOiBwYXJlbnRUeXBlLFxyXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cyk6IHRoaXMge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnJlc291cmNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgaXRlbVJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaV07XHJcblxyXG5cdFx0XHRpZiAoaXRlbVJlc291cmNlICE9PSBudWxsKVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWVsZE1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcclxuXHRjb2x1bW5zOiB7W2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbn07XHJcblx0ZmllbGRzOiBGaWVsZE1hcDtcclxuXHRkZXJpdmVkOiBGaWVsZE1hcDtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZW50cnkuZGVyaXZlZDtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblx0fVxyXG5cclxuXHRpc05ld1Jlc291cmNlIChyZXNvdXJjZSkge1xyXG5cdFx0cmV0dXJuIHJlc291cmNlLmVudHJ5LmlzTG9jYWwoKSAmJlxyXG5cdFx0XHRyZXNvdXJjZS50cmFuc2FjdGlvbnMgPT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuaXNMb2NhbCgpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZSAoKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcclxuXHRcdGNvbnN0IGluZGV4ID0gcmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0cmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGUodGhpcy5lbnRyeSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBWaWV3UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0ZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge0FwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgY3JlYXRlUGF0aCwgTG9ja1NlcnZpY2V9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRmllbGRNYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4vJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xyXG5cdGxvY2FsQ29waWVzOiBGaWVsZE1hcFtdID0gW107XHJcblx0dHJhbnNhY3Rpb25zOiBudW1iZXI7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3NvcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zKTtcclxuXHJcblx0XHRlbnRyeS5zZXRNb2RpZmllZCgpO1xyXG5cclxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQ7XHJcblx0fVxyXG5cclxuXHRzdGFydCAoKSB7XHJcblx0XHRpZiAodGhpcy5sb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzID0gW107XHJcblxyXG5cdFx0dGhpcy5sb2NhbENvcGllcy5wdXNoKHRoaXMuY29weUZpZWxkcygpKTtcclxuXHR9XHJcblxyXG5cdHJvbGxiYWNrICgpIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzTmV3UmVzb3VyY2UodGhpcykgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xyXG5cdH1cclxuXHJcblx0Y29tbWl0IChpbml0aWFsKSB7XHJcblx0XHRpZiAoIWluaXRpYWwpXHJcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMucG9wKCk7XHJcblxyXG5cdFx0Ly8gY29tcGxldGVkIHRyYW5zYWN0aW9uc1xyXG5cdFx0aWYgKHRoaXMudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMudHJhbnNhY3Rpb25zID0gMDtcclxuXHJcblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxDb3B5ICgpIHtcclxuXHRcdGNvbnN0IGxvY2FsQ29waWVzID0gdGhpcy5sb2NhbENvcGllcztcclxuXHJcblx0XHRpZiAobG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0aWYgKGxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2FsQ29waWVzW2xvY2FsQ29waWVzLmxlbmd0aCAtIDFdO1xyXG5cdH1cclxuXHJcblx0Y29weUZpZWxkcyAoZGVzdGluYXRpb24/KSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cclxuXHRcdGlmIChkZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRkZXN0aW5hdGlvbiA9IHt9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5tb2RpZmllZCwgZGVzdGluYXRpb24sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cdH1cclxuXHJcblx0c2V0RmllbGRzICh2YWx1ZXMsIGNhbGxPbkNoYW5nZSkge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xyXG5cdFx0bGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHRcdGxldCBwcmV2aW91cztcclxuXHJcblx0XHRpZiAoY2FsbE9uQ2hhbmdlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNhbGxPbkNoYW5nZSA9IHRydWU7XHJcblxyXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcclxuXHRcdFx0cHJldmlvdXMgPSB0aGlzLmNvcHlGaWVsZHMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2NvbHVtbklkXTtcclxuXHJcblx0XHRcdGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2Fybignc2V0RmllbGRzOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSwgdmFsdWVzW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHRcdFx0aGFzQ2hhbmdlcyA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSAmJiBoYXNDaGFuZ2VzKVxyXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjYWxsT25DaGFuZ2UgKHByZXZpb3VzKSB7XHJcblx0XHR0aGlzLmVudHJ5LmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblx0fVxyXG5cclxuXHRzYXZlIChwYXJhbWV0ZXJzPykge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IHBhcmFtZXRlck1hcCA9IHt9O1xyXG5cclxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0XHRwYXJhbWV0ZXJNYXAsXHJcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFx0W3t9LCBwYXJhbWV0ZXJzXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGl0ZW1FbnRyeS5pc0xvY2thYmxlKCkgP1xyXG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKGl0ZW1FbnRyeSkgOlxyXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHQvLyBhZGRUb0NvbGxlY3Rpb25zIGlzIGNhbGxlZCBpbiBjaGFuZ2VzUHJvY2Vzc29yXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgZmFsc2UsIHBhcmFtZXRlck1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiLy8gc2hvdWxkIGJlIG9yZGVyZWQgYnkgZGVwZW5kZW5jeSFcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblZpZXdSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL1ZpZXdSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vRWRpdFJlc291cmNlJztcclxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlIHtcclxuXHRlbnRyaWVzOiB7XHJcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogSXRlbUVudHJ5XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgaW5zdGFuY2VvZiBJdGVtRW50cnkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0Y2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRnZXQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdFxyXG5cdGNvbnRhaW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdGlmIChwYXJlbnRUeXBlID09PSBwYXJlbnQuaXRlbVR5cGUgJiYgcGFyZW50SWQgPT0gcGFyZW50Lml0ZW1JZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQpIHtcclxuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XHJcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcclxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XHJcblx0Ly8gdG9kbzogdHJhbnNsYXRlXHJcblx0dW5kZWZpbmVkSXRlbUVycm9yID0gJ0hldCBvcGdldnJhYWdkZSBpdGVtIGJlc3RhYXQgbmlldCAvIEplIGhlYnQgbmlldCB2b2xkb2VuZGUgcmVjaHRlbiBvbSBkaXQgaXRlbSB0ZSBiZWtpamtlbic7XHJcblx0QUxMX1BFUk1JU1NJT05TID0gNztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb2x1bW5zOiB0cnVlLFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxyXG5cdFx0XHRcdHRlbXBsYXRlQ29sdW1uczoge30sXHJcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkb0V4dGVuZCA9IGZhbHNlLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcclxuXHRcdGNvbnN0IGFwaUl0ZW1JZCA9IGFwaVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcclxuXHJcblx0XHRpZiAoZG9FeHRlbmQpXHJcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmRMb2NhbENvbnZlcnNpb25NYXAgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV1bcGFyZW50SWRdLmxpbmtzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcclxuXHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIG5ld0l0ZW1JZD86IEl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdGxldCBjb252ZXJzaW9uTWFwRW50cnk7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcclxuXHJcblx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdID0gbmV3SXRlbUlkO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHR0aGlzLmV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHR9XHJcblxyXG5cdGdldENvbnZlcnNpb25WYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRiYXRjaENsb25lIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdC8vIHRoZSB0aGUgaXRlbXMgbWlnaHQgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHNvIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3RcclxuXHRcdHRoaXMuYmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyaWVzLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5LmNsb25lKGNvbnZlcnNpb25NYXApKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZSwgaW5maXgsIGxhc3ROYW1lKSB7XHJcblx0XHRyZXR1cm4gZmlyc3ROYW1lLnRyaW0oKVxyXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXHJcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XHJcblx0fVxyXG5cclxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxyXG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xyXG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcclxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XHJcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcclxuXHRcdFx0XHRyZXR1cm4gJ2ZyaWVuZGx5bmFtZSc7XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxyXG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW1pbnRlcm4nO1xyXG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcclxuXHRcdFx0Y2FzZSAnQmFyY29kZSc6XHJcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcclxuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcclxuXHRcdFx0Y2FzZSAnQmV0YWxpbmdzY29uZGl0aWUnOlxyXG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XHJcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcclxuXHRcdFx0Y2FzZSAnVGF4U2NoZW1hJzpcclxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWVncm9lcCc6XHJcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XHJcblx0XHRcdGNhc2UgJ0luaHV1cic6XHJcblx0XHRcdGNhc2UgJ0luaHV1cmdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsQ2F0JzpcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XHJcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxyXG5cdFx0XHRjYXNlICdQbGFubmluZ21hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxyXG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdTdWJwcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnVGFhayc6XHJcblx0XHRcdGNhc2UgJ1RhZyc6XHJcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcclxuXHRcdFx0Y2FzZSAnVGlqZCc6XHJcblx0XHRcdGNhc2UgJ1RpdGVsJzpcclxuXHRcdFx0Y2FzZSAnVHlwZSc6XHJcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xyXG5cdFx0XHQvLyBjYXNlICdDb250YWN0JzpcclxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcclxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXHJcblx0XHRcdFx0cmV0dXJuICdkaXNwbGF5bmFtZSc7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3IsXHJcblx0QmF0Y2hTdGF0dXMsXHJcblx0Q29sdW1uSGFuZGxlcixcclxuXHRDb2x1bW5VdGlsLFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbUVudHJ5RmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRBcGlUZW1wbGF0ZUl0ZW1UeXBlTWFwLFxyXG5cdEVudHJ5U3RhdHVzLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLFxyXG5cdFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAsXHJcblx0VGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHksIGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuLy8gdG9kbyBtYWtlIGNsYXNzXHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xyXG5cdGVudHJpZXM6IEl0ZW1DYWNoZTtcclxuXHR0ZW1wbGF0ZXM6IEFwaVRlbXBsYXRlSXRlbVR5cGVNYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHR9XHJcblxyXG5cdGZldGNoSXRlbSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55LCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiB7XHJcblx0XHRjb25zdCBlbnRyeVN0YXR1cyA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cnlTdGF0dXMuZW50cnk7XHJcblx0XHRjb25zdCBzdGF0dXMgPSBlbnRyeVN0YXR1cy5zdGF0dXM7XHJcblxyXG5cdFx0aWYgKHN0YXR1cyA9PT0gRU5UUllfU1RBVFVTLkxPQ0FMKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucylcclxuXHRcdFx0XHQudGhlbihcclxuXHRcdFx0XHRcdHRlbXBsYXRlID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgb3B0aW9ucy5wYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChpdGVtRW50cnksIHN0YXR1cywgb3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxyXG5cdCAqIEBwYXJhbSBpdGVtSWRzXHJcblx0ICogQHBhcmFtIG9wdGlvbnNcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtRW50cnlbXT59XHJcblx0ICpcclxuXHQgKiBGb3IgZXZlcnkgaXRlbWlkIGZpbmQgdGhlIHN0YXR1cyBvZiB0aGUgSXRlbUVudHJ5IGFuZCByZXNvbHZlIHRoZSBwcm9taXNlcyBzbyB0aGUgcmVzdWx0IGlzXHJcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XHJcblx0ICovXHJcblxyXG5cdGZldGNoSXRlbXMgKGl0ZW1UeXBlLCBpdGVtSWRzLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0Y29uc3QgYmF0Y2hTdGF0dXMgPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lml0ZW1JZCxcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaXRlbUlkcylcclxuXHRcdFx0YmF0Y2hTdGF0dXMuYWRkKDxFbnRyeVN0YXR1czxJdGVtRW50cnk+PiB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKSk7XHJcblxyXG5cdFx0cHJvbWlzZXMuZW50cmllcyA9IGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCk7XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpXHJcblx0XHRcdHByb21pc2VzLnJlcXVlc3RzID0gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKSwgb3B0aW9ucy5jb2x1bW5zKTtcclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLkxPQ0FMXSkpXHJcblx0XHRcdHByb21pc2VzLnRlbXBsYXRlID0gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYmF0Y2hSZXNvbHZlKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cywgb3B0aW9ucy5jb2x1bW5zLCByZXNvbHZlZCwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlQ2FjaGVkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMsIG9wdGlvbnMpOiBQcm9taXNlPEl0ZW1FbnRyeT4ge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBpdGVtRW50cnkuY29sdW1ucy5yZXF1ZXN0O1xyXG5cclxuXHRcdHN3aXRjaCAoc3RhdHVzKSB7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyksXHJcblx0XHRcdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMsIG9wdGlvbnMuY29sdW1ucykuZGlmZmVyZW5jZTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIFtpdGVtSWRdLCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGNvbHVtbkRpZmZlcmVuY2UsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0XHRkZWZhdWx0OiAvLyBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgW2l0ZW1JZF0sIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGUoXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLnJlc29sdmUocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlTG9jYWwgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBwYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBpdGVtSWRDb252ZXJzaW9uID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXHJcblx0XHRcdGl0ZW1FbnRyeS5zZXRQYXJlbnQocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkKTsgLy8gY3JlYXRlIG5ldyBvYmplY3RcclxuXHJcblx0XHRpdGVtRW50cnlcclxuXHRcdFx0LnByb2Nlc3NMb2NhbCh0ZW1wbGF0ZS5maWVsZHMsIHt9LCB7fSwgaXRlbUlkQ29udmVyc2lvbilcclxuXHRcdFx0LnNldENyZWF0b3IoKVxyXG5cdFx0XHQucmVzb2x2ZSgpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcclxuXHRcdFx0bGlua2VkOiB0aGlzLmNyZWF0ZUxvY2FsRW50cmllcyhpdGVtVHlwZSwgaXRlbUlkLCB0ZW1wbGF0ZSwgaXRlbUlkQ29udmVyc2lvbiwgbG9jYWxJdGVtQ2FjaGUpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUV4cGFuc2lvbiAoaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlKTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xyXG5cclxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcclxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBpdGVtRW50cnk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZSgpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZSAoaXRlbUVudHJ5LCBjb2x1bW5JbmZvLCByZXNwb25zZSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdGlmIChpbml0aWFsID09PSB1bmRlZmluZWQpIHsgLy8gcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0c1xyXG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XHJcblx0XHRcdHRoaXMuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXHJcblx0XHRcdGluaXRpYWwsXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpLFxyXG5cdFx0XHRjb2x1bW5JbmZvXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUZW1wbGF0ZSAoaXRlbVR5cGU6IHN0cmluZywgdGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fSwgdGVtcGxhdGVDb2x1bW5zOiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5JdGVtVHlwZSA9IGdldEZpcnN0UHJvcGVydHkodGVtcGxhdGVDb2x1bW5zKTsgLy8gaXQncyBwb3NzaWJsZSB0byBhZGQgY29sdW1ucyB0byBsaW5rZWQgaXRlbXNcclxuXHJcblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjYWNoZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRjYWNoZWRUZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdFx0KFxyXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVXRpbC5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUoXHJcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRjYWNoZWRUZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFtcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcclxuXHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgP1xyXG5cdFx0XHRcdHt9IDpcclxuXHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goY29sdW1uSXRlbVR5cGUsIHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0pXHJcblx0XHRdKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZTogYW55ID0gcmVzb2x2ZWRbMF07XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxyXG5cdFx0XHRcdFx0dGVtcGxhdGVSZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSxcclxuXHRcdFx0XHRcdHJlc29sdmVkWzFdXHJcblx0XHRcdFx0KS5tZXJnZWQ7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSB7XHJcblx0XHRcdFx0XHRmaWVsZHM6IHRlbXBsYXRlUmVzcG9uc2UuZmV0Y2hPYmplY3QoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucyksXHJcblx0XHRcdFx0XHRyZXNwb25zZTogdGVtcGxhdGVSZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uczogcmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMgJiYgdGVtcGxhdGVSZXNwb25zZS5jYWNoZWFibGUpXHJcblx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV0gPSB0ZW1wbGF0ZTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55LCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogRW50cnlTdGF0dXM8SXRlbUVudHJ5PiB7XHJcblx0XHRsZXQgaXRlbUVudHJ5O1xyXG5cclxuXHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkpIHtcclxuXHRcdFx0aXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGl0ZW1FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIGZhbHNlKTtcclxuXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XHJcblx0XHR9XHJcblxyXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGl0ZW1FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLmNvbHVtbnMsIG9wdGlvbnMuZGVmZXJSZXF1ZXN0KTtcclxuXHJcblx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdHRoaXMuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRlbnRyeTogaXRlbUVudHJ5LFxyXG5cdFx0XHRzdGF0dXM6IG9wdGlvbnMuZGVmZXJSZXF1ZXN0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlJFU09MVkVcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgaXNDb2x1bW5TdWJzZXQgPSBpdGVtRW50cnkuaXNMb2NhbCgpIHx8XHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChvcHRpb25zLmNvbHVtbnMsIGNvbHVtbnMucmVxdWVzdCwgY29sdW1ucy5yZXF1ZXN0Q29sdW1uc1RydWUpO1xyXG5cclxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0Y29sdW1ucy5yZXF1ZXN0ID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1ucy5yZXF1ZXN0LCBvcHRpb25zLmNvbHVtbnMpLm1lcmdlZDtcclxuXHJcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gaXNDb2x1bW5TdWJzZXQgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc0NvbHVtblN1YnNldClcclxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmRlZmVyKGZhbHNlKTtcclxuXHJcblx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkVYUEFORDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIHtCYXRjaFN0YXR1c30gYmF0Y2hTdGF0dXNcclxuXHQgKiBAcGFyYW0gcmVxdWVzdENvbHVtbnNcclxuXHQgKiBAcGFyYW0gcmVzb2x2ZWRcclxuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XHJcblx0ICpcclxuXHQgKiBmb3IgZXZlcnkgdHlwZSBvZiBlbnRyeSBzdGF0dXMgdGhlcmUgaXMgaW4gdGhpcyBiYXRjaCByZXF1ZXN0IG1ha2Ugc3VyZSB0aGUgZW50cmllcyBnZXQgcmVzb2x2ZWQuXHJcblx0ICogdGhlbiByZXR1cm4gYSBhcnJheSBvZiB0aGUgcmVzdWx0aW5nIEl0ZW1FbnRyeUFycmF5XHJcblx0ICovXHJcblx0YmF0Y2hSZXNvbHZlIChpdGVtVHlwZSwgYmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzLCByZXF1ZXN0Q29sdW1ucywgcmVzb2x2ZWQsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBJdGVtRW50cnlbXSB8IFByb21pc2U8YW55PiB7XHJcblx0XHRjb25zdCByZXNwb25zZSA9IHJlc29sdmVkLnJlcXVlc3RzO1xyXG5cdFx0Y29uc3QgZXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xyXG5cdFx0Y29uc3QgcmVzb2x2ZVN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XHJcblxyXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKGV4cGFuZFN0YXR1cykpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcclxuXHJcblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0XHRleHBhbmRTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMocmVzb2x2ZVN0YXR1cykpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XHJcblxyXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFx0cmVzb2x2ZVN0YXR1cywgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnJlc29sdmVSZW1vdGUoaXRlbUVudHJ5LCBjb2x1bW5JbmZvLCByZXNwb25zZSkgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSwgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG51bGwsIHJlc29sdmVkLnRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gdG9kbzogbm8gaXRlbSBlcnJvciAoe21lc3NhZ2U6IHRoaXMuaXRlbUVudHJ5U2VydmljZS51bmRlZmluZWRJdGVtRXJyb3J9KVxyXG5cdFx0cmV0dXJuIHN1Y2Nlc3MgPyBiYXRjaFN0YXR1cy5nZXRBcnJheSgpIDogdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVMb2NhbEVudHJpZXMgKFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRsb2NhbFBhcmVudElkOiBJdGVtSWQsXHJcblx0XHR0ZW1wbGF0ZSxcclxuXHRcdGl0ZW1JZENvbnZlcnNpb246IEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFtdIHtcclxuXHRcdGNvbnN0IGFwaVJlc3BvbnNlID0gdGVtcGxhdGUucmVzcG9uc2U7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvTWFwID0ge307XHJcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSB7fTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8e2l0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdfT4gPSBbXTtcclxuXHJcblx0XHQvLyBUT0RPOiBkaXNhYmxlIGNhY2hpbmc/XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGFwaVJlc3BvbnNlLml0ZW1zKSB7XHJcblx0XHRcdGlmIChpdGVtVHlwZSA9PT0gcGFyZW50VHlwZSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGNvbHVtbkluZm9NYXBbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdHRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAocGFyZW50VHlwZTIsIGxvY2FsUGFyZW50SWQyLCBhcGlQYXJlbnRJZCkgPT4ge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUyLCBpdGVtSWQ6IGxvY2FsUGFyZW50SWQyfTtcclxuXHRcdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlMl1bYXBpUGFyZW50SWRdLmxpbmtzO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xyXG5cdFx0XHRcdGlmICghbGlua3MuaGFzT3duUHJvcGVydHkoaXRlbVR5cGUpKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRcdC8vIHRoZSBpdGVtIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQgaW4gdG9wLWRvd24gb3JkZXJcclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goe2l0ZW1UeXBlOiBpdGVtVHlwZSwgaXRlbUVudHJpZXM6IGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSBbXX0pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0XHRjb25zdCBsb2NhbEl0ZW1JZCA9IGl0ZW1JZENvbnZlcnNpb25baXRlbVR5cGVdW2FwaUl0ZW1JZF07XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWxMaW5rZWQoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRsb2NhbEl0ZW1JZCxcclxuXHRcdFx0XHRcdFx0YXBpUmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGFwaUl0ZW1JZCksXHJcblx0XHRcdFx0XHRcdHBhcmVudCxcclxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mb01hcFtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Y3JlYXRlRW50cmllcyhwYXJlbnRUeXBlLCBsb2NhbFBhcmVudElkLCBhcGlSZXNwb25zZS5saW5rc1twYXJlbnRUeXBlXVswXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGRlZmVyUmVxdWVzdCA9IHRydWUsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpIHtcclxuXHRcdGNvbnN0IHRpdGxlRmllbGQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZChpdGVtVHlwZSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoe2NvbHVtbnM6IFt0aXRsZUZpZWxkXSwgZGVmZXJSZXF1ZXN0OiBkZWZlclJlcXVlc3R9KSxcclxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcclxuXHRcdCkudGhlbihcclxuXHRcdFx0Ly8gdG9kbzogSXRlbUVudHJ5IHwgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxyXG5cdFx0XHQoZW50cnk6IGFueSkgPT4ge1xyXG5cdFx0XHRcdGlmIChlbnRyeS5tYWluICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gZW50cnkubWFpbi5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmdldEZpZWxkcygpW3RpdGxlRmllbGRdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbXMgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IEl0ZW1JZFtdLCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogaXRlbUlkc30sIHtbaXRlbVR5cGVdOiBjb2x1bW5zfSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yLCBDb2x1bW5FeHBhbnNpb24sIEl0ZW1IYW5kbGVyLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlcXVlc3RTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0e2lkOiBpdGVtSWR9LFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtcyAoXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdHF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcclxuXHRcdGNvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zXHJcblx0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xyXG5cclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRjb25zdCBwYXJhbXMgPSB7XHJcblx0XHRcdHJlcXVlc3RUeXBlOiAncXVlcnknLFxyXG5cdFx0XHRjb2x1bW5zOiByZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0cXVlcnk6IHF1ZXJ5LFxyXG5cdFx0XHRpdGVtVHlwZTogJycsXHJcblx0XHRcdGFsbExpbmtJZHM6IGZhbHNlLFxyXG5cdFx0XHRsaW1pdDogbnVsbFxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsKVxyXG5cdFx0XHRwYXJhbXMuaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0cGFyYW1zLml0ZW1UeXBlID0gb3B0aW9ucy5xdWVyeUl0ZW1UeXBlO1xyXG5cdFx0XHRwYXJhbXMuYWxsTGlua0lkcyA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMubGltaXQgIT09IG51bGwpXHJcblx0XHRcdHBhcmFtcy5saW1pdCA9IG9wdGlvbnMubGltaXQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcyk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0TGlua0l0ZW1zIChwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcclxuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHQpIDpcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdFx0XHRxdWVyeSxcclxuXHRcdFx0XHRcdHtsaW5rZWRUbzogcGFyZW50VHlwZSwgcXVlcnk6IHtpZDogcGFyZW50SWRBcnJheX19XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NFeHBhbnNpb24gKHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSwgaWRBcnJheSwgcGFyZW50LCBjb2x1bW5JbmZvLCBjb2x1bW5FeHBhbnNpb24/KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0aWYgKGNvbHVtbkV4cGFuc2lvbiA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXHJcblx0XHRcdFx0Y29sdW1uSW5mby5yZXF1ZXN0Q29sdW1uc1RydWUgPyB0cnVlIDogY29sdW1uSW5mby5yZXF1ZXN0LFxyXG5cdFx0XHRcdGNvbHVtbkluZm8ucmVzcG9uc2VcclxuXHRcdFx0KTtcclxuXHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtbkluZm8uaXRlbVR5cGU7XHJcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtbkluZm8ucm9vdDtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxQcm9taXNlPEl0ZW1FbnRyeT4+ID0gW107XHJcblxyXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0bGV0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbUlkLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxyXG5cdFx0XHRcdFx0Y29sdW1uSW5mb1xyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpIHtcclxuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbkluZm9cclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUNhY2hlZEl0ZW0gKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcclxuXHJcblx0XHRyZXR1cm4gZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsID9cclxuXHRcdFx0aXRlbUVudHJ5IDpcclxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxyXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2UgKHJlc3BvbnNlLCBwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgb3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgcGFyZW50SXRlbXMgPSByZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXTtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0sXHJcblx0XHRcdFx0XHRjb2x1bW5JbmZvLFxyXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0KSA6XHJcblx0XHRcdFx0W107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdGl0ZW1zOiByZXNvbHZlZCxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtbkluZm8sXHJcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb246IGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2luZGV4JztcclxuaW1wb3J0IHsgRWRpdFJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlU2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdDogZmFsc2UsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBub29wXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb21wYXJlT3B0aW9ucyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlyc3QpIHtcclxuXHRcdFx0aWYgKGZpcnN0W2tleV0gIT09IHNlY29uZFtrZXldKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlzTmV3UmVzb3VyY2UgKHJlc291cmNlOiBFZGl0UmVzb3VyY2UpIHtcclxuXHRcdHJldHVybiByZXNvdXJjZS5pc0xvY2FsKCkgJiZcclxuXHRcdFx0cmVzb3VyY2UudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IERVUExJQ0FURV9LRVlXT1JELCBEVVBMSUNBVEVfUFJFRklYLCBORVdfS0VZV09SRCwgTkVXX1BSRUZJWCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLZXlTZXJ2aWNlIHtcclxuXHRzZXBhcmF0b3I6IHN0cmluZyA9ICc6JztcclxuXHJcblx0Y29uc3RydWN0b3IgKCkge31cclxuXHJcblx0Z2V0U2luZ2xlS2V5IChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1UeXBlLmNvbmNhdCh0aGlzLnNlcGFyYXRvciwgU3RyaW5nKGl0ZW1JZCkpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbkNhY2hlS2V5IChwYXJlbnRUeXBlOiBzdHJpbmcsIHBhcmVudElkOiBudW1iZXIsIGNoaWxkVHlwZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gcGFyZW50VHlwZS5jb25jYXQodGhpcy5zZXBhcmF0b3IsIFN0cmluZyhwYXJlbnRJZCksIHRoaXMuc2VwYXJhdG9yLCBjaGlsZFR5cGUpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q3NzS2V5ICgpIHtcclxuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJ18nKTtcclxuXHR9XHJcblxyXG5cdHBhcnNlU3RhdGVLZXkgKHN0YXRlS2V5OiBzdHJpbmcpIHtcclxuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcclxuXHJcblx0XHRpZiAoc3RhdGVLZXkuaW5kZXhPZihORVdfS0VZV09SRCkgPT09IDApXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZTogJ25ldycsXHJcblx0XHRcdFx0dGVtcGxhdGU6IHN0YXRlS2V5LnN1YnN0cmluZyhORVdfS0VZV09SRC5sZW5ndGgpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YoRFVQTElDQVRFX0tFWVdPUkQpID09PSAwKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6ICdkdXBsaWNhdGUnLFxyXG5cdFx0XHRcdGl0ZW1JZDogc3RhdGVLZXkuc3Vic3RyaW5nKERVUExJQ0FURV9LRVlXT1JELmxlbmd0aClcclxuXHRcdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdldER1cGxpY2F0ZVN0YXRlS2V5IChpdGVtSWQ6IHN0cmluZyB8IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIERVUExJQ0FURV9LRVlXT1JEICsgaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Z2V0TmV3U3RhdGVLZXkgKHRlbXBsYXRlVHlwZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gTkVXX0tFWVdPUkQgKyB0ZW1wbGF0ZVR5cGU7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbElkICgpOiBJdGVtSWQge1xyXG5cdFx0cmV0dXJuICsoTkVXX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxEdXBsaWNhdGVJZCAoKTogSXRlbUlkIHtcclxuXHRcdHJldHVybiArKERVUExJQ0FURV9QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcclxuXHR9XHJcblxyXG5cdGdldFJhbmRvbVN0cmluZyAoKSB7XHJcblx0XHRyZXR1cm4gKCcnICsgTWF0aC5yYW5kb20oKSkuc3BsaXQoJy4nKVsxXS5zdWJzdHIoMCwgOCk7XHJcblx0fVxyXG5cclxuXHQvLyBub3RlOiB0aGUgY2hhbmdlcyBjb21waWxlciB1c2VzIHRoaXNcclxuXHQvLyBtaWdodCBiZSBjYWxsZWQgd2l0aCB1bmRlZmluZWQgKGl0ZW1IYW5kbGVyLmNyZWF0ZVJlcXVlc3QpXHJcblx0aXNMb2NhbElkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmlzTmV3SWQoaXRlbUlkKSB8fCB0aGlzLmlzRHVwbGljYXRlSWQoaXRlbUlkKSk7XHJcblx0fVxyXG5cclxuXHRpc05ld0lkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gTkVXX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgTkVXX1BSRUZJWC5sZW5ndGgpID09PSBORVdfUFJFRklYO1xyXG5cdH1cclxuXHJcblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtSWQgPT09IERVUExJQ0FURV9LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIERVUExJQ0FURV9QUkVGSVgubGVuZ3RoKSA9PT0gRFVQTElDQVRFX1BSRUZJWDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRJdGVtQ2FjaGUsXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdExvY2tTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZSB7XG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cdGRlZmVycmVkQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0aXRlbXM6IEl0ZW1DYWNoZTtcblx0dGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblx0Y2FsbGJhY2tzID0ge29uQmVmb3JlU2F2ZToge30sIG9uU2F2ZVN1Y2Nlc3M6IHt9LCBvblNhdmVXaXRob3V0Q2xvc2luZzoge319O1xuXG5cdGNoYW5nZXNJbnRlcnZhbDogbnVsbCB8IG51bWJlciA9IG51bGw7XG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcblx0cm9vdEl0ZW06IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGNsZWFyQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmNsZWFyKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0Y29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJUYWJDaGFuZ2UgPSBmYWxzZSkge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKClcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpXG5cdFx0KTtcblxuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucy5jbGVhcigpO1xuXHR9XG5cblx0dXBkYXRlU2luZ2xlSXRlbXMgKGNvbnZlcnNpb25NYXApIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbnZlcnNpb25NYXApIHtcblx0XHRcdGZvciAoY29uc3Qgb2xkSXRlbUlkIGluIGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbXMuZ2V0KGl0ZW1UeXBlLCBvbGRJdGVtSWQpO1xuXG5cdFx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR0aGlzLml0ZW1zLnVwZGF0ZUl0ZW1JZChpdGVtRW50cnksIG9sZEl0ZW1JZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXG5cdHJldmVydENoYW5nZXMgKCkge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMucmVzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSlcblx0XHQpO1xuXG5cdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xuXHRcdFx0dGhpcy5sb2NrU2VydmljZS5kZWxldGVMb2NrKHRoaXMucm9vdEl0ZW0pIDpcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdH1cblxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKCkpXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmV2ZXJ0Q2hhbmdlcygpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNldE1vZGlmaWVkKCk7XG5cdFx0fVxuXHR9XG5cblx0ZGV0ZWN0Q2hhbmdlcyAoKSB7XG5cdFx0aWYgKHRoaXMuaGFzQ2hhbmdlcylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5pdGVtcy5zb21lKFxuXHRcdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKClcblx0XHRcdClcblx0XHQpXG5cdFx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0aGlzLmNvbGxlY3Rpb25zLnNvbWUoXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMuY29sbGVjdGlvbkhhc0NoYW5nZXMoY29sbGVjdGlvbkVudHJ5KVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGNvbGxlY3Rpb25IYXNDaGFuZ2VzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkge1xuXHRcdC8vIG5vIG5lZWQgdG8gY2FsbCBoYXNFZGl0UmVzb3VyY2VzIGhlcmUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdmVyeSBzaW1wbGVcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0FkZGVkSXRlbXMoKSB8fCBjb2xsZWN0aW9uRW50cnkuaGFzUmVtb3ZlZEl0ZW1zKCkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMoKSAmJiBjb2xsZWN0aW9uRW50cnkuaGFzVXBkYXRlZEl0ZW1zKCk7XG5cdH1cblxuXHRpc0xvY2thYmxlICgpIHtcblx0XHRpZiAodGhpcy5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMucm9vdEl0ZW0uaXNMb2NrYWJsZSgpO1xuXHR9XG5cblx0c2F2ZSAoY2xvc2VUYWIgPSBmYWxzZSwgcGFyYW1ldGVycywgYnJlYWtVcEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spIHtcblx0XHRyZXR1cm4gKHRoaXMuaXNMb2NrYWJsZSgpID8gdGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSkgOiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25CZWZvcmVTYXZlJywgY2xvc2VUYWIpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpO1xuXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbnMudG9BcnJheSgpLFxuXHRcdFx0XHRcdGJyZWFrVXBCeVBhcmVudCxcblx0XHRcdFx0XHRyZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oY29udmVyc2lvbk1hcCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmNsZWFyTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcblxuXHRcdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2luZ2xlSXRlbXMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25TYXZlU3VjY2VzcycsIGNvbnZlcnNpb25NYXApLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHRcdFx0dGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvblNhdmVXaXRob3V0Q2xvc2luZycsIGNvbnZlcnNpb25NYXAsIHRydWUpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja3MgKGV2ZW50LCAuLi5hcmdzKSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2FsbGJhY2tzW2V2ZW50XSlcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXN1bHQpO1xuXHR9XG5cblx0ZW5hYmxlQ2hhbmdlc1dhdGNoZXIgKCkge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdDaGFuZ2VzIHdhdGNoZXIgYWxyZWFkeSBydW5uaW5nIScsIHRoaXMpO1xuXHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IHNldEludGVydmFsKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuZGV0ZWN0Q2hhbmdlcygpKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdGRpc2FibGVDaGFuZ2VzV2F0Y2hlciAoKSB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZXNJbnRlcnZhbCk7XG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xuXHR9XG5cblx0cmVnaXN0ZXJDYWxsYmFjayAoZXZlbnQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV07XG5cdH1cblxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QgPSBmYWxzZSkge1xuXHRcdGlmIChpc1Jvb3QpXG5cdFx0XHR0aGlzLnJvb3RJdGVtID0gaXRlbUVudHJ5O1xuXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblx0XHRvcHRpb25zLm9uRGVhY3RpdmF0ZSA9IChfaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHRoaXMub25EZWFjdGl2YXRlSXRlbShfaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1FbnRyeSwgb3B0aW9ucyk7XG5cdH1cblxuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnMpIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMpIHtcblx0XHRyZXNvdXJjZU9wdGlvbnMub25BY3RpdmF0ZUl0ZW0gPSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHRoaXMub25BY3RpdmF0ZUl0ZW0oaXRlbUVudHJ5KTtcblxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtID0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oaXRlbUVudHJ5KTtcblxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uID1cblx0XHRcdChfY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpID0+IHRoaXMuY2xlYXJDb2xsZWN0aW9uKF9jb2xsZWN0aW9uUmVzb3VyY2UpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMpO1xuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCByZXNvdXJjZU9wdGlvbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbkVudHJpZXMpXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoY29sbGVjdGlvbkVudHJpZXNbcGFyZW50SWRdLCByZXNvdXJjZU9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG9uRGVhY3RpdmF0ZUl0ZW0gKGl0ZW1FbnRyeSkge1xuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcblx0XHRpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0XHQvLyB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXHR9XG5cblx0b25BY3RpdmF0ZUl0ZW0gKGl0ZW1FbnRyeSkge1xuXHRcdHRoaXMuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NrU2VydmljZSB7XHJcblx0bG9ja0l0ZW1zID0ge307XHJcblx0cHJvbWlzZXMgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGdldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbWFwKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCB2YWx1ZSwgbWFwKSB7XHJcblx0XHRyZXR1cm4gY3JlYXRlUGF0aChcclxuXHRcdFx0bWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB2YWx1ZV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NrcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5sb2NrSXRlbXM7XHJcblx0fVxyXG5cclxuXHRoYXNMb2NrIChsb2NrVG9rZW5JZCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmxvY2tJdGVtcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdCAod2F0Y2hlZClcclxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XHJcblx0fVxyXG5cclxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcclxuXHR9XHJcblxyXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXHJcblx0Ly8gaXMgYWxzbyB1c2VkIGJ5IGRlbGV0ZUxvY2tcclxuXHRmZXRjaENhY2hlZExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9jayAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5wcm9taXNlcyk7XHJcblxyXG5cdFx0aWYgKHByb21pc2UgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHByb21pc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihsb2NrSXRlbSA9PiB7XHJcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKGxvY2tJdGVtID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduID9cclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChsb2NrSXRlbS5tZXNzYWdlKSA6XHJcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKFxyXG5cdFx0XHQnTG9ja3Rva2VuJyxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0e2l0ZW10eXBlOiBpdGVtVHlwZSwgaXRlbTogaXRlbUlkfVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoXHJcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rcy5Mb2NrdG9rZW5bMF1cclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sIGVycm9yID0+IHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0aWYgKGVycm9yLmNvZGUgPT09IDMwMSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBlcnJvci5tZXNzYWdlXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoaXRlbUVudHJ5LCBwcm9taXNlLCB0aGlzLnByb21pc2VzKTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZUxvY2sgKGl0ZW1FbnRyeSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihjYWNoZWRMb2NrID0+IHtcclxuXHRcdFx0XHQvLyB1bmRlZmluZWQ6IG5vdCByZXF1ZXN0ZWQgeWV0XHJcblxyXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xyXG5cdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZSgnTG9ja3Rva2VuJywgY2FjaGVkTG9jay5pZClcclxuXHRcdFx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhckxvY2sgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmNvbnN0IEVNUFRZX0VOVFJZID0ge307XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcclxuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xyXG5cdGRlc3RpbmF0aW9uOiBhbnkgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwcml2YXRlIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cHJvY2VzcyAoKSB7XHJcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcclxuXHRcdHRoaXMucHJvY2Vzc0l0ZW1zKHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSwgW3RoaXMucm9vdEl0ZW1FbnRyeV0sIHt9KTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpdGVtVHlwZTogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQ6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQYXJlbnRNYXAgKGl0ZW1DYWNoZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXHJcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkgLy8gd2UgZG9uJ3QgY2FyZSBmb3IgaXRlbXMgdGhhdCBhcmUgbm90IGxpbmtlZCB0byB0aGUgcm9vdCBpdGVtXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnQuaXRlbVR5cGU7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdFx0bGV0IG1hcEVudHJ5ID0gcmVzdWx0W3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdFx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRtYXBFbnRyeVtwYXJlbnRJZF0gPSB7fTtcclxuXHJcblx0XHRcdFx0bWFwRW50cnkgPSBtYXBFbnRyeVtwYXJlbnRJZF07XHJcblxyXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdG1hcEVudHJ5W2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NJdGVtcyAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgbGlua0FjY3VtdWxhdG9yKSB7XHJcblx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRpZiAobGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRcdC8vIGVhY2ggaXRlbSBvbmx5IGhhcyBhIHNpbmdsZSBwYXJlbnQsIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhpc1xyXG5cdFx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXS5wdXNoKGl0ZW1JZCk7XHJcblxyXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdID0gdGhpcy5wcm9jZXNzSXRlbShpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzSXRlbSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cdFx0Y29uc3QgY2hpbGRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENvbGxlY3Rpb25zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRjb25zdCB2YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cdFx0Y29uc3QgbGlua3MgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEl0ZW1zKVxyXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjaGlsZFR5cGUsIGNoaWxkSXRlbXNbY2hpbGRUeXBlXSwgbGlua3MpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNoaWxkQ29sbGVjdGlvbnMpIHtcclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLnF1ZXJ5ICE9PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkuaXRlbXMsIGxpbmtzKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBoYXNWYWx1ZXMgPSBoYXNQcm9wZXJ0aWVzKHZhbHVlcyk7XHJcblx0XHRjb25zdCBoYXNMaW5rcyA9IGhhc1Byb3BlcnRpZXMobGlua3MpO1xyXG5cclxuXHRcdGlmIChoYXNWYWx1ZXMgJiYgaGFzTGlua3MpXHJcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXMsIGxpbmtzOiBsaW5rc307XHJcblxyXG5cdFx0aWYgKGhhc1ZhbHVlcylcclxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlc307XHJcblxyXG5cdFx0aWYgKGhhc0xpbmtzKVxyXG5cdFx0XHRyZXR1cm4ge2xpbmtzOiBsaW5rc307XHJcblxyXG5cdFx0cmV0dXJuIEVNUFRZX0VOVFJZO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRJdGVtc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xyXG5cdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLnBhcmVudE1hcFtwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRpZiAobWFwRW50cnkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdHJldHVybiBtYXBFbnRyeVtwYXJlbnRJZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5jb25zdCBNQVlCRSA9ICdtYXliZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyBmaWVsZHM6IEZpZWxkTWFwLFxyXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29tcGFyZVZhbHVlcyAodmFsdWUsIHF1ZXJ5VmFsdWUpIHtcclxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQocXVlcnlWYWx1ZSkpXHJcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlTW9tZW50T2JqZWN0cyhxdWVyeVZhbHVlLCB2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHF1ZXJ5VmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUR1cmF0aW9ucyhxdWVyeVZhbHVlLCB2YWx1ZSk7XHJcblxyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBxdWVyeVZhbHVlID09IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAocXVlcnk6IGFueSk6IGJvb2xlYW4gfCBzdHJpbmcge1xyXG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoTGlua2VkVG9RdWVyeShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hDb21wbGV4UXVlcnkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hTaW1wbGVRdWVyeSh0aGlzLmZpZWxkc1txdWVyeS5rZXldLCBxdWVyeSk7XHJcblxyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIHF1ZXJ5ISBQYXJzZWQ/Jyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoTGlua2VkVG9RdWVyeSAocXVlcnkpIHtcclxuXHRcdGlmIChxdWVyeS5yZXZlcnNlKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblx0XHRsZXQgbWF0Y2g7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcclxuXHRcdGVsc2UgaWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSBwYXJlbnQuaXRlbVR5cGUpXHJcblx0XHRcdG1hdGNoID0gZmFsc2U7XHJcblx0XHRlbHNlXHJcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHBhcmVudC5pdGVtSWQsIHF1ZXJ5LnF1ZXJ5KTtcclxuXHJcblx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5Lm5vdCA/ICFtYXRjaCA6IG1hdGNoO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaENvbXBsZXhRdWVyeSAocXVlcnkpIHtcclxuXHRcdGNvbnN0IGNvbmRpdGlvbnMgPSBxdWVyeS5jb25kaXRpb25zO1xyXG5cclxuXHRcdGxldCByZXN1bHQ7XHJcblx0XHRsZXQgdGVybWluYWw7XHJcblxyXG5cdFx0c3dpdGNoIChxdWVyeS5vcGVyYXRvcikge1xyXG5cdFx0XHRjYXNlICdBTkQnOlxyXG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XHJcblx0XHRcdFx0dGVybWluYWwgPSBmYWxzZTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnT1InOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xyXG5cdFx0XHRcdHRlcm1pbmFsID0gdHJ1ZTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgb3BlcmF0b3InKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XHJcblxyXG5cdFx0XHRpZiAobWF0Y2ggPT09IHRlcm1pbmFsKVxyXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcclxuXHJcblx0XHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXHJcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hTaW1wbGVRdWVyeSAodmFsdWUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCBrZXkgPSBxdWVyeS5rZXk7XHJcblx0XHRsZXQgcXVlcnlWYWx1ZSA9IHF1ZXJ5LnZhbHVlO1xyXG5cclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpIC8vIENvdWxkIGJlIGxpbmtlZFRvIGFuIGVtcHR5IG9iamVjdFxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1JlcXVpcmVkIGZpZWxkJywga2V5LCAnbm90IGZvdW5kIGZvcicsIHRoaXMuaXRlbVR5cGUpO1xyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHF1ZXJ5VmFsdWUgPT09ICdOT1cnKVxyXG5cdFx0XHRxdWVyeVZhbHVlID0gbW9tZW50KCk7XHJcblxyXG5cdFx0c3dpdGNoIChxdWVyeS5jb21wYXJhdG9yKSB7XHJcblx0XHRcdGNhc2UgJz0nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICchPSc6XHJcblx0XHRcdFx0cmV0dXJuICF0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICc8JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPCBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc8PSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDw9IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJz4nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJz49JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPj0gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnSU4nOlxyXG5cdFx0XHRcdHJldHVybiBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnTk9UIElOJzpcclxuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBjb21wYXJhdG9yOiAnICsgcXVlcnkuY29tcGFyYXRvciArICcgaW4gcXVlcnkgJyArIHF1ZXJ5KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmVudW0gQ09OU1RBTlRTIHtcclxuXHRPQkogPSAwLFxyXG5cdFNUUiA9IDEsXHJcblx0U0VQID0gJzonXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlciB7XHJcblx0cXVlcnk6IGFueTtcclxuXHRwYXJhbWV0ZXJzOiBhbnk7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChxdWVyeSwgcGFyYW1ldGVycz8pIHtcclxuXHRcdHRoaXMucXVlcnkgPSBxdWVyeTtcclxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWUpIHtcclxuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHZhbHVlLnNsaWNlKCkuc29ydCgpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24odmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbXBhcmVQYXJzZWRRdWVyaWVzIChhLCBiKSB7XHJcblx0XHRpZiAoYVtDT05TVEFOVFMuU1RSXSA9PT0gYltDT05TVEFOVFMuU1RSXSlcclxuXHRcdFx0cmV0dXJuIDA7XHJcblxyXG5cdFx0cmV0dXJuIGFbQ09OU1RBTlRTLlNUUl0gPiBiW0NPTlNUQU5UUy5TVFJdID8gMSA6IC0xO1xyXG5cdH1cclxuXHJcblx0cGFyc2UgKHF1ZXJ5ID0gdGhpcy5xdWVyeSkge1xyXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlTGlua2VkVG9RdWVyeShcclxuXHRcdFx0XHRxdWVyeS5saW5rZWRUbyxcclxuXHRcdFx0XHRxdWVyeS5xdWVyeSxcclxuXHRcdFx0XHRxdWVyeS5yZXZlcnNlLFxyXG5cdFx0XHRcdHF1ZXJ5Lm5vdFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5ub3QgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUN1c3RvbVF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcclxuXHRcdFx0XHRxdWVyeS5wYXJhbWV0ZXJzXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXHJcblx0XHRcdFx0cXVlcnkuY29uZGl0aW9ucyxcclxuXHRcdFx0XHRxdWVyeS5vcGVyYXRvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShcclxuXHRcdFx0XHRxdWVyeS5rZXksXHJcblx0XHRcdFx0cXVlcnkudmFsdWUsXHJcblx0XHRcdFx0cXVlcnkuY29tcGFyYXRvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGtleSA9IGdldEZpcnN0UHJvcGVydHkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChrZXkgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBbe30sICd7fSddO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoa2V5LCBxdWVyeVtrZXldKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VTZWFyY2hRdWVyeSAodmFsdWUpIHtcclxuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e3NlYXJjaDogdmFsdWVbQ09OU1RBTlRTLk9CSl19LFxyXG5cdFx0XHQnWycgKyAnc2VhcmNoJyArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDdXN0b21RdWVyeSAoY3VzdG9tLCBwYXJhbWV0ZXJzKSB7XHJcblx0XHRpZiAocGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gW1xyXG5cdFx0XHRcdHtjdXN0b206IGN1c3RvbX0sXHJcblx0XHRcdFx0J1snICsgY3VzdG9tICsgJ10nXHJcblx0XHRcdF07XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUGFyYW1ldGVycyA9IHRoaXMucGFyc2VDdXN0b21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtjdXN0b206IGN1c3RvbSwgcGFyYW1ldGVyczogcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuT0JKXX0sXHJcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVBhcmFtZXRlcnMgKHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KCk7XHJcblxyXG5cdFx0Y29uc3QgcXVlcnkgPSB7fTtcclxuXHRcdGxldCBzdHJpbmcgPSAnJztcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tpXTtcclxuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHBhcmFtZXRlcnNba2V5XSk7XHJcblxyXG5cdFx0XHRxdWVyeVtrZXldID0gdmFsdWVbQ09OU1RBTlRTLk9CSl07XHJcblxyXG5cdFx0XHRpZiAoaSA+IDApXHJcblx0XHRcdFx0c3RyaW5nICs9IENPTlNUQU5UUy5TRVA7XHJcblxyXG5cdFx0XHRzdHJpbmcgKz0gdmFsdWVbQ09OU1RBTlRTLlNUUl07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VTaW1wbGVRdWVyeSAoa2V5LCB2YWx1ZSwgY29tcGFyYXRvcj8pIHtcclxuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKGNvbXBhcmF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y29tcGFyYXRvciA9IEFycmF5LmlzQXJyYXkodmFsdWVbQ09OU1RBTlRTLk9CSl0pID8gJ0lOJyA6ICc9JztcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7a2V5OiBrZXksIHZhbHVlOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgY29tcGFyYXRvcjogY29tcGFyYXRvcn0sXHJcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUxpbmtlZFRvUXVlcnkgKGxpbmtlZFRvLCBxdWVyeSwgcmV2ZXJzZSwgbm90KSB7XHJcblx0XHRpZiAocXVlcnkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cXVlcnkgPSB7fTtcclxuXHJcblx0XHRpZiAocmV2ZXJzZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXZlcnNlID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKG5vdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRub3QgPSBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtsaW5rZWRUbzogbGlua2VkVG8sIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgcmV2ZXJzZTogcmV2ZXJzZSwgbm90OiBub3R9LFxyXG5cdFx0XHQnWycgKyAnbGlua2VkVG8nICsgQ09OU1RBTlRTLlNFUCArIGxpbmtlZFRvICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIHJldmVyc2UgKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUNvbXBsZXhRdWVyeSAoY29uZGl0aW9ucywgb3BlcmF0b3IpIHtcclxuXHRcdGlmIChvcGVyYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvcGVyYXRvciA9ICdBTkQnO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRvcGVyYXRvciA9IG9wZXJhdG9yLnRvVXBwZXJDYXNlKCk7XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkQ29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25zKGNvbmRpdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtjb25kaXRpb25zOiBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5PQkpdLCBvcGVyYXRvcjogb3BlcmF0b3J9LFxyXG5cdFx0XHQnWycgKyBvcGVyYXRvciArIHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9ucykge1xyXG5cdFx0bGV0IHBhcnNlZENvbmRpdGlvbnM6IG9iamVjdFtdID0gW107XHJcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcclxuXHRcdGxldCBzdHJpbmcgPSAnJztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxyXG5cdFx0XHRwYXJzZWRDb25kaXRpb25zLnB1c2godGhpcy5wYXJzZShjb25kaXRpb24pKTtcclxuXHJcblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcnNlZENvbmRpdGlvbiBvZiBwYXJzZWRDb25kaXRpb25zKSB7XHJcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcclxuXHRcdFx0c3RyaW5nICs9IHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuU1RSXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmb3JtYXRWYWx1ZSAodmFsdWUpIHtcclxuXHRcdGxldCBwcm9jZXNzZWRWYWx1ZTtcclxuXHJcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcmJykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XHJcblxyXG5cdFx0XHR2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogVW5kZWZpbmVkIHRlbXBsYXRlIHBhcmFtZXRlciBcXCcnICsga2V5ICsgJ1xcJycpO1xyXG5cclxuXHRcdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCBrZXkgKyAnPicgKyB2YWx1ZV07XHJcblx0XHR9XHJcblxyXG5cdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwgJycgKyBwcm9jZXNzZWRWYWx1ZV07XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGFkZEFuZENvbmRpdGlvbiAocXVlcnksIGNvbmRpdGlvbikge1xyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcclxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl19O1xyXG5cclxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXHJcblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xyXG5cdH1cclxuXHJcblx0YWRkT3JDb25kaXRpb24gKHF1ZXJ5LCBjb25kaXRpb24pIHtcclxuXHRcdGlmIChxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcclxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcclxuXHJcblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxyXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcclxuXHR9XHJcblxyXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnksIHBhcmVudCkge1xyXG5cdFx0bGV0IGxpbmtlZFRvUXVlcnk7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xyXG5cclxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xyXG5cclxuXHRcdHJldHVybiBxdWVyeSA9PT0gbnVsbCA/IGxpbmtlZFRvUXVlcnkgOiB0aGlzLmFkZEFuZENvbmRpdGlvbihxdWVyeSwgbGlua2VkVG9RdWVyeSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVOb3RJbiAoaWRBcnJheSkge1xyXG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xyXG5cdHByaXZhdGUgY29sdW1ucyA9IHt9O1xyXG5cdHByaXZhdGUgY29sdW1uSW5mb0lkTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChjb2x1bW5JbmZvKSB7XHJcblx0XHRpZiAodGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0pXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtbkluZm8uaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblV0aWxcclxuXHRcdFx0Lm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSwgY29sdW1uSW5mby5yZXF1ZXN0KVxyXG5cdFx0XHQubWVyZ2VkO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uSW5mb0lkTWFwW2NvbHVtbkluZm8uaWRdID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGdldCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbGxlY3Rpb25IYW5kbGVyLCBJdGVtSGFuZGxlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q29sdW1uU2V0RmFjdG9yeSxcclxuXHRJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIEZpZWxkTWFwLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0b25NZXNzYWdlUmVjZWl2ZWQgKG1lc3NhZ2U6IGFueSk6IGFueSB7XHJcblx0XHRzd2l0Y2ggKG1lc3NhZ2UuYm9keS5ldmVudFR5cGUpIHtcclxuXHRcdFx0Y2FzZSAndXBkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2NyZWF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdkZWxldGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnbGlua1RvJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVMaW5rTW92ZSgvKiBtZXNzYWdlICovKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdE1lc3NhZ2VWYWx1ZXMgKHZhbHVlcywgY29sdW1ucyk6IEZpZWxkTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcclxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uc1tjb2x1bW5JZF0udHlwZSwgdmFsdWVzW2NvbHVtbklkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1UeXBlLCBpdGVtcywgY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1JZDogbnVtYmVyXTogQ29sbGVjdGlvbk1hdGNoUmVzdWx0fSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1tpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtLnBhcmVudCAhPT0gbnVsbCA/IGl0ZW0ucGFyZW50IDoge307XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbUlkXSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUZpdHRpbmdJdGVtKFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHRoaXMuZm9ybWF0TWVzc2FnZVZhbHVlcyhpdGVtLnZhbHVlcywgY29sdW1ucyksXHJcblx0XHRcdFx0cGFyZW50XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnlDb2xsZWN0aW9uSWQgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNbc3RhdHVzXSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcclxuXHJcblx0XHRcdFx0XHRpZiAocmVzdWx0W2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF0gPSB7XHJcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRtYXliZTogW11cclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXVtzdGF0dXNdLnB1c2goXHJcblx0XHRcdFx0XHRcdHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSA6IGl0ZW1JZFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdENvbHVtbnMgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zLmZpdHRpbmc7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9uIG9mIGZpdHRpbmdDb2xsZWN0aW9ucylcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XHJcblx0fVxyXG5cclxuXHRkZWZlckVudHJ5IChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xyXG5cclxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVyKGZhbHNlKTtcclxuXHJcblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZS50aGVuKFxyXG5cdFx0XHR0aGlzLmRlZmVyRW50cnkuYmluZCh0aGlzKSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc01lc3NhZ2UgKGJvZHkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYm9keS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbVR5cGUsIGJvZHkuaXRlbXNbaXRlbVR5cGVdLCBib2R5LmNvbHVtbnNbaXRlbVR5cGVdKTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkU3RyaW5nIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkU3RyaW5nKTtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gK2l0ZW1JZFN0cmluZztcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcclxuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbaXRlbUlkXS5maXR0aW5nLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoXHJcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogcmVxdWVzdElkc30sIHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlIChib2R5KSB7XHJcblx0XHRjb25zdCBpdGVtcyA9IGJvZHkuaXRlbXMuRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZTtcclxuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25JZCA9IGl0ZW1zW2l0ZW1JZF0ucGFyZW50Lml0ZW1JZDtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcclxuXHJcblx0XHRcdGlmIChmdW5jdGlvbkVudHJ5ID09PSB1bmRlZmluZWQgfHwgZnVuY3Rpb25FbnRyeS5jb2x1bW5zLnJlc3BvbnNlLkZ1bmN0aWUubmV3Y2hhbmdlcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGZ1bmN0aW9uRW50cnkpKTtcclxuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeSgnRnVuY3RpZScsIHtpZDogcmVxdWVzdElkc30sIHtGdW5jdGllOiBbJ25ld2NoYW5nZXMnXX0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChyZXNwb25zZVZhbHVlID09PSBwcmV2aW91cy5uZXdjaGFuZ2VzKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHRcdC5zZXRJbml0aWFsKHtuZXdjaGFuZ2VzOiByZXNwb25zZVZhbHVlfSwgdHJ1ZSlcclxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcclxuXHRcdFx0XHRcdFx0LnJlc29sdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVSZXNwb25zZSAoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXF1ZXN0SWRzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRcdGNvbnN0IGlzTmV3ID0gaXRlbUVudHJ5LmluaXRpYWwgPT09IHVuZGVmaW5lZDtcclxuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XHJcblxyXG5cdFx0XHRcdGlmIChpc05ldylcclxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XHJcblxyXG5cdFx0XHRpZiAoaXNOZXcpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcclxuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChmaWVsZHMsIGRlcml2ZWQsIGV4cGFuc2lvblJlc3VsdCk7XHJcblxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0LnNldERlcml2ZWQoZGVyaXZlZClcclxuXHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCBmYWxzZSlcclxuXHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXHJcblx0XHRcdFx0XHQucmVzb2x2ZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2UpIHtcclxuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XHJcblxyXG5cdFx0aWYgKGJvZHkuaXRlbVR5cGUgPT09ICdGdW5jdGlvbkNoYW5nZXNSZXNvbHZlJylcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUoYm9keSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UoYm9keSkudGhlbihcclxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVVwZGF0ZSAobWVzc2FnZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UobWVzc2FnZS5ib2R5KS50aGVuKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZURlbGV0ZSAobWVzc2FnZSkge1xyXG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBib2R5Lml0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Q29udGFpbmluZ0l0ZW0oYm9keS5pdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XHJcblxyXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9IHtjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCBpdGVtczogW119O1xyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0bWFwRW50cnkuY29sbGVjdGlvbi5yZW1vdmVJdGVtcyhtYXBFbnRyeS5pdGVtcywgbnVsbCwgdHJ1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETyFcclxuXHRoYW5kbGVMaW5rTW92ZSAoKSB7fVxyXG5cclxuLypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XHJcblx0XHRwcm9jZXNzTWVzc2FnZShcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0Ly8gZml0cyBpbiB0aGlzIGNvbGxlY3Rpb24sIHRvZG86IGdldCB0aGUgb2xkIGNvbGxlY3Rpb24gaXQgYmVsb25nZWQgdG9cclxuXHRcdFx0XHRjb2xsZWN0aW9uLm1vdmVJdGVtcyhpdGVtRW50cmllcywgbnVsbCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdC8vIG1heWJlIGZpdHNcclxuXHRcdFx0XHQvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXHJcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoYW5ndWxhci5pZGVudGl0eSwgZmFsc2UsIGZhbHNlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGlkcykge1xyXG5cdFx0XHRcdC8vIG5vdCBmaXR0aW5nIGluIHRoaXMgY29sbGVjdGlvbiwgcmVtb3ZlIGl0ID9cclxuXHRcdFx0XHRjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGlkcywgbnVsbCwgbWVzc2FnZSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG4qL1xyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpRm9ybWF0dGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0JhdGNoU3RhdHVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXQnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1BZG1pbmlzdHJhdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVxdWVzdFNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0tleVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2tTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1V0aWwnO1xyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSkge1xyXG5cdFx0cmV0dXJuIG5ldyBBcGlSZXNwb25zZVByb2Nlc3Nvcih0aGlzLmFwaUZvcm1hdHRlciwgcmVzcG9uc2UpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXRjaFN0YXR1cyB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1c0ZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtSWQsIGdldFByb21pc2U6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUHJvbWlzZTxJdGVtRW50cnk+KTogQmF0Y2hTdGF0dXMge1xyXG5cdFx0cmV0dXJuIG5ldyBCYXRjaFN0YXR1cyhcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0Z2V0SXRlbUlkLFxyXG5cdFx0XHRnZXRQcm9taXNlXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10pOiBDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzQ29tcGlsYXRpb24oXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0c2luZ2xlSXRlbXMsXHJcblx0XHRcdGNvbGxlY3Rpb25zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0SXRlbUhhbmRsZXJcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCk6IENoYW5nZXNQcm9jZXNzb3Ige1xyXG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzUHJvY2Vzc29yKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2VcclxuXHRcdCk7XHJcblx0fVxyXG5cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCkge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXHJcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5U2VydmljZSwgSXRlbUVudHJ5U2VydmljZSwgSXRlbVJlcXVlc3RTZXJ2aWNlLCBLZXlTZXJ2aWNlLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4uL21vZGVscy8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucyk6IENvbGxlY3Rpb25FbnRyeSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeShcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uTWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbikge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uTWF0Y2hlcihcclxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGVzLFxyXG5cdFx0XHR1cGRhdGVJbml0aWFsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRWRpdFJlc291cmNlLCBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVkaXRDb2xsZWN0aW9uKVxyXG5cdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UoXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25WaWV3UmVzb3VyY2UodGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogYW55IHwgYm9vbGVhbiwgcmVzcG9uc2VDb2x1bW5zOiBhbnkpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uRXhwYW5zaW9uKFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mb0ZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yICgpIHt9XHJcblxyXG5cdGNvbnN0cnVjdCAoYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcGFyZW50OiBDb2x1bW5JbmZvKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbHVtbkluZm8oYXBpQ29sdW1uLCBwYXJlbnQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtblNldEZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcclxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXHJcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxyXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcclxuXHRcdGVuYWJsZUNhY2hpbmc/LFxyXG5cdFx0aW5jbHVkZUlkQ29sdW1uP1xyXG5cdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnJlc29sdmUocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nLCBpbmNsdWRlSWRDb2x1bW4pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlUmVxdWVzdCwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGNvbXBpbGF0aW9uLCBjb2xsZWN0aW9uRW50cmllcywgcGFyYW1ldGVyTWFwLCBicmVha3VwQnlQYXJlbnQgPSBmYWxzZSkge1xyXG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHRjb21waWxhdGlvbixcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXHJcblx0XHRcdHBhcmFtZXRlck1hcCxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XHJcblx0XHRyZXR1cm4gbmV3IEl0ZW1DYWNoZSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtblNldFN0dWIpIHtcclxuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KFxyXG5cdFx0XHR0aGlzLnByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuYXV0aEludGVyZmFjZSxcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHRjb2x1bW5TZXRTdHViXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0TG9jYWxMaW5rZWQgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0bG9jYWxJdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXHJcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcclxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgY29sdW1uU2V0KTtcclxuXHJcblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucHJvY2Vzc0xvY2FsKGluaXRpYWwsIHt9LCB7fSwgY29udmVyc2lvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RMb2NhbCAoXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHRlbXBsYXRlOiBhbnksXHJcblx0XHRtb2RpZmllZDogRmllbGRNYXAsXHJcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbCxcclxuXHRcdGNvbnZlcnNpb25NYXA/LFxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb252ZXJzaW9uTWFwID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXHJcblx0XHRcdHRlbXBsYXRlLmNvbHVtbnMsXHJcblx0XHQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5wcm9jZXNzTG9jYWwodGVtcGxhdGUuZmllbGRzLCBtb2RpZmllZCwgZGVyaXZlZCwgY29udmVyc2lvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3REZWZlcnJlZCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhblxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnlTdHViID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeVN0dWIuZGVmZXIoZGVmZXJSZXF1ZXN0KTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5U3R1YjtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXHJcblx0XHRjb2x1bW5JbmZvOiBDb2x1bW5TZXRcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0Y29sdW1uSW5mby5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXHJcblx0XHRcdGNvbHVtbkluZm8sXHJcblx0XHQpLnByb2Nlc3MoXHJcblx0XHRcdGluaXRpYWwsIC8vIGNhbiBhbHNvIGJlIGEgdGVtcGxhdGVcclxuXHRcdFx0ZGVyaXZlZCxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgSXRlbVJlc291cmNlU2VydmljZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEVkaXRSZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zKSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRpZiAob3B0aW9ucy5lZGl0KSB7XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBFZGl0UmVzb3VyY2UoXHJcblx0XHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlciwgdGhpcy5sb2NrU2VydmljZSwgdGhpcy5jaGFuZ2VzUHJvY2Vzc29yLCB0aGlzLmVycm9ySGFuZGxlciwgdGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSwgb3B0aW9uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBWaWV3UmVzb3VyY2UoXHJcblx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMpOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lZGl0KSB7XHJcblx0XHRcdHJldHVybiBuZXcgRWRpdFJlc291cmNlKFxyXG5cdFx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdFx0aXRlbUVudHJ5LCBvcHRpb25zXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFZpZXdSZXNvdXJjZShcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0TG9jYWxDYWNoZSxcclxuXHRMb2NrU2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdEl0ZW1SZXNvdXJjZUZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpIHtcclxuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0IChyb290SXRlbTogSXRlbUVudHJ5LCBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUpIHtcclxuXHRcdHJldHVybiBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uKHJvb3RJdGVtLCBzaW5nbGVJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgUXVlcnlNYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXJcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiBRdWVyeU1hdGNoZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBRdWVyeU1hdGNoZXIoXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0ZmllbGRzLFxyXG5cdFx0XHRwYXJlbnRcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXJGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHF1ZXJ5LCBwYXJhbWV0ZXJzPyk6IFF1ZXJ5UGFyc2VyIHtcclxuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpIHtcclxuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXNGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdEZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5JztcclxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRBcGlSZXF1ZXN0U2VydmljZSxcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdENvbHVtbkNhY2hlLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5VdGlsLFxuXHRJdGVtQWRtaW5pc3RyYXRvcixcblx0SXRlbUVudHJ5U2VydmljZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0SXRlbVJlc291cmNlU2VydmljZSxcblx0S2V5U2VydmljZSxcblx0TG9ja1NlcnZpY2UsXG5cdFF1ZXJ5U2VydmljZSxcblx0U29ja2V0TWVzc2FnZUhhbmRsZXJcbn0gZnJvbSAnLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSxcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5JbmZvRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1FbnRyeUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdExvY2FsQ2FjaGVGYWN0b3J5LFxuXHRNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRRdWVyeVBhcnNlckZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gJy4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSbUNvcmUge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGtleVNlcnZpY2U6IEtleVNlcnZpY2U7XG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xuXHRjb2x1bW5VdGlsOiBDb2x1bW5VdGlsO1xuXG5cdGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5O1xuXG5cdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2U7XG5cdGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2U7XG5cblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xuXHRpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZTtcblx0Y29sdW1uQ2FjaGU6IENvbHVtbkNhY2hlO1xuXHRjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyO1xuXG5cdGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5O1xuXG5cdGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcjtcblx0Y29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyO1xuXHRsb2NrU2VydmljZTogTG9ja1NlcnZpY2U7XG5cdGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk7XG5cblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcblx0aXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeTtcblx0cmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk7XG5cdGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3Rvcnk7XG5cdGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeTtcblx0Y3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5O1xuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XG5cdG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XG5cdHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5O1xuXHRiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeTtcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xuXG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblxuXHQvKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGgqL1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS4xLjMnO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5rZXlTZXJ2aWNlID0gbmV3IEtleVNlcnZpY2UoKTtcblx0XHR0aGlzLnF1ZXJ5U2VydmljZSA9IG5ldyBRdWVyeVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xuXG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblxuXHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UgPSBuZXcgQXBpUmVxdWVzdFNlcnZpY2UoZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZSwgdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UodGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UgPSBuZXcgSXRlbVJlc291cmNlU2VydmljZSgpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5ID0gbmV3IEl0ZW1DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSA9IG5ldyBCYXRjaFN0YXR1c0ZhY3RvcnkocHJvbWlzZUludGVyZmFjZSk7XG5cblx0XHR0aGlzLmNvbHVtbkNhY2hlID0gbmV3IENvbHVtbkNhY2hlKHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5IYW5kbGVyID0gbmV3IENvbHVtbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSA9IG5ldyBDb2x1bW5JbmZvRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcblx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeShcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIgPSBuZXcgSXRlbUhhbmRsZXIodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UgPSBuZXcgSXRlbVJlcXVlc3RTZXJ2aWNlKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IG5ldyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlKHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLnF1ZXJ5U2VydmljZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkgPSBuZXcgQ3JlYXRlUmVxdWVzdEZhY3RvcnkoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSh0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkpO1xuXHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgPSBuZXcgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkoKTtcblxuXHRcdHRoaXMuaXRlbUFkbWluaXN0cmF0b3IgPSBuZXcgSXRlbUFkbWluaXN0cmF0b3IoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMubG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0XHRsb2NhbENhY2hlTWFuYWdlcixcblx0XHRcdHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2Vcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wICgpIHtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5ICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL21haW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==
6992
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7OztBQ2xGQSxnRDs7Ozs7Ozs7Ozs7OztBQ0FNLHNCQUF3QixNQUFNLEVBQUUsUUFBUTtJQUM3QyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFFakIsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRWxCLEdBQUcsQ0FBQyxDQUFDLElBQU0sR0FB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QkFBaUIsRUFDdEIsSUFBSSxDQUFDLHdCQUF3QixFQUM3QixJQUFJLENBQUMseUJBQXlCLEVBQzlCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQywrQkFBK0IsRUFDcEMsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxZQUFZLENBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFDcEUsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsc0JBQXNCLEVBQzNCLElBQUksQ0FBQyw2QkFBNkIsRUFDbEMsSUFBSSxDQUFDLFlBQVksRUFDakIscUJBQXFCLENBQ3JCLENBQUM7SUFDSCxDQUFDO0lBQ0YsYUFBQztBQUFELENBQUM7O0FBRUs7QUFDTixDQUFDO0FBRUssa0JBQW9CLEtBQUs7SUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwU3NCO0FBQ0s7QUFDSDtBQUVDO0FBQ0UiLCJmaWxlIjoicm0tY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJtb21lbnRcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUm1Db3JlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJtb21lbnRcIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXzsiLCJleHBvcnQgZnVuY3Rpb24gc2hhbGxvd01lcmdlIChvYmplY3QsIGRlZmF1bHRzKSB7XHJcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0cmV0dXJuIGRlZmF1bHRzO1xyXG5cclxuXHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdHMpIHtcclxuXHRcdHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV0gPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdGRlZmF1bHRzW2tleV0gOiBvYmplY3Rba2V5XTtcclxuXHR9XHJcblxyXG5cdHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYXNQcm9wZXJ0aWVzIChvYmplY3QpIHtcclxuXHQvLyBAdHMtaWdub3JlXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0UHJvcGVydHkgKG9iamVjdCkge1xyXG5cdGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0JylcclxuXHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXHJcblx0XHRyZXR1cm4ga2V5O1xyXG5cclxuXHRyZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluQXJyYXkgKG5lZWRsZSwgaGF5c3RhY2spIHtcclxuXHRmb3IgKGNvbnN0IGhheSBvZiBoYXlzdGFjaykge1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdGlmIChuZWVkbGUgPT0gaGF5KVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFycmF5PFQ+IChzb3VyY2U6IFRbXSwgY2FsbGJhY2s6IChUKSA9PiBib29sZWFuKSB7XHJcblx0Y29uc3QgZmlsdGVyZWQ6IFRbXSA9IFtdO1xyXG5cclxuXHRmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2UpIHtcclxuXHRcdGlmIChjYWxsYmFjayhzcmMpKVxyXG5cdFx0XHRmaWx0ZXJlZC5wdXNoKHNyYyk7XHJcblx0fVxyXG5cclxuXHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSBzb3VyY2UubGVuZ3RoKVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRlbXB0eUFycmF5KHNvdXJjZSk7XHJcblxyXG5cdGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcmVkKVxyXG5cdFx0c291cmNlLnB1c2goZmlsdGVyKTtcclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUFycmF5IChhcnJheSkge1xyXG5cdGFycmF5LnNwbGljZSgwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhFeGlzdHMgKHNvdXJjZSwgcGF0aCkge1xyXG5cdGlmICh0eXBlb2Ygc291cmNlID09PSAndW5kZWZpbmVkJylcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcclxuXHRcdGlmICh0eXBlb2Ygc291cmNlW3BdID09PSAndW5kZWZpbmVkJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHNvdXJjZSA9IHNvdXJjZVtwXTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF0aCAob2JqZWN0LCBwYXRoLCBkZWZhdWx0cykge1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xyXG5cclxuXHRcdGlmIChvYmplY3RbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcclxuXHJcblx0XHRvYmplY3QgPSBvYmplY3RbdmFsdWVdO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGggKG9iamVjdCwgcGF0aCwgY3JlYXRlID0gZmFsc2UpIHtcclxuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xyXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3BdOyAvLyB3b24ndCBhbHRlciB0aGUgY2FsbGVyJ3MgdmFyXHJcblxyXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqZWN0O1xyXG59XHJcblxyXG4vLyBUYWtlbiBmcm9tIEFuZ3VsYXJKUywgYWRkZWQgY29tbWVudHMgdG8gaWdub3JlIFR5cGVTY3JpcHQgZXJyb3JzXHJcbmZ1bmN0aW9uIGJhc2VFeHRlbmQgKGRzdCwgb2JqcywgZGVlcCkge1xyXG5cdGZvciAobGV0IGkgPSAwLCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG5cdFx0Y29uc3Qgb2JqID0gb2Jqc1tpXTtcclxuXHJcblx0XHRpZiAoIWlzT2JqZWN0KG9iaikgJiYgIWlzRnVuY3Rpb24ob2JqKSlcclxuXHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XHJcblxyXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbal07XHJcblx0XHRcdGNvbnN0IHNyYyA9IG9ialtrZXldO1xyXG5cclxuXHRcdFx0aWYgKGRlZXAgJiYgaXNPYmplY3Qoc3JjKSkge1xyXG5cdFx0XHRcdGlmIChpc0RhdGUoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgRGF0ZShzcmMudmFsdWVPZigpKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IFJlZ0V4cChzcmMpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoc3JjLm5vZGVOYW1lKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChpc0VsZW1lbnQoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmUoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKCFpc09iamVjdChkc3Rba2V5XSkpXHJcblx0XHRcdFx0XHRcdGRzdFtrZXldID0gaXNBcnJheShzcmMpID8gW10gOiB7fTtcclxuXHJcblx0XHRcdFx0XHRiYXNlRXh0ZW5kKGRzdFtrZXldLCBbc3JjXSwgdHJ1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGRzdFtrZXldID0gc3JjO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZHN0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kIChkc3QsIC4uLmFyZ3MpIHtcclxuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIGZhbHNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlIChkc3QsIC4uLmFyZ3MpIHtcclxuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIHRydWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XHJcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XHJcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rT2JqZWN0ICh2YWx1ZSkge1xyXG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSAodmFsdWUpIHtcclxuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24gKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwICh2YWx1ZSkge1xyXG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50IChub2RlKSB7XHJcblx0cmV0dXJuICEhKG5vZGUgJiZcclxuXHRcdChcclxuXHRcdFx0bm9kZS5ub2RlTmFtZSAgLy8gV2UgYXJlIGEgZGlyZWN0IGVsZW1lbnQuXHJcblx0XHRcdHx8IChub2RlLnByb3AgJiYgbm9kZS5hdHRyICYmIG5vZGUuZmluZClcclxuXHRcdClcclxuXHQpOyAgLy8gV2UgaGF2ZSBhbiBvbiBhbmQgZmluZCBtZXRob2QgcGFydCBvZiBqUXVlcnkgQVBJLlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNXaW5kb3cgKG9iaikge1xyXG5cdHJldHVybiBvYmogJiYgb2JqLndpbmRvdyA9PT0gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzIChvMSwgbzIpIHtcclxuXHRpZiAobzEgPT09IG8yKVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbClcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxyXG5cdGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKVxyXG5cdFx0cmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXHJcblxyXG5cdGNvbnN0IHQxID0gdHlwZW9mIG8xO1xyXG5cdGNvbnN0IHQyID0gdHlwZW9mIG8yO1xyXG5cclxuXHRsZXQgbGVuZ3RoO1xyXG5cdGxldCBrZXk7XHJcblx0bGV0IGtleVNldDtcclxuXHJcblx0aWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcclxuXHRcdGlmIChpc0FycmF5KG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzQXJyYXkobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGxlbmd0aCA9IG8xLmxlbmd0aDtcclxuXHJcblx0XHRcdGlmIChvMS5sZW5ndGggPT09IG8yLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xyXG5cdFx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHtcclxuXHRcdFx0aWYgKCFpc0RhdGUobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBzaW1wbGVDb21wYXJlKG8xLmdldFRpbWUoKSwgbzIuZ2V0VGltZSgpKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAobzEpKSB7XHJcblx0XHRcdGlmICghaXNSZWdFeHAobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBvMS50b1N0cmluZygpID09PSBvMi50b1N0cmluZygpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGlzV2luZG93KG8xKSB8fCBpc1dpbmRvdyhvMikgfHwgaXNBcnJheShvMikgfHwgaXNEYXRlKG8yKSB8fCBpc1JlZ0V4cChvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0a2V5U2V0ID0gY3JlYXRlTWFwKCk7XHJcblx0XHRcdGZvciAoa2V5IGluIG8xKSB7XHJcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24obzFba2V5XSkpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRcdGtleVNldFtrZXldID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChrZXkgaW4gbzIpIHtcclxuXHRcdFx0XHRpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiBpc0RlZmluZWQobzJba2V5XSkgJiYgIWlzRnVuY3Rpb24obzJba2V5XSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVNYXAgKCkge1xyXG5cdHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG59XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXHJcbmZ1bmN0aW9uIHNpbXBsZUNvbXBhcmUgKGEsIGIpIHtcclxuXHRyZXR1cm4gYSA9PT0gYiB8fCAoYSAhPT0gYSAmJiBiICE9PSBiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNWYWxpZE9iamVjdE1heERlcHRoIChtYXhEZXB0aCkge1xyXG5cdHJldHVybiBpc051bWJlcihtYXhEZXB0aCkgJiYgbWF4RGVwdGggPiAwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weSAoc291cmNlLCBkZXN0aW5hdGlvbj8sIG1heERlcHRoPykge1xyXG5cdGNvbnN0IHN0YWNrU291cmNlID0gW107XHJcblx0Y29uc3Qgc3RhY2tEZXN0ID0gW107XHJcblxyXG5cdG1heERlcHRoID0gaXNWYWxpZE9iamVjdE1heERlcHRoKG1heERlcHRoKSA/IG1heERlcHRoIDogTmFOO1xyXG5cclxuXHRpZiAoZGVzdGluYXRpb24pIHtcclxuXHRcdGlmIChzb3VyY2UgPT09IGRlc3RpbmF0aW9uKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRW1wdHkgdGhlIGRlc3RpbmF0aW9uIG9iamVjdFxyXG5cdFx0aWYgKGlzQXJyYXkoZGVzdGluYXRpb24pKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBkZXN0aW5hdGlvbilcclxuXHRcdFx0XHRkZWxldGUgZGVzdGluYXRpb25ba2V5XTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja1NvdXJjZS5wdXNoKHNvdXJjZSk7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja0Rlc3QucHVzaChkZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0cmV0dXJuIGNvcHlSZWN1cnNlKHNvdXJjZSwgZGVzdGluYXRpb24sIG1heERlcHRoKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBjb3B5RWxlbWVudChzb3VyY2UsIG1heERlcHRoKTtcclxuXHJcblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XHJcblx0XHRfbWF4RGVwdGgtLTtcclxuXHJcblx0XHRpZiAoX21heERlcHRoIDwgMClcclxuXHRcdFx0cmV0dXJuICcuLi4nO1xyXG5cclxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwLCBpaSA9IF9zb3VyY2UubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG5cdFx0XHRcdF9kZXN0aW5hdGlvbi5wdXNoKGNvcHlFbGVtZW50KF9zb3VyY2VbaV0sIF9tYXhEZXB0aCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGlzQmxhbmtPYmplY3QoX3NvdXJjZSkpIHtcclxuXHRcdFx0Ly8gY3JlYXRlTWFwKCkgZmFzdCBwYXRoIC0tLSBTYWZlIHRvIGF2b2lkIGhhc093blByb3BlcnR5IGNoZWNrIGJlY2F1c2UgcHJvdG90eXBlIGNoYWluIGlzIGVtcHR5XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdC8vIFNsb3cgcGF0aCwgd2hpY2ggbXVzdCByZWx5IG9uIGhhc093blByb3BlcnR5XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIFNsb3dlc3QgcGF0aCAtLS0gaGFzT3duUHJvcGVydHkgY2FuJ3QgYmUgY2FsbGVkIGFzIGEgbWV0aG9kXHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9zb3VyY2UsIGtleSkpIHtcclxuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBfZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjb3B5RWxlbWVudCAoX3NvdXJjZSwgX21heERlcHRoID0gNSkge1xyXG5cdFx0Ly8gU2ltcGxlIHZhbHVlc1xyXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcclxuXHRcdFx0cmV0dXJuIF9zb3VyY2U7XHJcblxyXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRjb25zdCBpbmRleCA9IHN0YWNrU291cmNlLmluZGV4T2YoX3NvdXJjZSk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0cmV0dXJuIHN0YWNrRGVzdFtpbmRleF07XHJcblxyXG5cdFx0aWYgKGlzV2luZG93KF9zb3VyY2UpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBNYWtpbmcgY29waWVzIG9mIFdpbmRvdyBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgbmVlZHNSZWN1cnNlID0gZmFsc2U7XHJcblx0XHRsZXQgX2Rlc3RpbmF0aW9uID0gY29weVR5cGUoX3NvdXJjZSk7XHJcblxyXG5cdFx0aWYgKF9kZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdF9kZXN0aW5hdGlvbiA9IGlzQXJyYXkoX3NvdXJjZSkgPyBbXSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9zb3VyY2UpKTtcclxuXHRcdFx0bmVlZHNSZWN1cnNlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tEZXN0LnB1c2goX2Rlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXHJcblx0XHRcdD8gY29weVJlY3Vyc2UoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpXHJcblx0XHRcdDogX2Rlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29weVR5cGUgKF9zb3VyY2UpIHtcclxuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDhBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDE2QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQzMkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDE2QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihjb3B5RWxlbWVudChfc291cmNlLmJ1ZmZlciksIF9zb3VyY2UuYnl0ZU9mZnNldCwgX3NvdXJjZS5sZW5ndGgpO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTBcclxuXHRcdFx0XHRpZiAoIV9zb3VyY2Uuc2xpY2UpIHtcclxuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxyXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cclxuXHRcdFx0XHRcdGNvbnN0IGNvcGllZCA9IG5ldyBBcnJheUJ1ZmZlcihfc291cmNlLmJ5dGVMZW5ndGgpO1xyXG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xyXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGNvcGllZDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIF9zb3VyY2Uuc2xpY2UoMCk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBOdW1iZXJdJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBTdHJpbmddJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKF9zb3VyY2UudmFsdWVPZigpKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XHJcblx0XHRcdFx0Y29uc3QgcmUgPSBuZXcgUmVnRXhwKF9zb3VyY2UuX3NvdXJjZSwgX3NvdXJjZS50b1N0cmluZygpLm1hdGNoKC9bXi9dKiQvKVswXSk7XHJcblxyXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmU7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJsb2JdJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoW19zb3VyY2VdLCB7dHlwZTogX3NvdXJjZS50eXBlfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzRnVuY3Rpb24oX3NvdXJjZS5jbG9uZU5vZGUpKSB7XHJcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBjb3B5LCBlcXVhbHMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaUZvcm1hdHRlciB7XHJcblx0TU9NRU5UX0lOVkFMSUQgPSAnSW52YWxpZCBkYXRlJztcclxuXHRTRVJWRVJfREFURVRJTUVfRk9STUFUID0gJ1lZWVktTU0tRERbVF1ISDptbTpzc1onO1xyXG5cdFNFUlZFUl9USU1FX0ZPUk1BVCA9ICdISDptbTpzcyc7XHJcblx0U0VSVkVSX0RBVEVfRk9STUFUID0gJ1lZWVktTU0tREQnO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2UgKGZpZWxkcywgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRmaWVsZHNbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbi5wYXRoXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRleHBhbmRSZXNwb25zZSAoY3VycmVudCwgZXhwYW5kZWQsIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y3VycmVudFtjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBleHBhbmRlZFtjb2x1bW4ucGF0aF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdCAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmZvcm1hdFJlcXVlc3RWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIG1vZGlmaWVkW2NvbHVtbklkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGhhc0NoYW5nZXMgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBvYmplY3RbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKSB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBpbml0aWFsW2NvbHVtbklkXSxcclxuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IG1vZGlmaWVkW2NvbHVtbklkXSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uOiBjb2x1bW4uYXBpQ29sdW1uXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjb3B5RmllbGRzIChzb3VyY2UsIGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gdGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIHNvdXJjZVtjb2x1bW5QYXRoXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0c2hhbGxvd0NvcHlGaWVsZHMgKHNoYWxsb3dTb3VyY2UsIGRlZXBTb3VyY2UsIGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gc2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSAhPT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRzaGFsbG93U291cmNlW2NvbHVtblBhdGhdIDpcclxuXHRcdFx0XHR0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZGVlcFNvdXJjZVtjb2x1bW5QYXRoXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0c2V0RGVmYXVsdFZhbHVlcyAoZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uLmlkXSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZUZpZWxkcyAoY29sdW1uVHlwZSwgZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBzZWNvbmQgPT09IHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAoc2Vjb25kID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZU1vbWVudE9iamVjdHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRHVyYXRpb25zKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdpZCc6IC8vIGlkIHR5cGVzXHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PSBzZWNvbmQ7IC8vIHVzZSBub24tc3RyaWN0IGNvbXBhcmlzb25cclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcclxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZsb2F0cyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xyXG5cdFx0XHRjYXNlICdib29sJzogLy8gYm9vbGVhbiB0eXBlc1xyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOiAvLyBzdHJpbmcgdHlwZXNcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09PSBzZWNvbmQ7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGVxdWFscyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbXBhcmVGbG9hdHMgKGEsIGIpIHtcclxuXHRcdGNvbnN0IGFic0EgPSBNYXRoLmFicyhhKTtcclxuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcclxuXHRcdGNvbnN0IGRpZmYgPSBNYXRoLmFicyhhIC0gYik7XHJcblxyXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xyXG5cclxuXHRcdC8vIHNob3J0Y3V0LCBoYW5kbGVzIGluZmluaXRpZXNcclxuXHRcdGlmIChhID09PSBiKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBlbHNlIGlmIChhID09PSAwIHx8IGIgPT09IDAgfHwgZGlmZiA8IE51bWJlci5NSU5fVkFMVUUpIHtcclxuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XHJcblx0XHRcdC8vIHJlbGF0aXZlIGVycm9yIGlzIGxlc3MgbWVhbmluZ2Z1bCBoZXJlXHJcblx0XHRcdHJldHVybiBkaWZmIDwgKEVQU0lMT04gKiBOdW1iZXIuTUlOX1ZBTFVFKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIHVzZSByZWxhdGl2ZSBlcnJvclxyXG5cdFx0XHRyZXR1cm4gZGlmZiAvIE1hdGgubWluKChhYnNBICsgYWJzQiksIE51bWJlci5NQVhfVkFMVUUpIDwgRVBTSUxPTjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRpZiAoIWZpcnN0LmlzVmFsaWQoKSlcclxuXHRcdFx0cmV0dXJuICFzZWNvbmQuaXNWYWxpZCgpO1xyXG5cclxuXHRcdGlmICghc2Vjb25kLmlzVmFsaWQoKSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBmaXJzdCBJUyB2YWxpZFxyXG5cclxuXHRcdHJldHVybiBmaXJzdC5pc1NhbWUoc2Vjb25kKTtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVEdXJhdGlvbnMgKGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdHJldHVybiBmaXJzdC5hc01pbGxpc2Vjb25kcygpID09PSBzZWNvbmQuYXNNaWxsaXNlY29uZHMoKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlVmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZURhdGUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VDb2xvcih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUR1cmF0aW9uKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3RWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGVUaW1lKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdENvbG9yKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG1vbWVudC5pbnZhbGlkKCkgOiBtb21lbnQodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VEdXJhdGlvbiAodmFsdWUpIHtcclxuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUgPT09IG51bGwgPyAwIDogdmFsdWUsICdzZWNvbmRzJyk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZUNvbG9yICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURVRJTUVfRk9STUFUKSA6IG51bGw7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RGF0ZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURV9GT1JNQVQpIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REdXJhdGlvbiAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5hc1NlY29uZHMoKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3RDb2xvciAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0RGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaW50JzpcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRjYXNlICdjaGlsZCc6XHJcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRjYXNlICdib29sJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRcdHJldHVybiAnMCc7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQuaW52YWxpZCgpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbigpO1xyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdHVybFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0aHRtbFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZGF0YVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNEZWZhdWx0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKSk7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRcdHJldHVybiBjb3B5KHZhbHVlKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDbG9uZUZ1bmN0aW9uIChjb2x1bW5UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb247XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEYXRlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmlkZW50aXR5O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2xvbmVEdXJhdGlvbiAoZHVyYXRpb24pIHtcclxuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oZHVyYXRpb24pO1xyXG5cdH1cclxuXHJcblx0Y2xvbmVEYXRlIChkYXRlKSB7XHJcblx0XHRyZXR1cm4gZGF0ZS5jbG9uZSgpO1xyXG5cdH1cclxuXHJcblx0aWRlbnRpdHkgKGlucHV0KSB7XHJcblx0XHRyZXR1cm4gaW5wdXQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVxdWVzdFNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0dGVtcGxhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcGFyYW1zOiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnRlbXBsYXRlKGl0ZW1UeXBlLCBwYXJhbXMpKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgdmFsdWVzOiBhbnksIHBhcmVudFR5cGU/OiBJdGVtVHlwZSwgcGFyZW50SWQ/OiBJdGVtSWQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShpdGVtVHlwZSwgaXRlbUlkLCB2YWx1ZXMsIHBhcmVudFR5cGUsIHBhcmVudElkKSk7XHJcblx0fVxyXG5cclxuXHRkZWxldGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkczogSXRlbUlkW10pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaXRlbUlkcykpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbXM6IG9iamVjdCwgY29sdW1uczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpKTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RTa2VsZXRvbiAocGFyYW1zOiBhbnksIHJlcXVlc3RDYW5jZWxlcj86IFByb21pc2U8YW55Pik6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcywgcmVxdWVzdENhbmNlbGVyKSk7XHJcblx0fVxyXG5cclxuXHRtb3ZlSXRlbXMgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtczogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XHJcblx0fVxyXG5cclxuXHRjb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IG9iamVjdCwgcGFyYW1zPzogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jb2x1bW5zKGl0ZW1UeXBlLCBjb2x1bW5zLCBwYXJhbXMpKTtcclxuXHR9XHJcblxyXG5cdHF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5OiBvYmplY3QsIGNvbHVtbnM6IG9iamVjdCwgbGltaXQ/OiBvYmplY3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSwgY29sdW1ucywgbGltaXQpKTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NSZXNwb25zZSAocmVxdWVzdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiByZXF1ZXN0LnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlKSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZU1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xyXG5cdGNvbHVtbnM6IEl0ZW1UeXBlTWFwO1xyXG5cdGl0ZW1zOiBJdGVtVHlwZU1hcDtcclxuXHRsaW5rczogSXRlbVR5cGVNYXA7XHJcblx0Y2FjaGVhYmxlOiBib29sZWFuO1xyXG5cdG1hcDogYW55O1xyXG5cclxuXHRjb2x1bW5JbmRleE1hcDogYW55ID0ge307XHJcblx0Y29sdW1uTWFwOiBhbnkgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcclxuXHQpIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IHJlc3BvbnNlLmNvbHVtbnM7XHJcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XHJcblx0XHR0aGlzLmxpbmtzID0gcmVzcG9uc2UubGlua3M7XHJcblx0XHR0aGlzLmNhY2hlYWJsZSA9IHJlc3BvbnNlLmNhY2hlYWJsZTtcclxuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xyXG5cclxuXHRcdHRoaXMuY3JlYXRlQ29sdW1uTWFwcygpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sdW1uTWFwcyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV0gPSB7fTtcclxuXHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdW2ldO1xyXG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGNvbHVtbjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSWQpIHtcclxuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YVt0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF1dO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hEZXJpdmVkT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcclxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoXHJcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXHJcblx0XHRcdFx0Y29sdW1uLFxyXG5cdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlLCBjb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRsZXQgY2hpbGRWYWx1ZTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdGNoaWxkVmFsdWUgPSBudWxsO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkQ29sdW1uLmFwaUNvbHVtbi50eXBlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjaGlsZFZhbHVlID0gdGhpcy5mZXRjaFZhbHVlKGNvbHVtbi5pdGVtVHlwZSwgdmFsdWUsIGNoaWxkQ29sdW1uLmlkKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IGNoaWxkVmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjaGlsZENvbHVtbi5pc0xlYWYpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhjaGlsZFZhbHVlLCBjaGlsZENvbHVtbiwgZGVzdGluYXRpb24pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3QgKGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rczogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdGlmIChpdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YTtcclxuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHJlc3VsdFt0aGlzLmNvbHVtbnNbaXRlbVR5cGVdW2ldLmlkXSA9IGRhdGFbaV07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluY2x1ZGVMaW5rcykge1xyXG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XHJcblx0XHRcdHJlc3VsdC5fX2xpbmtzID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxyXG5cdFx0XHRcdHJlc3VsdC5fX2xpbmtzW2xpbmtUeXBlXSA9XHJcblx0XHRcdFx0XHR0aGlzLmZldGNoT2JqZWN0QXJyYXkobGlua1R5cGUsIGluY2x1ZGVMaW5rcywgbGlua3NbbGlua1R5cGVdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3RBcnJheSAoaXRlbVR5cGUsIGluY2x1ZGVMaW5rcywgaWRBcnJheSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBbXTtcclxuXHJcblx0XHRpZiAoaWRBcnJheSA9PT0gbnVsbCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcykpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRpZEFycmF5ID0gdGhpcy5saW5rc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSlcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCwgaW5jbHVkZUxpbmtzLCByZXR1cm5LZXlzKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcclxuXHRcdGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtjb2x1bW5JbmRleF07XHJcblx0XHRcdGtleXMucHVzaChrZXkpO1xyXG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkLCBpbmNsdWRlTGlua3MpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXR1cm5LZXlzKVxyXG5cdFx0XHRyZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBrZXlzOiBrZXlzfTtcclxuXHRcdGVsc2VcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoRmllbGRNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRyZXN1bHRbaWRdID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbaW5kZXhdO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaENvbHVtbkFycmF5IChpdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBSZXNwb25zZUNvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBhcGlDb2x1bW4gb2YgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmVzdWx0LnB1c2goYXBpQ29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5PYmplY3QgKGl0ZW1UeXBlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXBbaXRlbVR5cGVdO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5zT2JqZWN0ICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVJlc291cmNlIChpdGVtVHlwZSwgaWQpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG9iamVjdDogdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWQpLFxyXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0aGFzSXRlbXMgKGl0ZW1UeXBlKSB7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIEVOVFJZX1NUQVRVUyB7XHJcblx0Q0FDSEVEID0gJ2NhY2hlZCcsXHJcblx0UFJPTUlTRUQgPSAncHJvbWlzZWQnLFxyXG5cdEVYUEFORCA9ICdleHBhbmQnLFxyXG5cdFBST01JU0VEX0VYUEFORCA9ICdwcm9taXNlZC1leHBhbmQnLFxyXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXHJcblx0TE9DQUwgPSAnbG9jYWwnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBBTExfUEVSTUlTU0lPTlMgPSAnNyc7XHJcblxyXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcclxuZXhwb3J0IGNvbnN0IFJFTkRFUl9BU19TRVBFUkFUT1IgPSAnOic7XHJcblxyXG5leHBvcnQgY29uc3QgTkVXX1BSRUZJWDogc3RyaW5nID0gJy0xJztcclxuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9QUkVGSVg6IHN0cmluZyA9ICctMic7XHJcblxyXG5leHBvcnQgY29uc3QgTkVXX0tFWVdPUkQ6IHN0cmluZyA9ICduZXctJztcclxuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9LRVlXT1JEOiBzdHJpbmcgPSAnZHVwLSc7XHJcbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlTdGF0dXMsIEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXMge1xyXG5cdGVudHJpZXM6IEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgZ2V0SXRlbUlkOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IEl0ZW1JZCxcclxuXHRcdHB1YmxpYyBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8SXRlbUVudHJ5PiAvLyB0b2RvOiBwcm9taXNlIHJldHVybiB0eXBlXHJcblx0KSB7XHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBFTlRSWV9TVEFUVVMpXHJcblx0XHRcdHRoaXMuZW50cmllc1tFTlRSWV9TVEFUVVNbc3RhdHVzXV0gPSBbXTtcclxuXHR9XHJcblxyXG5cdGFkZCAoZW50cnlTdGF0dXM6IEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4pOiB2b2lkIHtcclxuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW3N0YXR1c10gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10gPSBbXTtcclxuXHJcblx0XHR0aGlzLmVudHJpZXNbc3RhdHVzXS5wdXNoKGVudHJ5U3RhdHVzLmVudHJ5KTtcclxuXHR9XHJcblxyXG5cdGhhc0VudHJpZXMgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSk6IGJvb2xlYW4ge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcclxuXHRcdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0aGFzUmVxdWVzdHMgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdKTtcclxuXHR9XHJcblxyXG5cdGZvckVhY2hFbnRyeSAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xyXG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXHJcblx0XHRcdFx0Y2FsbGJhY2soc3RhdHVzRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPEl0ZW1FbnRyeT4+ID0gW107XHJcblxyXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuUFJPTUlTRUQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdLFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpO1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdElkcyAoKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRSwgRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF0sXHJcblx0XHRcdGVudHJ5ID0+IHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmdldEl0ZW1JZChlbnRyeSkpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRBcnJheSAoKTogSXRlbUVudHJ5W10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goc3RhdHVzRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbiB7XHJcblx0Y29tcGlsYXRpb24gPSB7XHJcblx0XHRjcmVhdGU6IHt9LFxyXG5cdFx0ZGVsZXRlOiB7fSxcclxuXHRcdHVwZGF0ZToge30sXHJcblx0XHRtb3ZlOiB7fVxyXG5cdH07XHJcblxyXG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblxyXG5cdHByaXZhdGUgbW92ZUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdHByaXZhdGUgZGVsZXRlTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sXHJcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W11cclxuXHQpIHtcclxuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblxyXG5cdFx0dGhpcy5wcm9jZXNzU2luZ2xlSXRlbXMoKTtcclxuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25FbnRyaWVzKTtcclxuXHRcdHRoaXMucG9zdFByb2Nlc3MoKTtcclxuXHR9XHJcblxyXG5cdGdldERlZmF1bHRQYXJlbnQgKCk6IEVudHJ5UGFyZW50IHtcclxuXHRcdHJldHVybiB7aXRlbVR5cGU6ICdWb2lkJywgaXRlbUlkOiAwfTtcclxuXHR9XHJcblxyXG5cdGFkZE1vdmVFbnRyeSAoaXRlbUVudHJ5KSB7XHJcblx0XHR0aGlzLm1vdmVBcnJheS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0fVxyXG5cclxuXHRhZGREZWxldGVFbnRyeSAoaXRlbUVudHJ5LCBwYXJlbnRJZCwgcGFyZW50VHlwZSkge1xyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5kZWxldGVNYXAsXHJcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRbe30sIHtwYXJlbnRJZDogcGFyZW50SWQsIGl0ZW06IGl0ZW1FbnRyeSwgcGFyZW50VHlwZTogcGFyZW50VHlwZX1dXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkVXBkYXRlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXHJcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRbe30sIGl0ZW1FbnRyeV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5KSB7XHJcblx0XHRsZXQgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcclxuXHJcblx0XHRjcmVhdGVQYXRoKFxyXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZSxcclxuXHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB7fSwge30sIGl0ZW1FbnRyeV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwb3N0UHJvY2VzcyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLm1vdmVBcnJheSkge1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0XHRjb25zdCBkZWxldGVFbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0XHRpZiAoZGVsZXRlRW50cnkgPT09IHVuZGVmaW5lZCB8fCBkZWxldGVFbnRyeVtpdGVtSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHQvLyBhc3N1bWUgdGhlIGl0ZW1FbnRyeSBoYXMgYSBwYXJlbnQgKG9yIHNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZylcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gPEVudHJ5UGFyZW50PiBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0Y29uc3QgZGVzdGluYXRpb24gPSBjcmVhdGVQYXRoKFxyXG5cdFx0XHRcdHRoaXMuY29tcGlsYXRpb24ubW92ZSxcclxuXHRcdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkXSxcclxuXHRcdFx0XHRbe30sIFtdXVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChkZWxldGVFbnRyeVtpdGVtSWRdKTtcclxuXHJcblx0XHRcdGRlbGV0ZSBkZWxldGVFbnRyeVtpdGVtSWRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5kZWxldGVNYXApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtVHlwZV1baXRlbUlkXS5pdGVtO1xyXG5cdFx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XHJcblxyXG5cdFx0XHRcdGlmIChkZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NTaW5nbGVJdGVtcyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLnNpbmdsZUl0ZW1zKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoaXRlbUVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAoaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcclxuXHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NDb2xsZWN0aW9ucyAoY29sbGVjdGlvbkVudHJpZXMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdC8vIGFkZCB0aGUgY29sbGVjdGlvbiBwYXJlbnQgaWQgdG8gdGhlIGRlbGV0ZSBlbnRyeSAoaW4gY2FzZSB0aGUgaXRlbSBoYXMgYmVlbiBtb3ZlZClcclxuXHRcdFx0bGV0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRcdHBhcmVudCA9IHRoaXMuZ2V0RGVmYXVsdFBhcmVudCgpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKCkpIHtcclxuXHRcdFx0XHRsZXQgYWRkZWRJdGVtcztcclxuXHRcdFx0XHRsZXQgcmVtb3ZlZEl0ZW1zO1xyXG5cclxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSkge1xyXG5cdFx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtcztcclxuXHRcdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldEFkZGVkSXRlbXMoKTtcclxuXHRcdFx0XHRcdHJlbW92ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRSZW1vdmVkSXRlbXMoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgYWRkZWRJdGVtIG9mIGFkZGVkSXRlbXMpIHtcclxuXHRcdFx0XHRcdGlmIChhZGRlZEl0ZW0uaXNMb2NhbCgpKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGFkZGVkSXRlbSk7XHJcblx0XHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHRcdHRoaXMuYWRkTW92ZUVudHJ5KGFkZGVkSXRlbSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtIG9mIHJlbW92ZWRJdGVtcylcclxuXHRcdFx0XHRcdHRoaXMuYWRkRGVsZXRlRW50cnkocmVtb3ZlZEl0ZW0sIHBhcmVudC5pdGVtSWQsIHBhcmVudC5pdGVtVHlwZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMoKSkge1xyXG5cdFx0XHRcdGNvbnN0IHVwZGF0ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbXMoKTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVkSXRlbSBvZiB1cGRhdGVkSXRlbXMpXHJcblx0XHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KHVwZGF0ZWRJdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb24sXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRDb2x1bW5JbmZvLFxyXG5cdEl0ZW1IYW5kbGVyXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBFbnRyeVBhcmVudCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCwgaGFzUHJvcGVydGllcywgaW5BcnJheSwgaXNGdW5jdGlvbiB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogd2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UgdGhlIGRvY3VtZW50IGNyZWF0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcclxuXHRnZXRJdGVtVHlwZVVwZGF0ZVByaW9yaXR5IChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWxiZWRyYWcnOlxyXG5cdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWwnOlxyXG5cdFx0XHRjYXNlICdNaW5mYWN0dXVyJzpcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gMjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XHJcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldE1hcFZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBtYXApIHtcclxuXHRcdGlmIChtYXAgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRleGVjdXRlIChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMsIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlLCBwYXJhbWV0ZXJzPywgb25BZnRlckNyZWF0ZUNhbGxiYWNrPykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3RzKFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyksXHJcblx0XHRcdHBhcmFtZXRlcnMsXHJcblx0XHRcdGJyZWFrdXBCeVBhcmVudCxcclxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdHMgKGNoYW5nZXNDb21waWxhdGlvbjogQ2hhbmdlc0NvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzLCBjb252ZXJzaW9uTWFwLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykge1xyXG5cdFx0Y29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uLmNyZWF0ZSxcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRwYXJhbWV0ZXJzLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcclxuXHRcdCkucnVuKCk7XHJcblx0XHRjb25zdCByZXNwb25zZXM6IEFycmF5PFByb21pc2U8YW55Pj4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpXHJcblx0XHRcdHJlc3BvbnNlcy5wdXNoKHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3QocmVxdWVzdCwgY29udmVyc2lvbk1hcCkudGhlbihub3RpZnkpKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzcG9uc2VzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHRmdW5jdGlvbiBub3RpZnkgKHJlc3VsdCkge1xyXG5cdFx0XHRpZiAoaXNGdW5jdGlvbihvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spKVxyXG5cdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2UsIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlTWFwID0gcmVzcG9uc2UubWFwO1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLml0ZW1zO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1uc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuZ2V0TWFwVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgcmVzcG9uc2VNYXApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdDcmVhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCA9IG5ld0l0ZW1JZDtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhmaWVsZHMpO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2VcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuYWRkVG9Db2xsZWN0aW9ucygpO1xyXG5cclxuXHRcdFx0XHQvLyBleHRlbmQgY29udmVyc2lvbiBtYXBcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlTWFwKSB7XHJcblx0XHRcdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiByZXNwb25zZU1hcFtpdGVtVHlwZV0pXHJcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSByZXNwb25zZU1hcFtpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJpb3JpdGl6ZVVwZGF0ZVJlcXVlc3RzIChjb21waWxhdGlvbiwgcGFyYW1ldGVycykge1xyXG5cdFx0Y29uc3QgcHJpb3JpdGl6ZWRJdGVtVHlwZXM6IHN0cmluZ1tdW10gPSBbW10sIFtdLCBbXV07XHJcblx0XHRsZXQgcmVxdWVzdENoYWluID0gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbilcclxuXHRcdFx0cHJpb3JpdGl6ZWRJdGVtVHlwZXNbdGhpcy5nZXRJdGVtVHlwZVVwZGF0ZVByaW9yaXR5KGl0ZW1UeXBlKV0ucHVzaChpdGVtVHlwZSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZXMgb2YgcHJpb3JpdGl6ZWRJdGVtVHlwZXMpIHtcclxuXHRcdFx0aWYgKGl0ZW1UeXBlcy5sZW5ndGggPT09IDApXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRyZXF1ZXN0Q2hhaW4gPSByZXF1ZXN0Q2hhaW4udGhlbihcclxuXHRcdFx0XHR0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyhpdGVtVHlwZXMsIGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSxcclxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdENoYWluO1xyXG5cdH1cclxuXHJcblx0Ly8gY29uc3RydWN0IGEgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyAoaXRlbVR5cGVzLCBjb21waWxhdGlvbiwgcGFyYW1ldGVycykge1xyXG5cdFx0cmV0dXJuICgpID0+IHtcclxuXHRcdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXHJcblx0XHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0sIHBhcmFtZXRlcnMpKTtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzLCBwYXJhbWV0ZXJNYXApIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSB7fTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xyXG5cclxuXHRcdHJlcXVlc3RbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGUgZm9ybWF0UmVxdWVzdCBjYWxsIGhlcmUgKGZpZWxkcyBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZClcclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XHJcblx0XHRcdC8vIFJNQ29yZSB0b2RvOiB0eXBlXHJcblx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0W2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XHJcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcclxuXHJcblx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XHJcblxyXG5cdFx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cclxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zID0gY29sbGVjdGlvbk1hdGNoZXIuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcylcclxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGNvbGxlY3Rpb24uY29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIHJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zLmdldCgpKS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMuZ2V0KCksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5LmluaXRpYWwsIHt9LCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0XHRcdFx0LnNldERlcml2ZWQocmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3QpKVxyXG5cdFx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcylcclxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0XHRcdGZpZWxkcyxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXHJcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbikgLy8gY2xlYXJpbmcgbm90IG5lY2Vzc2FyeVxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0IChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XHJcblx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRpZEFycmF5LnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKGl0ZW1UeXBlLCBpZEFycmF5KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZEFycmF5ID0gcmVzcG9uc2UuaXRlbXM7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmdldENvbGxlY3Rpb25NYXRjaGVyKCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpZiAoIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgcmVzcG9uc2VJZEFycmF5KSlcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdEZWxldGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlTW92ZVJlcXVlc3RzIChjb21waWxhdGlvbiwgY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XHJcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29tcGlsYXRpb25bcGFyZW50VHlwZV0pXHJcblx0XHRcdFx0ZXhlY3V0ZU1vdmVSZXF1ZXN0KHBhcmVudFR5cGUsIHBhcmVudElkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cclxuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVNb3ZlUmVxdWVzdCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdFx0Ly8gb25seSB0aGUgcGFyZW50IGlkIGNvdWxkIGhhdmUgYmVlbiB1cGRhdGVkXHJcblx0XHRcdGNvbnN0IGNvbXBpbGF0aW9uRW50cmllcyA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdW3BhcmVudElkXTtcclxuXHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSBzZWxmLmdldE1hcFZhbHVlKHBhcmVudFR5cGUsIHBhcmVudElkLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdHJlcXVlc3RzLnB1c2goXHJcblx0XHRcdFx0c2VsZi5hcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMoXHJcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0bmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCA/IG5ld1BhcmVudElkIDogcGFyZW50SWQsXHJcblx0XHRcdFx0XHRzZWxmLmJ1aWxkTW92ZVJlcXVlc3QoY29tcGlsYXRpb25FbnRyaWVzKVxyXG5cdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0c2VsZi5wcm9jZXNzTW92ZVJlc3BvbnNlKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c2VsZi5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzTW92ZVJlc3BvbnNlICgvKiByZXNwb25zZSwgKi9jb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdC8vIFRPRE86IHByb2Nlc3MgcmVzcG9uc2VcclxuXHJcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlbW92ZUNvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHRcdGNvbnN0IGFkZENvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXHJcblx0XHRcdFx0cmVtb3ZlQ29sbGVjdGlvbk1hcCxcclxuXHRcdFx0XHRjb21waWxhdGlvbkVudHJ5LnBhcmVudElkLFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcclxuXHRcdFx0XHRhZGRDb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRcdCg8RW50cnlQYXJlbnQ+IGl0ZW1FbnRyeS5wYXJlbnQpLml0ZW1JZCxcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihyZW1vdmVDb2xsZWN0aW9uTWFwLCAncmVtb3ZlSXRlbXMnKTtcclxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24oYWRkQ29sbGVjdGlvbk1hcCwgJ2FkZEl0ZW1zJyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFkZENvbGxlY3Rpb25NYXBFbnRyeSAoY29sbGVjdGlvbk1hcCwgcGFyZW50SWQsIGl0ZW1FbnRyeSwgdmFsdWUpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXBFbnRyeSA9IGNyZWF0ZVBhdGgoXHJcblx0XHRcdGNvbGxlY3Rpb25NYXAsXHJcblx0XHRcdFtpdGVtRW50cnkucGFyZW50Lml0ZW1UeXBlLCBwYXJlbnRJZCwgaXRlbUVudHJ5Lml0ZW1UeXBlXSxcclxuXHRcdFx0W3t9LCB7fSwgW11dXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbGxlY3Rpb25NYXBFbnRyeS5wdXNoKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9yRWFjaENvbGxlY3Rpb24gKGNvbGxlY3Rpb25NYXAsIG1ldGhvZCkge1xyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5W21ldGhvZF0oXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIG5vdGU6IHdpdGggdGhlIG5ldyBpdGVtIHN0cnVjdHVyZSwgKmFsbCogbG9jYWwgaXRlbXMgYXJlIGluIHRoZSBzaW5nbGUgaXRlbSBjYWNoZVxyXG5cdHByaXZhdGUgb25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKSB7XHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29udmVyc2lvbk1hcCkpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbUNvbHVtbnMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICghaGFzUHJvcGVydGllcyh1cGRhdGVkQ29sdW1ucykpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodXBkYXRlZENvbHVtbnMuaWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzaW5nbGVJdGVtcykge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBwcm9wZXIgb3JkZXI6IGNyZWF0ZSAtIG1vdmUgLSBkZWxldGUgLSB1cGRhdGVcclxuXHRwcml2YXRlIGV4ZWN1dGVSZXF1ZXN0cyAoY2hhbmdlc0NvbXBpbGF0aW9uOiBDaGFuZ2VzQ29tcGlsYXRpb24sIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKSB7XHJcblx0XHRjb25zdCBjb21waWxhdGlvbiA9IGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbjtcclxuXHRcdGNvbnN0IHNpbmdsZUl0ZW1zID0gY2hhbmdlc0NvbXBpbGF0aW9uLnNpbmdsZUl0ZW1zO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjaGFuZ2VzQ29tcGlsYXRpb24uY29sbGVjdGlvbnMudG9BcnJheSgpO1xyXG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhjaGFuZ2VzQ29tcGlsYXRpb24sIHBhcmFtZXRlcnMsIGNvbnZlcnNpb25NYXAsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlTW92ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLm1vdmUsIGNvbnZlcnNpb25NYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJpb3JpdGl6ZVVwZGF0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLnVwZGF0ZSwgcGFyYW1ldGVycyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdH0sIC8vIGl0ZW0gaWQgY29udmVyc2lvbiBtYXBcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlJdGVtVHlwZU1hcCwgQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmVudW0gQ09OU1RBTlRTIHtcclxuXHRNQVlCRSA9ICdtYXliZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XHJcblx0ZW50cmllczogQ29sbGVjdGlvbkVudHJ5SXRlbVR5cGVNYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29udGFpbnMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBlbnRyeSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0c29tZSAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB2b2lkKTogYm9vbGVhbiB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cnkpKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIGluIHVzZVxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdGNhbGxiYWNrKGVudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0ucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChjb2xsZWN0aW9uRW50cnk/OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV0uaW5kZXhPZihjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdGlmIChpbmRleCA9PT0gLTEpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKTogQ29sbGVjdGlvbkVudHJ5W10ge1xyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnNsaWNlKCk7XHJcblx0fVxyXG5cclxuXHRtYXRjaFBhcmVudCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiB0aGluayBvZiBiZXR0ZXIgbmFtZVxyXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdldFJlc291cmNlQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuZ2V0Q3VycmVudFJlc291cmNlKCk7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChjb2xsZWN0aW9uRW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSlcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT25seSByZXNvdXJjZXNcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpdGVtSWRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cclxuXHQgKi9cclxuXHRnZXRCeUNvbnRhaW5pbmdJdGVtIChpdGVtVHlwZSwgaXRlbUlkKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMgdGhlIGl0ZW0gJ2JlbG9uZ3MnIGluLlxyXG5cdCAqL1xyXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbk1hdGNoUmVzdWx0ID0ge2ZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xyXG5cclxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGZpZWxkcywgcGFyZW50KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoUmVzdWx0ID0gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCk7XHJcblxyXG5cdFx0XHQvLyBUT0RPOiBtYXliZT9cclxuXHRcdFx0aWYgKG1hdGNoUmVzdWx0ID09PSB0cnVlKSAvLyBtaWdodCBhbHNvIHJldHVybiAnbWF5YmUnXHJcblx0XHRcdFx0cmVzdWx0LmZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxyXG5cdFx0XHRcdHJlc3VsdC5tYXliZS5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRyZXN1bHQubm90Zml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29uc29sZS50aW1lRW5kKCdnZXRCeUZpdHRpbmdJdGVtJyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5LnN0cmluZyA9PT0gcXVlcnkuc3RyaW5nKVxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXRCeUtleSAoaXRlbVR5cGUsIGVudHJ5S2V5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0aWYgKGVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGUsIHJlc291cmNlS2V5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiBlbnRyeS5yZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRpZiAocmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMucmVzb3VyY2VLZXkgPT09IHJlc291cmNlS2V5KVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHQvLyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBjb2x1bW5zIHByb3BlcnR5LCBpdCB3aWxsIGJlIHJlcGxhY2VkIGluIHdoZW4gY29sdW1ucyBhcmUgZXhwYW5kZWRcclxuXHRjbG9uZU9wdGlvbnMgKG9wdGlvbnMsIHBhcmVudCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxyXG5cclxuXHRcdHJlc3VsdC5xdWVyeVBhcmFtcyA9IHRoaXMuY2xvbmVRdWVyeVBhcmFtcyhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsb25lUXVlcnlQYXJhbXMgKHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHBhcmFtZXRlcnMpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWUgPSBwYXJhbWV0ZXJzW2tleV07XHJcblx0XHRcdGxldCBjbG9uZTtcclxuXHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLnNsaWNlKCk7IC8vIHdlJ3JlIG9ubHkgdXNpbmcgcHJpbWl0aXZlIGFycmF5c1xyXG5cdFx0XHRlbHNlIGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuY2xvbmUoKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWU7XHJcblxyXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNsb25lO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNvbHVtbnM6IFtdLFxyXG5cdFx0XHRcdHF1ZXJ5OiBudWxsLFxyXG5cdFx0XHRcdHF1ZXJ5SXRlbVR5cGU6IG51bGwsXHJcblx0XHRcdFx0cXVlcnlQYXJhbXM6IHt9LFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlLFxyXG5cdFx0XHRcdGxpbWl0OiBudWxsLFxyXG5cdFx0XHRcdGVudHJ5S2V5OiAnJ1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlUXVlcnkgKG9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cclxuXHRcdGxldCBxdWVyeTtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnk7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xyXG5cdFx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zLnBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcclxuXHJcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XHJcblx0XHRcdFx0bGlua2VkVG9RdWVyeSA6XHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKG9wdGlvbnMucXVlcnksIGxpbmtlZFRvUXVlcnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KHF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpO1xyXG5cclxuXHRcdHJldHVybiB7b2JqZWN0OiBwYXJzZWRRdWVyeVswXSwgc3RyaW5nOiBwYXJzZWRRdWVyeVsxXX07XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFjY3VtdWxhdG9yKTogSXRlbUlkW10ge1xyXG5cdFx0aWYgKGFjY3VtdWxhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGFjY3VtdWxhdG9yID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdGFjY3VtdWxhdG9yLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHtJdGVtRW50cnlbXX0gaXRlbUVudHJpZXNcclxuXHQgKiBAcGFyYW0geyhpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbn0gY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XHJcblx0ICpcclxuXHQgKiBmaWx0ZXIgYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gUmV0dXJuIHRoZSBlbnRyaWVzIHRoYXQgZmFpbGVkIHRoZSBjb25kaXRpb25cclxuXHQgKiBSZXBsYWNlIHRoZSBnaXZlbiBhcnJheSB3aXRoIHRoZSBlbnRyaWVzIHRoYXQgZGlkbid0IGZhaWwgdGhlIGNvbmRpdGlvbi5cclxuXHQgKi9cclxuXHRmaWx0ZXJBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XHJcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZW1vdmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbUVudHJ5KSlcclxuXHRcdFx0XHRmaWx0ZXJlZEVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0cmVtb3ZlZEVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiByZW1vdmVkRW50cmllcztcclxuXHJcblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbUVudHJpZXMubGVuZ3RoOyBpKyspXHJcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xyXG5cclxuXHRcdHJldHVybiByZW1vdmVkRW50cmllcztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi8nO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uVXRpbCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LCBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIENvbHVtblNldEZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAsXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRFbnRyeVBhcmVudCxcblx0RW50cnlTdGF0dXMsXG5cdEl0ZW1JZCxcblx0SXRlbVJlc291cmNlSXRlbUlkTWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSGFuZGxlciB7XG5cdGVudHJpZXM6IENvbGxlY3Rpb25DYWNoZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGdldFByb21pc2VzIChzdGF0dXNSZXNvdXJjZTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXApIHtcblx0XHRjb25zdCBwcm9taXNlZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF07XG5cdFx0Y29uc3QgcHJvbWlzZWRFeHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHByb21pc2VkKVxuXHRcdFx0cmVzdWx0LnB1c2gocHJvbWlzZWRbcGFyZW50SWRdKTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcHJvbWlzZWRFeHBhbmQpXG5cdFx0XHRyZXN1bHQucHVzaChwcm9taXNlZEV4cGFuZFtwYXJlbnRJZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlcXVlc3RJZHMgKHN0YXR1c1Jlc291cmNlKSB7XG5cdFx0Y29uc3QgcmVzb2x2ZSA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5SRVNPTFZFXTtcblx0XHRjb25zdCBleHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuRVhQQU5EXTtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHJlc29sdmUpXG5cdFx0XHRyZXN1bHQucHVzaChyZXNvbHZlW3BhcmVudElkXS5wYXJlbnQuaXRlbUlkKTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gZXhwYW5kKVxuXHRcdFx0cmVzdWx0LnB1c2goZXhwYW5kW3BhcmVudElkXS5wYXJlbnQuaXRlbUlkKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPykge1xuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5ID0gZW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhlbnRyeS5ub3RmaXR0aW5nLCBudWxsLCB0cnVlKTtcblx0XHRcdGNvbGxlY3Rpb24uYWRkSXRlbXMoZW50cnkuZml0dGluZywgbnVsbCwgdHJ1ZSk7IC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXG5cblx0XHRcdGlmIChlbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKCk6IENvbGxlY3Rpb25NYXRjaGVyIHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFt0aGlzLmVudHJpZXNdLCB0cnVlLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQgKi9cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPywgcmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZyA9IG1hcEVudHJ5LmZpdHRpbmc7XG5cdFx0XHRjb25zdCBtYXliZSA9IG1hcEVudHJ5Lm1heWJlO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxuXHRcdFx0XHRpZEFycmF5LnB1c2goZml0dGluZ0l0ZW0uaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChtYXliZUl0ZW0pO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2Vcblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XG5cdCAqL1xuXHRhZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCByZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHRpZiAodXBkYXRlSW5pdGlhbCAmJiBtYXBFbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YmF0Y2hFeHBhbmQgKHBhcmVudFR5cGU6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLCBuZXdDb2x1bW5zKTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VbXT4ge1xuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sbGVjdGlvbnMpO1xuXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcblx0XHRsZXQgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHQvLyBUT0RPOiBmaWx0ZXIgbG9jYWwgaXRlbXM/XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xuXG5cdFx0XHRpdGVtRW50cmllcyA9IGl0ZW1FbnRyaWVzLmNvbmNhdChjb2xsZWN0aW9uRW50cnkuaXRlbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG51bGwsXG5cdFx0XHRuZXdDb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJpZXNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpXG5cdFx0XHRcdFx0Y29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5LnVwZGF0ZUNvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbnM7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGJhdGNoRXh0ZW5kIChcblx0XHRwYXJlbnRUeXBlOiBzdHJpbmcsXG5cdFx0aXRlbVR5cGU6IHN0cmluZyxcblx0XHRvcHRpb25zLFxuXHRcdHF1ZXJ5Q2FsbGJhY2ssXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLFxuXHRcdHJldHVybkFsbEl0ZW1zID0gZmFsc2Vcblx0KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VJdGVtSWRNYXA+IHtcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29sbGVjdGlvbnMpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih7fSk7XG5cblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXHRcdGxldCBpdGVtSWRBcnJheTogSXRlbUlkW10gPSBbXTtcblxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBxdWVyeUNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjayk7XG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2goKDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudCkuaXRlbUlkKTtcblxuXHRcdFx0aXRlbUlkQXJyYXkgPSBpdGVtSWRBcnJheS5jb25jYXQoY29sbGVjdGlvbkVudHJ5LmdldElkQXJyYXkoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucykub2JqZWN0LFxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbihpdGVtSWRBcnJheSlcblx0XHRcdCksXG5cdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2UgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF07XG5cdFx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5hZGRJdGVtcyggLy8gc2hvdWxkIGdvIGZpcnN0XG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5pdGVtc1twYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHJldHVybkFsbEl0ZW1zID8gY29sbGVjdGlvblJlc291cmNlLml0ZW1zIDogaXRlbVJlc291cmNlcztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGJhdGNoRmV0Y2ggKFxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcblx0XHRwYXJlbnRJZEFycmF5OiBudW1iZXJbXSxcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxuXHRcdG9wdGlvbnMsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCByZXNvdXJjZSA9IHRoaXMuY3JlYXRlU3RhdHVzUmVzb3VyY2UocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwodGhpcy5nZXRQcm9taXNlcyhyZXNvdXJjZSkpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLmdldFJlcXVlc3RJZHMocmVzb3VyY2UpO1xuXG5cdFx0XHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cblx0XHRcdFx0XHRcdFx0bnVsbCA6XG5cdFx0XHRcdFx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLnF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpWzBdLFxuXHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zXG5cdFx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShyZXNvdXJjZSwgaXRlbUVudHJ5UmVzb3VyY2UsIGl0ZW1DYWNoZSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChoYXNQcm9wZXJ0aWVzKHJlc291cmNlW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRpdGVtQ2FjaGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc291cmNlW0VOVFJZX1NUQVRVUy5DQUNIRURdO1xuXG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZVN0YXR1c1Jlc291cmNlIChcblx0XHRwYXJlbnRUeXBlOiBzdHJpbmcsXG5cdFx0cGFyZW50SWRBcnJheTogbnVtYmVyW10sXG5cdFx0aXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucyxcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXNJZCBpbiBFTlRSWV9TVEFUVVMpXG5cdFx0XHRyZXN1bHRbRU5UUllfU1RBVFVTW3N0YXR1c0lkXV0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpOyAvLyB1c2UgcHJvY2Vzc0VudHJ5T3B0aW9ucyB0byBjbG9uZVxuXG5cdFx0XHRsZXQgc3RhdHVzUmVzb3VyY2U7XG5cblx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9O1xuXG5cdFx0XHRzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdFx0cmVzdWx0W3N0YXR1c1Jlc291cmNlLnN0YXR1c11bcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoIChcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxuXHRcdG9wdGlvbnMsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xuXHRcdGNvbnN0IGVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XG5cblx0XHRzd2l0Y2ggKHN0YXR1c1Jlc291cmNlLnN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGVudHJ5KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBlbnRyeS5leHBhbmQob3B0aW9ucy5jb2x1bW5zKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVJlbW90ZShlbnRyeSwgaXRlbUNhY2hlKTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkxPQ0FMOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoZW50cnksIGl0ZW1DYWNoZSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmZXJyZWRFbnRyeVN0YXR1cyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHQvLyBiZWNhdXNlIHRoZSBjb2xsZWN0aW9uIGVudHJ5IGlzIG5vdCBmdWxseSBsb2FkZWQgeWV0LCB3ZSdsbCBoYXZlIHRvIHJlbHkgb24gdGhlIG9wdGlvbnNcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucztcblx0XHRjb25zdCBlbnRyeUNvbHVtbnMgPSBlbnRyeU9wdGlvbnMuY29sdW1ucztcblxuXHRcdGxldCBpc0NvbHVtblN1YnNldCA9IGZhbHNlO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblx0XHRcdGVudHJ5T3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMob3B0aW9ucy5jb2x1bW5zLCBlbnRyeUNvbHVtbnMpLm1lcmdlZDtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdFx0c3RhdHVzOiBjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpID8gRU5UUllfU1RBVFVTLkxPQ0FMIDogRU5UUllfU1RBVFVTLlJFU09MVkVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKGVudHJ5Q29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdDb2x1bW5zOiB0cnVlIGZvciBjb2xsZWN0aW9ucyBpcyBkZXByZWNhdGVkIScpO1xuXHRcdFx0aXNDb2x1bW5TdWJzZXQgPSB0cnVlO1xuXHRcdH0gZWxzZVxuXHRcdFx0aXNDb2x1bW5TdWJzZXQgPSB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQob3B0aW9ucy5jb2x1bW5zLCBlbnRyeUNvbHVtbnMsIGZhbHNlKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRlbnRyeTogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0c3RhdHVzOiBpc0NvbHVtblN1YnNldCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRcblx0XHR9O1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMsIGxvY2FsRW50cmllczogQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHRcdGNvbnN0IGNhY2hlZEVudHJ5ID0gKHRoaXMuaXNMb2NhbChvcHRpb25zKSA/IGxvY2FsRW50cmllcyA6IHRoaXMuZW50cmllcykuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0aWYgKGNhY2hlZEVudHJ5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0TmV3RW50cnlTdGF0dXMoaXRlbVR5cGUsIHF1ZXJ5LCBvcHRpb25zLCBsb2NhbEVudHJpZXMsIGRlZmVycmVkRW50cmllcyk7XG5cblx0XHRpZiAoY2FjaGVkRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhjYWNoZWRFbnRyeSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZW50cnk6IGNhY2hlZEVudHJ5LFxuXHRcdFx0c3RhdHVzOiB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQob3B0aW9ucy5jb2x1bW5zLCBjYWNoZWRFbnRyeS5jb2x1bW5zLnJlcXVlc3QsIGNhY2hlZEVudHJ5LmNvbHVtbnMucmVxdWVzdENvbHVtbnNUcnVlKSA/XG5cdFx0XHRcdEVOVFJZX1NUQVRVUy5DQUNIRUQgOiBFTlRSWV9TVEFUVVMuRVhQQU5EXG5cdFx0fTtcblx0fVxuXG5cdGdldE5ld0VudHJ5U3RhdHVzIChpdGVtVHlwZTogc3RyaW5nLCBxdWVyeSwgb3B0aW9ucywgbG9jYWxFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlKTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcblx0XHRsZXQgZGVmZXJyZWRPcHRpb25zO1xuXG5cdFx0aWYgKG9wdGlvbnMuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZW50cnk6IGRlZmVycmVkRW50cmllcy5hZGQodGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucykpLFxuXHRcdFx0XHRcdHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkT3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXHRcdFx0ZGVmZXJyZWRPcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhkZWZlcnJlZE9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5tZXJnZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XG5cblx0XHRsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0Ly8gd2lsbCBhbHNvIGFkZCB0aGUgZGVmZXJyZWQgZW50cnlcblx0XHR0aGlzLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlJFU09MVkV9O1xuXHR9XG5cblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoc3RhdHVzUmVzb3VyY2UsIGl0ZW1FbnRyeVJlc291cmNlLCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuY2FjaGVkKVxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmNhY2hlZFtwYXJlbnRJZF07XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLnJlc29sdmUpIHtcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5yZXNvbHZlW3BhcmVudElkXS5yZXNvbHZlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aXRlbXM6IGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlSZXNvdXJjZS5jb2x1bW5zXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5leHBhbmQpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZXhwYW5kW3BhcmVudElkXTtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnVwZGF0ZUNvbHVtbnMoaXRlbUVudHJ5UmVzb3VyY2UuY29sdW1uRXhwYW5zaW9uKTtcblxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmxvY2FsKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmxvY2FsW3BhcmVudElkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aXRlbXM6IGl0ZW1DYWNoZS5nZXRCeVBhcmVudChcblx0XHRcdFx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdHBhcmVudC5pdGVtSWQsXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbnNcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVzb2x2ZUxvY2FsIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBvcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XG5cblx0XHRsZXQgY29sdW1uSW5mbztcblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoY29sbGVjdGlvbkVudHJ5KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudCxcblx0XHRcdFx0XHRjb2x1bW5JbmZvXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKHtcblx0XHRcdFx0XHRpdGVtczogaXRlbUVudHJpZXMuY29uY2F0KGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSkpLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtbkluZm9cblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGlzTG9jYWwgKG9wdGlvbnMpIHtcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgaWRlbnRpdHksIEl0ZW1JZCB9IGZyb20gJy4uLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMvJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdG1hcDoge1xuXHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXToge1xuXHRcdFx0Y29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5XG5cdFx0XHRtYXRjaGVzOiB7XG5cdFx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IHsgaXRlbTogSXRlbUVudHJ5LCBpc01hdGNoOiBib29sZWFuIH1cblx0XHRcdH1cblx0XHR9XG5cdH0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sXG5cdFx0cHJpdmF0ZSB1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdHByaXZhdGUgY2FsbE9uQWN0aXZhdGU6IGJvb2xlYW5cblx0KSB7XG5cblx0fVxuXG5cdGV4cGFuZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkNhY2hlIG9mIHRoaXMuY29sbGVjdGlvbkNhY2hlcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlJdGVtVHlwZShpdGVtRW50cnkuaXRlbVR5cGUpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSAgb2YgY29sbGVjdGlvbkVudHJpZXMpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5SWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XG5cdFx0XHRcdGxldCBtYXRjaGVzO1xuXG5cdFx0XHRcdGlmICh0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHR0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LCBtYXRjaGVzOiB7fX07XG5cblx0XHRcdFx0bWF0Y2hlcyA9IHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXS5tYXRjaGVzO1xuXG5cdFx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRtYXRjaGVzW2l0ZW1JZF0gPSB7XG5cdFx0XHRcdFx0aXRlbTogaXRlbUVudHJ5LFxuXHRcdFx0XHRcdGlzTWF0Y2g6IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNlbGY7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgKCkge1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cblx0XHRcdGlmICh0aGlzLmhhc0ZpdHRpbmdJdGVtcyhtYXBFbnRyeS5tYXRjaGVzKSlcblx0XHRcdFx0cmVzdWx0LnB1c2gobWFwRW50cnkuY29sbGVjdGlvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZFRvQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcblx0XHRcdGNvbnN0IGZpdHRpbmdJdGVtRW50cmllcyA9IGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KSB7XG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXG5cdFx0XHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BY3RpdmF0ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxuXHRcdFx0XHRcdGZpdHRpbmdJdGVtRW50cmllcyxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUlkcyA9IHRoaXMuZ3JvdXBJdGVtSWRzKG1hcEVudHJ5Lm1hdGNoZXMpLmZpdHRpbmc7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCB8fCBjb2xsZWN0aW9uRW50cnkgIT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIHJlc3VsdFJlc291cmNlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5ub3RGaXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHQvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHRpZiAoZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBncm91cEl0ZW1FbnRyaWVzIChtYXRjaGVzKSB7XG5cdFx0Y29uc3QgZml0dGluZzogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXHRcdGNvbnN0IG1heWJlOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xuXHRcdFx0Y29uc3QgbWF0Y2ggPSBtYXRjaGVzW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBtYXRjaC5pdGVtO1xuXHRcdFx0Y29uc3QgaXNNYXRjaCA9IG1hdGNoLmlzTWF0Y2g7XG5cblx0XHRcdGlmIChpc01hdGNoID09PSB0cnVlKVxuXHRcdFx0XHRmaXR0aW5nLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdGVsc2UgaWYgKGlzTWF0Y2ggPT09IGZhbHNlKVxuXHRcdFx0XHRub3RGaXR0aW5nLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdG1heWJlLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge2ZpdHRpbmc6IGZpdHRpbmcsIG5vdEZpdHRpbmc6IG5vdEZpdHRpbmcsIG1heWJlOiBtYXliZX07XG5cdH1cblxuXHRwcml2YXRlIGdyb3VwSXRlbUlkcyAobWF0Y2hlcykge1xuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZ307XG5cdH1cblxuXHRwcml2YXRlIGhhc0ZpdHRpbmdJdGVtcyAobWF0Y2hlcykge1xuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcblx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0uaXNNYXRjaCA9PT0gdHJ1ZSlcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIHtcclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXRJdGVtczogZmFsc2UsXHJcblx0XHRcdFx0ZWRpdENvbGxlY3Rpb246IGZhbHNlLFxyXG5cdFx0XHRcdG1vZEluc3RhbnQ6IGZhbHNlLFxyXG5cdFx0XHRcdGVuYWJsZVNhdmU6IHRydWUsXHJcblx0XHRcdFx0b25JdGVtc0NyZWF0ZWQ6IG5vb3AsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsIC8vIG5lZWRlZCBmb3IgY29tcGFyaXNvblxyXG5cdFx0XHRcdG9uQWRkOiBub29wLFxyXG5cdFx0XHRcdG9uUmVtb3ZlOiBub29wLFxyXG5cdFx0XHRcdG9uQWRkSW5pdGlhbDogbm9vcCxcclxuXHRcdFx0XHRvblJlbW92ZUluaXRpYWw6IG5vb3AsXHJcblx0XHRcdFx0b25BY3RpdmF0ZUl0ZW06IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZUl0ZW06IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZUNvbGxlY3Rpb246IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxyXG5cdFx0XHRcdHJlc291cmNlS2V5OiBudWxsLCAvLyBUT0RPOiByZW1vdmVcclxuXHRcdFx0XHRjbGVhck9uVGFiQ2hhbmdlOiB0cnVlLFxyXG5cdFx0XHRcdGNsZWFyT25TdWJUYWJDaGFuZ2U6IHRydWUsXHJcblx0XHRcdFx0Y3VzdG9tOiBudWxsXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkNhY2hlIHtcclxuXHRjYWNoZSA9IHt9O1xyXG5cdGFsbENvbHVtbnMgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbikge1xyXG5cdFx0aWYgKHRoaXMuY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuY2FjaGVbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Y29uc3QgZW50cnkgPSB0aGlzLmNhY2hlW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XHJcblxyXG5cdFx0aWYgKGVudHJ5W2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRyZXR1cm4gZW50cnlbY29sdW1uSWRdO1xyXG5cdH1cclxuXHJcblx0c2V0Q29sdW1ucyAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVzcG9uc2VUeXBlIGluIHJlc3BvbnNlQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5zW3Jlc3BvbnNlVHlwZV07XHJcblxyXG5cdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxyXG5cdFx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdW2NvbHVtbklkXSA9IHRoaXMuc2V0Q29sdW1uKHJlc3BvbnNlVHlwZSwgY29sdW1uc1tjb2x1bW5JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSlcclxuXHRcdFx0dGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJldHJpZXZlIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpOiB7IG1pc3Npbmc6IGFueVtdIHwgdHJ1ZSwgY2FjaGVkOiBvYmplY3QgfSB7XHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcclxuXHRcdFx0aWYgKHRoaXMuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxyXG5cdFx0XHRcdHJldHVybiB7Y2FjaGVkOiB0aGlzLmdldENvbHVtbnMoaXRlbVR5cGUpLCBtaXNzaW5nOiBbXX07XHJcblxyXG5cdFx0XHRyZXR1cm4ge2NhY2hlZDoge30sIG1pc3Npbmc6IHRydWV9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHJlcG9uc2VBY2N1bXVsYXRvciA9IHt9O1xyXG5cdFx0Y29uc3QgcmVxdWVzdEFjY3VtdWxhdG9yID0gW107XHJcblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlcG9uc2VBY2N1bXVsYXRvcik7XHJcblxyXG5cdFx0cmV0dXJuIHttaXNzaW5nOiByZXF1ZXN0QWNjdW11bGF0b3IsIGNhY2hlZDogcmVwb25zZUFjY3VtdWxhdG9yfTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPT09IHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXRDb2x1bW5zIChpdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyBbXSA6IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IGNvbHVtbnM7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKSB7XHJcblx0XHQvLyBhbHdheXMgcmV0cmlldmUgdGhlIGlkIGNvbHVtblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgJ2lkJywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpXHJcblx0XHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1uIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSB0aGlzLmdldENvbHVtbihpdGVtVHlwZSwgY29sdW1uLmlkKTtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaChyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdW2NvbHVtbi5pZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG1pc3NpbmdEZXJpdmVkID0gW107XHJcblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNvbHVtbi5jaGlsZHJlbiwgbWlzc2luZ0Rlcml2ZWQsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xyXG5cclxuXHRcdGlmIChtaXNzaW5nRGVyaXZlZC5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBtaXNzaW5nUmVxdWVzdCA9IHt9O1xyXG5cdFx0bWlzc2luZ1JlcXVlc3RbY29sdW1uLmlkXSA9IG1pc3NpbmdEZXJpdmVkO1xyXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gobWlzc2luZ1JlcXVlc3QpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW4gKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xyXG5cdFx0aWYgKHRoaXMuY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jYWNoZVtpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uIHtcclxuXHRleHBhbnNpb25NYXA6IGFueSA9IHt9O1xyXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRwdWJsaWMgcmVxdWVzdENvbHVtbnM6IGFueSB8IGJvb2xlYW4sXHJcblx0XHRwdWJsaWMgcmVzcG9uc2VDb2x1bW5zOiBhbnlcclxuXHQpIHtcclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHQvLyByZXF1ZXN0Q29sdW1ucyBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LCB3aGVuIGl0IGlzIHRydWUgZGVyaXZlZCBjb2x1bW4gaW5mb3JtYXRpb24gd2lsbCBiZSBsb3N0XHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMucHVzaChjb2x1bW5JZCk7XHJcblx0XHR9IGVsc2VcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHJ1biAoY29sdW1uSW5mbzogYW55LCByZXR1cm5FeHBhbnNpb25SZXN1bHQ6IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm9JZCA9IGNvbHVtbkluZm8uaWQ7XHJcblxyXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJldHVybkV4cGFuc2lvblJlc3VsdCA/IHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0gOlxyXG5cdFx0XHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0ubWVyZ2VkO1xyXG5cclxuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRjb2x1bW5JbmZvLnJlcXVlc3QsXHJcblx0XHRcdGNvbHVtbkluZm8ucmVxdWVzdENvbHVtbnNUcnVlXHJcblx0XHQpO1xyXG5cclxuXHRcdGlmIChpc0NvbHVtblN1YnNldClcclxuXHRcdFx0cmV0dXJuIHJldHVybkV4cGFuc2lvblJlc3VsdCA/IG51bGwgOiBjb2x1bW5JbmZvO1xyXG5cclxuXHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0gPSB0aGlzLmV4cGFuZENvbHVtbkluZm8oY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0cmV0dXJuIHJldHVybkV4cGFuc2lvblJlc3VsdCA/IHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0gOlxyXG5cdFx0XHR0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5JbmZvSWRdLm1lcmdlZDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhwYW5kQ29sdW1uSW5mbyAoY29sdW1uU2V0OiBDb2x1bW5TZXQpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RNZXJnZVJlc3VsdCA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtblNldC5yZXF1ZXN0LCB0aGlzLnJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdGNvbnN0IG1lcmdlZFJlc3BvbnNlQ29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0XHQubWVyZ2VSZXNwb25zZUNvbHVtbnMoY29sdW1uU2V0LnJlc3BvbnNlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucylcclxuXHRcdFx0Lm1lcmdlZDtcclxuXHJcblx0XHRjb25zdCBtZXJnZWQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQubWVyZ2VkLFxyXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnNcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RNZXJnZVJlc3VsdC5kaWZmZXJlbmNlLFxyXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnMsIC8vIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBsb29rIHVwIHRoZSBwYXJlbnQgb2YgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHJcblx0XHRtZXJnZWQucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgfHwgY29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uQ2FjaGUsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkhhbmRsZXIge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNhY2hlOiBDb2x1bW5DYWNoZSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0c2V0Q29sdW1uIChpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pIHtcclxuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xyXG5cdH1cclxuXHJcblx0c2V0Q29sdW1ucyAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hJdGVtVHlwZVRyYW5zbGF0aW9ucyAoaXRlbVR5cGVzKTogUHJvbWlzZTxhbnk+IHtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIGl0ZW1UeXBlcylcclxuXHRcdFx0cHJvbWlzZXNbaXRlbVR5cGVdID0gdGhpcy5mZXRjaChpdGVtVHlwZSwgWydpZCddKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpXHJcblx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgcmVzcG9uc2UpXHJcblx0XHRcdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSByZXNwb25zZVtpdGVtVHlwZV1baXRlbVR5cGVdLmlkLm5hbWU7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdCAoaXRlbVR5cGUsIGNvbHVtbnMsIHBhcmFtcyA9IHt9KTogUHJvbWlzZTxhbnk+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMpLnRoZW4oXHJcblx0XHRcdGNvbHVtblJlc291cmNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRjb2x1bW5zLFxyXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaCAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcblx0XHRjb25zdCBjb2x1bW5SZXNvdXJjZSA9IHRoaXMuY2FjaGUucmV0cmlldmUoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTtcclxuXHJcblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2x1bW5SZXNvdXJjZS5jYWNoZWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihyZXNwb25zZUNvbHVtbnMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXHJcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXHJcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5jYWNoZWRcclxuXHRcdFx0XHQpLm1lcmdlZDtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGZldGNoQWxsIChpdGVtVHlwZSk6IFByb21pc2U8YW55PiB7XHJcblx0XHRpZiAodGhpcy5jYWNoZS5jb250YWluc0FsbChpdGVtVHlwZSkpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5jYWNoZS5nZXRDb2x1bW5zKGl0ZW1UeXBlKSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgdHJ1ZSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm8ge1xyXG5cdGlkOiBzdHJpbmc7XHJcblx0bGV2ZWw6IG51bWJlcjtcclxuXHRwYXRoOiBzdHJpbmc7XHJcblx0dGFpbFBhdGg6IHN0cmluZztcclxuXHRpdGVtVHlwZTogc3RyaW5nID0gJyc7XHJcblx0Y2hpbGRyZW46IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGlzTGVhZjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChyZWFkb25seSBhcGlDb2x1bW46IGFueSwgcmVhZG9ubHkgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gYXBpQ29sdW1uLmlkO1xyXG5cclxuXHRcdHRoaXMuaWQgPSBjb2x1bW5JZDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKSB7XHJcblx0XHRcdHRoaXMubGV2ZWwgPSAwO1xyXG5cdFx0XHR0aGlzLnBhdGggPSBjb2x1bW5JZDtcclxuXHRcdFx0dGhpcy50YWlsUGF0aCA9ICcnO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5sZXZlbCA9IHBhcmVudC5sZXZlbCArIDE7XHJcblx0XHRcdHRoaXMucGF0aCA9IHBhcmVudC5wYXRoICsgQ09MVU1OX1NFUEVSQVRPUiArIGNvbHVtbklkO1xyXG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID09PSAwID9cclxuXHRcdFx0XHRjb2x1bW5JZCA6XHJcblx0XHRcdFx0cGFyZW50LnRhaWxQYXRoICsgQ09MVU1OX1NFUEVSQVRPUiArIGNvbHVtbklkO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5JbmZvLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5JbmZvRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1JlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGNsYXNzIENvbHVtblNldCB7XG5cdGlkID0gKytjdXJyZW50SWQ7XG5cblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xuXHRyZXNwb25zZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblxuXHRsaW5rOiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGw7XG5cdG1haW46IENvbHVtbkluZm9bXSA9IFtdO1xuXHRkZXJpdmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0cm9vdDogQ29sdW1uSW5mb1tdID0gW107XG5cdGxlYWY6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRmb3JtYXR0ZWQ6IHttYWluOiBDb2x1bW5JbmZvW10sIGRlcml2ZWQ6IENvbHVtbkluZm9bXX0gPSB7bWFpbjogW10sIGRlcml2ZWQ6IFtdfTtcblx0ZmlsdGVyZWQ6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRjdXN0b206IENvbHVtbkluZm9bXSA9IFtdO1xuXHRzZWFyY2hhYmxlOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0aXRlbTogQ29sdW1uSW5mb1tdID0gW107XG5cdG5vdEl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xuXG5cdGVuYWJsZUNhY2hpbmc6IGJvb2xlYW47XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlLFxuXHRcdHB1YmxpYyByZXF1ZXN0OiBSZXF1ZXN0Q29sdW1ucyxcblx0KSB7XG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3QgPT09IHRydWU7XG5cdH1cblxuXHRyZXNvbHZlIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLCBlbmFibGVDYWNoaW5nID0gdHJ1ZSwgaW5jbHVkZUlkQ29sdW1uID0gdHJ1ZSk6IHRoaXMge1xuXHRcdHRoaXMuZW5hYmxlQ2FjaGluZyA9IGVuYWJsZUNhY2hpbmc7XG5cblx0XHRpZiAodGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXF1ZXN0Q29sdW1ucyhyZXNwb25zZUNvbHVtbnMsIGluY2x1ZGVJZENvbHVtbik7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblxuXHRcdHRoaXMucmVxdWVzdCA9IFtdO1xuXHRcdHRoaXMucmVzcG9uc2UgPSB0aGlzLmVuYWJsZUNhY2hpbmcgP1xuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSA6XG5cdFx0XHRyZXNwb25zZUNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pIHtcblx0XHRcdHRoaXMubWFpbi5wdXNoKHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIFtdLCBudWxsLCByZXNwb25zZUNvbHVtbnMpKTtcblx0XHRcdHRoaXMucmVxdWVzdC5wdXNoKGNvbHVtbklkKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NSZXF1ZXN0Q29sdW1ucyAocmVzcG9uc2VDb2x1bW5zLCBpbmNsdWRlSWRDb2x1bW4pIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSA8b2JqZWN0W10+IHRoaXMucmVxdWVzdDsgLy8gd2UgY2FuIGFzc3VtZSByZXF1ZXN0Q29sdW1ucyBpcyBhbiBhcnJheSBoZXJlXG5cblx0XHR0aGlzLnJlc3BvbnNlID0ge307XG5cblx0XHRpZiAocmVxdWVzdENvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhyZXF1ZXN0Q29sdW1uLCBpdGVtVHlwZSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdFx0aWYgKGNvbHVtbkluZm8gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0aWYgKCFjb2x1bW5JbmZvLmlzTGVhZilcblx0XHRcdFx0dGhpcy5yb290LnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXG5cdFx0aWYgKGluY2x1ZGVJZENvbHVtbiAmJiB0aGlzLnJlc3BvbnNlW2l0ZW1UeXBlXS5pZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbygnaWQnLCBpdGVtVHlwZSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdFx0aWYgKGNvbHVtbkluZm8gIT09IG51bGwpXG5cdFx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVxdWVzdENvbHVtbkluZm8gKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucykge1xuXHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb2x1bW4uaWQ7XG5cblx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ05vIGFwaSBjb2x1bW4gZm9yIHJlcXVlc3QgY29sdW1uJywgY29sdW1uSWQsICdmb3IgaXRlbVR5cGUnLCBpdGVtVHlwZSk7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmVuYWJsZUNhY2hpbmcpXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblxuXHRcdGNvbnN0IHJlc3VsdFJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0aWYgKHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiB0aGlzLmdldENvbHVtbkluZm8oY29sdW1uSWQsIGl0ZW1UeXBlLCBwYXJzZWRDb2x1bW4uY2hpbGRyZW4sIHBhcmVudCwgcmVzcG9uc2VDb2x1bW5zKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29sdW1uSW5mbyAoY29sdW1uSWQsIGl0ZW1UeXBlLCBjaGlsZHJlbiwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpOiBDb2x1bW5JbmZvIHtcblx0XHRjb25zdCBjb2x1bW5VdGlsID0gdGhpcy5jb2x1bW5VdGlsO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlQ29sdW1uLCBwYXJlbnQpO1xuXHRcdGNvbnN0IGlzRGVyaXZlZCA9IHBhcmVudCAhPT0gbnVsbDtcblxuXHRcdGlmIChpc0Rlcml2ZWQpXG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcblx0XHRlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXG5cdFx0XHR0aGlzW2NvbHVtblV0aWwuaXNJdGVtQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSA/ICdpdGVtJyA6ICdub3RJdGVtJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuZm9ybWF0dGVkW2lzRGVyaXZlZCA/ICdkZXJpdmVkJyA6ICdtYWluJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuc2VhcmNoYWJsZS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5jdXN0b20ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbi50eXBlID09PSAnbGluaycpXG5cdFx0XHR0aGlzLmxpbmsgPSBjb2x1bW5JbmZvO1xuXG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5sZWFmLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHRcdH1cblxuXHRcdGNvbHVtbkluZm8uaXRlbVR5cGUgPSByZXNwb25zZUNvbHVtbi5pdGVtVHlwZTtcblx0XHRjb2x1bW5JbmZvLmNoaWxkcmVuID0gW107XG5cdFx0Y29sdW1uSW5mby5pc0xlYWYgPSBmYWxzZTtcblxuXHRcdC8vIGNvbHVtbnMgaXMgKm5vdCogdHJ1ZVxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW5JZCBvZiBjaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgY2hpbGRJbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhcblx0XHRcdFx0Y2hpbGRDb2x1bW5JZCxcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsXG5cdFx0XHRcdGNvbHVtbkluZm8sXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGNoaWxkSW5mbyA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGNvbHVtbkluZm8uY2hpbGRyZW4ucHVzaChjaGlsZEluZm8pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IsIFJFTkRFUl9BU19TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBMb2NhbENvbHVtbiwgUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjb3B5LCBleHRlbmQsIGdldEZpcnN0UHJvcGVydHksIGlzRGVmaW5lZCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uVXRpbCB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sdW1uUGF0aCAoY29sdW1ucywgcmVuZGVyQXMpIHtcclxuXHRcdGxldCBzZXBlcmF0b3IgPSAnJztcclxuXHRcdGxldCByZXN1bHQgPSAnJztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdHJlc3VsdCArPSBzZXBlcmF0b3IgKyBjb2x1bW4uaWQ7XHJcblx0XHRcdHNlcGVyYXRvciA9IENPTFVNTl9TRVBFUkFUT1I7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlbmRlckFzICE9PSBudWxsKVxyXG5cdFx0XHRyZXN1bHQgKz0gUkVOREVSX0FTX1NFUEVSQVRPUiArIHJlbmRlckFzO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXREYXRlRm9ybWF0T3B0aW9ucyAoY29sdW1uVHlwZSkge1xyXG5cdFx0Y29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG5cdFx0Y29uc3QgZm9ybWF0cyA9IHtcclxuXHRcdFx0J0otTS1ZJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcclxuXHRcdFx0J2orRitZJzogbm93LmZvcm1hdCgnRCBNTU0gWVlZWScpLFxyXG5cdFx0XHQnRCtqK0YrWSc6IG5vdy5mb3JtYXQoJ2RkZGQgRCBNTU0gWVlZWScpLFxyXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxyXG5cdFx0XHQnZic6IG5vdy5mb3JtYXQoJ01NTU0nKSxcclxuXHRcdFx0J0QnOiBub3cuZm9ybWF0KCdkZGRkJyksXHJcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXHJcblx0XHRcdGV4dGVuZChmb3JtYXRzLCB7XHJcblx0XHRcdFx0J0otTS1ZK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVkgSEg6bW0nKSxcclxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXHJcblx0XHRcdFx0J2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ0REIE1NTU0gWSBISDptbScpLFxyXG5cdFx0XHRcdCdEK2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ2RkZGQgREQgTU1NIFkgSEg6bW0nKSxcclxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKSxcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIGZvcm1hdHM7XHJcblx0fVxyXG5cclxuXHRpc1N0cmluZ0NvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdFx0Ly8gY2FzZSAnaHRtbCc6IC8vIFRPRE86IHNvcnQgb24gZmlsdGVyZWQgdmFsdWVcclxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0Zsb2F0Q29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzSW50Q29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNOdW1iZXJDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcclxuXHR9XHJcblxyXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHJldHVybiBjb2x1bW4uZmllbGR0eXBlID09PSAnY3VzdG9tZmllbGQnO1xyXG5cdH1cclxuXHJcblx0aXNJdGVtQ29sdW1uIChjb2x1bW4sIGluY2x1ZGVJZCA9IHRydWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaWQnOlxyXG5cdFx0XHRcdHJldHVybiBpbmNsdWRlSWQ7XHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdjaGlsZCc6XHJcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0RhdGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzUmVuZGVyZWRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNGaWx0ZXJlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHQvLyB1Z2x5IGhhY2sgOi0oXHJcblx0XHRpZiAoY29sdW1uLmlkID09PSAnc3RhZmZlbCcpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uZ2VuZXJhdG9yICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdib29sJzpcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcclxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcclxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdGNhc2UgJ2h0bWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNGb3JtYXR0ZWRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNTZWxlY3RhYmxlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnYmxvYic6XHJcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxyXG5cdFx0XHRjYXNlICdmb3JjZXVwZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2lkJzpcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdGNhc2UgJ29yZGVyJzpcclxuXHRcdFx0Y2FzZSAncGFyZW50aWQnOlxyXG5cdFx0XHRjYXNlICdwYXJlbnR0eXBlJzpcclxuXHRcdFx0Y2FzZSAncGFzc3dvcmQnOlxyXG5cdFx0XHRjYXNlICd0b2tlbic6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0aGFzTG9jYXRpb25Qcm9wZXJ0eSAoY29sdW1uLCBsb2NhdGlvbikge1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcclxuXHRcdHJldHVybiAobG9jYXRpb24gJiBjb2x1bW4ubG9jYXRpb24pICE9PSAwO1xyXG5cdH1cclxuXHJcblx0aXNFZGl0YWJsZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRpZiAoY29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0aXNTZWFyY2hhYmxlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICdwaG9uZSc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2h0bWwnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldERlZmF1bHRXZWlnaHQgKGNvbHVtbikge1xyXG5cdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJ2dldERlZmF1bHRXZWlnaHQnLCBjb2x1bW4pO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdib29sJzpcclxuXHRcdFx0Y2FzZSAnaW50JzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAncG93ZXInOlxyXG5cdFx0XHRjYXNlICdjdXJyZW50JzpcclxuXHRcdFx0XHRyZXR1cm4gMC41O1xyXG5cclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0XHRyZXR1cm4gMS41O1xyXG5cclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdodG1sJzpcclxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxyXG5cdFx0XHRcdHJldHVybiAyO1xyXG5cclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRcdHJldHVybiBbJz0nLCAnPicsICc8J107XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIFsnPicsICc8J107XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIFsnPScsICchPSddO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gcmV0dXJucyB3aGV0aGVyIHRoZSBmaXJzdCBjb2x1bW4gc2V0IGlzIGEgc3Vic2V0IG9mIHRoZSBzZWNvbmRcclxuXHRpc0NvbHVtblN1YnNldCAoZmlyc3QsIHNlY29uZCwgc2Vjb25kVHJ1ZSkge1xyXG5cdFx0aWYgKGZpcnN0ID09PSB0cnVlKSAvLyA9PT0gb3BlcmF0b3IgbmVlZGVkIGhlcmVcclxuXHRcdFx0cmV0dXJuIHNlY29uZFRydWU7XHJcblxyXG5cdFx0Ly8gd2hlbiBzZWNvbmRUcnVlIGlzIHRoZSBjYXNlIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGRlcml2ZWQgY29sdW1uc1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgZmlyc3QpIHtcclxuXHRcdFx0aWYgKCF0aGlzLmNvbnRhaW5zQ29sdW1uKGNvbHVtbiwgc2Vjb25kKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRjb250YWluc0NvbHVtbiAocmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb24pIHtcclxuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0IXRoaXMuY29udGFpbnNDb2x1bW4oXHJcblx0XHRcdFx0XHRjaGlsZENvbHVtbixcclxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1uTWFwKSB7XHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gcGFyc2VkQ29sdW1uLmNoaWxkcmVuO1xyXG5cdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZUNvbHVtbk1hcFtpdGVtVHlwZV07XHJcblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbnMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1twYXJzZWRDb2x1bW4uaWRdO1xyXG5cclxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgIXRoaXMucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjaGlsZHJlbiwgcmVzcG9uc2VDb2x1bW5NYXApKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpZmZlcmVuY2U6IGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0XHJcblx0ICogQHBhcmFtIHtBcnJheX0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyAnbWVyZ2VkJyBhbmQgJ2RpZmZlcmVuY2UnIHByb3BlcnRpZXNcclxuXHQgKi9cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdCwgc2Vjb25kKToge21lcmdlZDogUmVxdWVzdENvbHVtbnMsIGRpZmZlcmVuY2U6IFJlcXVlc3RDb2x1bW5zfSB7XHJcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxyXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogW119O1xyXG5cclxuXHRcdGlmIChzZWNvbmQgPT09IHRydWUpXHJcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiB0cnVlfTtcclxuXHJcblx0XHRjb25zdCBtZXJnZWQ6IFJlcXVlc3RDb2x1bW5zID0gY29weShmaXJzdCk7XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKGNvbHVtbiwgbWVyZ2VkKTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRkaWZmZXJlbmNlLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0bWVyZ2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XHJcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1xyXG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFkZGVkQ29sdW1uczogUmVxdWVzdENvbHVtbnMgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKFxyXG5cdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXHJcblx0XHRcdFx0YWRkZWRDb2x1bW5zLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhZGRlZENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRbY29sdW1uLmlkXTogYWRkZWRDb2x1bW5zXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cGFyc2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uKSB7XHJcblx0XHRjb25zdCBpc0xlYWYgPSB0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZyc7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGlzTGVhZiA/IHJlcXVlc3RDb2x1bW4gOiBnZXRGaXJzdFByb3BlcnR5KHJlcXVlc3RDb2x1bW4pO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGlkOiBjb2x1bW5JZCxcclxuXHRcdFx0Y2hpbGRyZW46IGlzTGVhZiA/IFtdIDogcmVxdWVzdENvbHVtbltjb2x1bW5JZF1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBNZXJnZXMgdHdvIHNldHMgb2YgcmVzcG9uc2UgY29sdW1ucy5cclxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gc2Vjb25kXHJcblx0ICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSAnbWVyZ2VkJyBhbmQgYSAnZGlmZmVyZW5jZScgcHJvcGVydHkuXHJcblx0ICovXHJcblx0bWVyZ2VSZXNwb25zZUNvbHVtbnMgKGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGNvbnN0IG1lcmdlZCA9IHt9O1xyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZmlyc3QpIHtcclxuXHRcdFx0aWYgKHNlY29uZFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBmaXJzdFtpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBtZXJnZVJlc3VsdCA9IHRoaXMubWVyZ2VSZXNwb25zZUNvbHVtbk1hcChcclxuXHRcdFx0XHRmaXJzdFtpdGVtVHlwZV0sXHJcblx0XHRcdFx0c2Vjb25kW2l0ZW1UeXBlXVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0Lm1lcmdlZDtcclxuXHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5kaWZmZXJlbmNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gc2Vjb25kKSB7XHJcblx0XHRcdGlmIChmaXJzdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xyXG5cdFx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHthcnJheX0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBkaWZmZXJlbmNlOiB0aGUgY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3QuXHJcblx0ICovXHJcblx0bWVyZ2VSZXNwb25zZUNvbHVtbk1hcCAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcclxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IGZpcnN0W2NvbHVtbklkXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xyXG5cdFx0XHRpZiAoaXNEZWZpbmVkKGZpcnN0W2NvbHVtbklkXSkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gc2Vjb25kW2NvbHVtbklkXTtcclxuXHRcdFx0ZGlmZmVyZW5jZVtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbENvbHVtbklkIChjb2x1bW5JZCkge1xyXG5cdFx0cmV0dXJuIGNvbHVtbklkLnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJztcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NDb25maWdDb2x1bW5zIChjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRpZiAodGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbih0aGlzLnBhcnNlQ29uZmlnQ29sdW1uKGNvbHVtbiksIHJlcXVlc3QpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyAoY29uZmlnQ29sdW1ucywgbG9jYWxDb2x1bW5zLCByZW1vdGVDb2x1bW5DYWxsYmFjaywgbG9jYWxDb2x1bW5DYWxsYmFjaykge1xyXG5cdFx0Y29uc3QgbG9jYWxDb2x1bW5NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGxvY2FsQ29sdW1uIG9mIGxvY2FsQ29sdW1ucylcclxuXHRcdFx0bG9jYWxDb2x1bW5NYXBbbG9jYWxDb2x1bW4uaWRdID0gbG9jYWxDb2x1bW47XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb25maWdJZCBvZiBjb25maWdDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IHBhcnNlZENvbmZpZ0lkID0gY29uZmlnSWQuc3BsaXQoUkVOREVSX0FTX1NFUEVSQVRPUik7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29uZmlnSWRbMF07XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbklkKSkge1xyXG5cdFx0XHRcdHJlbW90ZUNvbHVtbkNhbGxiYWNrKGNvbmZpZ0lkLCBjb2x1bW5JZCwgcGFyc2VkQ29uZmlnSWRbMV0pO1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gY29sdW1uIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gbG9jYWxDb2x1bW5zXHJcblx0XHRcdGlmIChsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGxvY2FsQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSk7XHJcblx0XHRcdGRlbGV0ZSBsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb25zb2xpZGF0ZUNvbHVtbnMgKGNvbmZpZ0NvbHVtbnMsIGxvY2FsQ29sdW1ucywgYWRkUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdGNvbnN0IGZpbHRlcmVkTG9jYWxDb2x1bW5zOiBMb2NhbENvbHVtbltdID0gW107XHJcblx0XHRsZXQgcmVxdWVzdENvbHVtbnMgPSBjb3B5KGFkZFJlcXVlc3RDb2x1bW5zKTtcclxuXHJcblx0XHR0aGlzLnByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMoXHJcblx0XHRcdGNvbmZpZ0NvbHVtbnMsXHJcblx0XHRcdGxvY2FsQ29sdW1ucyxcclxuXHRcdFx0KF8sIGNvbHVtbklkKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKGNvbHVtbklkLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpLCByZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdChfLCBsb2NhbENvbHVtbikgPT4ge1xyXG5cdFx0XHRcdGZpbHRlcmVkTG9jYWxDb2x1bW5zLnB1c2gobG9jYWxDb2x1bW4pO1xyXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW5zKFxyXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdFx0XHRsb2NhbENvbHVtbi52YWx1ZU9wdGlvbnMucmVxdWVzdENvbHVtbnNcclxuXHRcdFx0XHQpLm1lcmdlZDtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4ge3JlcXVlc3Q6IHJlcXVlc3RDb2x1bW5zLCBsb2NhbDogZmlsdGVyZWRMb2NhbENvbHVtbnN9O1xyXG5cdH1cclxuXHJcblx0cGFyc2VDb25maWdDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIGNvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKGNvbHVtbkFycmF5LCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW5BcnJheVswXTtcclxuXHRcdGNvbnN0IGlzTGVhZiA9IGNvbHVtbkFycmF5Lmxlbmd0aCA9PT0gMTtcclxuXHJcblx0XHRpZiAoaXNMZWFmKSB7XHJcblx0XHRcdGlmIChkZXN0aW5hdGlvbi5pbmRleE9mKGNvbHVtbklkKSA9PT0gLTEpXHJcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChjb2x1bW5JZCk7XHJcblxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uT2JqZWN0KGNvbHVtbklkLCBkZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSkge1xyXG5cdFx0XHRjb2x1bW5JbmRleCA9IGRlc3RpbmF0aW9uLnB1c2goe1xyXG5cdFx0XHRcdFtjb2x1bW5JZF06IFtdXHJcblx0XHRcdH0pIC0gMTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oXHJcblx0XHRcdGNvbHVtbkFycmF5LnNsaWNlKDEpLFxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uSWRdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmluZENvbHVtbk9iamVjdCAoY29sdW1uSWQsIGFycmF5KSB7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGFycmF5W2ldKSA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxuXHJcblx0ZmluZENvbHVtbiAoY29sdW1uSWQsIGFycmF5KSB7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGFycmF5W2ldO1xyXG5cclxuXHRcdFx0aWYgKHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0aWYgKGNvbHVtbiA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gaTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGNvbHVtbikgPT09IGNvbHVtbklkKVxyXG5cdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAtMTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDcmVhdGVSZXF1ZXN0RW50cnkgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XG5cdHJlcXVlc3RzOiBDcmVhdGVSZXF1ZXN0RW50cnlbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbXBpbGF0aW9uLFxuXHRcdHByaXZhdGUgbG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRwcml2YXRlIHBhcmFtZXRlck1hcCxcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXG5cdCkge1xuXHR9XG5cblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zKTtcblxuXHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XG5cblx0XHRyZXR1cm4gcmVxdWVzdFJlc291cmNlO1xuXHR9XG5cblx0c2V0UmVxdWVzdFBhcmVudCAocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0O1xuXG5cdFx0aWYgKHBhcmVudFR5cGUgPT09ICdWb2lkJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJlcXVlc3QucGFyZW50VHlwZSA9IHBhcmVudFR5cGU7XG5cdFx0cmVxdWVzdC5wYXJlbnRJZCA9IHt9O1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRydW4gKCkge1xuXHRcdGlmICh0aGlzLmJyZWFrdXBCeVBhcmVudCkge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpID8gcGFyZW50SWQgOiBudWxsLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gdGhpcy5jb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XG5cdFx0XHRcdGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpO1xuXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGhhc1BhcmVudCA/IHBhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR2YWxpZFJlcXVlc3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbGlkUmVxdWVzdClcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdHM7XG5cdH1cblxuXHRpbml0aWFsaXplUmVxdWVzdCAoKTogQ3JlYXRlUmVxdWVzdEVudHJ5IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0XHRcdGl0ZW1zOiB7fSxcblx0XHRcdFx0Y29sdW1uczoge31cblx0XHRcdH0sXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxuXHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0Y29sbGVjdGlvbnM6IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0W3RoaXMubG9jYWxDb2xsZWN0aW9uQ2FjaGUsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllc10sXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXh0ZW5kUmVxdWVzdCAoaXRlbUVudHJpZXMsIHJlcXVlc3RQYXJlbnRJZCwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gZGVzdGluYXRpb24ucmVxdWVzdDtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XG5cdFx0XHRcdHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdID0ge307XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXHRcdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdC5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0XHRsZXQgbGlua3M7XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJlbnRJZCAhPT0gbnVsbClcblx0XHRcdFx0XHRyZXF1ZXN0LnBhcmVudElkW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XG5cblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucy5leHBhbmQoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XG5cblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGxpbmtzID0gaXRlbVJlcXVlc3QubGlua3MgPSB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEVudHJpZXMpIHtcblx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdID0gW107XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkSWQgaW4gY2hpbGRFbnRyaWVzW2NoaWxkVHlwZV0pXG5cdFx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdLnB1c2goY2hpbGRJZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoY2hpbGRFbnRyaWVzLCBudWxsLCBkZXN0aW5hdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRDb2xsZWN0aW9uQ2FjaGUsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0SXRlbUNhY2hlLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NhbENhY2hlLFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIExvY2FsQ2FjaGVGYWN0b3J5LCBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsIEl0ZW1JZCxcblx0SXRlbVJlc291cmNlSXRlbVR5cGVNYXAsIEl0ZW1UeXBlLFxuXHRUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLFxuXHRUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQWRtaW5pc3RyYXRvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRwcml2YXRlIG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdC8vIGlkIGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXG5cdGdldEl0ZW1EZWZpbml0aW9uIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogYW55LCBvcHRpb25zOiBhbnkpIHtcblx0XHRjb25zdCBzdGF0ZUtleTogYW55ID0gdGhpcy5rZXlTZXJ2aWNlLnBhcnNlU3RhdGVLZXkoaXRlbUlkKTtcblx0XHRjb25zdCByZXN1bHQgPSB7aXRlbVR5cGU6IGl0ZW1UeXBlLCBvcHRpb25zOiBvcHRpb25zLCBpdGVtSWQ6IGl0ZW1JZH07XG5cblx0XHRpZiAoc3RhdGVLZXkgIT09IG51bGwpIHtcblx0XHRcdHN3aXRjaCAoc3RhdGVLZXkudHlwZSkge1xuXHRcdFx0XHRjYXNlICduZXcnOlxuXHRcdFx0XHRcdC8vIGlmIChzdGF0ZUtleS50ZW1wbGF0ZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRcdC8vIFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7dHlwZTogc3RhdGVLZXkudGVtcGxhdGV9O1xuXG5cdFx0XHRcdFx0cmVzdWx0Lml0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2R1cGxpY2F0ZSc6XG5cdFx0XHRcdFx0b3B0aW9ucy5kdXBsaWNhdGUgPSBzdGF0ZUtleS5pdGVtSWQ7XG5cblx0XHRcdFx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPT09IHVuZGVmaW5lZCkgLy8gdG9kbzogcmVmYWN0b3IgdGhpc1xuXHRcdFx0XHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7fTtcblxuXHRcdFx0XHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID0gc3RhdGVLZXkuaXRlbUlkO1xuXG5cdFx0XHRcdFx0cmVzdWx0Lml0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbER1cGxpY2F0ZUlkKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0cmVzdWx0Lml0ZW1JZCA9IGl0ZW1JZDtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWRkVG9UYWI6IGJvb2xlYW4pOiBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSwgZmFsc2UsIHRydWUpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdC8vIHRoaXMgaXMgb25seSByZWxldmFudCBpZiB0aGVyZSBhcmUgbm8gY29sbGVjdGlvbnMgdG8gYWRkIHRoZSBpdGVtIHRvLCBidXQgd2Ugc3RpbGwgd2FudCB0byBzYXZlIHRoZSBpdGVtXG5cdFx0XHRpZiAoYWRkVG9UYWIpXG5cdFx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2xsZWN0aW9uTWF0Y2hlcjtcblx0fVxuXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGl0bGUoaXRlbVR5cGUsIGl0ZW1JZCwgZGVmZXJSZXF1ZXN0LCB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQvLyB0b2RvIHR5cGUgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCB8IEl0ZW1FbnRyeVxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLm1haW4gOlxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UsXG5cdFx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IG51bWJlcltdLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5UXVlcnkgKGl0ZW1UeXBlOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge307XG5cblx0XHRyZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0gPSBlbnRyeU9wdGlvbnMuY29sdW1ucztcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRQYXJlbnRDb25kaXRpb24ocXVlcnksIGVudHJ5T3B0aW9ucy5wYXJlbnQpLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZW50cnlPcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldER1cGxpY2F0ZUJ5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGR1cGxpY2F0ZUlkOiBudW1iZXIsIG9wdGlvbnM6IGFueSkge1xuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zID0ge307XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0Y29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuZ2V0SXRlbURlZmluaXRpb24oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXREdXBsaWNhdGVTdGF0ZUtleShkdXBsaWNhdGVJZCksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLmdldEl0ZW1CeURlZihkZWZpbml0aW9uLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJldHVybiB2YWx1ZSBpcyBkZXBlbmRlZCBvbiB0aGUgcmV0dXJuIGxpbmtzIGJvb2xlYW4uIHRydWUgcmV0dXJucyB0aGUgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcC5cblx0ICogVGhlIHR5cGUgaGFzIHRvIGJlIGFzc2VydGVkIGF0IHVzZSBzaW5jZSB5b3Ugb25seSBrbm93IHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkxpbmtzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSb290XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1SZXNvdXJjZT4gfCBQcm9taXNlPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+fVxuXHQgKi9cblx0Z2V0TmV3UmVzb3VyY2UgKFxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0b3B0aW9uczogYW55ID0ge30sXG5cdFx0cmV0dXJuTGlua3M6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRpc1Jvb3Q6IGJvb2xlYW4gPSBmYWxzZVxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4gfCBQcm9taXNlPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtYWluID0gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5UmVzb3VyY2UubWFpbiwgb3B0aW9ucywgaXNSb290KTtcblx0XHRcdFx0Y29uc3QgbGlua2VkID0gdGhpcy5wcm9jZXNzTGlua2VkSXRlbXMoaXRlbUVudHJ5UmVzb3VyY2UubGlua2VkLCBvcHRpb25zLCB0cnVlKTsgLy8gZG8gdGhpcyBiZWZvcmVoYW5kXG5cblx0XHRcdFx0cmV0dXJuIHJldHVybkxpbmtzID8ge21haW46IG1haW4sIGxpbmtlZDogbGlua2VkfSA6IG1haW47XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25EZWYgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdGVudHJ5OiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXG5cdFx0XHRcdHJlc291cmNlOiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRGVmIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWRBcnJheTogbnVtYmVyW10sIGl0ZW1UeXBlOiBzdHJpbmcsIGxpbmtGaWVsZDogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0bGlua1R5cGU6IGxpbmtUeXBlLFxuXHRcdFx0bGlua0lkQXJyYXk6IGxpbmtJZEFycmF5LFxuXHRcdFx0bGlua0ZpZWxkOiBsaW5rRmllbGQsXG5cdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdGVudHJ5OiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRcdHJlc291cmNlOiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbiAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcblx0XHRcdFx0XHRlbnRyeSxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkZyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlKTtcblxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBgcGFyZW50YCBpbiBvcHRpb25zXG5cdCAqL1xuXHRnZXRMaW5rQ29sbGVjdGlvbiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkOiBudW1iZXIsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IGxpbmtUeXBlLCBpdGVtSWQ6IGxpbmtJZH07XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0ZW50cnlPcHRpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXG5cdFx0XHRcdFx0ZW50cnksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXApID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtUeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rSWRBcnJheSxcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkobGlua1R5cGUsIHt9LCB7fSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0TGlua0NvbGxlY3Rpb25zKFxuXHRcdFx0XHRcdFx0bGlua1R5cGUsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tsaW5rVHlwZV0sXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtQnlEZWYgKGRlZmluaXRpb246IGFueSwgaXNSb290OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24uaXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKGRlZmluaXRpb24ub3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRsZXQgbWFpbkVudHJ5OiBJdGVtRW50cnk7XG5cblx0XHRcdFx0aWYgKCg8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4gaXRlbUVudHJ5UmVzb3VyY2UpLmxpbmtlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5wcm9jZXNzTGlua2VkSXRlbXMoKDxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiBpdGVtRW50cnlSZXNvdXJjZSkubGlua2VkLCBkZWZpbml0aW9uLm9wdGlvbnMsIGZhbHNlKTtcblx0XHRcdFx0XHRtYWluRW50cnkgPSAoPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IGl0ZW1FbnRyeVJlc291cmNlKS5tYWluO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRtYWluRW50cnkgPSA8SXRlbUVudHJ5PiBpdGVtRW50cnlSZXNvdXJjZTtcblxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UobWFpbkVudHJ5LCBkZWZpbml0aW9uLm9wdGlvbnMsIGlzUm9vdCk7IC8vIGlzUm9vdFxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbG9uZUl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLCBvcHRpb25zOiBhbnkpOiBJdGVtUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbVJlc291cmNlLmVudHJ5LmNsb25lKCksIG9wdGlvbnMsIGZhbHNlKTtcblx0fVxuXG5cdGNsb25lQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UsIG9wdGlvbnM6IGFueSwgY29udmVyc2lvbk1hcDogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRsZXQgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSB1bmRlZmluZWQpXG5cdFx0XHRwYXJlbnQgPSBudWxsO1xuXG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5jbG9uZShwYXJlbnQsIGNvbnZlcnNpb25NYXApLFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRzYXZlQ3VycmVudExvY2FsQ2FjaGUgKGNsb3NlVGFiOiBib29sZWFuLCBwYXJhbWV0ZXJzOiBhbnksIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlLCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5zYXZlKGNsb3NlVGFiLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayk7XG5cdH1cblxuXHRnZXRDdXJyZW50Q29sbGVjdGlvbnMgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmNvbGxlY3Rpb25zO1xuXHR9XG5cblx0Z2V0Q3VycmVudEl0ZW1zICgpOiBJdGVtQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcztcblx0fVxuXG5cdGdldEN1cnJlbnRDaGFuZ2VzICgpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRpZiAobG9jYWxDYWNoZS5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIScpO1xuXG5cdFx0cmV0dXJuIHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRsb2NhbENhY2hlLnJvb3RJdGVtLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnNcblx0XHQpLnByb2Nlc3MoKTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW0gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnM6IGFueSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKVxuXHQpOiBJdGVtUmVzb3VyY2Uge1xuXHRcdGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogYW55KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UsIGxvY2FsQ2FjaGUpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRDb2xsZWN0aW9uIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9uczogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkNhY2hlID0gbG9jYWxDYWNoZS5jb2xsZWN0aW9ucztcblxuXHRcdGlmICghY29sbGVjdGlvbkNhY2hlLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGUuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zIChsaW5rZWRFbnRyaWVzOiBUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwW10sIG9wdGlvbnM6IGFueSwgYWRkVG9Db2xsZWN0aW9uczogYm9vbGVhbik6IEl0ZW1SZXNvdXJjZUl0ZW1UeXBlTWFwIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGVudHJ5Lml0ZW1UeXBlO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSBlbnRyeS5pdGVtRW50cmllcztcblx0XHRcdGxldCBjb2xsZWN0aW9uTWF0Y2hlcjtcblxuXHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSwgZmFsc2UsIGZhbHNlKTtcblxuXHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0ucHVzaChsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlKSk7XG5cblx0XHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0aWYgKGl0ZW1UeXBlID09PSAnUHJvamVjdG5vdGl0aWUnKSB7XG5cdFx0XHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0XHRcdFt7fSwge25vX25vdGlmaWNhdGlvbjogdHJ1ZX1dXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XG5cdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuYWRkVG9Db2xsZWN0aW9ucygpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHR9XG5cblx0Z2V0TG9jYWxDYWNoZSAoKTogTG9jYWxDYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuZ2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpKTtcblx0fVxuXG5cdHJlc2V0TG9jYWxDYWNoZSAoKSB7XG5cdFx0Y29uc3Qgb2xkTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0b2xkTG9jYWxDYWNoZS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlTWFuYWdlci5zZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCksIGxvY2FsQ2FjaGUpO1xuXHR9XG5cblx0YWRkVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgdHJ1ZSlcblx0XHRcdC5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdH1cblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIGZhbHNlKVxuXHRcdFx0LnJlbW92ZUZyb21Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xuXHR9XG5cblx0c2F2ZUxvY2FsIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5zZXREaXNwbGF5TmFtZSgpO1xuXHRcdHRoaXMuYWRkVG9Db2xsZWN0aW9ucyhbaXRlbUVudHJ5XSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oaXRlbVJlc291cmNlKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBhbnksIHJlc291cmNlT3B0aW9uczogYW55LCBwcm9jZXNzT3B0aW9ucyA9IHRydWUpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRwcm9jZXNzT3B0aW9ucyA/IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhyZXNvdXJjZU9wdGlvbnMpIDogcmVzb3VyY2VPcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBhbnksIG9wdGlvbnM6IGFueSwgaXNSb290OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvbkJlZm9yZVNhdmUnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxuXG5cdG9uU2F2ZVN1Y2Nlc3MgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvblNhdmVTdWNjZXNzJywga2V5LCBjYWxsYmFjayk7XG5cdH1cblxuXHRvblNhdmVXaXRob3V0Q2xvc2luZyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uU2F2ZVdpdGhvdXRDbG9zaW5nJywga2V5LCBjYWxsYmFjayk7XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUVudHJ5U2VydmljZSwgSXRlbVJlcXVlc3RTZXJ2aWNlLCBLZXlTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnkge1xuXHRpZDogbnVtYmVyID0gY3VycmVudElkKys7XG5cdHF1ZXJ5OiBhbnk7XG5cdGNvbHVtbnM6IENvbHVtblNldDtcblxuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cblx0aW5pdGlhbDogSXRlbUVudHJ5W10gPSBbXTtcblx0aXRlbXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0cmVzb3VyY2VzOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xuXHRkZWZlcnJlZDogYW55O1xuXHRwcm9taXNlOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT47XG5cdHJlbG9hZFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHB1YmxpYyBvcHRpb25zOiBhbnlcblx0KSB7XG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XG5cblx0XHR0aGlzLml0ZW1UeXBlID0gaXRlbVR5cGU7XG5cdFx0dGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblx0XHR0aGlzLnF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0fVxuXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnByb21pc2UgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHJlc29sdmUgKGl0ZW1FbnRyeUNvbXBvdW5kKTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zO1xuXHRcdHRoaXMuaW5pdGlhbCA9IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zO1xuXHRcdHRoaXMuaXRlbXMgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcy5zbGljZSgpO1xuXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcblxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xuXHR9XG5cblx0bWF0Y2hQYXJlbnQgKGl0ZW1UeXBlLCBpdGVtSWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKVxuXHRcdFx0Y2FsbGJhY2sobW9kKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQpOiBJdGVtRW50cnkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5Lml0ZW1JZCA9PT0gaXRlbUlkKVxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRnZXRJZEFycmF5IChhY2N1bXVsYXRvciA9IFtdKTogSXRlbUlkW10ge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZ2V0SWRBcnJheSh0aGlzLml0ZW1zLCBhY2N1bXVsYXRvcik7XG5cdH1cblxuXHRhZGRJdGVtcyAoaXRlbUVudHJpZXMsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsID0gZmFsc2UsIGNhbGxPbkFkZCA9IHRydWUsIGNhbGxPbkFjdGl2YXRlID0gdHJ1ZSk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XG5cdFx0Ly8gbG9jYWwgZW50cnkgbWlnaHQgYmUgYWRkZWQgbXVsdGlwbGUgdGltZXMgKGV4dGVuZD8pXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMubGluaztcblxuXHRcdGlmICh1cGRhdGVJbml0aWFsKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uQWRkSW5pdGlhbChlbnRyaWVzQWRkZWRUb0luaXRpYWwsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IG9uQWN0aXZhdGVJdGVtID0gY2FsbE9uQWN0aXZhdGUgJiYgY29sbGVjdGlvblJlc291cmNlcy5sZW5ndGggPiAwID9cblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXNbMF0ub3B0aW9ucy5vbkFjdGl2YXRlSXRlbSA6XG5cdFx0XHRub29wO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XG5cdFx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0XHRcdFx0aWYgKHBhcmVudENvbHVtbiAhPT0gbnVsbCAmJiBpdGVtRW50cnkubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5tb2RpZmllZFtwYXJlbnRDb2x1bW4uaWRdID0gcGFyZW50Lml0ZW1JZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdG9uQWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IHJlc3VsdDtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCBhZGRlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gYWRkZWRSZXNvdXJjZXM7XG5cblx0XHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXHR9XG5cblx0cmVtb3ZlSXRlbXMgKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pIHtcblx0XHRpZiAoaWRBcnJheS5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgaWRBcnJheSk7XG5cdFx0XHR9LFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXIgKHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pIHtcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRlbmFibGVDYWxsYmFja1xuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVSZW1vdmVkSXRlbXMgKGZpbHRlckZ1bmN0aW9uLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pdGVtcywgZmlsdGVyRnVuY3Rpb24pO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tSW5pdGlhbCA9IHVwZGF0ZUluaXRpYWwgPyB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pbml0aWFsLCBmaWx0ZXJGdW5jdGlvbikgOiBbXTtcblxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25SZW1vdmVJbml0aWFsKHJlbW92ZWRGcm9tSW5pdGlhbCwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEZyb21Nb2Qgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZClcblx0XHRcdHJlbW92ZWRGcm9tTW9kLmRlYWN0aXZhdGVSZXNvdXJjZXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2spXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmQgKG5ld0NvbHVtbnMpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xuXG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKHRoaXMsIHVuZGVmaW5lZCwgbmV3Q29sdW1ucykudGhlbihyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSXRlbXMgPSByZXNwb25zZS5pdGVtc1tpdGVtVHlwZV07XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24obmV3Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlLCB0aGlzLml0ZW1zKTtcblxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcy5jYWxsKFxuXHRcdFx0XHRcdHRoaXMsIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2VJdGVtc1tpdGVtRW50cnkuaXRlbUlkXSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW1FbnRyeS5pc0xvY2FsKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHRoaXMudXBkYXRlQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlO1xuXHR9XG5cblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XG5cblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0fVxuXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgY29sbGVjdGlvblJlc291cmNlLCBjYWxsT25BZGQ/LCB1cGRhdGVJbml0aWFsPykge1xuXHRcdGNvbnN0IGV4dGVuZGVkUXVlcnkgPSB0aGlzLmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spLm9iamVjdDtcblx0XHRjb25zdCBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRleHRlbmRlZFF1ZXJ5LFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4odGhpcy5nZXRJZEFycmF5KCkpXG5cdFx0KTtcblxuXHRcdC8vIHRvZG86IGFsc28gZG8gdGhlIGxpbWl0IGNoZWNrIGluIGJhdGNoRXh0ZW5kXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhcblx0XHRcdHRoaXMsXG5cdFx0XHQvLyBXaGVuIHRoZXJlJ3MgYSBsaW1pdCB3ZSB3YW50IHRvIGZldGNoIGFsbCBpdGVtcyBiZWNhdXNlIHdlIHdpbGwgZG8gc29ydGluZyBhbmQgc3BsaWNpbmcgb2YgdGhlIGV4Y2VzcyBpdGVtc1xuXHRcdFx0dGhpcy5vcHRpb25zLmxpbWl0ICE9PSBudWxsID9cblx0XHRcdFx0ZXh0ZW5kZWRRdWVyeSA6XG5cdFx0XHRcdGZ1bGxRdWVyeVxuXHRcdCkudGhlbihyZXNwb25zZSA9PiB7XG5cdFx0XHRcdC8vIHJlbW92ZUFic2VudEl0ZW1zKHJlc3BvbnNlKTsgVE9ETzogd2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHJlcXVlc3QgKmFsbCogdGhlIGl0ZW1zXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbdGhpcy5pdGVtVHlwZV0sXG5cdFx0XHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhpdGVtRW50cmllcywgY29sbGVjdGlvblJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBjYWxsT25BZGQsIGZhbHNlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRxdWV1ZVJlbG9hZCAoKSB7XG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0dXBkYXRlQ29sdW1ucyAoY29sdW1uRXhwYW5zaW9uKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IGNvbHVtbkV4cGFuc2lvbi5ydW4odGhpcy5jb2x1bW5zLCBmYWxzZSk7XG5cblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IGNvbHVtbkluZm8ucmVxdWVzdDtcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5JbmZvO1xuXHR9XG5cblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSAmJiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNBZGRlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xuXHR9XG5cblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0aGFzVXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZGlmaWVkSXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAobW9kaWZpZWRJdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRDdXJyZW50UmVzb3VyY2UgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0cmV0dXJuIHJlc291cmNlc1tyZXNvdXJjZXMubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJ0YWJDaGFuZ2UgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gdGhpcy5pdGVtczsgLy8gVE9ETzogaW5pdGlhbFxuXHRcdGNvbnN0IGN1cnJlbnRSZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCBuZXdSZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cblx0XHQvLyB3ZSdsbCBhZGQgdGhlIGl0ZW0gcmVzb3VyY2VzIGJhY2sgaW4gbGF0ZXJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zW2lzU3VidGFiQ2hhbmdlID8gJ2NsZWFyT25TdWJUYWJDaGFuZ2UnIDogJ2NsZWFyT25UYWJDaGFuZ2UnXSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdG5ld1Jlc291cmNlcy5wdXNoKGNvbGxlY3Rpb25SZXNvdXJjZSk7XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcylcblx0XHRcdFx0aXRlbVJlc291cmNlLmVudHJ5LnJlc291cmNlcy5wdXNoKGl0ZW1SZXNvdXJjZSk7IC8vIHJlc291cmNlcyBzaG91bGQgYmUgZW1wdHkgYnkgbm93IDotKVxuXHRcdH1cblxuXHRcdHRoaXMucmVzb3VyY2VzID0gbmV3UmVzb3VyY2VzO1xuXHR9XG5cblx0Ly8gdGhpcyBkb2Vzbid0IHJldmVydCB1cGRhdGVzXG5cdHJldmVydENoYW5nZXMgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IHJlbW92ZWRJdGVtcyA9IDxJdGVtRW50cnlbXT4gdGhpcy5nZXRSZW1vdmVkSXRlbXMoKTtcblx0XHRjb25zdCBhZGRlZEl0ZW1zID0gPEl0ZW1FbnRyeVtdPiB0aGlzLmdldEFkZGVkSXRlbXMoKTtcblxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRyZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKHJlbW92ZWRJdGVtcyk7XG5cdFx0XHRyZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKGFkZGVkSXRlbXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLmluaXRpYWwuc2xpY2UoKTtcblx0fVxuXG5cdG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0cmVzb3VyY2UucmVidWlsZE1hcCgpO1xuXHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwKTtcblx0XHR9XG5cdH1cblxuXHRnZXRVcGRhdGVkSXRlbUNvbHVtbnMgKGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xvbmUgKHBhcmVudCwgY29udmVyc2lvbk1hcD86IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBjbG9uZWRJdGVtRW50cmllcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5iYXRjaENsb25lKHRoaXMuaXRlbXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Zm9yIChjb25zdCBjbG9uZWRJdGVtRW50cnkgb2YgY2xvbmVkSXRlbUVudHJpZXMpXG5cdFx0XHRjbG9uZWRJdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyh0aGlzLm9wdGlvbnMsIHBhcmVudClcblx0XHQpXG5cdFx0XHQucmVzb2x2ZShcblx0XHRcdFx0e2NvbHVtbnM6IHRoaXMuY29sdW1ucywgaXRlbXM6IGNsb25lZEl0ZW1FbnRyaWVzfVxuXHRcdFx0KTtcblx0fVxuXG5cdGhhc0VkaXRSZXNvdXJjZXMgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLmVkaXRDb2xsZWN0aW9uKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRoYXNJdGVtRWRpdFJlc291cmNlcyAoKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMuZWRpdEl0ZW1zKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsImltcG9ydCB7IGZpbHRlckFycmF5IH0gZnJvbSAnLi4vY2xhc3Nlcy9VdGlsJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlSXRlbUlkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0aXRlbXM6IEl0ZW1SZXNvdXJjZVtdO1xyXG5cdGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwID0ge307XHJcblx0Y29sdW1ucztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHVibGljIGVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZTtcclxuXHRcdHRoaXMuaXRlbUlkTWFwID0ge307XHJcblx0XHR0aGlzLml0ZW1zID0gW107XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblxyXG5cdFx0dGhpcy5hZGRJdGVtUmVzb3VyY2VzKGVudHJ5Lml0ZW1zKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQ6IG51bWJlcik6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSWRNYXBbaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHJlYnVpbGRNYXAgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGl0ZW1JZE1hcFtpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLml0ZW1JZE1hcCA9IGl0ZW1JZE1hcDtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHsgLy8gc2hvdWxkIGJlIGZhc3RcclxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaXRlbUlkTWFwID0gdGhpcy5pdGVtSWRNYXA7XHJcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcihcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXQ6IG9wdGlvbnMuZWRpdEl0ZW1zLFxyXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogb3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRcdGxldCBpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTtcclxuXHJcblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aXRlbVJlc291cmNlID0gY29uc3RydWN0b3IoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRpdGVtcy5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGl0ZW1JZE1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIGl0ZW1FbnRyaWVzXHJcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxyXG5cdCAqXHJcblx0ICogUmV0dXJucyB0aGUgSXRlbXJlc291cmNlcyB0aGF0IHdoZXJlIHJlbW92ZWQgQ29sbGVjdGlvbi5cclxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XHJcblx0ICovXHJcblx0cmVtb3ZlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZpbHRlckFycmF5KFxyXG5cdFx0XHR0aGlzLml0ZW1zLFxyXG5cdFx0XHRpdGVtUmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbVJlc291cmNlLmVudHJ5ID09PSBpdGVtRW50cnkpIHtcclxuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNhbGxPbkFkZCAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkFkZChpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGNhbGxPblJlbW92ZSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vblJlbW92ZShpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHZvaWQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Zmlyc3QgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmZpcnN0KGNhbGxiYWNrKSAhPT0gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnkgKGFyZ3VtZW50KSB7XHJcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaXRlbVJlc291cmNlLmZpZWxkc1thcmd1bWVudF07XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJndW1lbnQoaXRlbVJlc291cmNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdG1hcCAoYXJndW1lbnQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobGVuZ3RoKTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXHJcblx0XHRcdFx0cmVzdWx0W2ldID0gYXJndW1lbnQoaXRlbVJlc291cmNlc1tpXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlZHVjZTxUPiAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgdmFsdWU6IFQpID0+IFQsIHZhbHVlOiBUKTogVCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSwgdmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXMsIGVuYWJsZUNhbGxiYWNrcyk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5leHRlbmQocXVlcnlDYWxsYmFjaywgdGhpcywgZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHQudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuQWxsSXRlbXMgPyB0aGlzLml0ZW1zIDogaXRlbVJlc291cmNlcztcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uKHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZSAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGluZGV4ID0gY29sbGVjdGlvblJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRpdGVtUmVzb3VyY2UuY2xlYXJSZXNvdXJjZSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1IYW5kbGVyLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeSc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi9JdGVtRW50cnknO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHRzYXZlICgpIHtcclxuXHRcdGlmICghdGhpcy5vcHRpb25zLmVuYWJsZVNhdmUpXHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogU2F2aW5nIGRpc2FibGVkJyk7XHJcblxyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXHJcblx0bW92ZUl0ZW1zIChpZEFycmF5LCBkZXN0aW5hdGlvbiwgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lbmFibGVTYXZlIHx8IG9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlICE9PSBkZXN0aW5hdGlvbi5lbnRyeS5pdGVtVHlwZSlcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcclxuXHJcblx0XHRjb25zdCByZW1vdmVkSXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW1SZXNvdXJjZSBvZiByZW1vdmVkSXRlbVJlc291cmNlcylcclxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChyZW1vdmVkSXRlbVJlc291cmNlLmVudHJ5KTtcclxuXHJcblx0XHRkZXN0aW5hdGlvbi5lbnRyeS5hZGRJdGVtcyhpdGVtRW50cmllcywgZGVzdGluYXRpb24sIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xyXG5cclxuXHRcdHJldHVybiByZW1vdmVkSXRlbVJlc291cmNlcztcclxuXHR9XHJcblxyXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5LCBlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcclxuXHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtIChpdGVtSWQsIGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbXMgKHZhbHVlc0FycmF5LCBlbmFibGVDYWxsYmFja3MgPSB0cnVlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaFRlbXBsYXRlKHRoaXMuZW50cnkuaXRlbVR5cGUpLnRoZW4odGVtcGxhdGUgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0XHRcdGxldCBpdGVtUmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlc0FycmF5KSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWwoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5maWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWUuZGVyaXZlZFxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIHRoaXMsIGZhbHNlLCBmYWxzZSk7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW0gKHZhbHVlcywgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhbdmFsdWVzXSwgZW5hYmxlQ2FsbGJhY2tzKS50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtbkluZm8sIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBTExfUEVSTUlTU0lPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xyXG5cdGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcclxuXHJcblx0ZGVmZXJSZXF1ZXN0ID0gZmFsc2U7XHJcblx0ZGVmZXJyZWQ7XHJcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xyXG5cclxuXHRpbml0aWFsOiBGaWVsZE1hcDtcclxuXHRtb2RpZmllZDogRmllbGRNYXA7XHJcblx0ZGVyaXZlZDogRmllbGRNYXA7XHJcblxyXG5cdHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IHN0cmluZyxcclxuXHRcdHB1YmxpYyBpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5TZXRcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGRlZmVyIChkZWZlclJlcXVlc3QpOiB0aGlzIHtcclxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xyXG5cclxuXHRcdC8vIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG1pZ2h0IGRlZmVyIHRoZSBpdGVtIGFnYWluLCBzbyBkZWxldGUgdGhlIHByb3BlcnRpZXMgZmlyc3RcclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRGVmZXJyZWQgKGluaXRpYWwsIGRlcml2ZWQsIGNvbHVtbnMpOiB0aGlzIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcblx0XHR0aGlzLnByb2Nlc3MoaW5pdGlhbCwgZGVyaXZlZCk7XHJcblx0XHR0aGlzLnJlc29sdmUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGVmZXJyZWQgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHJlamVjdCAoZXJyb3I/KTogdGhpcyB7XHJcblx0XHQvLyB0b2RvOiB0cmFuc2xhdGVkIGVycm9yXHJcblx0XHR0aGlzLmRlZmVycmVkLnJlamVjdChlcnJvcik7XHJcblxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzIChpbml0aWFsLCBkZXJpdmVkKTogdGhpcyB7XHJcblx0XHR0aGlzLmluaXRpYWwgPSBpbml0aWFsO1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcclxuXHJcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZvcm1hdHRlZDtcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMubWFpbik7XHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmRlcml2ZWQsIGZvcm1hdHRlZENvbHVtbnMuZGVyaXZlZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTG9jYWwgKGluaXRpYWwsIG1vZGlmaWVkLCBkZXJpdmVkLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHR0aGlzLmluaXRpYWwgPSB7cGVybWlzc2lvbnM6IEFMTF9QRVJNSVNTSU9OU307XHJcblxyXG5cdFx0dGhpcy51cGRhdGVGaWVsZHMoaW5pdGlhbCk7XHJcblx0XHR0aGlzLnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblx0XHR0aGlzLnNldE1vZGlmaWVkKG1vZGlmaWVkKTtcclxuXHJcblx0XHR0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xyXG5cdFx0dGhpcy5zZXRDcmVhdG9yKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRDcmVhdG9yICgpOiB0aGlzIHtcclxuXHRcdHRoaXMubW9kaWZpZWQuY3JlYXRvciA9IHRoaXMuYXV0aEludGVyZmFjZS5nZXRVc2VySWQoKTtcclxuXHRcdHRoaXMubW9kaWZpZWQuY3JlYXRlZCA9IG1vbWVudCgpO1xyXG5cdFx0dGhpcy5kZXJpdmVkWydjcmVhdG9yPmRpc3BsYXluYW1lJ10gPSB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmRDb252ZXJzaW9uTWFwKHRoaXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdC8vIHdlJ2xsIGNvcHkgbW9kaWZpZWQgdG8gcmVzdWx0LmluaXRpYWwgKGluaXRpYWwgbWF5IGJlIGEgdGVtcGxhdGUpXHJcblx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdG5ld0l0ZW1JZCxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmdldEZpZWxkcygpLCB7fSwgY29sdW1ucy5tYWluKSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmRlcml2ZWQsIHt9LCBjb2x1bW5zLmRlcml2ZWQpLFxyXG5cdFx0XHRjb2x1bW5zXHJcblx0XHQpO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkubW9kaWZpZWQgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGNsb25lZEVudHJ5LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBjbG9uZWRFbnRyeTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUodGhpcy5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkuc2V0UGFyZW50KFxyXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXHJcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xyXG5cdH1cclxuXHJcblx0cmVzZXREZXJpdmVkIChjb2x1bW5JZHMpOiB0aGlzIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJvb3Q7XHJcblx0XHRjb25zdCBmaWx0ZXJlZENvbHVtbnM6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRcdGlmIChjb2x1bW5JZHMuaW5kZXhPZihjb2x1bW4uaWQpICE9PSAtMSlcclxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRcdGlmICghY29sdW1uLmlzTGVhZilcclxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSBzZWxmLmRlcml2ZWRbY29sdW1uLnBhdGhdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHR0aGlzLnJlc291cmNlcyA9IFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZVJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlczsgLy8gb24gb2YgdGhlIGRlYWN0aXZhdGUgY2FsbGJhY2tzIG1pZ2h0IGNhbGwgY2xlYXJSZXNvdXJjZXNcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0cmVzb3VyY2UuZGVhY3RpdmF0ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0RmllbGRzICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdFxyXG5cdC8vIHRvZG86IHR5cGUgY29sdW1uRXhwYW5zaW9uUmVzdWx0XHJcblx0ZXhwYW5kIChtYWluLCBkZXJpdmVkLCBjb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxyXG5cdFx0XHR0aGlzLmRlcml2ZWQsXHJcblx0XHRcdGRlcml2ZWQsXHJcblx0XHRcdGRpZmZlcmVuY2UuZGVyaXZlZFxyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Ly8ga2V5OiBpbml0aWFsIC8gbW9kaWZpZWRcclxuXHQvLyBmaWVsZHMgKmhhdmVuJ3QqIGJlZW4gZm9ybWF0dGVkIHlldFxyXG5cdHVwZGF0ZUZpZWxkcyAoc291cmNlLCBvdmVyd3JpdGUgPSB0cnVlKTogdGhpcyB7XHJcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xyXG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQubWFpbjtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0aWYgKG1vZGlmaWVkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSBzb3VyY2VbY29sdW1uSWRdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShtb2RpZmllZCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblxyXG5cdFx0XHRpbml0aWFsW2NvbHVtbklkXSA9IHNvdXJjZVtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtVmFsdWUgKGZpZWxkcywgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcclxuXHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGZpZWxkc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0bGV0IG5ld1ZhbHVlO1xyXG5cclxuXHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRuZXdWYWx1ZSA9IHRoaXMucGFyZW50Lml0ZW1JZDtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHRuZXdWYWx1ZSA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtRmllbGRzIChjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoaW5pdGlhbCwgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUobW9kaWZpZWQsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0ICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdChcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCkgPyB7fSA6IHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzZXREaXNwbGF5TmFtZSAoKTogdGhpcyB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKCk7XHJcblxyXG5cdFx0aWYgKHJlc3VsdClcclxuXHRcdFx0dGhpcy5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGdldERpc3BsYXlOYW1lICgpIHtcclxuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XHJcblxyXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRcdHJldHVybiBmaWVsZHMudHlwZSA9PT0gJ2JlZHJpamYnID9cclxuXHRcdFx0XHRcdGZpZWxkcy5iZWRyaWpmIDogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXHJcblx0XHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcclxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcclxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0ZmllbGRzLmFjaHRlcm5hYW1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmRlcml2ZWRbJ21hdGVyaWFhbD5uYWFtJ107IC8vIFRPRE8hXHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZpZWxkc1t0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZCh0aGlzLml0ZW1UeXBlKV07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IHJldHVybkFsbCBSZXR1cm5zIGFsbCBpbml0aWFsIHZhbHVlcyBpZiB0cnVlXHJcblx0ICogQHJldHVybnMge09iamVjdH1cclxuXHQgKi9cclxuXHRnZXRDaGFuZ2VzIChyZXR1cm5BbGwgPSBmYWxzZSkge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCAmJiAhcmV0dXJuQWxsKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmdldENoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQodGhpcy5pdGVtSWQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NrYWJsZSAoKSB7XHJcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XHJcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxyXG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aGFzQ2hhbmdlcyAoKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNldE1vZGlmaWVkICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmNsb25lKFxyXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcclxuXHRcdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uLmlkXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0SW5pdGlhbCAodmFsdWVzLCBlbmFibGVDYWxsYmFja3M/KTogdGhpcyB7XHJcblx0XHRsZXQgcHJldmlvdXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMuaW5pdGlhbFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxyXG5cdCAqL1xyXG5cdHNldE1vZGlmaWVkICh2YWx1ZXM/KTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gY29sdW1ucy5yZXNwb25zZVt0aGlzLml0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB7fTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxyXG5cdFx0XHRcdFx0XHQvLyBpZiAoREVWX01PREUpXHJcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHJcblx0XHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0XHRyZXNvdXJjZS5maWVsZHMgPSBtb2RpZmllZDtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldERlcml2ZWQgKHZhbHVlcyk6IHRoaXMge1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLmRlcml2ZWRba2V5XSA9IHZhbHVlc1trZXldO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCk6IHRoaXMge1xyXG5cdFx0dGhpcy5wYXJlbnQgPSB7XHJcblx0XHRcdGl0ZW1UeXBlOiBwYXJlbnRUeXBlLFxyXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cyk6IHRoaXMge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnJlc291cmNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgaXRlbVJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaV07XHJcblxyXG5cdFx0XHRpZiAoaXRlbVJlc291cmNlICE9PSBudWxsKVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWVsZE1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcclxuXHRjb2x1bW5zOiB7W2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbn07XHJcblx0ZmllbGRzOiBGaWVsZE1hcDtcclxuXHRkZXJpdmVkOiBGaWVsZE1hcDtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZW50cnkuZGVyaXZlZDtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblx0fVxyXG5cclxuXHRpc05ld1Jlc291cmNlIChyZXNvdXJjZSkge1xyXG5cdFx0cmV0dXJuIHJlc291cmNlLmVudHJ5LmlzTG9jYWwoKSAmJlxyXG5cdFx0XHRyZXNvdXJjZS50cmFuc2FjdGlvbnMgPT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuaXNMb2NhbCgpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZSAoKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcclxuXHRcdGNvbnN0IGluZGV4ID0gcmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0cmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGUodGhpcy5lbnRyeSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBWaWV3UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0ZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge0FwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgY3JlYXRlUGF0aCwgTG9ja1NlcnZpY2V9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRmllbGRNYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4vJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xyXG5cdGxvY2FsQ29waWVzOiBGaWVsZE1hcFtdID0gW107XHJcblx0dHJhbnNhY3Rpb25zOiBudW1iZXI7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3NvcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zKTtcclxuXHJcblx0XHRlbnRyeS5zZXRNb2RpZmllZCgpO1xyXG5cclxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQ7XHJcblx0fVxyXG5cclxuXHRzdGFydCAoKSB7XHJcblx0XHRpZiAodGhpcy5sb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzID0gW107XHJcblxyXG5cdFx0dGhpcy5sb2NhbENvcGllcy5wdXNoKHRoaXMuY29weUZpZWxkcygpKTtcclxuXHR9XHJcblxyXG5cdHJvbGxiYWNrICgpIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzTmV3UmVzb3VyY2UodGhpcykgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xyXG5cdH1cclxuXHJcblx0Y29tbWl0IChpbml0aWFsKSB7XHJcblx0XHRpZiAoIWluaXRpYWwpXHJcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMucG9wKCk7XHJcblxyXG5cdFx0Ly8gY29tcGxldGVkIHRyYW5zYWN0aW9uc1xyXG5cdFx0aWYgKHRoaXMudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMudHJhbnNhY3Rpb25zID0gMDtcclxuXHJcblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxDb3B5ICgpIHtcclxuXHRcdGNvbnN0IGxvY2FsQ29waWVzID0gdGhpcy5sb2NhbENvcGllcztcclxuXHJcblx0XHRpZiAobG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0aWYgKGxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2FsQ29waWVzW2xvY2FsQ29waWVzLmxlbmd0aCAtIDFdO1xyXG5cdH1cclxuXHJcblx0Y29weUZpZWxkcyAoZGVzdGluYXRpb24/KSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cclxuXHRcdGlmIChkZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRkZXN0aW5hdGlvbiA9IHt9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5tb2RpZmllZCwgZGVzdGluYXRpb24sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cdH1cclxuXHJcblx0c2V0RmllbGRzICh2YWx1ZXMsIGNhbGxPbkNoYW5nZSkge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xyXG5cdFx0bGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHRcdGxldCBwcmV2aW91cztcclxuXHJcblx0XHRpZiAoY2FsbE9uQ2hhbmdlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNhbGxPbkNoYW5nZSA9IHRydWU7XHJcblxyXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcclxuXHRcdFx0cHJldmlvdXMgPSB0aGlzLmNvcHlGaWVsZHMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2NvbHVtbklkXTtcclxuXHJcblx0XHRcdGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2Fybignc2V0RmllbGRzOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSwgdmFsdWVzW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHRcdFx0aGFzQ2hhbmdlcyA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSAmJiBoYXNDaGFuZ2VzKVxyXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjYWxsT25DaGFuZ2UgKHByZXZpb3VzKSB7XHJcblx0XHR0aGlzLmVudHJ5LmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblx0fVxyXG5cclxuXHRzYXZlIChwYXJhbWV0ZXJzPykge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IHBhcmFtZXRlck1hcCA9IHt9O1xyXG5cclxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0XHRwYXJhbWV0ZXJNYXAsXHJcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFx0W3t9LCBwYXJhbWV0ZXJzXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGl0ZW1FbnRyeS5pc0xvY2thYmxlKCkgP1xyXG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKGl0ZW1FbnRyeSkgOlxyXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHQvLyBhZGRUb0NvbGxlY3Rpb25zIGlzIGNhbGxlZCBpbiBjaGFuZ2VzUHJvY2Vzc29yXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgZmFsc2UsIHBhcmFtZXRlck1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiLy8gc2hvdWxkIGJlIG9yZGVyZWQgYnkgZGVwZW5kZW5jeSFcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblZpZXdSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL1ZpZXdSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vRWRpdFJlc291cmNlJztcclxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlIHtcclxuXHRlbnRyaWVzOiB7XHJcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogSXRlbUVudHJ5XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgaW5zdGFuY2VvZiBJdGVtRW50cnkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0Y2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRnZXQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdFxyXG5cdGNvbnRhaW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdGlmIChwYXJlbnRUeXBlID09PSBwYXJlbnQuaXRlbVR5cGUgJiYgcGFyZW50SWQgPT0gcGFyZW50Lml0ZW1JZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQpIHtcclxuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XHJcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcclxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XHJcblx0Ly8gdG9kbzogdHJhbnNsYXRlXHJcblx0dW5kZWZpbmVkSXRlbUVycm9yID0gJ0hldCBvcGdldnJhYWdkZSBpdGVtIGJlc3RhYXQgbmlldCAvIEplIGhlYnQgbmlldCB2b2xkb2VuZGUgcmVjaHRlbiBvbSBkaXQgaXRlbSB0ZSBiZWtpamtlbic7XHJcblx0QUxMX1BFUk1JU1NJT05TID0gNztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb2x1bW5zOiB0cnVlLFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxyXG5cdFx0XHRcdHRlbXBsYXRlQ29sdW1uczoge30sXHJcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkb0V4dGVuZCA9IGZhbHNlLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcclxuXHRcdGNvbnN0IGFwaUl0ZW1JZCA9IGFwaVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcclxuXHJcblx0XHRpZiAoZG9FeHRlbmQpXHJcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmRMb2NhbENvbnZlcnNpb25NYXAgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV1bcGFyZW50SWRdLmxpbmtzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcclxuXHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIG5ld0l0ZW1JZD86IEl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdGxldCBjb252ZXJzaW9uTWFwRW50cnk7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcclxuXHJcblx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdID0gbmV3SXRlbUlkO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHR0aGlzLmV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHR9XHJcblxyXG5cdGdldENvbnZlcnNpb25WYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRiYXRjaENsb25lIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdC8vIHRoZSB0aGUgaXRlbXMgbWlnaHQgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHNvIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3RcclxuXHRcdHRoaXMuYmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyaWVzLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5LmNsb25lKGNvbnZlcnNpb25NYXApKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZSwgaW5maXgsIGxhc3ROYW1lKSB7XHJcblx0XHRyZXR1cm4gZmlyc3ROYW1lLnRyaW0oKVxyXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXHJcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XHJcblx0fVxyXG5cclxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxyXG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xyXG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcclxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XHJcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcclxuXHRcdFx0XHRyZXR1cm4gJ2ZyaWVuZGx5bmFtZSc7XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxyXG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW1pbnRlcm4nO1xyXG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcclxuXHRcdFx0Y2FzZSAnQmFyY29kZSc6XHJcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcclxuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcclxuXHRcdFx0Y2FzZSAnQmV0YWxpbmdzY29uZGl0aWUnOlxyXG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XHJcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcclxuXHRcdFx0Y2FzZSAnVGF4U2NoZW1hJzpcclxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWVncm9lcCc6XHJcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XHJcblx0XHRcdGNhc2UgJ0luaHV1cic6XHJcblx0XHRcdGNhc2UgJ0luaHV1cmdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsQ2F0JzpcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XHJcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxyXG5cdFx0XHRjYXNlICdQbGFubmluZ21hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxyXG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdTdWJwcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnVGFhayc6XHJcblx0XHRcdGNhc2UgJ1RhZyc6XHJcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcclxuXHRcdFx0Y2FzZSAnVGlqZCc6XHJcblx0XHRcdGNhc2UgJ1RpdGVsJzpcclxuXHRcdFx0Y2FzZSAnVHlwZSc6XHJcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xyXG5cdFx0XHQvLyBjYXNlICdDb250YWN0JzpcclxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcclxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXHJcblx0XHRcdFx0cmV0dXJuICdkaXNwbGF5bmFtZSc7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3IsXHJcblx0QmF0Y2hTdGF0dXMsXHJcblx0Q29sdW1uSGFuZGxlcixcclxuXHRDb2x1bW5VdGlsLFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbUVudHJ5RmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRBcGlUZW1wbGF0ZUl0ZW1UeXBlTWFwLFxyXG5cdEVudHJ5U3RhdHVzLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLFxyXG5cdFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAsXHJcblx0VGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHksIGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuLy8gdG9kbyBtYWtlIGNsYXNzXHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xyXG5cdGVudHJpZXM6IEl0ZW1DYWNoZTtcclxuXHR0ZW1wbGF0ZXM6IEFwaVRlbXBsYXRlSXRlbVR5cGVNYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHR9XHJcblxyXG5cdGZldGNoSXRlbSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55LCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiB7XHJcblx0XHRjb25zdCBlbnRyeVN0YXR1cyA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cnlTdGF0dXMuZW50cnk7XHJcblx0XHRjb25zdCBzdGF0dXMgPSBlbnRyeVN0YXR1cy5zdGF0dXM7XHJcblxyXG5cdFx0aWYgKHN0YXR1cyA9PT0gRU5UUllfU1RBVFVTLkxPQ0FMKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucylcclxuXHRcdFx0XHQudGhlbihcclxuXHRcdFx0XHRcdHRlbXBsYXRlID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgb3B0aW9ucy5wYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChpdGVtRW50cnksIHN0YXR1cywgb3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxyXG5cdCAqIEBwYXJhbSBpdGVtSWRzXHJcblx0ICogQHBhcmFtIG9wdGlvbnNcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtRW50cnlbXT59XHJcblx0ICpcclxuXHQgKiBGb3IgZXZlcnkgaXRlbWlkIGZpbmQgdGhlIHN0YXR1cyBvZiB0aGUgSXRlbUVudHJ5IGFuZCByZXNvbHZlIHRoZSBwcm9taXNlcyBzbyB0aGUgcmVzdWx0IGlzXHJcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XHJcblx0ICovXHJcblxyXG5cdGZldGNoSXRlbXMgKGl0ZW1UeXBlLCBpdGVtSWRzLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0Y29uc3QgYmF0Y2hTdGF0dXMgPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lml0ZW1JZCxcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaXRlbUlkcylcclxuXHRcdFx0YmF0Y2hTdGF0dXMuYWRkKDxFbnRyeVN0YXR1czxJdGVtRW50cnk+PiB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKSk7XHJcblxyXG5cdFx0cHJvbWlzZXMuZW50cmllcyA9IGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCk7XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpXHJcblx0XHRcdHByb21pc2VzLnJlcXVlc3RzID0gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKSwgb3B0aW9ucy5jb2x1bW5zKTtcclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLkxPQ0FMXSkpXHJcblx0XHRcdHByb21pc2VzLnRlbXBsYXRlID0gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYmF0Y2hSZXNvbHZlKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cywgb3B0aW9ucy5jb2x1bW5zLCByZXNvbHZlZCwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlQ2FjaGVkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMsIG9wdGlvbnMpOiBQcm9taXNlPEl0ZW1FbnRyeT4ge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBpdGVtRW50cnkuY29sdW1ucy5yZXF1ZXN0O1xyXG5cclxuXHRcdHN3aXRjaCAoc3RhdHVzKSB7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyksXHJcblx0XHRcdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMsIG9wdGlvbnMuY29sdW1ucykuZGlmZmVyZW5jZTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIFtpdGVtSWRdLCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGNvbHVtbkRpZmZlcmVuY2UsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0XHRkZWZhdWx0OiAvLyBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgW2l0ZW1JZF0sIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGUoXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLnJlc29sdmUocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlTG9jYWwgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBwYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBpdGVtSWRDb252ZXJzaW9uID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXHJcblx0XHRcdGl0ZW1FbnRyeS5zZXRQYXJlbnQocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkKTsgLy8gY3JlYXRlIG5ldyBvYmplY3RcclxuXHJcblx0XHRpdGVtRW50cnlcclxuXHRcdFx0LnByb2Nlc3NMb2NhbCh0ZW1wbGF0ZS5maWVsZHMsIHt9LCB7fSwgaXRlbUlkQ29udmVyc2lvbilcclxuXHRcdFx0LnNldENyZWF0b3IoKVxyXG5cdFx0XHQucmVzb2x2ZSgpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcclxuXHRcdFx0bGlua2VkOiB0aGlzLmNyZWF0ZUxvY2FsRW50cmllcyhpdGVtVHlwZSwgaXRlbUlkLCB0ZW1wbGF0ZSwgaXRlbUlkQ29udmVyc2lvbiwgbG9jYWxJdGVtQ2FjaGUpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUV4cGFuc2lvbiAoaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlKTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xyXG5cclxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcclxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBpdGVtRW50cnk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZSgpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZSAoaXRlbUVudHJ5LCBjb2x1bW5JbmZvLCByZXNwb25zZSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdGlmIChpbml0aWFsID09PSB1bmRlZmluZWQpIHsgLy8gcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0c1xyXG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XHJcblx0XHRcdHRoaXMuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXHJcblx0XHRcdGluaXRpYWwsXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpLFxyXG5cdFx0XHRjb2x1bW5JbmZvXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUZW1wbGF0ZSAoaXRlbVR5cGU6IHN0cmluZywgdGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fSwgdGVtcGxhdGVDb2x1bW5zOiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5JdGVtVHlwZSA9IGdldEZpcnN0UHJvcGVydHkodGVtcGxhdGVDb2x1bW5zKTsgLy8gaXQncyBwb3NzaWJsZSB0byBhZGQgY29sdW1ucyB0byBsaW5rZWQgaXRlbXNcclxuXHJcblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjYWNoZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRjYWNoZWRUZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdFx0KFxyXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVXRpbC5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUoXHJcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRjYWNoZWRUZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFtcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcclxuXHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgP1xyXG5cdFx0XHRcdHt9IDpcclxuXHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goY29sdW1uSXRlbVR5cGUsIHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0pXHJcblx0XHRdKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZTogYW55ID0gcmVzb2x2ZWRbMF07XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxyXG5cdFx0XHRcdFx0dGVtcGxhdGVSZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSxcclxuXHRcdFx0XHRcdHJlc29sdmVkWzFdXHJcblx0XHRcdFx0KS5tZXJnZWQ7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSB7XHJcblx0XHRcdFx0XHRmaWVsZHM6IHRlbXBsYXRlUmVzcG9uc2UuZmV0Y2hPYmplY3QoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucyksXHJcblx0XHRcdFx0XHRyZXNwb25zZTogdGVtcGxhdGVSZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uczogcmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMgJiYgdGVtcGxhdGVSZXNwb25zZS5jYWNoZWFibGUpXHJcblx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV0gPSB0ZW1wbGF0ZTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55LCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogRW50cnlTdGF0dXM8SXRlbUVudHJ5PiB7XHJcblx0XHRsZXQgaXRlbUVudHJ5O1xyXG5cclxuXHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkpIHtcclxuXHRcdFx0aXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGl0ZW1FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIGZhbHNlKTtcclxuXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XHJcblx0XHR9XHJcblxyXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGl0ZW1FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLmNvbHVtbnMsIG9wdGlvbnMuZGVmZXJSZXF1ZXN0KTtcclxuXHJcblx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdHRoaXMuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRlbnRyeTogaXRlbUVudHJ5LFxyXG5cdFx0XHRzdGF0dXM6IG9wdGlvbnMuZGVmZXJSZXF1ZXN0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlJFU09MVkVcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgaXNDb2x1bW5TdWJzZXQgPSBpdGVtRW50cnkuaXNMb2NhbCgpIHx8XHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChvcHRpb25zLmNvbHVtbnMsIGNvbHVtbnMucmVxdWVzdCwgY29sdW1ucy5yZXF1ZXN0Q29sdW1uc1RydWUpO1xyXG5cclxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0Y29sdW1ucy5yZXF1ZXN0ID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1ucy5yZXF1ZXN0LCBvcHRpb25zLmNvbHVtbnMpLm1lcmdlZDtcclxuXHJcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gaXNDb2x1bW5TdWJzZXQgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc0NvbHVtblN1YnNldClcclxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmRlZmVyKGZhbHNlKTtcclxuXHJcblx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkVYUEFORDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIHtCYXRjaFN0YXR1c30gYmF0Y2hTdGF0dXNcclxuXHQgKiBAcGFyYW0gcmVxdWVzdENvbHVtbnNcclxuXHQgKiBAcGFyYW0gcmVzb2x2ZWRcclxuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XHJcblx0ICpcclxuXHQgKiBmb3IgZXZlcnkgdHlwZSBvZiBlbnRyeSBzdGF0dXMgdGhlcmUgaXMgaW4gdGhpcyBiYXRjaCByZXF1ZXN0IG1ha2Ugc3VyZSB0aGUgZW50cmllcyBnZXQgcmVzb2x2ZWQuXHJcblx0ICogdGhlbiByZXR1cm4gYSBhcnJheSBvZiB0aGUgcmVzdWx0aW5nIEl0ZW1FbnRyeUFycmF5XHJcblx0ICovXHJcblx0YmF0Y2hSZXNvbHZlIChpdGVtVHlwZSwgYmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzLCByZXF1ZXN0Q29sdW1ucywgcmVzb2x2ZWQsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBJdGVtRW50cnlbXSB8IFByb21pc2U8YW55PiB7XHJcblx0XHRjb25zdCByZXNwb25zZSA9IHJlc29sdmVkLnJlcXVlc3RzO1xyXG5cdFx0Y29uc3QgZXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xyXG5cdFx0Y29uc3QgcmVzb2x2ZVN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XHJcblxyXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKGV4cGFuZFN0YXR1cykpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcclxuXHJcblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0XHRleHBhbmRTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMocmVzb2x2ZVN0YXR1cykpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XHJcblxyXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFx0cmVzb2x2ZVN0YXR1cywgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnJlc29sdmVSZW1vdGUoaXRlbUVudHJ5LCBjb2x1bW5JbmZvLCByZXNwb25zZSkgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSwgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG51bGwsIHJlc29sdmVkLnRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gdG9kbzogbm8gaXRlbSBlcnJvciAoe21lc3NhZ2U6IHRoaXMuaXRlbUVudHJ5U2VydmljZS51bmRlZmluZWRJdGVtRXJyb3J9KVxyXG5cdFx0cmV0dXJuIHN1Y2Nlc3MgPyBiYXRjaFN0YXR1cy5nZXRBcnJheSgpIDogdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVMb2NhbEVudHJpZXMgKFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRsb2NhbFBhcmVudElkOiBJdGVtSWQsXHJcblx0XHR0ZW1wbGF0ZSxcclxuXHRcdGl0ZW1JZENvbnZlcnNpb246IEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFtdIHtcclxuXHRcdGNvbnN0IGFwaVJlc3BvbnNlID0gdGVtcGxhdGUucmVzcG9uc2U7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvTWFwID0ge307XHJcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSB7fTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8e2l0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdfT4gPSBbXTtcclxuXHJcblx0XHQvLyBUT0RPOiBkaXNhYmxlIGNhY2hpbmc/XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGFwaVJlc3BvbnNlLml0ZW1zKSB7XHJcblx0XHRcdGlmIChpdGVtVHlwZSA9PT0gcGFyZW50VHlwZSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGNvbHVtbkluZm9NYXBbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdHRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAocGFyZW50VHlwZTIsIGxvY2FsUGFyZW50SWQyLCBhcGlQYXJlbnRJZCkgPT4ge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUyLCBpdGVtSWQ6IGxvY2FsUGFyZW50SWQyfTtcclxuXHRcdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlMl1bYXBpUGFyZW50SWRdLmxpbmtzO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xyXG5cdFx0XHRcdGlmICghbGlua3MuaGFzT3duUHJvcGVydHkoaXRlbVR5cGUpKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRcdC8vIHRoZSBpdGVtIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQgaW4gdG9wLWRvd24gb3JkZXJcclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goe2l0ZW1UeXBlOiBpdGVtVHlwZSwgaXRlbUVudHJpZXM6IGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSBbXX0pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0XHRjb25zdCBsb2NhbEl0ZW1JZCA9IGl0ZW1JZENvbnZlcnNpb25baXRlbVR5cGVdW2FwaUl0ZW1JZF07XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWxMaW5rZWQoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRsb2NhbEl0ZW1JZCxcclxuXHRcdFx0XHRcdFx0YXBpUmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGFwaUl0ZW1JZCksXHJcblx0XHRcdFx0XHRcdHBhcmVudCxcclxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mb01hcFtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Y3JlYXRlRW50cmllcyhwYXJlbnRUeXBlLCBsb2NhbFBhcmVudElkLCBhcGlSZXNwb25zZS5saW5rc1twYXJlbnRUeXBlXVswXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGRlZmVyUmVxdWVzdCA9IHRydWUsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpIHtcclxuXHRcdGNvbnN0IHRpdGxlRmllbGQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZChpdGVtVHlwZSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoe2NvbHVtbnM6IFt0aXRsZUZpZWxkXSwgZGVmZXJSZXF1ZXN0OiBkZWZlclJlcXVlc3R9KSxcclxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcclxuXHRcdCkudGhlbihcclxuXHRcdFx0Ly8gdG9kbzogSXRlbUVudHJ5IHwgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxyXG5cdFx0XHQoZW50cnk6IGFueSkgPT4ge1xyXG5cdFx0XHRcdGlmIChlbnRyeS5tYWluICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gZW50cnkubWFpbi5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmdldEZpZWxkcygpW3RpdGxlRmllbGRdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbXMgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IEl0ZW1JZFtdLCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogaXRlbUlkc30sIHtbaXRlbVR5cGVdOiBjb2x1bW5zfSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yLCBDb2x1bW5FeHBhbnNpb24sIEl0ZW1IYW5kbGVyLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlcXVlc3RTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0e2lkOiBpdGVtSWR9LFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtcyAoXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdHF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcclxuXHRcdGNvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zXHJcblx0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xyXG5cclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRjb25zdCBwYXJhbXMgPSB7XHJcblx0XHRcdHJlcXVlc3RUeXBlOiAncXVlcnknLFxyXG5cdFx0XHRjb2x1bW5zOiByZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0cXVlcnk6IHF1ZXJ5LFxyXG5cdFx0XHRpdGVtVHlwZTogJycsXHJcblx0XHRcdGFsbExpbmtJZHM6IGZhbHNlLFxyXG5cdFx0XHRsaW1pdDogbnVsbFxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsKVxyXG5cdFx0XHRwYXJhbXMuaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0cGFyYW1zLml0ZW1UeXBlID0gb3B0aW9ucy5xdWVyeUl0ZW1UeXBlO1xyXG5cdFx0XHRwYXJhbXMuYWxsTGlua0lkcyA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMubGltaXQgIT09IG51bGwpXHJcblx0XHRcdHBhcmFtcy5saW1pdCA9IG9wdGlvbnMubGltaXQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcyk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0TGlua0l0ZW1zIChwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcclxuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHQpIDpcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdFx0XHRxdWVyeSxcclxuXHRcdFx0XHRcdHtsaW5rZWRUbzogcGFyZW50VHlwZSwgcXVlcnk6IHtpZDogcGFyZW50SWRBcnJheX19XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NFeHBhbnNpb24gKHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSwgaWRBcnJheSwgcGFyZW50LCBjb2x1bW5JbmZvLCBjb2x1bW5FeHBhbnNpb24/KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0aWYgKGNvbHVtbkV4cGFuc2lvbiA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXHJcblx0XHRcdFx0Y29sdW1uSW5mby5yZXF1ZXN0Q29sdW1uc1RydWUgPyB0cnVlIDogY29sdW1uSW5mby5yZXF1ZXN0LFxyXG5cdFx0XHRcdGNvbHVtbkluZm8ucmVzcG9uc2VcclxuXHRcdFx0KTtcclxuXHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtbkluZm8uaXRlbVR5cGU7XHJcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtbkluZm8ucm9vdDtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxQcm9taXNlPEl0ZW1FbnRyeT4+ID0gW107XHJcblxyXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0bGV0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbUlkLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxyXG5cdFx0XHRcdFx0Y29sdW1uSW5mb1xyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpIHtcclxuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbkluZm9cclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUNhY2hlZEl0ZW0gKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcclxuXHJcblx0XHRyZXR1cm4gZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsID9cclxuXHRcdFx0aXRlbUVudHJ5IDpcclxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxyXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2UgKHJlc3BvbnNlLCBwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgb3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgcGFyZW50SXRlbXMgPSByZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXTtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0sXHJcblx0XHRcdFx0XHRjb2x1bW5JbmZvLFxyXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0KSA6XHJcblx0XHRcdFx0W107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdGl0ZW1zOiByZXNvbHZlZCxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtbkluZm8sXHJcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb246IGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uLyc7XG5pbXBvcnQgeyBFZGl0UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlU2VydmljZSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblxuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0ZWRpdDogZmFsc2UsXG5cdFx0XHRcdG9uQ2hhbmdlOiBub29wLFxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG5vb3Bcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Y29tcGFyZU9wdGlvbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBmaXJzdCkge1xuXHRcdFx0aWYgKGZpcnN0W2tleV0gIT09IHNlY29uZFtrZXldKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpc05ld1Jlc291cmNlIChyZXNvdXJjZTogRWRpdFJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHJlc291cmNlLmlzTG9jYWwoKSAmJlxuXHRcdFx0cmVzb3VyY2UudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IERVUExJQ0FURV9LRVlXT1JELCBEVVBMSUNBVEVfUFJFRklYLCBORVdfS0VZV09SRCwgTkVXX1BSRUZJWCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLZXlTZXJ2aWNlIHtcclxuXHRzZXBhcmF0b3I6IHN0cmluZyA9ICc6JztcclxuXHJcblx0Y29uc3RydWN0b3IgKCkge31cclxuXHJcblx0Z2V0U2luZ2xlS2V5IChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1UeXBlLmNvbmNhdCh0aGlzLnNlcGFyYXRvciwgU3RyaW5nKGl0ZW1JZCkpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbkNhY2hlS2V5IChwYXJlbnRUeXBlOiBzdHJpbmcsIHBhcmVudElkOiBudW1iZXIsIGNoaWxkVHlwZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gcGFyZW50VHlwZS5jb25jYXQodGhpcy5zZXBhcmF0b3IsIFN0cmluZyhwYXJlbnRJZCksIHRoaXMuc2VwYXJhdG9yLCBjaGlsZFR5cGUpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q3NzS2V5ICgpIHtcclxuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJ18nKTtcclxuXHR9XHJcblxyXG5cdHBhcnNlU3RhdGVLZXkgKHN0YXRlS2V5OiBzdHJpbmcpIHtcclxuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcclxuXHJcblx0XHRpZiAoc3RhdGVLZXkuaW5kZXhPZihORVdfS0VZV09SRCkgPT09IDApXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZTogJ25ldycsXHJcblx0XHRcdFx0dGVtcGxhdGU6IHN0YXRlS2V5LnN1YnN0cmluZyhORVdfS0VZV09SRC5sZW5ndGgpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YoRFVQTElDQVRFX0tFWVdPUkQpID09PSAwKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6ICdkdXBsaWNhdGUnLFxyXG5cdFx0XHRcdGl0ZW1JZDogc3RhdGVLZXkuc3Vic3RyaW5nKERVUExJQ0FURV9LRVlXT1JELmxlbmd0aClcclxuXHRcdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdldER1cGxpY2F0ZVN0YXRlS2V5IChpdGVtSWQ6IHN0cmluZyB8IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIERVUExJQ0FURV9LRVlXT1JEICsgaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Z2V0TmV3U3RhdGVLZXkgKHRlbXBsYXRlVHlwZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gTkVXX0tFWVdPUkQgKyB0ZW1wbGF0ZVR5cGU7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbElkICgpOiBJdGVtSWQge1xyXG5cdFx0cmV0dXJuICsoTkVXX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxEdXBsaWNhdGVJZCAoKTogSXRlbUlkIHtcclxuXHRcdHJldHVybiArKERVUExJQ0FURV9QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcclxuXHR9XHJcblxyXG5cdGdldFJhbmRvbVN0cmluZyAoKSB7XHJcblx0XHRyZXR1cm4gKCcnICsgTWF0aC5yYW5kb20oKSkuc3BsaXQoJy4nKVsxXS5zdWJzdHIoMCwgOCk7XHJcblx0fVxyXG5cclxuXHQvLyBub3RlOiB0aGUgY2hhbmdlcyBjb21waWxlciB1c2VzIHRoaXNcclxuXHQvLyBtaWdodCBiZSBjYWxsZWQgd2l0aCB1bmRlZmluZWQgKGl0ZW1IYW5kbGVyLmNyZWF0ZVJlcXVlc3QpXHJcblx0aXNMb2NhbElkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmlzTmV3SWQoaXRlbUlkKSB8fCB0aGlzLmlzRHVwbGljYXRlSWQoaXRlbUlkKSk7XHJcblx0fVxyXG5cclxuXHRpc05ld0lkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gTkVXX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgTkVXX1BSRUZJWC5sZW5ndGgpID09PSBORVdfUFJFRklYO1xyXG5cdH1cclxuXHJcblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtSWQgPT09IERVUExJQ0FURV9LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIERVUExJQ0FURV9QUkVGSVgubGVuZ3RoKSA9PT0gRFVQTElDQVRFX1BSRUZJWDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRJdGVtQ2FjaGUsXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdExvY2tTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZSB7XG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cdGRlZmVycmVkQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0aXRlbXM6IEl0ZW1DYWNoZTtcblx0dGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblx0Y2FsbGJhY2tzID0ge29uQmVmb3JlU2F2ZToge30sIG9uU2F2ZVN1Y2Nlc3M6IHt9LCBvblNhdmVXaXRob3V0Q2xvc2luZzoge319O1xuXG5cdGNoYW5nZXNJbnRlcnZhbDogbnVsbCB8IG51bWJlciA9IG51bGw7XG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcblx0cm9vdEl0ZW06IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCA9IGZhbHNlKSB7XG5cdFx0aWYgKGlzUm9vdClcblx0XHRcdHRoaXMucm9vdEl0ZW0gPSBpdGVtRW50cnk7XG5cblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXHRcdG9wdGlvbnMub25EZWFjdGl2YXRlID0gKF9pdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkRlYWN0aXZhdGVJdGVtKF9pdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbUVudHJ5LCBvcHRpb25zKTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9ucykge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucykge1xuXHRcdHJlc291cmNlT3B0aW9ucy5vbkFjdGl2YXRlSXRlbSA9IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkFjdGl2YXRlSXRlbShpdGVtRW50cnkpO1xuXG5cdFx0cmVzb3VyY2VPcHRpb25zLm9uRGVhY3RpdmF0ZUl0ZW0gPSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHRoaXMub25EZWFjdGl2YXRlSXRlbShpdGVtRW50cnkpO1xuXG5cdFx0cmVzb3VyY2VPcHRpb25zLm9uRGVhY3RpdmF0ZUNvbGxlY3Rpb24gPVxuXHRcdFx0KF9jb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkgPT4gdGhpcy5jbGVhckNvbGxlY3Rpb24oX2NvbGxlY3Rpb25SZXNvdXJjZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChjb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucyk7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzIChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsIHJlc291cmNlT3B0aW9ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uRW50cmllcylcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShjb2xsZWN0aW9uRW50cmllc1twYXJlbnRJZF0sIHJlc291cmNlT3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xlYXJJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkge1xuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbVJlc291cmNlLmVudHJ5KTtcblx0fVxuXG5cdGNsZWFySXRlbUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcblx0XHRpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFyQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmNsZWFyKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0Y29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJUYWJDaGFuZ2UgPSBmYWxzZSkge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKClcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpXG5cdFx0KTtcblxuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucy5jbGVhcigpO1xuXHR9XG5cblx0dXBkYXRlU2luZ2xlSXRlbXMgKGNvbnZlcnNpb25NYXApIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbnZlcnNpb25NYXApIHtcblx0XHRcdGZvciAoY29uc3Qgb2xkSXRlbUlkIGluIGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbXMuZ2V0KGl0ZW1UeXBlLCBvbGRJdGVtSWQpO1xuXG5cdFx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR0aGlzLml0ZW1zLnVwZGF0ZUl0ZW1JZChpdGVtRW50cnksIG9sZEl0ZW1JZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXG5cdHJldmVydENoYW5nZXMgKCkge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMucmVzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSlcblx0XHQpO1xuXG5cdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xuXHRcdFx0dGhpcy5sb2NrU2VydmljZS5kZWxldGVMb2NrKHRoaXMucm9vdEl0ZW0pIDpcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdH1cblxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKCkpXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmV2ZXJ0Q2hhbmdlcygpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNldE1vZGlmaWVkKCk7XG5cdFx0fVxuXHR9XG5cblx0ZGV0ZWN0Q2hhbmdlcyAoKSB7XG5cdFx0aWYgKHRoaXMuaGFzQ2hhbmdlcylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5pdGVtcy5zb21lKFxuXHRcdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKClcblx0XHRcdClcblx0XHQpXG5cdFx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0aGlzLmNvbGxlY3Rpb25zLnNvbWUoXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMuY29sbGVjdGlvbkhhc0NoYW5nZXMoY29sbGVjdGlvbkVudHJ5KVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGNvbGxlY3Rpb25IYXNDaGFuZ2VzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkge1xuXHRcdC8vIG5vIG5lZWQgdG8gY2FsbCBoYXNFZGl0UmVzb3VyY2VzIGhlcmUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdmVyeSBzaW1wbGVcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0FkZGVkSXRlbXMoKSB8fCBjb2xsZWN0aW9uRW50cnkuaGFzUmVtb3ZlZEl0ZW1zKCkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMoKSAmJiBjb2xsZWN0aW9uRW50cnkuaGFzVXBkYXRlZEl0ZW1zKCk7XG5cdH1cblxuXHRpc0xvY2thYmxlICgpIHtcblx0XHRpZiAodGhpcy5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMucm9vdEl0ZW0uaXNMb2NrYWJsZSgpO1xuXHR9XG5cblx0c2F2ZSAoY2xvc2VUYWIgPSBmYWxzZSwgcGFyYW1ldGVycywgYnJlYWtVcEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spIHtcblx0XHRyZXR1cm4gKHRoaXMuaXNMb2NrYWJsZSgpID8gdGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSkgOiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25CZWZvcmVTYXZlJywgY2xvc2VUYWIpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpO1xuXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbnMudG9BcnJheSgpLFxuXHRcdFx0XHRcdGJyZWFrVXBCeVBhcmVudCxcblx0XHRcdFx0XHRyZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oY29udmVyc2lvbk1hcCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmNsZWFyTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcblxuXHRcdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2luZ2xlSXRlbXMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25TYXZlU3VjY2VzcycsIGNvbnZlcnNpb25NYXApLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHRcdFx0dGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvblNhdmVXaXRob3V0Q2xvc2luZycsIGNvbnZlcnNpb25NYXAsIHRydWUpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja3MgKGV2ZW50LCAuLi5hcmdzKSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2FsbGJhY2tzW2V2ZW50XSlcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXN1bHQpO1xuXHR9XG5cblx0ZW5hYmxlQ2hhbmdlc1dhdGNoZXIgKCkge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdDaGFuZ2VzIHdhdGNoZXIgYWxyZWFkeSBydW5uaW5nIScsIHRoaXMpO1xuXHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IHNldEludGVydmFsKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuZGV0ZWN0Q2hhbmdlcygpKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdGRpc2FibGVDaGFuZ2VzV2F0Y2hlciAoKSB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZXNJbnRlcnZhbCk7XG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xuXHR9XG5cblx0cmVnaXN0ZXJDYWxsYmFjayAoZXZlbnQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV07XG5cdH1cblxuXHRvbkRlYWN0aXZhdGVJdGVtIChpdGVtRW50cnkpIHtcblx0XHR0aGlzLmNsZWFySXRlbUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblx0fVxuXG5cdG9uQWN0aXZhdGVJdGVtIChpdGVtRW50cnkpIHtcblx0XHR0aGlzLml0ZW1zLmFkZChpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cbn1cbiIsImltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9ja1NlcnZpY2Uge1xyXG5cdGxvY2tJdGVtcyA9IHt9O1xyXG5cdHByb21pc2VzID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRnZXRWYWx1ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG1hcCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHNldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgdmFsdWUsIG1hcCkge1xyXG5cdFx0cmV0dXJuIGNyZWF0ZVBhdGgoXHJcblx0XHRcdG1hcCxcclxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwgdmFsdWVdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9ja3MgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMubG9ja0l0ZW1zO1xyXG5cdH1cclxuXHJcblx0aGFzTG9jayAobG9ja1Rva2VuSWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5sb2NrSXRlbXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbiAmJiBsb2NrSXRlbS5pZCA9PSBsb2NrVG9rZW5JZClcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gc2hvdWxkIGJlIGZhc3QgKHdhdGNoZWQpXHJcblx0aXNMb2NrZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XHJcblxyXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduO1xyXG5cdH1cclxuXHJcblx0Z2V0TWVzc2FnZSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XHJcblxyXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24pXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2tJdGVtLm1lc3NhZ2U7XHJcblx0fVxyXG5cclxuXHQvLyBkb2VzIG5vdCByZWplY3Qgd2hlbiBhIGZvcmVpZ24gbG9jayBpcyBlbmNvdW50ZXJlZFxyXG5cdC8vIGlzIGFsc28gdXNlZCBieSBkZWxldGVMb2NrXHJcblx0ZmV0Y2hDYWNoZWRMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgbG9jayA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XHJcblxyXG5cdFx0aWYgKGxvY2sgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihsb2NrKTtcclxuXHJcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMucHJvbWlzZXMpO1xyXG5cclxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBwcm9taXNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHR9XHJcblxyXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4obG9ja0l0ZW0gPT4ge1xyXG5cdFx0XHRcdGlmIChsb2NrSXRlbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0TG9jayhpdGVtRW50cnkpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihsb2NrSXRlbSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3QobG9ja0l0ZW0ubWVzc2FnZSkgOlxyXG5cdFx0XHRcdFx0bG9ja0l0ZW0udG9rZW47XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcclxuXHRcdFx0J0xvY2t0b2tlbicsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXHJcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KFxyXG5cdFx0XHRcdFx0XHQnTG9ja3Rva2VuJyxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0dGhpcy5sb2NrSXRlbXNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LCBlcnJvciA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdGlmIChlcnJvci5jb2RlID09PSAzMDEpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRpc0ZvcmVpZ246IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3IubWVzc2FnZVxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnNldFZhbHVlKGl0ZW1FbnRyeSwgcHJvbWlzZSwgdGhpcy5wcm9taXNlcyk7XHJcblx0fVxyXG5cclxuXHRkZWxldGVMb2NrIChpdGVtRW50cnkpIHtcclxuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4oY2FjaGVkTG9jayA9PiB7XHJcblx0XHRcdFx0Ly8gdW5kZWZpbmVkOiBub3QgcmVxdWVzdGVkIHlldFxyXG5cclxuXHRcdFx0XHRpZiAoY2FjaGVkTG9jayA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHRpZiAoY2FjaGVkTG9jay5pc0ZvcmVpZ24pIHtcclxuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoJ0xvY2t0b2tlbicsIGNhY2hlZExvY2suaWQpXHJcblx0XHRcdFx0XHQudGhlbihcclxuXHRcdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJMb2NrIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBkZWxldGUgdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5jb25zdCBFTVBUWV9FTlRSWSA9IHt9O1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB7XHJcblx0cGFyZW50TWFwOiBhbnkgPSB7fTtcclxuXHRkZXN0aW5hdGlvbjogYW55ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcm9vdEl0ZW1FbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0cHJpdmF0ZSBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3MgKCkge1xyXG5cdFx0dGhpcy5wYXJlbnRNYXAgPSB0aGlzLmNyZWF0ZVBhcmVudE1hcCh0aGlzLnNpbmdsZUl0ZW1DYWNoZSk7XHJcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHRpdGVtczogdGhpcy5kZXN0aW5hdGlvblxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGl0ZW1DYWNoZS5mb3JFYWNoKFxyXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpIC8vIHdlIGRvbid0IGNhcmUgZm9yIGl0ZW1zIHRoYXQgYXJlIG5vdCBsaW5rZWQgdG8gdGhlIHJvb3QgaXRlbVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHRjb25zdCBwYXJlbnRUeXBlID0gcGFyZW50Lml0ZW1UeXBlO1xyXG5cdFx0XHRcdGNvbnN0IHBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcclxuXHJcblx0XHRcdFx0aWYgKHJlc3VsdFtwYXJlbnRUeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdID0ge307XHJcblxyXG5cdFx0XHRcdGxldCBtYXBFbnRyeSA9IHJlc3VsdFtwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRcdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0bWFwRW50cnlbcGFyZW50SWRdID0ge307XHJcblxyXG5cdFx0XHRcdG1hcEVudHJ5ID0gbWFwRW50cnlbcGFyZW50SWRdO1xyXG5cclxuXHRcdFx0XHRpZiAobWFwRW50cnlbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzSXRlbXMgKGl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxpbmtBY2N1bXVsYXRvcikge1xyXG5cdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0aWYgKGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0XHQvLyBlYWNoIGl0ZW0gb25seSBoYXMgYSBzaW5nbGUgcGFyZW50LCBzbyB3ZSBjYW4gc2FmZWx5IGRvIHRoaXNcclxuXHRcdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0ucHVzaChpdGVtSWQpO1xyXG5cclxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSA9IHRoaXMucHJvY2Vzc0l0ZW0oaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW0gKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZ2V0SXRlbXNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHRcdGNvbnN0IGNoaWxkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDb2xsZWN0aW9uc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cdFx0Y29uc3QgdmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcclxuXHRcdGNvbnN0IGxpbmtzID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRJdGVtcylcclxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY2hpbGRUeXBlLCBjaGlsZEl0ZW1zW2NoaWxkVHlwZV0sIGxpbmtzKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjaGlsZENvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5xdWVyeSAhPT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5Lml0ZW1zLCBsaW5rcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaGFzVmFsdWVzID0gaGFzUHJvcGVydGllcyh2YWx1ZXMpO1xyXG5cdFx0Y29uc3QgaGFzTGlua3MgPSBoYXNQcm9wZXJ0aWVzKGxpbmtzKTtcclxuXHJcblx0XHRpZiAoaGFzVmFsdWVzICYmIGhhc0xpbmtzKVxyXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzLCBsaW5rczogbGlua3N9O1xyXG5cclxuXHRcdGlmIChoYXNWYWx1ZXMpXHJcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXN9O1xyXG5cclxuXHRcdGlmIChoYXNMaW5rcylcclxuXHRcdFx0cmV0dXJuIHtsaW5rczogbGlua3N9O1xyXG5cclxuXHRcdHJldHVybiBFTVBUWV9FTlRSWTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SXRlbXNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5wYXJlbnRNYXBbcGFyZW50VHlwZV07XHJcblxyXG5cdFx0aWYgKG1hcEVudHJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRyZXR1cm4gbWFwRW50cnlbcGFyZW50SWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMsIGluQXJyYXkgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuY29uc3QgTUFZQkUgPSAnbWF5YmUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgZmllbGRzOiBGaWVsZE1hcCxcclxuXHRcdHB1YmxpYyBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGxcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbXBhcmVWYWx1ZXMgKHZhbHVlLCBxdWVyeVZhbHVlKSB7XHJcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5VmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZU1vbWVudE9iamVjdHMocXVlcnlWYWx1ZSwgdmFsdWUpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbihxdWVyeVZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVEdXJhdGlvbnMocXVlcnlWYWx1ZSwgdmFsdWUpO1xyXG5cclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRyZXR1cm4gcXVlcnlWYWx1ZSA9PSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdG1hdGNoUXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgc3RyaW5nIHtcclxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaExpbmtlZFRvUXVlcnkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQ29tcGxleFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoU2ltcGxlUXVlcnkodGhpcy5maWVsZHNbcXVlcnkua2V5XSwgcXVlcnkpO1xyXG5cclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBxdWVyeSEgUGFyc2VkPycpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaExpbmtlZFRvUXVlcnkgKHF1ZXJ5KSB7XHJcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cdFx0bGV0IG1hdGNoO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdG1hdGNoID0gZmFsc2U7XHJcblx0XHRlbHNlIGlmIChxdWVyeS5saW5rZWRUbyAhPT0gcGFyZW50Lml0ZW1UeXBlKVxyXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRtYXRjaCA9IHRoaXMubWF0Y2hTaW1wbGVRdWVyeShwYXJlbnQuaXRlbUlkLCBxdWVyeS5xdWVyeSk7XHJcblxyXG5cdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdHJldHVybiBxdWVyeS5ub3QgPyAhbWF0Y2ggOiBtYXRjaDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5KSB7XHJcblx0XHRjb25zdCBjb25kaXRpb25zID0gcXVlcnkuY29uZGl0aW9ucztcclxuXHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cdFx0bGV0IHRlcm1pbmFsO1xyXG5cclxuXHRcdHN3aXRjaCAocXVlcnkub3BlcmF0b3IpIHtcclxuXHRcdFx0Y2FzZSAnQU5EJzpcclxuXHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xyXG5cdFx0XHRcdHRlcm1pbmFsID0gZmFsc2U7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ09SJzpcclxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcclxuXHRcdFx0XHR0ZXJtaW5hbCA9IHRydWU7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIG9wZXJhdG9yJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xyXG5cdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMubWF0Y2hRdWVyeShjb25kaXRpb24pO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoID09PSB0ZXJtaW5hbClcclxuXHRcdFx0XHRyZXR1cm4gdGVybWluYWw7XHJcblxyXG5cdFx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxyXG5cdFx0XHRcdHJlc3VsdCA9IE1BWUJFO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoU2ltcGxlUXVlcnkgKHZhbHVlLCBxdWVyeSkge1xyXG5cdFx0Y29uc3Qga2V5ID0gcXVlcnkua2V5O1xyXG5cdFx0bGV0IHF1ZXJ5VmFsdWUgPSBxdWVyeS52YWx1ZTtcclxuXHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKSAvLyBDb3VsZCBiZSBsaW5rZWRUbyBhbiBlbXB0eSBvYmplY3RcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdSZXF1aXJlZCBmaWVsZCcsIGtleSwgJ25vdCBmb3VuZCBmb3InLCB0aGlzLml0ZW1UeXBlKTtcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChxdWVyeVZhbHVlID09PSAnTk9XJylcclxuXHRcdFx0cXVlcnlWYWx1ZSA9IG1vbWVudCgpO1xyXG5cclxuXHRcdHN3aXRjaCAocXVlcnkuY29tcGFyYXRvcikge1xyXG5cdFx0XHRjYXNlICc9JzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnIT0nOlxyXG5cdFx0XHRcdHJldHVybiAhdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnPCc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDwgcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnPD0nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8PSBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc+JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPiBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc+PSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID49IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJ0lOJzpcclxuXHRcdFx0XHRyZXR1cm4gaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGNhc2UgJ05PVCBJTic6XHJcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgY29tcGFyYXRvcjogJyArIHF1ZXJ5LmNvbXBhcmF0b3IgKyAnIGluIHF1ZXJ5ICcgKyBxdWVyeSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5lbnVtIENPTlNUQU5UUyB7XHJcblx0T0JKID0gMCxcclxuXHRTVFIgPSAxLFxyXG5cdFNFUCA9ICc6J1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xyXG5cdHF1ZXJ5OiBhbnk7XHJcblx0cGFyYW1ldGVyczogYW55O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAocXVlcnksIHBhcmFtZXRlcnM/KSB7XHJcblx0XHR0aGlzLnF1ZXJ5ID0gcXVlcnk7XHJcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWUgKHZhbHVlKSB7XHJcblx0XHQvLyBhbGdvcml0aG0gaXMgbm90IGltcG9ydGFudCwgYXMgbG9uZyBhcyBhbGwgYXJyYXlzIGFyZSBzb3J0ZWQgdGhlIHNhbWUgd2F5XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcblx0XHRcdHJldHVybiB2YWx1ZS5zbGljZSgpLnNvcnQoKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjb21wYXJlUGFyc2VkUXVlcmllcyAoYSwgYikge1xyXG5cdFx0aWYgKGFbQ09OU1RBTlRTLlNUUl0gPT09IGJbQ09OU1RBTlRTLlNUUl0pXHJcblx0XHRcdHJldHVybiAwO1xyXG5cclxuXHRcdHJldHVybiBhW0NPTlNUQU5UUy5TVFJdID4gYltDT05TVEFOVFMuU1RSXSA/IDEgOiAtMTtcclxuXHR9XHJcblxyXG5cdHBhcnNlIChxdWVyeSA9IHRoaXMucXVlcnkpIHtcclxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUxpbmtlZFRvUXVlcnkoXHJcblx0XHRcdFx0cXVlcnkubGlua2VkVG8sXHJcblx0XHRcdFx0cXVlcnkucXVlcnksXHJcblx0XHRcdFx0cXVlcnkucmV2ZXJzZSxcclxuXHRcdFx0XHRxdWVyeS5ub3RcclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAocXVlcnkubm90ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFwiTm90XCIgbm90IHN1cHBvcnRlZCcpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDdXN0b21RdWVyeShcclxuXHRcdFx0XHRxdWVyeS5jdXN0b20sXHJcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVyc1xyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTZWFyY2hRdWVyeShxdWVyeS5zZWFyY2gpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ29tcGxleFF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmNvbmRpdGlvbnMsXHJcblx0XHRcdFx0cXVlcnkub3BlcmF0b3JcclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoXHJcblx0XHRcdFx0cXVlcnkua2V5LFxyXG5cdFx0XHRcdHF1ZXJ5LnZhbHVlLFxyXG5cdFx0XHRcdHF1ZXJ5LmNvbXBhcmF0b3JcclxuXHRcdFx0KTtcclxuXHJcblx0XHRjb25zdCBrZXkgPSBnZXRGaXJzdFByb3BlcnR5KHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoa2V5ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gW3t9LCAne30nXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KGtleSwgcXVlcnlba2V5XSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlU2VhcmNoUXVlcnkgKHZhbHVlKSB7XHJcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtzZWFyY2g6IHZhbHVlW0NPTlNUQU5UUy5PQkpdfSxcclxuXHRcdFx0J1snICsgJ3NlYXJjaCcgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUXVlcnkgKGN1c3RvbSwgcGFyYW1ldGVycykge1xyXG5cdFx0aWYgKHBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIFtcclxuXHRcdFx0XHR7Y3VzdG9tOiBjdXN0b219LFxyXG5cdFx0XHRcdCdbJyArIGN1c3RvbSArICddJ1xyXG5cdFx0XHRdO1xyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlQ3VzdG9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7Y3VzdG9tOiBjdXN0b20sIHBhcmFtZXRlcnM6IHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLk9CSl19LFxyXG5cdFx0XHQnWycgKyBjdXN0b20gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDdXN0b21QYXJhbWV0ZXJzIChwYXJhbWV0ZXJzKSB7XHJcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycykuc29ydCgpO1xyXG5cclxuXHRcdGNvbnN0IHF1ZXJ5ID0ge307XHJcblx0XHRsZXQgc3RyaW5nID0gJyc7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbaV07XHJcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShwYXJhbWV0ZXJzW2tleV0pO1xyXG5cclxuXHRcdFx0cXVlcnlba2V5XSA9IHZhbHVlW0NPTlNUQU5UUy5PQkpdO1xyXG5cclxuXHRcdFx0aWYgKGkgPiAwKVxyXG5cdFx0XHRcdHN0cmluZyArPSBDT05TVEFOVFMuU0VQO1xyXG5cclxuXHRcdFx0c3RyaW5nICs9IHZhbHVlW0NPTlNUQU5UUy5TVFJdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlU2ltcGxlUXVlcnkgKGtleSwgdmFsdWUsIGNvbXBhcmF0b3I/KSB7XHJcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdGlmIChjb21wYXJhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbXBhcmF0b3IgPSBBcnJheS5pc0FycmF5KHZhbHVlW0NPTlNUQU5UUy5PQkpdKSA/ICdJTicgOiAnPSc7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2tleToga2V5LCB2YWx1ZTogdmFsdWVbQ09OU1RBTlRTLk9CSl0sIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3J9LFxyXG5cdFx0XHQnWycgKyBjb21wYXJhdG9yICsgQ09OU1RBTlRTLlNFUCArIGtleSArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VMaW5rZWRUb1F1ZXJ5IChsaW5rZWRUbywgcXVlcnksIHJldmVyc2UsIG5vdCkge1xyXG5cdFx0aWYgKHF1ZXJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHF1ZXJ5ID0ge307XHJcblxyXG5cdFx0aWYgKHJldmVyc2UgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV2ZXJzZSA9IGZhbHNlO1xyXG5cclxuXHRcdGlmIChub3QgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0bm90ID0gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHF1ZXJ5KTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7bGlua2VkVG86IGxpbmtlZFRvLCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl0sIHJldmVyc2U6IHJldmVyc2UsIG5vdDogbm90fSxcclxuXHRcdFx0J1snICsgJ2xpbmtlZFRvJyArIENPTlNUQU5UUy5TRVAgKyBsaW5rZWRUbyArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArIENPTlNUQU5UUy5TRVAgKyByZXZlcnNlICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDb21wbGV4UXVlcnkgKGNvbmRpdGlvbnMsIG9wZXJhdG9yKSB7XHJcblx0XHRpZiAob3BlcmF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0b3BlcmF0b3IgPSAnQU5EJztcclxuXHRcdGVsc2VcclxuXHRcdFx0b3BlcmF0b3IgPSBvcGVyYXRvci50b1VwcGVyQ2FzZSgpO1xyXG5cclxuXHRcdGNvbnN0IHBhcnNlZENvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhjb25kaXRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7Y29uZGl0aW9uczogcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuT0JKXSwgb3BlcmF0b3I6IG9wZXJhdG9yfSxcclxuXHRcdFx0J1snICsgb3BlcmF0b3IgKyBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUNvbmRpdGlvbnMgKGNvbmRpdGlvbnMpIHtcclxuXHRcdGxldCBwYXJzZWRDb25kaXRpb25zOiBvYmplY3RbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcXVlcnk6IG9iamVjdFtdID0gW107XHJcblx0XHRsZXQgc3RyaW5nID0gJyc7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucylcclxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XHJcblxyXG5cdFx0cGFyc2VkQ29uZGl0aW9ucyA9IHBhcnNlZENvbmRpdGlvbnMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wYXJlUGFyc2VkUXVlcmllcyhhLCBiKSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJzZWRDb25kaXRpb24gb2YgcGFyc2VkQ29uZGl0aW9ucykge1xyXG5cdFx0XHRxdWVyeS5wdXNoKHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuT0JKXSk7XHJcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9ybWF0VmFsdWUgKHZhbHVlKSB7XHJcblx0XHRsZXQgcHJvY2Vzc2VkVmFsdWU7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuY2hhckF0KDApID09PSAnJicpIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xyXG5cclxuXHRcdFx0dmFsdWUgPSB0aGlzLnBhcmFtZXRlcnNba2V5XTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFVuZGVmaW5lZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgXFwnJyArIGtleSArICdcXCcnKTtcclxuXHJcblx0XHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwga2V5ICsgJz4nICsgdmFsdWVdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsICcnICsgcHJvY2Vzc2VkVmFsdWVdO1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRhZGRBbmRDb25kaXRpb24gKHF1ZXJ5LCBjb25kaXRpb24pIHtcclxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zID09PSB1bmRlZmluZWQgfHwgcXVlcnkub3BlcmF0b3IgPT09ICdvcicpXHJcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dfTtcclxuXHJcblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxyXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcclxuXHR9XHJcblxyXG5cdGFkZE9yQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XHJcblx0XHRpZiAocXVlcnkub3BlcmF0b3IgPT09ICdvcicpXHJcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XHJcblxyXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cclxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dLCBvcGVyYXRvcjogJ29yJ307XHJcblx0fVxyXG5cclxuXHRhZGRQYXJlbnRDb25kaXRpb24gKHF1ZXJ5LCBwYXJlbnQpIHtcclxuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBxdWVyeTtcclxuXHJcblx0XHRsaW5rZWRUb1F1ZXJ5ID0ge2xpbmtlZFRvOiBwYXJlbnQuaXRlbVR5cGUsIHF1ZXJ5OiBwYXJlbnQuaXRlbUlkfTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgPyBsaW5rZWRUb1F1ZXJ5IDogdGhpcy5hZGRBbmRDb25kaXRpb24ocXVlcnksIGxpbmtlZFRvUXVlcnkpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTm90SW4gKGlkQXJyYXkpIHtcclxuXHRcdHJldHVybiB7Y29tcGFyYXRvcjogJ05PVCBJTicsIGtleTogJ2lkJywgdmFsdWU6IGlkQXJyYXl9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi9Db2x1bW5VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIHtcclxuXHRwcml2YXRlIGNvbHVtbnMgPSB7fTtcclxuXHRwcml2YXRlIGNvbHVtbkluZm9JZE1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGV4cGFuZCAoY29sdW1uSW5mbykge1xyXG5cdFx0aWYgKHRoaXMuY29sdW1uSW5mb0lkTWFwW2NvbHVtbkluZm8uaWRdKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5JbmZvLml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5VdGlsXHJcblx0XHRcdC5tZXJnZVJlcXVlc3RDb2x1bW5zKHRoaXMuY29sdW1uc1tpdGVtVHlwZV0sIGNvbHVtbkluZm8ucmVxdWVzdClcclxuXHRcdFx0Lm1lcmdlZDtcclxuXHJcblx0XHR0aGlzLmNvbHVtbkluZm9JZE1hcFtjb2x1bW5JbmZvLmlkXSA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXQgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1ucztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2xsZWN0aW9uSGFuZGxlciwgSXRlbUhhbmRsZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENvbHVtblNldEZhY3RvcnksXHJcblx0SXRlbUVudHJ5RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBGaWVsZE1hcCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNvY2tldE1lc3NhZ2VIYW5kbGVyIHtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdG9uTWVzc2FnZVJlY2VpdmVkIChtZXNzYWdlOiBhbnkpOiBhbnkge1xyXG5cdFx0c3dpdGNoIChtZXNzYWdlLmJvZHkuZXZlbnRUeXBlKSB7XHJcblx0XHRcdGNhc2UgJ3VwZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdjcmVhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnZGVsZXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2xpbmtUbyc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTGlua01vdmUoLyogbWVzc2FnZSAqLyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRNZXNzYWdlVmFsdWVzICh2YWx1ZXMsIGNvbHVtbnMpOiBGaWVsZE1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXHJcblx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbnNbY29sdW1uSWRdLnR5cGUsIHZhbHVlc1tjb2x1bW5JZF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2xsZWN0aW9uTWFwIChpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1tpdGVtSWQ6IG51bWJlcl06IENvbGxlY3Rpb25NYXRjaFJlc3VsdH0gPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xyXG5cdFx0XHRjb25zdCBpdGVtID0gaXRlbXNbaXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbS5wYXJlbnQgIT09IG51bGwgPyBpdGVtLnBhcmVudCA6IHt9O1xyXG5cclxuXHRcdFx0cmVzdWx0W2l0ZW1JZF0gPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlGaXR0aW5nSXRlbShcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0aGlzLmZvcm1hdE1lc3NhZ2VWYWx1ZXMoaXRlbS52YWx1ZXMsIGNvbHVtbnMpLFxyXG5cdFx0XHRcdHBhcmVudFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRncm91cEJ5Q29sbGVjdGlvbklkIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zW3N0YXR1c10pIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXHJcblx0XHRcdFx0XHRcdFx0Zml0dGluZzogW10sXHJcblx0XHRcdFx0XHRcdFx0bm90Zml0dGluZzogW10sXHJcblx0XHRcdFx0XHRcdFx0bWF5YmU6IFtdXHJcblx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF1bc3RhdHVzXS5wdXNoKFxyXG5cdFx0XHRcdFx0XHRzdGF0dXMgPT09ICdmaXR0aW5nJyA/IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCkgOiBpdGVtSWRcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RDb2x1bW5zIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nQ29sbGVjdGlvbnMgPSBjb2xsZWN0aW9ucy5maXR0aW5nO1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nQ29sbGVjdGlvbiBvZiBmaXR0aW5nQ29sbGVjdGlvbnMpXHJcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChmaXR0aW5nQ29sbGVjdGlvbi5jb2x1bW5zKTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xyXG5cdH1cclxuXHJcblx0ZGVmZXJFbnRyeSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBkZWZlcnJlZCA9IGl0ZW1FbnRyeS5kZWZlcnJlZDtcclxuXHJcblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcihmYWxzZSk7XHJcblxyXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UudGhlbihcclxuXHRcdFx0dGhpcy5kZWZlckVudHJ5LmJpbmQodGhpcyksXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NNZXNzYWdlIChib2R5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1UeXBlLCBib2R5Lml0ZW1zW2l0ZW1UeXBlXSwgYm9keS5jb2x1bW5zW2l0ZW1UeXBlXSk7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbnMoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZFN0cmluZyBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZFN0cmluZyk7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9ICtpdGVtSWRTdHJpbmc7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoaXRlbUVudHJ5KSk7XHJcblx0XHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2l0ZW1JZF0uZml0dGluZy5sZW5ndGggPT09IDApXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKFxyXG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChpdGVtVHlwZSwgaXRlbUlkLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIGZhbHNlKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkpOyAvLyBjb2xsZWN0aW9uTWFwIG1pZ2h0IGNvbnRhaW4gJ21heWJlJyBtYXRjaGVzXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IHJlcXVlc3RJZHN9LCByZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2UoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSAoYm9keSkge1xyXG5cdFx0Y29uc3QgaXRlbXMgPSBib2R5Lml0ZW1zLkZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmU7XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGZ1bmN0aW9uSWQgPSBpdGVtc1tpdGVtSWRdLnBhcmVudC5pdGVtSWQ7XHJcblx0XHRcdGNvbnN0IGZ1bmN0aW9uRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgZnVuY3Rpb25JZCk7XHJcblxyXG5cdFx0XHRpZiAoZnVuY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGZ1bmN0aW9uRW50cnkuY29sdW1ucy5yZXNwb25zZS5GdW5jdGllLm5ld2NoYW5nZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShmdW5jdGlvbkVudHJ5KSk7XHJcblx0XHRcdHJlcXVlc3RJZHMucHVzaChmdW5jdGlvbklkKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoJ0Z1bmN0aWUnLCB7aWQ6IHJlcXVlc3RJZHN9LCB7RnVuY3RpZTogWyduZXdjaGFuZ2VzJ119KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkcyA9IHJlc3BvbnNlLmxpbmtzLkZ1bmN0aWU7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlc3BvbnNlSWRzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgaXRlbUlkKTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0XHRcdFx0e30sXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25zdCByZXNwb25zZVZhbHVlID0gcmVzcG9uc2UuZmV0Y2hWYWx1ZSgnRnVuY3RpZScsIGl0ZW1JZCwgJ25ld2NoYW5nZXMnKTtcclxuXHJcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VWYWx1ZSA9PT0gcHJldmlvdXMubmV3Y2hhbmdlcylcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0XHQuc2V0SW5pdGlhbCh7bmV3Y2hhbmdlczogcmVzcG9uc2VWYWx1ZX0sIHRydWUpXHJcblx0XHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXHJcblx0XHRcdFx0XHRcdC5yZXNvbHZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlUmVzcG9uc2UgKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xyXG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVxdWVzdElkcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cdFx0XHRjb25zdCBpc05ldyA9IGl0ZW1FbnRyeS5pbml0aWFsID09PSB1bmRlZmluZWQ7XHJcblx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xyXG5cclxuXHRcdFx0XHRpZiAoaXNOZXcpXHJcblx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgZGVyaXZlZCA9IHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpO1xyXG5cclxuXHRcdFx0aWYgKGlzTmV3KVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoZmllbGRzLCBkZXJpdmVkLCBjb2x1bW5JbmZvKTtcclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucywgdHJ1ZSk7XHJcblx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRcdFx0e30sXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0aWYgKGV4cGFuc2lvblJlc3VsdCAhPT0gbnVsbClcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoZmllbGRzLCBkZXJpdmVkLCBleHBhbnNpb25SZXN1bHQpO1xyXG5cclxuXHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0XHRcdC5zZXREZXJpdmVkKGRlcml2ZWQpXHJcblx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcywgZmFsc2UpXHJcblx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxyXG5cdFx0XHRcdFx0LnJlc29sdmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlKSB7XHJcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xyXG5cclxuXHRcdGlmIChib2R5Lml0ZW1UeXBlID09PSAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZScpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlKGJvZHkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKGJvZHkpLnRoZW4oXHJcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVVcGRhdGUgKG1lc3NhZ2UpIHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UuYm9keSkudGhlbihcclxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVEZWxldGUgKG1lc3NhZ2UpIHtcclxuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgYm9keS5pdGVtcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUNvbnRhaW5pbmdJdGVtKGJvZHkuaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xyXG5cclxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgaXRlbXM6IFtdfTtcclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdLml0ZW1zLnB1c2goaXRlbUlkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdG1hcEVudHJ5LmNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMobWFwRW50cnkuaXRlbXMsIG51bGwsIHRydWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE8hXHJcblx0aGFuZGxlTGlua01vdmUgKCkge31cclxuXHJcbi8qXHRoYW5kbGVMaW5rTW92ZSAobWVzc2FnZSkge1xyXG5cdFx0cHJvY2Vzc01lc3NhZ2UoXHJcblx0XHRcdG1lc3NhZ2UsXHJcblx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdC8vIGZpdHMgaW4gdGhpcyBjb2xsZWN0aW9uLCB0b2RvOiBnZXQgdGhlIG9sZCBjb2xsZWN0aW9uIGl0IGJlbG9uZ2VkIHRvXHJcblx0XHRcdFx0Y29sbGVjdGlvbi5tb3ZlSXRlbXMoaXRlbUVudHJpZXMsIG51bGwsIHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHQvLyBtYXliZSBmaXRzXHJcblx0XHRcdFx0Ly8gdG9kbzogYWxzbyByZW1vdmUgdGhlbSBmcm9tIHRoZSBvbGQgY29sbGVjdGlvblxyXG5cdFx0XHRcdGNvbGxlY3Rpb24uZXh0ZW5kKGFuZ3VsYXIuaWRlbnRpdHksIGZhbHNlLCBmYWxzZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpZHMpIHtcclxuXHRcdFx0XHQvLyBub3QgZml0dGluZyBpbiB0aGlzIGNvbGxlY3Rpb24sIHJlbW92ZSBpdCA/XHJcblx0XHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhpZHMsIG51bGwsIG1lc3NhZ2UpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuKi9cclxufVxyXG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaUZvcm1hdHRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVxdWVzdFNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcclxuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGF0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlU2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mbyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5VdGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQWRtaW5pc3RyYXRvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlcXVlc3RTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9LZXlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Mb2NrU2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyJztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1NvY2tldE1lc3NhZ2VIYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9VdGlsJztcclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHJlc3BvbnNlOiBhbnkpIHtcclxuXHRcdHJldHVybiBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3IodGhpcy5hcGlGb3JtYXR0ZXIsIHJlc3BvbnNlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQmF0Y2hTdGF0dXMgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXNGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChnZXRJdGVtSWQ6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gSXRlbUlkLCBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8SXRlbUVudHJ5Pik6IEJhdGNoU3RhdHVzIHtcclxuXHRcdHJldHVybiBuZXcgQmF0Y2hTdGF0dXMoXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdGdldEl0ZW1JZCxcclxuXHRcdFx0Z2V0UHJvbWlzZVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tICcuLyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKTogQ2hhbmdlc0NvbXBpbGF0aW9uIHtcclxuXHRcdHJldHVybiBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uKFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRcdHNpbmdsZUl0ZW1zLFxyXG5cdFx0XHRjb2xsZWN0aW9uc1xyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRBcGlGb3JtYXR0ZXIsXHJcblx0Q2hhbmdlc1Byb2Nlc3NvcixcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdEl0ZW1IYW5kbGVyXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpOiBDaGFuZ2VzUHJvY2Vzc29yIHtcclxuXHRcdHJldHVybiBuZXcgQ2hhbmdlc1Byb2Nlc3NvcihcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkNhY2hlKFxyXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIEl0ZW1FbnRyeVNlcnZpY2UsIEl0ZW1SZXF1ZXN0U2VydmljZSwgS2V5U2VydmljZSwgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuLi9tb2RlbHMvJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMpOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnkoXHJcblx0XHRcdHRoaXMsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbk1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uTWF0Y2hlcihcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRcdGNvbGxlY3Rpb25DYWNoZXMsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRWRpdFJlc291cmNlLCBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVkaXRDb2xsZWN0aW9uKVxyXG5cdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UoXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25WaWV3UmVzb3VyY2UodGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogYW55IHwgYm9vbGVhbiwgcmVzcG9uc2VDb2x1bW5zOiBhbnkpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uRXhwYW5zaW9uKFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mb0ZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yICgpIHt9XHJcblxyXG5cdGNvbnN0cnVjdCAoYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcGFyZW50OiBDb2x1bW5JbmZvKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbHVtbkluZm8oYXBpQ29sdW1uLCBwYXJlbnQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtblNldEZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcclxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXHJcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxyXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcclxuXHRcdGVuYWJsZUNhY2hpbmc/LFxyXG5cdFx0aW5jbHVkZUlkQ29sdW1uP1xyXG5cdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnJlc29sdmUocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nLCBpbmNsdWRlSWRDb2x1bW4pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlUmVxdWVzdCwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGNvbXBpbGF0aW9uLCBjb2xsZWN0aW9uRW50cmllcywgcGFyYW1ldGVyTWFwLCBicmVha3VwQnlQYXJlbnQgPSBmYWxzZSkge1xyXG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHRjb21waWxhdGlvbixcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXHJcblx0XHRcdHBhcmFtZXRlck1hcCxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XHJcblx0XHRyZXR1cm4gbmV3IEl0ZW1DYWNoZSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtblNldFN0dWIpIHtcclxuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KFxyXG5cdFx0XHR0aGlzLnByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuYXV0aEludGVyZmFjZSxcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHRjb2x1bW5TZXRTdHViXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0TG9jYWxMaW5rZWQgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0bG9jYWxJdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXHJcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcclxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgY29sdW1uU2V0KTtcclxuXHJcblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucHJvY2Vzc0xvY2FsKGluaXRpYWwsIHt9LCB7fSwgY29udmVyc2lvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RMb2NhbCAoXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHRlbXBsYXRlOiBhbnksXHJcblx0XHRtb2RpZmllZDogRmllbGRNYXAsXHJcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbCxcclxuXHRcdGNvbnZlcnNpb25NYXA/LFxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb252ZXJzaW9uTWFwID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXHJcblx0XHRcdHRlbXBsYXRlLmNvbHVtbnMsXHJcblx0XHQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5wcm9jZXNzTG9jYWwodGVtcGxhdGUuZmllbGRzLCBtb2RpZmllZCwgZGVyaXZlZCwgY29udmVyc2lvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3REZWZlcnJlZCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhblxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnlTdHViID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeVN0dWIuZGVmZXIoZGVmZXJSZXF1ZXN0KTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5U3R1YjtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXHJcblx0XHRjb2x1bW5JbmZvOiBDb2x1bW5TZXRcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0Y29sdW1uSW5mby5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXHJcblx0XHRcdGNvbHVtbkluZm8sXHJcblx0XHQpLnByb2Nlc3MoXHJcblx0XHRcdGluaXRpYWwsIC8vIGNhbiBhbHNvIGJlIGEgdGVtcGxhdGVcclxuXHRcdFx0ZGVyaXZlZCxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgSXRlbVJlc291cmNlU2VydmljZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEVkaXRSZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zKSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRpZiAob3B0aW9ucy5lZGl0KSB7XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBFZGl0UmVzb3VyY2UoXHJcblx0XHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlciwgdGhpcy5sb2NrU2VydmljZSwgdGhpcy5jaGFuZ2VzUHJvY2Vzc29yLCB0aGlzLmVycm9ySGFuZGxlciwgdGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSwgb3B0aW9uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBWaWV3UmVzb3VyY2UoXHJcblx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMpOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lZGl0KSB7XHJcblx0XHRcdHJldHVybiBuZXcgRWRpdFJlc291cmNlKFxyXG5cdFx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdFx0aXRlbUVudHJ5LCBvcHRpb25zXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFZpZXdSZXNvdXJjZShcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0TG9jYWxDYWNoZSxcclxuXHRMb2NrU2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdEl0ZW1SZXNvdXJjZUZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpIHtcclxuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0IChyb290SXRlbTogSXRlbUVudHJ5LCBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUpIHtcclxuXHRcdHJldHVybiBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uKHJvb3RJdGVtLCBzaW5nbGVJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgUXVlcnlNYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXJcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiBRdWVyeU1hdGNoZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBRdWVyeU1hdGNoZXIoXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0ZmllbGRzLFxyXG5cdFx0XHRwYXJlbnRcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXJGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHF1ZXJ5LCBwYXJhbWV0ZXJzPyk6IFF1ZXJ5UGFyc2VyIHtcclxuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpIHtcclxuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXNGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdEZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5JztcclxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRBcGlSZXF1ZXN0U2VydmljZSxcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdENvbHVtbkNhY2hlLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5VdGlsLFxuXHRJdGVtQWRtaW5pc3RyYXRvcixcblx0SXRlbUVudHJ5U2VydmljZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0SXRlbVJlc291cmNlU2VydmljZSxcblx0S2V5U2VydmljZSxcblx0TG9ja1NlcnZpY2UsXG5cdFF1ZXJ5U2VydmljZSxcblx0U29ja2V0TWVzc2FnZUhhbmRsZXJcbn0gZnJvbSAnLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSxcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5JbmZvRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1FbnRyeUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdExvY2FsQ2FjaGVGYWN0b3J5LFxuXHRNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRRdWVyeVBhcnNlckZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gJy4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSbUNvcmUge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGtleVNlcnZpY2U6IEtleVNlcnZpY2U7XG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xuXHRjb2x1bW5VdGlsOiBDb2x1bW5VdGlsO1xuXG5cdGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5O1xuXG5cdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2U7XG5cdGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2U7XG5cblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xuXHRpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZTtcblx0Y29sdW1uQ2FjaGU6IENvbHVtbkNhY2hlO1xuXHRjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyO1xuXG5cdGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5O1xuXG5cdGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcjtcblx0Y29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyO1xuXHRsb2NrU2VydmljZTogTG9ja1NlcnZpY2U7XG5cdGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk7XG5cblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcblx0aXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeTtcblx0cmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk7XG5cdGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3Rvcnk7XG5cdGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeTtcblx0Y3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5O1xuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XG5cdG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XG5cdHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5O1xuXHRiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeTtcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xuXG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblxuXHQvKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGgqL1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS4xLjUnO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5rZXlTZXJ2aWNlID0gbmV3IEtleVNlcnZpY2UoKTtcblx0XHR0aGlzLnF1ZXJ5U2VydmljZSA9IG5ldyBRdWVyeVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xuXG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblxuXHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UgPSBuZXcgQXBpUmVxdWVzdFNlcnZpY2UoZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZSwgdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UodGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UgPSBuZXcgSXRlbVJlc291cmNlU2VydmljZSgpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5ID0gbmV3IEl0ZW1DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSA9IG5ldyBCYXRjaFN0YXR1c0ZhY3RvcnkocHJvbWlzZUludGVyZmFjZSk7XG5cblx0XHR0aGlzLmNvbHVtbkNhY2hlID0gbmV3IENvbHVtbkNhY2hlKHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5IYW5kbGVyID0gbmV3IENvbHVtbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSA9IG5ldyBDb2x1bW5JbmZvRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcblx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeShcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIgPSBuZXcgSXRlbUhhbmRsZXIodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UgPSBuZXcgSXRlbVJlcXVlc3RTZXJ2aWNlKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IG5ldyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlKHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLnF1ZXJ5U2VydmljZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkgPSBuZXcgQ3JlYXRlUmVxdWVzdEZhY3RvcnkoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSh0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkpO1xuXHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgPSBuZXcgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkoKTtcblxuXHRcdHRoaXMuaXRlbUFkbWluaXN0cmF0b3IgPSBuZXcgSXRlbUFkbWluaXN0cmF0b3IoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMubG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0XHRsb2NhbENhY2hlTWFuYWdlcixcblx0XHRcdHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2Vcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wICgpIHtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5ICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL21haW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==