@rentman/rm-core 1.1.8-3 → 1.1.8

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
@@ -1118,36 +1118,36 @@ var ChangesCompilation_ChangesCompilation = /** @class */ (function () {
1118
1118
  var parent_2 = collectionEntry.parent;
1119
1119
  if (parent_2 === null)
1120
1120
  parent_2 = this.getDefaultParent();
1121
- // if (collectionEntry.hasEditResources()) {
1122
- var addedItems = void 0;
1123
- var removedItems = void 0;
1124
- if (collectionEntry.isLocal()) {
1125
- addedItems = collectionEntry.items;
1126
- removedItems = [];
1127
- }
1128
- else {
1129
- addedItems = collectionEntry.getAddedItems();
1130
- removedItems = collectionEntry.getRemovedItems();
1131
- }
1132
- for (var _a = 0, addedItems_1 = addedItems; _a < addedItems_1.length; _a++) {
1133
- var addedItem = addedItems_1[_a];
1134
- if (addedItem.isLocal())
1135
- this.addCreateEntry(addedItem);
1136
- else
1137
- this.addMoveEntry(addedItem);
1138
- }
1139
- for (var _b = 0, removedItems_1 = removedItems; _b < removedItems_1.length; _b++) {
1140
- var removedItem = removedItems_1[_b];
1141
- this.addDeleteEntry(removedItem, parent_2.itemId, parent_2.itemType);
1121
+ if (collectionEntry.hasEditResources()) {
1122
+ var addedItems = void 0;
1123
+ var removedItems = void 0;
1124
+ if (collectionEntry.isLocal()) {
1125
+ addedItems = collectionEntry.items;
1126
+ removedItems = [];
1127
+ }
1128
+ else {
1129
+ addedItems = collectionEntry.getAddedItems();
1130
+ removedItems = collectionEntry.getRemovedItems();
1131
+ }
1132
+ for (var _a = 0, addedItems_1 = addedItems; _a < addedItems_1.length; _a++) {
1133
+ var addedItem = addedItems_1[_a];
1134
+ if (addedItem.isLocal())
1135
+ this.addCreateEntry(addedItem);
1136
+ else
1137
+ this.addMoveEntry(addedItem);
1138
+ }
1139
+ for (var _b = 0, removedItems_1 = removedItems; _b < removedItems_1.length; _b++) {
1140
+ var removedItem = removedItems_1[_b];
1141
+ this.addDeleteEntry(removedItem, parent_2.itemId, parent_2.itemType);
1142
+ }
1142
1143
  }
1143
- // }
1144
- // if (collectionEntry.hasItemEditResources()) {
1145
- var updatedItems = collectionEntry.getUpdatedItems();
1146
- for (var _c = 0, updatedItems_1 = updatedItems; _c < updatedItems_1.length; _c++) {
1147
- var updatedItem = updatedItems_1[_c];
1148
- this.addUpdateEntry(updatedItem);
1144
+ if (collectionEntry.hasItemEditResources()) {
1145
+ var updatedItems = collectionEntry.getUpdatedItems();
1146
+ for (var _c = 0, updatedItems_1 = updatedItems; _c < updatedItems_1.length; _c++) {
1147
+ var updatedItem = updatedItems_1[_c];
1148
+ this.addUpdateEntry(updatedItem);
1149
+ }
1149
1150
  }
1150
- // }
1151
1151
  }
1152
1152
  };
1153
1153
  return ChangesCompilation;
@@ -1419,15 +1419,9 @@ var ChangesProcessor_ChangesProcessor = /** @class */ (function () {
1419
1419
  continue;
1420
1420
  if (updatedColumns.id !== undefined)
1421
1421
  collectionEntry.onItemsCreated(conversionMap[collectionEntry.itemType]);
1422
- // when updating an item to refer to a newly created item, the updated item will *not* be added to
1423
- // single items (e.g. moving a function to a newly created function group)
1424
- for (var _a = 0, _b = collectionEntry.items; _a < _b.length; _a++) {
1425
- var itemEntry = _b[_a];
1426
- itemEntry.updateItemFields(conversionMap);
1427
- }
1428
1422
  }
1429
- for (var _c = 0, singleItems_1 = singleItems; _c < singleItems_1.length; _c++) {
1430
- var itemEntry = singleItems_1[_c];
1423
+ for (var _a = 0, singleItems_1 = singleItems; _a < singleItems_1.length; _a++) {
1424
+ var itemEntry = singleItems_1[_a];
1431
1425
  var parent_2 = itemEntry.parent;
1432
1426
  itemEntry.updateItemFields(conversionMap);
1433
1427
  if (parent_2 !== null) {
@@ -4313,11 +4307,10 @@ var EditResource_EditResource = /** @class */ (function (_super) {
4313
4307
  this.localCopies = [];
4314
4308
  this.localCopies.push(this.copyFields());
4315
4309
  };
4316
- EditResource.prototype.rollback = function (callOnDeactivate) {
4317
- if (callOnDeactivate === void 0) { callOnDeactivate = false; }
4310
+ EditResource.prototype.rollback = function () {
4318
4311
  var itemEntry = this.entry;
4319
4312
  this.apiFormatter.copyFields(this.localCopies.pop(), itemEntry.modified, itemEntry.columns.main);
4320
- if (callOnDeactivate && this.isNewResource(this) && this.localCopies.length === 0)
4313
+ if (this.isNewResource(this) && this.localCopies.length === 0)
4321
4314
  this.deactivate();
4322
4315
  };
4323
4316
  EditResource.prototype.commit = function (initial) {
@@ -5584,12 +5577,12 @@ var LocalCache_LocalCache = /** @class */ (function () {
5584
5577
  LocalCache.prototype.resetCollection = function (collectionEntry) {
5585
5578
  if (collectionEntry.hasEditResources())
5586
5579
  collectionEntry.revertChanges();
5587
- // if (collectionEntry.hasItemEditResources()) {
5588
- for (var _i = 0, _a = collectionEntry.items; _i < _a.length; _i++) {
5589
- var itemEntry = _a[_i];
5590
- itemEntry.resetModified();
5580
+ if (collectionEntry.hasItemEditResources()) {
5581
+ for (var _i = 0, _a = collectionEntry.items; _i < _a.length; _i++) {
5582
+ var itemEntry = _a[_i];
5583
+ itemEntry.resetModified();
5584
+ }
5591
5585
  }
5592
- // }
5593
5586
  };
5594
5587
  LocalCache.prototype.detectChanges = function () {
5595
5588
  var _this = this;
@@ -6844,7 +6837,7 @@ var RequestColumnExpansionFactory_RequestColumnExpansionFactory = /** @class */
6844
6837
 
6845
6838
  var main_RmCore = /** @class */ (function () {
6846
6839
  function RmCore(externalApiRequestService, localCacheManager, authInterface, errorHandlerInterface, promiseInterface) {
6847
- this.version = '1.1.8-3';
6840
+ this.version = '1.1.8';
6848
6841
  this.apiFormatter = new ApiFormatter_ApiFormatter();
6849
6842
  this.keyService = new KeyService_KeyService();
6850
6843
  this.queryService = new QueryService();
@@ -7000,4 +6993,4 @@ function identity(value) {
7000
6993
  /***/ })
7001
6994
  /******/ ]);
7002
6995
  });
7003
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQWRtaW5pc3RyYXRvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7OztBQ2xGQSxnRDs7Ozs7Ozs7Ozs7OztBQ0FNLHNCQUF3QixNQUFNLEVBQUUsUUFBUTtJQUM3QyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFFakIsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRWxCLEdBQUcsQ0FBQyxDQUFDLElBQU0sR0FB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QUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLHNCQUFzQixFQUMzQixJQUFJLENBQUMsNkJBQTZCLEVBQ2xDLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHFCQUFxQixDQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNGLGFBQUM7QUFBRCxDQUFDOztBQUVLO0FBQ04sQ0FBQztBQUVLLGtCQUFvQixLQUFLO0lBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDZCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDblNzQjtBQUNLO0FBQ0g7QUFFQztBQUNFIiwiZmlsZSI6InJtLWNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibW9tZW50XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJtQ29yZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUm1Db3JlXCJdID0gZmFjdG9yeShyb290W1wibW9tZW50XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX187IiwiZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dNZXJnZSAob2JqZWN0LCBkZWZhdWx0cykge1xyXG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcclxuXHRcdHJldHVybiBkZWZhdWx0cztcclxuXHJcblx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XHJcblx0XHRyZXN1bHRba2V5XSA9IG9iamVjdFtrZXldID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRkZWZhdWx0c1trZXldIDogb2JqZWN0W2tleV07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydGllcyAob2JqZWN0KSB7XHJcblx0Ly8gQHRzLWlnbm9yZVxyXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcclxuXHRpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxyXG5cdFx0cmV0dXJuIGtleTtcclxuXHJcblx0cmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbkFycmF5IChuZWVkbGUsIGhheXN0YWNrKSB7XHJcblx0Zm9yIChjb25zdCBoYXkgb2YgaGF5c3RhY2spIHtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRpZiAobmVlZGxlID09IGhheSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheTxUPiAoc291cmNlOiBUW10sIGNhbGxiYWNrOiAoVCkgPT4gYm9vbGVhbikge1xyXG5cdGNvbnN0IGZpbHRlcmVkOiBUW10gPSBbXTtcclxuXHJcblx0Zm9yIChjb25zdCBzcmMgb2Ygc291cmNlKSB7XHJcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcclxuXHRcdFx0ZmlsdGVyZWQucHVzaChzcmMpO1xyXG5cdH1cclxuXHJcblx0aWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gc291cmNlLmxlbmd0aClcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0ZW1wdHlBcnJheShzb3VyY2UpO1xyXG5cclxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcclxuXHRcdHNvdXJjZS5wdXNoKGZpbHRlcik7XHJcblxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpIHtcclxuXHRhcnJheS5zcGxpY2UoMCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXRoRXhpc3RzIChzb3VyY2UsIHBhdGgpIHtcclxuXHRpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XHJcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdCwgcGF0aCwgZGVmYXVsdHMpIHtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IHZhbHVlID0gcGF0aFtpXTtcclxuXHJcblx0XHRpZiAob2JqZWN0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvYmplY3RbdmFsdWVdID0gZGVmYXVsdHNbaV07XHJcblxyXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3ZhbHVlXTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBvYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoIChvYmplY3QsIHBhdGgsIGNyZWF0ZSA9IGZhbHNlKSB7XHJcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcclxuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxyXG5cclxuXHRcdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCAmJiAhY3JlYXRlKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlMsIGFkZGVkIGNvbW1lbnRzIHRvIGlnbm9yZSBUeXBlU2NyaXB0IGVycm9yc1xyXG5mdW5jdGlvbiBiYXNlRXh0ZW5kIChkc3QsIG9ianMsIGRlZXApIHtcclxuXHRmb3IgKGxldCBpID0gMCwgaWkgPSBvYmpzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuXHRcdGNvbnN0IG9iaiA9IG9ianNbaV07XHJcblxyXG5cdFx0aWYgKCFpc09iamVjdChvYmopICYmICFpc0Z1bmN0aW9uKG9iaikpXHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG5cclxuXHRcdGZvciAobGV0IGogPSAwLCBqaiA9IGtleXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2pdO1xyXG5cdFx0XHRjb25zdCBzcmMgPSBvYmpba2V5XTtcclxuXHJcblx0XHRcdGlmIChkZWVwICYmIGlzT2JqZWN0KHNyYykpIHtcclxuXHRcdFx0XHRpZiAoaXNEYXRlKHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IERhdGUoc3JjLnZhbHVlT2YoKSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChzcmMpKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBSZWdFeHAoc3JjKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHNyYy5ub2RlTmFtZSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmVOb2RlKHRydWUpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbGVtZW50KHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lKCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmICghaXNPYmplY3QoZHN0W2tleV0pKVxyXG5cdFx0XHRcdFx0XHRkc3Rba2V5XSA9IGlzQXJyYXkoc3JjKSA/IFtdIDoge307XHJcblxyXG5cdFx0XHRcdFx0YmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkc3Rba2V5XSA9IHNyYztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGRzdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAoZHN0LCAuLi5hcmdzKSB7XHJcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCBmYWxzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAoZHN0LCAuLi5hcmdzKSB7XHJcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCB0cnVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0ICh2YWx1ZSkge1xyXG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL2lzb2JqZWN0NFxyXG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua09iamVjdCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlZ0V4cCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudCAobm9kZSkge1xyXG5cdHJldHVybiAhIShub2RlICYmXHJcblx0XHQoXHJcblx0XHRcdG5vZGUubm9kZU5hbWUgIC8vIFdlIGFyZSBhIGRpcmVjdCBlbGVtZW50LlxyXG5cdFx0XHR8fCAobm9kZS5wcm9wICYmIG5vZGUuYXR0ciAmJiBub2RlLmZpbmQpXHJcblx0XHQpXHJcblx0KTsgIC8vIFdlIGhhdmUgYW4gb24gYW5kIGZpbmQgbWV0aG9kIHBhcnQgb2YgalF1ZXJ5IEFQSS5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93IChvYmopIHtcclxuXHRyZXR1cm4gb2JqICYmIG9iai53aW5kb3cgPT09IG9iajtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyAobzEsIG8yKSB7XHJcblx0aWYgKG8xID09PSBvMilcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcclxuXHRpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMilcclxuXHRcdHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxyXG5cclxuXHRjb25zdCB0MSA9IHR5cGVvZiBvMTtcclxuXHRjb25zdCB0MiA9IHR5cGVvZiBvMjtcclxuXHJcblx0bGV0IGxlbmd0aDtcclxuXHRsZXQga2V5O1xyXG5cdGxldCBrZXlTZXQ7XHJcblxyXG5cdGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XHJcblx0XHRpZiAoaXNBcnJheShvMSkpIHtcclxuXHRcdFx0aWYgKCFpc0FycmF5KG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRsZW5ndGggPSBvMS5sZW5ndGg7XHJcblxyXG5cdFx0XHRpZiAobzEubGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcclxuXHRcdFx0XHRmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcclxuXHRcdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChpc0RhdGUobzEpKSB7XHJcblx0XHRcdGlmICghaXNEYXRlKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gc2ltcGxlQ29tcGFyZShvMS5nZXRUaW1lKCksIG8yLmdldFRpbWUoKSk7XHJcblx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzUmVnRXhwKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gbzEudG9TdHJpbmcoKSA9PT0gbzIudG9TdHJpbmcoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChpc1dpbmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8IGlzQXJyYXkobzIpIHx8IGlzRGF0ZShvMikgfHwgaXNSZWdFeHAobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGtleVNldCA9IGNyZWF0ZU1hcCgpO1xyXG5cdFx0XHRmb3IgKGtleSBpbiBvMSkge1xyXG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKG8xW2tleV0pKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0XHRrZXlTZXRba2V5XSA9IHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoa2V5IGluIG8yKSB7XHJcblx0XHRcdFx0aWYgKCEoa2V5IGluIGtleVNldCkgJiYgaXNEZWZpbmVkKG8yW2tleV0pICYmICFpc0Z1bmN0aW9uKG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTWFwICgpIHtcclxuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxufVxyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxyXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJlIChhLCBiKSB7XHJcblx0cmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYgYiAhPT0gYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRPYmplY3RNYXhEZXB0aCAobWF4RGVwdGgpIHtcclxuXHRyZXR1cm4gaXNOdW1iZXIobWF4RGVwdGgpICYmIG1heERlcHRoID4gMDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHNvdXJjZSwgZGVzdGluYXRpb24/LCBtYXhEZXB0aD8pIHtcclxuXHRjb25zdCBzdGFja1NvdXJjZSA9IFtdO1xyXG5cdGNvbnN0IHN0YWNrRGVzdCA9IFtdO1xyXG5cclxuXHRtYXhEZXB0aCA9IGlzVmFsaWRPYmplY3RNYXhEZXB0aChtYXhEZXB0aCkgPyBtYXhEZXB0aCA6IE5hTjtcclxuXHJcblx0aWYgKGRlc3RpbmF0aW9uKSB7XHJcblx0XHRpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVtcHR5IHRoZSBkZXN0aW5hdGlvbiBvYmplY3RcclxuXHRcdGlmIChpc0FycmF5KGRlc3RpbmF0aW9uKSkge1xyXG5cdFx0XHRkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gZGVzdGluYXRpb24pXHJcblx0XHRcdFx0ZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tEZXN0LnB1c2goZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlSZWN1cnNlIChfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aCkge1xyXG5cdFx0X21heERlcHRoLS07XHJcblxyXG5cdFx0aWYgKF9tYXhEZXB0aCA8IDApXHJcblx0XHRcdHJldHVybiAnLi4uJztcclxuXHJcblx0XHRpZiAoaXNBcnJheShfc291cmNlKSkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuXHRcdFx0XHRfZGVzdGluYXRpb24ucHVzaChjb3B5RWxlbWVudChfc291cmNlW2ldLCBfbWF4RGVwdGgpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XHJcblx0XHRcdC8vIGNyZWF0ZU1hcCgpIGZhc3QgcGF0aCAtLS0gU2FmZSB0byBhdm9pZCBoYXNPd25Qcm9wZXJ0eSBjaGVjayBiZWNhdXNlIHByb3RvdHlwZSBjaGFpbiBpcyBlbXB0eVxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoX3NvdXJjZSAmJiB0eXBlb2YgX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0aWYgKF9zb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBTbG93ZXN0IHBhdGggLS0tIGhhc093blByb3BlcnR5IGNhbid0IGJlIGNhbGxlZCBhcyBhIG1ldGhvZFxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XHJcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcclxuXHRcdC8vIFNpbXBsZSB2YWx1ZXNcclxuXHRcdGlmICghaXNPYmplY3QoX3NvdXJjZSkpXHJcblx0XHRcdHJldHVybiBfc291cmNlO1xyXG5cclxuXHRcdC8vIEFscmVhZHkgY29waWVkIHZhbHVlc1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Y29uc3QgaW5kZXggPSBzdGFja1NvdXJjZS5pbmRleE9mKF9zb3VyY2UpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdHJldHVybiBzdGFja0Rlc3RbaW5kZXhdO1xyXG5cclxuXHRcdGlmIChpc1dpbmRvdyhfc291cmNlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgTWFraW5nIGNvcGllcyBvZiBXaW5kb3cgaW5zdGFuY2VzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG5lZWRzUmVjdXJzZSA9IGZhbHNlO1xyXG5cdFx0bGV0IF9kZXN0aW5hdGlvbiA9IGNvcHlUeXBlKF9zb3VyY2UpO1xyXG5cclxuXHRcdGlmIChfZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRfZGVzdGluYXRpb24gPSBpc0FycmF5KF9zb3VyY2UpID8gW10gOiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfc291cmNlKSk7XHJcblx0XHRcdG5lZWRzUmVjdXJzZSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tTb3VyY2UucHVzaChfc291cmNlKTtcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0cmV0dXJuIG5lZWRzUmVjdXJzZVxyXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxyXG5cdFx0XHQ6IF9kZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlUeXBlIChfc291cmNlKSB7XHJcblx0XHRzd2l0Y2ggKHRvU3RyaW5nLmNhbGwoX3NvdXJjZSkpIHtcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQxNkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MzJBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQxNkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDMyQXJyYXldJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXHJcblx0XHRcdFx0aWYgKCFfc291cmNlLnNsaWNlKSB7XHJcblx0XHRcdFx0XHQvLyBJZiB3ZSdyZSBpbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgZW52aXJvbm1lbnQgc3VwcG9ydHMgQXJyYXlCdWZmZXJcclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXHJcblx0XHRcdFx0XHRjb25zdCBjb3BpZWQgPSBuZXcgQXJyYXlCdWZmZXIoX3NvdXJjZS5ieXRlTGVuZ3RoKTtcclxuXHRcdFx0XHRcdG5ldyBVaW50OEFycmF5KGNvcGllZCkuc2V0KG5ldyBVaW50OEFycmF5KF9zb3VyY2UpKTtcclxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHRcdFx0XHRcdHJldHVybiBjb3BpZWQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBCb29sZWFuXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxyXG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xyXG5cclxuXHRcdFx0XHRyZS5sYXN0SW5kZXggPSBfc291cmNlLmxhc3RJbmRleDtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKFtfc291cmNlXSwge3R5cGU6IF9zb3VyY2UudHlwZX0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc0Z1bmN0aW9uKF9zb3VyY2UuY2xvbmVOb2RlKSkge1xyXG5cdFx0XHRyZXR1cm4gX3NvdXJjZS5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlGb3JtYXR0ZXIge1xyXG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XHJcblx0U0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREW1RdSEg6bW06c3NaJztcclxuXHRTRVJWRVJfVElNRV9GT1JNQVQgPSAnSEg6bW06c3MnO1xyXG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcclxuXHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHMsIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0ZmllbGRzW2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW4ucGF0aF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQsIGV4cGFuZGVkLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGN1cnJlbnRbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZXhwYW5kZWRbY29sdW1uLnBhdGhdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBtb2RpZmllZFtjb2x1bW5JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRoYXNDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2hhbmdlcyAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogb2JqZWN0W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSkge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogaW5pdGlhbFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdGNvbHVtbjogY29sdW1uLmFwaUNvbHVtblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29weUZpZWxkcyAoc291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XHJcblxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBzb3VyY2VbY29sdW1uUGF0aF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdHNoYWxsb3dDb3B5RmllbGRzIChzaGFsbG93U291cmNlLCBkZWVwU291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XHJcblxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0c2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSA6XHJcblx0XHRcdFx0dGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGRlZXBTb3VyY2VbY29sdW1uUGF0aF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdHNldERlZmF1bHRWYWx1ZXMgKGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbi5pZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVGaWVsZHMgKGNvbHVtblR5cGUsIGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gc2Vjb25kID09PSB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKHNlY29uZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVNb21lbnRPYmplY3RzKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUR1cmF0aW9ucyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnaWQnOiAvLyBpZCB0eXBlc1xyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT0gc2Vjb25kOyAvLyB1c2Ugbm9uLXN0cmljdCBjb21wYXJpc29uXHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAncG93ZXInOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVGbG9hdHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcclxuXHRcdFx0Y2FzZSAnYm9vbCc6IC8vIGJvb2xlYW4gdHlwZXNcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzogLy8gc3RyaW5nIHR5cGVzXHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PT0gc2Vjb25kO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBlcXVhbHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb21wYXJlRmxvYXRzIChhLCBiKSB7XHJcblx0XHRjb25zdCBhYnNBID0gTWF0aC5hYnMoYSk7XHJcblx0XHRjb25zdCBhYnNCID0gTWF0aC5hYnMoYik7XHJcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xyXG5cclxuXHRcdGNvbnN0IEVQU0lMT04gPSAxLjE5ZS0wNztcclxuXHJcblx0XHQvLyBzaG9ydGN1dCwgaGFuZGxlcyBpbmZpbml0aWVzXHJcblx0XHRpZiAoYSA9PT0gYikge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSBpZiAoYSA9PT0gMCB8fCBiID09PSAwIHx8IGRpZmYgPCBOdW1iZXIuTUlOX1ZBTFVFKSB7XHJcblx0XHRcdC8vIGEgb3IgYiBpcyB6ZXJvIG9yIGJvdGggYXJlIGV4dHJlbWVseSBjbG9zZSB0byBpdFxyXG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxyXG5cdFx0XHRyZXR1cm4gZGlmZiA8IChFUFNJTE9OICogTnVtYmVyLk1JTl9WQUxVRSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3JcclxuXHRcdFx0cmV0dXJuIGRpZmYgLyBNYXRoLm1pbigoYWJzQSArIGFic0IpLCBOdW1iZXIuTUFYX1ZBTFVFKSA8IEVQU0lMT047XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb21wYXJlTW9tZW50T2JqZWN0cyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXHJcblx0XHRcdHJldHVybiAhc2Vjb25kLmlzVmFsaWQoKTtcclxuXHJcblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXHJcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gZmlyc3QgSVMgdmFsaWRcclxuXHJcblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XHJcblx0fVxyXG5cclxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRyZXR1cm4gZmlyc3QuYXNNaWxsaXNlY29uZHMoKSA9PT0gc2Vjb25kLmFzTWlsbGlzZWNvbmRzKCk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZVZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEYXRlKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlQ29sb3IodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnJyA/IEpTT04ucGFyc2UodmFsdWUpIDogdmFsdWU7XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xyXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8gMTAwMDAwMDtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3RDb2xvcih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZURhdGUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlID09PSBudWxsID8gMCA6IHZhbHVlLCAnc2Vjb25kcycpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VDb2xvciAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlIDogJyMnICsgdmFsdWU7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RGF0ZVRpbWUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVfRk9STUFUKSA6IG51bGw7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RHVyYXRpb24gKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuYXNTZWNvbmRzKCk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0Q29sb3IgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldERlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0XHRyZXR1cm4gJzAnO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmludmFsaWQoKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gJyMwMDAwMDAnO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGVtYWlsXHJcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGh0bWxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGpzb25cclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSkpO1xyXG5cdH1cclxuXHJcblx0Y2xvbmUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0XHRyZXR1cm4gY29weSh2YWx1ZSk7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q2xvbmVGdW5jdGlvbiAoY29sdW1uVHlwZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRGF0ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNsb25lRHVyYXRpb24gKGR1cmF0aW9uKSB7XHJcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKGR1cmF0aW9uKTtcclxuXHR9XHJcblxyXG5cdGNsb25lRGF0ZSAoZGF0ZSkge1xyXG5cdFx0cmV0dXJuIGRhdGUuY2xvbmUoKTtcclxuXHR9XHJcblxyXG5cdGlkZW50aXR5IChpbnB1dCkge1xyXG5cdFx0cmV0dXJuIGlucHV0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHRlbXBsYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIHBhcmFtczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogSXRlbVR5cGUsIHBhcmVudElkPzogSXRlbUlkKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoaXRlbVR5cGUsIGl0ZW1JZCwgdmFsdWVzLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGl0ZW1JZHMpKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1zOiBvYmplY3QsIGNvbHVtbnM6IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMsIHJlcXVlc3RDYW5jZWxlcikpO1xyXG5cdH1cclxuXHJcblx0bW92ZUl0ZW1zIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbXM6IG9iamVjdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtcykpO1xyXG5cdH1cclxuXHJcblx0Y29sdW1ucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5zOiBvYmplY3QsIHBhcmFtcz86IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRxdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogb2JqZWN0LCBjb2x1bW5zOiBvYmplY3QsIGxpbWl0Pzogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMsIGxpbWl0KSk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzUmVzcG9uc2UgKHJlcXVlc3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gcmVxdWVzdC50aGVuKHJlc3BvbnNlID0+IHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZSkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbVR5cGVNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yIHtcclxuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcclxuXHRpdGVtczogSXRlbVR5cGVNYXA7XHJcblx0bGlua3M6IEl0ZW1UeXBlTWFwO1xyXG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcclxuXHRtYXA6IGFueTtcclxuXHJcblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xyXG5cdGNvbHVtbk1hcDogYW55ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyByZXNwb25zZTogYW55XHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSByZXNwb25zZS5jb2x1bW5zO1xyXG5cdFx0dGhpcy5pdGVtcyA9IHJlc3BvbnNlLml0ZW1zO1xyXG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xyXG5cdFx0dGhpcy5jYWNoZWFibGUgPSByZXNwb25zZS5jYWNoZWFibGU7XHJcblx0XHR0aGlzLm1hcCA9IHJlc3BvbnNlLm1hcDtcclxuXHJcblx0XHR0aGlzLmNyZWF0ZUNvbHVtbk1hcHMoKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbHVtbk1hcHMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5UeXBlIGluIHRoaXMuY29sdW1ucykge1xyXG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XHJcblx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXVtpXTtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBpO1xyXG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZldGNoVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbklkKSB7XHJcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcclxuXHR9XHJcblxyXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKFxyXG5cdFx0XHRcdHRoaXMuZmV0Y2hWYWx1ZShpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW4uaWQpLFxyXG5cdFx0XHRcdGNvbHVtbixcclxuXHRcdFx0XHRyZXN1bHRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hEZXJpdmVkVmFsdWVzICh2YWx1ZSwgY29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcclxuXHRcdFx0bGV0IGNoaWxkVmFsdWU7XHJcblxyXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcclxuXHRcdFx0XHRjaGlsZFZhbHVlID0gbnVsbDtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjaGlsZENvbHVtbi5hcGlDb2x1bW4udHlwZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IHRoaXMuZmV0Y2hWYWx1ZShjb2x1bW4uaXRlbVR5cGUsIHZhbHVlLCBjaGlsZENvbHVtbi5pZCk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSBjaGlsZFZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRDb2x1bW4uaXNMZWFmKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoY2hpbGRWYWx1ZSwgY2hpbGRDb2x1bW4sIGRlc3RpbmF0aW9uKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XHJcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRyZXN1bHRbdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXVtpXS5pZF0gPSBkYXRhW2ldO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbmNsdWRlTGlua3MpIHtcclxuXHRcdFx0Y29uc3QgbGlua3MgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmxpbmtzO1xyXG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBsaW5rVHlwZSBpbiBsaW5rcylcclxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxyXG5cdFx0XHRcdFx0dGhpcy5mZXRjaE9iamVjdEFycmF5KGxpbmtUeXBlLCBpbmNsdWRlTGlua3MsIGxpbmtzW2xpbmtUeXBlXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0QXJyYXkgKGl0ZW1UeXBlLCBpbmNsdWRlTGlua3MsIGlkQXJyYXkpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0gW107XHJcblxyXG5cdFx0aWYgKGlkQXJyYXkgPT09IG51bGwpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlkQXJyYXkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0TWFwIChpdGVtVHlwZSwgY29sdW1uSWQsIGluY2x1ZGVMaW5rcywgcmV0dXJuS2V5cykge1xyXG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XHJcblx0XHRjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbY29sdW1uSW5kZXhdO1xyXG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcclxuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCwgaW5jbHVkZUxpbmtzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmV0dXJuS2V5cylcclxuXHRcdFx0cmV0dXJuIHtyZXN1bHQ6IHJlc3VsdCwga2V5czoga2V5c307XHJcblx0XHRlbHNlXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaEZpZWxkTWFwIChpdGVtVHlwZSwgY29sdW1uSWQpIHtcclxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmVzdWx0W2lkXSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2luZGV4XTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5BcnJheSAoaXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgYXBpQ29sdW1uIG9mIHRoaXMuY29sdW1uc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJlc3VsdC5wdXNoKGFwaUNvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uT2JqZWN0IChpdGVtVHlwZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwW2l0ZW1UeXBlXTtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uc09iamVjdCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXA7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVSZXNvdXJjZSAoaXRlbVR5cGUsIGlkKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRvYmplY3Q6IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkKSxcclxuXHRcdFx0bGlua3M6IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5saW5rc1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGhhc0l0ZW1zIChpdGVtVHlwZSkge1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgZW51bSBFTlRSWV9TVEFUVVMge1xyXG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxyXG5cdFBST01JU0VEID0gJ3Byb21pc2VkJyxcclxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcclxuXHRQUk9NSVNFRF9FWFBBTkQgPSAncHJvbWlzZWQtZXhwYW5kJyxcclxuXHRSRVNPTFZFID0gJ3Jlc29sdmUnLFxyXG5cdExPQ0FMID0gJ2xvY2FsJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQUxMX1BFUk1JU1NJT05TID0gJzcnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTFVNTl9TRVBFUkFUT1IgPSAnPic7XHJcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19LRVlXT1JEOiBzdHJpbmcgPSAnbmV3LSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xyXG4iLCJpbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5U3RhdHVzLCBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzIHtcclxuXHRlbnRyaWVzOiBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtSWQsXHJcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBQcm9taXNlPEl0ZW1FbnRyeT4gLy8gdG9kbzogcHJvbWlzZSByZXR1cm4gdHlwZVxyXG5cdCkge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gRU5UUllfU1RBVFVTKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XHJcblx0fVxyXG5cclxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+KTogdm9pZCB7XHJcblx0XHRjb25zdCBzdGF0dXMgPSBlbnRyeVN0YXR1cy5zdGF0dXM7XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZW50cmllc1tzdGF0dXNdID0gW107XHJcblxyXG5cdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10ucHVzaChlbnRyeVN0YXR1cy5lbnRyeSk7XHJcblx0fVxyXG5cclxuXHRoYXNFbnRyaWVzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBib29sZWFuIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XHJcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGhhc1JlcXVlc3RzICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5SRVNPTFZFLCBFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSk7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoRW50cnkgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldFByb21pc2VzICgpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxJdGVtRW50cnk+PiA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcclxuXHRcdFx0ZW50cnkgPT4ge1xyXG5cdFx0XHRcdHByb21pc2VzLnB1c2godGhpcy5nZXRQcm9taXNlKGVudHJ5KSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKTtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RJZHMgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdLFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5nZXRJdGVtSWQoZW50cnkpKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QXJyYXkgKCk6IEl0ZW1FbnRyeVtdIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHN0YXR1c0VudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdGNvbXBpbGF0aW9uID0ge1xyXG5cdFx0Y3JlYXRlOiB7fSxcclxuXHRcdGRlbGV0ZToge30sXHJcblx0XHR1cGRhdGU6IHt9LFxyXG5cdFx0bW92ZToge31cclxuXHR9O1xyXG5cclxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cclxuXHRwcml2YXRlIG1vdmVBcnJheTogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRwcml2YXRlIGRlbGV0ZU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwdWJsaWMgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdXHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc1NpbmdsZUl0ZW1zKCk7XHJcblx0XHR0aGlzLnByb2Nlc3NDb2xsZWN0aW9ucyhjb2xsZWN0aW9uRW50cmllcyk7XHJcblx0XHR0aGlzLnBvc3RQcm9jZXNzKCk7XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0UGFyZW50ICgpOiBFbnRyeVBhcmVudCB7XHJcblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XHJcblx0fVxyXG5cclxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5tb3ZlQXJyYXkucHVzaChpdGVtRW50cnkpO1xyXG5cdH1cclxuXHJcblx0YWRkRGVsZXRlRW50cnkgKGl0ZW1FbnRyeSwgcGFyZW50SWQsIHBhcmVudFR5cGUpIHtcclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB7cGFyZW50SWQ6IHBhcmVudElkLCBpdGVtOiBpdGVtRW50cnksIHBhcmVudFR5cGU6IHBhcmVudFR5cGV9XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnkpIHtcclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuY29tcGlsYXRpb24udXBkYXRlLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCBpdGVtRW50cnldXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkQ3JlYXRlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0bGV0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XHJcblxyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi5jcmVhdGUsXHJcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwge30sIHt9LCBpdGVtRW50cnldXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cG9zdFByb2Nlc3MgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdFx0Y29uc3QgZGVsZXRlRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKGRlbGV0ZUVudHJ5ID09PSB1bmRlZmluZWQgfHwgZGVsZXRlRW50cnlbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Ly8gYXNzdW1lIHRoZSBpdGVtRW50cnkgaGFzIGEgcGFyZW50IChvciBzb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3JvbmcpXHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gY3JlYXRlUGF0aChcclxuXHRcdFx0XHR0aGlzLmNvbXBpbGF0aW9uLm1vdmUsXHJcblx0XHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZF0sXHJcblx0XHRcdFx0W3t9LCBbXV1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZGVsZXRlRW50cnlbaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRkZWxldGUgZGVsZXRlRW50cnlbaXRlbUlkXTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZGVsZXRlTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdW2l0ZW1JZF0uaXRlbTtcclxuXHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuY29tcGlsYXRpb24uZGVsZXRlO1xyXG5cclxuXHRcdFx0XHRpZiAoZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0ZGVzdGluYXRpb25baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzU2luZ2xlSXRlbXMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5zaW5nbGVJdGVtcykge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGl0ZW1FbnRyeSk7XHJcblx0XHRcdGVsc2UgaWYgKGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeShpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHQvLyBhZGQgdGhlIGNvbGxlY3Rpb24gcGFyZW50IGlkIHRvIHRoZSBkZWxldGUgZW50cnkgKGluIGNhc2UgdGhlIGl0ZW0gaGFzIGJlZW4gbW92ZWQpXHJcblx0XHRcdGxldCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcclxuXHJcblx0XHRcdC8vIGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcygpKSB7XHJcblx0XHRcdGxldCBhZGRlZEl0ZW1zO1xyXG5cdFx0XHRsZXQgcmVtb3ZlZEl0ZW1zO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpIHtcclxuXHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1zO1xyXG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0QWRkZWRJdGVtcygpO1xyXG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRSZW1vdmVkSXRlbXMoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW0gb2YgYWRkZWRJdGVtcykge1xyXG5cdFx0XHRcdGlmIChhZGRlZEl0ZW0uaXNMb2NhbCgpKVxyXG5cdFx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShhZGRlZEl0ZW0pO1xyXG5cdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdHRoaXMuYWRkTW92ZUVudHJ5KGFkZGVkSXRlbSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxyXG5cdFx0XHRcdHRoaXMuYWRkRGVsZXRlRW50cnkocmVtb3ZlZEl0ZW0sIHBhcmVudC5pdGVtSWQsIHBhcmVudC5pdGVtVHlwZSk7XHJcblx0XHRcdC8vIH1cclxuXHJcblx0XHRcdC8vIGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMoKSkge1xyXG5cdFx0XHRjb25zdCB1cGRhdGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1zKCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHVwZGF0ZWRJdGVtIG9mIHVwZGF0ZWRJdGVtcylcclxuXHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KHVwZGF0ZWRJdGVtKTtcclxuXHRcdFx0Ly8gfVxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb24sXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRDb2x1bW5JbmZvLFxyXG5cdEl0ZW1IYW5kbGVyXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBFbnRyeVBhcmVudCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCwgaGFzUHJvcGVydGllcywgaW5BcnJheSwgaXNGdW5jdGlvbiB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogd2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UgdGhlIGRvY3VtZW50IGNyZWF0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcclxuXHRnZXRJdGVtVHlwZVVwZGF0ZVByaW9yaXR5IChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWxiZWRyYWcnOlxyXG5cdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWwnOlxyXG5cdFx0XHRjYXNlICdNaW5mYWN0dXVyJzpcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gMjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XHJcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldE1hcFZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBtYXApIHtcclxuXHRcdGlmIChtYXAgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRleGVjdXRlIChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMsIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlLCBwYXJhbWV0ZXJzPywgb25BZnRlckNyZWF0ZUNhbGxiYWNrPykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3RzKFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyksXHJcblx0XHRcdHBhcmFtZXRlcnMsXHJcblx0XHRcdGJyZWFrdXBCeVBhcmVudCxcclxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdHMgKGNoYW5nZXNDb21waWxhdGlvbjogQ2hhbmdlc0NvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzLCBjb252ZXJzaW9uTWFwLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykge1xyXG5cdFx0Y29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uLmNyZWF0ZSxcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRwYXJhbWV0ZXJzLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcclxuXHRcdCkucnVuKCk7XHJcblx0XHRjb25zdCByZXNwb25zZXM6IEFycmF5PFByb21pc2U8YW55Pj4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpXHJcblx0XHRcdHJlc3BvbnNlcy5wdXNoKHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3QocmVxdWVzdCwgY29udmVyc2lvbk1hcCkudGhlbihub3RpZnkpKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzcG9uc2VzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHRmdW5jdGlvbiBub3RpZnkgKHJlc3VsdCkge1xyXG5cdFx0XHRpZiAoaXNGdW5jdGlvbihvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spKVxyXG5cdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2UsIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlTWFwID0gcmVzcG9uc2UubWFwO1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLml0ZW1zO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1uc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuZ2V0TWFwVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgcmVzcG9uc2VNYXApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdDcmVhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCA9IG5ld0l0ZW1JZDtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhmaWVsZHMpO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2VcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuYWRkVG9Db2xsZWN0aW9ucygpO1xyXG5cclxuXHRcdFx0XHQvLyBleHRlbmQgY29udmVyc2lvbiBtYXBcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlTWFwKSB7XHJcblx0XHRcdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiByZXNwb25zZU1hcFtpdGVtVHlwZV0pXHJcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSByZXNwb25zZU1hcFtpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJpb3JpdGl6ZVVwZGF0ZVJlcXVlc3RzIChjb21waWxhdGlvbiwgcGFyYW1ldGVycykge1xyXG5cdFx0Y29uc3QgcHJpb3JpdGl6ZWRJdGVtVHlwZXM6IHN0cmluZ1tdW10gPSBbW10sIFtdLCBbXV07XHJcblx0XHRsZXQgcmVxdWVzdENoYWluID0gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbilcclxuXHRcdFx0cHJpb3JpdGl6ZWRJdGVtVHlwZXNbdGhpcy5nZXRJdGVtVHlwZVVwZGF0ZVByaW9yaXR5KGl0ZW1UeXBlKV0ucHVzaChpdGVtVHlwZSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZXMgb2YgcHJpb3JpdGl6ZWRJdGVtVHlwZXMpIHtcclxuXHRcdFx0aWYgKGl0ZW1UeXBlcy5sZW5ndGggPT09IDApXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRyZXF1ZXN0Q2hhaW4gPSByZXF1ZXN0Q2hhaW4udGhlbihcclxuXHRcdFx0XHR0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyhpdGVtVHlwZXMsIGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSxcclxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdENoYWluO1xyXG5cdH1cclxuXHJcblx0Ly8gY29uc3RydWN0IGEgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyAoaXRlbVR5cGVzLCBjb21waWxhdGlvbiwgcGFyYW1ldGVycykge1xyXG5cdFx0cmV0dXJuICgpID0+IHtcclxuXHRcdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXHJcblx0XHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0sIHBhcmFtZXRlcnMpKTtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzLCBwYXJhbWV0ZXJNYXApIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSB7fTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xyXG5cclxuXHRcdHJlcXVlc3RbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGUgZm9ybWF0UmVxdWVzdCBjYWxsIGhlcmUgKGZpZWxkcyBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZClcclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XHJcblx0XHRcdC8vIFJNQ29yZSB0b2RvOiB0eXBlXHJcblx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0W2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XHJcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcclxuXHJcblx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XHJcblxyXG5cdFx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cclxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zID0gY29sbGVjdGlvbk1hdGNoZXIuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcylcclxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGNvbGxlY3Rpb24uY29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIHJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zLmdldCgpKS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMuZ2V0KCksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5LmluaXRpYWwsIHt9LCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0XHRcdFx0LnNldERlcml2ZWQocmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3QpKVxyXG5cdFx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcylcclxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0XHRcdGZpZWxkcyxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXHJcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbikgLy8gY2xlYXJpbmcgbm90IG5lY2Vzc2FyeVxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0IChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XHJcblx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRpZEFycmF5LnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKGl0ZW1UeXBlLCBpZEFycmF5KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZEFycmF5ID0gcmVzcG9uc2UuaXRlbXM7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmdldENvbGxlY3Rpb25NYXRjaGVyKCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpZiAoIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgcmVzcG9uc2VJZEFycmF5KSlcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdEZWxldGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlTW92ZVJlcXVlc3RzIChjb21waWxhdGlvbiwgY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XHJcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29tcGlsYXRpb25bcGFyZW50VHlwZV0pXHJcblx0XHRcdFx0ZXhlY3V0ZU1vdmVSZXF1ZXN0KHBhcmVudFR5cGUsIHBhcmVudElkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cclxuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVNb3ZlUmVxdWVzdCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdFx0Ly8gb25seSB0aGUgcGFyZW50IGlkIGNvdWxkIGhhdmUgYmVlbiB1cGRhdGVkXHJcblx0XHRcdGNvbnN0IGNvbXBpbGF0aW9uRW50cmllcyA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdW3BhcmVudElkXTtcclxuXHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSBzZWxmLmdldE1hcFZhbHVlKHBhcmVudFR5cGUsIHBhcmVudElkLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdHJlcXVlc3RzLnB1c2goXHJcblx0XHRcdFx0c2VsZi5hcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMoXHJcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0bmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCA/IG5ld1BhcmVudElkIDogcGFyZW50SWQsXHJcblx0XHRcdFx0XHRzZWxmLmJ1aWxkTW92ZVJlcXVlc3QoY29tcGlsYXRpb25FbnRyaWVzKVxyXG5cdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0c2VsZi5wcm9jZXNzTW92ZVJlc3BvbnNlKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c2VsZi5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzTW92ZVJlc3BvbnNlICgvKiByZXNwb25zZSwgKi9jb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdC8vIFRPRE86IHByb2Nlc3MgcmVzcG9uc2VcclxuXHJcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlbW92ZUNvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHRcdGNvbnN0IGFkZENvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXHJcblx0XHRcdFx0cmVtb3ZlQ29sbGVjdGlvbk1hcCxcclxuXHRcdFx0XHRjb21waWxhdGlvbkVudHJ5LnBhcmVudElkLFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcclxuXHRcdFx0XHRhZGRDb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRcdCg8RW50cnlQYXJlbnQ+IGl0ZW1FbnRyeS5wYXJlbnQpLml0ZW1JZCxcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihyZW1vdmVDb2xsZWN0aW9uTWFwLCAncmVtb3ZlSXRlbXMnKTtcclxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24oYWRkQ29sbGVjdGlvbk1hcCwgJ2FkZEl0ZW1zJyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFkZENvbGxlY3Rpb25NYXBFbnRyeSAoY29sbGVjdGlvbk1hcCwgcGFyZW50SWQsIGl0ZW1FbnRyeSwgdmFsdWUpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXBFbnRyeSA9IGNyZWF0ZVBhdGgoXHJcblx0XHRcdGNvbGxlY3Rpb25NYXAsXHJcblx0XHRcdFtpdGVtRW50cnkucGFyZW50Lml0ZW1UeXBlLCBwYXJlbnRJZCwgaXRlbUVudHJ5Lml0ZW1UeXBlXSxcclxuXHRcdFx0W3t9LCB7fSwgW11dXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbGxlY3Rpb25NYXBFbnRyeS5wdXNoKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9yRWFjaENvbGxlY3Rpb24gKGNvbGxlY3Rpb25NYXAsIG1ldGhvZCkge1xyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5W21ldGhvZF0oXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIG5vdGU6IHdpdGggdGhlIG5ldyBpdGVtIHN0cnVjdHVyZSwgKmFsbCogbG9jYWwgaXRlbXMgYXJlIGluIHRoZSBzaW5nbGUgaXRlbSBjYWNoZVxyXG5cdHByaXZhdGUgb25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKSB7XHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29udmVyc2lvbk1hcCkpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbUNvbHVtbnMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICghaGFzUHJvcGVydGllcyh1cGRhdGVkQ29sdW1ucykpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodXBkYXRlZENvbHVtbnMuaWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcclxuXHJcblx0XHRcdC8vIHdoZW4gdXBkYXRpbmcgYW4gaXRlbSB0byByZWZlciB0byBhIG5ld2x5IGNyZWF0ZWQgaXRlbSwgdGhlIHVwZGF0ZWQgaXRlbSB3aWxsICpub3QqIGJlIGFkZGVkIHRvXHJcblx0XHRcdC8vIHNpbmdsZSBpdGVtcyAoZS5nLiBtb3ZpbmcgYSBmdW5jdGlvbiB0byBhIG5ld2x5IGNyZWF0ZWQgZnVuY3Rpb24gZ3JvdXApXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcclxuXHRcdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzaW5nbGVJdGVtcykge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBwcm9wZXIgb3JkZXI6IGNyZWF0ZSAtIG1vdmUgLSBkZWxldGUgLSB1cGRhdGVcclxuXHRwcml2YXRlIGV4ZWN1dGVSZXF1ZXN0cyAoY2hhbmdlc0NvbXBpbGF0aW9uOiBDaGFuZ2VzQ29tcGlsYXRpb24sIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKSB7XHJcblx0XHRjb25zdCBjb21waWxhdGlvbiA9IGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbjtcclxuXHRcdGNvbnN0IHNpbmdsZUl0ZW1zID0gY2hhbmdlc0NvbXBpbGF0aW9uLnNpbmdsZUl0ZW1zO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjaGFuZ2VzQ29tcGlsYXRpb24uY29sbGVjdGlvbnMudG9BcnJheSgpO1xyXG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhjaGFuZ2VzQ29tcGlsYXRpb24sIHBhcmFtZXRlcnMsIGNvbnZlcnNpb25NYXAsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlTW92ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLm1vdmUsIGNvbnZlcnNpb25NYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJpb3JpdGl6ZVVwZGF0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLnVwZGF0ZSwgcGFyYW1ldGVycyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdH0sIC8vIGl0ZW0gaWQgY29udmVyc2lvbiBtYXBcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlJdGVtVHlwZU1hcCwgQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmVudW0gQ09OU1RBTlRTIHtcclxuXHRNQVlCRSA9ICdtYXliZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XHJcblx0ZW50cmllczogQ29sbGVjdGlvbkVudHJ5SXRlbVR5cGVNYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29udGFpbnMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBlbnRyeSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0c29tZSAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB2b2lkKTogYm9vbGVhbiB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cnkpKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIGluIHVzZVxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdGNhbGxiYWNrKGVudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0ucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChjb2xsZWN0aW9uRW50cnk/OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV0uaW5kZXhPZihjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdGlmIChpbmRleCA9PT0gLTEpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKTogQ29sbGVjdGlvbkVudHJ5W10ge1xyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnNsaWNlKCk7XHJcblx0fVxyXG5cclxuXHRtYXRjaFBhcmVudCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiB0aGluayBvZiBiZXR0ZXIgbmFtZVxyXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdldFJlc291cmNlQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuZ2V0Q3VycmVudFJlc291cmNlKCk7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChjb2xsZWN0aW9uRW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSlcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT25seSByZXNvdXJjZXNcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpdGVtSWRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cclxuXHQgKi9cclxuXHRnZXRCeUNvbnRhaW5pbmdJdGVtIChpdGVtVHlwZSwgaXRlbUlkKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMgdGhlIGl0ZW0gJ2JlbG9uZ3MnIGluLlxyXG5cdCAqL1xyXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbk1hdGNoUmVzdWx0ID0ge2ZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xyXG5cclxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGZpZWxkcywgcGFyZW50KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoUmVzdWx0ID0gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCk7XHJcblxyXG5cdFx0XHQvLyBUT0RPOiBtYXliZT9cclxuXHRcdFx0aWYgKG1hdGNoUmVzdWx0ID09PSB0cnVlKSAvLyBtaWdodCBhbHNvIHJldHVybiAnbWF5YmUnXHJcblx0XHRcdFx0cmVzdWx0LmZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxyXG5cdFx0XHRcdHJlc3VsdC5tYXliZS5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRyZXN1bHQubm90Zml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29uc29sZS50aW1lRW5kKCdnZXRCeUZpdHRpbmdJdGVtJyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5LnN0cmluZyA9PT0gcXVlcnkuc3RyaW5nKVxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXRCeUtleSAoaXRlbVR5cGUsIGVudHJ5S2V5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0aWYgKGVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGUsIHJlc291cmNlS2V5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiBlbnRyeS5yZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRpZiAocmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMucmVzb3VyY2VLZXkgPT09IHJlc291cmNlS2V5KVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHQvLyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBjb2x1bW5zIHByb3BlcnR5LCBpdCB3aWxsIGJlIHJlcGxhY2VkIGluIHdoZW4gY29sdW1ucyBhcmUgZXhwYW5kZWRcclxuXHRjbG9uZU9wdGlvbnMgKG9wdGlvbnMsIHBhcmVudCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxyXG5cclxuXHRcdHJlc3VsdC5xdWVyeVBhcmFtcyA9IHRoaXMuY2xvbmVRdWVyeVBhcmFtcyhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsb25lUXVlcnlQYXJhbXMgKHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHBhcmFtZXRlcnMpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWUgPSBwYXJhbWV0ZXJzW2tleV07XHJcblx0XHRcdGxldCBjbG9uZTtcclxuXHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLnNsaWNlKCk7IC8vIHdlJ3JlIG9ubHkgdXNpbmcgcHJpbWl0aXZlIGFycmF5c1xyXG5cdFx0XHRlbHNlIGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuY2xvbmUoKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWU7XHJcblxyXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNsb25lO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNvbHVtbnM6IFtdLFxyXG5cdFx0XHRcdHF1ZXJ5OiBudWxsLFxyXG5cdFx0XHRcdHF1ZXJ5SXRlbVR5cGU6IG51bGwsXHJcblx0XHRcdFx0cXVlcnlQYXJhbXM6IHt9LFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlLFxyXG5cdFx0XHRcdGxpbWl0OiBudWxsLFxyXG5cdFx0XHRcdGVudHJ5S2V5OiAnJ1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlUXVlcnkgKG9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cclxuXHRcdGxldCBxdWVyeTtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnk7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xyXG5cdFx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zLnBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcclxuXHJcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XHJcblx0XHRcdFx0bGlua2VkVG9RdWVyeSA6XHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKG9wdGlvbnMucXVlcnksIGxpbmtlZFRvUXVlcnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KHF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpO1xyXG5cclxuXHRcdHJldHVybiB7b2JqZWN0OiBwYXJzZWRRdWVyeVswXSwgc3RyaW5nOiBwYXJzZWRRdWVyeVsxXX07XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFjY3VtdWxhdG9yKTogSXRlbUlkW10ge1xyXG5cdFx0aWYgKGFjY3VtdWxhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGFjY3VtdWxhdG9yID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdGFjY3VtdWxhdG9yLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHtJdGVtRW50cnlbXX0gaXRlbUVudHJpZXNcclxuXHQgKiBAcGFyYW0geyhpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbn0gY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XHJcblx0ICpcclxuXHQgKiBmaWx0ZXIgYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gUmV0dXJuIHRoZSBlbnRyaWVzIHRoYXQgZmFpbGVkIHRoZSBjb25kaXRpb25cclxuXHQgKiBSZXBsYWNlIHRoZSBnaXZlbiBhcnJheSB3aXRoIHRoZSBlbnRyaWVzIHRoYXQgZGlkbid0IGZhaWwgdGhlIGNvbmRpdGlvbi5cclxuXHQgKi9cclxuXHRmaWx0ZXJBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XHJcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZW1vdmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbUVudHJ5KSlcclxuXHRcdFx0XHRmaWx0ZXJlZEVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0cmVtb3ZlZEVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiByZW1vdmVkRW50cmllcztcclxuXHJcblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbUVudHJpZXMubGVuZ3RoOyBpKyspXHJcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xyXG5cclxuXHRcdHJldHVybiByZW1vdmVkRW50cmllcztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25DYWNoZSxcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxyXG5cdENvbHVtbkV4cGFuc2lvbixcclxuXHRDb2x1bW5IYW5kbGVyLFxyXG5cdENvbHVtblNldCxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2UsXHJcblx0UXVlcnlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSwgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSwgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBRdWVyeVBhcnNlckZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCwgQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsIEVudHJ5UGFyZW50LCBFbnRyeVN0YXR1cywgSXRlbUVudHJ5UGFyZW50SWRNYXAsIEl0ZW1JZCxcclxuXHRJdGVtUmVzb3VyY2VJdGVtSWRNYXAsIEl0ZW1UeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkhhbmRsZXIge1xyXG5cdGVudHJpZXM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0fVxyXG5cclxuXHRnZXRQcm9taXNlcyAoc3RhdHVzUmVzb3VyY2U6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwKSB7XHJcblx0XHRjb25zdCBwcm9taXNlZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF07XHJcblx0XHRjb25zdCBwcm9taXNlZEV4cGFuZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcHJvbWlzZWQpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkW3BhcmVudElkXSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZEV4cGFuZClcclxuXHRcdFx0cmVzdWx0LnB1c2gocHJvbWlzZWRFeHBhbmRbcGFyZW50SWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdElkcyAoc3RhdHVzUmVzb3VyY2UpIHtcclxuXHRcdGNvbnN0IHJlc29sdmUgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XHJcblx0XHRjb25zdCBleHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuRVhQQU5EXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHJlc29sdmUpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHJlc29sdmVbcGFyZW50SWRdLnBhcmVudC5pdGVtSWQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gZXhwYW5kKVxyXG5cdFx0XHRyZXN1bHQucHVzaChleHBhbmRbcGFyZW50SWRdLnBhcmVudC5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5ID0gZW50cnkuY29sbGVjdGlvbjtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XHJcblx0XHRcdGNvbGxlY3Rpb24uYWRkSXRlbXMoZW50cnkuZml0dGluZywgbnVsbCwgdHJ1ZSk7IC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXHJcblxyXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uTWF0Y2hlciAoKTogQ29sbGVjdGlvbk1hdGNoZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbdGhpcy5lbnRyaWVzXSwgdHJ1ZSwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nID0gbWFwRW50cnkuZml0dGluZztcclxuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxyXG5cdFx0XHRcdGlkQXJyYXkucHVzaChmaXR0aW5nSXRlbS5pdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXHJcblx0XHRcdFx0aWRBcnJheS5wdXNoKG1heWJlSXRlbSk7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2VcclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdGFkZFRvQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXAsIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCk6IEl0ZW1SZXNvdXJjZVtdIHtcclxuXHRcdGxldCByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcclxuXHJcblx0XHRcdGlmICh1cGRhdGVJbml0aWFsICYmIG1hcEVudHJ5Lm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGJhdGNoRXhwYW5kIChwYXJlbnRUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSwgbmV3Q29sdW1ucyk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlW10+IHtcclxuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2xsZWN0aW9ucyk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHRcdGxldCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHQvLyBUT0RPOiBmaWx0ZXIgbG9jYWwgaXRlbXM/XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XHJcblxyXG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2goKDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudCkuaXRlbUlkKTtcclxuXHJcblx0XHRcdGl0ZW1FbnRyaWVzID0gaXRlbUVudHJpZXMuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5pdGVtcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXHJcblx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRudWxsLFxyXG5cdFx0XHRuZXdDb2x1bW5zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxyXG5cdFx0XHRcdFx0bmV3Q29sdW1ucyxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRpdGVtRW50cmllc1xyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSlcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeS5leHBhbmRDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XHJcblxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9ucztcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGJhdGNoRXh0ZW5kIChcclxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcclxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0cXVlcnlDYWxsYmFjayxcclxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSxcclxuXHRcdHJldHVybkFsbEl0ZW1zID0gZmFsc2VcclxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbGxlY3Rpb25zKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih7fSk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHRcdGxldCBpdGVtSWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gcXVlcnlDYWxsYmFjayhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcclxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKCg8RW50cnlQYXJlbnQ+IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpLml0ZW1JZCk7XHJcblxyXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcclxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucykub2JqZWN0LFxyXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRvcHRpb25zLmNvbHVtbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlID0gY29sbGVjdGlvbnNbcGFyZW50SWRdO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5hZGRJdGVtcyggLy8gc2hvdWxkIGdvIGZpcnN0XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSByZXR1cm5BbGxJdGVtcyA/IGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRiYXRjaEZldGNoIChcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcclxuXHRcdGNvbnN0IHJlc291cmNlID0gdGhpcy5jcmVhdGVTdGF0dXNSZXNvdXJjZShwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwodGhpcy5nZXRQcm9taXNlcyhyZXNvdXJjZSkpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXF1ZXN0SWRzID0gdGhpcy5nZXRSZXF1ZXN0SWRzKHJlc291cmNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXHJcblx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cclxuXHRcdFx0XHRcdFx0XHRudWxsIDpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5xdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKVswXSxcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zXHJcblx0XHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXHJcblx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUJhdGNoUmVzcG9uc2UocmVzb3VyY2UsIGl0ZW1FbnRyeVJlc291cmNlLCBpdGVtQ2FjaGUpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoaGFzUHJvcGVydGllcyhyZXNvdXJjZVtFTlRSWV9TVEFUVVMuTE9DQUxdKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUJhdGNoUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZSxcclxuXHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHRpdGVtQ2FjaGVcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmVzb3VyY2VbRU5UUllfU1RBVFVTLkNBQ0hFRF07XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVTdGF0dXNSZXNvdXJjZSAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXNJZCBpbiBFTlRSWV9TVEFUVVMpXHJcblx0XHRcdHJlc3VsdFtFTlRSWV9TVEFUVVNbc3RhdHVzSWRdXSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xyXG5cdFx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7IC8vIHVzZSBwcm9jZXNzRW50cnlPcHRpb25zIHRvIGNsb25lIFRPRE86IHVzZSBjbG9uZU9wdGlvbnNcclxuXHJcblx0XHRcdGxldCBzdGF0dXNSZXNvdXJjZTtcclxuXHJcblx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9O1xyXG5cclxuXHRcdFx0c3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XHJcblxyXG5cdFx0XHRyZXN1bHRbc3RhdHVzUmVzb3VyY2Uuc3RhdHVzXVtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5lbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2ggKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xyXG5cdFx0Y29uc3QgZW50cnkgPSBzdGF0dXNSZXNvdXJjZS5lbnRyeTtcclxuXHJcblx0XHRzd2l0Y2ggKHN0YXR1c1Jlc291cmNlLnN0YXR1cykge1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihlbnRyeSk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkQ6XHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2UudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVJlbW90ZShlbnRyeSwgaXRlbUNhY2hlKTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGVudHJ5LCBpdGVtQ2FjaGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcclxuXHRcdGNvbnN0IGlzQ29sdW1uU3VwZXJzZXQgPSBjb2xsZWN0aW9uRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2Yob3B0aW9ucy5jb2x1bW5zKTtcclxuXHJcblx0XHRpZiAoIWNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdHJldHVybiBpc0NvbHVtblN1cGVyc2V0ID8gRU5UUllfU1RBVFVTLkNBQ0hFRCA6IEVOVFJZX1NUQVRVUy5FWFBBTkQ7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuTE9DQUwgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaXNDb2x1bW5TdXBlcnNldCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ7XHJcblx0fVxyXG5cclxuXHRnZXREZWZlcnJlZEVudHJ5U3RhdHVzIChpdGVtVHlwZTogSXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpOiB7ZW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogYm9vbGVhbn0ge1xyXG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcclxuXHJcblx0XHRpZiAoIW9wdGlvbnMuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gZGVmZXJyZWRFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRSZXF1ZXN0Q29sdW1ucyhvcHRpb25zLmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHtlbnRyeTogZGVmZXJyZWRFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBpc0RlZmVycmVkOiB0cnVlfTtcclxuXHR9XHJcblxyXG5cdGdldEVudHJ5U3RhdHVzIChpdGVtVHlwZTogSXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsRW50cmllczogQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgcXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XHJcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0bGV0IGlzRGVmZXJyZWQ7XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNMb2NhbChvcHRpb25zKSkge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSBsb2NhbEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcclxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpfTtcclxuXHJcblx0XHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpKTtcclxuXHJcblx0XHRcdGlmIChpc0RlZmVycmVkKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xyXG5cclxuXHRcdFx0Ly8gbmV3IGxvY2FsIGVudHJ5IGNyZWF0ZWQsIHNob3VsZCBiZSBhZGRlZCB0byBsb2NhbCBjYWNoZSBvbmx5XHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUx9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XHJcblxyXG5cdFx0Ly8gZW50cnkgYWxyZWFkeSBleGlzdHMgaW4gZ2xvYmFsIGNhY2hlLCBhZGQgdG8gbG9jYWwgY2FjaGVcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSxcclxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpKTtcclxuXHJcblx0XHRpZiAoaXNEZWZlcnJlZClcclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XHJcblxyXG5cdFx0Ly8gbmV3IGdsb2JhbCBlbnRyeSBjcmVhdGVkLCBhZGQgdG8gYm90aCBsb2NhbCBhbmQgZ2xvYmFsIGNhY2hlXHJcblx0XHRsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR0aGlzLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5SRVNPTFZFfTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUJhdGNoUmVzcG9uc2UgKFxyXG5cdFx0c3RhdHVzUmVzb3VyY2UsXHJcblx0XHRpdGVtRW50cnlDb21wb3VuZDoge1xyXG5cdFx0XHRjb2x1bW5zOiBDb2x1bW5TZXQsXHJcblx0XHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvbixcclxuXHRcdFx0aXRlbXM/OiBJdGVtRW50cnlQYXJlbnRJZE1hcFxyXG5cdFx0fSxcclxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5jYWNoZWQpXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5jYWNoZWRbcGFyZW50SWRdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UucmVzb2x2ZSkge1xyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UucmVzb2x2ZVtwYXJlbnRJZF0ucmVzb2x2ZShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRpdGVtczogKDxJdGVtRW50cnlQYXJlbnRJZE1hcD4gaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMpW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5leHBhbmQpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBzdGF0dXNSZXNvdXJjZS5leHBhbmRbcGFyZW50SWRdO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZENvbHVtbnMoPENvbHVtbkV4cGFuc2lvbj4gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uRXhwYW5zaW9uKTtcclxuXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5sb2NhbCkge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmxvY2FsW3BhcmVudElkXTtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGl0ZW1zOiBpdGVtQ2FjaGUuZ2V0QnlQYXJlbnQoXHJcblx0XHRcdFx0XHRcdHBhcmVudC5pdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCxcclxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUxvY2FsIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXHJcblx0XHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMsIGZhbHNlKVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRsZXQgY29sdW1uU2V0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoY29sbGVjdGlvbkVudHJ5KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucyxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudCxcclxuXHRcdFx0XHRcdGNvbHVtblNldFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUVudHJpZXMuY29uY2F0KGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSkpLFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5TZXRcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsIChvcHRpb25zKSB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGlkZW50aXR5LCBJdGVtSWQgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcy8nO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyIHtcclxuXHRtYXA6IHtcclxuXHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXToge1xyXG5cdFx0XHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnlcclxuXHRcdFx0bWF0Y2hlczoge1xyXG5cdFx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IHsgaXRlbTogSXRlbUVudHJ5LCBpc01hdGNoOiBib29sZWFuIH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0gPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSxcclxuXHRcdHByaXZhdGUgdXBkYXRlSW5pdGlhbDogYm9vbGVhbixcclxuXHRcdHByaXZhdGUgY2FsbE9uQWN0aXZhdGU6IGJvb2xlYW5cclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRleHBhbmQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uQ2FjaGUgb2YgdGhpcy5jb2xsZWN0aW9uQ2FjaGVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gY29sbGVjdGlvbkNhY2hlLmdldEJ5SXRlbVR5cGUoaXRlbUVudHJ5Lml0ZW1UeXBlKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5ICBvZiBjb2xsZWN0aW9uRW50cmllcykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeUlkID0gY29sbGVjdGlvbkVudHJ5LmlkO1xyXG5cdFx0XHRcdGxldCBtYXRjaGVzO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5tYXBbY29sbGVjdGlvbkVudHJ5SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHR0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPSB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb25FbnRyeSwgbWF0Y2hlczoge30gfTtcclxuXHJcblx0XHRcdFx0bWF0Y2hlcyA9IHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXS5tYXRjaGVzO1xyXG5cclxuXHRcdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0bWF0Y2hlc1tpdGVtSWRdID0ge1xyXG5cdFx0XHRcdFx0aXRlbTogaXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0aXNNYXRjaDogcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdClcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHJcblx0XHRcdGlmICh0aGlzLmhhc0ZpdHRpbmdJdGVtcyhtYXBFbnRyeS5tYXRjaGVzKSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChtYXBFbnRyeS5jb2xsZWN0aW9uKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkVG9Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUVudHJpZXMgPSBncm91cGVkSXRlbUVudHJpZXMuZml0dGluZztcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpIHtcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXHJcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXHJcblx0XHRcdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXHJcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXHJcblx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxyXG5cdFx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy51cGRhdGVJbml0aWFsICYmIGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1JZHMgPSB0aGlzLmdyb3VwSXRlbUlkcyhtYXBFbnRyeS5tYXRjaGVzKS5maXR0aW5nO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlID09PSBudWxsIHx8IGNvbGxlY3Rpb25FbnRyeSAhPT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCByZXN1bHRSZXNvdXJjZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhmaXR0aW5nSXRlbUlkcywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZ3JvdXBlZEl0ZW1FbnRyaWVzLm5vdEZpdHRpbmcsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblxyXG5cdFx0XHQvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoZ3JvdXBlZEl0ZW1FbnRyaWVzLmZpdHRpbmcsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblxyXG5cdFx0XHRpZiAoZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ3JvdXBJdGVtRW50cmllcyAobWF0Y2hlcykge1xyXG5cdFx0Y29uc3QgZml0dGluZzogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblx0XHRjb25zdCBtYXliZTogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBtYXRjaC5pdGVtO1xyXG5cdFx0XHRjb25zdCBpc01hdGNoID0gbWF0Y2guaXNNYXRjaDtcclxuXHJcblx0XHRcdGlmIChpc01hdGNoID09PSB0cnVlKVxyXG5cdFx0XHRcdGZpdHRpbmcucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRlbHNlIGlmIChpc01hdGNoID09PSBmYWxzZSlcclxuXHRcdFx0XHRub3RGaXR0aW5nLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRtYXliZS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHsgZml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZywgbWF5YmU6IG1heWJlIH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdyb3VwSXRlbUlkcyAobWF0Y2hlcykge1xyXG5cdFx0Ly8gYWxzbyBpbmNsdWRlcyAnbWF5YmUnO1xyXG5cdFx0Y29uc3QgZml0dGluZzogSXRlbUlkW10gPSBbXTtcclxuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xyXG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcclxuXHJcblx0XHRcdChtYXRjaC5pc01hdGNoID09PSBmYWxzZSA/IG5vdEZpdHRpbmcgOiBmaXR0aW5nKS5wdXNoKG1hdGNoLml0ZW0uaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4geyBmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nIH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhhc0ZpdHRpbmdJdGVtcyAobWF0Y2hlcykge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xyXG5cdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdLmlzTWF0Y2ggPT09IHRydWUpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIHtcclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXRJdGVtczogZmFsc2UsXHJcblx0XHRcdFx0ZWRpdENvbGxlY3Rpb246IGZhbHNlLFxyXG5cdFx0XHRcdG1vZEluc3RhbnQ6IGZhbHNlLFxyXG5cdFx0XHRcdGVuYWJsZVNhdmU6IHRydWUsXHJcblx0XHRcdFx0b25JdGVtc0NyZWF0ZWQ6IG5vb3AsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsIC8vIG5lZWRlZCBmb3IgY29tcGFyaXNvblxyXG5cdFx0XHRcdG9uQWRkOiBub29wLFxyXG5cdFx0XHRcdG9uUmVtb3ZlOiBub29wLFxyXG5cdFx0XHRcdG9uQWRkSW5pdGlhbDogbm9vcCxcclxuXHRcdFx0XHRvblJlbW92ZUluaXRpYWw6IG5vb3AsXHJcblx0XHRcdFx0b25BY3RpdmF0ZUl0ZW06IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZUl0ZW06IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZUNvbGxlY3Rpb246IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxyXG5cdFx0XHRcdHJlc291cmNlS2V5OiBudWxsLCAvLyBUT0RPOiByZW1vdmVcclxuXHRcdFx0XHRjbGVhck9uVGFiQ2hhbmdlOiB0cnVlLFxyXG5cdFx0XHRcdGNsZWFyT25TdWJUYWJDaGFuZ2U6IHRydWUsXHJcblx0XHRcdFx0Y3VzdG9tOiBudWxsXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkNhY2hlIHtcclxuXHRjYWNoZSA9IHt9O1xyXG5cdGFsbENvbHVtbnMgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbikge1xyXG5cdFx0aWYgKHRoaXMuY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuY2FjaGVbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Y29uc3QgZW50cnkgPSB0aGlzLmNhY2hlW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XHJcblxyXG5cdFx0aWYgKGVudHJ5W2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRyZXR1cm4gZW50cnlbY29sdW1uSWRdO1xyXG5cdH1cclxuXHJcblx0c2V0Q29sdW1ucyAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVzcG9uc2VUeXBlIGluIHJlc3BvbnNlQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5zW3Jlc3BvbnNlVHlwZV07XHJcblxyXG5cdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxyXG5cdFx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdW2NvbHVtbklkXSA9IHRoaXMuc2V0Q29sdW1uKHJlc3BvbnNlVHlwZSwgY29sdW1uc1tjb2x1bW5JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSlcclxuXHRcdFx0dGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJldHJpZXZlIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpOiB7IG1pc3Npbmc6IGFueVtdIHwgdHJ1ZSwgY2FjaGVkOiBvYmplY3QgfSB7XHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcclxuXHRcdFx0aWYgKHRoaXMuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxyXG5cdFx0XHRcdHJldHVybiB7Y2FjaGVkOiB0aGlzLmdldENvbHVtbnMoaXRlbVR5cGUpLCBtaXNzaW5nOiBbXX07XHJcblxyXG5cdFx0XHRyZXR1cm4ge2NhY2hlZDoge30sIG1pc3Npbmc6IHRydWV9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHJlcG9uc2VBY2N1bXVsYXRvciA9IHt9O1xyXG5cdFx0Y29uc3QgcmVxdWVzdEFjY3VtdWxhdG9yID0gW107XHJcblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlcG9uc2VBY2N1bXVsYXRvcik7XHJcblxyXG5cdFx0cmV0dXJuIHttaXNzaW5nOiByZXF1ZXN0QWNjdW11bGF0b3IsIGNhY2hlZDogcmVwb25zZUFjY3VtdWxhdG9yfTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPT09IHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXRDb2x1bW5zIChpdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyBbXSA6IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IGNvbHVtbnM7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKSB7XHJcblx0XHQvLyBhbHdheXMgcmV0cmlldmUgdGhlIGlkIGNvbHVtblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgJ2lkJywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpXHJcblx0XHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1uIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSB0aGlzLmdldENvbHVtbihpdGVtVHlwZSwgY29sdW1uLmlkKTtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaChyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdW2NvbHVtbi5pZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG1pc3NpbmdEZXJpdmVkID0gW107XHJcblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNvbHVtbi5jaGlsZHJlbiwgbWlzc2luZ0Rlcml2ZWQsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xyXG5cclxuXHRcdGlmIChtaXNzaW5nRGVyaXZlZC5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBtaXNzaW5nUmVxdWVzdCA9IHt9O1xyXG5cdFx0bWlzc2luZ1JlcXVlc3RbY29sdW1uLmlkXSA9IG1pc3NpbmdEZXJpdmVkO1xyXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gobWlzc2luZ1JlcXVlc3QpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW4gKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xyXG5cdFx0aWYgKHRoaXMuY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jYWNoZVtpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvblJlc3VsdCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb24ge1xyXG5cdGV4cGFuc2lvbk1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0fSA9IHt9O1xyXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyByZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXHJcblx0XHRwdWJsaWMgcmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxyXG5cdCkge1xyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XHJcblx0XHRcdC8vIHJlcXVlc3RDb2x1bW5zIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXksIHdoZW4gaXQgaXMgdHJ1ZSBkZXJpdmVkIGNvbHVtbiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3RcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucy5wdXNoKGNvbHVtbklkKTtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cnVuIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0SWQgPSBjb2x1bW5TZXQuaWQ7XHJcblxyXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xyXG5cclxuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdCxcclxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAoaXNDb2x1bW5TdWJzZXQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSA9IHRoaXMuZXhwYW5kQ29sdW1uSW5mbyhjb2x1bW5TZXQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4cGFuZENvbHVtbkluZm8gKGNvbHVtblNldDogQ29sdW1uU2V0KTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RNZXJnZVJlc3VsdCA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtblNldC5yZXF1ZXN0LCB0aGlzLnJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdGNvbnN0IG1lcmdlZFJlc3BvbnNlQ29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0XHQubWVyZ2VSZXNwb25zZUNvbHVtbnMoY29sdW1uU2V0LnJlc3BvbnNlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucylcclxuXHRcdFx0Lm1lcmdlZDtcclxuXHJcblx0XHRjb25zdCBtZXJnZWQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQubWVyZ2VkLFxyXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnNcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RNZXJnZVJlc3VsdC5kaWZmZXJlbmNlLFxyXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnMsIC8vIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBsb29rIHVwIHRoZSBwYXJlbnQgb2YgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHJcblx0XHRtZXJnZWQucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgfHwgY29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uQ2FjaGUsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkhhbmRsZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2FjaGU6IENvbHVtbkNhY2hlLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdHNldENvbHVtbiAoaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cdH1cblxuXHRzZXRDb2x1bW5zIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucykge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtVHlwZVRyYW5zbGF0aW9ucyAoaXRlbVR5cGVzKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIGl0ZW1UeXBlcylcblx0XHRcdHByb21pc2VzW2l0ZW1UeXBlXSA9IHRoaXMuZmV0Y2goaXRlbVR5cGUsIFsnaWQnXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiByZXNwb25zZSlcblx0XHRcdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSByZXNwb25zZVtpdGVtVHlwZV1baXRlbVR5cGVdLmlkLm5hbWU7XG5cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0IChpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zID0ge2ZpbHRlcjogZmFsc2V9KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHBhcmFtcykudGhlbihcblx0XHRcdGNvbHVtblJlc291cmNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRjb2x1bW5zLFxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGZldGNoIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHBhcmFtcz8pOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IGNvbHVtblJlc291cmNlID0gdGhpcy5jYWNoZS5yZXRyaWV2ZShpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpO1xuXG5cdFx0aWYgKGNvbHVtblJlc291cmNlLm1pc3NpbmcgIT09IHRydWUgJiYgY29sdW1uUmVzb3VyY2UubWlzc2luZy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbHVtblJlc291cmNlLmNhY2hlZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLCBwYXJhbXMpLnRoZW4ocmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuY2FjaGVkXG5cdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaEFsbCAoaXRlbVR5cGUpOiBQcm9taXNlPGFueT4ge1xuXHRcdGlmICh0aGlzLmNhY2hlLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5jYWNoZS5nZXRDb2x1bW5zKGl0ZW1UeXBlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCB0cnVlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mbyB7XHJcblx0aWQ6IHN0cmluZztcclxuXHRsZXZlbDogbnVtYmVyO1xyXG5cdHBhdGg6IHN0cmluZztcclxuXHR0YWlsUGF0aDogc3RyaW5nO1xyXG5cdGl0ZW1UeXBlOiBzdHJpbmcgPSAnJztcclxuXHRjaGlsZHJlbjogQ29sdW1uSW5mb1tdID0gW107XHJcblx0aXNMZWFmOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKHJlYWRvbmx5IGFwaUNvbHVtbjogYW55LCByZWFkb25seSBwYXJlbnQ6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbCkge1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XHJcblxyXG5cdFx0dGhpcy5pZCA9IGNvbHVtbklkO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcclxuXHRcdFx0dGhpcy5sZXZlbCA9IDA7XHJcblx0XHRcdHRoaXMucGF0aCA9IGNvbHVtbklkO1xyXG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gJyc7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmxldmVsID0gcGFyZW50LmxldmVsICsgMTtcclxuXHRcdFx0dGhpcy5wYXRoID0gcGFyZW50LnBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XHJcblx0XHRcdHRoaXMudGFpbFBhdGggPSBwYXJlbnQubGV2ZWwgPT09IDAgP1xyXG5cdFx0XHRcdGNvbHVtbklkIDpcclxuXHRcdFx0XHRwYXJlbnQudGFpbFBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQge1JlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuY29uc3QgZW1wdHlPYmplY3QgPSB7fTtcclxubGV0IGN1cnJlbnRJZCA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0IHtcclxuXHRpZCA9ICsrY3VycmVudElkO1xyXG5cclxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XHJcblx0cmVzcG9uc2U6IFJlc3BvbnNlQ29sdW1uTWFwID0gZW1wdHlPYmplY3Q7XHJcblxyXG5cdGxpbms6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbDtcclxuXHRtYWluOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRkZXJpdmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRyb290OiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRsZWFmOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRmb3JtYXR0ZWQ6IHttYWluOiBDb2x1bW5JbmZvW10sIGRlcml2ZWQ6IENvbHVtbkluZm9bXX0gPSB7bWFpbjogW10sIGRlcml2ZWQ6IFtdfTtcclxuXHRmaWx0ZXJlZDogQ29sdW1uSW5mb1tdID0gW107XHJcblx0Y3VzdG9tOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRzZWFyY2hhYmxlOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRpdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRub3RJdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHJcblx0ZW5hYmxlQ2FjaGluZzogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3RvcnksXHJcblx0XHRwdWJsaWMgaXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgcmVxdWVzdDogUmVxdWVzdENvbHVtbnMsXHJcblx0KSB7XHJcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdCA9PT0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKTogdGhpcyB7XHJcblx0XHR0aGlzLmVuYWJsZUNhY2hpbmcgPSBlbmFibGVDYWNoaW5nO1xyXG5cclxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSlcclxuXHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2VDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRlbHNlXHJcblx0XHRcdHRoaXMucHJvY2Vzc1JlcXVlc3RDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgbWVyZ2VkUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIGNvbHVtbnMpLm1lcmdlZDtcclxuXHJcblx0XHR0aGlzLnJlcXVlc3QgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucztcclxuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gbWVyZ2VkUmVxdWVzdENvbHVtbnMgPT09IHRydWU7XHJcblx0fVxyXG5cclxuXHRpc1N1cGVyc2V0T2YgKGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KGNvbHVtbnMsIHRoaXMucmVxdWVzdCwgdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzUmVzcG9uc2VDb2x1bW5zIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblxyXG5cdFx0dGhpcy5yZXF1ZXN0ID0gW107XHJcblx0XHR0aGlzLnJlc3BvbnNlID0gdGhpcy5lbmFibGVDYWNoaW5nID9cclxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSA6XHJcblx0XHRcdHJlc3BvbnNlQ29sdW1ucztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0dGhpcy5tYWluLnB1c2godGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgW10sIG51bGwsIHJlc3BvbnNlQ29sdW1ucykpO1xyXG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NSZXF1ZXN0Q29sdW1ucyAocmVzcG9uc2VDb2x1bW5zLCBpbmNsdWRlSWRDb2x1bW4pIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gPG9iamVjdFtdPiB0aGlzLnJlcXVlc3Q7IC8vIHdlIGNhbiBhc3N1bWUgcmVxdWVzdENvbHVtbnMgaXMgYW4gYXJyYXkgaGVyZVxyXG5cclxuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcclxuXHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbkluZm8gPT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXHJcblx0XHRcdFx0dGhpcy5yb290LnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluY2x1ZGVJZENvbHVtbiAmJiB0aGlzLnJlc3BvbnNlW2l0ZW1UeXBlXS5pZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKCdpZCcsIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbkluZm8gIT09IG51bGwpXHJcblx0XHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFJlcXVlc3RDb2x1bW5JbmZvIChyZXF1ZXN0Q29sdW1uLCBpdGVtVHlwZSwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbHVtbi5pZDtcclxuXHJcblx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ05vIGFwaSBjb2x1bW4gZm9yIHJlcXVlc3QgY29sdW1uJywgY29sdW1uSWQsICdmb3IgaXRlbVR5cGUnLCBpdGVtVHlwZSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5lbmFibGVDYWNoaW5nKVxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcclxuXHJcblx0XHRjb25zdCByZXN1bHRSZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XHJcblxyXG5cdFx0aWYgKHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIHBhcnNlZENvbHVtbi5jaGlsZHJlbiwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW5JbmZvIChjb2x1bW5JZCwgaXRlbVR5cGUsIGNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk6IENvbHVtbkluZm8ge1xyXG5cdFx0Y29uc3QgY29sdW1uVXRpbCA9IHRoaXMuY29sdW1uVXRpbDtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2VDb2x1bW4sIHBhcmVudCk7XHJcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBwYXJlbnQgIT09IG51bGw7XHJcblxyXG5cdFx0aWYgKGlzRGVyaXZlZClcclxuXHRcdFx0dGhpcy5kZXJpdmVkLnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHRlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXHJcblx0XHRcdHRoaXNbY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5mb3JtYXR0ZWRbaXNEZXJpdmVkID8gJ2Rlcml2ZWQnIDogJ21haW4nXS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmZpbHRlcmVkLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5zZWFyY2hhYmxlLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmN1c3RvbS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbi50eXBlID09PSAnbGluaycpXHJcblx0XHRcdHRoaXMubGluayA9IGNvbHVtbkluZm87XHJcblxyXG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLmxlYWYucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRcdHJldHVybiBjb2x1bW5JbmZvO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbHVtbkluZm8uaXRlbVR5cGUgPSByZXNwb25zZUNvbHVtbi5pdGVtVHlwZTtcclxuXHRcdGNvbHVtbkluZm8uY2hpbGRyZW4gPSBbXTtcclxuXHRcdGNvbHVtbkluZm8uaXNMZWFmID0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gY29sdW1ucyBpcyAqbm90KiB0cnVlXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uSWQgb2YgY2hpbGRyZW4pIHtcclxuXHRcdFx0Y29uc3QgY2hpbGRJbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhcclxuXHRcdFx0XHRjaGlsZENvbHVtbklkLFxyXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLFxyXG5cdFx0XHRcdGNvbHVtbkluZm8sXHJcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRJbmZvID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29sdW1uSW5mby5jaGlsZHJlbi5wdXNoKGNoaWxkSW5mbyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbHVtbkluZm87XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiwgUkVOREVSX0FTX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IExvY2FsQ29sdW1uLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNvcHksIGV4dGVuZCwgZ2V0Rmlyc3RQcm9wZXJ0eSwgaXNEZWZpbmVkIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5VdGlsIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRnZXRDb2x1bW5QYXRoIChjb2x1bW5zLCByZW5kZXJBcykge1xyXG5cdFx0bGV0IHNlcGVyYXRvciA9ICcnO1xyXG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0cmVzdWx0ICs9IHNlcGVyYXRvciArIGNvbHVtbi5pZDtcclxuXHRcdFx0c2VwZXJhdG9yID0gQ09MVU1OX1NFUEVSQVRPUjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVuZGVyQXMgIT09IG51bGwpXHJcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldERhdGVGb3JtYXRPcHRpb25zIChjb2x1bW5UeXBlKSB7XHJcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcclxuXHJcblx0XHRjb25zdCBmb3JtYXRzID0ge1xyXG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXHJcblx0XHRcdCdKLU0nOiBub3cuZm9ybWF0KCdERC1NTScpLFxyXG5cdFx0XHQnaitGK1knOiBub3cuZm9ybWF0KCdEIE1NTSBZWVlZJyksXHJcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXHJcblx0XHRcdCdGJzogbm93LmZvcm1hdCgnTU1NJyksXHJcblx0XHRcdCdmJzogbm93LmZvcm1hdCgnTU1NTScpLFxyXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcclxuXHRcdFx0J2QnOiBub3cuZm9ybWF0KCdkZGQnKVxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoY29sdW1uVHlwZSA9PT0gJ2RhdGV0aW1lJylcclxuXHRcdFx0ZXh0ZW5kKGZvcm1hdHMsIHtcclxuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxyXG5cdFx0XHRcdCdKLU0rSDppJzogbm93LmZvcm1hdCgnREQtTU0gSEg6bW0nKSxcclxuXHRcdFx0XHQnaitGK1krSDppJzogbm93LmZvcm1hdCgnREQgTU1NTSBZIEhIOm1tJyksXHJcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxyXG5cdFx0XHRcdCdIOmknOiBub3cuZm9ybWF0KCdISDptbScpLFxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gZm9ybWF0cztcclxuXHR9XHJcblxyXG5cdGlzU3RyaW5nQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICdwaG9uZSc6XHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxyXG5cdFx0XHRcdC8vIGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRmxvYXRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xyXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNJbnRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pc0Zsb2F0Q29sdW1uKGNvbHVtbikgfHwgdGhpcy5pc0ludENvbHVtbihjb2x1bW4pO1xyXG5cdH1cclxuXHJcblx0aXNDdXN0b21Db2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIGNvbHVtbi5maWVsZHR5cGUgPT09ICdjdXN0b21maWVsZCc7XHJcblx0fVxyXG5cclxuXHRpc0l0ZW1Db2x1bW4gKGNvbHVtbiwgaW5jbHVkZUlkID0gdHJ1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdpZCc6XHJcblx0XHRcdFx0cmV0dXJuIGluY2x1ZGVJZDtcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRGF0ZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNSZW5kZXJlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0ZpbHRlcmVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdC8vIHVnbHkgaGFjayA6LShcclxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0Zvcm1hdHRlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1NlbGVjdGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdibG9iJzpcclxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XHJcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcclxuXHRcdFx0Y2FzZSAnaWQnOlxyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0Y2FzZSAnb3JkZXInOlxyXG5cdFx0XHRjYXNlICdwYXJlbnRpZCc6XHJcblx0XHRcdGNhc2UgJ3BhcmVudHR5cGUnOlxyXG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XHJcblx0XHRcdGNhc2UgJ3Rva2VuJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRoYXNMb2NhdGlvblByb3BlcnR5IChjb2x1bW4sIGxvY2F0aW9uKSB7XHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG5cdFx0cmV0dXJuIChsb2NhdGlvbiAmIGNvbHVtbi5sb2NhdGlvbikgIT09IDA7XHJcblx0fVxyXG5cclxuXHRpc0VkaXRhYmxlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdGlmIChjb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRpc1NlYXJjaGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uKSB7XHJcblx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZygnZ2V0RGVmYXVsdFdlaWdodCcsIGNvbHVtbik7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkb3VibGUnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRjYXNlICdpbnQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRcdHJldHVybiAwLjU7XHJcblxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRcdHJldHVybiAxLjU7XHJcblxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2h0bWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdFx0cmV0dXJuIFsnPScsICc+JywgJzwnXTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZXR1cm5zIHdoZXRoZXIgdGhlIGZpcnN0IGNvbHVtbiBzZXQgaXMgYSBzdWJzZXQgb2YgdGhlIHNlY29uZFxyXG5cdGlzQ29sdW1uU3Vic2V0IChmaXJzdCwgc2Vjb25kLCBzZWNvbmRUcnVlKSB7XHJcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxyXG5cdFx0XHRyZXR1cm4gc2Vjb25kVHJ1ZTtcclxuXHJcblx0XHQvLyB3aGVuIHNlY29uZFRydWUgaXMgdGhlIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBmb3IgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnNDb2x1bW4oY29sdW1uLCBzZWNvbmQpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQ29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQhdGhpcy5jb250YWluc0NvbHVtbihcclxuXHRcdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0XHQpXHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXNwb25zZUNvbHVtbnNBdmFpbGFibGUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBwYXJzZWRDb2x1bW4uY2hpbGRyZW47XHJcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcclxuXHRcdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XHJcblxyXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhdGhpcy5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkcmVuLCByZXNwb25zZUNvbHVtbk1hcCkpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlmZmVyZW5jZTogY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nICdtZXJnZWQnIGFuZCAnZGlmZmVyZW5jZScgcHJvcGVydGllc1xyXG5cdCAqL1xyXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0LCBzZWNvbmQpOiB7bWVyZ2VkOiBSZXF1ZXN0Q29sdW1ucywgZGlmZmVyZW5jZTogUmVxdWVzdENvbHVtbnN9IHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXHJcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiBbXX07XHJcblxyXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcclxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IHRydWV9O1xyXG5cclxuXHRcdGNvbnN0IG1lcmdlZDogUmVxdWVzdENvbHVtbnMgPSBjb3B5KGZpcnN0KTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IFJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygc2Vjb25kKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oY29sdW1uLCBtZXJnZWQpO1xyXG5cclxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxyXG5cdFx0XHRcdGRpZmZlcmVuY2UucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcclxuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XHJcblx0XHRcdFx0W2NvbHVtbi5pZF06IFtdXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWRkZWRDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oXHJcblx0XHRcdFx0Y2hpbGRDb2x1bW4sXHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRhZGRlZENvbHVtbnMucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFkZGVkQ29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdFtjb2x1bW4uaWRdOiBhZGRlZENvbHVtbnNcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwYXJzZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4pIHtcclxuXHRcdGNvbnN0IGlzTGVhZiA9IHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJztcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gaXNMZWFmID8gcmVxdWVzdENvbHVtbiA6IGdldEZpcnN0UHJvcGVydHkocmVxdWVzdENvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aWQ6IGNvbHVtbklkLFxyXG5cdFx0XHRjaGlsZHJlbjogaXNMZWFmID8gW10gOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkXVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlcyB0d28gc2V0cyBvZiByZXNwb25zZSBjb2x1bW5zLlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBhICdtZXJnZWQnIGFuZCBhICdkaWZmZXJlbmNlJyBwcm9wZXJ0eS5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1ucyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IGZpcnN0W2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxyXG5cdFx0XHRcdGZpcnN0W2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRzZWNvbmRbaXRlbVR5cGVdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQubWVyZ2VkO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcclxuXHRcdFx0aWYgKGZpcnN0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XHJcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGRpZmZlcmVuY2U6IHRoZSBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdC5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGZpcnN0KVxyXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gZmlyc3RbY29sdW1uSWRdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gc2Vjb25kKSB7XHJcblx0XHRcdGlmIChpc0RlZmluZWQoZmlyc3RbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uSWQuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbnMgKGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGlmICh0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW4pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHRoaXMucGFyc2VDb25maWdDb2x1bW4oY29sdW1uKSwgcmVxdWVzdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTG9jYWxDb25maWdDb2x1bW5zIChjb25maWdDb2x1bW5zLCBsb2NhbENvbHVtbnMsIHJlbW90ZUNvbHVtbkNhbGxiYWNrLCBsb2NhbENvbHVtbkNhbGxiYWNrKSB7XHJcblx0XHRjb25zdCBsb2NhbENvbHVtbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgbG9jYWxDb2x1bW4gb2YgbG9jYWxDb2x1bW5zKVxyXG5cdFx0XHRsb2NhbENvbHVtbk1hcFtsb2NhbENvbHVtbi5pZF0gPSBsb2NhbENvbHVtbjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmZpZ0lkIG9mIGNvbmZpZ0NvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyc2VkQ29uZmlnSWQgPSBjb25maWdJZC5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKTtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb25maWdJZFswXTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uSWQpKSB7XHJcblx0XHRcdFx0cmVtb3RlQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGNvbHVtbklkLCBwYXJzZWRDb25maWdJZFsxXSk7XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBjb2x1bW4gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBsb2NhbENvbHVtbnNcclxuXHRcdFx0aWYgKGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bG9jYWxDb2x1bW5DYWxsYmFjayhjb25maWdJZCwgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdKTtcclxuXHRcdFx0ZGVsZXRlIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbnNvbGlkYXRlQ29sdW1ucyAoY29uZmlnQ29sdW1ucywgbG9jYWxDb2x1bW5zLCBhZGRSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgZmlsdGVyZWRMb2NhbENvbHVtbnM6IExvY2FsQ29sdW1uW10gPSBbXTtcclxuXHRcdGxldCByZXF1ZXN0Q29sdW1ucyA9IGNvcHkoYWRkUmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyhcclxuXHRcdFx0Y29uZmlnQ29sdW1ucyxcclxuXHRcdFx0bG9jYWxDb2x1bW5zLFxyXG5cdFx0XHQoXywgY29sdW1uSWQpID0+IHtcclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oY29sdW1uSWQuc3BsaXQoQ09MVU1OX1NFUEVSQVRPUiksIHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KF8sIGxvY2FsQ29sdW1uKSA9PiB7XHJcblx0XHRcdFx0ZmlsdGVyZWRMb2NhbENvbHVtbnMucHVzaChsb2NhbENvbHVtbik7XHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMoXHJcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0XHRcdGxvY2FsQ29sdW1uLnZhbHVlT3B0aW9ucy5yZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHRcdCkubWVyZ2VkO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB7cmVxdWVzdDogcmVxdWVzdENvbHVtbnMsIGxvY2FsOiBmaWx0ZXJlZExvY2FsQ29sdW1uc307XHJcblx0fVxyXG5cclxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpWzBdLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbiAoY29sdW1uQXJyYXksIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbkFycmF5WzBdO1xyXG5cdFx0Y29uc3QgaXNMZWFmID0gY29sdW1uQXJyYXkubGVuZ3RoID09PSAxO1xyXG5cclxuXHRcdGlmIChpc0xlYWYpIHtcclxuXHRcdFx0aWYgKGRlc3RpbmF0aW9uLmluZGV4T2YoY29sdW1uSWQpID09PSAtMSlcclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGNvbHVtbklkKTtcclxuXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW5PYmplY3QoY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7XHJcblx0XHRcdFx0W2NvbHVtbklkXTogW11cclxuXHRcdFx0fSkgLSAxO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihcclxuXHRcdFx0Y29sdW1uQXJyYXkuc2xpY2UoMSksXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW5JZF1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uT2JqZWN0IChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoYXJyYXlbaV0pID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gLTE7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uIChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uID0gYXJyYXlbaV07XHJcblxyXG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRpZiAoY29sdW1uID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRcdHJldHVybiBpO1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoY29sdW1uKSA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25IYW5kbGVyLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDcmVhdGVSZXF1ZXN0RW50cnkgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0IHtcclxuXHRyZXF1ZXN0czogQ3JlYXRlUmVxdWVzdEVudHJ5W10gPSBbXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbXBpbGF0aW9uLFxyXG5cdFx0cHJpdmF0ZSBsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBwYXJhbWV0ZXJNYXAsXHJcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRmaW5hbGl6ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucy5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKVxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XHJcblx0fVxyXG5cclxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UmVzb3VyY2UucmVxdWVzdDtcclxuXHJcblx0XHRpZiAocGFyZW50VHlwZSA9PT0gJ1ZvaWQnKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmVxdWVzdC5wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcclxuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJ1biAoKSB7XHJcblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHR0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSA/IHBhcmVudElkIDogbnVsbCxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcclxuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XHJcblx0XHRcdFx0Y29uc3QgaGFzUGFyZW50ID0gdGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHRoYXNQYXJlbnQgPyBwYXJlbnRJZCA6IG51bGwsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHR2YWxpZFJlcXVlc3QgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHZhbGlkUmVxdWVzdClcclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xyXG5cdH1cclxuXHJcblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IENyZWF0ZVJlcXVlc3RFbnRyeSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRyZXF1ZXN0OiB7XHJcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxyXG5cdFx0XHRcdGl0ZW1zOiB7fSxcclxuXHRcdFx0XHRjb2x1bW5zOiB7fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxyXG5cdFx0XHRpdGVtczoge30sXHJcblx0XHRcdGNvbGxlY3Rpb25zOiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0W3RoaXMubG9jYWxDb2xsZWN0aW9uQ2FjaGUsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllc10sXHJcblx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRmYWxzZVxyXG5cdFx0XHQpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllcywgcmVxdWVzdFBhcmVudElkLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IGRlc3RpbmF0aW9uLnJlcXVlc3Q7XHJcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVxdWVzdC5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdFx0XHRyZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXSA9IHt9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcclxuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcclxuXHJcblx0XHRcdFx0bGV0IGxpbmtzO1xyXG5cclxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0cmVxdWVzdC5wYXJlbnRJZFtpdGVtSWRdID0gcmVxdWVzdFBhcmVudElkO1xyXG5cclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb24uY29sbGVjdGlvbnMuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV1baXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHJcblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcclxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHJcblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGxpbmtzID0gaXRlbVJlcXVlc3QubGlua3MgPSB7fTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRFbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdID0gW107XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZElkIGluIGNoaWxkRW50cmllc1tjaGlsZFR5cGVdKVxyXG5cdFx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdLnB1c2goY2hpbGRJZCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoY2hpbGRFbnRyaWVzLCBudWxsLCBkZXN0aW5hdGlvbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSwgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5JbmZvLCBDb2x1bW5TZXQsIGluQXJyYXksIEl0ZW1FbnRyeVNlcnZpY2UsIEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlLCBRdWVyeVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmxldCBjdXJyZW50SWQgPSAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeSB7XHJcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xyXG5cdHF1ZXJ5OiBhbnk7XHJcblx0Y29sdW1uczogQ29sdW1uU2V0O1xyXG5cclxuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XHJcblxyXG5cdGluaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0aXRlbXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdHJlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcclxuXHRkZWZlcnJlZDogYW55O1xyXG5cdHByb21pc2U6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PjtcclxuXHRyZWxvYWRRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgb3B0aW9uczogYW55XHJcblx0KSB7XHJcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xyXG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xyXG5cclxuXHRcdHRoaXMuaXRlbVR5cGUgPSBpdGVtVHlwZTtcclxuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblx0XHR0aGlzLnF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlIChpdGVtRW50cnlDb21wb3VuZDoge2NvbHVtbnM6IENvbHVtblNldCwgaXRlbXM6IEl0ZW1FbnRyeVtdfSk6IENvbGxlY3Rpb25FbnRyeSB7XHJcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5zID0gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucztcclxuXHRcdHRoaXMuaW5pdGlhbCA9IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zO1xyXG5cdFx0dGhpcy5pdGVtcyA9IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zLnNsaWNlKCk7XHJcblxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xyXG5cclxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsICgpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcclxuXHR9XHJcblxyXG5cdG1hdGNoUGFyZW50IChpdGVtVHlwZSwgaXRlbUlkKTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBtb2Qgb2YgbW9kaWZpZWQpXHJcblx0XHRcdGNhbGxiYWNrKG1vZCk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkKTogSXRlbUVudHJ5IHwgdW5kZWZpbmVkIHtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5Lml0ZW1JZCA9PT0gaXRlbUlkKVxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGFjY3VtdWxhdG9yID0gW10pOiBJdGVtSWRbXSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmdldElkQXJyYXkodGhpcy5pdGVtcywgYWNjdW11bGF0b3IpO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbXMgKGl0ZW1FbnRyaWVzLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCA9IGZhbHNlLCBjYWxsT25BZGQgPSB0cnVlLCBjYWxsT25BY3RpdmF0ZSA9IHRydWUpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0Ly8gbG9jYWwgZW50cnkgbWlnaHQgYmUgYWRkZWQgbXVsdGlwbGUgdGltZXMgKGV4dGVuZD8pXHJcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblx0XHRjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMubGluaztcclxuXHJcblx0XHRpZiAodXBkYXRlSW5pdGlhbCkge1xyXG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdC8vIHdoZW4gc2F2aW5nLCBpdGVtcyB0aGF0IG1pZ2h0IGFscmVhZHkgYmUgaW4gbW9kaWZpZWQgYXJlIGFkZGVkIHRvIGluaXRpYWxcclxuXHRcdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XHJcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZW50cmllc0FkZGVkVG9Jbml0aWFsLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25BZGRJbml0aWFsKGVudHJpZXNBZGRlZFRvSW5pdGlhbCwgdGhpcyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3Qgb25BY3RpdmF0ZUl0ZW0gPSBjYWxsT25BY3RpdmF0ZSAmJiBjb2xsZWN0aW9uUmVzb3VyY2VzLmxlbmd0aCA+IDAgP1xyXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzWzBdLm9wdGlvbnMub25BY3RpdmF0ZUl0ZW0gOlxyXG5cdFx0XHRub29wO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XHJcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRcdFx0XHRpZiAocGFyZW50Q29sdW1uICE9PSBudWxsICYmIGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkubW9kaWZpZWRbcGFyZW50Q29sdW1uLmlkXSA9IHBhcmVudC5pdGVtSWQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRtb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0b25BY3RpdmF0ZUl0ZW0oaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb01vZGlmaWVkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0bGV0IHJlc3VsdDtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRjb25zdCBhZGRlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpO1xyXG5cclxuXHRcdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xyXG5cdFx0XHRcdFx0cmVzdWx0ID0gYWRkZWRSZXNvdXJjZXM7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGNhbGxPbkFkZClcclxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XHJcblx0XHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtcyAoaWRBcnJheSwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGVuYWJsZUNhbGxiYWNrPykge1xyXG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxyXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiAhaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCBpZEFycmF5KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdHVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pIHtcclxuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdHVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlUmVtb3ZlZEl0ZW1zIChmaWx0ZXJGdW5jdGlvbiwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGVuYWJsZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEZyb21Nb2RpZmllZCA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheSh0aGlzLml0ZW1zLCBmaWx0ZXJGdW5jdGlvbik7XHJcblx0XHRjb25zdCByZW1vdmVkRnJvbUluaXRpYWwgPSB1cGRhdGVJbml0aWFsID8gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaW5pdGlhbCwgZmlsdGVyRnVuY3Rpb24pIDogW107XHJcblxyXG5cdFx0aWYgKHJlbW92ZWRGcm9tSW5pdGlhbC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpXHJcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25SZW1vdmVJbml0aWFsKHJlbW92ZWRGcm9tSW5pdGlhbCwgdGhpcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XHJcblxyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRGcm9tTW9kIG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpXHJcblx0XHRcdHJlbW92ZWRGcm9tTW9kLmRlYWN0aXZhdGVSZXNvdXJjZXMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XHJcblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcclxuXHJcblx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrKVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcclxuXHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChuZXdDb2x1bW5zKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xyXG5cclxuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIG5ld0NvbHVtbnMpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSXRlbXMgPSByZXNwb25zZS5pdGVtc1tpdGVtVHlwZV07XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihuZXdDb2x1bW5zLCByZXNwb25zZSwgaXRlbVR5cGUsIHRoaXMuaXRlbXMpO1xyXG5cclxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcy5jYWxsKFxyXG5cdFx0XHRcdFx0dGhpcywgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZFF1ZXJ5IChjYWxsYmFjaykge1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcblx0XHRpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XHJcblxyXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IGNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xyXG5cdH1cclxuXHJcblx0ZXh0ZW5kIChxdWVyeUNhbGxiYWNrLCBjb2xsZWN0aW9uUmVzb3VyY2UsIGNhbGxPbkFkZD8sIHVwZGF0ZUluaXRpYWw/KSB7XHJcblx0XHRjb25zdCBleHRlbmRlZFF1ZXJ5ID0gdGhpcy5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKS5vYmplY3Q7XHJcblx0XHRjb25zdCBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdGV4dGVuZGVkUXVlcnksXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKHRoaXMuZ2V0SWRBcnJheSgpKVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0b2RvOiBhbHNvIGRvIHRoZSBsaW1pdCBjaGVjayBpbiBiYXRjaEV4dGVuZFxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0Ly8gV2hlbiB0aGVyZSdzIGEgbGltaXQgd2Ugd2FudCB0byBmZXRjaCBhbGwgaXRlbXMgYmVjYXVzZSB3ZSB3aWxsIGRvIHNvcnRpbmcgYW5kIHNwbGljaW5nIG9mIHRoZSBleGNlc3MgaXRlbXNcclxuXHRcdFx0dGhpcy5vcHRpb25zLmxpbWl0ICE9PSBudWxsID9cclxuXHRcdFx0XHRleHRlbmRlZFF1ZXJ5IDpcclxuXHRcdFx0XHRmdWxsUXVlcnlcclxuXHRcdCkudGhlbihyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Ly8gcmVtb3ZlQWJzZW50SXRlbXMocmVzcG9uc2UpOyBUT0RPOiB3ZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gd2UgcmVxdWVzdCAqYWxsKiB0aGUgaXRlbXNcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1t0aGlzLml0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHRoaXMucGFyZW50LFxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oaXRlbUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBjb2xsZWN0aW9uUmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGNhbGxPbkFkZCwgZmFsc2UpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcHJvbWlzZTtcclxuXHR9XHJcblxyXG5cdHF1ZXVlUmVsb2FkICgpIHtcclxuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XHJcblx0fVxyXG5cclxuXHRleHBhbmRDb2x1bW5zIChjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bih0aGlzLmNvbHVtbnMpO1xyXG5cclxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnMgPSBleHBhbnNpb25SZXN1bHQubWVyZ2VkO1xyXG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHRoaXMuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlbW92ZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xyXG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFVwZGF0ZWRJdGVtcyAoKSB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpICYmIGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0aGFzQWRkZWRJdGVtcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmluaXRpYWwubGVuZ3RoID4gdGhpcy5pdGVtcy5sZW5ndGg7XHJcblx0fVxyXG5cclxuXHRoYXNVcGRhdGVkSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgbW9kaWZpZWRJdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKG1vZGlmaWVkSXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50UmVzb3VyY2UgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0cmV0dXJuIHJlc291cmNlc1tyZXNvdXJjZXMubGVuZ3RoIC0gMV07XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJ0YWJDaGFuZ2UgPSBmYWxzZSkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXHJcblx0XHRjb25zdCBjdXJyZW50UmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBuZXdSZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Ly8gd2UnbGwgYWRkIHRoZSBpdGVtIHJlc291cmNlcyBiYWNrIGluIGxhdGVyXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlLm9wdGlvbnNbaXNTdWJ0YWJDaGFuZ2UgPyAnY2xlYXJPblN1YlRhYkNoYW5nZScgOiAnY2xlYXJPblRhYkNoYW5nZSddKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bmV3UmVzb3VyY2VzLnB1c2goY29sbGVjdGlvblJlc291cmNlKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcylcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2UuZW50cnkucmVzb3VyY2VzLnB1c2goaXRlbVJlc291cmNlKTsgLy8gcmVzb3VyY2VzIHNob3VsZCBiZSBlbXB0eSBieSBub3cgOi0pXHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBuZXdSZXNvdXJjZXM7XHJcblx0fVxyXG5cclxuXHQvLyB0aGlzIGRvZXNuJ3QgcmV2ZXJ0IHVwZGF0ZXNcclxuXHRyZXZlcnRDaGFuZ2VzICgpIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEl0ZW1zID0gPEl0ZW1FbnRyeVtdPiB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xyXG5cdFx0Y29uc3QgYWRkZWRJdGVtcyA9IDxJdGVtRW50cnlbXT4gdGhpcy5nZXRBZGRlZEl0ZW1zKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuXHRcdFx0cmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhyZW1vdmVkSXRlbXMpO1xyXG5cdFx0XHRyZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKGFkZGVkSXRlbXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLmluaXRpYWwuc2xpY2UoKTtcclxuXHR9XHJcblxyXG5cdG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xyXG5cdFx0XHRyZXNvdXJjZS5yZWJ1aWxkTWFwKCk7XHJcblx0XHRcdHJlc291cmNlLm9wdGlvbnMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRVcGRhdGVkSXRlbUNvbHVtbnMgKGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gdGhpcy5jb2x1bW5zLml0ZW07XHJcblx0XHRjb25zdCByZXN1bHQ6IHtbY29sdW1uSWQ6IHN0cmluZ106IENvbHVtbkluZm99ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcclxuXHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbY29sdW1uLmFwaUNvbHVtbi5pdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y2xvbmUgKHBhcmVudCwgY29udmVyc2lvbk1hcD86IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGNsb25lZEl0ZW1FbnRyaWVzID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmJhdGNoQ2xvbmUodGhpcy5pdGVtcywgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjbG9uZWRJdGVtRW50cnkgb2YgY2xvbmVkSXRlbUVudHJpZXMpXHJcblx0XHRcdGNsb25lZEl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jbG9uZU9wdGlvbnModGhpcy5vcHRpb25zLCBwYXJlbnQpXHJcblx0XHQpXHJcblx0XHRcdC5yZXNvbHZlKFxyXG5cdFx0XHRcdHtjb2x1bW5zOiB0aGlzLmNvbHVtbnMsIGl0ZW1zOiBjbG9uZWRJdGVtRW50cmllc31cclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdGhhc0VkaXRSZXNvdXJjZXMgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMuZWRpdENvbGxlY3Rpb24pXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0aGFzSXRlbUVkaXRSZXNvdXJjZXMgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMuZWRpdEl0ZW1zKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgZmlsdGVyQXJyYXkgfSBmcm9tICcuLi9jbGFzc2VzL1V0aWwnO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VJdGVtSWRNYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeSc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRpdGVtczogSXRlbVJlc291cmNlW107XHJcblx0aXRlbUlkTWFwOiBJdGVtUmVzb3VyY2VJdGVtSWRNYXAgPSB7fTtcclxuXHRjb2x1bW5zO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwdWJsaWMgZW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdHB1YmxpYyBvcHRpb25zXHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLnJlc3BvbnNlO1xyXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSB7fTtcclxuXHRcdHRoaXMuaXRlbXMgPSBbXTtcclxuXHJcblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcclxuXHJcblx0XHR0aGlzLmFkZEl0ZW1SZXNvdXJjZXMoZW50cnkuaXRlbXMpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZDogbnVtYmVyKTogSXRlbVJlc291cmNlIHtcclxuXHRcdHJldHVybiB0aGlzLml0ZW1JZE1hcFtpdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0cmVidWlsZE1hcCAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGl0ZW1JZE1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aXRlbUlkTWFwW2l0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWRdID0gaXRlbVJlc291cmNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuaXRlbUlkTWFwID0gaXRlbUlkTWFwO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10geyAvLyBzaG91bGQgYmUgZmFzdFxyXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB0aGlzLml0ZW1JZE1hcDtcclxuXHRcdGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmdldENvbnN0cnVjdG9yKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdDogb3B0aW9ucy5lZGl0SXRlbXMsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG9wdGlvbnMub25DaGFuZ2UsXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBvcHRpb25zLm9uRGVhY3RpdmF0ZUl0ZW1cclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdFx0bGV0IGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1JZE1hcFtpdGVtSWRdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBjb25zdHJ1Y3RvcihpdGVtRW50cnkpO1xyXG5cdFx0XHRcdGl0ZW1zLnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcclxuXHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0aXRlbVJlc291cmNlID0gaXRlbUlkTWFwW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0gaXRlbUVudHJpZXNcclxuXHQgKiBAcmV0dXJucyB7SXRlbVJlc291cmNlW119XHJcblx0ICpcclxuXHQgKiBSZXR1cm5zIHRoZSBJdGVtcmVzb3VyY2VzIHRoYXQgd2hlcmUgcmVtb3ZlZCBDb2xsZWN0aW9uLlxyXG5cdCAqIEZpbHRlcnMgb24gSXRlbVJlc291cmNlLmVudHJ5ID09PSBJdGVtRW50cnlcclxuXHQgKi9cclxuXHRyZW1vdmVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0ZmlsdGVyQXJyYXkoXHJcblx0XHRcdHRoaXMuaXRlbXMsXHJcblx0XHRcdGl0ZW1SZXNvdXJjZSA9PiB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGlmIChpdGVtUmVzb3VyY2UuZW50cnkgPT09IGl0ZW1FbnRyeSkge1xyXG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5pdGVtSWRNYXBbaXRlbUVudHJ5Lml0ZW1JZF07XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQWRkIChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xyXG5cdFx0dGhpcy5vcHRpb25zLm9uQWRkKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uUmVtb3ZlIChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xyXG5cdFx0dGhpcy5vcHRpb25zLm9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gdm9pZCkge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0Y2FsbGJhY2soaXRlbVJlc291cmNlKTtcclxuXHR9XHJcblxyXG5cdGZpbHRlciAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gYm9vbGVhbikge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xyXG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmaXJzdCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gYm9vbGVhbik6IEl0ZW1SZXNvdXJjZSB8IG51bGwge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xyXG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0c29tZSAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmlyc3QoY2FsbGJhY2spICE9PSBudWxsO1xyXG5cdH1cclxuXHJcblx0Z3JvdXBCeSAoYXJndW1lbnQpIHtcclxuXHRcdGNvbnN0IGl0ZW1zUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1zUmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVtUmVzb3VyY2UuZmllbGRzW2FyZ3VtZW50XTtcclxuXHJcblx0XHRcdFx0aWYgKHJlc3VsdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0cmVzdWx0W3ZhbHVlXS5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1zUmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhcmd1bWVudChpdGVtUmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0XHRpZiAodmFsdWUgPT09IG51bGwpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKHJlc3VsdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0cmVzdWx0W3ZhbHVlXS5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0bWFwIChhcmd1bWVudCkge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBsZW5ndGggPSBpdGVtUmVzb3VyY2VzLmxlbmd0aDtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXHJcblx0XHRcdFx0cmVzdWx0W2ldID0gaXRlbVJlc291cmNlc1tpXS5maWVsZHNbYXJndW1lbnRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcclxuXHRcdFx0XHRyZXN1bHRbaV0gPSBhcmd1bWVudChpdGVtUmVzb3VyY2VzW2ldKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVkdWNlPFQ+IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLCB2YWx1ZTogVCkgPT4gVCwgdmFsdWU6IFQpOiBUIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdHZhbHVlID0gY2FsbGJhY2soaXRlbVJlc291cmNlLCB2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0ZXh0ZW5kIChxdWVyeUNhbGxiYWNrLCByZXR1cm5BbGxJdGVtcywgZW5hYmxlQ2FsbGJhY2tzKTogUHJvbWlzZTxJdGVtUmVzb3VyY2VbXT4ge1xyXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbmFibGVDYWxsYmFja3MgPSB0cnVlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmV4dGVuZChxdWVyeUNhbGxiYWNrLCB0aGlzLCBlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdC50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiByZXR1cm5BbGxJdGVtcyA/IHRoaXMuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGRlYWN0aXZhdGUgKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5vcHRpb25zLm9uRGVhY3RpdmF0ZUNvbGxlY3Rpb24odGhpcyk7XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlICgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaW5kZXggPSBjb2xsZWN0aW9uUmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0Y29sbGVjdGlvblJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGl0ZW1SZXNvdXJjZS5jbGVhclJlc291cmNlKCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0aXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0b3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0c3VwZXIoaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUhhbmRsZXIsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnksIEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcclxuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuL0l0ZW1FbnRyeSc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0aXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0b3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0c3VwZXIoaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdHNhdmUgKCkge1xyXG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlU2F2ZSlcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBTYXZpbmcgZGlzYWJsZWQnKTtcclxuXHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ICE9PSBudWxsICYmIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCkpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFtdLCBbY29sbGVjdGlvbkVudHJ5XSk7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiB1c2UgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHRtb3ZlSXRlbXMgKGlkQXJyYXksIGRlc3RpbmF0aW9uLCBlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVuYWJsZVNhdmUgfHwgb3B0aW9ucy5tb2RJbnN0YW50KVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBzYXZpbmcgZW5hYmxlZCcpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgIT09IGRlc3RpbmF0aW9uLmVudHJ5Lml0ZW1UeXBlKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBpdGVtVHlwZSBtaXNtYXRjaCcpO1xyXG5cclxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbVJlc291cmNlIG9mIHJlbW92ZWRJdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKHJlbW92ZWRJdGVtUmVzb3VyY2UuZW50cnkpO1xyXG5cclxuXHRcdGRlc3RpbmF0aW9uLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBkZXN0aW5hdGlvbiwgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlbW92ZWRJdGVtUmVzb3VyY2VzO1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlSXRlbXMgKGlkQXJyYXksIGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbmFibGVDYWxsYmFja3MgPSB0cnVlO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBmYWxzZSk7XHJcblxyXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5tb2RJbnN0YW50KVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5zYXZlKCkudGhlbihcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtUmVzb3VyY2VzKTtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUl0ZW0gKGl0ZW1JZCwgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVJdGVtcyhbaXRlbUlkXSwgZW5hYmxlQ2FsbGJhY2tzKS50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtcyAodmFsdWVzQXJyYXksIGVuYWJsZUNhbGxiYWNrcyA9IHRydWUpIHtcclxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGVtcGxhdGUodGhpcy5lbnRyeS5pdGVtVHlwZSkudGhlbih0ZW1wbGF0ZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRcdFx0bGV0IGl0ZW1SZXNvdXJjZXM7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzQXJyYXkpIHtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxyXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlLmZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5kZXJpdmVkXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5hZGRJdGVtcyhpdGVtRW50cmllcywgdGhpcywgZmFsc2UsIGZhbHNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMub3B0aW9ucy5tb2RJbnN0YW50KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zYXZlKCkudGhlbigoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbSAodmFsdWVzLCBlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKFt2YWx1ZXNdLCBlbmFibGVDYWxsYmFja3MpLnRoZW4oaXRlbVJlc291cmNlcyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmNsZWFyKHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ29sdW1uSW5mbywgQ29sdW1uU2V0LCBJdGVtRW50cnlTZXJ2aWNlLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFMTF9QRVJNSVNTSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBdXRoSW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmxldCBjdXJyZW50SWQgPSAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeSB7XHJcblx0aWQ6IG51bWJlciA9ICsrY3VycmVudElkO1xyXG5cclxuXHRkZWZlclJlcXVlc3QgPSBmYWxzZTtcclxuXHRkZWZlcnJlZDtcclxuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XHJcblxyXG5cdGluaXRpYWw6IEZpZWxkTWFwO1xyXG5cdG1vZGlmaWVkOiBGaWVsZE1hcDtcclxuXHRkZXJpdmVkOiBGaWVsZE1hcDtcclxuXHJcblx0cmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogc3RyaW5nLFxyXG5cdFx0cHVibGljIGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0cHVibGljIGNvbHVtbnM6IENvbHVtblNldFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0ZGVmZXIgKGRlZmVyUmVxdWVzdCk6IHRoaXMge1xyXG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcclxuXHRcdHRoaXMuZGVmZXJSZXF1ZXN0ID0gZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZSAoKTogdGhpcyB7XHJcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XHJcblxyXG5cdFx0Ly8gdGhlIHJlc29sdmUgZnVuY3Rpb24gbWlnaHQgZGVmZXIgdGhlIGl0ZW0gYWdhaW4sIHNvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmaXJzdFxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHJlc29sdmVEZWZlcnJlZCAoaW5pdGlhbCwgZGVyaXZlZCwgY29sdW1ucyk6IHRoaXMge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1ucztcclxuXHRcdHRoaXMucHJvY2Vzcyhpbml0aWFsLCBkZXJpdmVkKTtcclxuXHRcdHRoaXMucmVzb2x2ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5kZWZlcnJlZCAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cmVqZWN0IChlcnJvcj8pOiB0aGlzIHtcclxuXHRcdC8vIHRvZG86IHRyYW5zbGF0ZWQgZXJyb3JcclxuXHRcdHRoaXMuZGVmZXJyZWQucmVqZWN0KGVycm9yKTtcclxuXHJcblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVyUmVxdWVzdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHByb2Nlc3MgKGluaXRpYWwsIGRlcml2ZWQpOiB0aGlzIHtcclxuXHRcdHRoaXMuaW5pdGlhbCA9IGluaXRpYWw7XHJcblx0XHR0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xyXG5cclxuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZm9ybWF0dGVkO1xyXG5cclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKHRoaXMuaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucy5tYWluKTtcclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKHRoaXMuZGVyaXZlZCwgZm9ybWF0dGVkQ29sdW1ucy5kZXJpdmVkKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMb2NhbCAoaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiB0aGlzIHtcclxuXHRcdHRoaXMuaW5pdGlhbCA9IHtwZXJtaXNzaW9uczogQUxMX1BFUk1JU1NJT05TfTtcclxuXHJcblx0XHR0aGlzLnVwZGF0ZUZpZWxkcyhpbml0aWFsKTtcclxuXHRcdHRoaXMudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHRcdHRoaXMuc2V0TW9kaWZpZWQobW9kaWZpZWQpO1xyXG5cclxuXHRcdHRoaXMuZGVyaXZlZCA9IGRlcml2ZWQ7XHJcblx0XHR0aGlzLnNldENyZWF0b3IoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldENyZWF0b3IgKCk6IHRoaXMge1xyXG5cdFx0dGhpcy5tb2RpZmllZC5jcmVhdG9yID0gdGhpcy5hdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpO1xyXG5cdFx0dGhpcy5tb2RpZmllZC5jcmVhdGVkID0gbW9tZW50KCk7XHJcblx0XHR0aGlzLmRlcml2ZWRbJ2NyZWF0b3I+ZGlzcGxheW5hbWUnXSA9IHRoaXMuYXV0aEludGVyZmFjZS5nZXRVc2VyRGlzcGxheW5hbWUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGNsb25lIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cdFx0Y29uc3QgbmV3SXRlbUlkID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmV4cGFuZENvbnZlcnNpb25NYXAodGhpcywgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Ly8gd2UnbGwgY29weSBtb2RpZmllZCB0byByZXN1bHQuaW5pdGlhbCAoaW5pdGlhbCBtYXkgYmUgYSB0ZW1wbGF0ZSlcclxuXHRcdGNvbnN0IGNsb25lZEVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0bmV3SXRlbUlkLFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZ2V0RmllbGRzKCksIHt9LCBjb2x1bW5zLm1haW4pLFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZGVyaXZlZCwge30sIGNvbHVtbnMuZGVyaXZlZCksXHJcblx0XHRcdGNvbHVtbnNcclxuXHRcdCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRjbG9uZWRFbnRyeS5tb2RpZmllZCA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoY2xvbmVkRW50cnkuaW5pdGlhbCwge30sIGNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudElkID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldENvbnZlcnNpb25WYWx1ZSh0aGlzLml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRjbG9uZWRFbnRyeS5zZXRQYXJlbnQoXHJcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcclxuXHRcdFx0cGFyZW50SWQgPT09IHVuZGVmaW5lZCA/IHBhcmVudC5pdGVtSWQgOiBwYXJlbnRJZFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gY2xvbmVkRW50cnk7XHJcblx0fVxyXG5cclxuXHRyZXNldERlcml2ZWQgKGNvbHVtbklkcyk6IHRoaXMge1xyXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XHJcblxyXG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSB0aGlzLmNvbHVtbnMucm9vdDtcclxuXHRcdGNvbnN0IGZpbHRlcmVkQ29sdW1uczogQ29sdW1uSW5mb1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcclxuXHRcdFx0aWYgKGNvbHVtbklkcy5pbmRleE9mKGNvbHVtbi5pZCkgIT09IC0xKVxyXG5cdFx0XHRcdGZpbHRlcmVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoZmlsdGVyZWRDb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRmdW5jdGlvbiByZXNldERlcml2ZWRSZWN1cnNpdmVseSAoY29sdW1ucykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0aWYgKCFjb2x1bW4uaXNMZWFmKVxyXG5cdFx0XHRcdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoY29sdW1uLmNoaWxkcmVuKTtcclxuXHJcblx0XHRcdFx0ZGVsZXRlIHNlbGYuZGVyaXZlZFtjb2x1bW4ucGF0aF07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2VzICgpOiB0aGlzIHtcclxuXHRcdHRoaXMucmVzb3VyY2VzID0gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlUmVzb3VyY2VzICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzOyAvLyBvbiBvZiB0aGUgZGVhY3RpdmF0ZSBjYWxsYmFja3MgbWlnaHQgY2FsbCBjbGVhclJlc291cmNlc1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKVxyXG5cdFx0XHRyZXNvdXJjZS5kZWFjdGl2YXRlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXRGaWVsZHMgKCkge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaW5pdGlhbDtcclxuXHR9XHJcblxyXG5cdC8vIHNob3VsZCBiZSBmYXN0XHJcblx0Ly8gdG9kbzogdHlwZSBjb2x1bW5FeHBhbnNpb25SZXN1bHRcclxuXHRleHBhbmQgKG1haW4sIGRlcml2ZWQsIGNvbHVtbkV4cGFuc2lvblJlc3VsdCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlO1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcclxuXHRcdFx0dGhpcy5pbml0aWFsLFxyXG5cdFx0XHRtYWluLFxyXG5cdFx0XHRkaWZmZXJlbmNlLm1haW5cclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXHJcblx0XHRcdHRoaXMuZGVyaXZlZCxcclxuXHRcdFx0ZGVyaXZlZCxcclxuXHRcdFx0ZGlmZmVyZW5jZS5kZXJpdmVkXHJcblx0XHQpO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHRtYWluLFxyXG5cdFx0XHRkaWZmZXJlbmNlLm1haW5cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvLyBrZXk6IGluaXRpYWwgLyBtb2RpZmllZFxyXG5cdC8vIGZpZWxkcyAqaGF2ZW4ndCogYmVlbiBmb3JtYXR0ZWQgeWV0XHJcblx0dXBkYXRlRmllbGRzIChzb3VyY2UsIG92ZXJ3cml0ZSA9IHRydWUpOiB0aGlzIHtcclxuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XHJcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZvcm1hdHRlZC5tYWluO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHRpZiAobW9kaWZpZWQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cclxuXHRcdFx0XHRpZiAob3ZlcndyaXRlIHx8IHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IHNvdXJjZVtjb2x1bW5JZF07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKG1vZGlmaWVkLCBmb3JtYXR0ZWRDb2x1bW5zKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gc291cmNlW2NvbHVtbklkXTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBmb3JtYXR0ZWRDb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1WYWx1ZSAoZmllbGRzLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApOiB0aGlzIHtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gYXBpQ29sdW1uLmlkO1xyXG5cdFx0Y29uc3QgY3VycmVudFZhbHVlID0gZmllbGRzW2NvbHVtbklkXTtcclxuXHJcblx0XHRsZXQgbmV3VmFsdWU7XHJcblxyXG5cdFx0aWYgKGFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKHRoaXMucGFyZW50ICE9PSBudWxsKVxyXG5cdFx0XHRcdG5ld1ZhbHVlID0gdGhpcy5wYXJlbnQuaXRlbUlkO1xyXG5cdFx0fSBlbHNlXHJcblx0XHRcdG5ld1ZhbHVlID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldENvbnZlcnNpb25WYWx1ZShhcGlDb2x1bW4uaXRlbVR5cGUsIGN1cnJlbnRWYWx1ZSwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSBuZXdWYWx1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1GaWVsZHMgKGNvbnZlcnNpb25NYXApOiB0aGlzIHtcclxuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gdGhpcy5jb2x1bW5zLml0ZW07XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHR0aGlzLnVwZGF0ZUl0ZW1WYWx1ZShpbml0aWFsLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKG1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLnVwZGF0ZUl0ZW1WYWx1ZShtb2RpZmllZCwgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3QgKCkge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0KFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHRoaXMuaXRlbUlkKSA/IHt9IDogdGhpcy5pbml0aWFsLFxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHNldERpc3BsYXlOYW1lICgpOiB0aGlzIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0RGlzcGxheU5hbWUoKTtcclxuXHJcblx0XHRpZiAocmVzdWx0KVxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkLmRpc3BsYXluYW1lID0gcmVzdWx0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0RGlzcGxheU5hbWUgKCkge1xyXG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcclxuXHJcblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XHJcblx0XHRcdFx0cmV0dXJuIGZpZWxkcy50eXBlID09PSAnYmVkcmlqZicgP1xyXG5cdFx0XHRcdFx0ZmllbGRzLmJlZHJpamYgOiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0RnVsbE5hbWUoXHJcblx0XHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcclxuXHRcdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXHJcblx0XHRcdFx0XHRcdGZpZWxkcy5uYWFtXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Y2FzZSAnUGVyc29uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxyXG5cdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxyXG5cdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXHJcblx0XHRcdFx0XHRmaWVsZHMuYWNodGVybmFhbVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgJ1JlcGFyYXRpZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmllbGRzW3RoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKHRoaXMuaXRlbVR5cGUpXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gcmV0dXJuQWxsIFJldHVybnMgYWxsIGluaXRpYWwgdmFsdWVzIGlmIHRydWVcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG5cdCAqL1xyXG5cdGdldENoYW5nZXMgKHJldHVybkFsbCA9IGZhbHNlKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkICYmICFyZXR1cm5BbGwpXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0Q2hhbmdlcyhcclxuXHRcdFx0dGhpcy5pbml0aWFsLFxyXG5cdFx0XHRyZXR1cm5BbGwgPyB7fSA6IHRoaXMubW9kaWZpZWQsXHJcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2thYmxlICgpIHtcclxuXHRcdGlmICh0aGlzLmlzTG9jYWwoKSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHN3aXRjaCAodGhpcy5pdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdQcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XHJcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxyXG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XHJcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRoYXNDaGFuZ2VzICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuaGFzQ2hhbmdlcyhcclxuXHRcdFx0dGhpcy5pbml0aWFsLFxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc2V0TW9kaWZpZWQgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW4uaWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuY2xvbmUoXHJcblx0XHRcdFx0Y29sdW1uLmFwaUNvbHVtbi50eXBlLFxyXG5cdFx0XHRcdHRoaXMuaW5pdGlhbFtjb2x1bW4uaWRdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRJbml0aWFsICh2YWx1ZXMsIGVuYWJsZUNhbGxiYWNrcz8pOiB0aGlzIHtcclxuXHRcdGxldCBwcmV2aW91cztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5pbml0aWFsLCB7fSwgdGhpcy5jb2x1bW5zLm1haW4pKTtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLm1vZGlmaWVkLCB7fSwgdGhpcy5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRG9lcyBhIHNoYWxsb3cgY29weSBvZiB2YWx1ZXMhXHJcblx0ICovXHJcblx0c2V0TW9kaWZpZWQgKHZhbHVlcz8pOiB0aGlzIHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSBjb2x1bW5zLnJlc3BvbnNlW3RoaXMuaXRlbVR5cGVdO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZCA9IHt9O1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLnNoYWxsb3dDb3B5RmllbGRzKHZhbHVlcywgaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XHJcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdC8vIHRvZG86IGRldiBtb2RlIGNvbnN0YW50XHJcblx0XHRcdFx0XHRcdC8vIGlmIChERVZfTU9ERSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLndhcm4oJ3NldE1vZGlmaWVkOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xyXG5cclxuXHRcdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKVxyXG5cdFx0XHRcdHJlc291cmNlLmZpZWxkcyA9IG1vZGlmaWVkO1xyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0RGVyaXZlZCAodmFsdWVzKTogdGhpcyB7XHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMuZGVyaXZlZFtrZXldID0gdmFsdWVzW2tleV07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkKTogdGhpcyB7XHJcblx0XHR0aGlzLnBhcmVudCA9IHtcclxuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXHJcblx0XHRcdGl0ZW1JZDogcGFyZW50SWRcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjYWxsT25DaGFuZ2UgKHByZXZpb3VzKTogdGhpcyB7XHJcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMucmVzb3VyY2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRjb25zdCBpdGVtUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlc1tpXTtcclxuXHJcblx0XHRcdGlmIChpdGVtUmVzb3VyY2UgIT09IG51bGwpXHJcblx0XHRcdFx0aXRlbVJlc291cmNlLm9wdGlvbnMub25DaGFuZ2UoaXRlbVJlc291cmNlLCBwcmV2aW91cyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEZpZWxkTWFwLCBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2Uge1xyXG5cdGNvbHVtbnM6IHtbY29sdW1uSWQ6IHN0cmluZ106IFJlc3BvbnNlQ29sdW1ufTtcclxuXHRmaWVsZHM6IEZpZWxkTWFwO1xyXG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdHB1YmxpYyBvcHRpb25zXHJcblx0KSB7XHJcblx0XHR0aGlzLmRlcml2ZWQgPSBlbnRyeS5kZXJpdmVkO1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZVtlbnRyeS5jb2x1bW5zLml0ZW1UeXBlXTtcclxuXHJcblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcclxuXHR9XHJcblxyXG5cdGlzTmV3UmVzb3VyY2UgKHJlc291cmNlKSB7XHJcblx0XHRyZXR1cm4gcmVzb3VyY2UuZW50cnkuaXNMb2NhbCgpICYmXHJcblx0XHRcdHJlc291cmNlLnRyYW5zYWN0aW9ucyA9PT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5pc0xvY2FsKCk7XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlICgpIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgaW5kZXggPSByZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcclxuXHJcblx0XHRpZiAoaW5kZXggIT09IC0xKVxyXG5cdFx0XHRyZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHR9XHJcblxyXG5cdGRlYWN0aXZhdGUgKCkge1xyXG5cdFx0dGhpcy5vcHRpb25zLm9uRGVhY3RpdmF0ZSh0aGlzLmVudHJ5KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFZpZXdSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zKTtcclxuXHJcblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRlbnRyeS5pbml0aWFsIDogZW50cnkubW9kaWZpZWQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7QXBpRm9ybWF0dGVyLCBDaGFuZ2VzUHJvY2Vzc29yLCBjcmVhdGVQYXRoLCBMb2NrU2VydmljZX0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZpZWxkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4vJztcblxuZXhwb3J0IGNsYXNzIEVkaXRSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGxvY2FsQ29waWVzOiBGaWVsZE1hcFtdID0gW107XG5cdHRyYW5zYWN0aW9uczogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zXG5cdCkge1xuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zKTtcblxuXHRcdGVudHJ5LnNldE1vZGlmaWVkKCk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xuXHR9XG5cblx0c3RhcnQgKCkge1xuXHRcdGlmICh0aGlzLmxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzID0gW107XG5cblx0XHR0aGlzLmxvY2FsQ29waWVzLnB1c2godGhpcy5jb3B5RmllbGRzKCkpO1xuXHR9XG5cblx0cm9sbGJhY2sgKGNhbGxPbkRlYWN0aXZhdGUgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMubG9jYWxDb3BpZXMucG9wKCksIGl0ZW1FbnRyeS5tb2RpZmllZCwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRpZiAoY2FsbE9uRGVhY3RpdmF0ZSAmJiB0aGlzLmlzTmV3UmVzb3VyY2UodGhpcykgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDApXG5cdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0fVxuXG5cdGNvbW1pdCAoaW5pdGlhbCkge1xuXHRcdGlmICghaW5pdGlhbClcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMucG9wKCk7XG5cblx0XHQvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXG5cdFx0aWYgKHRoaXMudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLnRyYW5zYWN0aW9ucyA9IDA7XG5cblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrO1xuXHR9XG5cblx0Z2V0TG9jYWxDb3B5ICgpIHtcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ29waWVzW2xvY2FsQ29waWVzLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0Y29weUZpZWxkcyAoZGVzdGluYXRpb24/KSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdGlmIChkZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZGVzdGluYXRpb24gPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5tb2RpZmllZCwgZGVzdGluYXRpb24sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXHR9XG5cblx0c2V0RmllbGRzICh2YWx1ZXMsIGNhbGxPbkNoYW5nZSkge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5maWVsZHM7XG5cdFx0bGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblx0XHRsZXQgcHJldmlvdXM7XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlID09PSB1bmRlZmluZWQpXG5cdFx0XHRjYWxsT25DaGFuZ2UgPSB0cnVlO1xuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XG5cblx0XHRcdGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdLCB2YWx1ZXNbY29sdW1uSWRdKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0aGFzQ2hhbmdlcyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSAmJiBoYXNDaGFuZ2VzKVxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjYWxsT25DaGFuZ2UgKHByZXZpb3VzKSB7XG5cdFx0dGhpcy5lbnRyeS5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXHR9XG5cblx0c2F2ZSAocGFyYW1ldGVycz8pIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IHBhcmFtZXRlck1hcCA9IHt9O1xuXG5cdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0cGFyYW1ldGVyTWFwLFxuXHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0W3t9LCBwYXJhbWV0ZXJzXVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0aXRlbUVudHJ5LmlzTG9ja2FibGUoKSA/XG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKGl0ZW1FbnRyeSkgOlxuXHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKVxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Ly8gYWRkVG9Db2xsZWN0aW9ucyBpcyBjYWxsZWQgaW4gY2hhbmdlc1Byb2Nlc3NvclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yLmV4ZWN1dGUoW2l0ZW1FbnRyeV0sIFtdLCBmYWxzZSwgcGFyYW1ldGVyTWFwKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0VkaXRSZXNvdXJjZSc7XHJcbiIsImltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkNhY2hlLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0Q29sbGVjdGlvbk1hdGNoZXIsXHJcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbUVudHJ5U2VydmljZSxcclxuXHRJdGVtSGFuZGxlcixcclxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0S2V5U2VydmljZSxcclxuXHRMb2NhbENhY2hlLFxyXG5cdFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgTG9jYWxDYWNoZUZhY3RvcnksIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQge1xyXG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdEF1dGhJbnRlcmZhY2UsXHJcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxyXG5cdFByb21pc2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCwgSXRlbUlkLFxyXG5cdEl0ZW1SZXNvdXJjZUl0ZW1UeXBlTWFwLCBJdGVtVHlwZSxcclxuXHRUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLFxyXG5cdFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtQWRtaW5pc3RyYXRvciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgbW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHQvLyBpZCBjYW4gYmUgYSBrZXl3b3JkIG9yIGEgbG9jYWwgaWQgKGluIGNhc2Ugb2YgYSByZWZyZXNoKVxyXG5cdGdldEl0ZW1EZWZpbml0aW9uIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogYW55LCBvcHRpb25zOiBhbnkpIHtcclxuXHRcdGNvbnN0IHN0YXRlS2V5OiBhbnkgPSB0aGlzLmtleVNlcnZpY2UucGFyc2VTdGF0ZUtleShpdGVtSWQpO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge2l0ZW1UeXBlOiBpdGVtVHlwZSwgb3B0aW9uczogb3B0aW9ucywgaXRlbUlkOiBpdGVtSWR9O1xyXG5cclxuXHRcdGlmIChzdGF0ZUtleSAhPT0gbnVsbCkge1xyXG5cdFx0XHRzd2l0Y2ggKHN0YXRlS2V5LnR5cGUpIHtcclxuXHRcdFx0XHRjYXNlICduZXcnOlxyXG5cdFx0XHRcdFx0Ly8gaWYgKHN0YXRlS2V5LnRlbXBsYXRlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0XHQvLyBcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge3R5cGU6IHN0YXRlS2V5LnRlbXBsYXRlfTtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHQuaXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgJ2R1cGxpY2F0ZSc6XHJcblx0XHRcdFx0XHRvcHRpb25zLmR1cGxpY2F0ZSA9IHN0YXRlS2V5Lml0ZW1JZDtcclxuXHJcblx0XHRcdFx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPT09IHVuZGVmaW5lZCkgLy8gdG9kbzogcmVmYWN0b3IgdGhpc1xyXG5cdFx0XHRcdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9IHt9O1xyXG5cclxuXHRcdFx0XHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPSBzdGF0ZUtleS5pdGVtSWQ7XHJcblxyXG5cdFx0XHRcdFx0cmVzdWx0Lml0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbER1cGxpY2F0ZUlkKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQuaXRlbUlkID0gaXRlbUlkO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFkZFRvVGFiOiBib29sZWFuKTogQ29sbGVjdGlvbk1hdGNoZXIge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLCBmYWxzZSwgdHJ1ZSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Ly8gdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGFyZSBubyBjb2xsZWN0aW9ucyB0byBhZGQgdGhlIGl0ZW0gdG8sIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNhdmUgdGhlIGl0ZW1cclxuXHRcdFx0aWYgKGFkZFRvVGFiKVxyXG5cdFx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbk1hdGNoZXI7XHJcblx0fVxyXG5cclxuXHRmZXRjaFRpdGxlIChpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QpIHtcclxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGl0bGUoaXRlbVR5cGUsIGl0ZW1JZCwgZGVmZXJSZXF1ZXN0LCB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcyk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtQnlJZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2U+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQvLyB0b2RvIHR5cGUgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCB8IEl0ZW1FbnRyeVxyXG5cdFx0XHQoaXRlbUVudHJ5UmVzb3VyY2U6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCAhPT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UubWFpbiA6XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLFxyXG5cdFx0XHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0XHRcdGZhbHNlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbXNCeUlkIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWRzOiBudW1iZXJbXSwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VbXT4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbXMoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWRzLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtc0J5UXVlcnkgKGl0ZW1UeXBlOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge307XHJcblxyXG5cdFx0cmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdID0gZW50cnlPcHRpb25zLmNvbHVtbnM7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRQYXJlbnRDb25kaXRpb24ocXVlcnksIGVudHJ5T3B0aW9ucy5wYXJlbnQpLFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0ZW50cnlPcHRpb25zLnBhcmVudCxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSlcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXREdXBsaWNhdGVCeUlkIChpdGVtVHlwZTogc3RyaW5nLCBkdXBsaWNhdGVJZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpIHtcclxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9wdGlvbnMgPSB7fTtcclxuXHJcblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xyXG5cclxuXHRcdGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmdldEl0ZW1EZWZpbml0aW9uKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldER1cGxpY2F0ZVN0YXRlS2V5KGR1cGxpY2F0ZUlkKSxcclxuXHRcdFx0b3B0aW9uc1xyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5nZXRJdGVtQnlEZWYoZGVmaW5pdGlvbiwgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHJldHVybiB2YWx1ZSBpcyBkZXBlbmRlZCBvbiB0aGUgcmV0dXJuIGxpbmtzIGJvb2xlYW4uIHRydWUgcmV0dXJucyB0aGUgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcC5cclxuXHQgKiBUaGUgdHlwZSBoYXMgdG8gYmUgYXNzZXJ0ZWQgYXQgdXNlIHNpbmNlIHlvdSBvbmx5IGtub3cgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWRcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtVHlwZVxyXG5cdCAqIEBwYXJhbSBvcHRpb25zXHJcblx0ICogQHBhcmFtIHtib29sZWFufSByZXR1cm5MaW5rc1xyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSb290XHJcblx0ICogQHJldHVybnMge1Byb21pc2U8SXRlbVJlc291cmNlPiB8IFByb21pc2U8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD59XHJcblx0ICovXHJcblx0Z2V0TmV3UmVzb3VyY2UgKFxyXG5cdFx0aXRlbVR5cGU6IHN0cmluZyxcclxuXHRcdG9wdGlvbnM6IGFueSA9IHt9LFxyXG5cdFx0cmV0dXJuTGlua3M6IGJvb2xlYW4gPSBmYWxzZSxcclxuXHRcdGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlXHJcblx0KTogUHJvbWlzZTxJdGVtUmVzb3VyY2U+IHwgUHJvbWlzZTxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgbWFpbiA9IGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeVJlc291cmNlLm1haW4sIG9wdGlvbnMsIGlzUm9vdCk7XHJcblx0XHRcdFx0Y29uc3QgbGlua2VkID0gdGhpcy5wcm9jZXNzTGlua2VkSXRlbXMoaXRlbUVudHJ5UmVzb3VyY2UubGlua2VkLCBvcHRpb25zLCB0cnVlKTsgLy8gZG8gdGhpcyBiZWZvcmVoYW5kXHJcblxyXG5cdFx0XHRcdHJldHVybiByZXR1cm5MaW5rcyA/IHttYWluOiBtYWluLCBsaW5rZWQ6IGxpbmtlZH0gOiBtYWluO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uRGVmIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcclxuXHRcdFx0b3B0aW9uczoge1xyXG5cdFx0XHRcdGVudHJ5OiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXHJcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0Z2V0TGlua0NvbGxlY3Rpb25zRGVmIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWRBcnJheTogbnVtYmVyW10sIGl0ZW1UeXBlOiBzdHJpbmcsIGxpbmtGaWVsZDogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcclxuXHRcdFx0bGlua1R5cGU6IGxpbmtUeXBlLFxyXG5cdFx0XHRsaW5rSWRBcnJheTogbGlua0lkQXJyYXksXHJcblx0XHRcdGxpbmtGaWVsZDogbGlua0ZpZWxkLFxyXG5cdFx0XHRvcHRpb25zOiB7XHJcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcclxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0ZW50cnkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcclxuXHRcdFx0XHRcdGVudHJ5LFxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbkZyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXHJcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXHJcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcclxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdGVudHJ5ID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoZW50cnksIGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZSk7XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGBwYXJlbnRgIGluIG9wdGlvbnNcclxuXHQgKi9cclxuXHRnZXRMaW5rQ29sbGVjdGlvbiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkOiBudW1iZXIsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblxyXG5cdFx0ZW50cnlPcHRpb25zLnBhcmVudCA9IHtpdGVtVHlwZTogbGlua1R5cGUsIGl0ZW1JZDogbGlua0lkfTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGVudHJ5T3B0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcclxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxyXG5cdFx0XHRcdFx0ZW50cnksXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcclxuXHRcdFx0bGlua1R5cGUsXHJcblx0XHRcdGxpbmtJZEFycmF5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldExpbmtDb2xsZWN0aW9uc0Zyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxyXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtUeXBlLFxyXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtJZEFycmF5LFxyXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxyXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxyXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShsaW5rVHlwZSwge30sIHt9KVxyXG5cdFx0XHQudGhlbihcclxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRMaW5rQ29sbGVjdGlvbnMoXHJcblx0XHRcdFx0XHRcdGxpbmtUeXBlLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tsaW5rVHlwZV0sXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtQnlEZWYgKGRlZmluaXRpb246IGFueSwgaXNSb290OiBib29sZWFuKSB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxyXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxyXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1JZCxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKGRlZmluaXRpb24ub3B0aW9ucyksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0aXRlbUVudHJ5Q29tcG91bmQgPT4ge1xyXG5cdFx0XHRcdGxldCBtYWluRW50cnk6IEl0ZW1FbnRyeTtcclxuXHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeUNvbXBvdW5kIGluc3RhbmNlb2YgSXRlbUVudHJ5KVxyXG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gaXRlbUVudHJ5Q29tcG91bmQ7XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlDb21wb3VuZC5saW5rZWQsIGRlZmluaXRpb24ub3B0aW9ucywgZmFsc2UpO1xyXG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gaXRlbUVudHJ5Q29tcG91bmQubWFpbjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShtYWluRW50cnksIGRlZmluaXRpb24ub3B0aW9ucywgaXNSb290KTsgLy8gaXNSb290XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsb25lSXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIG9wdGlvbnM6IGFueSk6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1SZXNvdXJjZS5lbnRyeS5jbG9uZSgpLCBvcHRpb25zLCBmYWxzZSk7XHJcblx0fVxyXG5cclxuXHRjbG9uZUNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLCBvcHRpb25zOiBhbnksIGNvbnZlcnNpb25NYXA6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRsZXQgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRwYXJlbnQgPSBudWxsO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXHJcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5jbG9uZShwYXJlbnQsIGNvbnZlcnNpb25NYXApLFxyXG5cdFx0XHRvcHRpb25zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c2F2ZUN1cnJlbnRMb2NhbENhY2hlIChjbG9zZVRhYjogYm9vbGVhbiwgcGFyYW1ldGVyczogYW55LCBicmVha3VwQnlQYXJlbnQgPSBmYWxzZSwgb25BZnRlckNyZWF0ZUNhbGxiYWNrOiBhbnkpIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5zYXZlKGNsb3NlVGFiLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayk7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50Q29sbGVjdGlvbnMgKCk6IENvbGxlY3Rpb25DYWNoZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuY29sbGVjdGlvbnM7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50SXRlbXMgKCk6IEl0ZW1DYWNoZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXM7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50Q2hhbmdlcyAoKSB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0aWYgKGxvY2FsQ2FjaGUucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIScpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRsb2NhbENhY2hlLnJvb3RJdGVtLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zXHJcblx0XHQpLnByb2Nlc3MoKTtcclxuXHR9XHJcblxyXG5cdGFkZFNpbmdsZUl0ZW0gKFxyXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRvcHRpb25zOiBhbnksXHJcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxyXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpXHJcblx0KTogSXRlbVJlc291cmNlIHtcclxuXHRcdGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcclxuXHR9XHJcblxyXG5cdGFkZFNpbmdsZUl0ZW1zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IGFueSkge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSwgbG9jYWxDYWNoZSkpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRhZGRDb2xsZWN0aW9uIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9uczogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25DYWNoZSA9IGxvY2FsQ2FjaGUuY29sbGVjdGlvbnM7XHJcblxyXG5cdFx0aWYgKCFjb2xsZWN0aW9uQ2FjaGUuY29udGFpbnMoY29sbGVjdGlvbkVudHJ5KSlcclxuXHRcdFx0Y29sbGVjdGlvbkNhY2hlLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTGlua2VkSXRlbXMgKGxpbmtlZEVudHJpZXM6IFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBbXSwgb3B0aW9uczogYW55LCBhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuKTogSXRlbVJlc291cmNlSXRlbVR5cGVNYXAge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IGVudHJ5Lml0ZW1FbnRyaWVzO1xyXG5cdFx0XHRsZXQgY29sbGVjdGlvbk1hdGNoZXI7XHJcblxyXG5cdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcclxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sIGZhbHNlLCBmYWxzZSk7XHJcblxyXG5cdFx0XHRpdGVtUmVzb3VyY2VzW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2VzW2l0ZW1UeXBlXS5wdXNoKGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UpKTtcclxuXHJcblx0XHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0aWYgKGl0ZW1UeXBlID09PSAnUHJvamVjdG5vdGl0aWUnKSB7XHJcblx0XHRcdFx0XHRjcmVhdGVQYXRoKFxyXG5cdFx0XHRcdFx0XHRsb2NhbENhY2hlLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLFxyXG5cdFx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0XHRcdFx0W3t9LCB7bm9fbm90aWZpY2F0aW9uOiB0cnVlfV1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XHJcblx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcclxuXHR9XHJcblxyXG5cdGdldExvY2FsQ2FjaGUgKCk6IExvY2FsQ2FjaGUge1xyXG5cdFx0cmV0dXJuIHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuZ2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpKTtcclxuXHR9XHJcblxyXG5cdHJlc2V0TG9jYWxDYWNoZSAoKSB7XHJcblx0XHRjb25zdCBvbGRMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5sb2NhbENhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHJcblx0XHRvbGRMb2NhbENhY2hlLmNsZWFyUmVzb3VyY2VzKCk7XHJcblxyXG5cdFx0dGhpcy5sb2NhbENhY2hlTWFuYWdlci5zZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCksIGxvY2FsQ2FjaGUpO1xyXG5cdH1cclxuXHJcblx0YWRkVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcclxuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzLCB0cnVlKVxyXG5cdFx0XHQuYWRkVG9Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIGZhbHNlKVxyXG5cdFx0XHQucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHRzYXZlTG9jYWwgKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtUmVzb3VyY2UuZW50cnk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LnNldERpc3BsYXlOYW1lKCk7XHJcblx0XHR0aGlzLmFkZFRvQ29sbGVjdGlvbnMoW2l0ZW1FbnRyeV0pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbihpdGVtUmVzb3VyY2UpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbUlkTWFwIChjb2xsZWN0aW9uTWFwOiBhbnksIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IG9sZElkIGluIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW29sZElkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbk1hcFtuZXdJZF0gPSBjb2xsZWN0aW9uTWFwW29sZElkXTtcclxuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChjb2xsZWN0aW9uRW50cnk6IGFueSwgcmVzb3VyY2VPcHRpb25zOiBhbnksIHByb2Nlc3NPcHRpb25zID0gdHJ1ZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXHJcblx0XHRcdHByb2Nlc3NPcHRpb25zID8gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHJlc291cmNlT3B0aW9ucykgOiByZXNvdXJjZU9wdGlvbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogYW55LCBvcHRpb25zOiBhbnksIGlzUm9vdDogYm9vbGVhbikge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XHJcblx0fVxyXG5cclxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uQmVmb3JlU2F2ZScsIGtleSwgY2FsbGJhY2spO1xyXG5cdH1cclxuXHJcblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25TYXZlU3VjY2VzcycsIGtleSwgY2FsbGJhY2spO1xyXG5cdH1cclxuXHJcblx0b25TYXZlV2l0aG91dENsb3NpbmcgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uU2F2ZVdpdGhvdXRDbG9zaW5nJywga2V5LCBjYWxsYmFjayk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZSB7XHJcblx0ZW50cmllczoge1xyXG5cdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XHJcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IEl0ZW1FbnRyeVxyXG5cdFx0fVxyXG5cdH0gPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKGNhbGxiYWNrKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldEJ5SXRlbVR5cGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1JZF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldExvY2FsQnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5IGluc3RhbmNlb2YgSXRlbUVudHJ5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdGNhbGxiYWNrKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0b0FycmF5ICgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xyXG5cdH1cclxuXHJcblx0Z2V0IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0Ly8gc2hvdWxkIGJlIGZhc3RcclxuXHRjb250YWlucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0XHRpZiAocGFyZW50VHlwZSA9PT0gcGFyZW50Lml0ZW1UeXBlICYmIHBhcmVudElkID09IHBhcmVudC5pdGVtSWQpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbUlkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb2xkSXRlbUlkKSB7XHJcblx0XHRjb25zdCBlbnRyeU1hcCA9IHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xyXG5cclxuXHRcdGRlbGV0ZSBlbnRyeU1hcFtvbGRJdGVtSWRdO1xyXG5cdFx0cmV0dXJuIGVudHJ5TWFwW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogYm9vbGVhbiB7XHJcblx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdG1hdGNoUXVlcnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBxdWVyeSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XHJcblx0XHQpLm1hdGNoUXVlcnkocXVlcnkub2JqZWN0KSA9PT0gdHJ1ZTsgLy8gVE9ETzogbWF5YmU/XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeVNlcnZpY2Uge1xyXG5cdC8vIHRvZG86IHRyYW5zbGF0ZVxyXG5cdHVuZGVmaW5lZEl0ZW1FcnJvciA9ICdIZXQgb3BnZXZyYWFnZGUgaXRlbSBiZXN0YWF0IG5pZXQgLyBKZSBoZWJ0IG5pZXQgdm9sZG9lbmRlIHJlY2h0ZW4gb20gZGl0IGl0ZW0gdGUgYmVraWprZW4nO1xyXG5cdEFMTF9QRVJNSVNTSU9OUyA9IDc7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y29sdW1uczogdHJ1ZSxcclxuXHRcdFx0XHRwYXJlbnQ6IG51bGwsXHJcblx0XHRcdFx0dGVtcGxhdGVPcHRpb25zOiB7fSxcclxuXHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnM6IHt9LFxyXG5cdFx0XHRcdGRlZmVyUmVxdWVzdDogZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZG9FeHRlbmQgPSBmYWxzZSwgYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSB7XHJcblx0XHRjb25zdCBhcGlJdGVtSWQgPSBhcGlSZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF07XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fTtcclxuXHJcblx0XHRyZXN1bHRbaXRlbVR5cGVdID0ge307XHJcblx0XHRyZXN1bHRbaXRlbVR5cGVdW2FwaUl0ZW1JZF0gPSBpdGVtSWQ7XHJcblxyXG5cdFx0aWYgKGRvRXh0ZW5kKVxyXG5cdFx0XHR0aGlzLmV4cGFuZExvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgYXBpSXRlbUlkLCBhcGlSZXNwb25zZSwgcmVzdWx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdW3BhcmVudElkXS5saW5rcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XHJcblx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xyXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2FwaUl0ZW1JZF0gPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xyXG5cclxuXHRcdFx0XHR0aGlzLmV4cGFuZExvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgYXBpSXRlbUlkLCBhcGlSZXNwb25zZSwgY29udmVyc2lvbk1hcCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLCBuZXdJdGVtSWQ/OiBJdGVtSWQpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRsZXQgY29udmVyc2lvbk1hcEVudHJ5O1xyXG5cclxuXHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdGNvbnZlcnNpb25NYXBFbnRyeSA9IGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdO1xyXG5cclxuXHRcdGlmIChjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF07XHJcblxyXG5cdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRuZXdJdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xyXG5cclxuXHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXSA9IG5ld0l0ZW1JZDtcclxuXHR9XHJcblxyXG5cdGJhdGNoRXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0dGhpcy5leHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0fVxyXG5cclxuXHRnZXRDb252ZXJzaW9uVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIG1hcCkge1xyXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hDbG9uZSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHQvLyB0aGUgdGhlIGl0ZW1zIG1pZ2h0IHJlZmVyZW5jZSBlYWNoIG90aGVyLCBzbyB1cGRhdGUgdGhlIGNvbnZlcnNpb24gbWFwIGZpcnN0XHJcblx0XHR0aGlzLmJhdGNoRXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cmllcywgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeS5jbG9uZShjb252ZXJzaW9uTWFwKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEZ1bGxOYW1lIChmaXJzdE5hbWUsIGluZml4LCBsYXN0TmFtZSkge1xyXG5cdFx0cmV0dXJuIGZpcnN0TmFtZS50cmltKClcclxuXHRcdFx0LmNvbmNhdCgnICcsIGluZml4KS50cmltKCkgLy8gaW5maXggY2FuIGJlIGFuIGVtcHR5IHN0cmluZ1xyXG5cdFx0XHQuY29uY2F0KCcgJywgbGFzdE5hbWUpO1xyXG5cdH1cclxuXHJcblx0Z2V0VGl0bGVGaWVsZCAoaXRlbVR5cGUpIHtcclxuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnRXhlbXBsYWFyJzpcclxuXHRcdFx0XHRyZXR1cm4gJ3NlcmllbnVtbWVyJztcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cic6XHJcblx0XHRcdFx0cmV0dXJuICdudW1tZXInO1xyXG5cdFx0XHRjYXNlICdGaWxlcyc6XHJcblx0XHRcdFx0cmV0dXJuICdmcmllbmRseW5hbWUnO1xyXG5cdFx0XHRjYXNlICdGdW5jdGllJzpcclxuXHRcdFx0Y2FzZSAnU3RhbmRhYXJkZnVuY3RpZSc6XHJcblx0XHRcdFx0cmV0dXJuICduYWFtaW50ZXJuJztcclxuXHRcdFx0Y2FzZSAnVm9vcnJhYWRtdXRhdGllJzpcclxuXHRcdFx0XHRyZXR1cm4gJ29tc2NocmlqdmluZyc7XHJcblx0XHRcdGNhc2UgJ0JhcmNvZGUnOlxyXG5cdFx0XHRcdHJldHVybiAnY29kZSc7XHJcblx0XHRcdGNhc2UgJ0JldGFhbG1pZGRlbCc6XHJcblx0XHRcdGNhc2UgJ0JldGFsaW5nc2NvbmRpdGllJzpcclxuXHRcdFx0Y2FzZSAnQnJpZWZwYXBpZXInOlxyXG5cdFx0XHRjYXNlICdUYXhDbGFzcyc6XHJcblx0XHRcdGNhc2UgJ1RheFNjaGVtYSc6XHJcblx0XHRcdGNhc2UgJ0NvbmRpdGlvbic6XHJcblx0XHRcdGNhc2UgJ0ZhY3R1dXJtb21lbnQnOlxyXG5cdFx0XHRjYXNlICdGdW5jdGllZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdHcm9vdGJvZWsnOlxyXG5cdFx0XHRjYXNlICdJbmh1dXInOlxyXG5cdFx0XHRjYXNlICdJbmh1dXJncm9lcCc6XHJcblx0XHRcdGNhc2UgJ0luaHV1cm1hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ01hdGVyaWFhbENhdCc6XHJcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXJ0YXJpZWYnOlxyXG5cdFx0XHRjYXNlICdOb3RpdGllJzpcclxuXHRcdFx0Y2FzZSAnUGxhbm5pbmdtYXRlcmlhYWwnOlxyXG5cdFx0XHRjYXNlICdQcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnU3RhZmZlbGdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnU3VicHJvamVjdCc6XHJcblx0XHRcdGNhc2UgJ1RhYWsnOlxyXG5cdFx0XHRjYXNlICdUYWcnOlxyXG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XHJcblx0XHRcdGNhc2UgJ1RpamQnOlxyXG5cdFx0XHRjYXNlICdUaXRlbCc6XHJcblx0XHRcdGNhc2UgJ1R5cGUnOlxyXG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XHJcblx0XHRcdFx0cmV0dXJuICduYWFtJztcclxuXHRcdFx0Ly8gY2FzZSAnQ29udGFjdCc6XHJcblx0XHRcdC8vIGNhc2UgJ01lZGV3ZXJrZXInOlxyXG5cdFx0XHQvLyBjYXNlICdQZXJzb24nOlxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdC8vIG9ubHkgdXNlIGRpc3BsYXluYW1lIGZvciBpdGVtcyB0aGF0IGRvbnQndCBoYXZlIGEgc2ltcGxlLCB3cml0YWJsZSBuYW1lIGZpZWxkXHJcblx0XHRcdFx0Ly8gdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgZm9yIHRlbXBsYXRlZCBpdGVtc1xyXG5cdFx0XHRcdHJldHVybiAnZGlzcGxheW5hbWUnO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yLFxyXG5cdEJhdGNoU3RhdHVzLFxyXG5cdENvbHVtbkhhbmRsZXIsXHJcblx0Q29sdW1uVXRpbCxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbUVudHJ5U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q29sdW1uU2V0RmFjdG9yeSxcclxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdEl0ZW1FbnRyeUZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVzcG9uc2UsIEFwaVRlbXBsYXRlSXRlbVR5cGVNYXAsIEVudHJ5U3RhdHVzLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucyxcclxuXHRUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLCBUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbic7XHJcbmltcG9ydCB7IENvbHVtblNldCB9IGZyb20gJy4vQ29sdW1uU2V0JztcclxuXHJcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHksIGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuLy8gdG9kbyBtYWtlIGNsYXNzXHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xyXG5cdGVudHJpZXM6IEl0ZW1DYWNoZTtcclxuXHR0ZW1wbGF0ZXM6IEFwaVRlbXBsYXRlSXRlbVR5cGVNYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHR9XHJcblxyXG5cdGZldGNoSXRlbSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55LCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiB7XHJcblx0XHRjb25zdCBlbnRyeVN0YXR1cyA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cnlTdGF0dXMuZW50cnk7XHJcblx0XHRjb25zdCBzdGF0dXMgPSBlbnRyeVN0YXR1cy5zdGF0dXM7XHJcblxyXG5cdFx0aWYgKHN0YXR1cyA9PT0gRU5UUllfU1RBVFVTLkxPQ0FMKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucylcclxuXHRcdFx0XHQudGhlbihcclxuXHRcdFx0XHRcdHRlbXBsYXRlID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgb3B0aW9ucy5wYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChpdGVtRW50cnksIHN0YXR1cywgb3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxyXG5cdCAqIEBwYXJhbSBpdGVtSWRzXHJcblx0ICogQHBhcmFtIG9wdGlvbnNcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtRW50cnlbXT59XHJcblx0ICpcclxuXHQgKiBGb3IgZXZlcnkgaXRlbWlkIGZpbmQgdGhlIHN0YXR1cyBvZiB0aGUgSXRlbUVudHJ5IGFuZCByZXNvbHZlIHRoZSBwcm9taXNlcyBzbyB0aGUgcmVzdWx0IGlzXHJcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XHJcblx0ICovXHJcblxyXG5cdGZldGNoSXRlbXMgKGl0ZW1UeXBlLCBpdGVtSWRzLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0Y29uc3QgYmF0Y2hTdGF0dXMgPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lml0ZW1JZCxcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaXRlbUlkcylcclxuXHRcdFx0YmF0Y2hTdGF0dXMuYWRkKDxFbnRyeVN0YXR1czxJdGVtRW50cnk+PiB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKSk7XHJcblxyXG5cdFx0cHJvbWlzZXMuZW50cmllcyA9IGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCk7XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpXHJcblx0XHRcdHByb21pc2VzLnJlcXVlc3RzID0gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKSwgb3B0aW9ucy5jb2x1bW5zKTtcclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLkxPQ0FMXSkpXHJcblx0XHRcdHByb21pc2VzLnRlbXBsYXRlID0gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYmF0Y2hSZXNvbHZlKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cywgb3B0aW9ucy5jb2x1bW5zLCByZXNvbHZlZCwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlQ2FjaGVkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMsIG9wdGlvbnMpOiBQcm9taXNlPEl0ZW1FbnRyeT4ge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBpdGVtRW50cnkuY29sdW1ucy5yZXF1ZXN0O1xyXG5cclxuXHRcdHN3aXRjaCAoc3RhdHVzKSB7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyksXHJcblx0XHRcdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMsIG9wdGlvbnMuY29sdW1ucykuZGlmZmVyZW5jZTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIFtpdGVtSWRdLCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGNvbHVtbkRpZmZlcmVuY2UsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0XHRkZWZhdWx0OiAvLyBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgW2l0ZW1JZF0sIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGUoXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLnJlc29sdmUocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlTG9jYWwgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBwYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBpdGVtSWRDb252ZXJzaW9uID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXHJcblx0XHRcdGl0ZW1FbnRyeS5zZXRQYXJlbnQocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkKTsgLy8gY3JlYXRlIG5ldyBvYmplY3RcclxuXHJcblx0XHRpdGVtRW50cnlcclxuXHRcdFx0LnByb2Nlc3NMb2NhbCh0ZW1wbGF0ZS5maWVsZHMsIHt9LCB7fSwgaXRlbUlkQ29udmVyc2lvbilcclxuXHRcdFx0LnNldENyZWF0b3IoKVxyXG5cdFx0XHQucmVzb2x2ZSgpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcclxuXHRcdFx0bGlua2VkOiB0aGlzLmNyZWF0ZUxvY2FsRW50cmllcyhpdGVtVHlwZSwgaXRlbUlkLCB0ZW1wbGF0ZSwgaXRlbUlkQ29udmVyc2lvbiwgbG9jYWxJdGVtQ2FjaGUpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUV4cGFuc2lvbiAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uLCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0Ly8gQW5vdGhlciByZXF1ZXN0IGFscmVhZHkgcmVxdWVzdGVkIHRoZSBjb2x1bW5zIHdlIG5lZWQgaGVyZSwgbm8gbmVlZCB0byBleHBhbmQgdGhlIGl0ZW0gYW5kIHJlc29sdmUgaXQgKGFscmVhZHkgZG9uZSBieSBvdGhlciByZXF1ZXN0KVxyXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcclxuXHJcblx0XHRpdGVtRW50cnkuZXhwYW5kKFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRleHBhbnNpb25SZXN1bHRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlKCk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlUmVtb3RlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uU2V0OiBDb2x1bW5TZXQsIHJlc3BvbnNlOiBBcGlSZXNwb25zZSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdGlmIChpbml0aWFsID09PSB1bmRlZmluZWQpIHsgLy8gcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0c1xyXG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XHJcblx0XHRcdHRoaXMuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXHJcblx0XHRcdGluaXRpYWwsXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXQucm9vdCksXHJcblx0XHRcdGNvbHVtblNldFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGZldGNoVGVtcGxhdGUgKGl0ZW1UeXBlOiBzdHJpbmcsIHRlbXBsYXRlT3B0aW9uczogYW55ID0ge30sIHRlbXBsYXRlQ29sdW1uczogYW55ID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG5cdFx0Y29uc3QgaGFzVGVtcGxhdGVPcHRpb25zID0gaGFzUHJvcGVydGllcyh0ZW1wbGF0ZU9wdGlvbnMpO1xyXG5cdFx0Y29uc3QgY29sdW1uSXRlbVR5cGUgPSBnZXRGaXJzdFByb3BlcnR5KHRlbXBsYXRlQ29sdW1ucyk7IC8vIGl0J3MgcG9zc2libGUgdG8gYWRkIGNvbHVtbnMgdG8gbGlua2VkIGl0ZW1zXHJcblxyXG5cdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgY2FjaGVkVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJlxyXG5cdFx0XHRcdChcclxuXHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlID09PSBudWxsIHx8XHJcblx0XHRcdFx0XHR0aGlzLmNvbHVtblV0aWwucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNhY2hlZFRlbXBsYXRlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChbXHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9ucyksXHJcblx0XHRcdGNvbHVtbkl0ZW1UeXBlID09PSBudWxsID9cclxuXHRcdFx0XHR7fSA6XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGNvbHVtbkl0ZW1UeXBlLCB0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdKVxyXG5cdFx0XSkudGhlbihcclxuXHRcdFx0cmVzb2x2ZWQgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlUmVzcG9uc2U6IGFueSA9IHJlc29sdmVkWzBdO1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcclxuXHRcdFx0XHRcdHRlbXBsYXRlUmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCksXHJcblx0XHRcdFx0XHRyZXNvbHZlZFsxXVxyXG5cdFx0XHRcdCkubWVyZ2VkO1xyXG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlID0ge1xyXG5cdFx0XHRcdFx0ZmllbGRzOiB0ZW1wbGF0ZVJlc3BvbnNlLmZldGNoT2JqZWN0KFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0dGVtcGxhdGVSZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF1cclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCB0cnVlLCByZXNwb25zZUNvbHVtbnMpLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2U6IHRlbXBsYXRlUmVzcG9uc2UsXHJcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnM6IHJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zICYmIHRlbXBsYXRlUmVzcG9uc2UuY2FjaGVhYmxlKVxyXG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdID0gdGVtcGxhdGU7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0RW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG9wdGlvbnM6IGFueSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4ge1xyXG5cdFx0bGV0IGl0ZW1FbnRyeTtcclxuXHJcblx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpKSB7XHJcblx0XHRcdGl0ZW1FbnRyeSA9IGxvY2FsSXRlbUNhY2hlLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBpdGVtRW50cnksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIG9wdGlvbnMpfTtcclxuXHJcblx0XHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCBmYWxzZSk7XHJcblxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUx9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLmNvbHVtbnMsIG9wdGlvbnMuZGVmZXJSZXF1ZXN0KTtcclxuXHJcblx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdHRoaXMuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRlbnRyeTogaXRlbUVudHJ5LFxyXG5cdFx0XHRzdGF0dXM6IG9wdGlvbnMuZGVmZXJSZXF1ZXN0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlJFU09MVkVcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRpc0NvbHVtblN1cGVyc2V0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHJldHVybiBpdGVtRW50cnkuaXNMb2NhbCgpIHx8IGl0ZW1FbnRyeS5jb2x1bW5zLmlzU3VwZXJzZXRPZihjb2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IG9wdGlvbnMuY29sdW1ucztcclxuXHJcblx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLmV4cGFuZFJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy5pc0NvbHVtblN1cGVyc2V0KGl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnMpID9cclxuXHRcdFx0XHRFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOlxyXG5cdFx0XHRcdEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNDb2x1bW5TdXBlcnNldChpdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zKSlcclxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmRlZmVyKGZhbHNlKTtcclxuXHJcblx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkVYUEFORDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIHtCYXRjaFN0YXR1c30gYmF0Y2hTdGF0dXNcclxuXHQgKiBAcGFyYW0gcmVxdWVzdENvbHVtbnNcclxuXHQgKiBAcGFyYW0gcmVzb2x2ZWRcclxuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XHJcblx0ICpcclxuXHQgKiBmb3IgZXZlcnkgdHlwZSBvZiBlbnRyeSBzdGF0dXMgdGhlcmUgaXMgaW4gdGhpcyBiYXRjaCByZXF1ZXN0IG1ha2Ugc3VyZSB0aGUgZW50cmllcyBnZXQgcmVzb2x2ZWQuXHJcblx0ICogdGhlbiByZXR1cm4gYSBhcnJheSBvZiB0aGUgcmVzdWx0aW5nIEl0ZW1FbnRyeUFycmF5XHJcblx0ICovXHJcblx0YmF0Y2hSZXNvbHZlIChpdGVtVHlwZSwgYmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzLCByZXF1ZXN0Q29sdW1ucywgcmVzb2x2ZWQsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBJdGVtRW50cnlbXSB8IFByb21pc2U8YW55PiB7XHJcblx0XHRjb25zdCByZXNwb25zZSA9IHJlc29sdmVkLnJlcXVlc3RzO1xyXG5cdFx0Y29uc3QgZXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xyXG5cdFx0Y29uc3QgcmVzb2x2ZVN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XHJcblxyXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKGV4cGFuZFN0YXR1cykpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcclxuXHJcblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0XHRleHBhbmRTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMocmVzb2x2ZVN0YXR1cykpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XHJcblxyXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFx0cmVzb2x2ZVN0YXR1cywgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnJlc29sdmVSZW1vdGUoaXRlbUVudHJ5LCBjb2x1bW5JbmZvLCByZXNwb25zZSkgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSwgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG51bGwsIHJlc29sdmVkLnRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gdG9kbzogbm8gaXRlbSBlcnJvciAoe21lc3NhZ2U6IHRoaXMuaXRlbUVudHJ5U2VydmljZS51bmRlZmluZWRJdGVtRXJyb3J9KVxyXG5cdFx0cmV0dXJuIHN1Y2Nlc3MgPyBiYXRjaFN0YXR1cy5nZXRBcnJheSgpIDogdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVMb2NhbEVudHJpZXMgKFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRsb2NhbFBhcmVudElkOiBJdGVtSWQsXHJcblx0XHR0ZW1wbGF0ZSxcclxuXHRcdGl0ZW1JZENvbnZlcnNpb246IEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFtdIHtcclxuXHRcdGNvbnN0IGFwaVJlc3BvbnNlID0gdGVtcGxhdGUucmVzcG9uc2U7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvTWFwID0ge307XHJcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSB7fTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8e2l0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdfT4gPSBbXTtcclxuXHJcblx0XHQvLyBUT0RPOiBkaXNhYmxlIGNhY2hpbmc/XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGFwaVJlc3BvbnNlLml0ZW1zKSB7XHJcblx0XHRcdGlmIChpdGVtVHlwZSA9PT0gcGFyZW50VHlwZSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGNvbHVtbkluZm9NYXBbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdHRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAocGFyZW50VHlwZTIsIGxvY2FsUGFyZW50SWQyLCBhcGlQYXJlbnRJZCkgPT4ge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUyLCBpdGVtSWQ6IGxvY2FsUGFyZW50SWQyfTtcclxuXHRcdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlMl1bYXBpUGFyZW50SWRdLmxpbmtzO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xyXG5cdFx0XHRcdGlmICghbGlua3MuaGFzT3duUHJvcGVydHkoaXRlbVR5cGUpKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRcdC8vIHRoZSBpdGVtIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQgaW4gdG9wLWRvd24gb3JkZXJcclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goe2l0ZW1UeXBlOiBpdGVtVHlwZSwgaXRlbUVudHJpZXM6IGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSBbXX0pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0XHRjb25zdCBsb2NhbEl0ZW1JZCA9IGl0ZW1JZENvbnZlcnNpb25baXRlbVR5cGVdW2FwaUl0ZW1JZF07XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWxMaW5rZWQoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRsb2NhbEl0ZW1JZCxcclxuXHRcdFx0XHRcdFx0YXBpUmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGFwaUl0ZW1JZCksXHJcblx0XHRcdFx0XHRcdHBhcmVudCxcclxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mb01hcFtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Y3JlYXRlRW50cmllcyhwYXJlbnRUeXBlLCBsb2NhbFBhcmVudElkLCBhcGlSZXNwb25zZS5saW5rc1twYXJlbnRUeXBlXVswXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGRlZmVyUmVxdWVzdCA9IHRydWUsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpIHtcclxuXHRcdGNvbnN0IHRpdGxlRmllbGQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZChpdGVtVHlwZSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoe2NvbHVtbnM6IFt0aXRsZUZpZWxkXSwgZGVmZXJSZXF1ZXN0OiBkZWZlclJlcXVlc3R9KSxcclxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcclxuXHRcdCkudGhlbihcclxuXHRcdFx0Ly8gdG9kbzogSXRlbUVudHJ5IHwgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxyXG5cdFx0XHQoZW50cnk6IGFueSkgPT4ge1xyXG5cdFx0XHRcdGlmIChlbnRyeS5tYWluICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gZW50cnkubWFpbi5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmdldEZpZWxkcygpW3RpdGxlRmllbGRdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbXMgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IEl0ZW1JZFtdLCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogaXRlbUlkc30sIHtbaXRlbVR5cGVdOiBjb2x1bW5zfSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yLCBDb2x1bW5FeHBhbnNpb24sIENvbHVtblNldCwgSXRlbUhhbmRsZXIsIFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVxdWVzdFNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtIChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XHJcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR7aWQ6IGl0ZW1JZH0sXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdEl0ZW1zIChcclxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0cXVlcnkgPSBjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0LFxyXG5cdFx0Y29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnNcclxuXHQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCBvcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XHJcblxyXG5cdFx0Y29uc3QgcGFyYW1zID0ge1xyXG5cdFx0XHRyZXF1ZXN0VHlwZTogJ3F1ZXJ5JyxcclxuXHRcdFx0aXRlbVR5cGU6IG9wdGlvbnMucXVlcnlJdGVtVHlwZSA9PT0gbnVsbCA/IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSA6IG9wdGlvbnMucXVlcnlJdGVtVHlwZSxcclxuXHRcdFx0Y29sdW1uczoge1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdOiBjb2x1bW5zfSxcclxuXHRcdFx0cXVlcnk6IHF1ZXJ5LFxyXG5cdFx0XHRsaW1pdDogbnVsbFxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5saW1pdCAhPT0gbnVsbClcclxuXHRcdFx0cGFyYW1zLmxpbWl0ID0gb3B0aW9ucy5saW1pdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocGFyYW1zKTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RMaW5rSXRlbXMgKHBhcmVudFR5cGUsIHBhcmVudElkQXJyYXksIGl0ZW1UeXBlLCBxdWVyeSwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiBxdWVyeSA9PT0gbnVsbCA/XHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHR7aWQ6IHBhcmVudElkQXJyYXl9LFxyXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHRcdCkgOlxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcclxuXHRcdFx0XHRcdHF1ZXJ5LFxyXG5cdFx0XHRcdFx0e2xpbmtlZFRvOiBwYXJlbnRUeXBlLCBxdWVyeToge2lkOiBwYXJlbnRJZEFycmF5fX1cclxuXHRcdFx0XHQpLFxyXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zIC8vIHNob3VsZCBjb250YWluIGEgZGVyaXZlZCBjb2x1bW4gdGhhdCByZWZlcnMgdG8gdGhlIHBhcmVudFxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0V4cGFuc2lvbiAocmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb247XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzUmVzcG9uc2UgKFxyXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxyXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcclxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxyXG5cdFx0Y29sdW1uRXhwYW5zaW9uPzogQ29sdW1uRXhwYW5zaW9uXHJcblx0KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0aWYgKGNvbHVtbkV4cGFuc2lvbiA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdGNvbHVtblNldC5pdGVtVHlwZSxcclxuXHRcdFx0XHRjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlID8gdHJ1ZSA6IGNvbHVtblNldC5yZXF1ZXN0LFxyXG5cdFx0XHRcdGNvbHVtblNldC5yZXNwb25zZVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uU2V0Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSBjb2x1bW5TZXQucm9vdDtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxQcm9taXNlPEl0ZW1FbnRyeT4+ID0gW107XHJcblxyXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0bGV0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbUlkLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uU2V0XHJcblx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZEVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgcmVzb2x2ZWRFbnRyeSBvZiByZXNvbHZlZEVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZEVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdDxDb2x1bW5FeHBhbnNpb24+IGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XHJcblx0XHRcdGl0ZW1FbnRyeSA6XHJcblx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSxcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTGlua1Jlc3BvbnNlIChcclxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGNvbnN0IHBhcmVudEl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV07XHJcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XHJcblx0XHRcdHByb21pc2VzW3BhcmVudElkXSA9IHBhdGhFeGlzdHMocGFyZW50SXRlbXMsIFtwYXJlbnRJZCwgJ2xpbmtzJywgaXRlbVR5cGVdKSA/XHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHBhcmVudEl0ZW1zW3BhcmVudElkXS5saW5rc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxyXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0KSA6XHJcblx0XHRcdFx0W107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdGl0ZW1zOiByZXNvbHZlZCxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldCxcclxuXHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvbjogY29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHsgRWRpdFJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlU2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdDogZmFsc2UsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBub29wXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb21wYXJlT3B0aW9ucyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlyc3QpIHtcclxuXHRcdFx0aWYgKGZpcnN0W2tleV0gIT09IHNlY29uZFtrZXldKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlzTmV3UmVzb3VyY2UgKHJlc291cmNlOiBFZGl0UmVzb3VyY2UpIHtcclxuXHRcdHJldHVybiByZXNvdXJjZS5pc0xvY2FsKCkgJiZcclxuXHRcdFx0cmVzb3VyY2UudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IERVUExJQ0FURV9LRVlXT1JELCBEVVBMSUNBVEVfUFJFRklYLCBORVdfS0VZV09SRCwgTkVXX1BSRUZJWCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLZXlTZXJ2aWNlIHtcclxuXHRzZXBhcmF0b3I6IHN0cmluZyA9ICc6JztcclxuXHJcblx0Y29uc3RydWN0b3IgKCkge31cclxuXHJcblx0Z2V0U2luZ2xlS2V5IChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1UeXBlLmNvbmNhdCh0aGlzLnNlcGFyYXRvciwgU3RyaW5nKGl0ZW1JZCkpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbkNhY2hlS2V5IChwYXJlbnRUeXBlOiBzdHJpbmcsIHBhcmVudElkOiBudW1iZXIsIGNoaWxkVHlwZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gcGFyZW50VHlwZS5jb25jYXQodGhpcy5zZXBhcmF0b3IsIFN0cmluZyhwYXJlbnRJZCksIHRoaXMuc2VwYXJhdG9yLCBjaGlsZFR5cGUpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q3NzS2V5ICgpIHtcclxuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJ18nKTtcclxuXHR9XHJcblxyXG5cdHBhcnNlU3RhdGVLZXkgKHN0YXRlS2V5OiBzdHJpbmcpIHtcclxuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcclxuXHJcblx0XHRpZiAoc3RhdGVLZXkuaW5kZXhPZihORVdfS0VZV09SRCkgPT09IDApXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZTogJ25ldycsXHJcblx0XHRcdFx0dGVtcGxhdGU6IHN0YXRlS2V5LnN1YnN0cmluZyhORVdfS0VZV09SRC5sZW5ndGgpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YoRFVQTElDQVRFX0tFWVdPUkQpID09PSAwKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6ICdkdXBsaWNhdGUnLFxyXG5cdFx0XHRcdGl0ZW1JZDogc3RhdGVLZXkuc3Vic3RyaW5nKERVUExJQ0FURV9LRVlXT1JELmxlbmd0aClcclxuXHRcdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdldER1cGxpY2F0ZVN0YXRlS2V5IChpdGVtSWQ6IHN0cmluZyB8IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIERVUExJQ0FURV9LRVlXT1JEICsgaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Z2V0TmV3U3RhdGVLZXkgKHRlbXBsYXRlVHlwZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gTkVXX0tFWVdPUkQgKyB0ZW1wbGF0ZVR5cGU7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbElkICgpOiBJdGVtSWQge1xyXG5cdFx0cmV0dXJuICsoTkVXX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxEdXBsaWNhdGVJZCAoKTogSXRlbUlkIHtcclxuXHRcdHJldHVybiArKERVUExJQ0FURV9QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcclxuXHR9XHJcblxyXG5cdGdldFJhbmRvbVN0cmluZyAoKSB7XHJcblx0XHRyZXR1cm4gKCcnICsgTWF0aC5yYW5kb20oKSkuc3BsaXQoJy4nKVsxXS5zdWJzdHIoMCwgOCk7XHJcblx0fVxyXG5cclxuXHQvLyBub3RlOiB0aGUgY2hhbmdlcyBjb21waWxlciB1c2VzIHRoaXNcclxuXHQvLyBtaWdodCBiZSBjYWxsZWQgd2l0aCB1bmRlZmluZWQgKGl0ZW1IYW5kbGVyLmNyZWF0ZVJlcXVlc3QpXHJcblx0aXNMb2NhbElkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmlzTmV3SWQoaXRlbUlkKSB8fCB0aGlzLmlzRHVwbGljYXRlSWQoaXRlbUlkKSk7XHJcblx0fVxyXG5cclxuXHRpc05ld0lkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gTkVXX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgTkVXX1BSRUZJWC5sZW5ndGgpID09PSBORVdfUFJFRklYO1xyXG5cdH1cclxuXHJcblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtSWQgPT09IERVUExJQ0FURV9LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIERVUExJQ0FURV9QUkVGSVgubGVuZ3RoKSA9PT0gRFVQTElDQVRFX1BSRUZJWDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uQ2FjaGUsXHJcblx0SXRlbUNhY2hlLFxyXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0TG9ja1NlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0SXRlbUNhY2hlRmFjdG9yeSxcclxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlIHtcclxuXHRpdGVtczogSXRlbUNhY2hlO1xyXG5cdHJvb3RJdGVtOiBJdGVtRW50cnkgfCB1bmRlZmluZWQ7XHJcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHRkZWZlcnJlZENvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblx0dGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcclxuXHJcblx0Y2FsbGJhY2tzID0ge29uQmVmb3JlU2F2ZToge30sIG9uU2F2ZVN1Y2Nlc3M6IHt9LCBvblNhdmVXaXRob3V0Q2xvc2luZzoge319O1xyXG5cclxuXHRjaGFuZ2VzSW50ZXJ2YWw6IG51bGwgfCBudW1iZXIgPSBudWxsO1xyXG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGlkOiBzdHJpbmcgPSAnJ1xyXG5cdCkge1xyXG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QgPSBmYWxzZSkge1xyXG5cdFx0aWYgKGlzUm9vdClcclxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcclxuXHJcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoX2l0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oX2l0ZW1FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbUVudHJ5LCBvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucykge1xyXG5cdFx0cmVzb3VyY2VPcHRpb25zLm9uQWN0aXZhdGVJdGVtID0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uQWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0cmVzb3VyY2VPcHRpb25zLm9uRGVhY3RpdmF0ZUl0ZW0gPSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHRoaXMub25EZWFjdGl2YXRlSXRlbShpdGVtRW50cnkpO1xyXG5cclxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uID1cclxuXHRcdFx0KF9jb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkgPT4gdGhpcy5jbGVhckNvbGxlY3Rpb24oX2NvbGxlY3Rpb25SZXNvdXJjZSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCByZXNvdXJjZU9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbkVudHJpZXMpXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShjb2xsZWN0aW9uRW50cmllc1twYXJlbnRJZF0sIHJlc291cmNlT3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsZWFySXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcclxuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbVJlc291cmNlLmVudHJ5KTtcclxuXHR9XHJcblxyXG5cdGNsZWFySXRlbUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblx0fVxyXG5cclxuXHRjbGVhckNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnk7XHJcblxyXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5jbGVhcihjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0Y29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJUYWJDaGFuZ2UgPSBmYWxzZSkge1xyXG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucy5jbGVhcigpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlU2luZ2xlSXRlbXMgKGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IG9sZEl0ZW1JZCBpbiBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbXMuZ2V0KGl0ZW1UeXBlLCBvbGRJdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0dGhpcy5pdGVtcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBvbGRJdGVtSWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZXNvdXJjZXMgd2lsbCBiZSBjbGVhcmVkIGxhdGVyIChjbGVhciBmdW5jdGlvbilcclxuXHRyZXZlcnRDaGFuZ2VzICgpIHtcclxuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB0aGlzLnJlc2V0Q29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnkpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmlzTG9ja2FibGUoKSA/XHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZGVsZXRlTG9jayh0aGlzLnJvb3RJdGVtKSA6XHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cclxuXHR9XHJcblxyXG5cdHJlc2V0Q29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcygpKVxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmV2ZXJ0Q2hhbmdlcygpO1xyXG5cclxuXHRcdC8vIGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMoKSkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgY29sbGVjdGlvbkVudHJ5Lml0ZW1zKVxyXG5cdFx0XHRpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpO1xyXG5cdFx0Ly8gfVxyXG5cdH1cclxuXHJcblx0ZGV0ZWN0Q2hhbmdlcyAoKSB7XHJcblx0XHRpZiAodGhpcy5oYXNDaGFuZ2VzKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuaXRlbXMuc29tZShcclxuXHRcdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKClcclxuXHRcdFx0KVxyXG5cdFx0KVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdGhpcy5jb2xsZWN0aW9ucy5zb21lKFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMuY29sbGVjdGlvbkhhc0NoYW5nZXMoY29sbGVjdGlvbkVudHJ5KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29sbGVjdGlvbkhhc0NoYW5nZXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XHJcblx0XHQvLyBubyBuZWVkIHRvIGNhbGwgaGFzRWRpdFJlc291cmNlcyBoZXJlLCB0aGVzZSBmdW5jdGlvbnMgYXJlIHZlcnkgc2ltcGxlXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0FkZGVkSXRlbXMoKSB8fCBjb2xsZWN0aW9uRW50cnkuaGFzUmVtb3ZlZEl0ZW1zKCkpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMoKSAmJiBjb2xsZWN0aW9uRW50cnkuaGFzVXBkYXRlZEl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2thYmxlICgpIHtcclxuXHRcdGlmICh0aGlzLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yb290SXRlbS5pc0xvY2thYmxlKCk7XHJcblx0fVxyXG5cclxuXHRzYXZlIChjbG9zZVRhYiA9IGZhbHNlLCBwYXJhbWV0ZXJzLCBicmVha1VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykge1xyXG5cdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcclxuXHJcblx0XHRyZXR1cm4gKHRoaXMuaXNMb2NrYWJsZSgpID8gdGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSkgOiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKSkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uQmVmb3JlU2F2ZScsIGNsb3NlVGFiKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXF1ZXN0UGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgdGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycywgcGFyYW1ldGVycyk7XHJcblxyXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShcclxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9ucy50b0FycmF5KCksXHJcblx0XHRcdFx0XHRicmVha1VwQnlQYXJlbnQsXHJcblx0XHRcdFx0XHRyZXF1ZXN0UGFyYW1ldGVycyxcclxuXHRcdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKGNvbnZlcnNpb25NYXAgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcclxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuY2xlYXJMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pO1xyXG5cclxuXHRcdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2luZ2xlSXRlbXMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uU2F2ZVN1Y2Nlc3MnLCBjb252ZXJzaW9uTWFwKS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoIWNsb3NlVGFiKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvblNhdmVXaXRob3V0Q2xvc2luZycsIGNvbnZlcnNpb25NYXAsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZW5hYmxlQ2hhbmdlc1dhdGNoZXIoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tzIChldmVudCwgLi4uYXJncykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNhbGxiYWNrc1tldmVudF0pXHJcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVuYWJsZUNoYW5nZXNXYXRjaGVyICgpIHtcclxuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ0NoYW5nZXMgd2F0Y2hlciBhbHJlYWR5IHJ1bm5pbmchJywgdGhpcyk7XHJcblx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGlmICghdGhpcy5kZXRlY3RDaGFuZ2VzKCkpXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcclxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQzMDAwXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZGlzYWJsZUNoYW5nZXNXYXRjaGVyICgpIHtcclxuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5jaGFuZ2VzSW50ZXJ2YWwpO1xyXG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cmVnaXN0ZXJDYWxsYmFjayAoZXZlbnQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XHJcblx0XHR0aGlzLmNhbGxiYWNrc1tldmVudF1ba2V5XSA9IGNhbGxiYWNrO1xyXG5cclxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV07XHJcblx0fVxyXG5cclxuXHRvbkRlYWN0aXZhdGVJdGVtIChpdGVtRW50cnkpIHtcclxuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbUVudHJ5KTtcclxuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRvbkFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XHJcblx0XHR0aGlzLml0ZW1zLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NrU2VydmljZSB7XHJcblx0bG9ja0l0ZW1zID0ge307XHJcblx0cHJvbWlzZXMgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGdldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbWFwKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCB2YWx1ZSwgbWFwKSB7XHJcblx0XHRyZXR1cm4gY3JlYXRlUGF0aChcclxuXHRcdFx0bWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB2YWx1ZV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NrcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5sb2NrSXRlbXM7XHJcblx0fVxyXG5cclxuXHRoYXNMb2NrIChsb2NrVG9rZW5JZCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmxvY2tJdGVtcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdCAod2F0Y2hlZClcclxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XHJcblx0fVxyXG5cclxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcclxuXHR9XHJcblxyXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXHJcblx0Ly8gaXMgYWxzbyB1c2VkIGJ5IGRlbGV0ZUxvY2tcclxuXHRmZXRjaENhY2hlZExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9jayAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5wcm9taXNlcyk7XHJcblxyXG5cdFx0aWYgKHByb21pc2UgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHByb21pc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihsb2NrSXRlbSA9PiB7XHJcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKGxvY2tJdGVtID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduID9cclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChsb2NrSXRlbS5tZXNzYWdlKSA6XHJcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKFxyXG5cdFx0XHQnTG9ja3Rva2VuJyxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0e2l0ZW10eXBlOiBpdGVtVHlwZSwgaXRlbTogaXRlbUlkfVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoXHJcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rcy5Mb2NrdG9rZW5bMF1cclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sIGVycm9yID0+IHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0aWYgKGVycm9yLmNvZGUgPT09IDMwMSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBlcnJvci5tZXNzYWdlXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoaXRlbUVudHJ5LCBwcm9taXNlLCB0aGlzLnByb21pc2VzKTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZUxvY2sgKGl0ZW1FbnRyeSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihjYWNoZWRMb2NrID0+IHtcclxuXHRcdFx0XHQvLyB1bmRlZmluZWQ6IG5vdCByZXF1ZXN0ZWQgeWV0XHJcblxyXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xyXG5cdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZSgnTG9ja3Rva2VuJywgY2FjaGVkTG9jay5pZClcclxuXHRcdFx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhckxvY2sgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmNvbnN0IEVNUFRZX0VOVFJZID0ge307XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcclxuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xyXG5cdGRlc3RpbmF0aW9uOiBhbnkgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwcml2YXRlIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cHJvY2VzcyAoKSB7XHJcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcclxuXHRcdHRoaXMucHJvY2Vzc0l0ZW1zKHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSwgW3RoaXMucm9vdEl0ZW1FbnRyeV0sIHt9KTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpdGVtVHlwZTogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQ6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQYXJlbnRNYXAgKGl0ZW1DYWNoZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXHJcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkgLy8gd2UgZG9uJ3QgY2FyZSBmb3IgaXRlbXMgdGhhdCBhcmUgbm90IGxpbmtlZCB0byB0aGUgcm9vdCBpdGVtXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnQuaXRlbVR5cGU7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdFx0bGV0IG1hcEVudHJ5ID0gcmVzdWx0W3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdFx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRtYXBFbnRyeVtwYXJlbnRJZF0gPSB7fTtcclxuXHJcblx0XHRcdFx0bWFwRW50cnkgPSBtYXBFbnRyeVtwYXJlbnRJZF07XHJcblxyXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdG1hcEVudHJ5W2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NJdGVtcyAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgbGlua0FjY3VtdWxhdG9yKSB7XHJcblx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRpZiAobGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRcdC8vIGVhY2ggaXRlbSBvbmx5IGhhcyBhIHNpbmdsZSBwYXJlbnQsIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhpc1xyXG5cdFx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXS5wdXNoKGl0ZW1JZCk7XHJcblxyXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdID0gdGhpcy5wcm9jZXNzSXRlbShpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzSXRlbSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cdFx0Y29uc3QgY2hpbGRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENvbGxlY3Rpb25zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRjb25zdCB2YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cdFx0Y29uc3QgbGlua3MgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEl0ZW1zKVxyXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjaGlsZFR5cGUsIGNoaWxkSXRlbXNbY2hpbGRUeXBlXSwgbGlua3MpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNoaWxkQ29sbGVjdGlvbnMpIHtcclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLnF1ZXJ5ICE9PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkuaXRlbXMsIGxpbmtzKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBoYXNWYWx1ZXMgPSBoYXNQcm9wZXJ0aWVzKHZhbHVlcyk7XHJcblx0XHRjb25zdCBoYXNMaW5rcyA9IGhhc1Byb3BlcnRpZXMobGlua3MpO1xyXG5cclxuXHRcdGlmIChoYXNWYWx1ZXMgJiYgaGFzTGlua3MpXHJcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXMsIGxpbmtzOiBsaW5rc307XHJcblxyXG5cdFx0aWYgKGhhc1ZhbHVlcylcclxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlc307XHJcblxyXG5cdFx0aWYgKGhhc0xpbmtzKVxyXG5cdFx0XHRyZXR1cm4ge2xpbmtzOiBsaW5rc307XHJcblxyXG5cdFx0cmV0dXJuIEVNUFRZX0VOVFJZO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRJdGVtc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xyXG5cdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLnBhcmVudE1hcFtwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRpZiAobWFwRW50cnkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdHJldHVybiBtYXBFbnRyeVtwYXJlbnRJZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5jb25zdCBNQVlCRSA9ICdtYXliZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyBmaWVsZHM6IEZpZWxkTWFwLFxyXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29tcGFyZVZhbHVlcyAodmFsdWUsIHF1ZXJ5VmFsdWUpIHtcclxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQocXVlcnlWYWx1ZSkpXHJcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlTW9tZW50T2JqZWN0cyhxdWVyeVZhbHVlLCB2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHF1ZXJ5VmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUR1cmF0aW9ucyhxdWVyeVZhbHVlLCB2YWx1ZSk7XHJcblxyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBxdWVyeVZhbHVlID09IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAocXVlcnk6IGFueSk6IGJvb2xlYW4gfCBzdHJpbmcge1xyXG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoTGlua2VkVG9RdWVyeShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hDb21wbGV4UXVlcnkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hTaW1wbGVRdWVyeSh0aGlzLmZpZWxkc1txdWVyeS5rZXldLCBxdWVyeSk7XHJcblxyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIHF1ZXJ5ISBQYXJzZWQ/Jyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoTGlua2VkVG9RdWVyeSAocXVlcnkpIHtcclxuXHRcdGlmIChxdWVyeS5yZXZlcnNlKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblx0XHRsZXQgbWF0Y2g7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcclxuXHRcdGVsc2UgaWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSBwYXJlbnQuaXRlbVR5cGUpXHJcblx0XHRcdG1hdGNoID0gZmFsc2U7XHJcblx0XHRlbHNlXHJcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHBhcmVudC5pdGVtSWQsIHF1ZXJ5LnF1ZXJ5KTtcclxuXHJcblx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5Lm5vdCA/ICFtYXRjaCA6IG1hdGNoO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaENvbXBsZXhRdWVyeSAocXVlcnkpIHtcclxuXHRcdGNvbnN0IGNvbmRpdGlvbnMgPSBxdWVyeS5jb25kaXRpb25zO1xyXG5cclxuXHRcdGxldCByZXN1bHQ7XHJcblx0XHRsZXQgdGVybWluYWw7XHJcblxyXG5cdFx0c3dpdGNoIChxdWVyeS5vcGVyYXRvcikge1xyXG5cdFx0XHRjYXNlICdBTkQnOlxyXG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XHJcblx0XHRcdFx0dGVybWluYWwgPSBmYWxzZTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnT1InOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xyXG5cdFx0XHRcdHRlcm1pbmFsID0gdHJ1ZTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgb3BlcmF0b3InKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XHJcblxyXG5cdFx0XHRpZiAobWF0Y2ggPT09IHRlcm1pbmFsKVxyXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcclxuXHJcblx0XHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXHJcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hTaW1wbGVRdWVyeSAodmFsdWUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCBrZXkgPSBxdWVyeS5rZXk7XHJcblx0XHRsZXQgcXVlcnlWYWx1ZSA9IHF1ZXJ5LnZhbHVlO1xyXG5cclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpIC8vIENvdWxkIGJlIGxpbmtlZFRvIGFuIGVtcHR5IG9iamVjdFxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1JlcXVpcmVkIGZpZWxkJywga2V5LCAnbm90IGZvdW5kIGZvcicsIHRoaXMuaXRlbVR5cGUpO1xyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHF1ZXJ5VmFsdWUgPT09ICdOT1cnKVxyXG5cdFx0XHRxdWVyeVZhbHVlID0gbW9tZW50KCk7XHJcblxyXG5cdFx0c3dpdGNoIChxdWVyeS5jb21wYXJhdG9yKSB7XHJcblx0XHRcdGNhc2UgJz0nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICchPSc6XHJcblx0XHRcdFx0cmV0dXJuICF0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICc8JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPCBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc8PSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDw9IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJz4nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJz49JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPj0gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnSU4nOlxyXG5cdFx0XHRcdHJldHVybiBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnTk9UIElOJzpcclxuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBjb21wYXJhdG9yOiAnICsgcXVlcnkuY29tcGFyYXRvciArICcgaW4gcXVlcnkgJyArIHF1ZXJ5KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmVudW0gQ09OU1RBTlRTIHtcclxuXHRPQkogPSAwLFxyXG5cdFNUUiA9IDEsXHJcblx0U0VQID0gJzonXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlciB7XHJcblx0cXVlcnk6IGFueTtcclxuXHRwYXJhbWV0ZXJzOiBhbnk7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChxdWVyeSwgcGFyYW1ldGVycz8pIHtcclxuXHRcdHRoaXMucXVlcnkgPSBxdWVyeTtcclxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWUpIHtcclxuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHZhbHVlLnNsaWNlKCkuc29ydCgpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24odmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbXBhcmVQYXJzZWRRdWVyaWVzIChhLCBiKSB7XHJcblx0XHRpZiAoYVtDT05TVEFOVFMuU1RSXSA9PT0gYltDT05TVEFOVFMuU1RSXSlcclxuXHRcdFx0cmV0dXJuIDA7XHJcblxyXG5cdFx0cmV0dXJuIGFbQ09OU1RBTlRTLlNUUl0gPiBiW0NPTlNUQU5UUy5TVFJdID8gMSA6IC0xO1xyXG5cdH1cclxuXHJcblx0cGFyc2UgKHF1ZXJ5ID0gdGhpcy5xdWVyeSkge1xyXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlTGlua2VkVG9RdWVyeShcclxuXHRcdFx0XHRxdWVyeS5saW5rZWRUbyxcclxuXHRcdFx0XHRxdWVyeS5xdWVyeSxcclxuXHRcdFx0XHRxdWVyeS5yZXZlcnNlLFxyXG5cdFx0XHRcdHF1ZXJ5Lm5vdFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5ub3QgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUN1c3RvbVF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcclxuXHRcdFx0XHRxdWVyeS5wYXJhbWV0ZXJzXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXHJcblx0XHRcdFx0cXVlcnkuY29uZGl0aW9ucyxcclxuXHRcdFx0XHRxdWVyeS5vcGVyYXRvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShcclxuXHRcdFx0XHRxdWVyeS5rZXksXHJcblx0XHRcdFx0cXVlcnkudmFsdWUsXHJcblx0XHRcdFx0cXVlcnkuY29tcGFyYXRvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGtleSA9IGdldEZpcnN0UHJvcGVydHkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChrZXkgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBbe30sICd7fSddO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoa2V5LCBxdWVyeVtrZXldKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VTZWFyY2hRdWVyeSAodmFsdWUpIHtcclxuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e3NlYXJjaDogdmFsdWVbQ09OU1RBTlRTLk9CSl19LFxyXG5cdFx0XHQnWycgKyAnc2VhcmNoJyArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDdXN0b21RdWVyeSAoY3VzdG9tLCBwYXJhbWV0ZXJzKSB7XHJcblx0XHRpZiAocGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gW1xyXG5cdFx0XHRcdHtjdXN0b206IGN1c3RvbX0sXHJcblx0XHRcdFx0J1snICsgY3VzdG9tICsgJ10nXHJcblx0XHRcdF07XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUGFyYW1ldGVycyA9IHRoaXMucGFyc2VDdXN0b21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtjdXN0b206IGN1c3RvbSwgcGFyYW1ldGVyczogcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuT0JKXX0sXHJcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVBhcmFtZXRlcnMgKHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KCk7XHJcblxyXG5cdFx0Y29uc3QgcXVlcnkgPSB7fTtcclxuXHRcdGxldCBzdHJpbmcgPSAnJztcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tpXTtcclxuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHBhcmFtZXRlcnNba2V5XSk7XHJcblxyXG5cdFx0XHRxdWVyeVtrZXldID0gdmFsdWVbQ09OU1RBTlRTLk9CSl07XHJcblxyXG5cdFx0XHRpZiAoaSA+IDApXHJcblx0XHRcdFx0c3RyaW5nICs9IENPTlNUQU5UUy5TRVA7XHJcblxyXG5cdFx0XHRzdHJpbmcgKz0gdmFsdWVbQ09OU1RBTlRTLlNUUl07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VTaW1wbGVRdWVyeSAoa2V5LCB2YWx1ZSwgY29tcGFyYXRvcj8pIHtcclxuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKGNvbXBhcmF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y29tcGFyYXRvciA9IEFycmF5LmlzQXJyYXkodmFsdWVbQ09OU1RBTlRTLk9CSl0pID8gJ0lOJyA6ICc9JztcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7a2V5OiBrZXksIHZhbHVlOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgY29tcGFyYXRvcjogY29tcGFyYXRvcn0sXHJcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUxpbmtlZFRvUXVlcnkgKGxpbmtlZFRvLCBxdWVyeSwgcmV2ZXJzZSwgbm90KSB7XHJcblx0XHRpZiAocXVlcnkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cXVlcnkgPSB7fTtcclxuXHJcblx0XHRpZiAocmV2ZXJzZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXZlcnNlID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKG5vdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRub3QgPSBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtsaW5rZWRUbzogbGlua2VkVG8sIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgcmV2ZXJzZTogcmV2ZXJzZSwgbm90OiBub3R9LFxyXG5cdFx0XHQnWycgKyAnbGlua2VkVG8nICsgQ09OU1RBTlRTLlNFUCArIGxpbmtlZFRvICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIHJldmVyc2UgKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUNvbXBsZXhRdWVyeSAoY29uZGl0aW9ucywgb3BlcmF0b3IpIHtcclxuXHRcdGlmIChvcGVyYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvcGVyYXRvciA9ICdBTkQnO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRvcGVyYXRvciA9IG9wZXJhdG9yLnRvVXBwZXJDYXNlKCk7XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkQ29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25zKGNvbmRpdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtjb25kaXRpb25zOiBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5PQkpdLCBvcGVyYXRvcjogb3BlcmF0b3J9LFxyXG5cdFx0XHQnWycgKyBvcGVyYXRvciArIHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9ucykge1xyXG5cdFx0bGV0IHBhcnNlZENvbmRpdGlvbnM6IG9iamVjdFtdID0gW107XHJcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcclxuXHRcdGxldCBzdHJpbmcgPSAnJztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxyXG5cdFx0XHRwYXJzZWRDb25kaXRpb25zLnB1c2godGhpcy5wYXJzZShjb25kaXRpb24pKTtcclxuXHJcblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcnNlZENvbmRpdGlvbiBvZiBwYXJzZWRDb25kaXRpb25zKSB7XHJcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcclxuXHRcdFx0c3RyaW5nICs9IHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuU1RSXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmb3JtYXRWYWx1ZSAodmFsdWUpIHtcclxuXHRcdGxldCBwcm9jZXNzZWRWYWx1ZTtcclxuXHJcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcmJykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XHJcblxyXG5cdFx0XHR2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogVW5kZWZpbmVkIHRlbXBsYXRlIHBhcmFtZXRlciBcXCcnICsga2V5ICsgJ1xcJycpO1xyXG5cclxuXHRcdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCBrZXkgKyAnPicgKyB2YWx1ZV07XHJcblx0XHR9XHJcblxyXG5cdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwgJycgKyBwcm9jZXNzZWRWYWx1ZV07XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGFkZEFuZENvbmRpdGlvbiAocXVlcnksIGNvbmRpdGlvbikge1xyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcclxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl19O1xyXG5cclxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXHJcblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xyXG5cdH1cclxuXHJcblx0YWRkT3JDb25kaXRpb24gKHF1ZXJ5LCBjb25kaXRpb24pIHtcclxuXHRcdGlmIChxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcclxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcclxuXHJcblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxyXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcclxuXHR9XHJcblxyXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnksIHBhcmVudCkge1xyXG5cdFx0bGV0IGxpbmtlZFRvUXVlcnk7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xyXG5cclxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xyXG5cclxuXHRcdHJldHVybiBxdWVyeSA9PT0gbnVsbCA/IGxpbmtlZFRvUXVlcnkgOiB0aGlzLmFkZEFuZENvbmRpdGlvbihxdWVyeSwgbGlua2VkVG9RdWVyeSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVOb3RJbiAoaWRBcnJheSkge1xyXG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xyXG5cdHByaXZhdGUgY29sdW1ucyA9IHt9O1xyXG5cdHByaXZhdGUgY29sdW1uSW5mb0lkTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChjb2x1bW5JbmZvKSB7XHJcblx0XHRpZiAodGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0pXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtbkluZm8uaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblV0aWxcclxuXHRcdFx0Lm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSwgY29sdW1uSW5mby5yZXF1ZXN0KVxyXG5cdFx0XHQubWVyZ2VkO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uSW5mb0lkTWFwW2NvbHVtbkluZm8uaWRdID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGdldCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbGxlY3Rpb25IYW5kbGVyLCBJdGVtSGFuZGxlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q29sdW1uU2V0RmFjdG9yeSxcclxuXHRJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIEZpZWxkTWFwLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0b25NZXNzYWdlUmVjZWl2ZWQgKG1lc3NhZ2U6IGFueSk6IGFueSB7XHJcblx0XHRzd2l0Y2ggKG1lc3NhZ2UuYm9keS5ldmVudFR5cGUpIHtcclxuXHRcdFx0Y2FzZSAndXBkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2NyZWF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdkZWxldGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnbGlua1RvJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVMaW5rTW92ZSgvKiBtZXNzYWdlICovKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdE1lc3NhZ2VWYWx1ZXMgKHZhbHVlcywgY29sdW1ucyk6IEZpZWxkTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcclxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uc1tjb2x1bW5JZF0udHlwZSwgdmFsdWVzW2NvbHVtbklkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1UeXBlLCBpdGVtcywgY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1JZDogbnVtYmVyXTogQ29sbGVjdGlvbk1hdGNoUmVzdWx0fSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1tpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtLnBhcmVudCAhPT0gbnVsbCA/IGl0ZW0ucGFyZW50IDoge307XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbUlkXSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUZpdHRpbmdJdGVtKFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHRoaXMuZm9ybWF0TWVzc2FnZVZhbHVlcyhpdGVtLnZhbHVlcywgY29sdW1ucyksXHJcblx0XHRcdFx0cGFyZW50XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnlDb2xsZWN0aW9uSWQgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNbc3RhdHVzXSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcclxuXHJcblx0XHRcdFx0XHRpZiAocmVzdWx0W2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF0gPSB7XHJcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRtYXliZTogW11cclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXVtzdGF0dXNdLnB1c2goXHJcblx0XHRcdFx0XHRcdHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSA6IGl0ZW1JZFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdENvbHVtbnMgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zLmZpdHRpbmc7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9uIG9mIGZpdHRpbmdDb2xsZWN0aW9ucylcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XHJcblx0fVxyXG5cclxuXHRkZWZlckVudHJ5IChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xyXG5cclxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVyKGZhbHNlKTtcclxuXHJcblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZS50aGVuKFxyXG5cdFx0XHR0aGlzLmRlZmVyRW50cnkuYmluZCh0aGlzKSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc01lc3NhZ2UgKGJvZHkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYm9keS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbVR5cGUsIGJvZHkuaXRlbXNbaXRlbVR5cGVdLCBib2R5LmNvbHVtbnNbaXRlbVR5cGVdKTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkU3RyaW5nIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkU3RyaW5nKTtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gK2l0ZW1JZFN0cmluZztcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcclxuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbaXRlbUlkXS5maXR0aW5nLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoXHJcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogcmVxdWVzdElkc30sIHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlIChib2R5KSB7XHJcblx0XHRjb25zdCBpdGVtcyA9IGJvZHkuaXRlbXMuRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZTtcclxuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25JZCA9IGl0ZW1zW2l0ZW1JZF0ucGFyZW50Lml0ZW1JZDtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcclxuXHJcblx0XHRcdGlmIChmdW5jdGlvbkVudHJ5ID09PSB1bmRlZmluZWQgfHwgZnVuY3Rpb25FbnRyeS5jb2x1bW5zLnJlc3BvbnNlLkZ1bmN0aWUubmV3Y2hhbmdlcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGZ1bmN0aW9uRW50cnkpKTtcclxuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeSgnRnVuY3RpZScsIHtpZDogcmVxdWVzdElkc30sIHtGdW5jdGllOiBbJ25ld2NoYW5nZXMnXX0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChyZXNwb25zZVZhbHVlID09PSBwcmV2aW91cy5uZXdjaGFuZ2VzKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHRcdC5zZXRJbml0aWFsKHtuZXdjaGFuZ2VzOiByZXNwb25zZVZhbHVlfSwgdHJ1ZSlcclxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcclxuXHRcdFx0XHRcdFx0LnJlc29sdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVSZXNwb25zZSAoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXF1ZXN0SWRzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRcdGNvbnN0IGlzTmV3ID0gaXRlbUVudHJ5LmluaXRpYWwgPT09IHVuZGVmaW5lZDtcclxuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XHJcblxyXG5cdFx0XHRcdGlmIChpc05ldylcclxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XHJcblxyXG5cdFx0XHRpZiAoaXNOZXcpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChmaWVsZHMsIGRlcml2ZWQsIGV4cGFuc2lvblJlc3VsdCk7XHJcblxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0LnNldERlcml2ZWQoZGVyaXZlZClcclxuXHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCBmYWxzZSlcclxuXHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXHJcblx0XHRcdFx0XHQucmVzb2x2ZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2UpIHtcclxuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XHJcblxyXG5cdFx0aWYgKGJvZHkuaXRlbVR5cGUgPT09ICdGdW5jdGlvbkNoYW5nZXNSZXNvbHZlJylcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUoYm9keSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UoYm9keSkudGhlbihcclxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVVwZGF0ZSAobWVzc2FnZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UobWVzc2FnZS5ib2R5KS50aGVuKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZURlbGV0ZSAobWVzc2FnZSkge1xyXG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBib2R5Lml0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Q29udGFpbmluZ0l0ZW0oYm9keS5pdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XHJcblxyXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9IHtjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCBpdGVtczogW119O1xyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0bWFwRW50cnkuY29sbGVjdGlvbi5yZW1vdmVJdGVtcyhtYXBFbnRyeS5pdGVtcywgbnVsbCwgdHJ1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETyFcclxuXHRoYW5kbGVMaW5rTW92ZSAoKSB7fVxyXG5cclxuLypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XHJcblx0XHRwcm9jZXNzTWVzc2FnZShcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0Ly8gZml0cyBpbiB0aGlzIGNvbGxlY3Rpb24sIHRvZG86IGdldCB0aGUgb2xkIGNvbGxlY3Rpb24gaXQgYmVsb25nZWQgdG9cclxuXHRcdFx0XHRjb2xsZWN0aW9uLm1vdmVJdGVtcyhpdGVtRW50cmllcywgbnVsbCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdC8vIG1heWJlIGZpdHNcclxuXHRcdFx0XHQvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXHJcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoYW5ndWxhci5pZGVudGl0eSwgZmFsc2UsIGZhbHNlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGlkcykge1xyXG5cdFx0XHRcdC8vIG5vdCBmaXR0aW5nIGluIHRoaXMgY29sbGVjdGlvbiwgcmVtb3ZlIGl0ID9cclxuXHRcdFx0XHRjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGlkcywgbnVsbCwgbWVzc2FnZSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG4qL1xyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpRm9ybWF0dGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0JhdGNoU3RhdHVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXQnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1BZG1pbmlzdHJhdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVxdWVzdFNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0tleVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2tTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1V0aWwnO1xyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSkge1xyXG5cdFx0cmV0dXJuIG5ldyBBcGlSZXNwb25zZVByb2Nlc3Nvcih0aGlzLmFwaUZvcm1hdHRlciwgcmVzcG9uc2UpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXRjaFN0YXR1cyB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1c0ZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtSWQsIGdldFByb21pc2U6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUHJvbWlzZTxJdGVtRW50cnk+KTogQmF0Y2hTdGF0dXMge1xyXG5cdFx0cmV0dXJuIG5ldyBCYXRjaFN0YXR1cyhcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0Z2V0SXRlbUlkLFxyXG5cdFx0XHRnZXRQcm9taXNlXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10pOiBDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzQ29tcGlsYXRpb24oXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0c2luZ2xlSXRlbXMsXHJcblx0XHRcdGNvbGxlY3Rpb25zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0SXRlbUhhbmRsZXJcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCk6IENoYW5nZXNQcm9jZXNzb3Ige1xyXG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzUHJvY2Vzc29yKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2VcclxuXHRcdCk7XHJcblx0fVxyXG5cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCkge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXHJcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCBJdGVtRW50cnlTZXJ2aWNlLCBJdGVtUmVxdWVzdFNlcnZpY2UsIEtleVNlcnZpY2UsIFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4uL21vZGVscy8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucyk6IENvbGxlY3Rpb25FbnRyeSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeShcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25NYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCBjYWxsT25BY3RpdmF0ZTogYm9vbGVhbikge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbk1hdGNoZXIoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGVzLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSwgSXRlbUhhbmRsZXIsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnksIEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSwgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lZGl0Q29sbGVjdGlvbilcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRWRpdFJlc291cmNlKFxyXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcclxuXHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uVmlld1Jlc291cmNlKHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgcmVxdWVzdENvbHVtbnM6IGFueSB8IGJvb2xlYW4sIHJlc3BvbnNlQ29sdW1uczogYW55KSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbHVtbkV4cGFuc2lvbihcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm9GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIHBhcmVudDogQ29sdW1uSW5mbykge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5JbmZvKGFwaUNvbHVtbiwgcGFyZW50KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uSGFuZGxlciwgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0U3R1YiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0KFxyXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcclxuXHRcdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXHJcblx0XHRlbmFibGVDYWNoaW5nPyxcclxuXHRcdGluY2x1ZGVJZENvbHVtbj9cclxuXHQpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS5yZXNvbHZlKHJlc3BvbnNlQ29sdW1ucywgZW5hYmxlQ2FjaGluZywgaW5jbHVkZUlkQ29sdW1uKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkhhbmRsZXIsIENyZWF0ZVJlcXVlc3QsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdEZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChjb21waWxhdGlvbiwgY29sbGVjdGlvbkVudHJpZXMsIHBhcmFtZXRlck1hcCwgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2UpIHtcclxuXHRcdHJldHVybiBuZXcgQ3JlYXRlUmVxdWVzdChcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0Y29tcGlsYXRpb24sXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxyXG5cdFx0XHRwYXJhbWV0ZXJNYXAsXHJcblx0XHRcdGJyZWFrdXBCeVBhcmVudFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpOiBJdGVtQ2FjaGUge1xyXG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2x1bW5TZXQsIEl0ZW1FbnRyeVNlcnZpY2UsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEF1dGhJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2V9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBjb2x1bW5TZXRTdHViKSB7XHJcblx0XHRyZXR1cm4gbmV3IEl0ZW1FbnRyeShcclxuXHRcdFx0dGhpcy5wcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLmF1dGhJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMsXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0Y29sdW1uU2V0U3R1YlxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdExvY2FsTGlua2VkIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGxvY2FsSXRlbUlkOiBJdGVtSWQsXHJcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxyXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXHJcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgbG9jYWxJdGVtSWQsIGNvbHVtblNldCk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnByb2Nlc3NMb2NhbChpbml0aWFsLCB7fSwge30sIGNvbnZlcnNpb25NYXApO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0TG9jYWwgKFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHR0ZW1wbGF0ZTogYW55LFxyXG5cdFx0bW9kaWZpZWQ6IEZpZWxkTWFwLFxyXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXHJcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGwsXHJcblx0XHRjb252ZXJzaW9uTWFwPyxcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0ZW1wbGF0ZS5jb2x1bW5zLml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29udmVyc2lvbk1hcCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCwgLy8gaW5pdGlhbC5pZCAod2hlbiBpbml0aWFsIGlzIG5vdCBhIHRlbXBsYXRlKVxyXG5cdFx0XHR0ZW1wbGF0ZS5jb2x1bW5zLFxyXG5cdFx0KTtcclxuXHJcblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucHJvY2Vzc0xvY2FsKHRlbXBsYXRlLmZpZWxkcywgbW9kaWZpZWQsIGRlcml2ZWQsIGNvbnZlcnNpb25NYXApO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0RGVmZXJyZWQgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXHJcblx0XHRkZWZlclJlcXVlc3Q6IGJvb2xlYW5cclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5U3R1YiA9IHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHJcblx0XHRpdGVtRW50cnlTdHViLmRlZmVyKGRlZmVyUmVxdWVzdCk7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVN0dWI7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcclxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxyXG5cdFx0Y29sdW1uSW5mbzogQ29sdW1uU2V0XHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCwgLy8gaW5pdGlhbC5pZCAod2hlbiBpbml0aWFsIGlzIG5vdCBhIHRlbXBsYXRlKVxyXG5cdFx0XHRjb2x1bW5JbmZvLFxyXG5cdFx0KS5wcm9jZXNzKFxyXG5cdFx0XHRpbml0aWFsLCAvLyBjYW4gYWxzbyBiZSBhIHRlbXBsYXRlXHJcblx0XHRcdGRlcml2ZWQsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENoYW5nZXNQcm9jZXNzb3IsIEl0ZW1SZXNvdXJjZVNlcnZpY2UsIExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFZGl0UmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3NvcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRnZXRDb25zdHJ1Y3RvciAob3B0aW9ucykge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0aWYgKG9wdGlvbnMuZWRpdCkge1xyXG5cdFx0XHRcdHJldHVybiBuZXcgRWRpdFJlc291cmNlKFxyXG5cdFx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsIHRoaXMubG9ja1NlcnZpY2UsIHRoaXMuY2hhbmdlc1Byb2Nlc3NvciwgdGhpcy5lcnJvckhhbmRsZXIsIHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdFx0XHRpdGVtRW50cnksIG9wdGlvbnNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiBuZXcgVmlld1Jlc291cmNlKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogSXRlbVJlc291cmNlIHtcclxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMuZWRpdCkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEVkaXRSZXNvdXJjZShcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxyXG5cdFx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvcixcclxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSwgb3B0aW9uc1xyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWaWV3UmVzb3VyY2UoXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdExvY2FsQ2FjaGUsXHJcblx0TG9ja1NlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0SXRlbUNhY2hlRmFjdG9yeSxcclxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaWQ/OiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxyXG5cdFx0XHRpZFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdCAocm9vdEl0ZW06IEl0ZW1FbnRyeSwgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKSB7XHJcblx0XHRyZXR1cm4gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbihyb290SXRlbSwgc2luZ2xlSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGUpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIFF1ZXJ5TWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXJGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogUXVlcnlNYXRjaGVyIHtcclxuXHRcdHJldHVybiBuZXcgUXVlcnlNYXRjaGVyKFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGZpZWxkcyxcclxuXHRcdFx0cGFyZW50XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBRdWVyeVBhcnNlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChxdWVyeSwgcGFyYW1ldGVycz8pOiBRdWVyeVBhcnNlciB7XHJcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5UGFyc2VyKHF1ZXJ5LCBwYXJhbWV0ZXJzKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKSB7XHJcblx0XHRyZXR1cm4gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24oXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0JhdGNoU3RhdHVzRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mb0ZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldEZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3RGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XHJcbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0QXBpUmVxdWVzdFNlcnZpY2UsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRDb2x1bW5DYWNoZSxcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uVXRpbCxcblx0SXRlbUFkbWluaXN0cmF0b3IsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2tTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2UsXG5cdFNvY2tldE1lc3NhZ2VIYW5kbGVyXG59IGZyb20gJy4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnksXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q29sdW1uSW5mb0ZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRMb2NhbENhY2hlRmFjdG9yeSxcblx0TW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0UXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0UXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxufSBmcm9tICcuL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgUm1Db3JlIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXG5cdGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyO1xuXHRrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlO1xuXHRxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZTtcblx0Y29sdW1uVXRpbDogQ29sdW1uVXRpbDtcblxuXHRhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTtcblxuXHRpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlO1xuXHRpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlO1xuXG5cdGl0ZW1BZG1pbmlzdHJhdG9yOiBJdGVtQWRtaW5pc3RyYXRvcjtcblx0aXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2U7XG5cdGNvbHVtbkNhY2hlOiBDb2x1bW5DYWNoZTtcblx0Y29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcjtcblxuXHRpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5O1xuXHRjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5O1xuXHRjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5O1xuXHRjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTtcblxuXHRpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXI7XG5cdGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcblx0bG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5O1xuXG5cdHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnk7XG5cdGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3Rvcnk7XG5cdHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0Y2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTtcblx0Y2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5O1xuXHRjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5O1xuXHRjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnk7XG5cdGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeTtcblx0aXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeTtcblx0bG9jYWxDYWNoZUZhY3Rvcnk6IExvY2FsQ2FjaGVGYWN0b3J5O1xuXHRtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeTtcblx0YmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3Rvcnk7XG5cdHNvY2tldE1lc3NhZ2VIYW5kbGVyOiBTb2NrZXRNZXNzYWdlSGFuZGxlcjtcblxuXHRhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2U7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdGVycm9ySGFuZGxlckludGVyZmFjZTogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdFx0dGhpcy52ZXJzaW9uID0gJzEuMS44LTMnO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5rZXlTZXJ2aWNlID0gbmV3IEtleVNlcnZpY2UoKTtcblx0XHR0aGlzLnF1ZXJ5U2VydmljZSA9IG5ldyBRdWVyeVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xuXG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblxuXHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UgPSBuZXcgQXBpUmVxdWVzdFNlcnZpY2UoZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZSwgdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UodGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UgPSBuZXcgSXRlbVJlc291cmNlU2VydmljZSgpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5ID0gbmV3IEl0ZW1DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSA9IG5ldyBCYXRjaFN0YXR1c0ZhY3RvcnkocHJvbWlzZUludGVyZmFjZSk7XG5cblx0XHR0aGlzLmNvbHVtbkNhY2hlID0gbmV3IENvbHVtbkNhY2hlKHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5IYW5kbGVyID0gbmV3IENvbHVtbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSA9IG5ldyBDb2x1bW5JbmZvRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcblx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeShcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIgPSBuZXcgSXRlbUhhbmRsZXIodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UgPSBuZXcgSXRlbVJlcXVlc3RTZXJ2aWNlKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IG5ldyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlKHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLnF1ZXJ5U2VydmljZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkgPSBuZXcgQ3JlYXRlUmVxdWVzdEZhY3RvcnkoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSh0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkpO1xuXHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgPSBuZXcgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkoKTtcblxuXHRcdHRoaXMuaXRlbUFkbWluaXN0cmF0b3IgPSBuZXcgSXRlbUFkbWluaXN0cmF0b3IoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMubG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0XHRsb2NhbENhY2hlTWFuYWdlcixcblx0XHRcdHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2Vcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wICgpIHtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5ICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL21haW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==
6996
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQWRtaW5pc3RyYXRvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7OztBQ2xGQSxnRDs7Ozs7Ozs7Ozs7OztBQ0FNLHNCQUF3QixNQUFNLEVBQUUsUUFBUTtJQUM3QyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFFakIsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRWxCLEdBQUcsQ0FBQyxDQUFDLElBQU0sR0FB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QixFQUMzQixJQUFJLENBQUMsNkJBQTZCLEVBQ2xDLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHFCQUFxQixDQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNGLGFBQUM7QUFBRCxDQUFDOztBQUVLO0FBQ04sQ0FBQztBQUVLLGtCQUFvQixLQUFLO0lBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDZCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDblNzQjtBQUNLO0FBQ0g7QUFFQztBQUNFIiwiZmlsZSI6InJtLWNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibW9tZW50XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJtQ29yZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUm1Db3JlXCJdID0gZmFjdG9yeShyb290W1wibW9tZW50XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX187IiwiZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dNZXJnZSAob2JqZWN0LCBkZWZhdWx0cykge1xyXG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcclxuXHRcdHJldHVybiBkZWZhdWx0cztcclxuXHJcblx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XHJcblx0XHRyZXN1bHRba2V5XSA9IG9iamVjdFtrZXldID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRkZWZhdWx0c1trZXldIDogb2JqZWN0W2tleV07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydGllcyAob2JqZWN0KSB7XHJcblx0Ly8gQHRzLWlnbm9yZVxyXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcclxuXHRpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxyXG5cdFx0cmV0dXJuIGtleTtcclxuXHJcblx0cmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbkFycmF5IChuZWVkbGUsIGhheXN0YWNrKSB7XHJcblx0Zm9yIChjb25zdCBoYXkgb2YgaGF5c3RhY2spIHtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRpZiAobmVlZGxlID09IGhheSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheTxUPiAoc291cmNlOiBUW10sIGNhbGxiYWNrOiAoVCkgPT4gYm9vbGVhbikge1xyXG5cdGNvbnN0IGZpbHRlcmVkOiBUW10gPSBbXTtcclxuXHJcblx0Zm9yIChjb25zdCBzcmMgb2Ygc291cmNlKSB7XHJcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcclxuXHRcdFx0ZmlsdGVyZWQucHVzaChzcmMpO1xyXG5cdH1cclxuXHJcblx0aWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gc291cmNlLmxlbmd0aClcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0ZW1wdHlBcnJheShzb3VyY2UpO1xyXG5cclxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcclxuXHRcdHNvdXJjZS5wdXNoKGZpbHRlcik7XHJcblxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpIHtcclxuXHRhcnJheS5zcGxpY2UoMCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXRoRXhpc3RzIChzb3VyY2UsIHBhdGgpIHtcclxuXHRpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XHJcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdCwgcGF0aCwgZGVmYXVsdHMpIHtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IHZhbHVlID0gcGF0aFtpXTtcclxuXHJcblx0XHRpZiAob2JqZWN0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvYmplY3RbdmFsdWVdID0gZGVmYXVsdHNbaV07XHJcblxyXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3ZhbHVlXTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBvYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoIChvYmplY3QsIHBhdGgsIGNyZWF0ZSA9IGZhbHNlKSB7XHJcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcclxuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxyXG5cclxuXHRcdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCAmJiAhY3JlYXRlKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlMsIGFkZGVkIGNvbW1lbnRzIHRvIGlnbm9yZSBUeXBlU2NyaXB0IGVycm9yc1xyXG5mdW5jdGlvbiBiYXNlRXh0ZW5kIChkc3QsIG9ianMsIGRlZXApIHtcclxuXHRmb3IgKGxldCBpID0gMCwgaWkgPSBvYmpzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuXHRcdGNvbnN0IG9iaiA9IG9ianNbaV07XHJcblxyXG5cdFx0aWYgKCFpc09iamVjdChvYmopICYmICFpc0Z1bmN0aW9uKG9iaikpXHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG5cclxuXHRcdGZvciAobGV0IGogPSAwLCBqaiA9IGtleXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2pdO1xyXG5cdFx0XHRjb25zdCBzcmMgPSBvYmpba2V5XTtcclxuXHJcblx0XHRcdGlmIChkZWVwICYmIGlzT2JqZWN0KHNyYykpIHtcclxuXHRcdFx0XHRpZiAoaXNEYXRlKHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IERhdGUoc3JjLnZhbHVlT2YoKSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChzcmMpKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBSZWdFeHAoc3JjKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHNyYy5ub2RlTmFtZSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmVOb2RlKHRydWUpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbGVtZW50KHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lKCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmICghaXNPYmplY3QoZHN0W2tleV0pKVxyXG5cdFx0XHRcdFx0XHRkc3Rba2V5XSA9IGlzQXJyYXkoc3JjKSA/IFtdIDoge307XHJcblxyXG5cdFx0XHRcdFx0YmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkc3Rba2V5XSA9IHNyYztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGRzdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAoZHN0LCAuLi5hcmdzKSB7XHJcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCBmYWxzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAoZHN0LCAuLi5hcmdzKSB7XHJcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCB0cnVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0ICh2YWx1ZSkge1xyXG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL2lzb2JqZWN0NFxyXG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua09iamVjdCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlZ0V4cCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudCAobm9kZSkge1xyXG5cdHJldHVybiAhIShub2RlICYmXHJcblx0XHQoXHJcblx0XHRcdG5vZGUubm9kZU5hbWUgIC8vIFdlIGFyZSBhIGRpcmVjdCBlbGVtZW50LlxyXG5cdFx0XHR8fCAobm9kZS5wcm9wICYmIG5vZGUuYXR0ciAmJiBub2RlLmZpbmQpXHJcblx0XHQpXHJcblx0KTsgIC8vIFdlIGhhdmUgYW4gb24gYW5kIGZpbmQgbWV0aG9kIHBhcnQgb2YgalF1ZXJ5IEFQSS5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93IChvYmopIHtcclxuXHRyZXR1cm4gb2JqICYmIG9iai53aW5kb3cgPT09IG9iajtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyAobzEsIG8yKSB7XHJcblx0aWYgKG8xID09PSBvMilcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcclxuXHRpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMilcclxuXHRcdHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxyXG5cclxuXHRjb25zdCB0MSA9IHR5cGVvZiBvMTtcclxuXHRjb25zdCB0MiA9IHR5cGVvZiBvMjtcclxuXHJcblx0bGV0IGxlbmd0aDtcclxuXHRsZXQga2V5O1xyXG5cdGxldCBrZXlTZXQ7XHJcblxyXG5cdGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XHJcblx0XHRpZiAoaXNBcnJheShvMSkpIHtcclxuXHRcdFx0aWYgKCFpc0FycmF5KG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRsZW5ndGggPSBvMS5sZW5ndGg7XHJcblxyXG5cdFx0XHRpZiAobzEubGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcclxuXHRcdFx0XHRmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcclxuXHRcdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChpc0RhdGUobzEpKSB7XHJcblx0XHRcdGlmICghaXNEYXRlKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gc2ltcGxlQ29tcGFyZShvMS5nZXRUaW1lKCksIG8yLmdldFRpbWUoKSk7XHJcblx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzUmVnRXhwKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gbzEudG9TdHJpbmcoKSA9PT0gbzIudG9TdHJpbmcoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChpc1dpbmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8IGlzQXJyYXkobzIpIHx8IGlzRGF0ZShvMikgfHwgaXNSZWdFeHAobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGtleVNldCA9IGNyZWF0ZU1hcCgpO1xyXG5cdFx0XHRmb3IgKGtleSBpbiBvMSkge1xyXG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKG8xW2tleV0pKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0XHRrZXlTZXRba2V5XSA9IHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoa2V5IGluIG8yKSB7XHJcblx0XHRcdFx0aWYgKCEoa2V5IGluIGtleVNldCkgJiYgaXNEZWZpbmVkKG8yW2tleV0pICYmICFpc0Z1bmN0aW9uKG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTWFwICgpIHtcclxuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxufVxyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxyXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJlIChhLCBiKSB7XHJcblx0cmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYgYiAhPT0gYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRPYmplY3RNYXhEZXB0aCAobWF4RGVwdGgpIHtcclxuXHRyZXR1cm4gaXNOdW1iZXIobWF4RGVwdGgpICYmIG1heERlcHRoID4gMDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHNvdXJjZSwgZGVzdGluYXRpb24/LCBtYXhEZXB0aD8pIHtcclxuXHRjb25zdCBzdGFja1NvdXJjZSA9IFtdO1xyXG5cdGNvbnN0IHN0YWNrRGVzdCA9IFtdO1xyXG5cclxuXHRtYXhEZXB0aCA9IGlzVmFsaWRPYmplY3RNYXhEZXB0aChtYXhEZXB0aCkgPyBtYXhEZXB0aCA6IE5hTjtcclxuXHJcblx0aWYgKGRlc3RpbmF0aW9uKSB7XHJcblx0XHRpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVtcHR5IHRoZSBkZXN0aW5hdGlvbiBvYmplY3RcclxuXHRcdGlmIChpc0FycmF5KGRlc3RpbmF0aW9uKSkge1xyXG5cdFx0XHRkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gZGVzdGluYXRpb24pXHJcblx0XHRcdFx0ZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tEZXN0LnB1c2goZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlSZWN1cnNlIChfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aCkge1xyXG5cdFx0X21heERlcHRoLS07XHJcblxyXG5cdFx0aWYgKF9tYXhEZXB0aCA8IDApXHJcblx0XHRcdHJldHVybiAnLi4uJztcclxuXHJcblx0XHRpZiAoaXNBcnJheShfc291cmNlKSkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuXHRcdFx0XHRfZGVzdGluYXRpb24ucHVzaChjb3B5RWxlbWVudChfc291cmNlW2ldLCBfbWF4RGVwdGgpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XHJcblx0XHRcdC8vIGNyZWF0ZU1hcCgpIGZhc3QgcGF0aCAtLS0gU2FmZSB0byBhdm9pZCBoYXNPd25Qcm9wZXJ0eSBjaGVjayBiZWNhdXNlIHByb3RvdHlwZSBjaGFpbiBpcyBlbXB0eVxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoX3NvdXJjZSAmJiB0eXBlb2YgX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0aWYgKF9zb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBTbG93ZXN0IHBhdGggLS0tIGhhc093blByb3BlcnR5IGNhbid0IGJlIGNhbGxlZCBhcyBhIG1ldGhvZFxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XHJcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcclxuXHRcdC8vIFNpbXBsZSB2YWx1ZXNcclxuXHRcdGlmICghaXNPYmplY3QoX3NvdXJjZSkpXHJcblx0XHRcdHJldHVybiBfc291cmNlO1xyXG5cclxuXHRcdC8vIEFscmVhZHkgY29waWVkIHZhbHVlc1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Y29uc3QgaW5kZXggPSBzdGFja1NvdXJjZS5pbmRleE9mKF9zb3VyY2UpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdHJldHVybiBzdGFja0Rlc3RbaW5kZXhdO1xyXG5cclxuXHRcdGlmIChpc1dpbmRvdyhfc291cmNlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgTWFraW5nIGNvcGllcyBvZiBXaW5kb3cgaW5zdGFuY2VzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG5lZWRzUmVjdXJzZSA9IGZhbHNlO1xyXG5cdFx0bGV0IF9kZXN0aW5hdGlvbiA9IGNvcHlUeXBlKF9zb3VyY2UpO1xyXG5cclxuXHRcdGlmIChfZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRfZGVzdGluYXRpb24gPSBpc0FycmF5KF9zb3VyY2UpID8gW10gOiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfc291cmNlKSk7XHJcblx0XHRcdG5lZWRzUmVjdXJzZSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tTb3VyY2UucHVzaChfc291cmNlKTtcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0cmV0dXJuIG5lZWRzUmVjdXJzZVxyXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxyXG5cdFx0XHQ6IF9kZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlUeXBlIChfc291cmNlKSB7XHJcblx0XHRzd2l0Y2ggKHRvU3RyaW5nLmNhbGwoX3NvdXJjZSkpIHtcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQxNkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MzJBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQxNkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDMyQXJyYXldJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXHJcblx0XHRcdFx0aWYgKCFfc291cmNlLnNsaWNlKSB7XHJcblx0XHRcdFx0XHQvLyBJZiB3ZSdyZSBpbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgZW52aXJvbm1lbnQgc3VwcG9ydHMgQXJyYXlCdWZmZXJcclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXHJcblx0XHRcdFx0XHRjb25zdCBjb3BpZWQgPSBuZXcgQXJyYXlCdWZmZXIoX3NvdXJjZS5ieXRlTGVuZ3RoKTtcclxuXHRcdFx0XHRcdG5ldyBVaW50OEFycmF5KGNvcGllZCkuc2V0KG5ldyBVaW50OEFycmF5KF9zb3VyY2UpKTtcclxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHRcdFx0XHRcdHJldHVybiBjb3BpZWQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBCb29sZWFuXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxyXG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xyXG5cclxuXHRcdFx0XHRyZS5sYXN0SW5kZXggPSBfc291cmNlLmxhc3RJbmRleDtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKFtfc291cmNlXSwge3R5cGU6IF9zb3VyY2UudHlwZX0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc0Z1bmN0aW9uKF9zb3VyY2UuY2xvbmVOb2RlKSkge1xyXG5cdFx0XHRyZXR1cm4gX3NvdXJjZS5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlGb3JtYXR0ZXIge1xyXG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XHJcblx0U0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREW1RdSEg6bW06c3NaJztcclxuXHRTRVJWRVJfVElNRV9GT1JNQVQgPSAnSEg6bW06c3MnO1xyXG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcclxuXHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHMsIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0ZmllbGRzW2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW4ucGF0aF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQsIGV4cGFuZGVkLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGN1cnJlbnRbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZXhwYW5kZWRbY29sdW1uLnBhdGhdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBtb2RpZmllZFtjb2x1bW5JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRoYXNDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2hhbmdlcyAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogb2JqZWN0W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSkge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogaW5pdGlhbFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdGNvbHVtbjogY29sdW1uLmFwaUNvbHVtblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29weUZpZWxkcyAoc291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XHJcblxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBzb3VyY2VbY29sdW1uUGF0aF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdHNoYWxsb3dDb3B5RmllbGRzIChzaGFsbG93U291cmNlLCBkZWVwU291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XHJcblxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0c2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSA6XHJcblx0XHRcdFx0dGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGRlZXBTb3VyY2VbY29sdW1uUGF0aF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdHNldERlZmF1bHRWYWx1ZXMgKGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbi5pZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVGaWVsZHMgKGNvbHVtblR5cGUsIGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gc2Vjb25kID09PSB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKHNlY29uZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVNb21lbnRPYmplY3RzKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUR1cmF0aW9ucyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnaWQnOiAvLyBpZCB0eXBlc1xyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT0gc2Vjb25kOyAvLyB1c2Ugbm9uLXN0cmljdCBjb21wYXJpc29uXHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAncG93ZXInOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVGbG9hdHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcclxuXHRcdFx0Y2FzZSAnYm9vbCc6IC8vIGJvb2xlYW4gdHlwZXNcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzogLy8gc3RyaW5nIHR5cGVzXHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PT0gc2Vjb25kO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBlcXVhbHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb21wYXJlRmxvYXRzIChhLCBiKSB7XHJcblx0XHRjb25zdCBhYnNBID0gTWF0aC5hYnMoYSk7XHJcblx0XHRjb25zdCBhYnNCID0gTWF0aC5hYnMoYik7XHJcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xyXG5cclxuXHRcdGNvbnN0IEVQU0lMT04gPSAxLjE5ZS0wNztcclxuXHJcblx0XHQvLyBzaG9ydGN1dCwgaGFuZGxlcyBpbmZpbml0aWVzXHJcblx0XHRpZiAoYSA9PT0gYikge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSBpZiAoYSA9PT0gMCB8fCBiID09PSAwIHx8IGRpZmYgPCBOdW1iZXIuTUlOX1ZBTFVFKSB7XHJcblx0XHRcdC8vIGEgb3IgYiBpcyB6ZXJvIG9yIGJvdGggYXJlIGV4dHJlbWVseSBjbG9zZSB0byBpdFxyXG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxyXG5cdFx0XHRyZXR1cm4gZGlmZiA8IChFUFNJTE9OICogTnVtYmVyLk1JTl9WQUxVRSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3JcclxuXHRcdFx0cmV0dXJuIGRpZmYgLyBNYXRoLm1pbigoYWJzQSArIGFic0IpLCBOdW1iZXIuTUFYX1ZBTFVFKSA8IEVQU0lMT047XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb21wYXJlTW9tZW50T2JqZWN0cyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXHJcblx0XHRcdHJldHVybiAhc2Vjb25kLmlzVmFsaWQoKTtcclxuXHJcblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXHJcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gZmlyc3QgSVMgdmFsaWRcclxuXHJcblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XHJcblx0fVxyXG5cclxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRyZXR1cm4gZmlyc3QuYXNNaWxsaXNlY29uZHMoKSA9PT0gc2Vjb25kLmFzTWlsbGlzZWNvbmRzKCk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZVZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEYXRlKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlQ29sb3IodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnJyA/IEpTT04ucGFyc2UodmFsdWUpIDogdmFsdWU7XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xyXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8gMTAwMDAwMDtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3RDb2xvcih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZURhdGUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlID09PSBudWxsID8gMCA6IHZhbHVlLCAnc2Vjb25kcycpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VDb2xvciAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlIDogJyMnICsgdmFsdWU7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RGF0ZVRpbWUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVfRk9STUFUKSA6IG51bGw7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RHVyYXRpb24gKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuYXNTZWNvbmRzKCk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0Q29sb3IgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldERlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0XHRyZXR1cm4gJzAnO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmludmFsaWQoKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gJyMwMDAwMDAnO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGVtYWlsXHJcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGh0bWxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGpzb25cclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSkpO1xyXG5cdH1cclxuXHJcblx0Y2xvbmUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0XHRyZXR1cm4gY29weSh2YWx1ZSk7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q2xvbmVGdW5jdGlvbiAoY29sdW1uVHlwZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRGF0ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNsb25lRHVyYXRpb24gKGR1cmF0aW9uKSB7XHJcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKGR1cmF0aW9uKTtcclxuXHR9XHJcblxyXG5cdGNsb25lRGF0ZSAoZGF0ZSkge1xyXG5cdFx0cmV0dXJuIGRhdGUuY2xvbmUoKTtcclxuXHR9XHJcblxyXG5cdGlkZW50aXR5IChpbnB1dCkge1xyXG5cdFx0cmV0dXJuIGlucHV0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHRlbXBsYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIHBhcmFtczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogSXRlbVR5cGUsIHBhcmVudElkPzogSXRlbUlkKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoaXRlbVR5cGUsIGl0ZW1JZCwgdmFsdWVzLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGl0ZW1JZHMpKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1zOiBvYmplY3QsIGNvbHVtbnM6IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMsIHJlcXVlc3RDYW5jZWxlcikpO1xyXG5cdH1cclxuXHJcblx0bW92ZUl0ZW1zIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbXM6IG9iamVjdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtcykpO1xyXG5cdH1cclxuXHJcblx0Y29sdW1ucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5zOiBvYmplY3QsIHBhcmFtcz86IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRxdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogb2JqZWN0LCBjb2x1bW5zOiBvYmplY3QsIGxpbWl0Pzogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMsIGxpbWl0KSk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzUmVzcG9uc2UgKHJlcXVlc3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gcmVxdWVzdC50aGVuKHJlc3BvbnNlID0+IHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZSkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbVR5cGVNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yIHtcclxuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcclxuXHRpdGVtczogSXRlbVR5cGVNYXA7XHJcblx0bGlua3M6IEl0ZW1UeXBlTWFwO1xyXG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcclxuXHRtYXA6IGFueTtcclxuXHJcblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xyXG5cdGNvbHVtbk1hcDogYW55ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyByZXNwb25zZTogYW55XHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSByZXNwb25zZS5jb2x1bW5zO1xyXG5cdFx0dGhpcy5pdGVtcyA9IHJlc3BvbnNlLml0ZW1zO1xyXG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xyXG5cdFx0dGhpcy5jYWNoZWFibGUgPSByZXNwb25zZS5jYWNoZWFibGU7XHJcblx0XHR0aGlzLm1hcCA9IHJlc3BvbnNlLm1hcDtcclxuXHJcblx0XHR0aGlzLmNyZWF0ZUNvbHVtbk1hcHMoKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbHVtbk1hcHMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5UeXBlIGluIHRoaXMuY29sdW1ucykge1xyXG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XHJcblx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXVtpXTtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBpO1xyXG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZldGNoVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbklkKSB7XHJcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcclxuXHR9XHJcblxyXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKFxyXG5cdFx0XHRcdHRoaXMuZmV0Y2hWYWx1ZShpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW4uaWQpLFxyXG5cdFx0XHRcdGNvbHVtbixcclxuXHRcdFx0XHRyZXN1bHRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hEZXJpdmVkVmFsdWVzICh2YWx1ZSwgY29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcclxuXHRcdFx0bGV0IGNoaWxkVmFsdWU7XHJcblxyXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcclxuXHRcdFx0XHRjaGlsZFZhbHVlID0gbnVsbDtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjaGlsZENvbHVtbi5hcGlDb2x1bW4udHlwZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IHRoaXMuZmV0Y2hWYWx1ZShjb2x1bW4uaXRlbVR5cGUsIHZhbHVlLCBjaGlsZENvbHVtbi5pZCk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSBjaGlsZFZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRDb2x1bW4uaXNMZWFmKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoY2hpbGRWYWx1ZSwgY2hpbGRDb2x1bW4sIGRlc3RpbmF0aW9uKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XHJcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRyZXN1bHRbdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXVtpXS5pZF0gPSBkYXRhW2ldO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbmNsdWRlTGlua3MpIHtcclxuXHRcdFx0Y29uc3QgbGlua3MgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmxpbmtzO1xyXG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBsaW5rVHlwZSBpbiBsaW5rcylcclxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxyXG5cdFx0XHRcdFx0dGhpcy5mZXRjaE9iamVjdEFycmF5KGxpbmtUeXBlLCBpbmNsdWRlTGlua3MsIGxpbmtzW2xpbmtUeXBlXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0QXJyYXkgKGl0ZW1UeXBlLCBpbmNsdWRlTGlua3MsIGlkQXJyYXkpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0gW107XHJcblxyXG5cdFx0aWYgKGlkQXJyYXkgPT09IG51bGwpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlkQXJyYXkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0TWFwIChpdGVtVHlwZSwgY29sdW1uSWQsIGluY2x1ZGVMaW5rcywgcmV0dXJuS2V5cykge1xyXG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XHJcblx0XHRjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbY29sdW1uSW5kZXhdO1xyXG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcclxuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCwgaW5jbHVkZUxpbmtzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmV0dXJuS2V5cylcclxuXHRcdFx0cmV0dXJuIHtyZXN1bHQ6IHJlc3VsdCwga2V5czoga2V5c307XHJcblx0XHRlbHNlXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaEZpZWxkTWFwIChpdGVtVHlwZSwgY29sdW1uSWQpIHtcclxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmVzdWx0W2lkXSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2luZGV4XTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5BcnJheSAoaXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgYXBpQ29sdW1uIG9mIHRoaXMuY29sdW1uc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJlc3VsdC5wdXNoKGFwaUNvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uT2JqZWN0IChpdGVtVHlwZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwW2l0ZW1UeXBlXTtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uc09iamVjdCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXA7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVSZXNvdXJjZSAoaXRlbVR5cGUsIGlkKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRvYmplY3Q6IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkKSxcclxuXHRcdFx0bGlua3M6IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5saW5rc1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGhhc0l0ZW1zIChpdGVtVHlwZSkge1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgZW51bSBFTlRSWV9TVEFUVVMge1xyXG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxyXG5cdFBST01JU0VEID0gJ3Byb21pc2VkJyxcclxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcclxuXHRQUk9NSVNFRF9FWFBBTkQgPSAncHJvbWlzZWQtZXhwYW5kJyxcclxuXHRSRVNPTFZFID0gJ3Jlc29sdmUnLFxyXG5cdExPQ0FMID0gJ2xvY2FsJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQUxMX1BFUk1JU1NJT05TID0gJzcnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTFVNTl9TRVBFUkFUT1IgPSAnPic7XHJcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19LRVlXT1JEOiBzdHJpbmcgPSAnbmV3LSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xyXG4iLCJpbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5U3RhdHVzLCBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzIHtcclxuXHRlbnRyaWVzOiBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtSWQsXHJcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBQcm9taXNlPEl0ZW1FbnRyeT4gLy8gdG9kbzogcHJvbWlzZSByZXR1cm4gdHlwZVxyXG5cdCkge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gRU5UUllfU1RBVFVTKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XHJcblx0fVxyXG5cclxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+KTogdm9pZCB7XHJcblx0XHRjb25zdCBzdGF0dXMgPSBlbnRyeVN0YXR1cy5zdGF0dXM7XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZW50cmllc1tzdGF0dXNdID0gW107XHJcblxyXG5cdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10ucHVzaChlbnRyeVN0YXR1cy5lbnRyeSk7XHJcblx0fVxyXG5cclxuXHRoYXNFbnRyaWVzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBib29sZWFuIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XHJcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGhhc1JlcXVlc3RzICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5SRVNPTFZFLCBFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSk7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoRW50cnkgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldFByb21pc2VzICgpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxJdGVtRW50cnk+PiA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcclxuXHRcdFx0ZW50cnkgPT4ge1xyXG5cdFx0XHRcdHByb21pc2VzLnB1c2godGhpcy5nZXRQcm9taXNlKGVudHJ5KSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKTtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RJZHMgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdLFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5nZXRJdGVtSWQoZW50cnkpKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QXJyYXkgKCk6IEl0ZW1FbnRyeVtdIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHN0YXR1c0VudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdGNvbXBpbGF0aW9uID0ge1xyXG5cdFx0Y3JlYXRlOiB7fSxcclxuXHRcdGRlbGV0ZToge30sXHJcblx0XHR1cGRhdGU6IHt9LFxyXG5cdFx0bW92ZToge31cclxuXHR9O1xyXG5cclxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cclxuXHRwcml2YXRlIG1vdmVBcnJheTogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRwcml2YXRlIGRlbGV0ZU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwdWJsaWMgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdXHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc1NpbmdsZUl0ZW1zKCk7XHJcblx0XHR0aGlzLnByb2Nlc3NDb2xsZWN0aW9ucyhjb2xsZWN0aW9uRW50cmllcyk7XHJcblx0XHR0aGlzLnBvc3RQcm9jZXNzKCk7XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0UGFyZW50ICgpOiBFbnRyeVBhcmVudCB7XHJcblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XHJcblx0fVxyXG5cclxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5tb3ZlQXJyYXkucHVzaChpdGVtRW50cnkpO1xyXG5cdH1cclxuXHJcblx0YWRkRGVsZXRlRW50cnkgKGl0ZW1FbnRyeSwgcGFyZW50SWQsIHBhcmVudFR5cGUpIHtcclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB7cGFyZW50SWQ6IHBhcmVudElkLCBpdGVtOiBpdGVtRW50cnksIHBhcmVudFR5cGU6IHBhcmVudFR5cGV9XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnkpIHtcclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuY29tcGlsYXRpb24udXBkYXRlLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCBpdGVtRW50cnldXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkQ3JlYXRlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0bGV0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XHJcblxyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi5jcmVhdGUsXHJcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwge30sIHt9LCBpdGVtRW50cnldXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cG9zdFByb2Nlc3MgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdFx0Y29uc3QgZGVsZXRlRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKGRlbGV0ZUVudHJ5ID09PSB1bmRlZmluZWQgfHwgZGVsZXRlRW50cnlbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Ly8gYXNzdW1lIHRoZSBpdGVtRW50cnkgaGFzIGEgcGFyZW50IChvciBzb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3JvbmcpXHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gY3JlYXRlUGF0aChcclxuXHRcdFx0XHR0aGlzLmNvbXBpbGF0aW9uLm1vdmUsXHJcblx0XHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZF0sXHJcblx0XHRcdFx0W3t9LCBbXV1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZGVsZXRlRW50cnlbaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRkZWxldGUgZGVsZXRlRW50cnlbaXRlbUlkXTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZGVsZXRlTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdW2l0ZW1JZF0uaXRlbTtcclxuXHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuY29tcGlsYXRpb24uZGVsZXRlO1xyXG5cclxuXHRcdFx0XHRpZiAoZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0ZGVzdGluYXRpb25baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzU2luZ2xlSXRlbXMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5zaW5nbGVJdGVtcykge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGl0ZW1FbnRyeSk7XHJcblx0XHRcdGVsc2UgaWYgKGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeShpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHQvLyBhZGQgdGhlIGNvbGxlY3Rpb24gcGFyZW50IGlkIHRvIHRoZSBkZWxldGUgZW50cnkgKGluIGNhc2UgdGhlIGl0ZW0gaGFzIGJlZW4gbW92ZWQpXHJcblx0XHRcdGxldCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcygpKSB7XHJcblx0XHRcdFx0bGV0IGFkZGVkSXRlbXM7XHJcblx0XHRcdFx0bGV0IHJlbW92ZWRJdGVtcztcclxuXHJcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpIHtcclxuXHRcdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuaXRlbXM7XHJcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRBZGRlZEl0ZW1zKCk7XHJcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7XHJcblx0XHRcdFx0XHRpZiAoYWRkZWRJdGVtLmlzTG9jYWwoKSlcclxuXHRcdFx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShhZGRlZEl0ZW0pO1xyXG5cdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHR0aGlzLmFkZE1vdmVFbnRyeShhZGRlZEl0ZW0pO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbSBvZiByZW1vdmVkSXRlbXMpXHJcblx0XHRcdFx0XHR0aGlzLmFkZERlbGV0ZUVudHJ5KHJlbW92ZWRJdGVtLCBwYXJlbnQuaXRlbUlkLCBwYXJlbnQuaXRlbVR5cGUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKCkpIHtcclxuXHRcdFx0XHRjb25zdCB1cGRhdGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1zKCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEl0ZW0gb2YgdXBkYXRlZEl0ZW1zKVxyXG5cdFx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeSh1cGRhdGVkSXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRBcGlGb3JtYXR0ZXIsXHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0Q29sdW1uSW5mbyxcclxuXHRJdGVtSGFuZGxlclxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgRW50cnlQYXJlbnQsIEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGgsIGhhc1Byb3BlcnRpZXMsIGluQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3Ige1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIHRoZSBkb2N1bWVudCBjcmVhdGlvbiBoYXMgYmVlbiB1cGRhdGVkXHJcblx0Z2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eSAoaXRlbVR5cGUpIHtcclxuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cnJlZ2VsYmVkcmFnJzpcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cnJlZ2VsJzpcclxuXHRcdFx0Y2FzZSAnTWluZmFjdHV1cic6XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRidWlsZE1vdmVSZXF1ZXN0IChjb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xyXG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRNYXBWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XHJcblx0XHRpZiAobWFwID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0ZXhlY3V0ZSAoc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zLCBicmVha3VwQnlQYXJlbnQgPSBmYWxzZSwgcGFyYW1ldGVycz8sIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz8pIHtcclxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0cyhcclxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpLFxyXG5cdFx0XHRwYXJhbWV0ZXJzLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnQsXHJcblx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzIChjaGFuZ2VzQ29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbiwgcGFyYW1ldGVycywgY29udmVyc2lvbk1hcCwgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RzID0gdGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbi5jcmVhdGUsXHJcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb2xsZWN0aW9ucyxcclxuXHRcdFx0cGFyYW1ldGVycyxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XHJcblx0XHQpLnJ1bigpO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VzOiBBcnJheTxQcm9taXNlPGFueT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKVxyXG5cdFx0XHRyZXNwb25zZXMucHVzaCh0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0KHJlcXVlc3QsIGNvbnZlcnNpb25NYXApLnRoZW4obm90aWZ5KSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3BvbnNlcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gbm90aWZ5IChyZXN1bHQpIHtcclxuXHRcdFx0aWYgKGlzRnVuY3Rpb24ob25BZnRlckNyZWF0ZUNhbGxiYWNrKSlcclxuXHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2soY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdCAocmVxdWVzdFJlc291cmNlLCBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocmVxdWVzdFJlc291cmNlLnJlcXVlc3QpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZU1hcCA9IHJlc3BvbnNlLm1hcDtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnNbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIHJlc3BvbnNlTWFwKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQ3JlYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQgPSBuZXdJdGVtSWQ7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoZmllbGRzKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHJcblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZU1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gcmVzcG9uc2VNYXBbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IHByaW9yaXRpemVkSXRlbVR5cGVzOiBzdHJpbmdbXVtdID0gW1tdLCBbXSwgW11dO1xyXG5cdFx0bGV0IHJlcXVlc3RDaGFpbiA9IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pXHJcblx0XHRcdHByaW9yaXRpemVkSXRlbVR5cGVzW3RoaXMuZ2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eShpdGVtVHlwZSldLnB1c2goaXRlbVR5cGUpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGVzIG9mIHByaW9yaXRpemVkSXRlbVR5cGVzKSB7XHJcblx0XHRcdGlmIChpdGVtVHlwZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0cmVxdWVzdENoYWluID0gcmVxdWVzdENoYWluLnRoZW4oXHJcblx0XHRcdFx0dGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoaXRlbVR5cGVzLCBjb21waWxhdGlvbiwgcGFyYW1ldGVycyksXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3RDaGFpbjtcclxuXHR9XHJcblxyXG5cdC8vIGNvbnN0cnVjdCBhIGNhbGxiYWNrIGZ1bmN0aW9uXHJcblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdHMgKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcclxuXHRcdHJldHVybiAoKSA9PiB7XHJcblx0XHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxyXG5cdFx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdLCBwYXJhbWV0ZXJzKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgcGFyYW1ldGVyTWFwKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0ge307XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcclxuXHJcblx0XHRyZXF1ZXN0W2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhlIGZvcm1hdFJlcXVlc3QgY2FsbCBoZXJlIChmaWVsZHMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQpXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHQvLyBSTUNvcmUgdG9kbzogdHlwZVxyXG5cdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdFtpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xyXG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aChwYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cclxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyA9IGNvbGxlY3Rpb25NYXRjaGVyLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMpXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChjb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCByZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucy5nZXQoKSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLmdldCgpLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1VwZGF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHRcdC5zZXREZXJpdmVkKHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KSlcclxuXHRcdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMpXHJcblx0XHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbikge1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3NhcnlcclxuXHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0pKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xyXG5cdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0aWRBcnJheS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaWRBcnJheSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRBcnJheSA9IHJlc3BvbnNlLml0ZW1zO1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignRGVsZXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKVxyXG5cdFx0XHRcdGV4ZWN1dGVNb3ZlUmVxdWVzdChwYXJlbnRUeXBlLCBwYXJlbnRJZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcclxuXHJcblx0XHRmdW5jdGlvbiBleGVjdXRlTW92ZVJlcXVlc3QgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XHJcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxyXG5cdFx0XHRjb25zdCBjb21waWxhdGlvbkVudHJpZXMgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF07XHJcblx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gc2VsZi5nZXRNYXBWYWx1ZShwYXJlbnRUeXBlLCBwYXJlbnRJZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKFxyXG5cdFx0XHRcdHNlbGYuYXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKFxyXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQgPyBuZXdQYXJlbnRJZCA6IHBhcmVudElkLFxyXG5cdFx0XHRcdFx0c2VsZi5idWlsZE1vdmVSZXF1ZXN0KGNvbXBpbGF0aW9uRW50cmllcylcclxuXHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHNlbGYucHJvY2Vzc01vdmVSZXNwb25zZSgvKiByZXNwb25zZSwgKi9jb21waWxhdGlvbkVudHJpZXMpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHNlbGYuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc01vdmVSZXNwb25zZSAoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHQvLyBUT0RPOiBwcm9jZXNzIHJlc3BvbnNlXHJcblxyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZW1vdmVDb2xsZWN0aW9uTWFwID0ge307XHJcblx0XHRjb25zdCBhZGRDb2xsZWN0aW9uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcclxuXHJcblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxyXG5cdFx0XHRcdHJlbW92ZUNvbGxlY3Rpb25NYXAsXHJcblx0XHRcdFx0Y29tcGlsYXRpb25FbnRyeS5wYXJlbnRJZCxcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXHJcblx0XHRcdFx0YWRkQ29sbGVjdGlvbk1hcCxcclxuXHRcdFx0XHQoPEVudHJ5UGFyZW50PiBpdGVtRW50cnkucGFyZW50KS5pdGVtSWQsXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24ocmVtb3ZlQ29sbGVjdGlvbk1hcCwgJ3JlbW92ZUl0ZW1zJyk7XHJcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKGFkZENvbGxlY3Rpb25NYXAsICdhZGRJdGVtcycpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnkgKGNvbGxlY3Rpb25NYXAsIHBhcmVudElkLCBpdGVtRW50cnksIHZhbHVlKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5LnBhcmVudC5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXHJcblx0XHRcdFt7fSwge30sIFtdXVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uIChjb2xsZWN0aW9uTWFwLCBtZXRob2QpIHtcclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXSkge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0pIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeVttZXRob2RdKFxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdHRydWVcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBub3RlOiB3aXRoIHRoZSBuZXcgaXRlbSBzdHJ1Y3R1cmUsICphbGwqIGxvY2FsIGl0ZW1zIGFyZSBpbiB0aGUgc2luZ2xlIGl0ZW0gY2FjaGVcclxuXHRwcml2YXRlIG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSkge1xyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHRcdFx0Y29uc3QgdXBkYXRlZENvbHVtbnM6IHtbY29sdW1uSWQ6IHN0cmluZ106IENvbHVtbkluZm99ID1cclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1Db2x1bW5zKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zKTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIWhhc1Byb3BlcnRpZXModXBkYXRlZENvbHVtbnMpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHVwZGF0ZWRDb2x1bW5zLmlkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXBbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc2luZ2xlSXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gcHJvcGVyIG9yZGVyOiBjcmVhdGUgLSBtb3ZlIC0gZGVsZXRlIC0gdXBkYXRlXHJcblx0cHJpdmF0ZSBleGVjdXRlUmVxdWVzdHMgKGNoYW5nZXNDb21waWxhdGlvbjogQ2hhbmdlc0NvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykge1xyXG5cdFx0Y29uc3QgY29tcGlsYXRpb24gPSBjaGFuZ2VzQ29tcGlsYXRpb24uY29tcGlsYXRpb247XHJcblx0XHRjb25zdCBzaW5nbGVJdGVtcyA9IGNoYW5nZXNDb21waWxhdGlvbi5zaW5nbGVJdGVtcztcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbGxlY3Rpb25zLnRvQXJyYXkoKTtcclxuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXAgPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdHMoY2hhbmdlc0NvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzLCBjb252ZXJzaW9uTWFwLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0cyhjb21waWxhdGlvbi5kZWxldGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyhjb21waWxhdGlvbi51cGRhdGUsIHBhcmFtZXRlcnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdFx0XHR9LCAvLyBpdGVtIGlkIGNvbnZlcnNpb24gbWFwXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5SXRlbVR5cGVNYXAsIENvbGxlY3Rpb25NYXRjaFJlc3VsdCwgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5lbnVtIENPTlNUQU5UUyB7XHJcblx0TUFZQkUgPSAnbWF5YmUnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGUge1xyXG5cdGVudHJpZXM6IENvbGxlY3Rpb25FbnRyeUl0ZW1UeXBlTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gZW50cnkpXHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCk6IGJvb2xlYW4ge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJ5KSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCBpbiB1c2VcclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRjYWxsYmFjayhlbnRyeSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0b0FycmF5ICgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRhZGQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoY29sbGVjdGlvbkVudHJ5PzogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdLmluZGV4T2YoY29sbGVjdGlvbkVudHJ5KTtcclxuXHJcblx0XHRpZiAoaW5kZXggPT09IC0xKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IHN0cmluZyk6IENvbGxlY3Rpb25FbnRyeVtdIHtcclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zbGljZSgpO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hQYXJlbnQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcclxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTogQ29sbGVjdGlvbkVudHJ5IHwgbnVsbCB7XHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50VHlwZSwgcGFyZW50SWQpKVxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXRSZXNvdXJjZUJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmdldEN1cnJlbnRSZXNvdXJjZSgpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXHJcblx0XHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9ubHkgcmVzb3VyY2VzXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIHtTdHJpbmd8SW50ZWdlcn0gaXRlbUlkXHJcblx0ICogQHJldHVybnMge09iamVjdH0gQXJyYXkgb2YgY29sbGVjdGlvbnMuXHJcblx0ICovXHJcblx0Z2V0QnlDb250YWluaW5nSXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmdldEl0ZW1CeUlkKGl0ZW1JZCkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbGxlY3Rpb25zIHRoZSBpdGVtICdiZWxvbmdzJyBpbi5cclxuXHQgKi9cclxuXHRnZXRCeUZpdHRpbmdJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25NYXRjaFJlc3VsdCA9IHtmaXR0aW5nOiBbXSwgbm90Zml0dGluZzogW10sIG1heWJlOiBbXX07XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHQvLyBjb25zb2xlLnRpbWUoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcclxuXHJcblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBmaWVsZHMsIHBhcmVudCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRjb25zdCBtYXRjaFJlc3VsdCA9IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpO1xyXG5cclxuXHRcdFx0Ly8gVE9ETzogbWF5YmU/XHJcblx0XHRcdGlmIChtYXRjaFJlc3VsdCA9PT0gdHJ1ZSkgLy8gbWlnaHQgYWxzbyByZXR1cm4gJ21heWJlJ1xyXG5cdFx0XHRcdHJlc3VsdC5maXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAobWF0Y2hSZXN1bHQgPT09IENPTlNUQU5UUy5NQVlCRSlcclxuXHRcdFx0XHRyZXN1bHQubWF5YmUucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0cmVzdWx0Lm5vdGZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGNvbnNvbGUudGltZUVuZCgnZ2V0QnlGaXR0aW5nSXRlbScpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRCeVF1ZXJ5IChpdGVtVHlwZSwgcXVlcnkpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlLZXkgKGl0ZW1UeXBlLCBlbnRyeUtleSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGlmIChlbnRyeS5vcHRpb25zLmVudHJ5S2V5ID09PSBlbnRyeUtleSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlc291cmNlQnlLZXkgKGl0ZW1UeXBlLCByZXNvdXJjZUtleSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZW50cnkucmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0aWYgKHJlc291cmNlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLnJlc291cmNlS2V5ID09PSByZXNvdXJjZUtleSlcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKHJlc291cmNlKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeVBhcnNlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeVNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXHJcblx0Y2xvbmVPcHRpb25zIChvcHRpb25zLCBwYXJlbnQpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7IC8vIGRvZXMgYSBzaGFsbG93IGNvcHlcclxuXHJcblx0XHRyZXN1bHQucXVlcnlQYXJhbXMgPSB0aGlzLmNsb25lUXVlcnlQYXJhbXMob3B0aW9ucy5xdWVyeVBhcmFtcyk7XHJcblx0XHRyZXN1bHQucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbG9uZVF1ZXJ5UGFyYW1zIChwYXJhbWV0ZXJzKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XHJcblx0XHRcdGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyc1trZXldO1xyXG5cdFx0XHRsZXQgY2xvbmU7XHJcblxyXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5zbGljZSgpOyAvLyB3ZSdyZSBvbmx5IHVzaW5nIHByaW1pdGl2ZSBhcnJheXNcclxuXHRcdFx0ZWxzZSBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLmNsb25lKCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlO1xyXG5cclxuXHRcdFx0cmVzdWx0W2tleV0gPSBjbG9uZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb2x1bW5zOiBbXSxcclxuXHRcdFx0XHRxdWVyeTogbnVsbCxcclxuXHRcdFx0XHRxdWVyeUl0ZW1UeXBlOiBudWxsLFxyXG5cdFx0XHRcdHF1ZXJ5UGFyYW1zOiB7fSxcclxuXHRcdFx0XHRwYXJlbnQ6IG51bGwsXHJcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZSxcclxuXHRcdFx0XHRsaW1pdDogbnVsbCxcclxuXHRcdFx0XHRlbnRyeUtleTogJydcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVF1ZXJ5IChvcHRpb25zKSB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHJcblx0XHRsZXQgcXVlcnk7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGNvbnN0IGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHtpZDogJyZwYXJlbnRJZCd9fTtcclxuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XHJcblxyXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxyXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihvcHRpb25zLnF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChxdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKTtcclxuXHJcblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhY2N1bXVsYXRvcik6IEl0ZW1JZFtdIHtcclxuXHRcdGlmIChhY2N1bXVsYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRhY2N1bXVsYXRvciA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRhY2N1bXVsYXRvci5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiBhY2N1bXVsYXRvcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSB7SXRlbUVudHJ5W119IGl0ZW1FbnRyaWVzXHJcblx0ICogQHBhcmFtIHsoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW59IGNhbGxiYWNrXHJcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxyXG5cdCAqXHJcblx0ICogZmlsdGVyIGFuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFJldHVybiB0aGUgZW50cmllcyB0aGF0IGZhaWxlZCB0aGUgY29uZGl0aW9uXHJcblx0ICogUmVwbGFjZSB0aGUgZ2l2ZW4gYXJyYXkgd2l0aCB0aGUgZW50cmllcyB0aGF0IGRpZG4ndCBmYWlsIHRoZSBjb25kaXRpb24uXHJcblx0ICovXHJcblx0ZmlsdGVyQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbikge1xyXG5cdFx0Y29uc3QgZmlsdGVyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1FbnRyeSkpXHJcblx0XHRcdFx0ZmlsdGVyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdHJlbW92ZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVtb3ZlZEVudHJpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XHJcblxyXG5cdFx0aXRlbUVudHJpZXMubGVuZ3RoID0gZmlsdGVyZWRFbnRyaWVzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1FbnRyaWVzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpdGVtRW50cmllc1tpXSA9IGZpbHRlcmVkRW50cmllc1tpXTtcclxuXHJcblx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uQ2FjaGUsXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcclxuXHRDb2x1bW5FeHBhbnNpb24sXHJcblx0Q29sdW1uSGFuZGxlcixcclxuXHRDb2x1bW5TZXQsXHJcblx0SXRlbUNhY2hlLFxyXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlLFxyXG5cdFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksIENvbGxlY3Rpb25FbnRyeUZhY3RvcnksIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgUXVlcnlQYXJzZXJGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAsIENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCBFbnRyeVBhcmVudCwgRW50cnlTdGF0dXMsIEl0ZW1FbnRyeVBhcmVudElkTWFwLCBJdGVtSWQsXHJcblx0SXRlbVJlc291cmNlSXRlbUlkTWFwLCBJdGVtVHlwZVxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25IYW5kbGVyIHtcclxuXHRlbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0Z2V0UHJvbWlzZXMgKHN0YXR1c1Jlc291cmNlOiBDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCkge1xyXG5cdFx0Y29uc3QgcHJvbWlzZWQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURdO1xyXG5cdFx0Y29uc3QgcHJvbWlzZWRFeHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHByb21pc2VkKVxyXG5cdFx0XHRyZXN1bHQucHVzaChwcm9taXNlZFtwYXJlbnRJZF0pO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcHJvbWlzZWRFeHBhbmQpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkRXhwYW5kW3BhcmVudElkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RJZHMgKHN0YXR1c1Jlc291cmNlKSB7XHJcblx0XHRjb25zdCByZXNvbHZlID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xyXG5cdFx0Y29uc3QgZXhwYW5kID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLkVYUEFORF07XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiByZXNvbHZlKVxyXG5cdFx0XHRyZXN1bHQucHVzaChyZXNvbHZlW3BhcmVudElkXS5wYXJlbnQuaXRlbUlkKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGV4cGFuZClcclxuXHRcdFx0cmVzdWx0LnB1c2goZXhwYW5kW3BhcmVudElkXS5wYXJlbnQuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQgKi9cclxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8pIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgZW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGVudHJ5Lm5vdGZpdHRpbmcsIG51bGwsIHRydWUpO1xyXG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxyXG5cclxuXHRcdFx0aWYgKGVudHJ5Lm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKCk6IENvbGxlY3Rpb25NYXRjaGVyIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW3RoaXMuZW50cmllc10sIHRydWUsIHRydWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQgKi9cclxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXAsIHVwZGF0ZUluaXRpYWw/LCByZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGxldCByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgZml0dGluZyA9IG1hcEVudHJ5LmZpdHRpbmc7XHJcblx0XHRcdGNvbnN0IG1heWJlID0gbWFwRW50cnkubWF5YmU7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0l0ZW0gb2YgZml0dGluZylcclxuXHRcdFx0XHRpZEFycmF5LnB1c2goZml0dGluZ0l0ZW0uaXRlbUlkKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgbWF5YmVJdGVtIG9mIG1heWJlKVxyXG5cdFx0XHRcdGlkQXJyYXkucHVzaChtYXliZUl0ZW0pO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCBudWxsLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogbWF5YmUsIGJvb2xlYW4gaW5zdGVhZCBvZiBtZXNzYWdlXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQgKi9cclxuXHRhZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCByZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpOiBJdGVtUmVzb3VyY2VbXSB7XHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMobWFwRW50cnkuZml0dGluZywgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XHJcblxyXG5cdFx0XHRpZiAodXBkYXRlSW5pdGlhbCAmJiBtYXBFbnRyeS5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRiYXRjaEV4cGFuZCAocGFyZW50VHlwZTogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sIG5ld0NvbHVtbnMpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVtdPiB7XHJcblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblx0XHRsZXQgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Ly8gVE9ETzogZmlsdGVyIGxvY2FsIGl0ZW1zP1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xyXG5cclxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKCg8RW50cnlQYXJlbnQ+IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpLml0ZW1JZCk7XHJcblxyXG5cdFx0XHRpdGVtRW50cmllcyA9IGl0ZW1FbnRyaWVzLmNvbmNhdChjb2xsZWN0aW9uRW50cnkuaXRlbXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxyXG5cdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0bnVsbCxcclxuXHRcdFx0bmV3Q29sdW1uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihcclxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXNcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnkuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbnM7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRiYXRjaEV4dGVuZCAoXHJcblx0XHRwYXJlbnRUeXBlOiBzdHJpbmcsXHJcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdHF1ZXJ5Q2FsbGJhY2ssXHJcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sXHJcblx0XHRyZXR1cm5BbGxJdGVtcyA9IGZhbHNlXHJcblx0KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VJdGVtSWRNYXA+IHtcclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oe30pO1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblx0XHRsZXQgaXRlbUlkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IHF1ZXJ5Q2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjayk7XHJcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xyXG5cclxuXHRcdFx0aXRlbUlkQXJyYXkgPSBpdGVtSWRBcnJheS5jb25jYXQoY29sbGVjdGlvbkVudHJ5LmdldElkQXJyYXkoKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXHJcblx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpLm9iamVjdCxcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbihpdGVtSWRBcnJheSlcclxuXHRcdFx0KSxcclxuXHRcdFx0b3B0aW9ucy5jb2x1bW5zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuYWRkSXRlbXMoIC8vIHNob3VsZCBnbyBmaXJzdFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5pdGVtc1twYXJlbnRJZF0sXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hGZXRjaCAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XHJcblx0XHRjb25zdCByZXNvdXJjZSA9IHRoaXMuY3JlYXRlU3RhdHVzUmVzb3VyY2UocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHRoaXMuZ2V0UHJvbWlzZXMocmVzb3VyY2UpKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVxdWVzdElkcyA9IHRoaXMuZ2V0UmVxdWVzdElkcyhyZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XHJcblx0XHRcdFx0XHRcdFx0bnVsbCA6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMucXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKClbMF0sXHJcblx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1uc1xyXG5cdFx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKHJlc291cmNlLCBpdGVtRW50cnlSZXNvdXJjZSwgaXRlbUNhY2hlKTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGhhc1Byb3BlcnRpZXMocmVzb3VyY2VbRU5UUllfU1RBVFVTLkxPQ0FMXSkpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucykudGhlbihcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2UsXHJcblx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlc291cmNlW0VOVFJZX1NUQVRVUy5DQUNIRURdO1xyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlU3RhdHVzUmVzb3VyY2UgKFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzSWQgaW4gRU5UUllfU1RBVFVTKVxyXG5cdFx0XHRyZXN1bHRbRU5UUllfU1RBVFVTW3N0YXR1c0lkXV0gPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpOyAvLyB1c2UgcHJvY2Vzc0VudHJ5T3B0aW9ucyB0byBjbG9uZSBUT0RPOiB1c2UgY2xvbmVPcHRpb25zXHJcblxyXG5cdFx0XHRsZXQgc3RhdHVzUmVzb3VyY2U7XHJcblxyXG5cdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfTtcclxuXHJcblx0XHRcdHN0YXR1c1Jlc291cmNlID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgZW50cnlPcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xyXG5cclxuXHRcdFx0cmVzdWx0W3N0YXR1c1Jlc291cmNlLnN0YXR1c11bcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcclxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IHN0YXR1c1Jlc291cmNlID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcclxuXHRcdGNvbnN0IGVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XHJcblxyXG5cdFx0c3dpdGNoIChzdGF0dXNSZXNvdXJjZS5zdGF0dXMpIHtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oZW50cnkpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5leHBhbmQob3B0aW9ucy5jb2x1bW5zKTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBlbnRyeS5leHBhbmQob3B0aW9ucy5jb2x1bW5zKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVSZW1vdGUoZW50cnksIGl0ZW1DYWNoZSk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkxPQ0FMOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChlbnRyeSwgaXRlbUNhY2hlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XHJcblx0XHRjb25zdCBpc0NvbHVtblN1cGVyc2V0ID0gY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKG9wdGlvbnMuY29sdW1ucyk7XHJcblxyXG5cdFx0aWYgKCFjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRyZXR1cm4gaXNDb2x1bW5TdXBlcnNldCA/IEVOVFJZX1NUQVRVUy5DQUNIRUQgOiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpID8gRU5UUllfU1RBVFVTLkxPQ0FMIDogRU5UUllfU1RBVFVTLlJFU09MVkU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGlzQ29sdW1uU3VwZXJzZXQgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xyXG5cdH1cclxuXHJcblx0Z2V0RGVmZXJyZWRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBvcHRpb25zLCBxdWVyeSwgZGVmZXJyZWRFbnRyaWVzKToge2VudHJ5OiBDb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGJvb2xlYW59IHtcclxuXHRcdGxldCBjb2xsZWN0aW9uRW50cnk7XHJcblxyXG5cdFx0aWYgKCFvcHRpb25zLmRlZmVyUmVxdWVzdCkge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zKTtcclxuXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IGRlZmVycmVkRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbCkge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kUmVxdWVzdENvbHVtbnMob3B0aW9ucy5jb2x1bW5zKTtcclxuXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiB7ZW50cnk6IGRlZmVycmVkRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgaXNEZWZlcnJlZDogdHJ1ZX07XHJcblx0fVxyXG5cclxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xyXG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdGxldCBpc0RlZmVycmVkO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzTG9jYWwob3B0aW9ucykpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gbG9jYWxFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXHJcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKX07XHJcblxyXG5cdFx0XHQoe2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWR9ID0gdGhpcy5nZXREZWZlcnJlZEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBxdWVyeSwgZGVmZXJyZWRFbnRyaWVzKSk7XHJcblxyXG5cdFx0XHRpZiAoaXNEZWZlcnJlZClcclxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEfTtcclxuXHJcblx0XHRcdC8vIG5ldyBsb2NhbCBlbnRyeSBjcmVhdGVkLCBzaG91bGQgYmUgYWRkZWQgdG8gbG9jYWwgY2FjaGUgb25seVxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksIHN0YXR1czogRU5UUllfU1RBVFVTLkxPQ0FMfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xyXG5cclxuXHRcdC8vIGVudHJ5IGFscmVhZHkgZXhpc3RzIGluIGdsb2JhbCBjYWNoZSwgYWRkIHRvIGxvY2FsIGNhY2hlXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGVudHJ5OiBsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksXHJcblx0XHRcdFx0c3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucylcclxuXHRcdFx0fTtcclxuXHJcblx0XHQoe2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWR9ID0gdGhpcy5nZXREZWZlcnJlZEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBxdWVyeSwgZGVmZXJyZWRFbnRyaWVzKSk7XHJcblxyXG5cdFx0aWYgKGlzRGVmZXJyZWQpXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xyXG5cclxuXHRcdC8vIG5ldyBnbG9iYWwgZW50cnkgY3JlYXRlZCwgYWRkIHRvIGJvdGggbG9jYWwgYW5kIGdsb2JhbCBjYWNoZVxyXG5cdFx0bG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0dGhpcy5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUkVTT0xWRX07XHJcblx0fVxyXG5cclxuXHRoYW5kbGVCYXRjaFJlc3BvbnNlIChcclxuXHRcdHN0YXR1c1Jlc291cmNlLFxyXG5cdFx0aXRlbUVudHJ5Q29tcG91bmQ6IHtcclxuXHRcdFx0Y29sdW1uczogQ29sdW1uU2V0LFxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24/OiBDb2x1bW5FeHBhbnNpb24sXHJcblx0XHRcdGl0ZW1zPzogSXRlbUVudHJ5UGFyZW50SWRNYXBcclxuXHRcdH0sXHJcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZVxyXG5cdCk6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuY2FjaGVkKVxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuY2FjaGVkW3BhcmVudElkXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLnJlc29sdmUpIHtcclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLnJlc29sdmVbcGFyZW50SWRdLnJlc29sdmUoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0aXRlbXM6ICg8SXRlbUVudHJ5UGFyZW50SWRNYXA+IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zKVtwYXJlbnRJZF0sXHJcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuZXhwYW5kKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZXhwYW5kW3BhcmVudElkXTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRDb2x1bW5zKDxDb2x1bW5FeHBhbnNpb24+IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbkV4cGFuc2lvbik7XHJcblxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UubG9jYWwpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBzdGF0dXNSZXNvdXJjZS5sb2NhbFtwYXJlbnRJZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UGFyZW50KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQuaXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHBhcmVudC5pdGVtSWQsXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVMb2NhbCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0aXRlbXM6IGl0ZW1DYWNoZS5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpLFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlUmVtb3RlIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0bGV0IGNvbHVtblNldDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKGNvbGxlY3Rpb25FbnRyeSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnMsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQsXHJcblx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0aXRlbXM6IGl0ZW1FbnRyaWVzLmNvbmNhdChpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpKSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAob3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgSXRlbUlkIH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMvJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTWF0Y2hlciB7XHJcblx0bWFwOiB7XHJcblx0XHRbY29sbGVjdGlvbkVudHJ5SWQ6IG51bWJlcl06IHtcclxuXHRcdFx0Y29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5XHJcblx0XHRcdG1hdGNoZXM6IHtcclxuXHRcdFx0XHRbaXRlbUlkOiBudW1iZXJdOiB7IGl0ZW06IEl0ZW1FbnRyeSwgaXNNYXRjaDogYm9vbGVhbiB9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sXHJcblx0XHRwcml2YXRlIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sXHJcblx0XHRwcml2YXRlIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkNhY2hlIG9mIHRoaXMuY29sbGVjdGlvbkNhY2hlcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IGNvbGxlY3Rpb25DYWNoZS5nZXRCeUl0ZW1UeXBlKGl0ZW1FbnRyeS5pdGVtVHlwZSk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSAgb2YgY29sbGVjdGlvbkVudHJpZXMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlJZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcclxuXHRcdFx0XHRsZXQgbWF0Y2hlcztcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0dGhpcy5tYXBbY29sbGVjdGlvbkVudHJ5SWRdID0geyBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uRW50cnksIG1hdGNoZXM6IHt9IH07XHJcblxyXG5cdFx0XHRcdG1hdGNoZXMgPSB0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0ubWF0Y2hlcztcclxuXHJcblx0XHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdG1hdGNoZXNbaXRlbUlkXSA9IHtcclxuXHRcdFx0XHRcdGl0ZW06IGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdGlzTWF0Y2g6IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zICgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblxyXG5cdFx0XHRpZiAodGhpcy5oYXNGaXR0aW5nSXRlbXMobWFwRW50cnkubWF0Y2hlcykpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2gobWFwRW50cnkuY29sbGVjdGlvbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZFRvQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcclxuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1FbnRyaWVzID0gZ3JvdXBlZEl0ZW1FbnRyaWVzLmZpdHRpbmc7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxyXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxyXG5cdFx0XHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BY3RpdmF0ZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxyXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxyXG5cdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdJdGVtSWRzID0gdGhpcy5ncm91cEl0ZW1JZHMobWFwRW50cnkubWF0Y2hlcykuZml0dGluZztcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCB8fCBjb2xsZWN0aW9uRW50cnkgIT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhmaXR0aW5nSXRlbUlkcywgcmVzdWx0UmVzb3VyY2UsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zICgpIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5ub3RGaXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cclxuXHRcdFx0Ly8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cclxuXHRcdFx0aWYgKGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdyb3VwSXRlbUVudHJpZXMgKG1hdGNoZXMpIHtcclxuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0Y29uc3QgbWF5YmU6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xyXG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gbWF0Y2guaXRlbTtcclxuXHRcdFx0Y29uc3QgaXNNYXRjaCA9IG1hdGNoLmlzTWF0Y2g7XHJcblxyXG5cdFx0XHRpZiAoaXNNYXRjaCA9PT0gdHJ1ZSlcclxuXHRcdFx0XHRmaXR0aW5nLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAoaXNNYXRjaCA9PT0gZmFsc2UpXHJcblx0XHRcdFx0bm90Rml0dGluZy5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0bWF5YmUucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7IGZpdHRpbmc6IGZpdHRpbmcsIG5vdEZpdHRpbmc6IG5vdEZpdHRpbmcsIG1heWJlOiBtYXliZSB9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBncm91cEl0ZW1JZHMgKG1hdGNoZXMpIHtcclxuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcclxuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBtYXRjaGVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHQobWF0Y2guaXNNYXRjaCA9PT0gZmFsc2UgPyBub3RGaXR0aW5nIDogZml0dGluZykucHVzaChtYXRjaC5pdGVtLml0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHsgZml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZyB9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoYXNGaXR0aW5nSXRlbXMgKG1hdGNoZXMpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcclxuXHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXS5pc01hdGNoID09PSB0cnVlKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSB7XHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRlZGl0SXRlbXM6IGZhbHNlLFxyXG5cdFx0XHRcdGVkaXRDb2xsZWN0aW9uOiBmYWxzZSxcclxuXHRcdFx0XHRtb2RJbnN0YW50OiBmYWxzZSxcclxuXHRcdFx0XHRlbmFibGVTYXZlOiB0cnVlLFxyXG5cdFx0XHRcdG9uSXRlbXNDcmVhdGVkOiBub29wLFxyXG5cdFx0XHRcdG9uQ2hhbmdlOiBub29wLCAvLyBuZWVkZWQgZm9yIGNvbXBhcmlzb25cclxuXHRcdFx0XHRvbkFkZDogbm9vcCxcclxuXHRcdFx0XHRvblJlbW92ZTogbm9vcCxcclxuXHRcdFx0XHRvbkFkZEluaXRpYWw6IG5vb3AsXHJcblx0XHRcdFx0b25SZW1vdmVJbml0aWFsOiBub29wLFxyXG5cdFx0XHRcdG9uQWN0aXZhdGVJdGVtOiBub29wLCAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGluIExvY2FsQ2FjaGVcclxuXHRcdFx0XHRvbkRlYWN0aXZhdGVJdGVtOiBub29wLCAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGluIExvY2FsQ2FjaGVcclxuXHRcdFx0XHRvbkRlYWN0aXZhdGVDb2xsZWN0aW9uOiBub29wLCAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGluIExvY2FsQ2FjaGVcclxuXHRcdFx0XHRyZXNvdXJjZUtleTogbnVsbCwgLy8gVE9ETzogcmVtb3ZlXHJcblx0XHRcdFx0Y2xlYXJPblRhYkNoYW5nZTogdHJ1ZSxcclxuXHRcdFx0XHRjbGVhck9uU3ViVGFiQ2hhbmdlOiB0cnVlLFxyXG5cdFx0XHRcdGN1c3RvbTogbnVsbFxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi9Db2x1bW5VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5DYWNoZSB7XHJcblx0Y2FjaGUgPSB7fTtcclxuXHRhbGxDb2x1bW5zID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0c2V0Q29sdW1uIChpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pIHtcclxuXHRcdGlmICh0aGlzLmNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmNhY2hlW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdGNvbnN0IGVudHJ5ID0gdGhpcy5jYWNoZVtpdGVtVHlwZV07XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IHJlc3BvbnNlQ29sdW1uLmlkO1xyXG5cclxuXHRcdGlmIChlbnRyeVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW50cnlbY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0cmV0dXJuIGVudHJ5W2NvbHVtbklkXTtcclxuXHR9XHJcblxyXG5cdHNldENvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlVHlwZSBpbiByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uc1tyZXNwb25zZVR5cGVdO1xyXG5cclxuXHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcclxuXHRcdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXVtjb2x1bW5JZF0gPSB0aGlzLnNldENvbHVtbihyZXNwb25zZVR5cGUsIGNvbHVtbnNbY29sdW1uSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpXHJcblx0XHRcdHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPSB0cnVlO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZXRyaWV2ZSAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTogeyBtaXNzaW5nOiBhbnlbXSB8IHRydWUsIGNhY2hlZDogb2JqZWN0IH0ge1xyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XHJcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcclxuXHRcdFx0XHRyZXR1cm4ge2NhY2hlZDogdGhpcy5nZXRDb2x1bW5zKGl0ZW1UeXBlKSwgbWlzc2luZzogW119O1xyXG5cclxuXHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHt9LCBtaXNzaW5nOiB0cnVlfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByZXBvbnNlQWNjdW11bGF0b3IgPSB7fTtcclxuXHRcdGNvbnN0IHJlcXVlc3RBY2N1bXVsYXRvciA9IFtdO1xyXG5cclxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXBvbnNlQWNjdW11bGF0b3IpO1xyXG5cclxuXHRcdHJldHVybiB7bWlzc2luZzogcmVxdWVzdEFjY3VtdWxhdG9yLCBjYWNoZWQ6IHJlcG9uc2VBY2N1bXVsYXRvcn07XHJcblx0fVxyXG5cclxuXHRjb250YWluc0FsbCAoaXRlbVR5cGUpIHtcclxuXHRcdHJldHVybiB0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID09PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sdW1ucyAoaXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gW10gOiB0aGlzLmNhY2hlW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdFtpdGVtVHlwZV0gPSBjb2x1bW5zO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW5zIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcikge1xyXG5cdFx0Ly8gYWx3YXlzIHJldHJpZXZlIHRoZSBpZCBjb2x1bW5cclxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsICdpZCcsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKVxyXG5cdFx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbiAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gdGhpcy5nZXRDb2x1bW4oaXRlbVR5cGUsIGNvbHVtbi5pZCk7XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gocmVxdWVzdENvbHVtbik7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXVtjb2x1bW4uaWRdID0gcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBtaXNzaW5nRGVyaXZlZCA9IFtdO1xyXG5cclxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjb2x1bW4uY2hpbGRyZW4sIG1pc3NpbmdEZXJpdmVkLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcclxuXHJcblx0XHRpZiAobWlzc2luZ0Rlcml2ZWQubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgbWlzc2luZ1JlcXVlc3QgPSB7fTtcclxuXHRcdG1pc3NpbmdSZXF1ZXN0W2NvbHVtbi5pZF0gPSBtaXNzaW5nRGVyaXZlZDtcclxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKG1pc3NpbmdSZXF1ZXN0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q29sdW1uIChpdGVtVHlwZSwgY29sdW1uSWQpIHtcclxuXHRcdGlmICh0aGlzLmNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY2FjaGVbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25SZXN1bHQsIEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucywgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uIHtcclxuXHRleHBhbnNpb25NYXA6IHtbY29sdW1uU2V0SWQ6IG51bWJlcl06IENvbHVtbkV4cGFuc2lvblJlc3VsdH0gPSB7fTtcclxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgcmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cHVibGljIHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcclxuXHQpIHtcclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHQvLyByZXF1ZXN0Q29sdW1ucyBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LCB3aGVuIGl0IGlzIHRydWUgZGVyaXZlZCBjb2x1bW4gaW5mb3JtYXRpb24gd2lsbCBiZSBsb3N0XHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMucHVzaChjb2x1bW5JZCk7XHJcblx0XHR9IGVsc2VcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHJ1biAoY29sdW1uU2V0OiBDb2x1bW5TZXQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQgfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xyXG5cclxuXHRcdGlmICh0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXTtcclxuXHJcblx0XHRjb25zdCBpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3QsXHJcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWVcclxuXHRcdCk7XHJcblxyXG5cdFx0aWYgKGlzQ29sdW1uU3Vic2V0KVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHR0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gPSB0aGlzLmV4cGFuZENvbHVtbkluZm8oY29sdW1uU2V0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5leHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHBhbmRDb2x1bW5JbmZvIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB7XHJcblx0XHRjb25zdCByZXF1ZXN0TWVyZ2VSZXN1bHQgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhjb2x1bW5TZXQucmVxdWVzdCwgdGhpcy5yZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHRjb25zdCBtZXJnZWRSZXNwb25zZUNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWxcclxuXHRcdFx0Lm1lcmdlUmVzcG9uc2VDb2x1bW5zKGNvbHVtblNldC5yZXNwb25zZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpXHJcblx0XHRcdC5tZXJnZWQ7XHJcblxyXG5cdFx0Y29uc3QgbWVyZ2VkID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdE1lcmdlUmVzdWx0Lm1lcmdlZCxcclxuXHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQuZGlmZmVyZW5jZSxcclxuXHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zLCAvLyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gbG9vayB1cCB0aGUgcGFyZW50IG9mIGRlcml2ZWQgY29sdW1uc1xyXG5cdFx0XHRmYWxzZSxcclxuXHRcdFx0ZmFsc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0bWVyZ2VkLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdENvbHVtbnNUcnVlIHx8IGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWU7XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkNhY2hlLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5IYW5kbGVyIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNhY2hlOiBDb2x1bW5DYWNoZSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbikge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xuXHR9XG5cblx0c2V0Q29sdW1ucyAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0fVxuXG5cdGZldGNoSXRlbVR5cGVUcmFuc2xhdGlvbnMgKGl0ZW1UeXBlcyk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXG5cdFx0XHRwcm9taXNlc1tpdGVtVHlwZV0gPSB0aGlzLmZldGNoKGl0ZW1UeXBlLCBbJ2lkJ10pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgcmVzcG9uc2UpXG5cdFx0XHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gcmVzcG9uc2VbaXRlbVR5cGVdW2l0ZW1UeXBlXS5pZC5uYW1lO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdCAoaXRlbVR5cGUsIGNvbHVtbnMsIHBhcmFtcyA9IHtmaWx0ZXI6IGZhbHNlfSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRjb2x1bW5SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaCAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXM/KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBjb2x1bW5SZXNvdXJjZSA9IHRoaXMuY2FjaGUucmV0cmlldmUoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdGlmIChjb2x1bW5SZXNvdXJjZS5taXNzaW5nICE9PSB0cnVlICYmIGNvbHVtblJlc291cmNlLm1pc3NpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2x1bW5SZXNvdXJjZS5jYWNoZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgY29sdW1uUmVzb3VyY2UubWlzc2luZywgcGFyYW1zKS50aGVuKHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmNhY2hlZFxuXHRcdFx0XHQpLm1lcmdlZDtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2hBbGwgKGl0ZW1UeXBlKTogUHJvbWlzZTxhbnk+IHtcblx0XHRpZiAodGhpcy5jYWNoZS5jb250YWluc0FsbChpdGVtVHlwZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuY2FjaGUuZ2V0Q29sdW1ucyhpdGVtVHlwZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgdHJ1ZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm8ge1xyXG5cdGlkOiBzdHJpbmc7XHJcblx0bGV2ZWw6IG51bWJlcjtcclxuXHRwYXRoOiBzdHJpbmc7XHJcblx0dGFpbFBhdGg6IHN0cmluZztcclxuXHRpdGVtVHlwZTogc3RyaW5nID0gJyc7XHJcblx0Y2hpbGRyZW46IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGlzTGVhZjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChyZWFkb25seSBhcGlDb2x1bW46IGFueSwgcmVhZG9ubHkgcGFyZW50OiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gYXBpQ29sdW1uLmlkO1xyXG5cclxuXHRcdHRoaXMuaWQgPSBjb2x1bW5JZDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKSB7XHJcblx0XHRcdHRoaXMubGV2ZWwgPSAwO1xyXG5cdFx0XHR0aGlzLnBhdGggPSBjb2x1bW5JZDtcclxuXHRcdFx0dGhpcy50YWlsUGF0aCA9ICcnO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5sZXZlbCA9IHBhcmVudC5sZXZlbCArIDE7XHJcblx0XHRcdHRoaXMucGF0aCA9IHBhcmVudC5wYXRoICsgQ09MVU1OX1NFUEVSQVRPUiArIGNvbHVtbklkO1xyXG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID09PSAwID9cclxuXHRcdFx0XHRjb2x1bW5JZCA6XHJcblx0XHRcdFx0cGFyZW50LnRhaWxQYXRoICsgQ09MVU1OX1NFUEVSQVRPUiArIGNvbHVtbklkO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5JbmZvLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHtSZXF1ZXN0Q29sdW1ucywgUmVzcG9uc2VDb2x1bW5NYXB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmNvbnN0IGVtcHR5T2JqZWN0ID0ge307XHJcbmxldCBjdXJyZW50SWQgPSAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtblNldCB7XHJcblx0aWQgPSArK2N1cnJlbnRJZDtcclxuXHJcblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xyXG5cdHJlc3BvbnNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IGVtcHR5T2JqZWN0O1xyXG5cclxuXHRsaW5rOiBDb2x1bW5JbmZvIHwgbnVsbCA9IG51bGw7XHJcblx0bWFpbjogQ29sdW1uSW5mb1tdID0gW107XHJcblx0ZGVyaXZlZDogQ29sdW1uSW5mb1tdID0gW107XHJcblx0cm9vdDogQ29sdW1uSW5mb1tdID0gW107XHJcblx0bGVhZjogQ29sdW1uSW5mb1tdID0gW107XHJcblx0Zm9ybWF0dGVkOiB7bWFpbjogQ29sdW1uSW5mb1tdLCBkZXJpdmVkOiBDb2x1bW5JbmZvW119ID0ge21haW46IFtdLCBkZXJpdmVkOiBbXX07XHJcblx0ZmlsdGVyZWQ6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGN1c3RvbTogQ29sdW1uSW5mb1tdID0gW107XHJcblx0c2VhcmNoYWJsZTogQ29sdW1uSW5mb1tdID0gW107XHJcblx0aXRlbTogQ29sdW1uSW5mb1tdID0gW107XHJcblx0bm90SXRlbTogQ29sdW1uSW5mb1tdID0gW107XHJcblxyXG5cdGVuYWJsZUNhY2hpbmc6IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcclxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5LFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlLFxyXG5cdFx0cHVibGljIHJlcXVlc3Q6IFJlcXVlc3RDb2x1bW5zLFxyXG5cdCkge1xyXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3QgPT09IHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLCBlbmFibGVDYWNoaW5nID0gdHJ1ZSwgaW5jbHVkZUlkQ29sdW1uID0gdHJ1ZSk6IHRoaXMge1xyXG5cdFx0dGhpcy5lbmFibGVDYWNoaW5nID0gZW5hYmxlQ2FjaGluZztcclxuXHJcblx0XHRpZiAodGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpXHJcblx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyhyZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXF1ZXN0Q29sdW1ucyhyZXNwb25zZUNvbHVtbnMsIGluY2x1ZGVJZENvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRleHBhbmRSZXF1ZXN0Q29sdW1ucyAoY29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdGNvbnN0IG1lcmdlZFJlcXVlc3RDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5yZXF1ZXN0LCBjb2x1bW5zKS5tZXJnZWQ7XHJcblxyXG5cdFx0dGhpcy5yZXF1ZXN0ID0gbWVyZ2VkUmVxdWVzdENvbHVtbnM7XHJcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0aXNTdXBlcnNldE9mIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChjb2x1bW5zLCB0aGlzLnJlcXVlc3QsIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xyXG5cclxuXHRcdHRoaXMucmVxdWVzdCA9IFtdO1xyXG5cdFx0dGhpcy5yZXNwb25zZSA9IHRoaXMuZW5hYmxlQ2FjaGluZyA/XHJcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW5zKHRoaXMuaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucykgOlxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdHRoaXMubWFpbi5wdXNoKHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIFtdLCBudWxsLCByZXNwb25zZUNvbHVtbnMpKTtcclxuXHRcdFx0dGhpcy5yZXF1ZXN0LnB1c2goY29sdW1uSWQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzUmVxdWVzdENvbHVtbnMgKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IDxvYmplY3RbXT4gdGhpcy5yZXF1ZXN0OyAvLyB3ZSBjYW4gYXNzdW1lIHJlcXVlc3RDb2x1bW5zIGlzIGFuIGFycmF5IGhlcmVcclxuXHJcblx0XHR0aGlzLnJlc3BvbnNlID0ge307XHJcblxyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhyZXF1ZXN0Q29sdW1uLCBpdGVtVHlwZSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHJcblx0XHRcdGlmIChjb2x1bW5JbmZvID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0XHRpZiAoIWNvbHVtbkluZm8uaXNMZWFmKVxyXG5cdFx0XHRcdHRoaXMucm9vdC5wdXNoKGNvbHVtbkluZm8pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbmNsdWRlSWRDb2x1bW4gJiYgdGhpcy5yZXNwb25zZVtpdGVtVHlwZV0uaWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbygnaWQnLCBpdGVtVHlwZSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHJcblx0XHRcdGlmIChjb2x1bW5JbmZvICE9PSBudWxsKVxyXG5cdFx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRSZXF1ZXN0Q29sdW1uSW5mbyAocmVxdWVzdENvbHVtbiwgaXRlbVR5cGUsIHBhcmVudCwgcmVzcG9uc2VDb2x1bW5zKSB7XHJcblx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb2x1bW4uaWQ7XHJcblxyXG5cdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdObyBhcGkgY29sdW1uIGZvciByZXF1ZXN0IGNvbHVtbicsIGNvbHVtbklkLCAnZm9yIGl0ZW1UeXBlJywgaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZW5hYmxlQ2FjaGluZylcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSB0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0UmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlO1xyXG5cclxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0aWYgKHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdW2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmdldENvbHVtbkluZm8oY29sdW1uSWQsIGl0ZW1UeXBlLCBwYXJzZWRDb2x1bW4uY2hpbGRyZW4sIHBhcmVudCwgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q29sdW1uSW5mbyAoY29sdW1uSWQsIGl0ZW1UeXBlLCBjaGlsZHJlbiwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpOiBDb2x1bW5JbmZvIHtcclxuXHRcdGNvbnN0IGNvbHVtblV0aWwgPSB0aGlzLmNvbHVtblV0aWw7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlQ29sdW1uLCBwYXJlbnQpO1xyXG5cdFx0Y29uc3QgaXNEZXJpdmVkID0gcGFyZW50ICE9PSBudWxsO1xyXG5cclxuXHRcdGlmIChpc0Rlcml2ZWQpXHJcblx0XHRcdHRoaXMuZGVyaXZlZC5wdXNoKGNvbHVtbkluZm8pO1xyXG5cdFx0ZWxzZSAvLyB3ZSBjb3VsZCBwb3NzaWJseSBhZGQgZGVyaXZlZCBjb2x1bW5zIHRvICdub3RJdGVtJ1xyXG5cdFx0XHR0aGlzW2NvbHVtblV0aWwuaXNJdGVtQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSA/ICdpdGVtJyA6ICdub3RJdGVtJ10ucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRpZiAoY29sdW1uVXRpbC5pc0Zvcm1hdHRlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXHJcblx0XHRcdHRoaXMuZm9ybWF0dGVkW2lzRGVyaXZlZCA/ICdkZXJpdmVkJyA6ICdtYWluJ10ucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRpZiAoY29sdW1uVXRpbC5pc0ZpbHRlcmVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzU2VhcmNoYWJsZUNvbHVtbihyZXNwb25zZUNvbHVtbikpXHJcblx0XHRcdHRoaXMuc2VhcmNoYWJsZS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzQ3VzdG9tQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5jdXN0b20ucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW4udHlwZSA9PT0gJ2xpbmsnKVxyXG5cdFx0XHR0aGlzLmxpbmsgPSBjb2x1bW5JbmZvO1xyXG5cclxuXHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0dGhpcy5sZWFmLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0XHRyZXR1cm4gY29sdW1uSW5mbztcclxuXHRcdH1cclxuXHJcblx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlID0gcmVzcG9uc2VDb2x1bW4uaXRlbVR5cGU7XHJcblx0XHRjb2x1bW5JbmZvLmNoaWxkcmVuID0gW107XHJcblx0XHRjb2x1bW5JbmZvLmlzTGVhZiA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGNvbHVtbnMgaXMgKm5vdCogdHJ1ZVxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbklkIG9mIGNoaWxkcmVuKSB7XHJcblx0XHRcdGNvbnN0IGNoaWxkSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oXHJcblx0XHRcdFx0Y2hpbGRDb2x1bW5JZCxcclxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSxcclxuXHRcdFx0XHRjb2x1bW5JbmZvLFxyXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0aWYgKGNoaWxkSW5mbyA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGNvbHVtbkluZm8uY2hpbGRyZW4ucHVzaChjaGlsZEluZm8pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5JbmZvO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IsIFJFTkRFUl9BU19TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBMb2NhbENvbHVtbiwgUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjb3B5LCBleHRlbmQsIGdldEZpcnN0UHJvcGVydHksIGlzRGVmaW5lZCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uVXRpbCB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sdW1uUGF0aCAoY29sdW1ucywgcmVuZGVyQXMpIHtcclxuXHRcdGxldCBzZXBlcmF0b3IgPSAnJztcclxuXHRcdGxldCByZXN1bHQgPSAnJztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdHJlc3VsdCArPSBzZXBlcmF0b3IgKyBjb2x1bW4uaWQ7XHJcblx0XHRcdHNlcGVyYXRvciA9IENPTFVNTl9TRVBFUkFUT1I7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlbmRlckFzICE9PSBudWxsKVxyXG5cdFx0XHRyZXN1bHQgKz0gUkVOREVSX0FTX1NFUEVSQVRPUiArIHJlbmRlckFzO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXREYXRlRm9ybWF0T3B0aW9ucyAoY29sdW1uVHlwZSkge1xyXG5cdFx0Y29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG5cdFx0Y29uc3QgZm9ybWF0cyA9IHtcclxuXHRcdFx0J0otTS1ZJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcclxuXHRcdFx0J2orRitZJzogbm93LmZvcm1hdCgnRCBNTU0gWVlZWScpLFxyXG5cdFx0XHQnRCtqK0YrWSc6IG5vdy5mb3JtYXQoJ2RkZGQgRCBNTU0gWVlZWScpLFxyXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxyXG5cdFx0XHQnZic6IG5vdy5mb3JtYXQoJ01NTU0nKSxcclxuXHRcdFx0J0QnOiBub3cuZm9ybWF0KCdkZGRkJyksXHJcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXHJcblx0XHRcdGV4dGVuZChmb3JtYXRzLCB7XHJcblx0XHRcdFx0J0otTS1ZK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVkgSEg6bW0nKSxcclxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXHJcblx0XHRcdFx0J2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ0REIE1NTU0gWSBISDptbScpLFxyXG5cdFx0XHRcdCdEK2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ2RkZGQgREQgTU1NIFkgSEg6bW0nKSxcclxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKSxcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIGZvcm1hdHM7XHJcblx0fVxyXG5cclxuXHRpc1N0cmluZ0NvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdFx0Ly8gY2FzZSAnaHRtbCc6IC8vIFRPRE86IHNvcnQgb24gZmlsdGVyZWQgdmFsdWVcclxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0Zsb2F0Q29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzSW50Q29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNOdW1iZXJDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcclxuXHR9XHJcblxyXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHJldHVybiBjb2x1bW4uZmllbGR0eXBlID09PSAnY3VzdG9tZmllbGQnO1xyXG5cdH1cclxuXHJcblx0aXNJdGVtQ29sdW1uIChjb2x1bW4sIGluY2x1ZGVJZCA9IHRydWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaWQnOlxyXG5cdFx0XHRcdHJldHVybiBpbmNsdWRlSWQ7XHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdjaGlsZCc6XHJcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0RhdGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzUmVuZGVyZWRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNGaWx0ZXJlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHQvLyB1Z2x5IGhhY2sgOi0oXHJcblx0XHRpZiAoY29sdW1uLmlkID09PSAnc3RhZmZlbCcpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uZ2VuZXJhdG9yICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdib29sJzpcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcclxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcclxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdGNhc2UgJ2h0bWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNGb3JtYXR0ZWRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNTZWxlY3RhYmxlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnYmxvYic6XHJcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxyXG5cdFx0XHRjYXNlICdmb3JjZXVwZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2lkJzpcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdGNhc2UgJ29yZGVyJzpcclxuXHRcdFx0Y2FzZSAncGFyZW50aWQnOlxyXG5cdFx0XHRjYXNlICdwYXJlbnR0eXBlJzpcclxuXHRcdFx0Y2FzZSAncGFzc3dvcmQnOlxyXG5cdFx0XHRjYXNlICd0b2tlbic6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0aGFzTG9jYXRpb25Qcm9wZXJ0eSAoY29sdW1uLCBsb2NhdGlvbikge1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcclxuXHRcdHJldHVybiAobG9jYXRpb24gJiBjb2x1bW4ubG9jYXRpb24pICE9PSAwO1xyXG5cdH1cclxuXHJcblx0aXNFZGl0YWJsZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRpZiAoY29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0aXNTZWFyY2hhYmxlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICdwaG9uZSc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2h0bWwnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldERlZmF1bHRXZWlnaHQgKGNvbHVtbikge1xyXG5cdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJ2dldERlZmF1bHRXZWlnaHQnLCBjb2x1bW4pO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdib29sJzpcclxuXHRcdFx0Y2FzZSAnaW50JzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAncG93ZXInOlxyXG5cdFx0XHRjYXNlICdjdXJyZW50JzpcclxuXHRcdFx0XHRyZXR1cm4gMC41O1xyXG5cclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0XHRyZXR1cm4gMS41O1xyXG5cclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdodG1sJzpcclxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxyXG5cdFx0XHRcdHJldHVybiAyO1xyXG5cclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRcdHJldHVybiBbJz0nLCAnPicsICc8J107XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIFsnPicsICc8J107XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIFsnPScsICchPSddO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gcmV0dXJucyB3aGV0aGVyIHRoZSBmaXJzdCBjb2x1bW4gc2V0IGlzIGEgc3Vic2V0IG9mIHRoZSBzZWNvbmRcclxuXHRpc0NvbHVtblN1YnNldCAoZmlyc3QsIHNlY29uZCwgc2Vjb25kVHJ1ZSkge1xyXG5cdFx0aWYgKGZpcnN0ID09PSB0cnVlKSAvLyA9PT0gb3BlcmF0b3IgbmVlZGVkIGhlcmVcclxuXHRcdFx0cmV0dXJuIHNlY29uZFRydWU7XHJcblxyXG5cdFx0Ly8gd2hlbiBzZWNvbmRUcnVlIGlzIHRoZSBjYXNlIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGRlcml2ZWQgY29sdW1uc1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgZmlyc3QpIHtcclxuXHRcdFx0aWYgKCF0aGlzLmNvbnRhaW5zQ29sdW1uKGNvbHVtbiwgc2Vjb25kKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRjb250YWluc0NvbHVtbiAocmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb24pIHtcclxuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0IXRoaXMuY29udGFpbnNDb2x1bW4oXHJcblx0XHRcdFx0XHRjaGlsZENvbHVtbixcclxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1uTWFwKSB7XHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gcGFyc2VkQ29sdW1uLmNoaWxkcmVuO1xyXG5cdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZUNvbHVtbk1hcFtpdGVtVHlwZV07XHJcblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbnMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1twYXJzZWRDb2x1bW4uaWRdO1xyXG5cclxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgIXRoaXMucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjaGlsZHJlbiwgcmVzcG9uc2VDb2x1bW5NYXApKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpZmZlcmVuY2U6IGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0XHJcblx0ICogQHBhcmFtIHtBcnJheX0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyAnbWVyZ2VkJyBhbmQgJ2RpZmZlcmVuY2UnIHByb3BlcnRpZXNcclxuXHQgKi9cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdCwgc2Vjb25kKToge21lcmdlZDogUmVxdWVzdENvbHVtbnMsIGRpZmZlcmVuY2U6IFJlcXVlc3RDb2x1bW5zfSB7XHJcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxyXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogW119O1xyXG5cclxuXHRcdGlmIChzZWNvbmQgPT09IHRydWUpXHJcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiB0cnVlfTtcclxuXHJcblx0XHRjb25zdCBtZXJnZWQ6IFJlcXVlc3RDb2x1bW5zID0gY29weShmaXJzdCk7XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKGNvbHVtbiwgbWVyZ2VkKTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRkaWZmZXJlbmNlLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0bWVyZ2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XHJcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1xyXG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFkZGVkQ29sdW1uczogUmVxdWVzdENvbHVtbnMgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKFxyXG5cdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXHJcblx0XHRcdFx0YWRkZWRDb2x1bW5zLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhZGRlZENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRbY29sdW1uLmlkXTogYWRkZWRDb2x1bW5zXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cGFyc2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uKSB7XHJcblx0XHRjb25zdCBpc0xlYWYgPSB0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZyc7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGlzTGVhZiA/IHJlcXVlc3RDb2x1bW4gOiBnZXRGaXJzdFByb3BlcnR5KHJlcXVlc3RDb2x1bW4pO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGlkOiBjb2x1bW5JZCxcclxuXHRcdFx0Y2hpbGRyZW46IGlzTGVhZiA/IFtdIDogcmVxdWVzdENvbHVtbltjb2x1bW5JZF1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBNZXJnZXMgdHdvIHNldHMgb2YgcmVzcG9uc2UgY29sdW1ucy5cclxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gc2Vjb25kXHJcblx0ICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSAnbWVyZ2VkJyBhbmQgYSAnZGlmZmVyZW5jZScgcHJvcGVydHkuXHJcblx0ICovXHJcblx0bWVyZ2VSZXNwb25zZUNvbHVtbnMgKGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGNvbnN0IG1lcmdlZCA9IHt9O1xyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZmlyc3QpIHtcclxuXHRcdFx0aWYgKHNlY29uZFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBmaXJzdFtpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBtZXJnZVJlc3VsdCA9IHRoaXMubWVyZ2VSZXNwb25zZUNvbHVtbk1hcChcclxuXHRcdFx0XHRmaXJzdFtpdGVtVHlwZV0sXHJcblx0XHRcdFx0c2Vjb25kW2l0ZW1UeXBlXVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0Lm1lcmdlZDtcclxuXHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5kaWZmZXJlbmNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gc2Vjb25kKSB7XHJcblx0XHRcdGlmIChmaXJzdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xyXG5cdFx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHthcnJheX0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBkaWZmZXJlbmNlOiB0aGUgY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3QuXHJcblx0ICovXHJcblx0bWVyZ2VSZXNwb25zZUNvbHVtbk1hcCAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcclxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IGZpcnN0W2NvbHVtbklkXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xyXG5cdFx0XHRpZiAoaXNEZWZpbmVkKGZpcnN0W2NvbHVtbklkXSkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gc2Vjb25kW2NvbHVtbklkXTtcclxuXHRcdFx0ZGlmZmVyZW5jZVtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbENvbHVtbklkIChjb2x1bW5JZCkge1xyXG5cdFx0cmV0dXJuIGNvbHVtbklkLnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJztcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NDb25maWdDb2x1bW5zIChjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRpZiAodGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbih0aGlzLnBhcnNlQ29uZmlnQ29sdW1uKGNvbHVtbiksIHJlcXVlc3QpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyAoY29uZmlnQ29sdW1ucywgbG9jYWxDb2x1bW5zLCByZW1vdGVDb2x1bW5DYWxsYmFjaywgbG9jYWxDb2x1bW5DYWxsYmFjaykge1xyXG5cdFx0Y29uc3QgbG9jYWxDb2x1bW5NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGxvY2FsQ29sdW1uIG9mIGxvY2FsQ29sdW1ucylcclxuXHRcdFx0bG9jYWxDb2x1bW5NYXBbbG9jYWxDb2x1bW4uaWRdID0gbG9jYWxDb2x1bW47XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb25maWdJZCBvZiBjb25maWdDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IHBhcnNlZENvbmZpZ0lkID0gY29uZmlnSWQuc3BsaXQoUkVOREVSX0FTX1NFUEVSQVRPUik7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29uZmlnSWRbMF07XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbklkKSkge1xyXG5cdFx0XHRcdHJlbW90ZUNvbHVtbkNhbGxiYWNrKGNvbmZpZ0lkLCBjb2x1bW5JZCwgcGFyc2VkQ29uZmlnSWRbMV0pO1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gY29sdW1uIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gbG9jYWxDb2x1bW5zXHJcblx0XHRcdGlmIChsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGxvY2FsQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSk7XHJcblx0XHRcdGRlbGV0ZSBsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb25zb2xpZGF0ZUNvbHVtbnMgKGNvbmZpZ0NvbHVtbnMsIGxvY2FsQ29sdW1ucywgYWRkUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdGNvbnN0IGZpbHRlcmVkTG9jYWxDb2x1bW5zOiBMb2NhbENvbHVtbltdID0gW107XHJcblx0XHRsZXQgcmVxdWVzdENvbHVtbnMgPSBjb3B5KGFkZFJlcXVlc3RDb2x1bW5zKTtcclxuXHJcblx0XHR0aGlzLnByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMoXHJcblx0XHRcdGNvbmZpZ0NvbHVtbnMsXHJcblx0XHRcdGxvY2FsQ29sdW1ucyxcclxuXHRcdFx0KF8sIGNvbHVtbklkKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKGNvbHVtbklkLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpLCByZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdChfLCBsb2NhbENvbHVtbikgPT4ge1xyXG5cdFx0XHRcdGZpbHRlcmVkTG9jYWxDb2x1bW5zLnB1c2gobG9jYWxDb2x1bW4pO1xyXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW5zKFxyXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdFx0XHRsb2NhbENvbHVtbi52YWx1ZU9wdGlvbnMucmVxdWVzdENvbHVtbnNcclxuXHRcdFx0XHQpLm1lcmdlZDtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4ge3JlcXVlc3Q6IHJlcXVlc3RDb2x1bW5zLCBsb2NhbDogZmlsdGVyZWRMb2NhbENvbHVtbnN9O1xyXG5cdH1cclxuXHJcblx0cGFyc2VDb25maWdDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIGNvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKGNvbHVtbkFycmF5LCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW5BcnJheVswXTtcclxuXHRcdGNvbnN0IGlzTGVhZiA9IGNvbHVtbkFycmF5Lmxlbmd0aCA9PT0gMTtcclxuXHJcblx0XHRpZiAoaXNMZWFmKSB7XHJcblx0XHRcdGlmIChkZXN0aW5hdGlvbi5pbmRleE9mKGNvbHVtbklkKSA9PT0gLTEpXHJcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChjb2x1bW5JZCk7XHJcblxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uT2JqZWN0KGNvbHVtbklkLCBkZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSkge1xyXG5cdFx0XHRjb2x1bW5JbmRleCA9IGRlc3RpbmF0aW9uLnB1c2goe1xyXG5cdFx0XHRcdFtjb2x1bW5JZF06IFtdXHJcblx0XHRcdH0pIC0gMTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oXHJcblx0XHRcdGNvbHVtbkFycmF5LnNsaWNlKDEpLFxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uSWRdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmluZENvbHVtbk9iamVjdCAoY29sdW1uSWQsIGFycmF5KSB7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGFycmF5W2ldKSA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxuXHJcblx0ZmluZENvbHVtbiAoY29sdW1uSWQsIGFycmF5KSB7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGFycmF5W2ldO1xyXG5cclxuXHRcdFx0aWYgKHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0aWYgKGNvbHVtbiA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gaTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGNvbHVtbikgPT09IGNvbHVtbklkKVxyXG5cdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAtMTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDcmVhdGVSZXF1ZXN0RW50cnkgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XG5cdHJlcXVlc3RzOiBDcmVhdGVSZXF1ZXN0RW50cnlbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbXBpbGF0aW9uLFxuXHRcdHByaXZhdGUgbG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRwcml2YXRlIHBhcmFtZXRlck1hcCxcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXG5cdCkge1xuXHR9XG5cblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zKTtcblxuXHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XG5cblx0XHRyZXR1cm4gcmVxdWVzdFJlc291cmNlO1xuXHR9XG5cblx0c2V0UmVxdWVzdFBhcmVudCAocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0O1xuXG5cdFx0aWYgKHBhcmVudFR5cGUgPT09ICdWb2lkJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJlcXVlc3QucGFyZW50VHlwZSA9IHBhcmVudFR5cGU7XG5cdFx0cmVxdWVzdC5wYXJlbnRJZCA9IHt9O1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRydW4gKCkge1xuXHRcdGlmICh0aGlzLmJyZWFrdXBCeVBhcmVudCkge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpID8gcGFyZW50SWQgOiBudWxsLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gdGhpcy5jb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XG5cdFx0XHRcdGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpO1xuXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGhhc1BhcmVudCA/IHBhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR2YWxpZFJlcXVlc3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbGlkUmVxdWVzdClcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdHM7XG5cdH1cblxuXHRpbml0aWFsaXplUmVxdWVzdCAoKTogQ3JlYXRlUmVxdWVzdEVudHJ5IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0XHRcdGl0ZW1zOiB7fSxcblx0XHRcdFx0Y29sdW1uczoge31cblx0XHRcdH0sXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxuXHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0Y29sbGVjdGlvbnM6IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0W3RoaXMubG9jYWxDb2xsZWN0aW9uQ2FjaGUsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllc10sXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXh0ZW5kUmVxdWVzdCAoaXRlbUVudHJpZXMsIHJlcXVlc3RQYXJlbnRJZCwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gZGVzdGluYXRpb24ucmVxdWVzdDtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XG5cdFx0XHRcdHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdID0ge307XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXHRcdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdC5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0XHRsZXQgbGlua3M7XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJlbnRJZCAhPT0gbnVsbClcblx0XHRcdFx0XHRyZXF1ZXN0LnBhcmVudElkW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XG5cblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucy5leHBhbmQoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XG5cblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGxpbmtzID0gaXRlbVJlcXVlc3QubGlua3MgPSB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEVudHJpZXMpIHtcblx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdID0gW107XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkSWQgaW4gY2hpbGRFbnRyaWVzW2NoaWxkVHlwZV0pXG5cdFx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdLnB1c2goY2hpbGRJZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoY2hpbGRFbnRyaWVzLCBudWxsLCBkZXN0aW5hdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCBDb2x1bW5FeHBhbnNpb24sIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUVudHJ5U2VydmljZSwgSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2UsIFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxubGV0IGN1cnJlbnRJZCA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRpZDogbnVtYmVyID0gY3VycmVudElkKys7XHJcblx0cXVlcnk6IGFueTtcclxuXHRjb2x1bW5zOiBDb2x1bW5TZXQ7XHJcblxyXG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcclxuXHJcblx0aW5pdGlhbDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRpdGVtczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0cmVzb3VyY2VzOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xyXG5cdGRlZmVycmVkOiBhbnk7XHJcblx0cHJvbWlzZTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+O1xyXG5cdHJlbG9hZFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyBvcHRpb25zOiBhbnlcclxuXHQpIHtcclxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XHJcblxyXG5cdFx0dGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG5cdFx0dGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHRcdHRoaXMucXVlcnkgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnByb21pc2UgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKGl0ZW1FbnRyeUNvbXBvdW5kOiB7Y29sdW1uczogQ29sdW1uU2V0LCBpdGVtczogSXRlbUVudHJ5W119KTogQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnMgPSBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zO1xyXG5cdFx0dGhpcy5pbml0aWFsID0gaXRlbUVudHJ5Q29tcG91bmQuaXRlbXM7XHJcblx0XHR0aGlzLml0ZW1zID0gaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMuc2xpY2UoKTtcclxuXHJcblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcclxuXHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XHJcblxyXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hQYXJlbnQgKGl0ZW1UeXBlLCBpdGVtSWQpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpOiB2b2lkIHtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZClcclxuXHRcdFx0Y2FsbGJhY2sobW9kKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQpOiBJdGVtRW50cnkgfCB1bmRlZmluZWQge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXRlbUlkID09PSBpdGVtSWQpXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoYWNjdW11bGF0b3IgPSBbXSk6IEl0ZW1JZFtdIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZ2V0SWRBcnJheSh0aGlzLml0ZW1zLCBhY2N1bXVsYXRvcik7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtcyAoaXRlbUVudHJpZXMsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsID0gZmFsc2UsIGNhbGxPbkFkZCA9IHRydWUsIGNhbGxPbkFjdGl2YXRlID0gdHJ1ZSk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XHJcblx0XHQvLyBsb2NhbCBlbnRyeSBtaWdodCBiZSBhZGRlZCBtdWx0aXBsZSB0aW1lcyAoZXh0ZW5kPylcclxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuY29sdW1ucy5saW5rO1xyXG5cclxuXHRcdGlmICh1cGRhdGVJbml0aWFsKSB7XHJcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0Ly8gd2hlbiBzYXZpbmcsIGl0ZW1zIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBpbiBtb2RpZmllZCBhcmUgYWRkZWQgdG8gaW5pdGlhbFxyXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdGluaXRpYWwucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9ucy5vbkFkZEluaXRpYWwoZW50cmllc0FkZGVkVG9Jbml0aWFsLCB0aGlzKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBvbkFjdGl2YXRlSXRlbSA9IGNhbGxPbkFjdGl2YXRlICYmIGNvbGxlY3Rpb25SZXNvdXJjZXMubGVuZ3RoID4gMCA/XHJcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXNbMF0ub3B0aW9ucy5vbkFjdGl2YXRlSXRlbSA6XHJcblx0XHRcdG5vb3A7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcclxuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdFx0XHRcdGlmIChwYXJlbnRDb2x1bW4gIT09IG51bGwgJiYgaXRlbUVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5tb2RpZmllZFtwYXJlbnRDb2x1bW4uaWRdID0gcGFyZW50Lml0ZW1JZDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdG1vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRvbkFjdGl2YXRlSXRlbShpdGVtRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRsZXQgcmVzdWx0O1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IGFkZGVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmFkZEl0ZW1SZXNvdXJjZXMoZW50cmllc0FkZGVkVG9Nb2RpZmllZCk7XHJcblxyXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XHJcblx0XHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcclxuXHJcblx0XHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcclxuXHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fSBlbHNlXHJcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5LCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s/KSB7XHJcblx0XHRpZiAoaWRBcnJheS5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXHJcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAocmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGVuYWJsZUNhbGxiYWNrPykge1xyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVSZW1vdmVkSXRlbXMgKGZpbHRlckZ1bmN0aW9uLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCByZW1vdmVkRnJvbU1vZGlmaWVkID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcclxuXHRcdGNvbnN0IHJlbW92ZWRGcm9tSW5pdGlhbCA9IHVwZGF0ZUluaXRpYWwgPyB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pbml0aWFsLCBmaWx0ZXJGdW5jdGlvbikgOiBbXTtcclxuXHJcblx0XHRpZiAocmVtb3ZlZEZyb21Jbml0aWFsLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9ucy5vblJlbW92ZUluaXRpYWwocmVtb3ZlZEZyb21Jbml0aWFsLCB0aGlzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcclxuXHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEZyb21Nb2Qgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZClcclxuXHRcdFx0cmVtb3ZlZEZyb21Nb2QuZGVhY3RpdmF0ZVJlc291cmNlcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcclxuXHRcdFx0Y29uc3QgcmVtb3ZlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKHJlbW92ZWRGcm9tTW9kaWZpZWQpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcclxuXHRcdFx0XHRyZXN1bHQgPSByZW1vdmVkUmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2spXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmQgKG5ld0NvbHVtbnMpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcyk7XHJcblxyXG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKHRoaXMsIHVuZGVmaW5lZCwgbmV3Q29sdW1ucykudGhlbihyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW2l0ZW1UeXBlXTtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKG5ld0NvbHVtbnMsIHJlc3BvbnNlLCBpdGVtVHlwZSwgdGhpcy5pdGVtcyk7XHJcblxyXG5cdFx0XHRcdHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zLmNhbGwoXHJcblx0XHRcdFx0XHR0aGlzLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2VJdGVtc1tpdGVtRW50cnkuaXRlbUlkXSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW1FbnRyeS5pc0xvY2FsKCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0XHR0cnVlXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0dGhpcy5leHBhbmRDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlO1xyXG5cdH1cclxuXHJcblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrKSB7XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5xdWVyeTtcclxuXHJcblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIGNvbGxlY3Rpb25SZXNvdXJjZSwgY2FsbE9uQWRkPywgdXBkYXRlSW5pdGlhbD8pIHtcclxuXHRcdGNvbnN0IGV4dGVuZGVkUXVlcnkgPSB0aGlzLmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spLm9iamVjdDtcclxuXHRcdGNvbnN0IGZ1bGxRdWVyeSA9IHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcclxuXHRcdFx0ZXh0ZW5kZWRRdWVyeSxcclxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4odGhpcy5nZXRJZEFycmF5KCkpXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIHRvZG86IGFsc28gZG8gdGhlIGxpbWl0IGNoZWNrIGluIGJhdGNoRXh0ZW5kXHJcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKFxyXG5cdFx0XHR0aGlzLFxyXG5cdFx0XHQvLyBXaGVuIHRoZXJlJ3MgYSBsaW1pdCB3ZSB3YW50IHRvIGZldGNoIGFsbCBpdGVtcyBiZWNhdXNlIHdlIHdpbGwgZG8gc29ydGluZyBhbmQgc3BsaWNpbmcgb2YgdGhlIGV4Y2VzcyBpdGVtc1xyXG5cdFx0XHR0aGlzLm9wdGlvbnMubGltaXQgIT09IG51bGwgP1xyXG5cdFx0XHRcdGV4dGVuZGVkUXVlcnkgOlxyXG5cdFx0XHRcdGZ1bGxRdWVyeVxyXG5cdFx0KS50aGVuKHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHQvLyByZW1vdmVBYnNlbnRJdGVtcyhyZXNwb25zZSk7IFRPRE86IHdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiB3ZSByZXF1ZXN0ICphbGwqIHRoZSBpdGVtc1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW3RoaXMuaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0dGhpcy5wYXJlbnQsXHJcblx0XHRcdFx0XHR0aGlzLmNvbHVtbnNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihpdGVtRW50cmllcyA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGNvbGxlY3Rpb25SZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgY2FsbE9uQWRkLCBmYWxzZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnByb21pc2UgPSBwcm9taXNlLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBwcm9taXNlO1xyXG5cdH1cclxuXHJcblx0cXVldWVSZWxvYWQgKCkge1xyXG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcclxuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcclxuXHR9XHJcblxyXG5cdGV4cGFuZENvbHVtbnMgKGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKHRoaXMuY29sdW1ucyk7XHJcblxyXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHRoaXMuY29sdW1ucyA9IGV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XHJcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0dGhpcy5jb2x1bW5zLmV4cGFuZFJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHRnZXRBZGRlZEl0ZW1zIChyZXR1cm5JdGVtSWRzID0gZmFsc2UpIHtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeSB8IEl0ZW1JZD4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xyXG5cdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzID0gZmFsc2UpIHtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeSB8IEl0ZW1JZD4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpbml0aWFsKSB7XHJcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0VXBkYXRlZEl0ZW1zICgpIHtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xyXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkgJiYgaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRoYXNBZGRlZEl0ZW1zICgpIHtcclxuXHRcdHJldHVybiB0aGlzLml0ZW1zLmxlbmd0aCA+IHRoaXMuaW5pdGlhbC5sZW5ndGg7XHJcblx0fVxyXG5cclxuXHRoYXNSZW1vdmVkSXRlbXMgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW5pdGlhbC5sZW5ndGggPiB0aGlzLml0ZW1zLmxlbmd0aDtcclxuXHR9XHJcblxyXG5cdGhhc1VwZGF0ZWRJdGVtcyAoKSB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBtb2RpZmllZEl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xyXG5cdFx0XHRpZiAobW9kaWZpZWRJdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldEN1cnJlbnRSZXNvdXJjZSAoKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YnRhYkNoYW5nZSA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpdGVtRW50cmllcyA9IHRoaXMuaXRlbXM7IC8vIFRPRE86IGluaXRpYWxcclxuXHRcdGNvbnN0IGN1cnJlbnRSZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHRcdGNvbnN0IG5ld1Jlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHQvLyB3ZSdsbCBhZGQgdGhlIGl0ZW0gcmVzb3VyY2VzIGJhY2sgaW4gbGF0ZXJcclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjdXJyZW50UmVzb3VyY2VzKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9uc1tpc1N1YnRhYkNoYW5nZSA/ICdjbGVhck9uU3ViVGFiQ2hhbmdlJyA6ICdjbGVhck9uVGFiQ2hhbmdlJ10pXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRuZXdSZXNvdXJjZXMucHVzaChjb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlLml0ZW1zKVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5lbnRyeS5yZXNvdXJjZXMucHVzaChpdGVtUmVzb3VyY2UpOyAvLyByZXNvdXJjZXMgc2hvdWxkIGJlIGVtcHR5IGJ5IG5vdyA6LSlcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnJlc291cmNlcyA9IG5ld1Jlc291cmNlcztcclxuXHR9XHJcblxyXG5cdC8vIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xyXG5cdHJldmVydENoYW5nZXMgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSA8SXRlbUVudHJ5W10+IHRoaXMuZ2V0UmVtb3ZlZEl0ZW1zKCk7XHJcblx0XHRjb25zdCBhZGRlZEl0ZW1zID0gPEl0ZW1FbnRyeVtdPiB0aGlzLmdldEFkZGVkSXRlbXMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xyXG5cdFx0XHRyZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKHJlbW92ZWRJdGVtcyk7XHJcblx0XHRcdHJlc291cmNlLnJlbW92ZUl0ZW1SZXNvdXJjZXMoYWRkZWRJdGVtcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaW5pdGlhbC5zbGljZSgpO1xyXG5cdH1cclxuXHJcblx0b25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XHJcblx0XHRcdHJlc291cmNlLnJlYnVpbGRNYXAoKTtcclxuXHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldFVwZGF0ZWRJdGVtQ29sdW1ucyAoY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuaXRlbTtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xyXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW4uaWRdID0gY29sdW1uO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAocGFyZW50LCBjb252ZXJzaW9uTWFwPzogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgY2xvbmVkSXRlbUVudHJpZXMgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuYmF0Y2hDbG9uZSh0aGlzLml0ZW1zLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNsb25lZEl0ZW1FbnRyeSBvZiBjbG9uZWRJdGVtRW50cmllcylcclxuXHRcdFx0Y2xvbmVkSXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyh0aGlzLm9wdGlvbnMsIHBhcmVudClcclxuXHRcdClcclxuXHRcdFx0LnJlc29sdmUoXHJcblx0XHRcdFx0e2NvbHVtbnM6IHRoaXMuY29sdW1ucywgaXRlbXM6IGNsb25lZEl0ZW1FbnRyaWVzfVxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0aGFzRWRpdFJlc291cmNlcyAoKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xyXG5cdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5lZGl0Q29sbGVjdGlvbilcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRoYXNJdGVtRWRpdFJlc291cmNlcyAoKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xyXG5cdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5lZGl0SXRlbXMpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBmaWx0ZXJBcnJheSB9IGZyb20gJy4uL2NsYXNzZXMvVXRpbCc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGl0ZW1zOiBJdGVtUmVzb3VyY2VbXTtcclxuXHRpdGVtSWRNYXA6IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCA9IHt9O1xyXG5cdGNvbHVtbnM7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBlbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0cHVibGljIG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2U7XHJcblx0XHR0aGlzLml0ZW1JZE1hcCA9IHt9O1xyXG5cdFx0dGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xyXG5cclxuXHRcdHRoaXMuYWRkSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtcyk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBudW1iZXIpOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUlkTWFwW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRyZWJ1aWxkTWFwICgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaXRlbUlkTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xyXG5cdFx0XHRpdGVtSWRNYXBbaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSBpdGVtSWRNYXA7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7IC8vIHNob3VsZCBiZSBmYXN0XHJcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGl0ZW1JZE1hcCA9IHRoaXMuaXRlbUlkTWFwO1xyXG5cdFx0Y29uc3QgY29uc3RydWN0b3IgPSB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuZ2V0Q29uc3RydWN0b3IoXHJcblx0XHRcdHtcclxuXHRcdFx0XHRlZGl0OiBvcHRpb25zLmVkaXRJdGVtcyxcclxuXHRcdFx0XHRvbkNoYW5nZTogb3B0aW9ucy5vbkNoYW5nZSxcclxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG9wdGlvbnMub25EZWFjdGl2YXRlSXRlbVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0XHRsZXQgaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUlkTWFwW2l0ZW1JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0aXRlbXMucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gaXRlbVJlc291cmNlO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBpdGVtSWRNYXBbaXRlbUlkXTtcclxuXHJcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSBpdGVtRW50cmllc1xyXG5cdCAqIEByZXR1cm5zIHtJdGVtUmVzb3VyY2VbXX1cclxuXHQgKlxyXG5cdCAqIFJldHVybnMgdGhlIEl0ZW1yZXNvdXJjZXMgdGhhdCB3aGVyZSByZW1vdmVkIENvbGxlY3Rpb24uXHJcblx0ICogRmlsdGVycyBvbiBJdGVtUmVzb3VyY2UuZW50cnkgPT09IEl0ZW1FbnRyeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmaWx0ZXJBcnJheShcclxuXHRcdFx0dGhpcy5pdGVtcyxcclxuXHRcdFx0aXRlbVJlc291cmNlID0+IHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gaXRlbUVudHJ5KSB7XHJcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLml0ZW1JZE1hcFtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjYWxsT25BZGQgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25BZGQoaXRlbVJlc291cmNlcywgdGhpcyk7XHJcblx0fVxyXG5cclxuXHRjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25SZW1vdmUoaXRlbVJlc291cmNlcywgdGhpcyk7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiB2b2lkKSB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRjYWxsYmFjayhpdGVtUmVzb3VyY2UpO1xyXG5cdH1cclxuXHJcblx0ZmlsdGVyIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKSB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZpcnN0IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogSXRlbVJlc291cmNlIHwgbnVsbCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5maXJzdChjYWxsYmFjaykgIT09IG51bGw7XHJcblx0fVxyXG5cclxuXHRncm91cEJ5IChhcmd1bWVudCkge1xyXG5cdFx0Y29uc3QgaXRlbXNSZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGl0ZW1SZXNvdXJjZS5maWVsZHNbYXJndW1lbnRdO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRtYXAgKGFyZ3VtZW50KSB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGxlbmd0aCA9IGl0ZW1SZXNvdXJjZXMubGVuZ3RoO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcclxuXHRcdFx0XHRyZXN1bHRbaV0gPSBpdGVtUmVzb3VyY2VzW2ldLmZpZWxkc1thcmd1bWVudF07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZXNbaV0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZWR1Y2U8VD4gKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHZhbHVlOiBUKSA9PiBULCB2YWx1ZTogVCk6IFQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0dmFsdWUgPSBjYWxsYmFjayhpdGVtUmVzb3VyY2UsIHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIHJldHVybkFsbEl0ZW1zLCBlbmFibGVDYWxsYmFja3MpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrcyA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuZXh0ZW5kKHF1ZXJ5Q2FsbGJhY2ssIHRoaXMsIGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0LnRoZW4oaXRlbVJlc291cmNlcyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHJldHVybkFsbEl0ZW1zID8gdGhpcy5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZSAoKTogdm9pZCB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbih0aGlzKTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpbmRleCA9IGNvbGxlY3Rpb25SZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcclxuXHJcblx0XHRpZiAoaW5kZXggIT09IC0xKVxyXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0aXRlbVJlc291cmNlLmNsZWFyUmVzb3VyY2UoKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld1Jlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRzdXBlcihpdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZSc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4vSXRlbUVudHJ5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRzdXBlcihpdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xyXG5cdH1cclxuXHJcblx0c2F2ZSAoKSB7XHJcblx0XHRpZiAoIXRoaXMub3B0aW9ucy5lbmFibGVTYXZlKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IFNhdmluZyBkaXNhYmxlZCcpO1xyXG5cclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwgJiYgdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoW10sIFtjb2xsZWN0aW9uRW50cnldKTtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IHVzZSBjYWxsYmFjayBmdW5jdGlvblxyXG5cdG1vdmVJdGVtcyAoaWRBcnJheSwgZGVzdGluYXRpb24sIGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMuZW5hYmxlU2F2ZSB8fCBvcHRpb25zLm1vZEluc3RhbnQpXHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IHNhdmluZyBlbmFibGVkJyk7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSAhPT0gZGVzdGluYXRpb24uZW50cnkuaXRlbVR5cGUpXHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IGl0ZW1UeXBlIG1pc21hdGNoJyk7XHJcblxyXG5cdFx0Y29uc3QgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2Ugb2YgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2gocmVtb3ZlZEl0ZW1SZXNvdXJjZS5lbnRyeSk7XHJcblxyXG5cdFx0ZGVzdGluYXRpb24uZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGRlc3RpbmF0aW9uLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHJcblx0XHRyZXR1cm4gcmVtb3ZlZEl0ZW1SZXNvdXJjZXM7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtcyAoaWRBcnJheSwgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrcyA9IHRydWU7XHJcblxyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGZhbHNlKTtcclxuXHJcblx0XHRpZiAodGhpcy5vcHRpb25zLm1vZEluc3RhbnQpXHJcblx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1SZXNvdXJjZXMpO1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlSXRlbSAoaXRlbUlkLCBlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdHJldHVybiB0aGlzLnJlbW92ZUl0ZW1zKFtpdGVtSWRdLCBlbmFibGVDYWxsYmFja3MpLnRoZW4oaXRlbVJlc291cmNlcyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1zICh2YWx1ZXNBcnJheSwgZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hUZW1wbGF0ZSh0aGlzLmVudHJ5Lml0ZW1UeXBlKS50aGVuKHRlbXBsYXRlID0+IHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdFx0XHRsZXQgaXRlbVJlc291cmNlcztcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXNBcnJheSkge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXHJcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGUsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWUuZmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlLmRlcml2ZWRcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5vcHRpb25zLm1vZEluc3RhbnQpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtICh2YWx1ZXMsIGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoW3ZhbHVlc10sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY2xlYXIodGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2x1bW5JbmZvLCBDb2x1bW5TZXQsIEl0ZW1FbnRyeVNlcnZpY2UsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQUxMX1BFUk1JU1NJT05TIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEF1dGhJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxubGV0IGN1cnJlbnRJZCA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5IHtcclxuXHRpZDogbnVtYmVyID0gKytjdXJyZW50SWQ7XHJcblxyXG5cdGRlZmVyUmVxdWVzdCA9IGZhbHNlO1xyXG5cdGRlZmVycmVkO1xyXG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcclxuXHJcblx0aW5pdGlhbDogRmllbGRNYXA7XHJcblx0bW9kaWZpZWQ6IEZpZWxkTWFwO1xyXG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xyXG5cclxuXHRyZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRwdWJsaWMgaXRlbUlkOiBJdGVtSWQsXHJcblx0XHRwdWJsaWMgY29sdW1uczogQ29sdW1uU2V0XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRkZWZlciAoZGVmZXJSZXF1ZXN0KTogdGhpcyB7XHJcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xyXG5cdFx0dGhpcy5kZWZlclJlcXVlc3QgPSBkZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcclxuXHJcblx0XHQvLyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBtaWdodCBkZWZlciB0aGUgaXRlbSBhZ2Fpbiwgc28gZGVsZXRlIHRoZSBwcm9wZXJ0aWVzIGZpcnN0XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVyUmVxdWVzdDtcclxuXHJcblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZURlZmVycmVkIChpbml0aWFsLCBkZXJpdmVkLCBjb2x1bW5zKTogdGhpcyB7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xyXG5cdFx0dGhpcy5wcm9jZXNzKGluaXRpYWwsIGRlcml2ZWQpO1xyXG5cdFx0dGhpcy5yZXNvbHZlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmRlZmVycmVkICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRyZWplY3QgKGVycm9yPyk6IHRoaXMge1xyXG5cdFx0Ly8gdG9kbzogdHJhbnNsYXRlZCBlcnJvclxyXG5cdFx0dGhpcy5kZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xyXG5cclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cHJvY2VzcyAoaW5pdGlhbCwgZGVyaXZlZCk6IHRoaXMge1xyXG5cdFx0dGhpcy5pbml0aWFsID0gaW5pdGlhbDtcclxuXHRcdHRoaXMuZGVyaXZlZCA9IGRlcml2ZWQ7XHJcblxyXG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQ7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UodGhpcy5pbml0aWFsLCBmb3JtYXR0ZWRDb2x1bW5zLm1haW4pO1xyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UodGhpcy5kZXJpdmVkLCBmb3JtYXR0ZWRDb2x1bW5zLmRlcml2ZWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0xvY2FsIChpbml0aWFsLCBtb2RpZmllZCwgZGVyaXZlZCwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHRoaXMge1xyXG5cdFx0dGhpcy5pbml0aWFsID0ge3Blcm1pc3Npb25zOiBBTExfUEVSTUlTU0lPTlN9O1xyXG5cclxuXHRcdHRoaXMudXBkYXRlRmllbGRzKGluaXRpYWwpO1xyXG5cdFx0dGhpcy51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cdFx0dGhpcy5zZXRNb2RpZmllZChtb2RpZmllZCk7XHJcblxyXG5cdFx0dGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcclxuXHRcdHRoaXMuc2V0Q3JlYXRvcigpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0Q3JlYXRvciAoKTogdGhpcyB7XHJcblx0XHR0aGlzLm1vZGlmaWVkLmNyZWF0b3IgPSB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlcklkKCk7XHJcblx0XHR0aGlzLm1vZGlmaWVkLmNyZWF0ZWQgPSBtb21lbnQoKTtcclxuXHRcdHRoaXMuZGVyaXZlZFsnY3JlYXRvcj5kaXNwbGF5bmFtZSddID0gdGhpcy5hdXRoSW50ZXJmYWNlLmdldFVzZXJEaXNwbGF5bmFtZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2xvbmUgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblx0XHRjb25zdCBuZXdJdGVtSWQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZXhwYW5kQ29udmVyc2lvbk1hcCh0aGlzLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHQvLyB3ZSdsbCBjb3B5IG1vZGlmaWVkIHRvIHJlc3VsdC5pbml0aWFsIChpbml0aWFsIG1heSBiZSBhIHRlbXBsYXRlKVxyXG5cdFx0Y29uc3QgY2xvbmVkRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRuZXdJdGVtSWQsXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5nZXRGaWVsZHMoKSwge30sIGNvbHVtbnMubWFpbiksXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5kZXJpdmVkLCB7fSwgY29sdW1ucy5kZXJpdmVkKSxcclxuXHRcdFx0Y29sdW1uc1xyXG5cdFx0KTtcclxuXHJcblx0XHRjbG9uZWRFbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5Lm1vZGlmaWVkID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhjbG9uZWRFbnRyeS5pbml0aWFsLCB7fSwgY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gY2xvbmVkRW50cnk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKHRoaXMuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5LnNldFBhcmVudChcclxuXHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxyXG5cdFx0XHRwYXJlbnRJZCA9PT0gdW5kZWZpbmVkID8gcGFyZW50Lml0ZW1JZCA6IHBhcmVudElkXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBjbG9uZWRFbnRyeTtcclxuXHR9XHJcblxyXG5cdHJlc2V0RGVyaXZlZCAoY29sdW1uSWRzKTogdGhpcyB7XHJcblx0XHRjb25zdCBzZWxmID0gdGhpcztcclxuXHJcblx0XHRjb25zdCByb290Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5yb290O1xyXG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xyXG5cdFx0XHRpZiAoY29sdW1uSWRzLmluZGV4T2YoY29sdW1uLmlkKSAhPT0gLTEpXHJcblx0XHRcdFx0ZmlsdGVyZWRDb2x1bW5zLnB1c2goY29sdW1uKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShmaWx0ZXJlZENvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5IChjb2x1bW5zKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0XHRpZiAoIWNvbHVtbi5pc0xlYWYpXHJcblx0XHRcdFx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShjb2x1bW4uY2hpbGRyZW4pO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgc2VsZi5kZXJpdmVkW2NvbHVtbi5wYXRoXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZXMgKCk6IHRoaXMge1xyXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7IC8vIG9uIG9mIHRoZSBkZWFjdGl2YXRlIGNhbGxiYWNrcyBtaWdodCBjYWxsIGNsZWFyUmVzb3VyY2VzXHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXHJcblx0XHRcdHJlc291cmNlLmRlYWN0aXZhdGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGdldEZpZWxkcyAoKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsO1xyXG5cdH1cclxuXHJcblx0Ly8gc2hvdWxkIGJlIGZhc3RcclxuXHQvLyB0b2RvOiB0eXBlIGNvbHVtbkV4cGFuc2lvblJlc3VsdFxyXG5cdGV4cGFuZCAobWFpbiwgZGVyaXZlZCwgY29sdW1uRXhwYW5zaW9uUmVzdWx0KTogdGhpcyB7XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2U7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQubWVyZ2VkO1xyXG5cclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxyXG5cdFx0XHR0aGlzLmluaXRpYWwsXHJcblx0XHRcdG1haW4sXHJcblx0XHRcdGRpZmZlcmVuY2UubWFpblxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcclxuXHRcdFx0dGhpcy5kZXJpdmVkLFxyXG5cdFx0XHRkZXJpdmVkLFxyXG5cdFx0XHRkaWZmZXJlbmNlLmRlcml2ZWRcclxuXHRcdCk7XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXHJcblx0XHRcdHRoaXMubW9kaWZpZWQsXHJcblx0XHRcdG1haW4sXHJcblx0XHRcdGRpZmZlcmVuY2UubWFpblxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8vIGtleTogaW5pdGlhbCAvIG1vZGlmaWVkXHJcblx0Ly8gZmllbGRzICpoYXZlbid0KiBiZWVuIGZvcm1hdHRlZCB5ZXRcclxuXHR1cGRhdGVGaWVsZHMgKHNvdXJjZSwgb3ZlcndyaXRlID0gdHJ1ZSk6IHRoaXMge1xyXG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcclxuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZm9ybWF0dGVkLm1haW47XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdGlmIChtb2RpZmllZCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblxyXG5cdFx0XHRcdGlmIChvdmVyd3JpdGUgfHwgdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gc291cmNlW2NvbHVtbklkXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UobW9kaWZpZWQsIGZvcm1hdHRlZENvbHVtbnMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cclxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBzb3VyY2VbY29sdW1uSWRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbVZhbHVlIChmaWVsZHMsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XHJcblx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBmaWVsZHNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGxldCBuZXdWYWx1ZTtcclxuXHJcblx0XHRpZiAoYXBpQ29sdW1uLnR5cGUgPT09ICdsaW5rJyAmJiBjdXJyZW50VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpXHJcblx0XHRcdFx0bmV3VmFsdWUgPSB0aGlzLnBhcmVudC5pdGVtSWQ7XHJcblx0XHR9IGVsc2VcclxuXHRcdFx0bmV3VmFsdWUgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKGFwaUNvbHVtbi5pdGVtVHlwZSwgY3VycmVudFZhbHVlLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRpZiAobmV3VmFsdWUgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IG5ld1ZhbHVlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbUZpZWxkcyAoY29udmVyc2lvbk1hcCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuaXRlbTtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlKGluaXRpYWwsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAobW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlKG1vZGlmaWVkLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdCAoKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge307XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlcXVlc3QoXHJcblx0XHRcdHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQodGhpcy5pdGVtSWQpID8ge30gOiB0aGlzLmluaXRpYWwsXHJcblx0XHRcdHRoaXMubW9kaWZpZWQsXHJcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c2V0RGlzcGxheU5hbWUgKCk6IHRoaXMge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5nZXREaXNwbGF5TmFtZSgpO1xyXG5cclxuXHRcdGlmIChyZXN1bHQpXHJcblx0XHRcdHRoaXMubW9kaWZpZWQuZGlzcGxheW5hbWUgPSByZXN1bHQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXREaXNwbGF5TmFtZSAoKSB7XHJcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xyXG5cclxuXHRcdHN3aXRjaCAodGhpcy5pdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdDb250YWN0JzpcclxuXHRcdFx0XHRyZXR1cm4gZmllbGRzLnR5cGUgPT09ICdiZWRyaWpmJyA/XHJcblx0XHRcdFx0XHRmaWVsZHMuYmVkcmlqZiA6IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcclxuXHRcdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcclxuXHRcdFx0XHRcdFx0ZmllbGRzLm5hYW1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxyXG5cdFx0XHRjYXNlICdQZXJzb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0RnVsbE5hbWUoXHJcblx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXHJcblx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcclxuXHRcdFx0XHRcdGZpZWxkcy5hY2h0ZXJuYWFtXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSAnUmVwYXJhdGllJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5kZXJpdmVkWydtYXRlcmlhYWw+bmFhbSddOyAvLyBUT0RPIVxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmaWVsZHNbdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldFRpdGxlRmllbGQodGhpcy5pdGVtVHlwZSldO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XHJcblx0ICovXHJcblx0Z2V0Q2hhbmdlcyAocmV0dXJuQWxsID0gZmFsc2UpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQgJiYgIXJldHVybkFsbClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5nZXRDaGFuZ2VzKFxyXG5cdFx0XHR0aGlzLmluaXRpYWwsXHJcblx0XHRcdHJldHVybkFsbCA/IHt9IDogdGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHRoaXMuaXRlbUlkKTtcclxuXHR9XHJcblxyXG5cdGlzTG9ja2FibGUgKCkge1xyXG5cdFx0aWYgKHRoaXMuaXNMb2NhbCgpKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxyXG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxyXG5cdFx0XHRjYXNlICdDb250YWN0JzpcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcclxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGhhc0NoYW5nZXMgKCkge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5oYXNDaGFuZ2VzKFxyXG5cdFx0XHR0aGlzLmluaXRpYWwsXHJcblx0XHRcdHRoaXMubW9kaWZpZWQsXHJcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzZXRNb2RpZmllZCAoKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbi5pZF0gPSB0aGlzLmFwaUZvcm1hdHRlci5jbG9uZShcclxuXHRcdFx0XHRjb2x1bW4uYXBpQ29sdW1uLnR5cGUsXHJcblx0XHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbi5pZF1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldEluaXRpYWwgKHZhbHVlcywgZW5hYmxlQ2FsbGJhY2tzPyk6IHRoaXMge1xyXG5cdFx0bGV0IHByZXZpb3VzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UodGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmluaXRpYWwsIHt9LCB0aGlzLmNvbHVtbnMubWFpbikpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0cHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMubW9kaWZpZWQsIHt9LCB0aGlzLmNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEb2VzIGEgc2hhbGxvdyBjb3B5IG9mIHZhbHVlcyFcclxuXHQgKi9cclxuXHRzZXRNb2RpZmllZCAodmFsdWVzPyk6IHRoaXMge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IGNvbHVtbnMucmVzcG9uc2VbdGhpcy5pdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkID0ge307XHJcblxyXG5cdFx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucy5tYWluKTtcclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuc2hhbGxvd0NvcHlGaWVsZHModmFsdWVzLCBpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcclxuXHRcdFx0XHRcdGlmIChyZXNwb25zZUNvbHVtbnNbY29sdW1uSWRdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcclxuXHRcdFx0XHRcdFx0Ly8gaWYgKERFVl9NT0RFKVxyXG5cdFx0XHRcdFx0XHQvLyBcdGNvbnNvbGUud2Fybignc2V0TW9kaWZpZWQ6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XHJcblxyXG5cdFx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXHJcblx0XHRcdFx0cmVzb3VyY2UuZmllbGRzID0gbW9kaWZpZWQ7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXREZXJpdmVkICh2YWx1ZXMpOiB0aGlzIHtcclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldFBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpOiB0aGlzIHtcclxuXHRcdHRoaXMucGFyZW50ID0ge1xyXG5cdFx0XHRpdGVtVHlwZTogcGFyZW50VHlwZSxcclxuXHRcdFx0aXRlbUlkOiBwYXJlbnRJZFxyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXMpOiB0aGlzIHtcclxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5yZXNvdXJjZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VzW2ldO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1SZXNvdXJjZSAhPT0gbnVsbClcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2Uub3B0aW9ucy5vbkNoYW5nZShpdGVtUmVzb3VyY2UsIHByZXZpb3VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRmllbGRNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZSB7XHJcblx0Y29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW59O1xyXG5cdGZpZWxkczogRmllbGRNYXA7XHJcblx0ZGVyaXZlZDogRmllbGRNYXA7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBlbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0cHVibGljIG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHRoaXMuZGVyaXZlZCA9IGVudHJ5LmRlcml2ZWQ7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLnJlc3BvbnNlW2VudHJ5LmNvbHVtbnMuaXRlbVR5cGVdO1xyXG5cclxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xyXG5cdH1cclxuXHJcblx0aXNOZXdSZXNvdXJjZSAocmVzb3VyY2UpIHtcclxuXHRcdHJldHVybiByZXNvdXJjZS5lbnRyeS5pc0xvY2FsKCkgJiZcclxuXHRcdFx0cmVzb3VyY2UudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2UgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBpbmRleCA9IHJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdHJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZSAoKSB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlKHRoaXMuZW50cnkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVmlld1Jlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRlbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0b3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMpO1xyXG5cclxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdGVudHJ5LmluaXRpYWwgOiBlbnRyeS5tb2RpZmllZDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtBcGlGb3JtYXR0ZXIsIENoYW5nZXNQcm9jZXNzb3IsIGNyZWF0ZVBhdGgsIExvY2tTZXJ2aWNlfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZpZWxkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRWRpdFJlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcclxuXHRsb2NhbENvcGllczogRmllbGRNYXBbXSA9IFtdO1xyXG5cdHRyYW5zYWN0aW9uczogbnVtYmVyO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3I6IENoYW5nZXNQcm9jZXNzb3IsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0ZW50cnkuc2V0TW9kaWZpZWQoKTtcclxuXHJcblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xyXG5cdH1cclxuXHJcblx0c3RhcnQgKCkge1xyXG5cdFx0aWYgKHRoaXMubG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5sb2NhbENvcGllcyA9IFtdO1xyXG5cclxuXHRcdHRoaXMubG9jYWxDb3BpZXMucHVzaCh0aGlzLmNvcHlGaWVsZHMoKSk7XHJcblx0fVxyXG5cclxuXHRyb2xsYmFjayAoKSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5sb2NhbENvcGllcy5wb3AoKSwgaXRlbUVudHJ5Lm1vZGlmaWVkLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRpZiAodGhpcy5pc05ld1Jlc291cmNlKHRoaXMpICYmIHRoaXMubG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcclxuXHR9XHJcblxyXG5cdGNvbW1pdCAoaW5pdGlhbCkge1xyXG5cdFx0aWYgKCFpbml0aWFsKVxyXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzLnBvcCgpO1xyXG5cclxuXHRcdC8vIGNvbXBsZXRlZCB0cmFuc2FjdGlvbnNcclxuXHRcdGlmICh0aGlzLnRyYW5zYWN0aW9ucyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLnRyYW5zYWN0aW9ucyA9IDA7XHJcblxyXG5cdFx0dGhpcy50cmFuc2FjdGlvbnMrKztcclxuXHR9XHJcblxyXG5cdGdldExvY2FsQ29weSAoKSB7XHJcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XHJcblxyXG5cdFx0aWYgKGxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGlmIChsb2NhbENvcGllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBsb2NhbENvcGllc1tsb2NhbENvcGllcy5sZW5ndGggLSAxXTtcclxuXHR9XHJcblxyXG5cdGNvcHlGaWVsZHMgKGRlc3RpbmF0aW9uPykge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHJcblx0XHRpZiAoZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZGVzdGluYXRpb24gPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkubW9kaWZpZWQsIGRlc3RpbmF0aW9uLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHR9XHJcblxyXG5cdHNldEZpZWxkcyAodmFsdWVzLCBjYWxsT25DaGFuZ2UpIHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcztcclxuXHRcdGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XHJcblx0XHRsZXQgcHJldmlvdXM7XHJcblxyXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjYWxsT25DaGFuZ2UgPSB0cnVlO1xyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXHJcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdGhhc0NoYW5nZXMgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UgJiYgaGFzQ2hhbmdlcylcclxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cykge1xyXG5cdFx0dGhpcy5lbnRyeS5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cdH1cclxuXHJcblx0c2F2ZSAocGFyYW1ldGVycz8pIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XHJcblx0XHRjb25zdCBwYXJhbWV0ZXJNYXAgPSB7fTtcclxuXHJcblx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdFx0cGFyYW1ldGVyTWFwLFxyXG5cdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRcdFt7fSwgcGFyYW1ldGVyc11cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRpdGVtRW50cnkuaXNMb2NrYWJsZSgpID9cclxuXHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayhpdGVtRW50cnkpIDpcclxuXHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Ly8gYWRkVG9Db2xsZWN0aW9ucyBpcyBjYWxsZWQgaW4gY2hhbmdlc1Byb2Nlc3NvclxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3IuZXhlY3V0ZShbaXRlbUVudHJ5XSwgW10sIGZhbHNlLCBwYXJhbWV0ZXJNYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0VkaXRSZXNvdXJjZSc7XHJcbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25DYWNoZSxcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRJdGVtQ2FjaGUsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2FsQ2FjaGUsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgTG9jYWxDYWNoZUZhY3RvcnksIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCwgSXRlbUlkLFxuXHRJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCwgSXRlbVR5cGUsXG5cdFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAsXG5cdFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1BZG1pbmlzdHJhdG9yIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZUZhY3Rvcnk6IExvY2FsQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgbW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gaWQgY2FuIGJlIGEga2V5d29yZCBvciBhIGxvY2FsIGlkIChpbiBjYXNlIG9mIGEgcmVmcmVzaClcblx0Z2V0SXRlbURlZmluaXRpb24gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBhbnksIG9wdGlvbnM6IGFueSkge1xuXHRcdGNvbnN0IHN0YXRlS2V5OiBhbnkgPSB0aGlzLmtleVNlcnZpY2UucGFyc2VTdGF0ZUtleShpdGVtSWQpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHtpdGVtVHlwZTogaXRlbVR5cGUsIG9wdGlvbnM6IG9wdGlvbnMsIGl0ZW1JZDogaXRlbUlkfTtcblxuXHRcdGlmIChzdGF0ZUtleSAhPT0gbnVsbCkge1xuXHRcdFx0c3dpdGNoIChzdGF0ZUtleS50eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ25ldyc6XG5cdFx0XHRcdFx0Ly8gaWYgKHN0YXRlS2V5LnRlbXBsYXRlLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0Ly8gXHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9IHt0eXBlOiBzdGF0ZUtleS50ZW1wbGF0ZX07XG5cblx0XHRcdFx0XHRyZXN1bHQuaXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZHVwbGljYXRlJzpcblx0XHRcdFx0XHRvcHRpb25zLmR1cGxpY2F0ZSA9IHN0YXRlS2V5Lml0ZW1JZDtcblxuXHRcdFx0XHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSAvLyB0b2RvOiByZWZhY3RvciB0aGlzXG5cdFx0XHRcdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9IHt9O1xuXG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPSBzdGF0ZUtleS5pdGVtSWQ7XG5cblx0XHRcdFx0XHRyZXN1bHQuaXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsRHVwbGljYXRlSWQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRyZXN1bHQuaXRlbUlkID0gaXRlbUlkO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uTWF0Y2hlciAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhZGRUb1RhYjogYm9vbGVhbik6IENvbGxlY3Rpb25NYXRjaGVyIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLCBmYWxzZSwgdHJ1ZSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Ly8gdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGFyZSBubyBjb2xsZWN0aW9ucyB0byBhZGQgdGhlIGl0ZW0gdG8sIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNhdmUgdGhlIGl0ZW1cblx0XHRcdGlmIChhZGRUb1RhYilcblx0XHRcdFx0bG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyO1xuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGUsIGl0ZW1JZCwgZGVmZXJSZXF1ZXN0KSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hUaXRsZShpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QsIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdC8vIHRvZG8gdHlwZSBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwIHwgSXRlbUVudHJ5XG5cdFx0XHQoaXRlbUVudHJ5UmVzb3VyY2U6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoXG5cdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UubGlua2VkICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UubWFpbiA6XG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZSxcblx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1zQnlJZCAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkczogbnVtYmVyW10sIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW1zKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1zQnlRdWVyeSAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnk6IGFueSwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VbXT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7fTtcblxuXHRcdHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSA9IGVudHJ5T3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZFBhcmVudENvbmRpdGlvbihxdWVyeSwgZW50cnlPcHRpb25zLnBhcmVudCksXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0ZW50cnlPcHRpb25zLnBhcmVudCxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2VzKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RHVwbGljYXRlQnlJZCAoaXRlbVR5cGU6IHN0cmluZywgZHVwbGljYXRlSWQ6IG51bWJlciwgb3B0aW9uczogYW55KSB7XG5cdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdG9wdGlvbnMgPSB7fTtcblxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XG5cblx0XHRjb25zdCBkZWZpbml0aW9uID0gdGhpcy5nZXRJdGVtRGVmaW5pdGlvbihcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldER1cGxpY2F0ZVN0YXRlS2V5KGR1cGxpY2F0ZUlkKSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbUJ5RGVmKGRlZmluaXRpb24sIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGRlcGVuZGVkIG9uIHRoZSByZXR1cm4gbGlua3MgYm9vbGVhbi4gdHJ1ZSByZXR1cm5zIHRoZSBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLlxuXHQgKiBUaGUgdHlwZSBoYXMgdG8gYmUgYXNzZXJ0ZWQgYXQgdXNlIHNpbmNlIHlvdSBvbmx5IGtub3cgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0dXJuTGlua3Ncblx0ICogQHBhcmFtIHtib29sZWFufSBpc1Jvb3Rcblx0ICogQHJldHVybnMge1Byb21pc2U8SXRlbVJlc291cmNlPiB8IFByb21pc2U8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD59XG5cdCAqL1xuXHRnZXROZXdSZXNvdXJjZSAoXG5cdFx0aXRlbVR5cGU6IHN0cmluZyxcblx0XHRvcHRpb25zOiBhbnkgPSB7fSxcblx0XHRyZXR1cm5MaW5rczogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlPiB8IFByb21pc2U8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG1haW4gPSBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnlSZXNvdXJjZS5tYWluLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdFx0XHRjb25zdCBsaW5rZWQgPSB0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQsIG9wdGlvbnMsIHRydWUpOyAvLyBkbyB0aGlzIGJlZm9yZWhhbmRcblxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuTGlua3MgPyB7bWFpbjogbWFpbiwgbGlua2VkOiBsaW5rZWR9IDogbWFpbjtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkRlZiAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSwgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBjb2x1bW4gdmFsdWVcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNEZWYgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgbGlua0ZpZWxkOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRsaW5rVHlwZTogbGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheTogbGlua0lkQXJyYXksXG5cdFx0XHRsaW5rRmllbGQ6IGxpbmtGaWVsZCxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxuXHRcdFx0XHRcdGVudHJ5LFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGVudHJ5LCBkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2UpO1xuXG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGBwYXJlbnRgIGluIG9wdGlvbnNcblx0ICovXG5cdGdldExpbmtDb2xsZWN0aW9uIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWQ6IG51bWJlciwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0ZW50cnlPcHRpb25zLnBhcmVudCA9IHtpdGVtVHlwZTogbGlua1R5cGUsIGl0ZW1JZDogbGlua0lkfTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRlbnRyeU9wdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcblx0XHRcdFx0XHRlbnRyeSxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWRBcnJheTogbnVtYmVyW10sIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcblx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0bGlua0lkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNGcm9tRGVmIChkZWZpbml0aW9uOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcblx0XHRcdGRlZmluaXRpb24ubGlua1R5cGUsXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtJZEFycmF5LFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxuXHRcdFx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShsaW5rVHlwZSwge30sIHt9KVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRMaW5rQ29sbGVjdGlvbnMoXG5cdFx0XHRcdFx0XHRsaW5rVHlwZSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1CeURlZiAoZGVmaW5pdGlvbjogYW55LCBpc1Jvb3Q6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtSWQsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoZGVmaW5pdGlvbi5vcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlDb21wb3VuZCA9PiB7XG5cdFx0XHRcdGxldCBtYWluRW50cnk6IEl0ZW1FbnRyeTtcblxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5Q29tcG91bmQgaW5zdGFuY2VvZiBJdGVtRW50cnkpXG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gaXRlbUVudHJ5Q29tcG91bmQ7XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeUNvbXBvdW5kLmxpbmtlZCwgZGVmaW5pdGlvbi5vcHRpb25zLCBmYWxzZSk7XG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gaXRlbUVudHJ5Q29tcG91bmQubWFpbjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShtYWluRW50cnksIGRlZmluaXRpb24ub3B0aW9ucywgaXNSb290KTsgLy8gaXNSb290XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsb25lSXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIG9wdGlvbnM6IGFueSk6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtUmVzb3VyY2UuZW50cnkuY2xvbmUoKSwgb3B0aW9ucywgZmFsc2UpO1xuXHR9XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSwgb3B0aW9uczogYW55LCBjb252ZXJzaW9uTWFwOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdGxldCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZClcblx0XHRcdHBhcmVudCA9IG51bGw7XG5cblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmVudHJ5LmNsb25lKHBhcmVudCwgY29udmVyc2lvbk1hcCksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdHNhdmVDdXJyZW50TG9jYWxDYWNoZSAoY2xvc2VUYWI6IGJvb2xlYW4sIHBhcmFtZXRlcnM6IGFueSwgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2UsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjazogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnNhdmUoY2xvc2VUYWIsIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKTtcblx0fVxuXG5cdGdldEN1cnJlbnRDb2xsZWN0aW9ucyAoKTogQ29sbGVjdGlvbkNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuY29sbGVjdGlvbnM7XG5cdH1cblxuXHRnZXRDdXJyZW50SXRlbXMgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zO1xuXHR9XG5cblx0Z2V0Q3VycmVudENoYW5nZXMgKCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdGlmIChsb2NhbENhY2hlLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2l0ZW1BZG1pbmlzdHJhdG9yOiBObyByb290IGl0ZW0hJyk7XG5cblx0XHRyZXR1cm4gdGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGxvY2FsQ2FjaGUucm9vdEl0ZW0sXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9uc1xuXHRcdCkucHJvY2VzcygpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogYW55LFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpXG5cdCk6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0bG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zOiBhbnkpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSwgbG9jYWxDYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSBsb2NhbENhY2hlLmNvbGxlY3Rpb25zO1xuXG5cdFx0aWYgKCFjb2xsZWN0aW9uQ2FjaGUuY29udGFpbnMoY29sbGVjdGlvbkVudHJ5KSlcblx0XHRcdGNvbGxlY3Rpb25DYWNoZS5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTGlua2VkSXRlbXMgKGxpbmtlZEVudHJpZXM6IFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBbXSwgb3B0aW9uczogYW55LCBhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuKTogSXRlbVJlc291cmNlSXRlbVR5cGVNYXAge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gZW50cnkuaXRlbVR5cGU7XG5cdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IGVudHJ5Lml0ZW1FbnRyaWVzO1xuXHRcdFx0bGV0IGNvbGxlY3Rpb25NYXRjaGVyO1xuXG5cdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRpdGVtUmVzb3VyY2VzW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRpdGVtUmVzb3VyY2VzW2l0ZW1UeXBlXS5wdXNoKGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UpKTtcblxuXHRcdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRpZiAoaXRlbVR5cGUgPT09ICdQcm9qZWN0bm90aXRpZScpIHtcblx0XHRcdFx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0XHRcdFx0bG9jYWxDYWNoZS50YWJSZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0XHRcdFx0W3t9LCB7bm9fbm90aWZpY2F0aW9uOiB0cnVlfV1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHRoZSBpdGVtRW50cmllcyBhcmUgaW4gdG9wLWRvd24gb3JkZXIsIHNvIGNhbGwgZm9yIGVhY2ggaXRlbSB0eXBlIHNlcGFyYXRlbHlcblx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5hZGRUb0NvbGxlY3Rpb25zKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdH1cblxuXHRnZXRMb2NhbENhY2hlICgpOiBMb2NhbENhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5sb2NhbENhY2hlTWFuYWdlci5nZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCkpO1xuXHR9XG5cblx0cmVzZXRMb2NhbENhY2hlICgpIHtcblx0XHRjb25zdCBvbGRMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMubG9jYWxDYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHRvbGRMb2NhbENhY2hlLmNsZWFyUmVzb3VyY2VzKCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLnNldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSwgbG9jYWxDYWNoZSk7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSkge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzLCB0cnVlKVxuXHRcdFx0LmFkZFRvQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgZmFsc2UpXG5cdFx0XHQucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdH1cblxuXHRzYXZlTG9jYWwgKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbVJlc291cmNlLmVudHJ5O1xuXG5cdFx0aXRlbUVudHJ5LnNldERpc3BsYXlOYW1lKCk7XG5cdFx0dGhpcy5hZGRUb0NvbGxlY3Rpb25zKFtpdGVtRW50cnldKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbihpdGVtUmVzb3VyY2UpO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkTWFwIChjb2xsZWN0aW9uTWFwOiBhbnksIGNvbnZlcnNpb25NYXApIHtcblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBvbGRJZCBpbiBjb252ZXJzaW9uTWFwKSB7XG5cdFx0XHRjb25zdCBuZXdJZCA9IGNvbnZlcnNpb25NYXBbb2xkSWRdO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtvbGRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGNvbGxlY3Rpb25NYXBbbmV3SWRdID0gY29sbGVjdGlvbk1hcFtvbGRJZF07XG5cdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtvbGRJZF07XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChjb2xsZWN0aW9uRW50cnk6IGFueSwgcmVzb3VyY2VPcHRpb25zOiBhbnksIHByb2Nlc3NPcHRpb25zID0gdHJ1ZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdHByb2Nlc3NPcHRpb25zID8gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHJlc291cmNlT3B0aW9ucykgOiByZXNvdXJjZU9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IGFueSwgb3B0aW9uczogYW55LCBpc1Jvb3Q6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdG9uQmVmb3JlU2F2ZSAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uQmVmb3JlU2F2ZScsIGtleSwgY2FsbGJhY2spO1xuXHR9XG5cblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uU2F2ZVN1Y2Nlc3MnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxuXG5cdG9uU2F2ZVdpdGhvdXRDbG9zaW5nIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25TYXZlV2l0aG91dENsb3NpbmcnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlIHtcclxuXHRlbnRyaWVzOiB7XHJcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogSXRlbUVudHJ5XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgaW5zdGFuY2VvZiBJdGVtRW50cnkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0Y2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRnZXQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdFxyXG5cdGNvbnRhaW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdGlmIChwYXJlbnRUeXBlID09PSBwYXJlbnQuaXRlbVR5cGUgJiYgcGFyZW50SWQgPT0gcGFyZW50Lml0ZW1JZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQpIHtcclxuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XHJcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcclxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XHJcblx0Ly8gdG9kbzogdHJhbnNsYXRlXHJcblx0dW5kZWZpbmVkSXRlbUVycm9yID0gJ0hldCBvcGdldnJhYWdkZSBpdGVtIGJlc3RhYXQgbmlldCAvIEplIGhlYnQgbmlldCB2b2xkb2VuZGUgcmVjaHRlbiBvbSBkaXQgaXRlbSB0ZSBiZWtpamtlbic7XHJcblx0QUxMX1BFUk1JU1NJT05TID0gNztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb2x1bW5zOiB0cnVlLFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxyXG5cdFx0XHRcdHRlbXBsYXRlQ29sdW1uczoge30sXHJcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkb0V4dGVuZCA9IGZhbHNlLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcclxuXHRcdGNvbnN0IGFwaUl0ZW1JZCA9IGFwaVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcclxuXHJcblx0XHRpZiAoZG9FeHRlbmQpXHJcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmRMb2NhbENvbnZlcnNpb25NYXAgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV1bcGFyZW50SWRdLmxpbmtzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcclxuXHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIG5ld0l0ZW1JZD86IEl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdGxldCBjb252ZXJzaW9uTWFwRW50cnk7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcclxuXHJcblx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdID0gbmV3SXRlbUlkO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHR0aGlzLmV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHR9XHJcblxyXG5cdGdldENvbnZlcnNpb25WYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRiYXRjaENsb25lIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdC8vIHRoZSB0aGUgaXRlbXMgbWlnaHQgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHNvIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3RcclxuXHRcdHRoaXMuYmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyaWVzLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5LmNsb25lKGNvbnZlcnNpb25NYXApKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZSwgaW5maXgsIGxhc3ROYW1lKSB7XHJcblx0XHRyZXR1cm4gZmlyc3ROYW1lLnRyaW0oKVxyXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXHJcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XHJcblx0fVxyXG5cclxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxyXG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xyXG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcclxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XHJcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcclxuXHRcdFx0XHRyZXR1cm4gJ2ZyaWVuZGx5bmFtZSc7XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxyXG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW1pbnRlcm4nO1xyXG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcclxuXHRcdFx0Y2FzZSAnQmFyY29kZSc6XHJcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcclxuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcclxuXHRcdFx0Y2FzZSAnQmV0YWxpbmdzY29uZGl0aWUnOlxyXG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XHJcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcclxuXHRcdFx0Y2FzZSAnVGF4U2NoZW1hJzpcclxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWVncm9lcCc6XHJcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XHJcblx0XHRcdGNhc2UgJ0luaHV1cic6XHJcblx0XHRcdGNhc2UgJ0luaHV1cmdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsQ2F0JzpcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XHJcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxyXG5cdFx0XHRjYXNlICdQbGFubmluZ21hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxyXG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdTdWJwcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnVGFhayc6XHJcblx0XHRcdGNhc2UgJ1RhZyc6XHJcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcclxuXHRcdFx0Y2FzZSAnVGlqZCc6XHJcblx0XHRcdGNhc2UgJ1RpdGVsJzpcclxuXHRcdFx0Y2FzZSAnVHlwZSc6XHJcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xyXG5cdFx0XHQvLyBjYXNlICdDb250YWN0JzpcclxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcclxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXHJcblx0XHRcdFx0cmV0dXJuICdkaXNwbGF5bmFtZSc7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3IsXHJcblx0QmF0Y2hTdGF0dXMsXHJcblx0Q29sdW1uSGFuZGxlcixcclxuXHRDb2x1bW5VdGlsLFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbUVudHJ5RmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXNwb25zZSwgQXBpVGVtcGxhdGVJdGVtVHlwZU1hcCwgRW50cnlTdGF0dXMsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLFxyXG5cdFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAsIFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBcclxufSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi9Db2x1bW5TZXQnO1xyXG5cclxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG4vLyB0b2RvIG1ha2UgY2xhc3NcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtSGFuZGxlciB7XHJcblx0ZW50cmllczogSXRlbUNhY2hlO1xyXG5cdHRlbXBsYXRlczogQXBpVGVtcGxhdGVJdGVtVHlwZU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnksIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeSB8IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IHtcclxuXHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyeVN0YXR1cy5lbnRyeTtcclxuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcclxuXHJcblx0XHRpZiAoc3RhdHVzID09PSBFTlRSWV9TVEFUVVMuTE9DQUwpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKVxyXG5cdFx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdFx0dGVtcGxhdGUgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBvcHRpb25zLnBhcmVudCwgdGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKGl0ZW1FbnRyeSwgc3RhdHVzLCBvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIGl0ZW1JZHNcclxuXHQgKiBAcGFyYW0gb3B0aW9uc1xyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1FbnRyeVtdPn1cclxuXHQgKlxyXG5cdCAqIEZvciBldmVyeSBpdGVtaWQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcclxuXHQgKiBhIHVzYWJsZSBJdGVtRW50cnlcclxuXHQgKi9cclxuXHJcblx0ZmV0Y2hJdGVtcyAoaXRlbVR5cGUsIGl0ZW1JZHMsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpdGVtSWRzKVxyXG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoPEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4+IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGUpKTtcclxuXHJcblx0XHRwcm9taXNlcy5lbnRyaWVzID0gYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKTtcclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzUmVxdWVzdHMoKSlcclxuXHRcdFx0cHJvbWlzZXMucmVxdWVzdHMgPSB0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgYmF0Y2hTdGF0dXMuZ2V0UmVxdWVzdElkcygpLCBvcHRpb25zLmNvbHVtbnMpO1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSlcclxuXHRcdFx0cHJvbWlzZXMudGVtcGxhdGUgPSB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5iYXRjaFJlc29sdmUoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLCBvcHRpb25zLmNvbHVtbnMsIHJlc29sdmVkLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVDYWNoZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUywgb3B0aW9ucyk6IFByb21pc2U8SXRlbUVudHJ5PiB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3Q7XHJcblxyXG5cdFx0c3dpdGNoIChzdGF0dXMpIHtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbUVudHJ5KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSxcclxuXHRcdFx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5kaWZmZXJlbmNlO1xyXG5cclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgW2l0ZW1JZF0sIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXHJcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgY29sdW1uRGlmZmVyZW5jZSwgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHRcdGRlZmF1bHQ6IC8vIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxyXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBbaXRlbUlkXSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXHJcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZVJlbW90ZShcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMucmVzb2x2ZShyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJlc29sdmVMb2NhbCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHBhcmVudCwgdGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGl0ZW1JZENvbnZlcnNpb24gPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcclxuXHJcblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpOyAvLyBjcmVhdGUgbmV3IG9iamVjdFxyXG5cclxuXHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHQucHJvY2Vzc0xvY2FsKHRlbXBsYXRlLmZpZWxkcywge30sIHt9LCBpdGVtSWRDb252ZXJzaW9uKVxyXG5cdFx0XHQuc2V0Q3JlYXRvcigpXHJcblx0XHRcdC5yZXNvbHZlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bWFpbjogaXRlbUVudHJ5LFxyXG5cdFx0XHRsaW5rZWQ6IHRoaXMuY3JlYXRlTG9jYWxFbnRyaWVzKGl0ZW1UeXBlLCBpdGVtSWQsIHRlbXBsYXRlLCBpdGVtSWRDb252ZXJzaW9uLCBsb2NhbEl0ZW1DYWNoZSlcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRXhwYW5zaW9uIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlOiBBcGlSZXNwb25zZSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHQvLyBBbm90aGVyIHJlcXVlc3QgYWxyZWFkeSByZXF1ZXN0ZWQgdGhlIGNvbHVtbnMgd2UgbmVlZCBoZXJlLCBubyBuZWVkIHRvIGV4cGFuZCB0aGUgaXRlbSBhbmQgcmVzb2x2ZSBpdCAoYWxyZWFkeSBkb25lIGJ5IG90aGVyIHJlcXVlc3QpXHJcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdCksXHJcblx0XHRcdGV4cGFuc2lvblJlc3VsdFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnJlc29sdmUoKTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVSZW1vdGUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5TZXQ6IENvbHVtblNldCwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBpbml0aWFsID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0aWYgKGluaXRpYWwgPT09IHVuZGVmaW5lZCkgeyAvLyBxdWVyeSByZXR1cm5lZCBubyByZXN1bHRzXHJcblx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcclxuXHRcdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChcclxuXHRcdFx0aW5pdGlhbCxcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldC5yb290KSxcclxuXHRcdFx0Y29sdW1uU2V0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUZW1wbGF0ZSAoaXRlbVR5cGU6IHN0cmluZywgdGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fSwgdGVtcGxhdGVDb2x1bW5zOiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5JdGVtVHlwZSA9IGdldEZpcnN0UHJvcGVydHkodGVtcGxhdGVDb2x1bW5zKTsgLy8gaXQncyBwb3NzaWJsZSB0byBhZGQgY29sdW1ucyB0byBsaW5rZWQgaXRlbXNcclxuXHJcblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjYWNoZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRjYWNoZWRUZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdFx0KFxyXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVXRpbC5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUoXHJcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRjYWNoZWRUZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFtcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcclxuXHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgP1xyXG5cdFx0XHRcdHt9IDpcclxuXHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goY29sdW1uSXRlbVR5cGUsIHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0pXHJcblx0XHRdKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZTogYW55ID0gcmVzb2x2ZWRbMF07XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxyXG5cdFx0XHRcdFx0dGVtcGxhdGVSZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSxcclxuXHRcdFx0XHRcdHJlc29sdmVkWzFdXHJcblx0XHRcdFx0KS5tZXJnZWQ7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSB7XHJcblx0XHRcdFx0XHRmaWVsZHM6IHRlbXBsYXRlUmVzcG9uc2UuZmV0Y2hPYmplY3QoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucyksXHJcblx0XHRcdFx0XHRyZXNwb25zZTogdGVtcGxhdGVSZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uczogcmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMgJiYgdGVtcGxhdGVSZXNwb25zZS5jYWNoZWFibGUpXHJcblx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV0gPSB0ZW1wbGF0ZTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55LCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogRW50cnlTdGF0dXM8SXRlbUVudHJ5PiB7XHJcblx0XHRsZXQgaXRlbUVudHJ5O1xyXG5cclxuXHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkpIHtcclxuXHRcdFx0aXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGl0ZW1FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIGZhbHNlKTtcclxuXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XHJcblx0XHR9XHJcblxyXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKX07XHJcblxyXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5kZWZlclJlcXVlc3QpO1xyXG5cclxuXHRcdGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0dGhpcy5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGVudHJ5OiBpdGVtRW50cnksXHJcblx0XHRcdHN0YXR1czogb3B0aW9ucy5kZWZlclJlcXVlc3QgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGlzQ29sdW1uU3VwZXJzZXQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgfHwgaXRlbUVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKGNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gb3B0aW9ucy5jb2x1bW5zO1xyXG5cclxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMuZXhwYW5kUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0aGlzLmlzQ29sdW1uU3VwZXJzZXQoaXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1ucykgP1xyXG5cdFx0XHRcdEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6XHJcblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5pc0NvbHVtblN1cGVyc2V0KGl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnMpKVxyXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcclxuXHJcblx0XHRpdGVtRW50cnkuZGVmZXIoZmFsc2UpO1xyXG5cclxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0ge0JhdGNoU3RhdHVzfSBiYXRjaFN0YXR1c1xyXG5cdCAqIEBwYXJhbSByZXF1ZXN0Q29sdW1uc1xyXG5cdCAqIEBwYXJhbSByZXNvbHZlZFxyXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cclxuXHQgKlxyXG5cdCAqIGZvciBldmVyeSB0eXBlIG9mIGVudHJ5IHN0YXR1cyB0aGVyZSBpcyBpbiB0aGlzIGJhdGNoIHJlcXVlc3QgbWFrZSBzdXJlIHRoZSBlbnRyaWVzIGdldCByZXNvbHZlZC5cclxuXHQgKiB0aGVuIHJldHVybiBhIGFycmF5IG9mIHRoZSByZXN1bHRpbmcgSXRlbUVudHJ5QXJyYXlcclxuXHQgKi9cclxuXHRiYXRjaFJlc29sdmUgKGl0ZW1UeXBlLCBiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXMsIHJlcXVlc3RDb2x1bW5zLCByZXNvbHZlZCwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IEl0ZW1FbnRyeVtdIHwgUHJvbWlzZTxhbnk+IHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlID0gcmVzb2x2ZWQucmVxdWVzdHM7XHJcblx0XHRjb25zdCBleHBhbmRTdGF0dXMgPSBbRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XHJcblx0XHRjb25zdCByZXNvbHZlU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5SRVNPTFZFXTtcclxuXHJcblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoZXhwYW5kU3RhdHVzKSkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpO1xyXG5cclxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRcdGV4cGFuZFN0YXR1cywgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihpdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhyZXNvbHZlU3RhdHVzKSkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcclxuXHJcblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0XHRyZXNvbHZlU3RhdHVzLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZShpdGVtRW50cnksIGNvbHVtbkluZm8sIHJlc3BvbnNlKSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuTE9DQUxdLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgbnVsbCwgcmVzb2x2ZWQudGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0b2RvOiBubyBpdGVtIGVycm9yICh7bWVzc2FnZTogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVuZGVmaW5lZEl0ZW1FcnJvcn0pXHJcblx0XHRyZXR1cm4gc3VjY2VzcyA/IGJhdGNoU3RhdHVzLmdldEFycmF5KCkgOiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdGxvY2FsUGFyZW50SWQ6IEl0ZW1JZCxcclxuXHRcdHRlbXBsYXRlLFxyXG5cdFx0aXRlbUlkQ29udmVyc2lvbjogSXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcclxuXHQpOiBUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwW10ge1xyXG5cdFx0Y29uc3QgYXBpUmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXNwb25zZTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm9NYXAgPSB7fTtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IHt9O1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTx7aXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W119PiA9IFtdO1xyXG5cclxuXHRcdC8vIFRPRE86IGRpc2FibGUgY2FjaGluZz9cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gYXBpUmVzcG9uc2UuaXRlbXMpIHtcclxuXHRcdFx0aWYgKGl0ZW1UeXBlID09PSBwYXJlbnRUeXBlKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29sdW1uSW5mb01hcFtpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0dGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgY3JlYXRlRW50cmllcyA9IChwYXJlbnRUeXBlMiwgbG9jYWxQYXJlbnRJZDIsIGFwaVBhcmVudElkKSA9PiB7XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IHtpdGVtVHlwZTogcGFyZW50VHlwZTIsIGl0ZW1JZDogbG9jYWxQYXJlbnRJZDJ9O1xyXG5cdFx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGUyXVthcGlQYXJlbnRJZF0ubGlua3M7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XHJcblx0XHRcdFx0aWYgKCFsaW5rcy5oYXNPd25Qcm9wZXJ0eShpdGVtVHlwZSkpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdFx0Ly8gdGhlIGl0ZW0gZW50cmllcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlc3VsdCBpbiB0b3AtZG93biBvcmRlclxyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHQucHVzaCh7aXRlbVR5cGU6IGl0ZW1UeXBlLCBpdGVtRW50cmllczogaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IFtdfSk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgYXBpSXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGxvY2FsSXRlbUlkID0gaXRlbUlkQ29udmVyc2lvbltpdGVtVHlwZV1bYXBpSXRlbUlkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbExpbmtlZChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdGxvY2FsSXRlbUlkLFxyXG5cdFx0XHRcdFx0XHRhcGlSZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgYXBpSXRlbUlkKSxcclxuXHRcdFx0XHRcdFx0cGFyZW50LFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdFx0aXRlbUlkQ29udmVyc2lvblxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRcdGNyZWF0ZUVudHJpZXMoaXRlbVR5cGUsIGxvY2FsSXRlbUlkLCBhcGlJdGVtSWQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHRjcmVhdGVFbnRyaWVzKHBhcmVudFR5cGUsIGxvY2FsUGFyZW50SWQsIGFwaVJlc3BvbnNlLmxpbmtzW3BhcmVudFR5cGVdWzBdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZGVmZXJSZXF1ZXN0ID0gdHJ1ZSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSkge1xyXG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaEl0ZW0oXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyh7Y29sdW1uczogW3RpdGxlRmllbGRdLCBkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdH0pLFxyXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQvLyB0b2RvOiBJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwXHJcblx0XHRcdChlbnRyeTogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKGVudHJ5Lm1haW4gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybiBlbnRyeS5tYWluLmdldEZpZWxkcygpW3RpdGxlRmllbGRdO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtcyAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkczogSXRlbUlkW10sIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiBpdGVtSWRzfSwge1tpdGVtVHlwZV06IGNvbHVtbnN9KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uU2V0LCBJdGVtSGFuZGxlciwgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEVudHJ5UGFyZW50TnVsbCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1SZXF1ZXN0U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcclxuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHtpZDogaXRlbUlkfSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbXMgKFxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRxdWVyeSA9IGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QsXHJcblx0XHRjb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xyXG5cdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucztcclxuXHJcblx0XHRjb25zdCBwYXJhbXMgPSB7XHJcblx0XHRcdHJlcXVlc3RUeXBlOiAncXVlcnknLFxyXG5cdFx0XHRpdGVtVHlwZTogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsID8gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlIDogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlLFxyXG5cdFx0XHRjb2x1bW5zOiB7W2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV06IGNvbHVtbnN9LFxyXG5cdFx0XHRxdWVyeTogcXVlcnksXHJcblx0XHRcdGxpbWl0OiBudWxsXHJcblx0XHR9O1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmxpbWl0ICE9PSBudWxsKVxyXG5cdFx0XHRwYXJhbXMubGltaXQgPSBvcHRpb25zLmxpbWl0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdExpbmtJdGVtcyAocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XHJcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID9cclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdHtpZDogcGFyZW50SWRBcnJheX0sXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdFx0KSA6XHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxyXG5cdFx0XHRcdFx0cXVlcnksXHJcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgLy8gc2hvdWxkIGNvbnRhaW4gYSBkZXJpdmVkIGNvbHVtbiB0aGF0IHJlZmVycyB0byB0aGUgcGFyZW50XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzRXhwYW5zaW9uIChyZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbjtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NSZXNwb25zZSAoXHJcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXHJcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxyXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXHJcblx0XHRjb2x1bW5FeHBhbnNpb24/OiBDb2x1bW5FeHBhbnNpb25cclxuXHQpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0Y29sdW1uU2V0Lml0ZW1UeXBlLFxyXG5cdFx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWUgPyB0cnVlIDogY29sdW1uU2V0LnJlcXVlc3QsXHJcblx0XHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5TZXQuaXRlbVR5cGU7XHJcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtblNldC5yb290O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PFByb21pc2U8SXRlbUVudHJ5Pj4gPSBbXTtcclxuXHJcblx0XHQvLyBzaG91bGQgYmUgZmFzdC4uLlxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSkge1xyXG5cdFx0XHRsZXQgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtSWQsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXHJcblx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXHJcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0PENvbHVtbkV4cGFuc2lvbj4gY29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUNhY2hlZEl0ZW0gKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsID9cclxuXHRcdFx0aXRlbUVudHJ5IDpcclxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxyXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2UgKFxyXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgcGFyZW50SXRlbXMgPSByZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXTtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0sXHJcblx0XHRcdFx0XHRjb2x1bW5TZXQsXHJcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHQpIDpcclxuXHRcdFx0XHRbXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0LFxyXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uOiBjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xuaW1wb3J0IHsgRWRpdFJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGVkaXQ6IGZhbHNlLFxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCxcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBub29wXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGNvbXBhcmVPcHRpb25zIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlyc3QpIHtcblx0XHRcdGlmIChmaXJzdFtrZXldICE9PSBzZWNvbmRba2V5XSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNOZXdSZXNvdXJjZSAocmVzb3VyY2U6IEVkaXRSZXNvdXJjZSkge1xuXHRcdHJldHVybiByZXNvdXJjZS5pc0xvY2FsKCkgJiZcblx0XHRcdHJlc291cmNlLnRyYW5zYWN0aW9ucyA9PT0gdW5kZWZpbmVkO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBEVVBMSUNBVEVfS0VZV09SRCwgRFVQTElDQVRFX1BSRUZJWCwgTkVXX0tFWVdPUkQsIE5FV19QUkVGSVggfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS2V5U2VydmljZSB7XHJcblx0c2VwYXJhdG9yOiBzdHJpbmcgPSAnOic7XHJcblxyXG5cdGNvbnN0cnVjdG9yICgpIHt9XHJcblxyXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtVHlwZS5jb25jYXQodGhpcy5zZXBhcmF0b3IsIFN0cmluZyhpdGVtSWQpKTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25DYWNoZUtleSAocGFyZW50VHlwZTogc3RyaW5nLCBwYXJlbnRJZDogbnVtYmVyLCBjaGlsZFR5cGU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHBhcmVudFR5cGUuY29uY2F0KHRoaXMuc2VwYXJhdG9yLCBTdHJpbmcocGFyZW50SWQpLCB0aGlzLnNlcGFyYXRvciwgY2hpbGRUeXBlKTtcclxuXHR9XHJcblxyXG5cdGdldENzc0tleSAoKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsICdfJyk7XHJcblx0fVxyXG5cclxuXHRwYXJzZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nKSB7XHJcblx0XHRzdGF0ZUtleSA9IHN0YXRlS2V5LnRvU3RyaW5nKCk7XHJcblxyXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YoTkVXX0tFWVdPUkQpID09PSAwKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6ICduZXcnLFxyXG5cdFx0XHRcdHRlbXBsYXRlOiBzdGF0ZUtleS5zdWJzdHJpbmcoTkVXX0tFWVdPUkQubGVuZ3RoKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdGlmIChzdGF0ZUtleS5pbmRleE9mKERVUExJQ0FURV9LRVlXT1JEKSA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0eXBlOiAnZHVwbGljYXRlJyxcclxuXHRcdFx0XHRpdGVtSWQ6IHN0YXRlS2V5LnN1YnN0cmluZyhEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXREdXBsaWNhdGVTdGF0ZUtleSAoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuXHRcdHJldHVybiBEVVBMSUNBVEVfS0VZV09SRCArIGl0ZW1JZDtcclxuXHR9XHJcblxyXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIE5FV19LRVlXT1JEICsgdGVtcGxhdGVUeXBlO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxJZCAoKTogSXRlbUlkIHtcclxuXHRcdHJldHVybiArKE5FV19QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcclxuXHR9XHJcblxyXG5cdGdldExvY2FsRHVwbGljYXRlSWQgKCk6IEl0ZW1JZCB7XHJcblx0XHRyZXR1cm4gKyhEVVBMSUNBVEVfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XHJcblx0fVxyXG5cclxuXHRnZXRSYW5kb21TdHJpbmcgKCkge1xyXG5cdFx0cmV0dXJuICgnJyArIE1hdGgucmFuZG9tKCkpLnNwbGl0KCcuJylbMV0uc3Vic3RyKDAsIDgpO1xyXG5cdH1cclxuXHJcblx0Ly8gbm90ZTogdGhlIGNoYW5nZXMgY29tcGlsZXIgdXNlcyB0aGlzXHJcblx0Ly8gbWlnaHQgYmUgY2FsbGVkIHdpdGggdW5kZWZpbmVkIChpdGVtSGFuZGxlci5jcmVhdGVSZXF1ZXN0KVxyXG5cdGlzTG9jYWxJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtSWQgIT09IHVuZGVmaW5lZCAmJiAodGhpcy5pc05ld0lkKGl0ZW1JZCkgfHwgdGhpcy5pc0R1cGxpY2F0ZUlkKGl0ZW1JZCkpO1xyXG5cdH1cclxuXHJcblx0aXNOZXdJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtSWQgPT09IE5FV19LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIE5FV19QUkVGSVgubGVuZ3RoKSA9PT0gTkVXX1BSRUZJWDtcclxuXHR9XHJcblxyXG5cdGlzRHVwbGljYXRlSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gaXRlbUlkID09PSBEVVBMSUNBVEVfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBEVVBMSUNBVEVfUFJFRklYLmxlbmd0aCkgPT09IERVUExJQ0FURV9QUkVGSVg7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25DYWNoZSxcblx0SXRlbUNhY2hlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRMb2NrU2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGUge1xuXHRpdGVtczogSXRlbUNhY2hlO1xuXHRyb290SXRlbTogSXRlbUVudHJ5IHwgdW5kZWZpbmVkO1xuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHRkZWZlcnJlZENvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cdHRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XG5cblx0Y2FsbGJhY2tzID0ge29uQmVmb3JlU2F2ZToge30sIG9uU2F2ZVN1Y2Nlc3M6IHt9LCBvblNhdmVXaXRob3V0Q2xvc2luZzoge319O1xuXG5cdGNoYW5nZXNJbnRlcnZhbDogbnVsbCB8IG51bWJlciA9IG51bGw7XG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGlkOiBzdHJpbmcgPSAnJ1xuXHQpIHtcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290ID0gZmFsc2UpIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoX2l0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oX2l0ZW1FbnRyeSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKSB7XG5cdFx0cmVzb3VyY2VPcHRpb25zLm9uQWN0aXZhdGVJdGVtID0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uQWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSk7XG5cblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlSXRlbSA9IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkRlYWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSk7XG5cblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbiA9XG5cdFx0XHQoX2NvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlKSA9PiB0aGlzLmNsZWFyQ29sbGVjdGlvbihfY29sbGVjdGlvblJlc291cmNlKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKTtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgcmVzb3VyY2VPcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKVxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGNvbGxlY3Rpb25FbnRyaWVzW3BhcmVudElkXSwgcmVzb3VyY2VPcHRpb25zKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbGVhckl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtUmVzb3VyY2UuZW50cnkpO1xuXHR9XG5cblx0Y2xlYXJJdGVtRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xuXHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXHR9XG5cblx0Y2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YlRhYkNoYW5nZSA9IGZhbHNlKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGNvbGxlY3Rpb25FbnRyeS5jbGVhclJlc291cmNlcyhpc1N1YlRhYkNoYW5nZSlcblx0XHQpO1xuXG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zLmNsZWFyKCk7XG5cdH1cblxuXHR1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcCkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIG9sZEl0ZW1JZCk7XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgb2xkSXRlbUlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZXNvdXJjZXMgd2lsbCBiZSBjbGVhcmVkIGxhdGVyIChjbGVhciBmdW5jdGlvbilcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpXG5cdFx0KTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5yZXNldENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KVxuXHRcdCk7XG5cblx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmlzTG9ja2FibGUoKSA/XG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmRlbGV0ZUxvY2sodGhpcy5yb290SXRlbSkgOlxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0fVxuXG5cdHJlc2V0Q29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMoKSlcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZXZlcnRDaGFuZ2VzKCk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKCkpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKTtcblx0XHR9XG5cdH1cblxuXHRkZXRlY3RDaGFuZ2VzICgpIHtcblx0XHRpZiAodGhpcy5oYXNDaGFuZ2VzKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLml0ZW1zLnNvbWUoXG5cdFx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKVxuXHRcdFx0KVxuXHRcdClcblx0XHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRoaXMuY29sbGVjdGlvbnMuc29tZShcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5jb2xsZWN0aW9uSGFzQ2hhbmdlcyhjb2xsZWN0aW9uRW50cnkpXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdGlvbkhhc0NoYW5nZXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0Ly8gbm8gbmVlZCB0byBjYWxsIGhhc0VkaXRSZXNvdXJjZXMgaGVyZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSB2ZXJ5IHNpbXBsZVxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzQWRkZWRJdGVtcygpIHx8IGNvbGxlY3Rpb25FbnRyeS5oYXNSZW1vdmVkSXRlbXMoKSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcygpICYmIGNvbGxlY3Rpb25FbnRyeS5oYXNVcGRhdGVkSXRlbXMoKTtcblx0fVxuXG5cdGlzTG9ja2FibGUgKCkge1xuXHRcdGlmICh0aGlzLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5yb290SXRlbS5pc0xvY2thYmxlKCk7XG5cdH1cblxuXHRzYXZlIChjbG9zZVRhYiA9IGZhbHNlLCBwYXJhbWV0ZXJzLCBicmVha1VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykge1xuXHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRyZXR1cm4gKHRoaXMuaXNMb2NrYWJsZSgpID8gdGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSkgOiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25CZWZvcmVTYXZlJywgY2xvc2VUYWIpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpO1xuXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbnMudG9BcnJheSgpLFxuXHRcdFx0XHRcdGJyZWFrVXBCeVBhcmVudCxcblx0XHRcdFx0XHRyZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oY29udmVyc2lvbk1hcCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmNsZWFyTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcblxuXHRcdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2luZ2xlSXRlbXMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25TYXZlU3VjY2VzcycsIGNvbnZlcnNpb25NYXApLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFjbG9zZVRhYikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uU2F2ZVdpdGhvdXRDbG9zaW5nJywgY29udmVyc2lvbk1hcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZW5hYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tzIChldmVudCwgLi4uYXJncykge1xuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNhbGxiYWNrc1tldmVudF0pXG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuY2FsbGJhY2tzW2V2ZW50XVtrZXldLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzdWx0KTtcblx0fVxuXG5cdGVuYWJsZUNoYW5nZXNXYXRjaGVyICgpIHtcblx0XHRpZiAodGhpcy5jaGFuZ2VzSW50ZXJ2YWwgIT09IG51bGwpIHtcblx0XHRcdGNvbnNvbGUud2FybignQ2hhbmdlcyB3YXRjaGVyIGFscmVhZHkgcnVubmluZyEnLCB0aGlzKTtcblx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmRldGVjdENoYW5nZXMoKSlcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSk7XG5cdFx0XHR9LFxuXHRcdFx0MzAwMFxuXHRcdCk7XG5cdH1cblxuXHRkaXNhYmxlQ2hhbmdlc1dhdGNoZXIgKCkge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCA9PT0gbnVsbClcblx0XHRcdHJldHVybjtcblxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5jaGFuZ2VzSW50ZXJ2YWwpO1xuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gbnVsbDtcblx0fVxuXG5cdHJlZ2lzdGVyQ2FsbGJhY2sgKGV2ZW50OiBzdHJpbmcsIGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHRoaXMuY2FsbGJhY2tzW2V2ZW50XVtrZXldID0gY2FsbGJhY2s7XG5cblx0XHRyZXR1cm4gKCkgPT4gZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2V2ZW50XVtrZXldO1xuXHR9XG5cblx0b25EZWFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cblxuXHRvbkFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblx0XHQvLyB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvY2tTZXJ2aWNlIHtcclxuXHRsb2NrSXRlbXMgPSB7fTtcclxuXHRwcm9taXNlcyA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Z2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBtYXApIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHZhbHVlLCBtYXApIHtcclxuXHRcdHJldHVybiBjcmVhdGVQYXRoKFxyXG5cdFx0XHRtYXAsXHJcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRbe30sIHZhbHVlXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldExvY2tzICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmxvY2tJdGVtcztcclxuXHR9XHJcblxyXG5cdGhhc0xvY2sgKGxvY2tUb2tlbklkKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMubG9ja0l0ZW1zKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24gJiYgbG9ja0l0ZW0uaWQgPT0gbG9ja1Rva2VuSWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxyXG5cdGlzTG9ja2VkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xyXG5cclxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbjtcclxuXHR9XHJcblxyXG5cdGdldE1lc3NhZ2UgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xyXG5cclxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBsb2NrSXRlbS5tZXNzYWdlO1xyXG5cdH1cclxuXHJcblx0Ly8gZG9lcyBub3QgcmVqZWN0IHdoZW4gYSBmb3JlaWduIGxvY2sgaXMgZW5jb3VudGVyZWRcclxuXHQvLyBpcyBhbHNvIHVzZWQgYnkgZGVsZXRlTG9ja1xyXG5cdGZldGNoQ2FjaGVkTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2sgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xyXG5cclxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4obG9jayk7XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcclxuXHJcblx0XHRpZiAocHJvbWlzZSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGxvY2tJdGVtID0+IHtcclxuXHRcdFx0XHRpZiAobG9ja0l0ZW0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybiBsb2NrSXRlbTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdExvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4obG9ja0l0ZW0gPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ24gP1xyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGxvY2tJdGVtLm1lc3NhZ2UpIDpcclxuXHRcdFx0XHRcdGxvY2tJdGVtLnRva2VuO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0TG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoXHJcblx0XHRcdCdMb2NrdG9rZW4nLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxyXG5cdFx0XHR7aXRlbXR5cGU6IGl0ZW1UeXBlLCBpdGVtOiBpdGVtSWR9XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXHJcblx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcclxuXHRcdFx0XHRcdFx0J0xvY2t0b2tlbicsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzLkxvY2t0b2tlblswXVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gMzAxKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0aXNGb3JlaWduOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2VcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2NrSXRlbXNcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShpdGVtRW50cnksIHByb21pc2UsIHRoaXMucHJvbWlzZXMpO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlTG9jayAoaXRlbUVudHJ5KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGNhY2hlZExvY2sgPT4ge1xyXG5cdFx0XHRcdC8vIHVuZGVmaW5lZDogbm90IHJlcXVlc3RlZCB5ZXRcclxuXHJcblx0XHRcdFx0aWYgKGNhY2hlZExvY2sgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0aWYgKGNhY2hlZExvY2suaXNGb3JlaWduKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKCdMb2NrdG9rZW4nLCBjYWNoZWRMb2NrLmlkKVxyXG5cdFx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuY29uc3QgRU1QVFlfRU5UUlkgPSB7fTtcclxuXHJcbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdHBhcmVudE1hcDogYW55ID0ge307XHJcblx0ZGVzdGluYXRpb246IGFueSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHJvb3RJdGVtRW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdHByaXZhdGUgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzICgpIHtcclxuXHRcdHRoaXMucGFyZW50TWFwID0gdGhpcy5jcmVhdGVQYXJlbnRNYXAodGhpcy5zaW5nbGVJdGVtQ2FjaGUpO1xyXG5cdFx0dGhpcy5wcm9jZXNzSXRlbXModGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLCBbdGhpcy5yb290SXRlbUVudHJ5XSwge30pO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGl0ZW1UeXBlOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcclxuXHRcdFx0aXRlbXM6IHRoaXMuZGVzdGluYXRpb25cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVBhcmVudE1hcCAoaXRlbUNhY2hlKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRpdGVtQ2FjaGUuZm9yRWFjaChcclxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSAvLyB3ZSBkb24ndCBjYXJlIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgbGlua2VkIHRvIHRoZSByb290IGl0ZW1cclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IHBhcmVudC5pdGVtVHlwZTtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0XHRsZXQgbWFwRW50cnkgPSByZXN1bHRbcGFyZW50VHlwZV07XHJcblxyXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdG1hcEVudHJ5W3BhcmVudElkXSA9IHt9O1xyXG5cclxuXHRcdFx0XHRtYXBFbnRyeSA9IG1hcEVudHJ5W3BhcmVudElkXTtcclxuXHJcblx0XHRcdFx0aWYgKG1hcEVudHJ5W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0XHRcdG1hcEVudHJ5W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zIChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBsaW5rQWNjdW11bGF0b3IpIHtcclxuXHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdGlmIChsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdFx0Ly8gZWFjaCBpdGVtIG9ubHkgaGFzIGEgc2luZ2xlIHBhcmVudCwgc28gd2UgY2FuIHNhZmVseSBkbyB0aGlzXHJcblx0XHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdLnB1c2goaXRlbUlkKTtcclxuXHJcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gPSB0aGlzLnByb2Nlc3NJdGVtKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NJdGVtIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGNoaWxkSXRlbXMgPSB0aGlzLmdldEl0ZW1zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRjb25zdCBjaGlsZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q29sbGVjdGlvbnNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHRcdGNvbnN0IHZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XHJcblx0XHRjb25zdCBsaW5rcyA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkSXRlbXMpXHJcblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNoaWxkVHlwZSwgY2hpbGRJdGVtc1tjaGlsZFR5cGVdLCBsaW5rcyk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY2hpbGRDb2xsZWN0aW9ucykge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMucXVlcnkgIT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5pdGVtcywgbGlua3MpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGhhc1ZhbHVlcyA9IGhhc1Byb3BlcnRpZXModmFsdWVzKTtcclxuXHRcdGNvbnN0IGhhc0xpbmtzID0gaGFzUHJvcGVydGllcyhsaW5rcyk7XHJcblxyXG5cdFx0aWYgKGhhc1ZhbHVlcyAmJiBoYXNMaW5rcylcclxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlcywgbGlua3M6IGxpbmtzfTtcclxuXHJcblx0XHRpZiAoaGFzVmFsdWVzKVxyXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzfTtcclxuXHJcblx0XHRpZiAoaGFzTGlua3MpXHJcblx0XHRcdHJldHVybiB7bGlua3M6IGxpbmtzfTtcclxuXHJcblx0XHRyZXR1cm4gRU1QVFlfRU5UUlk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEl0ZW1zQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XHJcblx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMucGFyZW50TWFwW3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdGlmIChtYXBFbnRyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge307XHJcblxyXG5cdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge307XHJcblxyXG5cdFx0cmV0dXJuIG1hcEVudHJ5W3BhcmVudElkXTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzLCBpbkFycmF5IH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmNvbnN0IE1BWUJFID0gJ21heWJlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXIge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cHVibGljIGZpZWxkczogRmllbGRNYXAsXHJcblx0XHRwdWJsaWMgcGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZSwgcXVlcnlWYWx1ZSkge1xyXG5cdFx0aWYgKG1vbWVudC5pc01vbWVudChxdWVyeVZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVNb21lbnRPYmplY3RzKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24ocXVlcnlWYWx1ZSkpXHJcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRHVyYXRpb25zKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcclxuXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0cmV0dXJuIHF1ZXJ5VmFsdWUgPT0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRtYXRjaFF1ZXJ5IChxdWVyeTogYW55KTogYm9vbGVhbiB8IHN0cmluZyB7XHJcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hMaW5rZWRUb1F1ZXJ5KHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaENvbXBsZXhRdWVyeShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHRoaXMuZmllbGRzW3F1ZXJ5LmtleV0sIHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgcXVlcnkhIFBhcnNlZD8nKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hMaW5rZWRUb1F1ZXJ5IChxdWVyeSkge1xyXG5cdFx0aWYgKHF1ZXJ5LnJldmVyc2UpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGxldCBtYXRjaDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xyXG5cdFx0ZWxzZSBpZiAocXVlcnkubGlua2VkVG8gIT09IHBhcmVudC5pdGVtVHlwZSlcclxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcclxuXHRcdGVsc2VcclxuXHRcdFx0bWF0Y2ggPSB0aGlzLm1hdGNoU2ltcGxlUXVlcnkocGFyZW50Lml0ZW1JZCwgcXVlcnkucXVlcnkpO1xyXG5cclxuXHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkubm90ID8gIW1hdGNoIDogbWF0Y2g7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoQ29tcGxleFF1ZXJ5IChxdWVyeSkge1xyXG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHF1ZXJ5LmNvbmRpdGlvbnM7XHJcblxyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHRcdGxldCB0ZXJtaW5hbDtcclxuXHJcblx0XHRzd2l0Y2ggKHF1ZXJ5Lm9wZXJhdG9yKSB7XHJcblx0XHRcdGNhc2UgJ0FORCc6XHJcblx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcclxuXHRcdFx0XHR0ZXJtaW5hbCA9IGZhbHNlO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdPUic6XHJcblx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XHJcblx0XHRcdFx0dGVybWluYWwgPSB0cnVlO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBvcGVyYXRvcicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSB0aGlzLm1hdGNoUXVlcnkoY29uZGl0aW9uKTtcclxuXHJcblx0XHRcdGlmIChtYXRjaCA9PT0gdGVybWluYWwpXHJcblx0XHRcdFx0cmV0dXJuIHRlcm1pbmFsO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcclxuXHRcdFx0XHRyZXN1bHQgPSBNQVlCRTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IGtleSA9IHF1ZXJ5LmtleTtcclxuXHRcdGxldCBxdWVyeVZhbHVlID0gcXVlcnkudmFsdWU7XHJcblxyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSkgLy8gQ291bGQgYmUgbGlua2VkVG8gYW4gZW1wdHkgb2JqZWN0XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignUmVxdWlyZWQgZmllbGQnLCBrZXksICdub3QgZm91bmQgZm9yJywgdGhpcy5pdGVtVHlwZSk7XHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocXVlcnlWYWx1ZSA9PT0gJ05PVycpXHJcblx0XHRcdHF1ZXJ5VmFsdWUgPSBtb21lbnQoKTtcclxuXHJcblx0XHRzd2l0Y2ggKHF1ZXJ5LmNvbXBhcmF0b3IpIHtcclxuXHRcdFx0Y2FzZSAnPSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGNhc2UgJyE9JzpcclxuXHRcdFx0XHRyZXR1cm4gIXRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGNhc2UgJzwnOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJzw9JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPD0gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnPic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID4gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnPj0nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+PSBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICdJTic6XHJcblx0XHRcdFx0cmV0dXJuIGluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICdOT1QgSU4nOlxyXG5cdFx0XHRcdHJldHVybiAhaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIGNvbXBhcmF0b3I6ICcgKyBxdWVyeS5jb21wYXJhdG9yICsgJyBpbiBxdWVyeSAnICsgcXVlcnkpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHkgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZW51bSBDT05TVEFOVFMge1xyXG5cdE9CSiA9IDAsXHJcblx0U1RSID0gMSxcclxuXHRTRVAgPSAnOidcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyIHtcclxuXHRxdWVyeTogYW55O1xyXG5cdHBhcmFtZXRlcnM6IGFueTtcclxuXHJcblx0Y29uc3RydWN0b3IgKHF1ZXJ5LCBwYXJhbWV0ZXJzPykge1xyXG5cdFx0dGhpcy5xdWVyeSA9IHF1ZXJ5O1xyXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlICh2YWx1ZSkge1xyXG5cdFx0Ly8gYWxnb3JpdGhtIGlzIG5vdCBpbXBvcnRhbnQsIGFzIGxvbmcgYXMgYWxsIGFycmF5cyBhcmUgc29ydGVkIHRoZSBzYW1lIHdheVxyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXHJcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbih2YWx1ZSkpXHJcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29tcGFyZVBhcnNlZFF1ZXJpZXMgKGEsIGIpIHtcclxuXHRcdGlmIChhW0NPTlNUQU5UUy5TVFJdID09PSBiW0NPTlNUQU5UUy5TVFJdKVxyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHJcblx0XHRyZXR1cm4gYVtDT05TVEFOVFMuU1RSXSA+IGJbQ09OU1RBTlRTLlNUUl0gPyAxIDogLTE7XHJcblx0fVxyXG5cclxuXHRwYXJzZSAocXVlcnkgPSB0aGlzLnF1ZXJ5KSB7XHJcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VMaW5rZWRUb1F1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmxpbmtlZFRvLFxyXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxyXG5cdFx0XHRcdHF1ZXJ5LnJldmVyc2UsXHJcblx0XHRcdFx0cXVlcnkubm90XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5Lm5vdCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBcIk5vdFwiIG5vdCBzdXBwb3J0ZWQnKTtcclxuXHJcblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXHJcblx0XHRcdFx0cXVlcnkuY3VzdG9tLFxyXG5cdFx0XHRcdHF1ZXJ5LnBhcmFtZXRlcnNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2VhcmNoUXVlcnkocXVlcnkuc2VhcmNoKTtcclxuXHJcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUNvbXBsZXhRdWVyeShcclxuXHRcdFx0XHRxdWVyeS5jb25kaXRpb25zLFxyXG5cdFx0XHRcdHF1ZXJ5Lm9wZXJhdG9yXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmtleSxcclxuXHRcdFx0XHRxdWVyeS52YWx1ZSxcclxuXHRcdFx0XHRxdWVyeS5jb21wYXJhdG9yXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKGtleSA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIFt7fSwgJ3t9J107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShrZXksIHF1ZXJ5W2tleV0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZVNlYXJjaFF1ZXJ5ICh2YWx1ZSkge1xyXG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7c2VhcmNoOiB2YWx1ZVtDT05TVEFOVFMuT0JKXX0sXHJcblx0XHRcdCdbJyArICdzZWFyY2gnICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVF1ZXJ5IChjdXN0b20sIHBhcmFtZXRlcnMpIHtcclxuXHRcdGlmIChwYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0e2N1c3RvbTogY3VzdG9tfSxcclxuXHRcdFx0XHQnWycgKyBjdXN0b20gKyAnXSdcclxuXHRcdFx0XTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUN1c3RvbVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2N1c3RvbTogY3VzdG9tLCBwYXJhbWV0ZXJzOiBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5PQkpdfSxcclxuXHRcdFx0J1snICsgY3VzdG9tICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUGFyYW1ldGVycyAocGFyYW1ldGVycykge1xyXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnNvcnQoKTtcclxuXHJcblx0XHRjb25zdCBxdWVyeSA9IHt9O1xyXG5cdFx0bGV0IHN0cmluZyA9ICcnO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xyXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUocGFyYW1ldGVyc1trZXldKTtcclxuXHJcblx0XHRcdHF1ZXJ5W2tleV0gPSB2YWx1ZVtDT05TVEFOVFMuT0JKXTtcclxuXHJcblx0XHRcdGlmIChpID4gMClcclxuXHRcdFx0XHRzdHJpbmcgKz0gQ09OU1RBTlRTLlNFUDtcclxuXHJcblx0XHRcdHN0cmluZyArPSB2YWx1ZVtDT05TVEFOVFMuU1RSXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZVNpbXBsZVF1ZXJ5IChrZXksIHZhbHVlLCBjb21wYXJhdG9yPykge1xyXG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRpZiAoY29tcGFyYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb21wYXJhdG9yID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtDT05TVEFOVFMuT0JKXSkgPyAnSU4nIDogJz0nO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtrZXk6IGtleSwgdmFsdWU6IHZhbHVlW0NPTlNUQU5UUy5PQkpdLCBjb21wYXJhdG9yOiBjb21wYXJhdG9yfSxcclxuXHRcdFx0J1snICsgY29tcGFyYXRvciArIENPTlNUQU5UUy5TRVAgKyBrZXkgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlTGlua2VkVG9RdWVyeSAobGlua2VkVG8sIHF1ZXJ5LCByZXZlcnNlLCBub3QpIHtcclxuXHRcdGlmIChxdWVyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRxdWVyeSA9IHt9O1xyXG5cclxuXHRcdGlmIChyZXZlcnNlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldmVyc2UgPSBmYWxzZTtcclxuXHJcblx0XHRpZiAobm90ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG5vdCA9IGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5wYXJzZShxdWVyeSk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2xpbmtlZFRvOiBsaW5rZWRUbywgcXVlcnk6IHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5PQkpdLCByZXZlcnNlOiByZXZlcnNlLCBub3Q6IG5vdH0sXHJcblx0XHRcdCdbJyArICdsaW5rZWRUbycgKyBDT05TVEFOVFMuU0VQICsgbGlua2VkVG8gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUXVlcnlbQ09OU1RBTlRTLlNUUl0gKyBDT05TVEFOVFMuU0VQICsgcmV2ZXJzZSArIENPTlNUQU5UUy5TRVAgKyBub3QgKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ29tcGxleFF1ZXJ5IChjb25kaXRpb25zLCBvcGVyYXRvcikge1xyXG5cdFx0aWYgKG9wZXJhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9wZXJhdG9yID0gJ0FORCc7XHJcblx0XHRlbHNlXHJcblx0XHRcdG9wZXJhdG9yID0gb3BlcmF0b3IudG9VcHBlckNhc2UoKTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yOiBvcGVyYXRvcn0sXHJcblx0XHRcdCdbJyArIG9wZXJhdG9yICsgcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDb25kaXRpb25zIChjb25kaXRpb25zKSB7XHJcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9uczogb2JqZWN0W10gPSBbXTtcclxuXHRcdGNvbnN0IHF1ZXJ5OiBvYmplY3RbXSA9IFtdO1xyXG5cdFx0bGV0IHN0cmluZyA9ICcnO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpXHJcblx0XHRcdHBhcnNlZENvbmRpdGlvbnMucHVzaCh0aGlzLnBhcnNlKGNvbmRpdGlvbikpO1xyXG5cclxuXHRcdHBhcnNlZENvbmRpdGlvbnMgPSBwYXJzZWRDb25kaXRpb25zLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcGFyZVBhcnNlZFF1ZXJpZXMoYSwgYikpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcclxuXHRcdFx0cXVlcnkucHVzaChwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLk9CSl0pO1xyXG5cdFx0XHRzdHJpbmcgKz0gcGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5TVFJdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZvcm1hdFZhbHVlICh2YWx1ZSkge1xyXG5cdFx0bGV0IHByb2Nlc3NlZFZhbHVlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyYnKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IHZhbHVlLnN1YnN0cmluZygxKTtcclxuXHJcblx0XHRcdHZhbHVlID0gdGhpcy5wYXJhbWV0ZXJzW2tleV07XHJcblxyXG5cdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBVbmRlZmluZWQgdGVtcGxhdGUgcGFyYW1ldGVyIFxcJycgKyBrZXkgKyAnXFwnJyk7XHJcblxyXG5cdFx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsIGtleSArICc+JyArIHZhbHVlXTtcclxuXHRcdH1cclxuXHJcblx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCAnJyArIHByb2Nlc3NlZFZhbHVlXTtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFF1ZXJ5U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cdH1cclxuXHJcblx0YWRkQW5kQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XHJcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxyXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXX07XHJcblxyXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cclxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XHJcblx0fVxyXG5cclxuXHRhZGRPckNvbmRpdGlvbiAocXVlcnksIGNvbmRpdGlvbikge1xyXG5cdFx0aWYgKHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxyXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xyXG5cclxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXHJcblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXSwgb3BlcmF0b3I6ICdvcid9O1xyXG5cdH1cclxuXHJcblx0YWRkUGFyZW50Q29uZGl0aW9uIChxdWVyeSwgcGFyZW50KSB7XHJcblx0XHRsZXQgbGlua2VkVG9RdWVyeTtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gcXVlcnk7XHJcblxyXG5cdFx0bGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeTogcGFyZW50Lml0ZW1JZH07XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5KSB7XHJcblx0XHRyZXR1cm4ge2NvbXBhcmF0b3I6ICdOT1QgSU4nLCBrZXk6ICdpZCcsIHZhbHVlOiBpZEFycmF5fTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB7XHJcblx0cHJpdmF0ZSBjb2x1bW5zID0ge307XHJcblx0cHJpdmF0ZSBjb2x1bW5JbmZvSWRNYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRleHBhbmQgKGNvbHVtbkluZm8pIHtcclxuXHRcdGlmICh0aGlzLmNvbHVtbkluZm9JZE1hcFtjb2x1bW5JbmZvLmlkXSlcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uSW5mby5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0XHQubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdLCBjb2x1bW5JbmZvLnJlcXVlc3QpXHJcblx0XHRcdC5tZXJnZWQ7XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0gPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0Z2V0ICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbnM7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ29sbGVjdGlvbkhhbmRsZXIsIEl0ZW1IYW5kbGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaFJlc3VsdCwgRmllbGRNYXAsIEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTb2NrZXRNZXNzYWdlSGFuZGxlciB7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRvbk1lc3NhZ2VSZWNlaXZlZCAobWVzc2FnZTogYW55KTogYW55IHtcclxuXHRcdHN3aXRjaCAobWVzc2FnZS5ib2R5LmV2ZW50VHlwZSkge1xyXG5cdFx0XHRjYXNlICd1cGRhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnY3JlYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2RlbGV0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdsaW5rVG8nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUxpbmtNb3ZlKC8qIG1lc3NhZ2UgKi8pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0TWVzc2FnZVZhbHVlcyAodmFsdWVzLCBjb2x1bW5zKTogRmllbGRNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxyXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5zW2NvbHVtbklkXS50eXBlLCB2YWx1ZXNbY29sdW1uSWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sbGVjdGlvbk1hcCAoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IHtbaXRlbUlkOiBudW1iZXJdOiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHR9ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW0ucGFyZW50ICE9PSBudWxsID8gaXRlbS5wYXJlbnQgOiB7fTtcclxuXHJcblx0XHRcdHJlc3VsdFtpdGVtSWRdID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Rml0dGluZ0l0ZW0oXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0dGhpcy5mb3JtYXRNZXNzYWdlVmFsdWVzKGl0ZW0udmFsdWVzLCBjb2x1bW5zKSxcclxuXHRcdFx0XHRwYXJlbnRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z3JvdXBCeUNvbGxlY3Rpb25JZCAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1tzdGF0dXNdKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xyXG5cclxuXHRcdFx0XHRcdGlmIChyZXN1bHRbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXSA9IHtcclxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdGZpdHRpbmc6IFtdLFxyXG5cdFx0XHRcdFx0XHRcdG5vdGZpdHRpbmc6IFtdLFxyXG5cdFx0XHRcdFx0XHRcdG1heWJlOiBbXVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdW3N0YXR1c10ucHVzaChcclxuXHRcdFx0XHRcdFx0c3RhdHVzID09PSAnZml0dGluZycgPyB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpIDogaXRlbUlkXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRSZXF1ZXN0Q29sdW1ucyAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgZml0dGluZ0NvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuZml0dGluZztcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0NvbGxlY3Rpb24gb2YgZml0dGluZ0NvbGxlY3Rpb25zKVxyXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoZml0dGluZ0NvbGxlY3Rpb24uY29sdW1ucyk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcclxuXHR9XHJcblxyXG5cdGRlZmVyRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSBpdGVtRW50cnkuZGVmZXJyZWQ7XHJcblxyXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXIoZmFsc2UpO1xyXG5cclxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlLnRoZW4oXHJcblx0XHRcdHRoaXMuZGVmZXJFbnRyeS5iaW5kKHRoaXMpLFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTWVzc2FnZSAoYm9keSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBib2R5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtVHlwZSwgYm9keS5pdGVtc1tpdGVtVHlwZV0sIGJvZHkuY29sdW1uc1tpdGVtVHlwZV0pO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5zKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcclxuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWRTdHJpbmcgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWRTdHJpbmcpO1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSAraXRlbUlkU3RyaW5nO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGl0ZW1FbnRyeSkpO1xyXG5cdFx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtpdGVtSWRdLmZpdHRpbmcubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChcclxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCBmYWxzZSlcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApKTsgLy8gY29sbGVjdGlvbk1hcCBtaWdodCBjb250YWluICdtYXliZScgbWF0Y2hlc1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiByZXF1ZXN0SWRzfSwgcmVxdWVzdENvbHVtbnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIHJlc3BvbnNlLCBjb2xsZWN0aW9uTWFwKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUgKGJvZHkpIHtcclxuXHRcdGNvbnN0IGl0ZW1zID0gYm9keS5pdGVtcy5GdW5jdGlvbkNoYW5nZXNSZXNvbHZlO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xyXG5cdFx0XHRjb25zdCBmdW5jdGlvbklkID0gaXRlbXNbaXRlbUlkXS5wYXJlbnQuaXRlbUlkO1xyXG5cdFx0XHRjb25zdCBmdW5jdGlvbkVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGZ1bmN0aW9uSWQpO1xyXG5cclxuXHRcdFx0aWYgKGZ1bmN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCB8fCBmdW5jdGlvbkVudHJ5LmNvbHVtbnMucmVzcG9uc2UuRnVuY3RpZS5uZXdjaGFuZ2VzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoZnVuY3Rpb25FbnRyeSkpO1xyXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goZnVuY3Rpb25JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KCdGdW5jdGllJywge2lkOiByZXF1ZXN0SWRzfSwge0Z1bmN0aWU6IFsnbmV3Y2hhbmdlcyddfSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZHMgPSByZXNwb25zZS5saW5rcy5GdW5jdGllO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXNwb25zZUlkcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gPEl0ZW1FbnRyeT4gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdFx0XHRcdHt9LFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2VWYWx1ZSA9IHJlc3BvbnNlLmZldGNoVmFsdWUoJ0Z1bmN0aWUnLCBpdGVtSWQsICduZXdjaGFuZ2VzJyk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlVmFsdWUgPT09IHByZXZpb3VzLm5ld2NoYW5nZXMpXHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0XHRcdFx0LnNldEluaXRpYWwoe25ld2NoYW5nZXM6IHJlc3BvbnNlVmFsdWV9LCB0cnVlKVxyXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxyXG5cdFx0XHRcdFx0XHQucmVzb2x2ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVJlc3BvbnNlIChpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlcXVlc3RJZHMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gPEl0ZW1FbnRyeT4gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHRcdFx0Y29uc3QgaXNOZXcgPSBpdGVtRW50cnkuaW5pdGlhbCA9PT0gdW5kZWZpbmVkO1xyXG5cdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcclxuXHJcblx0XHRcdFx0aWYgKGlzTmV3KVxyXG5cdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGRlcml2ZWQgPSByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSW5mby5yb290KTtcclxuXHJcblx0XHRcdGlmIChpc05ldylcclxuXHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKGZpZWxkcywgZGVyaXZlZCwgY29sdW1uSW5mbyk7XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0XHRcdHt9LFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmIChleHBhbnNpb25SZXN1bHQgIT09IG51bGwpXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKGZpZWxkcywgZGVyaXZlZCwgZXhwYW5zaW9uUmVzdWx0KTtcclxuXHJcblx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHQuc2V0RGVyaXZlZChkZXJpdmVkKVxyXG5cdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMsIGZhbHNlKVxyXG5cdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcclxuXHRcdFx0XHRcdC5yZXNvbHZlKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZSkge1xyXG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcclxuXHJcblx0XHRpZiAoYm9keS5pdGVtVHlwZSA9PT0gJ0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUnKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZShib2R5KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShib2R5KS50aGVuKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlVXBkYXRlIChtZXNzYWdlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShtZXNzYWdlLmJvZHkpLnRoZW4oXHJcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRGVsZXRlIChtZXNzYWdlKSB7XHJcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGJvZHkuaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlDb250YWluaW5nSXRlbShib2R5Lml0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcclxuXHJcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb24sIGl0ZW1zOiBbXX07XHJcblxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXS5pdGVtcy5wdXNoKGl0ZW1JZCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRtYXBFbnRyeS5jb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKG1hcEVudHJ5Lml0ZW1zLCBudWxsLCB0cnVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPIVxyXG5cdGhhbmRsZUxpbmtNb3ZlICgpIHt9XHJcblxyXG4vKlx0aGFuZGxlTGlua01vdmUgKG1lc3NhZ2UpIHtcclxuXHRcdHByb2Nlc3NNZXNzYWdlKFxyXG5cdFx0XHRtZXNzYWdlLFxyXG5cdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHQvLyBmaXRzIGluIHRoaXMgY29sbGVjdGlvbiwgdG9kbzogZ2V0IHRoZSBvbGQgY29sbGVjdGlvbiBpdCBiZWxvbmdlZCB0b1xyXG5cdFx0XHRcdGNvbGxlY3Rpb24ubW92ZUl0ZW1zKGl0ZW1FbnRyaWVzLCBudWxsLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0Ly8gbWF5YmUgZml0c1xyXG5cdFx0XHRcdC8vIHRvZG86IGFsc28gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgb2xkIGNvbGxlY3Rpb25cclxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChhbmd1bGFyLmlkZW50aXR5LCBmYWxzZSwgZmFsc2UpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaWRzKSB7XHJcblx0XHRcdFx0Ly8gbm90IGZpdHRpbmcgaW4gdGhpcyBjb2xsZWN0aW9uLCByZW1vdmUgaXQgP1xyXG5cdFx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcbiovXHJcbn1cclxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0FwaVJlcXVlc3RTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3Nvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxhdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3Nvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkNhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm8nO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uVXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUFkbWluaXN0cmF0b3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXF1ZXN0U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlU2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vS2V5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTG9ja1NlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9Tb2NrZXRNZXNzYWdlSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vVXRpbCc7XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyKSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChyZXNwb25zZTogYW55KSB7XHJcblx0XHRyZXR1cm4gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yKHRoaXMuYXBpRm9ybWF0dGVyLCByZXNwb25zZSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEJhdGNoU3RhdHVzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoZ2V0SXRlbUlkOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IEl0ZW1JZCwgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBQcm9taXNlPEl0ZW1FbnRyeT4pOiBCYXRjaFN0YXR1cyB7XHJcblx0XHRyZXR1cm4gbmV3IEJhdGNoU3RhdHVzKFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxyXG5cdFx0XHRnZXRJdGVtSWQsXHJcblx0XHRcdGdldFByb21pc2VcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENoYW5nZXNDb21waWxhdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IH0gZnJvbSAnLi8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSk6IENoYW5nZXNDb21waWxhdGlvbiB7XHJcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNDb21waWxhdGlvbihcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHRzaW5nbGVJdGVtcyxcclxuXHRcdFx0Y29sbGVjdGlvbnNcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpRm9ybWF0dGVyLFxyXG5cdENoYW5nZXNQcm9jZXNzb3IsXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRJdGVtSGFuZGxlclxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKTogQ2hhbmdlc1Byb2Nlc3NvciB7XHJcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNQcm9jZXNzb3IoXHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25DYWNoZShcclxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIEl0ZW1FbnRyeVNlcnZpY2UsIEl0ZW1SZXF1ZXN0U2VydmljZSwgS2V5U2VydmljZSwgUXVlcnlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzLyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zKTogQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVudHJ5KFxyXG5cdFx0XHR0aGlzLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbk1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uTWF0Y2hlcihcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRcdGNvbGxlY3Rpb25DYWNoZXMsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRWRpdFJlc291cmNlLCBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVkaXRDb2xsZWN0aW9uKVxyXG5cdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UoXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25WaWV3UmVzb3VyY2UodGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogYW55IHwgYm9vbGVhbiwgcmVzcG9uc2VDb2x1bW5zOiBhbnkpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uRXhwYW5zaW9uKFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mb0ZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yICgpIHt9XHJcblxyXG5cdGNvbnN0cnVjdCAoYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcGFyZW50OiBDb2x1bW5JbmZvKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbHVtbkluZm8oYXBpQ29sdW1uLCBwYXJlbnQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtblNldEZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcclxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXHJcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxyXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcclxuXHRcdGVuYWJsZUNhY2hpbmc/LFxyXG5cdFx0aW5jbHVkZUlkQ29sdW1uP1xyXG5cdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnJlc29sdmUocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nLCBpbmNsdWRlSWRDb2x1bW4pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlUmVxdWVzdCwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGNvbXBpbGF0aW9uLCBjb2xsZWN0aW9uRW50cmllcywgcGFyYW1ldGVyTWFwLCBicmVha3VwQnlQYXJlbnQgPSBmYWxzZSkge1xyXG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHRjb21waWxhdGlvbixcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXHJcblx0XHRcdHBhcmFtZXRlck1hcCxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XHJcblx0XHRyZXR1cm4gbmV3IEl0ZW1DYWNoZSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtblNldFN0dWIpIHtcclxuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KFxyXG5cdFx0XHR0aGlzLnByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuYXV0aEludGVyZmFjZSxcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHRjb2x1bW5TZXRTdHViXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0TG9jYWxMaW5rZWQgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0bG9jYWxJdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXHJcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcclxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgY29sdW1uU2V0KTtcclxuXHJcblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucHJvY2Vzc0xvY2FsKGluaXRpYWwsIHt9LCB7fSwgY29udmVyc2lvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RMb2NhbCAoXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHRlbXBsYXRlOiBhbnksXHJcblx0XHRtb2RpZmllZDogRmllbGRNYXAsXHJcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbCxcclxuXHRcdGNvbnZlcnNpb25NYXA/LFxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb252ZXJzaW9uTWFwID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXHJcblx0XHRcdHRlbXBsYXRlLmNvbHVtbnMsXHJcblx0XHQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5wcm9jZXNzTG9jYWwodGVtcGxhdGUuZmllbGRzLCBtb2RpZmllZCwgZGVyaXZlZCwgY29udmVyc2lvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3REZWZlcnJlZCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhblxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnlTdHViID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeVN0dWIuZGVmZXIoZGVmZXJSZXF1ZXN0KTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5U3R1YjtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXHJcblx0XHRjb2x1bW5JbmZvOiBDb2x1bW5TZXRcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0Y29sdW1uSW5mby5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXHJcblx0XHRcdGNvbHVtbkluZm8sXHJcblx0XHQpLnByb2Nlc3MoXHJcblx0XHRcdGluaXRpYWwsIC8vIGNhbiBhbHNvIGJlIGEgdGVtcGxhdGVcclxuXHRcdFx0ZGVyaXZlZCxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgSXRlbVJlc291cmNlU2VydmljZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEVkaXRSZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zKSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRpZiAob3B0aW9ucy5lZGl0KSB7XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBFZGl0UmVzb3VyY2UoXHJcblx0XHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlciwgdGhpcy5sb2NrU2VydmljZSwgdGhpcy5jaGFuZ2VzUHJvY2Vzc29yLCB0aGlzLmVycm9ySGFuZGxlciwgdGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSwgb3B0aW9uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBWaWV3UmVzb3VyY2UoXHJcblx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMpOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lZGl0KSB7XHJcblx0XHRcdHJldHVybiBuZXcgRWRpdFJlc291cmNlKFxyXG5cdFx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdFx0aXRlbUVudHJ5LCBvcHRpb25zXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFZpZXdSZXNvdXJjZShcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRMb2NhbENhY2hlLFxuXHRMb2NrU2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGlkPzogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBMb2NhbENhY2hlKFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRpZFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlLCBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3QgKHJvb3RJdGVtOiBJdGVtRW50cnksIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSkge1xyXG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ocm9vdEl0ZW0sIHNpbmdsZUl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBRdWVyeU1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlclxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZHM6IEZpZWxkTWFwLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCk6IFF1ZXJ5TWF0Y2hlciB7XHJcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5TWF0Y2hlcihcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRmaWVsZHMsXHJcblx0XHRcdHBhcmVudFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgUXVlcnlQYXJzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAocXVlcnksIHBhcmFtZXRlcnM/KTogUXVlcnlQYXJzZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBRdWVyeVBhcnNlcihxdWVyeSwgcGFyYW1ldGVycyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwsIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCkge1xyXG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uKFxyXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1c0ZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm9GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXRGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xyXG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdEFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0Q29sdW1uQ2FjaGUsXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblV0aWwsXG5cdEl0ZW1BZG1pbmlzdHJhdG9yLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NrU2VydmljZSxcblx0UXVlcnlTZXJ2aWNlLFxuXHRTb2NrZXRNZXNzYWdlSGFuZGxlclxufSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LFxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENvbHVtbkluZm9GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblxuXHRhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcjtcblx0a2V5U2VydmljZTogS2V5U2VydmljZTtcblx0cXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2U7XG5cdGNvbHVtblV0aWw6IENvbHVtblV0aWw7XG5cblx0YXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk7XG5cblx0aXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZTtcblx0aXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZTtcblxuXHRpdGVtQWRtaW5pc3RyYXRvcjogSXRlbUFkbWluaXN0cmF0b3I7XG5cdGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlO1xuXHRjb2x1bW5DYWNoZTogQ29sdW1uQ2FjaGU7XG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XG5cblx0aXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeTtcblx0Y29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk7XG5cblx0aXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyO1xuXHRjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG5cdGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZTtcblx0Y29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZTtcblx0Y29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZTtcblx0Y29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeTtcblxuXHRxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5O1xuXHRpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5O1xuXHRyZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XG5cdGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTtcblx0Y29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0Y29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeTtcblx0Y29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5O1xuXHRjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3Rvcnk7XG5cdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3Rvcnk7XG5cdGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeTtcblx0bW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTtcblx0cXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3Rvcnk7XG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xuXHRzb2NrZXRNZXNzYWdlSGFuZGxlcjogU29ja2V0TWVzc2FnZUhhbmRsZXI7XG5cblx0YXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0YXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2U6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMudmVyc2lvbiA9ICcxLjEuOCc7XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlciA9IG5ldyBBcGlGb3JtYXR0ZXIoKTtcblx0XHR0aGlzLmtleVNlcnZpY2UgPSBuZXcgS2V5U2VydmljZSgpO1xuXHRcdHRoaXMucXVlcnlTZXJ2aWNlID0gbmV3IFF1ZXJ5U2VydmljZSgpO1xuXHRcdHRoaXMuY29sdW1uVXRpbCA9IG5ldyBDb2x1bW5VdGlsKCk7XG5cblx0XHR0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXG5cdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSA9IG5ldyBBcGlSZXF1ZXN0U2VydmljZShleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZSh0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSA9IG5ldyBJdGVtUmVzb3VyY2VTZXJ2aWNlKCk7XG5cblx0XHR0aGlzLmxvY2tTZXJ2aWNlID0gbmV3IExvY2tTZXJ2aWNlKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSA9IG5ldyBRdWVyeU1hdGNoZXJGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnkgPSBuZXcgSXRlbUNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5ID0gbmV3IEJhdGNoU3RhdHVzRmFjdG9yeShwcm9taXNlSW50ZXJmYWNlKTtcblxuXHRcdHRoaXMuY29sdW1uQ2FjaGUgPSBuZXcgQ29sdW1uQ2FjaGUodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtbkhhbmRsZXIgPSBuZXcgQ29sdW1uSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5DYWNoZSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5ID0gbmV3IENvbHVtbkluZm9GYWN0b3J5KCk7XG5cdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5ID0gbmV3IENvbHVtblNldEZhY3RvcnkodGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtblV0aWwsIHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkpO1xuXHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5jb2x1bW5VdGlsKTtcblxuXHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSA9IG5ldyBJdGVtRW50cnlGYWN0b3J5KFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcih0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXG5cdFx0KTtcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkgPSBuZXcgUXVlcnlQYXJzZXJGYWN0b3J5KCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UodGhpcy5xdWVyeVBhcnNlckZhY3RvcnksIHRoaXMucXVlcnlTZXJ2aWNlKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2Vcblx0XHQpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlciA9IG5ldyBDb2xsZWN0aW9uSGFuZGxlcihcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHRcdCk7XG5cblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSA9IG5ldyBDcmVhdGVSZXF1ZXN0RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSk7XG5cdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5ID0gbmV3IEl0ZW1SZXNvdXJjZUZhY3RvcnkodGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5KFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXG5cdFx0KTtcblxuXHRcdHRoaXMubG9jYWxDYWNoZUZhY3RvcnkgPSBuZXcgTG9jYWxDYWNoZUZhY3RvcnkoZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSgpO1xuXG5cdFx0dGhpcy5pdGVtQWRtaW5pc3RyYXRvciA9IG5ldyBJdGVtQWRtaW5pc3RyYXRvcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSxcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxuXHRcdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblxuXHRcdHRoaXMuc29ja2V0TWVzc2FnZUhhbmRsZXIgPSBuZXcgU29ja2V0TWVzc2FnZUhhbmRsZXIocHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AgKCkge1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vbWFpbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZhY3Rvcmllcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9